Repository navigation
Fix nameless live tool rows and prepare v1.0.13 - #151
Merged
shaohaozhi286 merged 2 commits intoOct 19, 2026
Merged
Conversation
During a running turn the Web transcript could show a run of rows labelled only "Tool" whose detail had a result but "请求未记录" for the request; they fixed themselves once the completed-turn self-heal reloaded history. Each tool call is mirrored on the wire by display-only tool_call / tool_result message events. They carried no call id and a content-hash message id, so the client had to guess their owner by global name and order, merged repeated calls with identical content (the same git status, the same output) into one item, and when switching into a running session appended replayed tool_result rows that history already held. - Daemon: tool_call / tool_result rows carry metadata tool_call_id, tool_index and tool_name, and their id includes the call id. - Web: live tool rows are never merged by message id; replayed rows are de-duplicated against history by call id (WS replay and REST catch-up). - Fallback: a current-turn result whose request never arrived shows its tool name, and a REST tail fetch inserts the persisted request before it. Tests: web/src/lib/sessionTranscriptToolRows.test.js, AgentLoopToolLifecycleEvents.PseudoToolRowsCarryCallIdentity. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Problem
During a running turn the Web transcript (seen on a colleague's phone) occasionally showed a run of rows labelled only Tool; expanding one showed the result but
请求未记录(旧记录未保存工具调用参数)for the request. The rows fixed themselves after the turn finished, when the completed-turn self-heal reloaded history.Root cause
Besides
tool_start/tool_end, every tool call is mirrored on the wire by two display-onlymessageevents,tool_callandtool_result. They carried no call id, and their message id was a content hash. As a result:git status, the same output) had the same id, so the live reducer merged the second into the first.tool_callrows were de-duplicated against history by content. Replayedtool_resultrows were not, because history stores them as roletool. They were appended as a run of nameless rows.Reproduced with a node script against
sessionTranscript.js+transcriptProjection.jsbefore the fix.Changes
tool_call/tool_resultrows now carrymetadata.tool_call_id,tool_indexandtool_name, matchingtool_start. Their id includes the call id, so it is distinct per call. Documented indocs/daemon-api.md.assistant.tool_callsrequest before it. Each call id is tried once, and the timer is not reset by streaming updates.CMakeLists.txt,vcpkg.json).Verification
node src/lib/runTests.js(web): 3281 passed, rebased on current mastervite build+check-regex-compat: OKweb/src/lib/sessionTranscriptToolRows.test.js(5 cases) andAgentLoopToolLifecycleEvents.PseudoToolRowsCarryCallIdentity-fsyntax-only). The full localacecode_unit_testsrun was still building when this PR was opened; CI on this PR covers it.🤖 Generated with Claude Code