Repository navigation
feat(agents): request summarized Claude thinking and label empty rows - #8051
Conversation
Claude models can return thinking sealed (signature only, no readable text), and the feed rendered that as an expandable Thinking row with a blank body. Keep the row, since the model did think, but show a muted "No readable reasoning tokens" notice with nothing to expand. Co-authored-by: Will Pfleger <pfleger.will@gmail.com> Signed-off-by: Will Pfleger <pfleger.will@gmail.com>
🔐 Codex Security Review
Review SummaryOverall Risk: HIGH
Findings[HIGH]
|
Opus omits readable thinking unless Claude Code is asked for summaries, so Thinking rows arrived empty. session/new now passes --thinking-display summarized through claude-agent-acp extraArgs, but only when the CLI in CLAUDE_CODE_EXECUTABLE reports 2.1.94 or newer: older CLIs exit on the unknown flag, and an unreadable version leaves sessions unchanged. Co-authored-by: Will Pfleger <pfleger.will@gmail.com> Signed-off-by: Will Pfleger <pfleger.will@gmail.com>
Leave summaries off when a launch prefix is set, since the wrapper can change which CLI the adapter runs, and require a clean version string. Tests now drive a Claude-named adapter through session/new with fake CLIs. Co-authored-by: Will Pfleger <pfleger.will@gmail.com> Signed-off-by: Will Pfleger <pfleger.will@gmail.com>
wesbillman
left a comment
There was a problem hiding this comment.
Carl, an automated reviewer, commenting via Wes’s GitHub account.
No blocking findings. Reviewed head 5e6b88a78346a704bec4927df3c06bde0e25b08d against base 448407a972ca9da0c1e13d49ee2c2170821be8a2, including independent UI and Claude-adapter review. One optional subprocess-hardening note is inline. This is a comment, not approval.
Validation: hosted Rust checks passed; Desktop passed 6,779 ordinary JS tests and 133 jsdom tests, including all three new renderer cases. CI tested merge cfa3b4143575768425644682184f188344bf16d6; its entire Desktop tree and all five changed files match the reviewed head. Confirmed the extraArgs contract against upstream adapter versions 0.36.1, 0.60.0 and 0.66.0.
Remaining gates: smoke shard 2 failed the unchanged empty-edit-delete.spec.ts:95 message-edit test on every attempt; I found no connection to this PR’s changed paths, but CI is not green. Security review is still running. Real authenticated Claude/Opus output and human acceptance remain unverified. Resolve or explicitly disposition the CI failure and verify the live thinking flow before treating this as ready to merge.
A hung launcher could leave its child running after the timeout, and the version output had no size limit. Co-authored-by: Will Pfleger <pfleger.will@gmail.com> Signed-off-by: Will Pfleger <pfleger.will@gmail.com>
Co-authored-by: Will Pfleger <pfleger.will@gmail.com> Signed-off-by: Will Pfleger <pfleger.will@gmail.com>
Brings 16 upstream block/buzz commits (a14107a) into the fork integration branch: ACP mention/edit steering (block#6131, block#6132), quiet-host recovery wakes (block#7459), relay NIP-FI shadow mode (block#8034, block#8062), writer lock foundations (block#7706), Goose MCP handshake (block#8037), Claude model names (block#8053), summarized thinking (block#8051) and mobile iOS changes. Merged cleanly without textual conflicts. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: Arnoldinh0 <arnaudlafosse92100@gmail.com>
Claude Code agents on Opus showed Thinking rows that opened to nothing. Opus returns no readable thinking unless Claude Code is asked for summaries, and Buzz never asked. Sonnet returns readable thinking either way.
Request summaries from Claude Code.
session_new_fullnow adds_meta.claudeCode.options.extraArgs: {"thinking-display": "summarized"}for the Claude adapter. claude-agent-acp spreadsextraArgsinto the CLI's arguments; 0.36.1, 0.60.0 and 0.66.0 all read the same shape. The value is merged into the existing_meta, sosystemPromptandsessionTitleare kept.session_new_fullis the only place Buzz sendssession/new, so agent sessions and model discovery both get it.Only for a CLI that accepts the flag.
--thinking-displayfirst shipped in Claude Code 2.1.94, and older CLIs exit on unknown flags, which would fail every session start. When the adapter is spawned, Buzz runs$CLAUDE_CODE_EXECUTABLE --versiononce with a 5-second limit, reading at most 256 bytes of output and killing its whole process group on timeout, and sends the flag only on 2.1.94 or newer. The flag is left off, and sessions start exactly as before, when:CLAUDE_CODE_EXECUTABLEis unset (the adapter then runs its own bundled CLI, which Buzz can't inspect) or empty;major.minor.patchversion;BUZZ_ACP_LAUNCH_PREFIXis set, since the wrapper can change which CLI the adapter actually runs.The result is logged once at debug level.
Label rows that still have no text. A Thinking row whose text is empty or only whitespace keeps its header and shows a muted "No readable reasoning tokens", with nothing to expand. This covers models or CLIs that still return no readable thinking. If text arrives later in the same row, it renders as an expandable section as before.
ThoughtActivityis the only component that draws Thinking rows.