package controller import ( "context" "errors" "fmt" "log" "time" "forgejo.alexma.top/alexma233/composia/internal/platform/store" ) func runTaskOutbox(ctx context.Context, server *agentReportServer) { for { event, err := server.db.NextTaskOutboxEvent(ctx, time.Now().UTC()) if errors.Is(err, store.ErrNoOutboxEvent) { if !sleepContext(ctx, time.Second) { return } continue } if err != nil { log.Printf("task outbox read failed: %v", err) if !sleepContext(ctx, time.Second) { return } continue } if err := server.processTaskOutboxEvent(ctx, event); err != nil { attempts := event.Attempts + 1 delay := minDuration(time.Duration(1<