diff --git a/pkg/agent/core.go b/pkg/agent/core.go index 5be659c..a9ad3db 100644 --- a/pkg/agent/core.go +++ b/pkg/agent/core.go @@ -334,7 +334,6 @@ func (s *agentCore) Submit(ctx context.Context, input string, handler EventHandl if err != nil && !errors.Is(err, context.Canceled) && !errors.Is(err, ErrInterrupted) { handler(Event{Role: "error", Content: err.Error()}) - s.session.rollback() } handler(Event{Role: "newline"}) diff --git a/pkg/agent/loop.go b/pkg/agent/loop.go index bc17d76..fcb402d 100644 --- a/pkg/agent/loop.go +++ b/pkg/agent/loop.go @@ -48,11 +48,14 @@ func run(ctx context.Context, cfg loopConfig, state state) error { if err == nil { break } + if ctx.Err() != nil { + recordInterruption(state, "request") + return ctx.Err() + } var rlErr *backend.RateLimitError if !errors.As(err, &rlErr) || attempt >= maxRateLimitRetries { return fmt.Errorf("step %d: %w", step, err) } - // Exponential backoff: 5s, 10s, 20s — unless the server told us exactly. wait := rlErr.RetryAfter if wait == 0 { wait = time.Duration(5< 0 && s.messages[i-1].Role != "user" { - i-- - } - s.messages = s.messages[:i] -} - func (s *Session) appendUserMessage(content string) { s.complete = false s.messages = append(s.messages, backend.Message{Role: "user", Content: content})