Uh oh!
There was an error while loading. Please reload this page.
fix(claude): preview images read from the workspace - #9119
Conversation
Uh oh!
There was an error while loading. Please reload this page.
Thread transfer impact✅ Thread transfer remains within every enforced ceiling.
Baseline: Scenario and decoded snapshot size10 historical turns, 5 command tools per turn, 878.9 KiB retained MCP result per historical turn, and a 1.05 MiB retained result in the measured turn.
Updated in place by a trusted workflow. PR artifacts are strictly validated and never executed. |
ApprovabilityVerdict: Approved at Macroscope's review found this PR approvable — This is a focused fix that carries Claude workspace image paths through the existing server and web/mobile work-log pipeline, with ordinary text reads unaffected. The behavior is narrowly scoped and covered by targeted streaming, projection, grouping, and rendering tests. You can add or adjust custom eligibility rules. Learn more. |
53c16c6 to
2387b4eCompareRows recorded before image classification keep `dynamic_tool_call` as their item type. They now render the image but still grouped as "Used 1 tool" with the generic icon. Treat any entry with a `viewedImagePath` as a read. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Dismissing prior approval to re-evaluate b9f4464
Uh oh!
There was an error while loading. Please reload this page.
## What's Changed * perf(client-runtime): keep turn and checkpoint refs stable while streaming by @t3dotgg in pingdotgg/t3code#9145 * perf(clients): lease sidebar status by visibility by @StiensWout in pingdotgg/t3code#9052 * fix(desktop): show newest changes in nightly previews by @t3dotgg in pingdotgg/t3code#9138 * fix(settings): sync auto-settle and other shared preferences across environments by @t3dotgg in pingdotgg/t3code#9147 * fix(server): prevent accidental service downgrades by @t3dotgg in pingdotgg/t3code#5302 * fix(server): keep attachments until the command commits by @t3dotgg in pingdotgg/t3code#7941 * fix(claude): preview images read from the workspace by @t3dotgg in pingdotgg/t3code#9119 * fix(web): keep generated muted foreground dimmer than entered text by @flamboh in pingdotgg/t3code#9113 * fix(clients): stop repeating expanded commands by @t3dotgg in pingdotgg/t3code#9120 * fix(grok): health check, model selection, and stop all work against the real CLI by @t3dotgg in pingdotgg/t3code#9154 * perf(web): halve the cold-start bundle by splitting Clerk and cold routes by @StiensWout in pingdotgg/t3code#9058 * feat(desktop): update the desktop app on remote Macs from the Update button by @t3dotgg in pingdotgg/t3code#6554 * test(server): measure shell, second client, and reconnect transfer by @t3dotgg in pingdotgg/t3code#9157 * fix(web): project default model works on the hosted app by @juliusmarminge in pingdotgg/t3code#9142 * fix(web): darken neutral control surfaces by @maria-rcks in pingdotgg/t3code#9064 * fix(web): preserve panel state across workspace refreshes by @maria-rcks in pingdotgg/t3code#8968 * feat(files): open markdown, HTML, and PDF files outside the workspace by @juliusmarminge in pingdotgg/t3code#9140 * feat(web): render HTML and PDF files in the file viewer by @juliusmarminge in pingdotgg/t3code#9143 * fix(web): compact project settings actions by @maria-rcks in pingdotgg/t3code#9160 * fix(web): browse folders from file breadcrumbs by @404khai in pingdotgg/t3code#8910 ## New Contributors * @404khai made their first contribution in pingdotgg/t3code#8910 **Full Changelog**: pingdotgg/t3code@v0.0.39-nightly.20260902.1252...v0.0.39-nightly.20260902.1253 Upstream release: https://github.com/pingdotgg/t3code/releases/tag/v0.0.39-nightly.20260902.1253
Claude
Readtool calls stayed as generic tool rows. Activity projection also removed the full file path, so the existing web and mobile image renderer had no stable path to load.Classify a Claude
Readcall asimage_viewonly after its streamed input identifies an image file. Preserve the full path asimagePaththrough projection and work-log lifecycle merging. The projection also derives this field from old completed Claude payloads, while normal text reads stay unchanged. Legacy rows that carry an image path now group and icon as reads instead of "Used 1 tool".The image renderer landed in #8936. This change composes with the external-host asset access work in #9023 and does not change asset authorization.
Known gap:
tool.updatedrows recorded before this change were slimmed at ingest without the input, so an old interrupted image read still shows no image. Completed reads backfill.Checks:
toolGroupActioncase.Not yet verified in a running client.
First commit by GPT-5.6 Sol with Codex in T3 Code. Audit and follow-up fix by Claude Fable 5.1 with Claude Code.
Note
Low Risk
Display and activity-shaping changes only; no auth or asset-access changes, with broad test coverage on adapter, projection, and client merge behavior.
Overview
Claude Read calls on workspace image files now surface as
image_viewin the thread work log instead of generic tool rows, including while the tool input is still streaming.The Claude adapter classifies reads using
isWorkspaceImagePreviewPathon the parsedfile_path/path, updates item type and detail asinput_json_deltaarrives, and uses the image path as the summary when applicable. Activity projection addsprojectViewedImagePathso the full path is stored asdata.imagePath(including on re-projection and from legacy Read payloads); plain text reads are unchanged.Web and mobile work-log derivation adds
viewedImagePathand keeps it whentool.updatedevents collapse intotool.completed, so truncateddetailstrings no longer drop the path. Client-runtime presentation prefersviewedImagePathfor previews and treats entries with that field as read actions for grouping.Reviewed by Cursor Bugbot for commit b9f4464. Bugbot is set up for automated code reviews on this repo. Configure here.
Note
Add regression test for streamed Claude Read image metadata in
buildThreadFeedAdds a test in threadActivity.test.ts that exercises an in-progress and completed image-view activity sharing the same tool call, where only the update carries the full image path. The test verifies that collapsing the lifecycle into one activity group preserves the full viewed image path.
Macroscope summarized b9f4464.