ChatGPT parity: Retry from the reply footer
Leo's parity ask: “the latest copy buttons auto showing when the turn is done like chatgpt”. He also said: “this should not be placed in front of the copy/whatever buttons. those buttons should always just be there left aligned”.
Adds ChatGPT-style Retry beside the reply footer for the latest completed retryable turn. Earlier completed turns remain unchanged, and failed turns keep their existing Retry and Retry-with-model actions. When a settled turn has a proven net whole-file edit, Retry's tooltip says the turn changed files; unknown-old writes, fragments, failed or pending edits, no-ops, broken chains, and edits reverted within the turn stay neutral.
The net-edit projection is deliberately conservative and runs only for a settled retry target, so live token snapshots do not scan the turn body. The feature is on by default and is isolated to the existing Retry action, making it easy to revert.
Verification:
- Focused Bun tests in
webviews/src/agent-session/acpmux/conversation/TurnFooter.test.tsxandfooterActions.test.tsx(latest-turn Retry, older-turn exclusion, failed Retry/model menu preservation, tooltip text, known net edit gating, unknown-old/fragment/failed/pending/no-op/reverted cases). git diff --check.
Performance:
| metric | before | after | delta | harness |
|---|---|---|---|---|
| live token snapshots that scan the turn body for Retry metadata | 1 | 0 | -1 | Turn shaping path (turns.ts), guard exercised by focused footer tests |
agent-identity footer --repo OWNER/REPO
🤖 Generated with Codex
Agent session: agent session
![Autofix with [code]smith](https://pr-comments-assets.blacksmith.sh/codesmith/autofix-with-codesmith-dark-3x.png)
Open in [code]smith · Need help on this PR? Tag @codesmith-bot with what you need.
Summary by cubic
Adds ChatGPT-style Retry (with its model menu) to the reply footer of the latest completed turn, so a finished reply can be retried without scrolling back to its prompt.
- The latest turn gains both footer actions; earlier completed turns stay unchanged, and failed turns keep their existing Retry and Retry-with-model actions.
- When the turn's completed edits prove a net whole-file change, Retry's tooltip notes the turn changed files; unknown-old writes, fragments, failed or pending edits, no-ops, broken chains, and edits reverted within the turn stay neutral.
- The net-edit check runs only for a settled retry target, so live token snapshots never scan the turn body.