Repository navigation
Replies: 2 comments
TriageConfirmed on current This is not a duplicate of #6388 (Bash output never renders). Same general “persisted tool payload doesn’t reach the expanded row” shape, different field and UI. What the code does today
data: { toolName, input } // input has file_path, old_string, new_string, contentThere is no Claude The drop happens in The UI would not show it even if it survived: web (
Not already in flightNo open PR implements this. Related but not a fix: #7184 (Bash output), #5482 (payload slimming), #9549 (expanded-row cleanup). Closed #5471 (rich transcript / inline diffs) is not a leftover close. Suggested fixTreat this as an accepted enhancement. Keep collapsed rows as they are. On expand, show a bounded verbatim before/after (plus a truncation flag) in the existing work-log row — no new surface, no Codex
Severity: medium UX gap. Type: enhancement. |
|
Note Written by Claude Opus 5.5 on behalf of Bryan Joshua Pedini (@bryanpedini). I'd like to widen this beyond Claude Today an expanded What
|
| Provider | Field | Source |
|---|---|---|
| Codex | diffStr |
patch from the file change (CodexAdapterV2.ts#L3654) |
| OpenCode | oldStr / newStr / diffStr |
tool input and completed metadata (toolItems.ts#L105-L118) |
| ACP | diffStr |
diff tool content, #13579 (adapter.ts#L3774) |
| Claude | diffStr |
the tool result text, not old_string / new_string / content (ClaudeAdapterV2.ts#L4964-L4970) |
2. The server stores it, bounded to 32 KB. boundFileChangeForStorage (WireProjection.ts#L42-L54), called from ProviderEventIngestor (#L639).
3. Clients never receive it unless the edit failed.
projectTurnItemForWiredropsdiffStr/oldStr/newStr(WireProjection.ts#L113-L118).projectTurnItemForDetail, the on-demandgetTurnItempath, sendsfile_changeback through the wire projection (WireProjection.ts#L201-L203).toolItemForDisplaydrops them again on the client (presentation.ts#L40-L46).
4. The on-demand detail path already exists, for commands and dynamic tools only. An expanded command_execution or dynamic_tool row fetches the full stored item through getTurnItem (turnItemNeedsDetailFetch → useFetchedTurnItem, bounded to 256 KB). file_change never takes that path (itemDetail.ts#L128-L137), so the inspector renders only path, counts and Open diff (V2ItemInspector.tsx#L284-L308).
Proposal
Extend the existing on-demand detail path to file_change. When a row is expanded, fetch the stored item and render its diffStr (or a diff built from oldStr / newStr) inline, with the same diff renderer the side panel uses. It does not depend on Git, so it covers non-Git projects and files outside the workspace too.
For Claude this also needs the adapter to keep old_string / new_string / content as oldStr / newStr, as suggested in the triage above.
Scope I'm happy with:
- Behind a setting (something like "Show edit diffs in the thread" or a general verbose option), off by default.
- The Diff side panel and Open diff stay exactly as they are.
- Expanded rows only. Collapsed rows and the wire payload stay as today.
- The existing 32 KB storage bound and truncation are fine.
Related
- This discussion's triage ([Feature]: Surface Claude Edit/Write before/after text in expanded tool entries #10970, converted here).
- Show inline file-change diffs in chat timeline tool rows #7428: inline file-change diffs in timeline tool rows, closed without merge.
- fix(server): show diffs for ACP edits that send oldText/newText #13579: ACP
oldText/newText→diffStr, merged. - [Feature]: Show changed files from repositories modified by the agent #12089: edits to repositories outside the workspace are invisible in Changed files / Diff.
Seen on t3code-bin 0.1.0 (Arch Linux), checked against main @ 60b35a1e.
Uh oh!
There was an error while loading. Please reload this page.
Summary
Expanded tool entries for Claude
Edit/Writecalls show file paths but never the changed text — no before/after and no diff. Codex turns already surfaceunifiedDiffdata; the Claude path has no equivalent, so reviewing what an edit actually changed requires leaving T3 or re-reading the file.Current behavior
old_string/new_string/content) never reaches the UI in any form.main: a code search shows noold_string/new_string/unifiedDiffhandling inClaudeAdapter.ts—unifiedDiffexists only around the Codex/checkpoint paths, which is a different mechanism (turn-level summaries, not per-edit before/after).Expected behavior
Repro
A per-field bound keeps this consistent with the recent payload-slimming direction. Happy to provide fixtures or help validate a bounded-payload design.
All reactions