mirror of
https://github.com/NanmiCoder/cc-haha
synced 2026-07-31 16:33:34 +08:00
One continuous thinking block arrived in the chat split across several `已思考` bubbles, with nothing rendered between them. The report blamed the model — DeepSeek — but the provider is not involved: the trace holds a single well-formed thinking block, and reopening the session restores it, because history is rebuilt from the transcript's own blocks. The split comes from three pieces that are each correct alone. A background (async) agent's tool activity is re-emitted as a normal `tool_use_complete` / `tool_result` carrying `parentToolUseId` (`handler.ts`, added in 1c554dc30 so background subagents stop showing "no tool activity"). Those land at the end of `messages`. `MessageList` then folds them into the parent agent card rather than rendering them inline. But the merge test for a streamed thinking chunk asked whether the *array tail* was thinking — and the tail was now a child tool call, so every chunk after one started a new bubble. The split points are the moments background activity arrived, which is why they look arbitrary and why the gaps between bubbles are empty. `findStreamMergeTargetIndex` skips those bubbled-child messages and merges against the last real main-stream message instead. The same tail test backed `appendAssistantTextMessage`, so a reply could be chopped the same way; both now share the helper. Reproducing needs thinking mode, a `run_in_background` agent, and child activity landing mid-thought — rare enough that most sessions never see it, and near-certain for a slow reasoning model made to wait on agents. The screenshot shows exactly that: four subagents running, and the mangled thought reads "The agents are still running. Let me wait a bit." Covered by three tests: thinking stays one block across interleaved child activity, a reply stays one block, and the main agent's own tool call still opens a new block. Verified against the reproduction before and after. Desktop suite 3050 tests green, tsc and build clean. (cherry picked from commit 7d8a22f9465b8f987193dda7af5cae3858c481fc)
Claude Code Haha Desktop
基于 Tauri 2 + React 的桌面客户端。
开发
bun install
bun run tauri dev
构建
# macOS (Apple Silicon)
./scripts/build-macos-arm64.sh
# Windows (x64, MSI only)
.\scripts\build-windows-x64.ps1
构建产物位于 build-artifacts/ 目录,文件名会显式包含平台、架构和包类型。
常见问题
macOS 提示"已损坏,无法打开"
xattr -cr /Applications/Claude\ Code\ Haha.app