picoclaw/pkg/agent
Administrator c7ea018a73 fix(agent): prevent duplicate history during subturn context recoveries
Problem:
During subturn context limit or truncation recoveries, the recovery loops repeatedly
called `runAgentLoop` with the same or modified `UserMessage`. Because `runAgentLoop`
unconditionally adds the `UserMessage` to the session history, this resulted in:
1. Duplicate User Messages polluting the history upon `context_length_exceeded` retries.
2. The possibility of injecting empty User Messages if `opts.UserMessage` was artificially blanked out to work around the duplication.
3. Messy or duplicate entries during `finish_reason="truncated"` recovery injections.

Solution:
- Introduce `SkipAddUserMessage` boolean to `processOptions` to explicitly control whether the agent loop should write the user prompt to history.
- Add an explicit `opts.UserMessage != ""` check in `runAgentLoop` to prevent polluting history with empty message content.
- In `subturn.go`'s recovery loop, set `SkipAddUserMessage: contextRetryCount > 0` to skip writing the user message on context
2026-03-18 12:18:32 +08:00
..
context.go Merge pull request #1207 from afjcjsbx/feat/debug-mode-no-truncate 2026-03-10 17:13:44 +01:00
context_cache_test.go fix(agent): invalidate system prompt cache for global/builtin skills (#845) 2026-03-03 18:25:00 +08:00
context_test.go fix deepseek-chat bug (#1066) 2026-03-06 16:04:31 +08:00
eventbus_mock.go feat(agent): port subturn PoC to refactor/agent branch 2026-03-16 14:31:32 +08:00
instance.go fix(tools): allow sandbox access to temp media files 2026-03-14 12:02:06 +08:00
instance_test.go add systray ui for all platform (#1649) 2026-03-17 14:12:32 +08:00
loop.go fix(agent): prevent duplicate history during subturn context recoveries 2026-03-18 12:18:32 +08:00
loop_mcp.go Fix/Add warning tips for MCP initialization when no valid servers configured (#1497) 2026-03-13 16:43:00 +08:00
loop_media.go feat: expose local file paths for non-image media to enable agent file tools (#1516) 2026-03-14 12:09:11 +08:00
loop_test.go feat: expose local file paths for non-image media to enable agent file tools (#1516) 2026-03-14 12:09:11 +08:00
memory.go refactor(modernize): apply safe modernize fixes 2026-02-27 16:35:07 +08:00
mock_provider_test.go feat(fmt): Fix formatting 2026-02-19 22:05:15 +02:00
registry.go feat(session): integrate JSONL persistence into agent loop (#1170) 2026-03-10 15:14:09 +08:00
registry_test.go feat(fmt): Run formatters 2026-02-18 21:48:23 +02:00
steering.go feat(agent): implement graceful finish vs hard abort for SubTurn lifecycle 2026-03-17 23:06:16 +08:00
steering_test.go feat(agent): steering (#1517) 2026-03-16 00:08:16 +08:00
subturn.go fix(agent): prevent duplicate history during subturn context recoveries 2026-03-18 12:18:32 +08:00
subturn_test.go feat(agent): implement graceful finish vs hard abort for SubTurn lifecycle 2026-03-17 23:06:16 +08:00
thinking.go feat: add extended thinking support for Anthropic models (#1076) 2026-03-05 09:51:18 +08:00
thinking_test.go feat: add extended thinking support for Anthropic models (#1076) 2026-03-05 09:51:18 +08:00
turn_state.go fix(agent): prevent duplicate history during subturn context recoveries 2026-03-18 12:18:32 +08:00