Todo 53.1: EventPrompt Order Preservation
Problem
Commit cf481ab correctly made EventPrompt derived state, but removeEventPromptItems() deletes it and ensureEventPromptItem() appends the replacement. Tool changes, mode round trips, and restored prompt lists therefore move EventPrompt to the end and change serialized system-message order.
Scope
- Preserve the first generated EventPrompt's position relative to retained custom prompts.
- Remember that insertion position while
chat_agent_tools hides EventPrompt.
- Restore the saved typed/legacy EventPrompt position when loading prompt items.
- Continue removing duplicate generated EventPrompt items and preserving ordinary custom prompts.
- Do not add frontend dependencies or change backend contracts.
TDD Steps
- Add a failing regression in
tests/test_websocket_api.py that requires an explicit EventPrompt insertion-position state/helper, captures position before removal, and reinserts with insertBefore instead of unconditional append.
- Run the focused test and confirm it fails for the current append-only implementation.
- Implement the smallest position-preserving logic in
src/agent_lab/presentation/static/app.js.
- Verify tool refresh,
dual_agent -> chat_agent_tools -> dual_agent, and restore paths use the same remembered position.
Run:
uv run pytest tests/test_websocket_api.py -k "event_prompt or prompt_restore or tool_mode" -q
node --check src/agent_lab/presentation/static/app.js
git diff --check
Commit with the solved problem and ordering risk, then repeat spec and code-quality reviews.
Acceptance
- EventPrompt content and visibility remain mode/tool-derived.
- At most one EventPrompt exists.
- Refreshing tools does not move EventPrompt.
- Hiding and showing EventPrompt restores its previous insertion position.
- Restoring typed or legacy prompt data derives the insertion position from the first generated EventPrompt while discarding duplicates.
- Custom prompt order and outbound request contracts remain unchanged.