Skip to content

feat(tui): partition tool display by type — collapse read/search, show mutation tools individually#5661

Merged
chiga0 merged 24 commits into
mainfrom
worktree-feat+tui-tool-collapse
Jun 25, 2026
Merged

feat(tui): partition tool display by type — collapse read/search, show mutation tools individually#5661
chiga0 merged 24 commits into
mainfrom
worktree-feat+tui-tool-collapse

Conversation

@chiga0

@chiga0 chiga0 commented Jun 22, 2026

Copy link
Copy Markdown
Collaborator

What this PR does

Replaces the binary compact/full rendering model with a type-based partition:

Category Tools Display
Collapsible (read/search/list) ReadFile, Grep, Glob, LS Collapsed into a semantic summary line: "Searched 1 pattern, read 3 files"
Non-collapsible (mutation) Shell, Edit, Write, Agent Rendered individually with full results visible — Shell output stays in scrollback, Edit shows diff, plan/task results always shown

Key behaviors:

  • buildToolSummary() generates human-readable descriptions with past/present tense verbs
  • isCollapsibleTool() predicate determines tool category — also gates shouldCollapseResult in ToolMessage so adding a category suppresses both grouping AND result output
  • Force-expand all tools individually when confirming / error / user-initiated / embedded shell focused / terminal subagent
  • Completed collapsible tools (read/search/list) have text/ANSI output hidden; non-collapsible tools (Shell/Edit/Agent) always show their results — their output IS the answer
  • Diff, plan, todo, and task results always render (non-repeatable info the user needs inline)
  • Memory-only groups retain their dedicated "Recalled N memories / Wrote N memories" summary

Why it's needed

The previous approach collapsed ALL completed tools into a summary (compact mode) or showed ALL results inline (full mode). Neither matched the ideal: read/search output is rarely useful in scrollback, but edit diffs and shell errors need to stay visible. The type-based partition gives the best of both.

Related PRs

Reviewer Test Plan

How to verify

  1. Run npm run dev and execute a multi-step task (e.g., "read package.json, grep for imports, edit a file, run tests").
  2. Confirm read/search/list tools collapse into a semantic summary line (e.g., "Searched 1 pattern, read 1 file").
  3. Confirm mutation tools (Shell, Edit, Write) render individually with their header.
  4. Confirm completed Shell output stays visible in scrollback; completed Edit shows diff; completed plan shows plan text.
  5. Confirm executing tools show live results (streaming output).
  6. Confirm error / confirming tools force-expand all tools in the group.
  7. Run unit tests: cd packages/cli && npx vitest run src/ui/components/messages/CompactToolGroupDisplay.test.tsx src/ui/components/messages/ToolGroupMessage.test.tsx src/ui/components/messages/ToolMessage.test.tsx

Tested on

OS Status
🍏 macOS
🪟 Windows ⚠️
🐧 Linux ⚠️

Risk & Scope

  • New/renamed tools fall back to 'other' category → "Used N tools" until the name→category map is updated.
  • mergeCompactToolGroups utility is now dead code (only compactToggleHasVisualEffect is still imported by AppContainer). Cleanup deferred to feat(tui): Ctrl+O frozen transcript view and unified tool output rendering #5666.
  • No breaking changes. Compact mode (Ctrl+O) still works; it now only affects active tool groups.
中文说明

这个 PR 做了什么

将工具展示从二元模式(compact/full)改为按类型分区

  • 可折叠(read/search/list)→ 折叠为语义摘要行:"Searched 1 pattern, read 3 files"
  • 不可折叠(mutation:Shell/Edit/Write/Agent)→ 逐个展示,结果始终可见 — Shell 输出保留在滚动历史中,Edit 显示 diff,plan/task 结果始终内联

关联 PR

@chiga0 chiga0 left a comment

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Overview

Final Verdict: LGTM with one Minor — Well-designed unification of tool output rendering. The buildToolSummary() category-based approach with tense support is clean, the border removal simplifies the visual hierarchy, and test coverage is comprehensive (10 dedicated buildToolSummary unit tests + updated component tests + snapshot updates).

Findings

  • Minor: 1 item
  • Nit: 0 items

Minor

i18n gap in buildToolSummary (CompactToolGroupDisplay.tsx)

The function uses hardcoded English verbs ("Read", "Edited", "Ran", "Searched", etc.) and noun forms ("file/files", "command/commands"). The old code used localizeToolDisplayName() from i18n/index.js, and ToolMessage.tsx still uses it for individual tool names. When tools are displayed in the new unified collapsed view, the summary line won't be localized.

For the initial launch this may be acceptable if English-only TUI is the target, but worth tracking as a follow-up if i18n is a priority. The fix would be to extract verb/noun strings into the i18n system or use localizeToolDisplayName for the tool name portion.

Key Observations

The design is solid — replacing the dual-mode toggle with always-collapsed completed tools eliminates unnecessary cognitive overhead. The semantic summary ("Read 3 files, edited 2 files, ran 1 command") is significantly more informative than the old "ReadFile × 3" format. Category-based grouping with CATEGORY_ORDER ensures commands appear first, which matches user priorities.

The border removal is a clean visual simplification. The Ink rendering bug comment that motivated the width constraint is still relevant (non-border Box still needs width to prevent layout issues), and the code correctly preserves it.

The showCompact condition change (compactMode || allComplete) is the right approach — it ensures the compact summary shows for completed groups regardless of mode, while still respecting the compact mode toggle for in-progress groups.

Note: PR is currently in CONFLICTING state — merge conflicts need resolution before merge.


This review was generated by QoderWork AI

@chiga0

chiga0 commented Jun 22, 2026

Copy link
Copy Markdown
Collaborator Author

Code review: unified tool output / semantic summaries

我按原始需求(“不要再区分精简/详细模式,完成后的工具调用尽量展示类似 Read/List one file, updated two files 的有用概览,减少原始输出噪音”)对设计文档、实际实现、相关现有源码和测试做了一轮深审。整体方向是对的:PR 把 completed tool group 推向统一的语义概览,并用 buildToolSummary() 做本地类别聚合,确实比旧的 raw result / Tool x N 更接近目标。但当前实现还不能合入,原因如下。

阻塞/高优先级问题

  1. PR 当前有真实 merge conflict,不能直接合入。

    • gh pr view 5661 显示 mergeable: CONFLICTING
    • 本地 git merge-tree $(git merge-base origin/main origin/pr/5661) origin/main origin/pr/5661 确认 CompactToolGroupDisplay.tsxToolGroupMessage.tsxToolMessage.tsx 以及相关 tests/snapshots 都有冲突块。
    • 所以后续行为结论都是基于 PR head 1915d3dc2 的审计,真正合并前必须先解冲突并重新跑验证。
  2. 非 compact + virtual viewport 下会重复显示同一个 LLM summary。
    源码链路:

    • ToolGroupMessage.tsx 现在让 completed groups 也走 compact header:showCompact = (compactMode || allComplete) ...
    • MainContent.tsx#getCompactLabel() 只检查 !uiState.useTerminalBuffer || compactInline,没有检查 compactMode,所以在 virtual viewport / terminal buffer 下,非 compact 模式也会把 compactLabel 传给 completed tool group header。
    • HistoryItemDisplay.tsxtool_use_summary 的 standalone 行在 compactMode=false 时总是渲染:itemForDisplay.type === 'tool_use_summary' && (!compactMode || !summaryAbsorbed)
    • 结果:同一个 fast-model summary 可能既替换 completed group header,又在下一行显示 ● <summary>。这和“减少无效信息干扰 / 一个模式”相冲突。

    建议:明确一个消费规则。比如 getCompactLabel()!compactMode 时返回 undefined,保留 standalone ● summary;或者反过来让 completed group header 消费 label,并在非 compact 下把对应 tool_use_summary 标记为 absorbed,避免重复。

  3. memory-only groups 的专门语义摘要被新 compact 分支吞掉。
    源码链路:

    • ToolGroupMessage.tsx 先计算 isMemoryOnlyGroup,后面本来有专门的 memory summary 分支:Recalled N memories / Wrote N memories
    • 但新的 showCompact 分支位于 memory-only 分支之前,completed memory-only group 会先 return <CompactToolGroupDisplay />
    • 这会把 memory 操作退化成普通文件读写摘要,丢失“memory”这个用户真正关心的语义。

    建议:把 completed memory-only 分支移到 showCompact 之前,或者把 memory operation 作为 buildToolSummary() 的一等 category,而不是让它落到普通 read/write file 类别。

  4. Canceled 工具没有按设计进入统一概览。
    设计文档里明确列了 Error/Canceled -> past tense,但实现只把 Success | Error 算作 allCompleteToolMessage 也只 collapse Success

    • allComplete: t.status === Success || t.status === Error
    • shouldCollapse: status === Success && !forceShowResult

    结果:非 compact 下 canceled tool 仍然可能走 expanded/raw result path,和设计里的 “completed/error/canceled 都是统一语义概览” 不一致。

    建议:确认产品语义。如果 canceled 也应按设计归入完成态,需要把 Canceled 纳入 group-level complete 判断,并决定 canceled result 是否应该 collapse;如果不想 collapse canceled,则设计文档要改掉 Error/Canceled 这一行,测试也要覆盖该差异。

中低优先级问题

  1. 设计示例与实现排序不一致。
    设计文档示例是 Read 3 files, edited 2 files, ran 1 command,但实现的 CATEGORY_ORDERcommand 放第一,测试也锁定了 Ran npm test, read a.ts, edited b.ts。这不一定错,但属于设计/实现不一致。建议二选一:要么改设计文档,要么改 category order。

  2. 测试用例还没有覆盖几个关键需求边界。
    当前新增测试主要覆盖 buildToolSummary() 的 happy path 和 completed collapse,但缺少:

    • 非 compact + tool_use_summary 不重复显示。
    • memory-only group 保持 Recalled/Wrote memories
    • canceled group 是否按设计 collapse/summary。
    • LLM compactLabel 与本地 semantic summary 的消费优先级在 full/compact/virtual/static 四种路径下的行为。

验证结果

我在 PR worktree 上做了以下验证:

  • ✅ 受影响的 3 个组件测试通过:
    npx vitest run src/ui/components/messages/CompactToolGroupDisplay.test.tsx src/ui/components/messages/ToolGroupMessage.test.tsx src/ui/components/messages/ToolMessage.test.tsx
    结果:3 files / 90 tests passed。

  • npm run typecheck 当前无法复核通过:
    失败点是当前环境/依赖相关的 @qwen-code/channel-qqbotink/domink/components/CursorContext 缺失及后续类型错误,不在本 PR diff 内,但这意味着 PR 描述里的 “type checking passes” 我无法在当前 head 上确认。

  • ❌ 更宽的 UI component tests 不是绿的:
    npx vitest run src/ui/components 结果为 102 files 中 11 failed,1364 tests 中 16 failed。
    其中多数是当前机器/套件层面的 5s timeout 和 ink/dom 缺失,但有一个与本 PR 直接相关:StandaloneSessionPicker.test.tsx 仍期待 preview 中出现 BashTool,实际现在渲染为 ✓ Used 1 tool。这说明至少部分 UI test/snapshot 期望没有随新统一输出行为更新。

总体结论

这版 PR 的方向符合需求,但还没有严格 follow 设计,也没有完全保护现有特殊语义。建议先处理 merge conflict,然后修复 summary 重复显示、memory-only 被吞、canceled 行为不一致这三类核心问题;最后补上上述边界测试,再重新跑目标组件测试和可用的类型/组件验证。

@chiga0 chiga0 left a comment

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Downgraded from Request Changes to Comment: self-PR.

— qwen3.7-max via Qwen Code /review

Comment thread packages/cli/src/ui/components/messages/CompactToolGroupDisplay.tsx
Comment thread packages/cli/src/ui/components/messages/CompactToolGroupDisplay.tsx
Comment thread packages/cli/src/ui/components/messages/ToolGroupMessage.test.tsx
Comment thread packages/cli/src/ui/components/messages/ToolGroupMessage.tsx
秦奇 and others added 6 commits June 23, 2026 10:31
Remove round borders from ToolGroupMessage, CompactToolGroupDisplay, and
InlineParallelAgentsDisplay. Completed tools now default to a single
collapsed header line with dimColor styling. Executing/error/confirming
tools continue to show their full result block.

Part of #4588 (Track 3: Simplify tool-call rendering).

Generated with AI

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
- Only collapse completed tool results in compact mode, preserving
  full visibility in non-compact mode
- Subtract 2 from innerWidth to account for ToolMessage paddingX={1}
- Update snapshots to reflect removed borders

Generated with AI

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
- Gate isDim on compact mode so non-compact tools stay fully styled
- Add paddingX={1} to CompactToolGroupDisplay for left-edge alignment
- Delete Border Color Logic test block (borders removed)
- Add compact-mode test coverage for Error/Executing/Pending/forceShowResult
- Clean up stale border references in comments

Generated with AI

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
Replace the dual compact/normal mode tool output with a single unified
mode. Completed tools always show a semantic overview line
("Read 3 files, edited 2 files") instead of dumping full results.

- Add buildToolSummary() for category-based semantic summaries
- Remove compactMode gate from shouldCollapse and isDim in ToolMessage
- Make all-completed tool groups use CompactToolGroupDisplay
- Remove unused useCompactMode hook calls from ToolMessage

Generated with AI

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
- Add 10 dedicated unit tests for buildToolSummary covering edge cases
- Fix stale comment referencing old compactMode gate logic

Generated with AI

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
- Add Canceled status to allComplete check in ToolGroupMessage
- Move memory-only group rendering before showCompact to prevent
  them being swallowed by CompactToolGroupDisplay
- Fix LLM summary duplication: absorbedCallIds now tracks completed
  groups in non-compact mode; HistoryItemDisplay no longer bypasses
  summaryAbsorbed when !compactMode
- Update StandaloneSessionPicker test for new compact rendering
- Fix design doc category order example and add missing rendering rules

Generated with AI

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
@chiga0 chiga0 force-pushed the worktree-feat+tui-tool-collapse branch from 1915d3d to 4146279 Compare June 23, 2026 02:34
- Add SHELL_COMMAND_NAME and @ file-reference pseudo-tools to
  TOOL_NAME_TO_CATEGORY mapping for correct category classification
- Fix height calculation test to use Executing status so expanded
  path is actually exercised
- Update stale comment about empty toolCalls behavior

Generated with AI

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
@chiga0

chiga0 commented Jun 23, 2026

Copy link
Copy Markdown
Collaborator Author

All findings have been addressed:

Blocking/High priority — All fixed

  1. Merge conflict — Rebased on latest main, all conflicts resolved. (6d5fa82..3275994)
  2. LLM summary duplication — Fixed in two places:
    • MainContent.tsx: absorbedCallIds now tracks completed groups even in non-compact mode (checks groupComplete when !compactMode).
    • HistoryItemDisplay.tsx: tool_use_summary rendering now gated only on !summaryAbsorbed (removed the !compactMode || bypass).
  3. Memory-only groups swallowed — Moved memory-only check before showCompact in ToolGroupMessage.tsx.
  4. Canceled not in allComplete — Added ToolCallStatus.Canceled to the allComplete condition.

Medium/Low priority

  1. Design doc category order — Fixed the example to match CATEGORY_ORDER (command first).
  2. Missing test coverage — Acknowledged as valid. The core unit tests cover buildToolSummary and the main rendering paths. Integration-level tests for the 4 mode combinations (compact × viewport) are better suited for a follow-up.

Inline comments

  • SHELL_COMMAND_NAME + @ file-reference names — Added to TOOL_NAME_TO_CATEGORY. Real finding.
  • i18n gap — Valid suggestion, deferred. The old compact header also used English-only display names. Will track as follow-up.
  • Height calculation test — Fixed: changed first tool to Executing so expanded path is exercised.
  • Empty toolCalls comment — Updated to reflect new behavior (CompactToolGroupDisplay returns null for empty arrays).

@wenshao

wenshao commented Jun 23, 2026

Copy link
Copy Markdown
Collaborator

Build failure root cause — one line blocks every check

All six red checks (Lint, Test ×3 on ubuntu/macos/windows, Integration Tests (No-AK Smoke), Post Coverage Comment) come from a single TypeScript compile error, not six independent problems.

Root causepackages/cli/src/ui/components/HistoryItemDisplay.tsx:217

const { compactMode } = useCompactMode();
src/ui/components/HistoryItemDisplay.tsx(217,9): error TS6133: 'compactMode' is declared but its value is never read.
Error: Command failed: tsc --build

compactMode is destructured but never read (it is the only occurrence in the file). Under noUnusedLocals, tsc --build treats this as a hard error and exits 1.

Why it takes down everything — every job runs npm run build (→ tsc --build) before doing its real work, so the compile aborts before any linter or test runs:

  • Lint / Test ×3 / Integration (No-AK Smoke) → fail at the build step.
  • Post Coverage Comment → fails because the Test job never produced coverage artifacts.

Fix the one line and all six should go green.

Suggested fix — remove the dead read:

-  const { compactMode } = useCompactMode();

⚠️ Note: after removing line 217, the useCompactMode import (line 60) becomes unused and will itself trip TS6133 — so delete that import too:

-import { useCompactMode } from '../contexts/CompactModeContext.js';

The tool_use_summary design comment in this same file confirms compact-mode gating is handled downstream via the compactLabel prop + summaryAbsorbed flag (completed groups always render through CompactToolGroupDisplay), so the local compactMode read is genuinely dead code.

If instead compactMode was meant to gate something in this component, the consumer is missing — wire it in rather than deleting it.

中文版

构建失败根因 —— 一行代码阻断了所有检查

六个红叉(Lint、ubuntu/macos/windows 三个 TestIntegration Tests (No-AK Smoke)Post Coverage Comment)全部源于同一个 TypeScript 编译错误,而不是六个独立问题。

根因 —— packages/cli/src/ui/components/HistoryItemDisplay.tsx:217

const { compactMode } = useCompactMode();
src/ui/components/HistoryItemDisplay.tsx(217,9): error TS6133: 'compactMode' is declared but its value is never read.
Error: Command failed: tsc --build

compactMode 被解构出来但从未被读取(它在整个文件里只出现这一次)。在 noUnusedLocals 下,tsc --build 把它当作硬错误,直接以退出码 1 失败。

为什么会拖垮全部检查 —— 每个 job 在做正事之前都会先跑 npm run build(→ tsc --build),编译在任何 lint 规则或测试执行之前就中断了:

  • Lint / 三个 Test / Integration (No-AK Smoke) → 卡在 build 步骤失败。
  • Post Coverage Comment → 因为 Test job 从未产出覆盖率产物而失败。

修掉这一行,六个检查应该都会转绿。

建议修复 —— 删掉这处无用的读取:

-  const { compactMode } = useCompactMode();

⚠️ 注意:删掉第 217 行后,第 60 行的 useCompactMode import 就变成未使用,会再次触发 TS6133 —— 所以这个 import 也要一并删除:

-import { useCompactMode } from '../contexts/CompactModeContext.js';

本文件里 tool_use_summary 的设计注释已说明:紧凑模式的开关逻辑已下沉到下游,由 compactLabel prop + summaryAbsorbed 标志处理(已完成的 group 始终经 CompactToolGroupDisplay 渲染),因此这里本地的 compactMode 读取确属死代码。

如果 compactMode 本意是要在本组件内控制某段逻辑,那就是消费方漏接了 —— 应补上接线而非删除。

Fixes CI build failure caused by TS6133 (noUnusedLocals) — the
compactMode destructure became dead code after the summary gating
was moved to summaryAbsorbed.

Generated with AI

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
@chiga0

chiga0 commented Jun 23, 2026

Copy link
Copy Markdown
Collaborator Author

Fixed in 500200c — removed the dead compactMode destructure and its useCompactMode import from HistoryItemDisplay.tsx. The summary gating is now fully handled by the summaryAbsorbed flag downstream.

Generated with AI

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
@wenshao

wenshao commented Jun 23, 2026

Copy link
Copy Markdown
Collaborator

Update — the compactMode fix is correct; the lingering red was a stale refs/pull/5661/merge, not a recurring bug

Following up on my earlier root-cause comment. The fix in 500200c5 (fix(tui): remove unused compactMode import) is correct — I built it locally and it passes. But CI then showed the same HistoryItemDisplay.tsx(217,9): error TS6133: 'compactMode' error again, which understandably looks like "the fix didn't take." It did — here's what actually happened.

CI built stale pre-fix code. On a pull_request event, actions/checkout checks out refs/pull/5661/merge (the merge commit), not your head. In the run nominally labeled for 500200c5, the checkout step resolved to:

HEAD is now at 8605662c2 Merge 3275994e8... into 2eb3b803...

3275994e8 is the old pre-fix head (fix(tui): address inline review findings) — it still contains compactMode. GitHub hadn't regenerated the merge ref to include 500200c5 yet, so the runner compiled the old commit and re-emitted the identical TS6133 error. Verified:

commit role compactMode in HistoryItemDisplay.tsx
3275994e8 old head the stale merge ref built 1 ← the error
500200c5 your fix 0
089ffaf63 current head 0

Your re-trigger was the right call. The empty commit 089ffaf63 (ci: trigger re-run with updated merge ref) forced GitHub to recompute the merge ref. It is now bc3aea739 = Merge 089ffaf63 into d350dd8df (current main), which contains the fix.

Verified green build. I checked out that exact current merge ref bc3aea739 and ran the full npm run buildit completes with exit code 0 (core → cli → webui → web-shell → everything; 0 TS errors). So the build is genuinely fixed; the fresh run for 089ffaf63 should pass.

One unrelated note: the Test (ubuntu) job in the superseded run failed at its Checkout step (git ... not our ref, tests never ran) — that's the same transient merge-ref fetch race seen on other PRs, not a test failure. The re-run should clear it too.

Net: no further code change needed for the build failure — it's resolved.

中文版

更新 —— compactMode 修复是对的;后面仍然红是 refs/pull/5661/merge 陈旧,不是 bug 复发

接我之前那条根因评论。500200c5fix(tui): remove unused compactMode import)这个修复是正确的 —— 我在本地构建过,能通过。但之后 CI 又报了同一个 HistoryItemDisplay.tsx(217,9): error TS6133: 'compactMode' 错误,看上去就像"修复没生效"。其实生效了 —— 真实情况如下。

CI 构建的是修复前的陈旧代码。pull_request 事件里,actions/checkout 检出的是 refs/pull/5661/merge(合并提交),不是你的 head。在那个名义上对应 500200c5 的 run 里,checkout 实际解析到了:

HEAD is now at 8605662c2 Merge 3275994e8... into 2eb3b803...

3275994e8修复前的旧 headfix(tui): address inline review findings)—— 它里面还有 compactMode。GitHub 当时还没把 merge ref 重新生成到包含 500200c5,于是 runner 编译了旧提交,又报出一模一样的 TS6133。已核验:

提交 角色 HistoryItemDisplay.tsx 里 compactMode 数量
3275994e8 陈旧 merge ref 实际构建的旧 head 1 ← 报错根源
500200c5 你的修复 0
089ffaf63 当前 head 0

你那个重新触发的操作是对的。 空提交 089ffaf63ci: trigger re-run with updated merge ref)强制 GitHub 重算了 merge ref。现在它是 bc3aea739 = Merge 089ffaf63 into d350dd8df(当前 main),里面包含了修复。

已验证构建通过。 我检出了这个当前 merge ref bc3aea739,跑了完整的 npm run build —— 退出码 0(core → cli → webui → web-shell → 全部;0 个 TS 错误)。所以构建确实修好了;089ffaf63 的新 run 应该会通过。

一个无关的补充: 被取代的那个 run 里的 Test (ubuntu) job 是挂在 Checkout 步骤(git ... not our ref,测试根本没跑)—— 那是其他 PR 上也见过的那种短暂 merge-ref 拉取竞态,不是测试失败。重跑应该也会一并消除。

结论:构建失败无需再改任何代码 —— 已解决。

@chiga0 chiga0 changed the title feat(tui): unify tool output with semantic summaries feat(tui): unify tool output with semantic summaries and auto-collapse Jun 23, 2026
@chiga0

chiga0 commented Jun 23, 2026

Copy link
Copy Markdown
Collaborator Author

Thanks for the thorough investigation. Confirmed — the stale merge ref race was the root cause. The new run (triggered by 089ffaf63) should pick up bc3aea739 and pass cleanly.

@github-actions

github-actions Bot commented Jun 23, 2026

Copy link
Copy Markdown
Contributor

Code Coverage Summary

Package Lines Statements Functions Branches
CLI 77.72% 77.72% 82.59% 80.07%
Core 84.05% 84.05% 85.3% 84.5%
CLI Package - Full Text Report
-------------------|---------|----------|---------|---------|-------------------
File               | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s 
-------------------|---------|----------|---------|---------|-------------------
All files          |   77.72 |    80.07 |   82.59 |   77.72 |                   
 src               |   74.67 |    72.82 |   81.81 |   74.67 |                   
  gemini.tsx       |   66.76 |    71.81 |   81.25 |   66.76 | ...6-957,996-1000 
  ...ractiveCli.ts |   73.14 |       68 |      75 |   73.14 | ...1734-1736,1771 
  ...liCommands.ts |   88.02 |     82.1 |     100 |   88.02 | ...32,401,435,529 
  ...ActiveAuth.ts |     100 |     87.5 |     100 |     100 | 66-80             
 ...cp-integration |    57.6 |    63.57 |   83.23 |    57.6 |                   
  acpAgent.ts      |   57.47 |    63.61 |   83.43 |   57.47 | ...7218,7243-7258 
  authMethods.ts   |      92 |       60 |     100 |      92 | 33-34             
  errorCodes.ts    |       0 |        0 |       0 |       0 | 1-22              
  ...DirContext.ts |     100 |      100 |     100 |     100 |                   
 ...ration/service |   91.17 |       90 |   83.33 |   91.17 |                   
  filesystem.ts    |   91.17 |       90 |   83.33 |   91.17 | 24-25,31-32,98-99 
 ...ration/session |   86.34 |    79.26 |   89.85 |   86.34 |                   
  ...ryReplayer.ts |   76.84 |    85.33 |   85.71 |   76.84 | ...50-365,378-379 
  Session.ts       |   86.94 |    78.23 |   91.17 |   86.94 | ...4714,4740-4744 
  ...entTracker.ts |   91.39 |    89.47 |   88.88 |   91.39 | ...31,195,266-275 
  index.ts         |       0 |        0 |       0 |       0 | 1-40              
  ...ssionUtils.ts |   84.21 |    83.33 |     100 |   84.21 | ...37-153,209-211 
  tasksSnapshot.ts |   94.06 |    86.66 |     100 |   94.06 | 60-66             
  types.ts         |       0 |        0 |       0 |       0 | 1                 
 ...ssion/emitters |   96.25 |    94.25 |   96.96 |   96.25 |                   
  BaseEmitter.ts   |    92.3 |    81.81 |     100 |    92.3 | 23-24             
  ...ageEmitter.ts |   95.23 |    95.23 |     100 |   95.23 | 48-55             
  PlanEmitter.ts   |     100 |      100 |     100 |     100 |                   
  ...allEmitter.ts |   98.44 |    94.62 |     100 |   98.44 | 318-319,420,428   
  index.ts         |       0 |        0 |       0 |       0 | 1-10              
 ...ession/rewrite |    91.3 |    88.09 |   94.44 |    91.3 |                   
  LlmRewriter.ts   |      81 |       84 |     100 |      81 | ...,88-89,155-159 
  ...Middleware.ts |   96.74 |    86.84 |     100 |   96.74 | 135,143-145       
  TurnBuffer.ts    |     100 |      100 |     100 |     100 |                   
  config.ts        |     100 |      100 |     100 |     100 |                   
  index.ts         |     100 |      100 |     100 |     100 |                   
  types.ts         |       0 |        0 |       0 |       0 | 1                 
 src/commands      |   83.73 |    61.85 |   59.25 |   83.73 |                   
  auth.ts          |     100 |    83.33 |     100 |     100 | 11,14             
  channel.ts       |   56.66 |      100 |       0 |   56.66 | 15-19,27-34       
  extensions.tsx   |   96.77 |      100 |      50 |   96.77 | 39                
  hooks.tsx        |   66.66 |      100 |       0 |   66.66 | 20-24             
  mcp.ts           |   95.45 |      100 |      50 |   95.45 | 31                
  review.ts        |   51.85 |      100 |       0 |   51.85 | 24-35,38          
  serve.ts         |   84.19 |    57.31 |     100 |   84.19 | ...31-534,547-551 
  sessions.ts      |     100 |      100 |      50 |     100 |                   
 ...mmands/channel |   41.76 |     85.1 |   56.09 |   41.76 |                   
  ...l-registry.ts |    6.66 |      100 |       0 |    6.66 | 6-32,35-53        
  config-utils.ts  |   93.33 |      100 |      75 |   93.33 | 21-26             
  configure.ts     |    14.7 |      100 |       0 |    14.7 | 18-21,23-84       
  pairing.ts       |   26.31 |      100 |       0 |   26.31 | ...30,40-50,52-65 
  pidfile.ts       |   97.11 |    94.73 |     100 |   97.11 | 27-28,45          
  start.ts         |   31.94 |    53.84 |   71.42 |   31.94 | ...83-486,495-497 
  status.ts        |   17.85 |      100 |       0 |   17.85 | 15-26,32-76       
  stop.ts          |      20 |      100 |       0 |      20 | 14-48             
 ...nds/extensions |   87.25 |     89.3 |   85.24 |   87.25 |                   
  consent.ts       |   72.53 |       90 |   42.85 |   72.53 | ...86-142,157-163 
  disable.ts       |     100 |      100 |     100 |     100 |                   
  enable.ts        |     100 |      100 |     100 |     100 |                   
  install.ts       |   85.05 |    83.33 |      75 |   85.05 | ...05-208,211-220 
  link.ts          |     100 |      100 |     100 |     100 |                   
  list.ts          |     100 |     87.5 |     100 |     100 | 18                
  new.ts           |     100 |      100 |     100 |     100 |                   
  settings.ts      |   99.15 |      100 |   83.33 |   99.15 | 151               
  sources.ts       |   93.42 |    87.09 |   92.85 |   93.42 | ...4-66,96-98,167 
  uninstall.ts     |    37.5 |      100 |   33.33 |    37.5 | 23-45,57-64,67-70 
  update.ts        |   96.29 |      100 |     100 |   96.29 | 101-105           
  utils.ts         |      75 |    53.84 |     100 |      75 | ...27-131,133-137 
 ...les/mcp-server |       0 |        0 |       0 |       0 |                   
  example.ts       |       0 |        0 |       0 |       0 | 1-60              
 ...amples/starter |       0 |        0 |       0 |       0 |                   
  example.ts       |       0 |        0 |       0 |       0 | 1-64              
 src/commands/mcp  |   90.15 |    84.39 |   83.33 |   90.15 |                   
  add.ts           |    99.3 |    96.07 |     100 |    99.3 | 154-155           
  approve.ts       |   76.19 |     87.5 |   66.66 |   76.19 | ...,89-99,114-124 
  list.ts          |   92.59 |    83.87 |      80 |   92.59 | ...62-164,180-181 
  reconnect.ts     |   78.73 |    66.66 |   85.71 |   78.73 | 42-55,168-190     
  remove.ts        |     100 |       80 |     100 |     100 | 21-25             
 ...ommands/review |   11.57 |      100 |       0 |   11.57 |                   
  cleanup.ts       |   17.94 |      100 |       0 |   17.94 | ...01-106,108-109 
  deterministic.ts |   13.75 |      100 |       0 |   13.75 | ...22-738,740-741 
  fetch-pr.ts      |   11.36 |      100 |       0 |   11.36 | ...80-201,203-204 
  load-rules.ts    |   11.32 |      100 |       0 |   11.32 | ...41-153,155-156 
  pr-context.ts    |    6.22 |      100 |       0 |    6.22 | ...97-312,314-315 
  presubmit.ts     |    9.35 |      100 |       0 |    9.35 | ...62-287,289-290 
 ...nds/review/lib |      30 |      100 |       0 |      30 |                   
  gh.ts            |   22.58 |      100 |       0 |   22.58 | ...49,53-54,62-69 
  git.ts           |   22.72 |      100 |       0 |   22.72 | 15-18,29-39,43-44 
  paths.ts         |   52.94 |      100 |       0 |   52.94 | ...26,37-38,42-43 
 ...mands/sessions |   91.56 |    86.95 |   83.33 |   91.56 |                   
  common.ts        |     100 |      100 |     100 |     100 |                   
  list.ts          |   90.96 |    86.66 |   81.81 |   90.96 | 208-219,221-222   
 src/config        |   93.29 |    86.37 |   94.15 |   93.29 |                   
  auth.ts          |   88.94 |    83.56 |     100 |   88.94 | ...86-287,303-304 
  ...eMcpImport.ts |   87.91 |    81.52 |     100 |   87.91 | ...63-371,453-454 
  config.ts        |   86.62 |    84.05 |   82.75 |   86.62 | ...2081,2083-2091 
  ...heme-names.ts |     100 |      100 |     100 |     100 |                   
  environment.ts   |   87.37 |    85.71 |   92.85 |   87.37 | ...43-544,550-551 
  keyBindings.ts   |    97.1 |       50 |     100 |    97.1 | 212-215           
  ...ngsAdapter.ts |     100 |    94.11 |     100 |     100 | 64                
  mcpApprovals.ts  |   96.12 |    94.87 |     100 |   96.12 | 193-194,199-201   
  mcpJson.ts       |     100 |      100 |     100 |     100 |                   
  mcpServers.ts    |   92.85 |     87.5 |     100 |   92.85 | 46-47             
  ...idersScope.ts |      92 |       90 |     100 |      92 | 11-12             
  ...abledTools.ts |     100 |      100 |     100 |     100 |                   
  ...comparison.ts |   92.85 |     87.5 |     100 |   92.85 | 34-35             
  ...n-settings.ts |   99.15 |    96.96 |     100 |   99.15 | 63                
  sandboxConfig.ts |   61.64 |    71.87 |   66.66 |   61.64 | ...54-68,73,77-89 
  settings.ts      |   87.04 |    89.22 |   89.28 |   87.04 | ...-969,1051-1054 
  ...ingsSchema.ts |     100 |      100 |     100 |     100 |                   
  ...ngsWatcher.ts |   95.54 |    88.34 |     100 |   95.54 | ...28,277-278,293 
  ...d-env-keys.ts |     100 |      100 |     100 |     100 |                   
  ...paths-lite.ts |   89.47 |     87.5 |     100 |   89.47 | 43-44,53-54,56-57 
  ...tedFolders.ts |   97.15 |    94.28 |     100 |   97.15 | ...54-256,272-273 
 ...nfig/migration |   95.23 |    77.77 |   83.33 |   95.23 |                   
  index.ts         |   95.65 |     87.5 |     100 |   95.65 | 117-118           
  scheduler.ts     |   96.55 |    77.77 |     100 |   96.55 | 19-20             
  types.ts         |       0 |        0 |       0 |       0 | 1                 
 ...ation/versions |   94.91 |      100 |     100 |   94.91 |                   
  ...-v2-shared.ts |     100 |      100 |     100 |     100 |                   
  v1-to-v2.ts      |   81.75 |      100 |     100 |   81.75 | ...28-229,231-247 
  v2-to-v3.ts      |     100 |      100 |     100 |     100 |                   
  v3-to-v4.ts      |     100 |      100 |     100 |     100 |                   
  v5-to-v4.ts      |      96 |      100 |     100 |      96 | 94-95,99          
 src/core          |     100 |      100 |     100 |     100 |                   
  auth.ts          |     100 |      100 |     100 |     100 |                   
  initializer.ts   |     100 |      100 |     100 |     100 |                   
  theme.ts         |     100 |      100 |     100 |     100 |                   
 src/dualOutput    |   69.39 |    66.66 |   63.15 |   69.39 |                   
  ...tputBridge.ts |   69.48 |     67.3 |    64.7 |   69.48 | ...82-383,391-394 
  ...utContext.tsx |     100 |      100 |     100 |     100 |                   
  index.ts         |       0 |        0 |       0 |       0 | 1-8               
 src/export        |       0 |        0 |       0 |       0 |                   
  index.ts         |       0 |        0 |       0 |       0 | 1-7               
 src/generated     |     100 |      100 |     100 |     100 |                   
  git-commit.ts    |     100 |      100 |     100 |     100 |                   
 src/i18n          |   83.22 |       80 |    86.2 |   83.22 |                   
  index.ts         |    65.4 |    76.92 |      80 |    65.4 | ...70-271,294-299 
  languages.ts     |   96.92 |    86.66 |     100 |   96.92 | 134-135,167,184   
  ...nslateKeys.ts |     100 |      100 |     100 |     100 |                   
  ...lationDict.ts |   93.33 |    66.66 |     100 |   93.33 | 15                
 src/i18n/locales  |     100 |      100 |     100 |     100 |                   
  ca.js            |     100 |      100 |     100 |     100 |                   
  de.js            |     100 |      100 |     100 |     100 |                   
  en.js            |     100 |      100 |     100 |     100 |                   
  fr.js            |     100 |      100 |     100 |     100 |                   
  ja.js            |     100 |      100 |     100 |     100 |                   
  pt.js            |     100 |      100 |     100 |     100 |                   
  ru.js            |     100 |      100 |     100 |     100 |                   
  zh-TW.js         |     100 |      100 |     100 |     100 |                   
  zh.js            |     100 |      100 |     100 |     100 |                   
 ...nonInteractive |   72.45 |    71.03 |   74.07 |   72.45 |                   
  session.ts       |   76.46 |    69.34 |   85.71 |   76.46 | ...32-833,842-852 
  types.ts         |    42.5 |      100 |   33.33 |    42.5 | ...90-591,594-595 
 ...active/control |   76.29 |    88.23 |      80 |   76.29 |                   
  ...rolContext.ts |    6.89 |        0 |       0 |    6.89 | 50-86             
  ...Dispatcher.ts |   91.66 |    91.83 |   88.88 |   91.66 | ...49-367,383,386 
  ...rolService.ts |     7.4 |        0 |       0 |     7.4 | 46-185            
 ...ol/controllers |    26.7 |    37.93 |   35.48 |    26.7 |                   
  ...Controller.ts |   36.97 |       80 |      80 |   36.97 | ...15-117,127-210 
  ...Controller.ts |       0 |        0 |       0 |       0 | 1-56              
  ...Controller.ts |   31.32 |     38.7 |      40 |   31.32 | ...68-577,592-597 
  ...Controller.ts |   14.06 |      100 |       0 |   14.06 | ...82-117,130-133 
  ...Controller.ts |   21.97 |    28.57 |   27.27 |   21.97 | ...39-451,460-489 
 .../control/types |       0 |        0 |       0 |       0 |                   
  serviceAPIs.ts   |       0 |        0 |       0 |       0 | 1                 
 ...Interactive/io |    98.1 |     94.2 |   95.23 |    98.1 |                   
  ...putAdapter.ts |   98.02 |    93.36 |   98.07 |   98.02 | ...1303,1398-1399 
  ...putAdapter.ts |      96 |    91.66 |   85.71 |      96 | 51-52             
  ...nputReader.ts |     100 |    94.73 |     100 |     100 | 67                
  ...putAdapter.ts |   98.38 |      100 |   90.47 |   98.38 | 83-84,124-125     
  index.ts         |     100 |      100 |     100 |     100 |                   
 src/patches       |       0 |        0 |       0 |       0 |                   
  is-in-ci.ts      |       0 |        0 |       0 |       0 | 1-17              
 src/remoteInput   |   83.12 |    73.43 |    87.5 |   83.12 |                   
  ...utContext.tsx |     100 |      100 |     100 |     100 |                   
  ...putWatcher.ts |   83.77 |    74.19 |   92.85 |   83.77 | ...05-306,317-320 
  index.ts         |       0 |        0 |       0 |       0 | 1-8               
 src/serve         |   83.06 |    81.75 |   83.91 |   83.06 |                   
  ...ion-bridge.ts |     100 |      100 |     100 |     100 |                   
  auth.ts          |   93.26 |    92.64 |     100 |   93.26 | ...07-308,311-313 
  ...em-adapter.ts |     100 |      100 |     100 |     100 |                   
  capabilities.ts  |     100 |    95.83 |     100 |     100 | 368               
  daemon-logger.ts |   98.24 |    86.95 |   96.29 |   98.24 | 119-120,196       
  ...s-provider.ts |   67.01 |    51.42 |     100 |   67.01 | ...40-245,278-286 
  daemon-status.ts |   97.78 |    82.71 |     100 |   97.78 | ...28,630-631,682 
  debug-mode.ts    |     100 |      100 |     100 |     100 |                   
  demo.ts          |     100 |      100 |     100 |     100 |                   
  env-snapshot.ts  |   90.47 |    78.57 |     100 |   90.47 | ...20-123,189-196 
  event-bus.ts     |     100 |      100 |     100 |     100 |                   
  ...-path-argv.ts |     100 |      100 |     100 |     100 |                   
  ...h-settings.ts |   94.88 |    88.93 |     100 |   94.88 | ...08,683,699,709 
  fast-path.ts     |   82.24 |    77.51 |      80 |   82.24 | ...95-496,504-507 
  ...ry-channel.ts |       0 |        0 |       0 |       0 | 1-14              
  index.ts         |       0 |        0 |       0 |       0 | 1-143             
  ...back-binds.ts |     100 |      100 |     100 |     100 |                   
  ...sion-audit.ts |     100 |      100 |   93.33 |     100 |                   
  rate-limit.ts    |   90.37 |    87.77 |   93.75 |   90.37 | ...95-297,348-352 
  ...qwen-serve.ts |   80.43 |    82.44 |   55.55 |   80.43 | ...2250,2264-2267 
  server.ts        |   81.77 |    82.14 |   82.52 |   81.77 | ...5855,5921-5930 
  status.ts        |     100 |      100 |     100 |     100 |                   
  types.ts         |     100 |      100 |     100 |     100 |                   
  ...l-resolver.ts |   90.32 |    66.66 |     100 |   90.32 | 16,45-46          
  ...ell-static.ts |   89.58 |       84 |     100 |   89.58 | ...50-153,186-189 
  ...ace-agents.ts |   62.47 |    70.34 |   90.47 |   62.47 | ...1346,1356-1366 
  ...ace-memory.ts |   87.13 |    78.46 |     100 |   87.13 | ...54-361,421-428 
  ...ers-status.ts |   96.94 |    77.77 |     100 |   96.94 | ...39,142,245-251 
 ...serve/acp-http |   68.82 |    70.42 |   93.93 |   68.82 |                   
  ...n-registry.ts |   89.08 |    82.43 |   93.33 |   89.08 | ...05,479,499-513 
  dispatch.ts      |   60.85 |    64.09 |     100 |   60.85 | ...2588,2662-2665 
  index.ts         |    75.7 |    68.91 |   92.85 |    75.7 | ...22,825,851-853 
  json-rpc.ts      |     100 |    96.96 |     100 |     100 | 92                
  sse-stream.ts    |   93.91 |    87.87 |   84.61 |   93.91 | ...50-152,154-156 
  ...ort-stream.ts |       0 |        0 |       0 |       0 | 1                 
  ws-stream.ts     |   91.86 |       80 |     100 |   91.86 | 45,50,93,97-100   
 src/serve/auth    |   86.86 |    79.18 |   93.87 |   86.86 |                   
  device-flow.ts   |   96.35 |       80 |   97.61 |   96.35 | ...1358,1453,1519 
  ...w-provider.ts |   44.24 |    74.07 |   71.42 |   44.24 | ...23-284,297,301 
 src/serve/fs      |   85.29 |    81.39 |     100 |   85.29 |                   
  audit.ts         |     100 |    96.15 |     100 |     100 | 201               
  errors.ts        |     100 |      100 |     100 |     100 |                   
  index.ts         |     100 |      100 |     100 |     100 |                   
  paths.ts         |   77.82 |    77.08 |     100 |   77.82 | ...64,493-497,510 
  policy.ts        |   90.32 |    89.18 |     100 |   90.32 | 142-150           
  ...ile-system.ts |   84.27 |    79.21 |     100 |   84.27 | ...2057,2084-2085 
 src/serve/routes  |   80.48 |     77.4 |   94.73 |   80.48 |                   
  a2ui-action.ts   |     100 |     94.2 |     100 |     100 | 120,124,169,273   
  ...-file-read.ts |   94.41 |    76.92 |     100 |   94.41 | ...28-329,390-392 
  ...file-write.ts |    82.1 |    60.52 |     100 |    82.1 | ...42-244,247-249 
  ...ermissions.ts |   99.18 |    78.72 |     100 |   99.18 | 155-156           
  ...e-settings.ts |   23.62 |      100 |      50 |   23.62 | ...13-226,233-330 
 src/serve/voice   |   70.58 |    95.74 |   72.72 |   70.58 |                   
  ...ice-config.ts |   13.33 |      100 |       0 |   13.33 | 35-63,71-87       
  voice-ws.ts      |   78.03 |    95.74 |   84.21 |   78.03 | ...84,399,437-439 
 ...kspace-service |   81.89 |    81.89 |    87.5 |   81.89 |                   
  index.ts         |   82.06 |     82.6 |   93.33 |   82.06 | ...00-505,565-630 
  types.ts         |       0 |        0 |       0 |       0 | 1                 
 src/services      |   92.34 |    91.07 |   97.82 |   92.34 |                   
  ...mandLoader.ts |     100 |    88.88 |     100 |     100 | 99-112            
  ...killLoader.ts |     100 |    93.33 |     100 |     100 | 48,67             
  ...andService.ts |   98.73 |      100 |     100 |   98.73 | 107               
  ...mandLoader.ts |   86.83 |    83.87 |     100 |   86.83 | ...30-335,340-345 
  ...omptLoader.ts |   75.84 |    80.64 |   83.33 |   75.84 | ...10-211,277-278 
  ...mandLoader.ts |     100 |    97.14 |     100 |     100 | 66                
  ...nd-factory.ts |   91.42 |    91.66 |     100 |   91.42 | 128,137-144       
  ...ation-tool.ts |     100 |    95.45 |     100 |     100 | 125               
  ...ndMetadata.ts |   98.23 |    96.72 |     100 |   98.23 | 83,87             
  commandUtils.ts  |      96 |     90.9 |     100 |      96 | 48                
  ...and-parser.ts |   90.69 |    85.71 |     100 |   90.69 | 63-66             
  ...ionService.ts |     100 |      100 |     100 |     100 |                   
  ...low-loader.ts |     100 |    96.29 |     100 |     100 | 88                
  types.ts         |     100 |      100 |     100 |     100 |                   
 ...ght/generators |    88.3 |    85.49 |   92.59 |    88.3 |                   
  DataProcessor.ts |   88.22 |    85.48 |      95 |   88.22 | ...1341,1345-1352 
  ...tGenerator.ts |   98.21 |    85.71 |     100 |   98.21 | 46                
  ...teRenderer.ts |   45.45 |      100 |       0 |   45.45 | 13-51             
 .../insight/types |       0 |       50 |      50 |       0 |                   
  ...sightTypes.ts |       0 |        0 |       0 |       0 |                   
  ...sightTypes.ts |       0 |        0 |       0 |       0 | 1                 
 ...mpt-processors |   97.27 |    94.04 |     100 |   97.27 |                   
  ...tProcessor.ts |     100 |      100 |     100 |     100 |                   
  ...eProcessor.ts |   94.52 |    84.21 |     100 |   94.52 | 46-47,93-94       
  ...tionParser.ts |     100 |      100 |     100 |     100 |                   
  ...lProcessor.ts |   97.41 |    95.65 |     100 |   97.41 | 95-98             
  types.ts         |     100 |      100 |     100 |     100 |                   
 src/services/tips |   97.35 |    84.61 |     100 |   97.35 |                   
  index.ts         |     100 |      100 |     100 |     100 |                   
  tipHistory.ts    |   92.59 |    68.96 |     100 |   92.59 | ...24,146,153,162 
  tipRegistry.ts   |     100 |      100 |     100 |     100 |                   
  tipScheduler.ts  |     100 |    91.66 |     100 |     100 | 55                
 src/startup       |   80.53 |     74.6 |     100 |   80.53 |                   
  ...reeStartup.ts |   80.53 |     74.6 |     100 |   80.53 | ...94,403,409-412 
 src/test-utils    |   93.78 |    83.33 |      80 |   93.78 |                   
  ...omMatchers.ts |   69.69 |       50 |      50 |   69.69 | 32-35,37-39,45-47 
  ...andContext.ts |     100 |      100 |     100 |     100 |                   
  render.tsx       |     100 |      100 |     100 |     100 |                   
 src/ui            |   69.39 |     71.1 |   59.42 |   69.39 |                   
  App.tsx          |   33.33 |       75 |   33.33 |   33.33 | 32-86             
  AppContainer.tsx |   70.43 |    65.93 |      55 |   70.43 | ...3469,3964-3968 
  ...tionNudge.tsx |    9.58 |      100 |       0 |    9.58 | 24-94             
  ...ackDialog.tsx |   29.23 |      100 |       0 |   29.23 | 25-75             
  ...tionNudge.tsx |    7.69 |      100 |       0 |    7.69 | 25-103            
  colors.ts        |      60 |      100 |   35.29 |      60 | ...52,54-55,60-61 
  constants.ts     |     100 |      100 |     100 |     100 |                   
  keyMatchers.ts   |   95.91 |    97.14 |     100 |   95.91 | 25-26             
  ...tic-colors.ts |     100 |      100 |     100 |     100 |                   
  ...ractiveUI.tsx |   56.25 |    33.33 |      40 |   56.25 | ...30-231,236-241 
  ...inePresets.ts |   98.28 |    89.87 |     100 |   98.28 | ...34,261,420-422 
  textConstants.ts |     100 |      100 |     100 |     100 |                   
  types.ts         |     100 |      100 |     100 |     100 |                   
 src/ui/auth       |   58.45 |    65.94 |      50 |   58.45 |                   
  AuthDialog.tsx   |   59.01 |     42.1 |   16.66 |   59.01 | ...25,332-354,358 
  ...nProgress.tsx |       0 |        0 |       0 |       0 | 1-64              
  ...etupSteps.tsx |   60.03 |    70.37 |      56 |   60.03 | ...87,791,800,803 
  useAuth.ts       |    94.6 |    73.52 |     100 |    94.6 | ...21-222,241-247 
  ...rSetupFlow.ts |   43.18 |    33.33 |      50 |   43.18 | ...78-399,416-459 
 src/ui/commands   |   78.78 |    81.25 |    87.6 |   78.78 |                   
  aboutCommand.ts  |     100 |      100 |     100 |     100 |                   
  agentsCommand.ts |   83.78 |      100 |      60 |   83.78 | 30-32,42-44       
  ...odeCommand.ts |   89.47 |    81.25 |     100 |   89.47 | 92-93,95-100      
  arenaCommand.ts  |   62.81 |    58.73 |   65.21 |   62.81 | ...90-595,680-688 
  authCommand.ts   |     100 |      100 |     100 |     100 |                   
  branchCommand.ts |     100 |      100 |     100 |     100 |                   
  btwCommand.ts    |   94.32 |    77.41 |     100 |   94.32 | 35-36,114-119     
  bugCommand.ts    |     100 |    77.77 |     100 |     100 | 27,61             
  cdCommand.ts     |   89.44 |    80.35 |     100 |   89.44 | ...81,106-111,190 
  clearCommand.ts  |   79.64 |       68 |     100 |   79.64 | ...24-125,133-142 
  ...essCommand.ts |   67.95 |    55.88 |      75 |   67.95 | ...86-187,201-204 
  ...astCommand.ts |   70.86 |    74.07 |      75 |   70.86 | ...,61-93,117-122 
  ...extCommand.ts |   65.58 |    68.25 |   84.61 |   65.58 | ...54-587,598-599 
  copyCommand.ts   |   98.49 |    95.78 |     100 |   98.49 | ...80,280,321,327 
  deleteCommand.ts |     100 |      100 |     100 |     100 |                   
  diffCommand.ts   |     100 |     87.5 |     100 |     100 | ...61,224-225,238 
  ...ryCommand.tsx |   81.84 |    86.11 |   91.66 |   81.84 | ...66-271,318-325 
  docsCommand.ts   |     100 |     90.9 |     100 |     100 | 25                
  doctorCommand.ts |   65.37 |    81.88 |   94.11 |   65.37 | ...85-535,538-672 
  dreamCommand.ts  |   85.45 |    88.88 |     100 |   85.45 | 58-65             
  editorCommand.ts |     100 |      100 |     100 |     100 |                   
  exportCommand.ts |   98.25 |    91.02 |     100 |   98.25 | ...81,198-199,364 
  ...onsCommand.ts |    50.3 |    48.14 |   69.23 |    50.3 | ...08,262-314,375 
  forgetCommand.ts |     100 |       90 |     100 |     100 | 59                
  forkCommand.ts   |     100 |    94.11 |     100 |     100 | 96,147            
  goalCommand.ts   |   91.46 |    84.44 |      90 |   91.46 | ...87-190,202-205 
  helpCommand.ts   |     100 |      100 |     100 |     100 |                   
  ...oryCommand.ts |     100 |      100 |     100 |     100 |                   
  hooksCommand.ts  |   81.13 |    65.71 |   85.71 |   81.13 | ...,86-93,131-132 
  ideCommand.ts    |   60.75 |    64.28 |   41.17 |   60.75 | ...05-306,310-324 
  ...figCommand.ts |   52.83 |    81.25 |      70 |   52.83 | ...74-319,321-330 
  initCommand.ts   |   84.33 |    72.72 |     100 |   84.33 | 68,82-87,89-94    
  ...ghtCommand.ts |   77.87 |    71.42 |     100 |   77.87 | ...44-245,250-272 
  ...ageCommand.ts |   92.17 |    82.69 |     100 |   92.17 | ...39,159,168-178 
  lspCommand.ts    |     100 |    86.95 |     100 |     100 | 31,101-102        
  mcpCommand.ts    |     100 |      100 |     100 |     100 |                   
  memoryCommand.ts |     100 |      100 |     100 |     100 |                   
  modelCommand.ts  |   76.15 |    82.27 |   77.77 |   76.15 | ...44-349,403-408 
  ...onsCommand.ts |     100 |      100 |     100 |     100 |                   
  planCommand.ts   |   78.82 |    76.92 |     100 |   78.82 | 30-35,51-56,68-73 
  quitCommand.ts   |     100 |      100 |     100 |     100 |                   
  recapCommand.ts  |   21.81 |      100 |      50 |   21.81 | 24-73             
  ...berCommand.ts |      96 |       70 |     100 |      96 | 57,62             
  renameCommand.ts |   85.71 |    86.04 |     100 |   85.71 | ...02-209,216-221 
  ...oreCommand.ts |    90.9 |    86.04 |     100 |    90.9 | ...41-146,176-177 
  resumeCommand.ts |     100 |      100 |     100 |     100 |                   
  rewindCommand.ts |   81.25 |      100 |      50 |   81.25 | 20-22             
  ...ngsCommand.ts |     100 |      100 |     100 |     100 |                   
  ...hubCommand.ts |   81.43 |    65.21 |      80 |   81.43 | ...70-173,176-179 
  skillsCommand.ts |    85.5 |    81.25 |     100 |    85.5 | 36-44,70          
  statsCommand.ts  |   90.15 |    78.53 |     100 |   90.15 | ...55-658,749-756 
  ...ineCommand.ts |     100 |      100 |     100 |     100 |                   
  ...aryCommand.ts |    6.43 |      100 |      50 |    6.43 | 31-330            
  tasksCommand.ts  |   77.22 |    72.13 |     100 |   77.22 | ...46-150,172-177 
  ...tupCommand.ts |     100 |      100 |     100 |     100 |                   
  themeCommand.ts  |     100 |      100 |     100 |     100 |                   
  toolsCommand.ts  |     100 |      100 |     100 |     100 |                   
  trustCommand.ts  |     100 |      100 |     100 |     100 |                   
  types.ts         |     100 |      100 |     100 |     100 |                   
  vimCommand.ts    |   54.54 |      100 |      50 |   54.54 | 19-29             
  voice-command.ts |   94.73 |    89.74 |     100 |   94.73 | 64,126-131        
  ...owsCommand.ts |   91.82 |    78.87 |   66.66 |   91.82 | ...59-160,169-174 
 src/ui/components |   62.77 |    77.62 |    71.1 |   62.77 |                   
  AboutBox.tsx     |     100 |      100 |     100 |     100 |                   
  ...ateScreen.tsx |   35.48 |      100 |       0 |   35.48 | 26-48             
  AnsiOutput.tsx   |   65.57 |      100 |      50 |   65.57 | 69-90             
  ApiKeyInput.tsx  |       0 |        0 |       0 |       0 | 1-97              
  AppHeader.tsx    |    88.7 |       75 |     100 |    88.7 | 36,38-43,45       
  ...odeDialog.tsx |   87.24 |    72.22 |   33.33 |   87.24 | ...85,233-238,245 
  AsciiArt.ts      |     100 |      100 |     100 |     100 |                   
  ...Indicator.tsx |   16.27 |      100 |       0 |   16.27 | 19-58             
  ...TextInput.tsx |   88.36 |    88.57 |     100 |   88.36 | ...80-282,296-298 
  Composer.tsx     |   94.39 |    66.66 |     100 |   94.39 | ...-71,83,138,151 
  ...entPrompt.tsx |     100 |      100 |     100 |     100 |                   
  ...ryDisplay.tsx |   75.89 |    62.06 |     100 |   75.89 | ...,88,93-108,113 
  ...geDisplay.tsx |   68.42 |    57.14 |     100 |   68.42 | 16-17,31-32,42-50 
  ...ification.tsx |       0 |        0 |       0 |       0 | 1-36              
  ...gProfiler.tsx |       0 |        0 |       0 |       0 | 1-36              
  ...ogManager.tsx |       0 |        0 |       0 |       0 | 1-563             
  DiffDialog.tsx   |   31.17 |    19.51 |   30.76 |   31.17 | ...07-712,722-735 
  ...ngsDialog.tsx |       0 |        0 |       0 |       0 | 1-195             
  ExitWarning.tsx  |     100 |      100 |     100 |     100 |                   
  ...hProgress.tsx |    87.8 |    33.33 |     100 |    87.8 | 28-31,56          
  ...ustDialog.tsx |     100 |      100 |     100 |     100 |                   
  Footer.tsx       |   78.91 |    54.34 |     100 |   78.91 | ...43,176,198-203 
  ...ngSpinner.tsx |   68.42 |       80 |      50 |   68.42 | 35-52,73,80-81    
  GoalPill.tsx     |   76.19 |    81.81 |     100 |   76.19 | 24-30,46-50       
  Header.tsx       |   98.62 |    94.28 |     100 |   98.62 | 162,164           
  Help.tsx         |   98.32 |       90 |     100 |   98.32 | ...24,381,447-448 
  ...emDisplay.tsx |   72.94 |    62.82 |     100 |   72.94 | ...30,433,436-442 
  ...ngeDialog.tsx |     100 |      100 |     100 |     100 |                   
  InputPrompt.tsx  |   81.07 |    80.12 |   77.77 |   81.07 | ...1976,2002,2054 
  ...Shortcuts.tsx |   20.87 |      100 |       0 |   20.87 | ...6,49-51,67-125 
  ...Indicator.tsx |   98.14 |    97.82 |     100 |   98.14 | 157-158           
  ...firmation.tsx |   91.42 |      100 |      50 |   91.42 | 26-31             
  MainContent.tsx  |   98.43 |    94.82 |   66.66 |   98.43 | 89,166-170        
  MemoryDialog.tsx |   61.87 |    76.05 |    62.5 |   61.87 | ...72,391,428-430 
  ...geDisplay.tsx |       0 |        0 |       0 |       0 | 1-41              
  ModelDialog.tsx  |   83.64 |    71.16 |     100 |   83.64 | ...74-690,747-751 
  ...tsDisplay.tsx |     100 |    97.22 |     100 |     100 | 270               
  ...fications.tsx |       0 |        0 |       0 |       0 | 1-58              
  ...onsDialog.tsx |       0 |        0 |       0 |       0 | 1-1004            
  ...ryDisplay.tsx |     100 |      100 |     100 |     100 |                   
  ...icePrompt.tsx |   92.64 |    85.71 |     100 |   92.64 | 102-106,134-139   
  PrepareLabel.tsx |   91.66 |    77.27 |     100 |   91.66 | 73-75,77-79,110   
  ...atePrompt.tsx |       0 |        0 |       0 |       0 | 1-134             
  ...geDisplay.tsx |     100 |      100 |     100 |     100 |                   
  ...ngDisplay.tsx |       0 |        0 |       0 |       0 | 1-39              
  ...hProgress.tsx |   85.25 |    88.46 |     100 |   85.25 | 121-147           
  ...dSelector.tsx |   92.79 |    82.65 |     100 |   92.79 | ...19-323,354-370 
  ...ionPicker.tsx |   83.66 |    72.13 |     100 |   83.66 | ...96,402,444-466 
  ...onPreview.tsx |   93.58 |    84.21 |     100 |   93.58 | ...,70-71,195-197 
  ...ryDisplay.tsx |     100 |      100 |     100 |     100 |                   
  ...putPrompt.tsx |   72.56 |       80 |      40 |   72.56 | ...06-109,114-117 
  ...tedDialog.tsx |     100 |      100 |     100 |     100 |                   
  ...ngsDialog.tsx |   68.27 |    71.66 |      75 |   68.27 | ...16-824,830-831 
  ...ionDialog.tsx |    92.3 |    96.15 |   33.33 |    92.3 | 60-63,68-75,164   
  ...putPrompt.tsx |    15.9 |      100 |       0 |    15.9 | 20-63             
  ...Indicator.tsx |   57.14 |      100 |       0 |   57.14 | 12-15             
  ...MoreLines.tsx |       0 |        0 |       0 |       0 | 1-40              
  ...ionPicker.tsx |       0 |        0 |       0 |       0 | 1-172             
  ...tivityTab.tsx |       0 |        0 |       0 |       0 | 1-275             
  StatsDialog.tsx  |       0 |        0 |       0 |       0 | 1-238             
  StatsDisplay.tsx |     100 |      100 |     100 |     100 |                   
  ...ciencyTab.tsx |       0 |        0 |       0 |       0 | 1-258             
  ...atmapView.tsx |       0 |        0 |       0 |       0 | 1-107             
  ...essionTab.tsx |       0 |        0 |       0 |       0 | 1-215             
  ...ineDialog.tsx |    93.5 |    85.18 |     100 |    93.5 | ...05,267,287-289 
  ...yTodoList.tsx |   96.33 |    88.23 |     100 |   96.33 | 137-140           
  ...nsDisplay.tsx |   91.37 |    79.41 |     100 |   91.37 | ...70,173,200-202 
  ThemeDialog.tsx  |   89.95 |    46.15 |      75 |   89.95 | ...71-173,243-245 
  ...ingViewer.tsx |   12.61 |      100 |       0 |   12.61 | 32-140            
  Tips.tsx         |   93.54 |       75 |     100 |   93.54 | 39-40             
  TodoDisplay.tsx  |     100 |      100 |     100 |     100 |                   
  ...tsDisplay.tsx |     100 |     87.5 |     100 |     100 | 31-32             
  TrustDialog.tsx  |     100 |    81.81 |     100 |     100 | 71-86             
  ...ification.tsx |       0 |        0 |       0 |       0 | 1-22              
  ...Indicator.tsx |    92.5 |     87.5 |     100 |    92.5 | 50-53             
  ...ackDialog.tsx |       0 |        0 |       0 |       0 | 1-134             
  ...xitDialog.tsx |   80.36 |    43.47 |      60 |   80.36 | ...24-238,248-251 
  ...odeVisuals.ts |   91.42 |    64.28 |     100 |   91.42 | 15,21,24          
  ...s-helpers.tsx |       0 |        0 |       0 |       0 | 1-102             
 ...nts/agent-view |   53.71 |    70.87 |   42.85 |   53.71 |                   
  ...atContent.tsx |    9.09 |      100 |       0 |    9.09 | 54-275,281-283    
  ...tChatView.tsx |   21.05 |      100 |       0 |   21.05 | 21-39             
  ...tComposer.tsx |   64.78 |    29.41 |   33.33 |   64.78 | ...51,269,277-279 
  AgentFooter.tsx  |   17.07 |      100 |       0 |   17.07 | 28-66             
  AgentHeader.tsx  |   15.38 |      100 |       0 |   15.38 | 27-64             
  AgentTabBar.tsx  |    87.9 |    63.88 |     100 |    87.9 | ...88,110-118,136 
  ...oryAdapter.ts |     100 |    91.83 |     100 |     100 | 103,109-110,138   
  index.ts         |       0 |        0 |       0 |       0 | 1-12              
 ...mponents/arena |   42.38 |    68.69 |   73.68 |   42.38 |                   
  ArenaCards.tsx   |   73.06 |    71.79 |   85.71 |   73.06 | ...83-185,321-326 
  ...ectDialog.tsx |   83.48 |    69.86 |   88.88 |   83.48 | ...88-392,409-410 
  ...artDialog.tsx |       0 |        0 |       0 |       0 | 1-164             
  ...tusDialog.tsx |       0 |        0 |       0 |       0 | 1-288             
  ...topDialog.tsx |       0 |        0 |       0 |       0 | 1-213             
 ...ackground-view |   78.45 |     77.8 |   88.09 |   78.45 |                   
  ...sksDialog.tsx |   73.81 |    74.32 |   79.16 |   73.81 | ...1546,1568-1574 
  ...TasksPill.tsx |   67.03 |     86.2 |     100 |   67.03 | ...02-122,130-138 
  ...gentPanel.tsx |   97.43 |    85.39 |     100 |   97.43 | 121,436-440       
  ...Visibility.ts |     100 |      100 |     100 |     100 |                   
  ...e-overlay.tsx |    88.2 |    76.47 |     100 |    88.2 | ...36-138,140-142 
 ...nts/extensions |   84.58 |    78.18 |   83.33 |   84.58 |                   
  ...gerDialog.tsx |   82.46 |    77.77 |     100 |   82.46 | ...89,191-198,258 
  TabBar.tsx       |   97.29 |    88.88 |     100 |   97.29 | 33                
  index.ts         |       0 |        0 |       0 |       0 | 1-12              
  types.ts         |     100 |      100 |     100 |     100 |                   
 ...tensions/steps |   46.15 |    84.74 |   58.82 |   46.15 |                   
  ...ctionStep.tsx |   95.12 |    92.85 |   85.71 |   95.12 | 84-86,89          
  ...etailStep.tsx |       0 |        0 |       0 |       0 | 1-145             
  ...nListStep.tsx |   75.13 |    88.09 |   66.66 |   75.13 | ...52,173,202-208 
  ...electStep.tsx |       0 |        0 |       0 |       0 | 1-83              
  ...nfirmStep.tsx |   16.32 |      100 |       0 |   16.32 | 28-74             
  index.ts         |       0 |        0 |       0 |       0 | 1-11              
 ...xtensions/tabs |   66.18 |    67.65 |   66.66 |   66.18 |                   
  DiscoverTab.tsx  |   57.21 |     63.2 |   55.55 |   57.21 | ...98,661-665,669 
  InstalledTab.tsx |   71.62 |    68.65 |   83.33 |   71.62 | ...67,772-773,810 
  SourcesTab.tsx   |   69.25 |     70.4 |   66.66 |   69.25 | ...16,535,607-619 
 ...tensions/views |   23.73 |    44.82 |       5 |   23.73 |                   
  ...tionsView.tsx |    6.02 |      100 |       0 |    6.02 | 52-65,68-368      
  ...tionsView.tsx |   43.45 |    44.82 |    6.66 |   43.45 | ...97-404,407-419 
  ...etailView.tsx |    9.56 |      100 |       0 |    9.56 | 40-67,70-158      
 ...mponents/hooks |   86.85 |    81.37 |   91.89 |   86.85 |                   
  ...rListBody.tsx |   95.29 |    85.18 |     100 |   95.29 | 95-98             
  ...etailStep.tsx |   75.32 |    71.42 |      60 |   75.32 | ...56-169,173-186 
  ...etailStep.tsx |     100 |      100 |     100 |     100 |                   
  ...rListStep.tsx |     100 |      100 |     100 |     100 |                   
  ...entHeader.tsx |     100 |    85.71 |     100 |     100 | 47                
  ...rListStep.tsx |     100 |      100 |     100 |     100 |                   
  ...etailStep.tsx |     100 |      100 |     100 |     100 |                   
  ...abledStep.tsx |     100 |      100 |     100 |     100 |                   
  ...sListStep.tsx |     100 |      100 |     100 |     100 |                   
  ...entDialog.tsx |   72.29 |    70.49 |     100 |   72.29 | ...51,563-568,572 
  constants.ts     |     100 |      100 |     100 |     100 |                   
  index.ts         |       0 |        0 |       0 |       0 | 1-13              
  ...erGrouping.ts |     100 |      100 |     100 |     100 |                   
  sourceLabels.ts  |     100 |      100 |     100 |     100 |                   
  types.ts         |     100 |      100 |     100 |     100 |                   
 ...components/mcp |   15.02 |    88.23 |   71.42 |   15.02 |                   
  ...ealthPill.tsx |   68.42 |    85.71 |     100 |   68.42 | 40-46             
  ...entDialog.tsx |       0 |        0 |       0 |       0 | 1-905             
  ...valDialog.tsx |   15.06 |      100 |       0 |   15.06 | 40-109            
  constants.ts     |     100 |      100 |     100 |     100 |                   
  index.ts         |       0 |        0 |       0 |       0 | 1-35              
  types.ts         |       0 |        0 |       0 |       0 | 1-24              
  utils.ts         |      97 |       95 |     100 |      97 | 24,113-114        
 ...ents/mcp/steps |   51.23 |    67.68 |   57.14 |   51.23 |                   
  ...icateStep.tsx |    5.65 |      100 |       0 |    5.65 | 40-66,69-308      
  ...electStep.tsx |       0 |        0 |       0 |       0 | 1-88              
  ...etailStep.tsx |     100 |      100 |     100 |     100 |                   
  ...eListStep.tsx |   99.09 |    97.36 |     100 |   99.09 | 71                
  ...etailStep.tsx |   64.43 |    59.57 |   33.33 |   64.43 | ...61-270,281-303 
  ...rListStep.tsx |   74.82 |    55.88 |     100 |   74.82 | ...65-170,181-185 
  ...etailStep.tsx |    10.3 |      100 |       0 |    10.3 | ...1,67-79,82-140 
  ToolListStep.tsx |   69.29 |       50 |     100 |   69.29 | ...23,126,135-144 
 ...nents/messages |   85.46 |    81.41 |   78.82 |   85.46 |                   
  ...ionDialog.tsx |   80.84 |     77.6 |    62.5 |   80.84 | ...98,516,534-536 
  BtwMessage.tsx   |     100 |      100 |     100 |     100 |                   
  ...upDisplay.tsx |     100 |    91.83 |     100 |     100 | 27,31,33,35       
  ...onMessage.tsx |   91.93 |    82.35 |     100 |   91.93 | 57-59,61,63       
  ...nMessages.tsx |   87.21 |    78.37 |   91.66 |   87.21 | ...41-347,403-409 
  DiffRenderer.tsx |   93.19 |    86.17 |     100 |   93.19 | ...09,237-238,304 
  ...tsDisplay.tsx |   97.82 |    77.27 |     100 |   97.82 | 87,89             
  ...usMessage.tsx |   76.31 |     42.1 |   66.66 |   76.31 | ...99,101,124,155 
  ...tsDisplay.tsx |   95.05 |    87.69 |     100 |   95.05 | ...32,134,167-172 
  ...ssMessage.tsx |    12.5 |      100 |       0 |    12.5 | 18-59             
  ...edMessage.tsx |   16.66 |      100 |       0 |   16.66 | 22-38             
  ...sMessages.tsx |   55.67 |       40 |   28.57 |   55.67 | ...20-125,133-145 
  ...ryMessage.tsx |   14.28 |      100 |       0 |   14.28 | 23-62             
  ...onMessage.tsx |   82.31 |    74.02 |   33.33 |   82.31 | ...69-471,478-480 
  ...upMessage.tsx |   96.04 |    93.91 |     100 |   96.04 | ...76,265-271,364 
  ToolMessage.tsx  |   88.76 |    76.66 |    92.3 |   88.76 | ...66-771,798-800 
 ...ponents/shared |   85.06 |    81.42 |    95.5 |   85.06 |                   
  ...ctionList.tsx |     100 |      100 |     100 |     100 |                   
  ...tonSelect.tsx |     100 |      100 |     100 |     100 |                   
  EnumSelector.tsx |     100 |    96.42 |     100 |     100 | 58                
  MaxSizedBox.tsx  |   83.01 |    86.25 |   88.88 |   83.01 | ...12-513,618-619 
  MultiSelect.tsx  |   93.58 |       75 |     100 |   93.58 | ...43,199-201,211 
  ...tonSelect.tsx |     100 |      100 |     100 |     100 |                   
  ...eSelector.tsx |     100 |       60 |     100 |     100 | 40-45             
  ...lableList.tsx |   77.22 |    85.71 |     100 |   77.22 | 45-63,70-73       
  StaticRender.tsx |   72.72 |      100 |     100 |   72.72 | 31-33             
  TextInput.tsx    |    80.8 |    67.24 |      80 |    80.8 | ...36-240,252-258 
  ...apsedTime.tsx |     100 |      100 |     100 |     100 |                   
  ...Indicator.tsx |     100 |      100 |     100 |     100 |                   
  ...lizedList.tsx |    88.7 |    83.64 |      90 |    88.7 | ...14-515,745-773 
  text-buffer.ts   |   85.94 |    81.73 |   97.91 |   85.94 | ...2651,2749-2750 
  ...er-actions.ts |   73.93 |    67.22 |     100 |   73.93 | ...32-733,934-936 
 ...ponents/skills |       0 |        0 |       0 |       0 |                   
  ...gerDialog.tsx |       0 |        0 |       0 |       0 | 1-694             
 ...ents/subagents |       0 |        0 |       0 |       0 |                   
  constants.ts     |       0 |        0 |       0 |       0 | 1-71              
  index.ts         |       0 |        0 |       0 |       0 | 1-11              
  reducers.tsx     |       0 |        0 |       0 |       0 | 1-190             
  types.ts         |       0 |        0 |       0 |       0 | 1-125             
  utils.ts         |       0 |        0 |       0 |       0 | 1-102             
 ...bagents/create |       0 |        0 |       0 |       0 |                   
  ...ionWizard.tsx |       0 |        0 |       0 |       0 | 1-299             
  ...rSelector.tsx |       0 |        0 |       0 |       0 | 1-85              
  ...onSummary.tsx |       0 |        0 |       0 |       0 | 1-331             
  ...tionInput.tsx |       0 |        0 |       0 |       0 | 1-177             
  ...dSelector.tsx |       0 |        0 |       0 |       0 | 1-63              
  ...nSelector.tsx |       0 |        0 |       0 |       0 | 1-58              
  ...EntryStep.tsx |       0 |        0 |       0 |       0 | 1-78              
  ToolSelector.tsx |       0 |        0 |       0 |       0 | 1-253             
 ...bagents/manage |   14.04 |    53.19 |    37.5 |   14.04 |                   
  ...ctionStep.tsx |       0 |        0 |       0 |       0 | 1-103             
  ...eleteStep.tsx |       0 |        0 |       0 |       0 | 1-62              
  ...tEditStep.tsx |       0 |        0 |       0 |       0 | 1-124             
  ...ctionStep.tsx |   35.42 |    59.52 |     100 |   35.42 | ...20-432,437-439 
  ...iewerStep.tsx |       0 |        0 |       0 |       0 | 1-73              
  ...gerDialog.tsx |       0 |        0 |       0 |       0 | 1-341             
 ...mponents/views |   70.21 |    67.32 |    64.7 |   70.21 |                   
  ContextUsage.tsx |   70.88 |    63.88 |      80 |   70.88 | ...20-426,463-557 
  DoctorReport.tsx |     9.8 |      100 |       0 |     9.8 | 25-54,57-131      
  ...sionsList.tsx |   87.87 |    73.68 |     100 |   87.87 | 69-76             
  McpStatus.tsx    |   89.49 |    60.52 |     100 |   89.49 | ...72,175-177,262 
  SkillsList.tsx   |   27.27 |      100 |       0 |   27.27 | 18-35             
  ToolsList.tsx    |     100 |      100 |     100 |     100 |                   
 src/ui/contexts   |   77.67 |    77.67 |   78.68 |   77.67 |                   
  ...ewContext.tsx |   64.83 |    88.88 |      50 |   64.83 | ...16-219,225-235 
  AppContext.tsx   |      80 |       50 |     100 |      80 | 19-20             
  ...ewContext.tsx |   92.45 |    62.79 |      50 |   92.45 | ...69-270,272-276 
  ...deContext.tsx |   88.88 |      100 |       0 |   88.88 | 21                
  ...igContext.tsx |   81.81 |       50 |     100 |   81.81 | 15-16             
  ...ssContext.tsx |    81.7 |     81.3 |     100 |    81.7 | ...1232,1237-1239 
  ...owContext.tsx |   91.07 |    81.81 |     100 |   91.07 | 47-48,60-62       
  ...deContext.tsx |     100 |      100 |      50 |     100 |                   
  ...onContext.tsx |   43.26 |     62.5 |    62.5 |   43.26 | ...64-267,276-279 
  ...gsContext.tsx |     100 |      100 |     100 |     100 |                   
  ...usContext.tsx |     100 |      100 |     100 |     100 |                   
  ...ngContext.tsx |   71.42 |       50 |     100 |   71.42 | 17-20             
  ...utContext.tsx |   85.71 |      100 |   66.66 |   85.71 | 13-14             
  ...erContext.tsx |     100 |      100 |      50 |     100 |                   
  ...edContext.tsx |     100 |      100 |     100 |     100 |                   
  ...nsContext.tsx |   88.88 |       50 |     100 |   88.88 | 137-138           
  ...teContext.tsx |   86.66 |       50 |     100 |   86.66 | 216-217           
  ...deContext.tsx |      80 |     87.5 |      75 |      80 | ...11-112,118-120 
 src/ui/daemon     |   90.65 |    73.61 |   95.45 |   90.65 |                   
  ...ui-adapter.ts |   90.65 |    73.61 |   95.45 |   90.65 | ...44,762-763,849 
 src/ui/editors    |       0 |        0 |       0 |       0 |                   
  ...ngsManager.ts |       0 |        0 |       0 |       0 | 1-67              
 src/ui/hooks      |    83.2 |    81.57 |   87.67 |    83.2 |                   
  ...dProcessor.ts |   88.11 |    82.81 |     100 |   88.11 | ...68-569,575-580 
  keyToAnsi.ts     |    3.92 |      100 |       0 |    3.92 | 19-77             
  ...esourceRef.ts |     100 |      100 |     100 |     100 |                   
  ...dProcessor.ts |   94.62 |    73.58 |     100 |   94.62 | ...86-287,292-293 
  ...dProcessor.ts |   84.46 |     63.5 |   82.35 |   84.46 | ...1072,1093-1097 
  ...oice-input.ts |   92.36 |    81.95 |   66.66 |   92.36 | ...00,502-503,658 
  ...amingState.ts |   12.22 |      100 |       0 |   12.22 | 54-157            
  ...agerDialog.ts |   88.23 |      100 |     100 |   88.23 | 20,24             
  ...dScrollbar.ts |     100 |      100 |     100 |     100 |                   
  ...ationFrame.ts |      42 |       75 |     100 |      42 | 42-44,53-59,62-87 
  ...odeCommand.ts |   58.82 |      100 |     100 |   58.82 | 28,33-48          
  ...enaCommand.ts |      85 |      100 |     100 |      85 | 23-24,29          
  ...aInProcess.ts |   27.92 |       80 |      25 |   27.92 | ...69-170,173-175 
  ...Completion.ts |   90.43 |     87.9 |     100 |   90.43 | ...15-422,462-471 
  ...ifications.ts |   86.91 |    96.29 |     100 |   86.91 | 116-130           
  ...tIndicator.ts |   83.49 |    70.96 |     100 |   83.49 | ...60,168,170-178 
  ...waySummary.ts |   96.22 |    69.69 |     100 |   96.22 | 125-127,169       
  ...ndTaskView.ts |   93.84 |    74.46 |     100 |   93.84 | ...25-129,218,224 
  ...chedScroll.ts |     100 |      100 |     100 |     100 |                   
  ...ketedPaste.ts |    23.8 |      100 |       0 |    23.8 | 19-37             
  ...nchCommand.ts |   93.19 |    71.05 |     100 |   93.19 | ...37,183,256-259 
  ...ompletion.tsx |   95.36 |    82.81 |     100 |   95.36 | ...32-233,235-236 
  ...dMigration.ts |    92.1 |    88.88 |     100 |    92.1 | 42-44             
  useCompletion.ts |   94.11 |    89.65 |     100 |   94.11 | ...32-133,137-138 
  ...nitMessage.ts |     100 |      100 |     100 |     100 |                   
  ...extualTips.ts |   77.27 |       50 |     100 |   77.27 | ...2,75-79,93-101 
  ...eteCommand.ts |   78.53 |    88.57 |     100 |   78.53 | ...96-104,112-113 
  ...ialogClose.ts |    12.5 |      100 |     100 |    12.5 | 85-181            
  useDiffData.ts   |       0 |        0 |       0 |       0 | 1-87              
  ...oublePress.ts |   53.12 |       75 |     100 |   53.12 | 33-35,41-54       
  ...orSettings.ts |     100 |      100 |     100 |     100 |                   
  ...Completion.ts |   99.12 |    97.64 |     100 |   99.12 | 182-183           
  ...ionUpdates.ts |    93.5 |     92.3 |     100 |    93.5 | ...87-291,304-310 
  ...agerDialog.ts |   88.88 |      100 |     100 |   88.88 | 21,25             
  ...backDialog.ts |    63.9 |    76.47 |   66.66 |    63.9 | ...66-168,190-191 
  useFocus.ts      |     100 |      100 |     100 |     100 |                   
  ...olderTrust.ts |     100 |      100 |     100 |     100 |                   
  ...ggestions.tsx |   96.47 |    78.94 |     100 |   96.47 | 121,155-156       
  ...miniStream.ts |    83.3 |    79.56 |      95 |    83.3 | ...3223,3306-3314 
  ...BranchName.ts |     100 |    91.66 |     100 |     100 | 30                
  ...oryManager.ts |   97.94 |    98.24 |     100 |   97.94 | 139-142           
  ...ooksDialog.ts |    87.5 |      100 |     100 |    87.5 | 19,23             
  ...stListener.ts |     100 |      100 |     100 |     100 |                   
  ...nAuthError.ts |   76.19 |       50 |     100 |   76.19 | 39-40,43-45       
  ...putHistory.ts |   92.59 |    85.71 |     100 |   92.59 | 63-64,72,94-96    
  ...storyStore.ts |     100 |    94.11 |     100 |     100 | 69                
  useKeypress.ts   |     100 |      100 |     100 |     100 |                   
  ...rdProtocol.ts |   36.36 |      100 |       0 |   36.36 | 24-31             
  ...unchEditor.ts |       0 |        0 |       0 |       0 | 1-90              
  ...gIndicator.ts |     100 |      100 |     100 |     100 |                   
  useLogger.ts     |      16 |      100 |       0 |      16 | 15-45             
  useMCPHealth.ts  |   63.15 |       75 |      50 |   63.15 | 42-52,64-67       
  ...cpApproval.ts |   92.37 |    83.33 |     100 |   92.37 | ...00-103,115-116 
  useMcpDialog.ts  |    87.5 |      100 |     100 |    87.5 | 19,23             
  ...moryDialog.ts |    87.5 |      100 |     100 |    87.5 | 19,23             
  ...oryMonitor.ts |   83.14 |    78.57 |     100 |   83.14 | 54-63,74-79       
  ...ssageQueue.ts |     100 |      100 |     100 |     100 |                   
  ...delCommand.ts |     100 |     87.5 |     100 |     100 | 29                
  ...ouseEvents.ts |   91.93 |       95 |      75 |   91.93 | 29-33             
  ...raseCycler.ts |   84.74 |    76.47 |     100 |   84.74 | ...49,52-53,69-71 
  ...rredEditor.ts |   58.33 |    22.22 |     100 |   58.33 | 23-27,29-33       
  ...derUpdates.ts |   86.95 |    77.41 |   91.66 |   86.95 | ...70,311-323,371 
  useQwenAuth.ts   |     100 |      100 |     100 |     100 |                   
  ...lScheduler.ts |   88.54 |    91.83 |     100 |   88.54 | ...73-278,381-391 
  ...oryCommand.ts |       0 |        0 |       0 |       0 | 1-7               
  ...tleRepaint.ts |     100 |      100 |     100 |     100 |                   
  ...umeCommand.ts |   93.47 |       68 |     100 |   93.47 | ...17,152,193-198 
  ...ompletion.tsx |   90.59 |    83.33 |     100 |   90.59 | ...01,104,137-140 
  ...ectionList.ts |   97.05 |    96.11 |     100 |   97.05 | ...90-191,245-248 
  ...sionPicker.ts |   92.87 |    90.35 |     100 |   92.87 | ...99-501,503-505 
  ...earchInput.ts |     100 |    97.29 |     100 |     100 | 82                
  ...ngsCommand.ts |   18.75 |      100 |       0 |   18.75 | 10-25             
  ...ellHistory.ts |   93.28 |    80.95 |     100 |   93.28 | ...96,153-154,164 
  ...oryCommand.ts |       0 |        0 |       0 |       0 | 1-73              
  ...agerDialog.ts |   88.23 |      100 |     100 |   88.23 | 20,24             
  ...Completion.ts |   82.85 |    85.13 |   94.73 |   82.85 | ...78-680,688-724 
  ...tateAndRef.ts |     100 |      100 |     100 |     100 |                   
  ...tatsDialog.ts |     100 |      100 |     100 |     100 |                   
  useStatusLine.ts |    96.3 |    92.19 |     100 |    96.3 | ...77-380,466-473 
  ...eateDialog.ts |   88.23 |      100 |     100 |   88.23 | 14,18             
  ...mInProcess.ts |   27.35 |       80 |      25 |   27.35 | ...82-183,186-188 
  ...tification.ts |     100 |     87.5 |     100 |     100 | 50                
  ...alProgress.ts |   53.06 |       50 |   66.66 |   53.06 | ...53,61-68,79-85 
  ...rminalSize.ts |   76.19 |      100 |      50 |   76.19 | 21-25             
  ...emeCommand.ts |   67.01 |    29.41 |     100 |   67.01 | ...10-111,115-116 
  useTimer.ts      |   88.09 |    85.71 |     100 |   88.09 | 44-45,51-53       
  ...lMigration.ts |       0 |        0 |       0 |       0 |                   
  ...rustModify.ts |     100 |      100 |     100 |     100 |                   
  useTurnDiffs.ts  |   95.12 |    78.57 |     100 |   95.12 | 133-134,156-157   
  ...elcomeBack.ts |   87.36 |     90.9 |     100 |   87.36 | ...,94-96,114-115 
  ...reeSession.ts |   93.75 |    72.72 |     100 |   93.75 | 47-48,72          
  vim.ts           |      74 |    67.56 |   69.23 |      74 | ...1854-1861,1869 
 src/ui/layouts    |    90.9 |    90.62 |     100 |    90.9 |                   
  ...AppLayout.tsx |   90.72 |       90 |     100 |   90.72 | 57-59,101-106     
  ...AppLayout.tsx |   91.17 |    91.66 |     100 |   91.17 | 70-75             
 src/ui/models     |   80.24 |    79.16 |   71.42 |   80.24 |                   
  ...ableModels.ts |   80.24 |    79.16 |   71.42 |   80.24 | ...,61-71,123-125 
 ...noninteractive |     100 |      100 |    6.66 |     100 |                   
  ...eractiveUi.ts |     100 |      100 |    6.66 |     100 |                   
 src/ui/state      |   94.91 |    81.81 |     100 |   94.91 |                   
  extensions.ts    |   94.91 |    81.81 |     100 |   94.91 | 68-69,88          
 src/ui/themes     |    98.5 |    73.06 |     100 |    98.5 |                   
  ansi-light.ts    |     100 |      100 |     100 |     100 |                   
  ansi.ts          |     100 |      100 |     100 |     100 |                   
  atom-one-dark.ts |     100 |      100 |     100 |     100 |                   
  ayu-light.ts     |     100 |      100 |     100 |     100 |                   
  ayu.ts           |     100 |      100 |     100 |     100 |                   
  color-utils.ts   |   99.23 |    97.05 |     100 |   99.23 | 277-278           
  default-light.ts |     100 |      100 |     100 |     100 |                   
  default.ts       |     100 |      100 |     100 |     100 |                   
  ...inal-theme.ts |   88.59 |    85.96 |     100 |   88.59 | ...57-261,266-270 
  dracula.ts       |     100 |      100 |     100 |     100 |                   
  github-dark.ts   |     100 |      100 |     100 |     100 |                   
  github-light.ts  |     100 |      100 |     100 |     100 |                   
  googlecode.ts    |     100 |      100 |     100 |     100 |                   
  no-color.ts      |     100 |      100 |     100 |     100 |                   
  qwen-dark.ts     |     100 |      100 |     100 |     100 |                   
  qwen-light.ts    |     100 |      100 |     100 |     100 |                   
  ...tic-tokens.ts |     100 |      100 |     100 |     100 |                   
  ...-of-purple.ts |     100 |      100 |     100 |     100 |                   
  theme-manager.ts |   88.68 |    84.33 |     100 |   88.68 | ...83-392,397-398 
  theme.ts         |     100 |    38.02 |     100 |     100 | ...34-449,457-461 
  xcode.ts         |     100 |      100 |     100 |     100 |                   
 src/ui/utils      |   83.83 |    83.35 |   93.42 |   83.83 |                   
  ...Colorizer.tsx |   80.42 |    85.41 |     100 |   80.42 | ...00-201,298-324 
  ...nRenderer.tsx |   68.83 |    70.14 |      50 |   68.83 | ...52-254,274-293 
  ...wnDisplay.tsx |   86.01 |    87.66 |     100 |   86.01 | ...87,704,729-754 
  ...idDiagram.tsx |   87.79 |    95.34 |     100 |   87.79 | 156-179           
  ...eRenderer.tsx |   92.08 |    80.45 |      95 |   92.08 | ...76-679,723-728 
  ...odeDisplay.ts |   96.55 |     90.9 |     100 |   96.55 | 34                
  asciiCharts.ts   |   96.77 |    87.62 |     100 |   96.77 | 173-180,281       
  ...dWorkUtils.ts |     100 |      100 |     100 |     100 |                   
  ...boardUtils.ts |   51.92 |    72.72 |   91.66 |   51.92 | ...21,624-633,636 
  commandUtils.ts  |      96 |    88.88 |     100 |      96 | ...72,174-175,302 
  computeStats.ts  |     100 |      100 |     100 |     100 |                   
  customBanner.ts  |   90.68 |    91.22 |     100 |   90.68 | ...13,324-327,334 
  displayUtils.ts  |   90.38 |    72.72 |     100 |   90.38 | 23,25,29,31,33    
  formatters.ts    |    95.4 |    98.38 |     100 |    95.4 | 123-126           
  gradientUtils.ts |     100 |      100 |     100 |     100 |                   
  highlight.ts     |     100 |      100 |     100 |     100 |                   
  ...oryMapping.ts |     100 |    96.77 |     100 |     100 | 43                
  historyUtils.ts  |    95.5 |       95 |     100 |    95.5 | 94-97             
  isNarrowWidth.ts |     100 |      100 |     100 |     100 |                   
  ...olDetector.ts |    8.23 |      100 |       0 |    8.23 | ...31-132,135-136 
  latexRenderer.ts |   94.95 |     73.8 |     100 |   94.95 | ...76-178,184-187 
  layoutUtils.ts   |     100 |      100 |     100 |     100 |                   
  ...ightLoader.ts |     100 |       95 |     100 |     100 | 81                
  ...nUtilities.ts |   90.21 |    85.71 |     100 |   90.21 | ...,91-95,107-108 
  ...t-position.ts |     100 |      100 |     100 |     100 |                   
  ...ToolGroups.ts |   98.65 |    96.72 |     100 |   98.65 | 48-49             
  ...geRenderer.ts |   86.23 |    69.06 |   95.12 |   86.23 | ...1284,1324-1330 
  ...alRenderer.ts |   86.69 |     71.9 |     100 |   86.69 | ...1476,1513-1519 
  ...lsBySource.ts |     100 |    95.23 |     100 |     100 | 84                
  mouse.ts         |   92.14 |    73.77 |     100 |   92.14 | ...29,136,140-143 
  osc8.ts          |   94.84 |    88.74 |     100 |   94.84 | ...57,442,446-447 
  ...mConstants.ts |     100 |      100 |     100 |     100 |                   
  restoreGoal.ts   |   99.02 |    97.56 |     100 |   99.02 | 106               
  ...storyUtils.ts |   66.66 |    75.96 |   93.33 |   66.66 | ...37-459,580-581 
  ...ickerUtils.ts |     100 |      100 |     100 |     100 |                   
  ...are-cursor.ts |   89.47 |    85.71 |     100 |   89.47 | 39-44             
  ...ataService.ts |   93.17 |     79.1 |     100 |   93.17 | ...14,227,254-256 
  ...izedOutput.ts |   94.94 |      100 |   88.88 |   94.94 | 112-117           
  ...wOptimizer.ts |     100 |    96.77 |     100 |     100 | 69                
  terminalSetup.ts |    4.37 |      100 |       0 |    4.37 | 44-393            
  textUtils.ts     |   97.61 |    94.89 |   92.85 |   97.61 | ...50-251,386-387 
  ...background.ts |     100 |      100 |     100 |     100 |                   
  todoSnapshot.ts  |   89.33 |    93.47 |     100 |   89.33 | ...,66-78,180-181 
  updateCheck.ts   |     100 |    80.95 |     100 |     100 | 30-42             
  ...ow-keyword.ts |     100 |      100 |     100 |     100 |                   
 ...i/utils/export |      57 |     40.8 |   79.41 |      57 |                   
  collect.ts       |   55.92 |    50.58 |   86.36 |   55.92 | ...25-640,642-647 
  index.ts         |     100 |      100 |     100 |     100 |                   
  normalize.ts     |   58.11 |    20.51 |      80 |   58.11 | ...13-314,328-363 
  types.ts         |       0 |        0 |       0 |       0 | 1                 
  utils.ts         |      40 |      100 |       0 |      40 | 11-13             
 ...ort/formatters |    3.38 |      100 |       0 |    3.38 |                   
  html.ts          |    9.61 |      100 |       0 |    9.61 | ...28,34-76,82-84 
  json.ts          |      50 |      100 |       0 |      50 | 14-15             
  jsonl.ts         |     3.5 |      100 |       0 |     3.5 | 14-76             
  markdown.ts      |    0.94 |      100 |       0 |    0.94 | 13-295            
 src/ui/voice      |   83.81 |    74.58 |   83.87 |   83.81 |                   
  ...d-recorder.ts |     6.2 |        0 |       0 |     6.2 | ...33-159,162-163 
  ...o-recorder.ts |      80 |       90 |      50 |      80 | ...11-112,126-131 
  ...me-session.ts |   91.14 |     64.7 |   92.85 |   91.14 | ...76,282,292-295 
  sox-recorder.ts  |    92.7 |    71.87 |     100 |    92.7 | ...34-135,153-154 
  ...ailability.ts |     100 |      100 |     100 |     100 |                   
  ...e-keyterms.ts |     100 |      100 |     100 |     100 |                   
  voice-model.ts   |     100 |      100 |     100 |     100 |                   
  ...e-recorder.ts |   88.29 |    67.74 |   81.81 |   88.29 | ...,98-99,112,115 
  voice-refine.ts  |     100 |    93.33 |     100 |     100 | 92                
  ...ream-retry.ts |     100 |    88.88 |     100 |     100 | 18                
  ...am-session.ts |   87.45 |    63.33 |   81.81 |   87.45 | ...03,320-322,339 
  ...ranscriber.ts |   89.47 |    76.77 |   95.65 |   89.47 | ...51-553,556-558 
 src/utils         |   73.62 |    89.83 |   90.93 |   73.62 |                   
  acpModelUtils.ts |   94.44 |     92.3 |     100 |   94.44 | 44,68-69,73-74    
  apiPreconnect.ts |   96.72 |    97.14 |     100 |   96.72 | 165-168           
  checks.ts        |   33.33 |      100 |       0 |   33.33 | 23-28             
  cleanup.ts       |   82.53 |    93.33 |      80 |   82.53 | 74,105-115        
  commands.ts      |     100 |      100 |     100 |     100 |                   
  commentJson.ts   |   90.51 |     92.1 |     100 |   90.51 | 67-76,116         
  ...Calculator.ts |     100 |      100 |     100 |     100 |                   
  cpuProfiler.ts   |   70.73 |    73.23 |   88.88 |   70.73 | ...27,430-431,438 
  deepMerge.ts     |     100 |       90 |     100 |     100 | 41-43,49          
  ...ScopeUtils.ts |   97.56 |    88.88 |     100 |   97.56 | 67                
  doctorChecks.ts  |   70.31 |    74.57 |     100 |   70.31 | ...95-301,325-341 
  ...putCapture.ts |   90.65 |    86.17 |     100 |   90.65 | ...72,370,372-373 
  ...arResolver.ts |   97.14 |    96.55 |     100 |   97.14 | 125-126           
  errors.ts        |   90.85 |    96.36 |    92.3 |   90.85 | 69-70,298-310     
  events.ts        |     100 |      100 |     100 |     100 |                   
  gitUtils.ts      |   91.22 |    82.35 |     100 |   91.22 | ...,94-97,140-143 
  ...AutoUpdate.ts |    92.2 |    95.23 |   88.88 |    92.2 | 130-141           
  ...tyWarnings.ts |     100 |      100 |     100 |     100 |                   
  ...lationInfo.ts |   97.71 |    94.18 |     100 |   97.71 | ...57,274-275,320 
  languageUtils.ts |   98.47 |    97.67 |     100 |   98.47 | 153-154           
  math.ts          |       0 |        0 |       0 |       0 | 1-15              
  ...iagnostics.ts |   94.57 |    83.01 |   88.88 |   94.57 | ...05,311,315-317 
  ...serMessage.ts |     100 |      100 |     100 |     100 |                   
  ...onfigUtils.ts |   99.46 |    98.95 |     100 |   99.46 | 218               
  ...iveHelpers.ts |   96.93 |    93.84 |     100 |   96.93 | ...15-416,514,527 
  osc.ts           |    97.5 |      100 |   88.88 |    97.5 | 195-196           
  package.ts       |   88.88 |       80 |     100 |   88.88 | 31-32             
  processUtils.ts  |     100 |      100 |     100 |     100 |                   
  readStdin.ts     |   93.67 |    94.11 |   85.71 |   93.67 | 79-83             
  relaunch.ts      |   93.22 |    81.25 |     100 |   93.22 | 65-67,80          
  resolvePath.ts   |     100 |      100 |     100 |     100 |                   
  runBudget.ts     |   99.35 |    96.77 |     100 |   99.35 | 119               
  sandbox-path.ts  |     100 |      100 |     100 |     100 |                   
  sandbox.ts       |       0 |        0 |       0 |       0 | 1-1042            
  ...xImageName.ts |     100 |    77.77 |     100 |     100 | 10,18             
  sandboxMounts.ts |     100 |      100 |     100 |     100 |                   
  sessionPaths.ts  |   90.84 |    90.56 |     100 |   90.84 | ...81-182,185-186 
  settingsUtils.ts |   82.51 |    91.85 |   89.74 |   82.51 | ...76-694,701-709 
  spawnWrapper.ts  |     100 |      100 |     100 |     100 |                   
  ...ate-verify.ts |     100 |      100 |     100 |     100 |                   
  ...one-update.ts |   27.55 |    76.11 |   45.83 |   27.55 | ...44-845,848-867 
  ...upProfiler.ts |   98.47 |    94.66 |     100 |   98.47 | 132-133,308       
  ...upWarnings.ts |     100 |      100 |     100 |     100 |                   
  stdioHelpers.ts  |     100 |       60 |     100 |     100 | 23,32             
  systemInfo.ts    |   95.12 |    89.06 |     100 |   95.12 | ...43-244,249-253 
  ...InfoFields.ts |    87.5 |    65.85 |     100 |    87.5 | ...24-125,146-147 
  ...alSequence.ts |     100 |    97.61 |     100 |     100 | 60                
  ...iffPreview.ts |   94.11 |    83.33 |     100 |   94.11 | 13                
  ...entEmitter.ts |     100 |      100 |     100 |     100 |                   
  ...ansionHook.ts |     100 |      100 |     100 |     100 |                   
  ...upWarnings.ts |   91.17 |    82.35 |     100 |   91.17 | 67-68,73-74,77-78 
  version.ts       |     100 |       50 |     100 |     100 | 11                
  ...ingHandler.ts |     100 |      100 |     100 |     100 |                   
  windowTitle.ts   |   95.45 |    93.33 |     100 |   95.45 | 54-55             
  ...WithBackup.ts |   65.04 |    77.77 |     100 |   65.04 | 97,112,133-172    
 ...s/housekeeping |   91.63 |    91.02 |      95 |   91.63 |                   
  cleanup.ts       |   95.77 |    95.83 |     100 |   95.77 | 70-72             
  ...eractionAt.ts |     100 |      100 |     100 |     100 |                   
  scheduler.ts     |   91.91 |    90.47 |    87.5 |   91.91 | 58-62,73,131-135  
  throttledOnce.ts |   86.66 |     86.2 |     100 |   86.66 | ...99,105,137-138 
-------------------|---------|----------|---------|---------|-------------------
Core Package - Full Text Report
-------------------|---------|----------|---------|---------|-------------------
File               | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s 
-------------------|---------|----------|---------|---------|-------------------
All files          |   84.05 |     84.5 |    85.3 |   84.05 |                   
 src               |     100 |      100 |     100 |     100 |                   
  index.ts         |     100 |      100 |     100 |     100 |                   
 src/__mocks__/fs  |       0 |        0 |       0 |       0 |                   
  promises.ts      |       0 |        0 |       0 |       0 | 1-48              
 src/agents        |   89.65 |    81.31 |   94.65 |   89.65 |                   
  ...transcript.ts |    92.3 |    85.93 |     100 |    92.3 | ...05,324-325,456 
  ...ent-resume.ts |   83.33 |    71.42 |   79.41 |   83.33 | ...1260-1264,1267 
  ...ound-tasks.ts |   96.83 |    89.13 |     100 |   96.83 | ...1170,1190-1193 
  index.ts         |     100 |      100 |     100 |     100 |                   
  ...n-registry.ts |   95.65 |    89.28 |     100 |   95.65 | ...12-413,485-489 
  ...w-snapshot.ts |   91.86 |       75 |     100 |   91.86 | ...54,178,185-187 
 src/agents/arena  |   75.91 |    66.34 |   78.72 |   75.91 |                   
  ...gentClient.ts |   79.47 |    88.88 |   81.81 |   79.47 | ...68-183,189-204 
  ArenaManager.ts  |   74.58 |    62.65 |   78.26 |   74.58 | ...1860,1866-1867 
  arena-events.ts  |   64.44 |      100 |      50 |   64.44 | ...71-175,178-183 
  diff-summary.ts  |    87.5 |    72.34 |     100 |    87.5 | ...32-133,137-138 
  index.ts         |     100 |      100 |     100 |     100 |                   
  types.ts         |     100 |      100 |     100 |     100 |                   
 ...gents/backends |   76.47 |    86.27 |   73.75 |   76.47 |                   
  ITermBackend.ts  |   97.97 |    93.93 |     100 |   97.97 | ...78-180,255,307 
  ...essBackend.ts |   92.06 |    91.04 |      90 |   92.06 | ...95,250-270,329 
  TmuxBackend.ts   |    90.7 |    76.55 |   97.36 |    90.7 | ...87,697,743-747 
  detect.ts        |   31.25 |      100 |       0 |   31.25 | 34-88             
  index.ts         |     100 |      100 |     100 |     100 |                   
  iterm-it2.ts     |     100 |     92.1 |     100 |     100 | 37-38,106         
  tmux-commands.ts |    6.64 |      100 |    3.03 |    6.64 | ...93-363,386-503 
  types.ts         |     100 |      100 |     100 |     100 |                   
 ...agents/runtime |   88.07 |    84.98 |   82.21 |   88.07 |                   
  agent-context.ts |     100 |      100 |     100 |     100 |                   
  agent-core.ts    |   78.78 |    74.15 |   65.95 |   78.78 | ...1787,1814-1861 
  agent-events.ts  |     100 |      100 |     100 |     100 |                   
  ...t-headless.ts |   87.93 |    79.06 |   63.63 |   87.93 | ...00-401,404-405 
  ...nteractive.ts |   80.55 |    81.35 |   74.07 |   80.55 | ...79,481,483,486 
  ...statistics.ts |   98.19 |    82.35 |     100 |   98.19 | 127,151,192,225   
  agent-types.ts   |     100 |      100 |     100 |     100 |                   
  index.ts         |     100 |      100 |     100 |     100 |                   
  ...low-budget.ts |     100 |      100 |     100 |     100 |                   
  ...ow-journal.ts |   91.76 |    75.86 |     100 |   91.76 | ...38-139,179-181 
  ...chestrator.ts |   91.57 |    87.64 |   82.35 |   91.57 | ...1739,1788-1791 
  ...ow-prompts.ts |     100 |      100 |     100 |     100 |                   
  ...ow-sandbox.ts |   96.87 |    94.51 |     100 |   96.87 | ...24-325,330-331 
  ...flow-saved.ts |   96.51 |    94.36 |     100 |   96.51 | 134-135,234-237   
  ...flow-stall.ts |   97.87 |    82.69 |     100 |   97.87 | 136-137,234       
 src/agents/tasks  |     100 |      100 |     100 |     100 |                   
  types.ts         |     100 |      100 |     100 |     100 |                   
 src/agents/team   |   80.31 |    83.19 |    86.5 |   80.31 |                   
  TeamManager.ts   |   67.11 |    76.25 |   74.41 |   67.11 | ...1433,1456-1457 
  identity.ts      |     100 |      100 |     100 |     100 |                   
  index.ts         |     100 |      100 |     100 |     100 |                   
  ...sionBridge.ts |     100 |      100 |     100 |     100 |                   
  mailbox.ts       |   94.76 |    86.36 |   92.85 |   94.76 | 86-87,348-354     
  ...ptAddendum.ts |     100 |      100 |     100 |     100 |                   
  tasks.ts         |   88.85 |    82.47 |   96.29 |   88.85 | ...-990,1034-1035 
  team-events.ts   |   60.52 |      100 |      50 |   60.52 | ...37-141,148-152 
  teamHelpers.ts   |   92.02 |    94.91 |   95.23 |   92.02 | ...31-332,368-378 
  types.ts         |     100 |      100 |     100 |     100 |                   
 ...eam/test-utils |   94.39 |    93.38 |   98.21 |   94.39 |                   
  ...on-harness.ts |   96.49 |    77.77 |     100 |   96.49 | 128-129,141-142   
  fake-agent.ts    |   98.49 |    95.08 |     100 |   98.49 | 201-203           
  fake-backend.ts  |   86.46 |    97.61 |   95.83 |   86.46 | 124-146           
 src/config        |   78.98 |    84.26 |   65.67 |   78.98 |                   
  ...xtDefaults.ts |     100 |      100 |     100 |     100 |                   
  config.ts        |   77.31 |    83.39 |   61.67 |   77.31 | ...5138,5143-5144 
  constants.ts     |     100 |      100 |     100 |     100 |                   
  models.ts        |     100 |      100 |     100 |     100 |                   
  storage.ts       |   94.63 |    91.86 |   89.58 |   94.63 | ...15-416,419-420 
 ...nfirmation-bus |   98.29 |    97.14 |     100 |   98.29 |                   
  message-bus.ts   |   98.14 |    97.05 |     100 |   98.14 | 42-43             
  types.ts         |     100 |      100 |     100 |     100 |                   
 src/core          |    88.5 |    84.22 |   91.97 |    88.5 |                   
  baseLlmClient.ts |   81.74 |    77.52 |   77.77 |   81.74 | ...24,526-536,545 
  client.ts        |   87.72 |    81.21 |      90 |   87.72 | ...2615,2710-2711 
  ...tGenerator.ts |   88.07 |       75 |     100 |   88.07 | ...79-383,391-395 
  ...lScheduler.ts |   87.64 |     82.3 |   95.94 |   87.64 | ...4173,4201-4212 
  geminiChat.ts    |   89.04 |    87.24 |      95 |   89.04 | ...3253,3320-3321 
  geminiRequest.ts |     100 |      100 |     100 |     100 |                   
  ...MediaLimit.ts |     100 |    95.83 |     100 |     100 | 96                
  ...htProtocol.ts |    9.09 |      100 |       0 |    9.09 | ...9,62-66,69-110 
  logger.ts        |   87.41 |    87.02 |     100 |   87.41 | ...64-568,614-628 
  ...tyDefaults.ts |     100 |      100 |     100 |     100 |                   
  ...olExecutor.ts |   92.59 |       75 |      50 |   92.59 | 41-42             
  ...on-helpers.ts |   86.72 |    73.68 |     100 |   86.72 | ...00-201,215-224 
  ...issionFlow.ts |   98.78 |       96 |     100 |   98.78 | 93                
  prompts.ts       |   88.93 |    87.87 |   72.72 |   88.93 | ...-910,1113-1114 
  ...port-retry.ts |     100 |      100 |     100 |     100 |                   
  tokenLimits.ts   |     100 |    89.28 |     100 |     100 | 30,65-66          
  ...allIdUtils.ts |   98.23 |     92.1 |     100 |   98.23 | 36,45             
  ...okTriggers.ts |   99.43 |    91.58 |     100 |   99.43 | 175,186           
  turn.ts          |   96.81 |    88.13 |     100 |   96.81 | ...60,473-474,520 
 ...ntentGenerator |   95.04 |    82.54 |      94 |   95.04 |                   
  ...tGenerator.ts |   96.59 |    84.07 |   92.85 |   96.59 | ...,973,1001-1003 
  converter.ts     |   94.51 |    80.72 |     100 |   94.51 | ...06-607,617,823 
  index.ts         |       0 |        0 |       0 |       0 | 1-21              
  usage.ts         |     100 |      100 |     100 |     100 |                   
 ...ntentGenerator |   91.53 |    71.64 |   93.33 |   91.53 |                   
  ...tGenerator.ts |      90 |    70.96 |   92.85 |      90 | ...80-286,304-305 
  index.ts         |     100 |       80 |     100 |     100 | 50                
 ...ntentGenerator |   94.24 |    84.03 |   91.17 |   94.24 |                   
  index.ts         |     100 |      100 |     100 |     100 |                   
  ...tGenerator.ts |   94.11 |    82.57 |   90.62 |   94.11 | ...1028-1029,1057 
  ...tDetection.ts |     100 |      100 |     100 |     100 |                   
 ...ntentGenerator |   88.39 |    84.82 |    93.9 |   88.39 |                   
  constants.ts     |     100 |      100 |     100 |     100 |                   
  converter.ts     |   87.57 |    82.32 |   96.15 |   87.57 | ...1508,1677-1692 
  errorHandler.ts  |     100 |      100 |     100 |     100 |                   
  index.ts         |   58.33 |    71.42 |      50 |   58.33 | ...70,73-77,85-89 
  ...tGenerator.ts |    66.4 |    70.58 |   88.88 |    66.4 | ...51-157,168-169 
  pipeline.ts      |   95.19 |    87.83 |     100 |   95.19 | ...49-650,658,726 
  ...ureContext.ts |     100 |      100 |     100 |     100 |                   
  ...ingOptions.ts |       0 |        0 |       0 |       0 | 1                 
  ...CallParser.ts |    90.2 |    87.65 |     100 |    90.2 | ...39-343,373-374 
  ...kingParser.ts |     100 |    96.87 |     100 |     100 | 42                
  types.ts         |       0 |        0 |       0 |       0 | 1                 
 ...rator/provider |    97.1 |    90.49 |   96.07 |    97.1 |                   
  dashscope.ts     |   97.78 |     92.3 |   94.44 |   97.78 | ...15-316,458-459 
  deepseek.ts      |   94.91 |    89.36 |     100 |   94.91 | ...31-132,145-146 
  default.ts       |    97.5 |    96.55 |   88.88 |    97.5 | 123-124,197       
  index.ts         |     100 |      100 |     100 |     100 |                   
  mimo.ts          |   94.11 |    66.66 |     100 |   94.11 | 29,52-53          
  minimax.ts       |     100 |      100 |     100 |     100 |                   
  mistral.ts       |   96.07 |    73.33 |     100 |   96.07 | 32-33             
  modelscope.ts    |     100 |      100 |     100 |     100 |                   
  types.ts         |       0 |        0 |       0 |       0 |                   
  utils.ts         |     100 |      100 |     100 |     100 |                   
 src/extension     |   77.79 |    79.89 |   84.61 |   77.79 |                   
  ...-converter.ts |   78.29 |    70.87 |     100 |   78.29 | ...1108,1153-1154 
  corruptFile.ts   |     100 |       50 |     100 |     100 | 40-45             
  ...-converter.ts |    73.8 |       75 |     100 |    73.8 | 44-54             
  ...ionManager.ts |   60.68 |    71.42 |   55.17 |   60.68 | ...1613,1638-1639 
  ...references.ts |     100 |    89.58 |     100 |     100 | ...05,129,197,200 
  ...onSettings.ts |   92.65 |    91.89 |     100 |   92.65 | ...28-232,312-313 
  ...-converter.ts |    75.9 |    83.33 |   85.71 |    75.9 | ...98,202,214-248 
  github.ts        |   84.71 |     85.4 |     100 |   84.71 | ...61-662,670-671 
  http-client.ts   |   84.61 |       80 |     100 |   84.61 | 20-21             
  i18n.ts          |   78.26 |    95.83 |      50 |   78.26 | 104-110,116-123   
  index.ts         |     100 |      100 |     100 |     100 |                   
  marketplace.ts   |   87.11 |    84.28 |     100 |   87.11 | ...44,348-354,429 
  npm.ts           |   74.67 |    71.64 |     100 |   74.67 | ...19-421,428-432 
  override.ts      |   94.11 |    88.88 |     100 |   94.11 | 63-64,81-82       
  redaction.ts     |     100 |      100 |     100 |     100 |                   
  settings.ts      |   66.26 |      100 |      50 |   66.26 | 81-107,141-146    
  ...ceRegistry.ts |   93.96 |    83.14 |     100 |   93.96 | ...35-341,362-363 
  storage.ts       |     100 |      100 |     100 |     100 |                   
  ...ableSchema.ts |     100 |      100 |     100 |     100 |                   
  variables.ts     |   88.75 |    83.33 |     100 |   88.75 | ...28-231,234-237 
 src/followup      |   76.02 |    74.12 |   90.62 |   76.02 |                   
  followupState.ts |   98.44 |    95.74 |     100 |   98.44 | 236-237           
  index.ts         |     100 |      100 |     100 |     100 |                   
  overlayFs.ts     |   96.29 |    88.88 |     100 |   96.29 | 78,108,122        
  speculation.ts   |   63.01 |    40.29 |   71.42 |   63.01 | ...73-574,577-582 
  ...onToolGate.ts |     100 |    96.55 |     100 |     100 | 95                
  ...nGenerator.ts |   67.96 |    77.58 |      80 |   67.96 | ...67-218,297-299 
 src/generated     |       0 |        0 |       0 |       0 |                   
  git-commit.ts    |       0 |        0 |       0 |       0 | 1-10              
 src/goals         |   89.57 |    83.57 |   94.44 |   89.57 |                   
  ...eGoalStore.ts |    85.1 |    95.45 |   84.61 |    85.1 | ...63-166,174-182 
  goalHook.ts      |   97.26 |    91.66 |     100 |   97.26 | 100-105           
  goalJudge.ts     |   84.33 |    74.28 |     100 |   84.33 | ...57-358,366-368 
  index.ts         |     100 |      100 |     100 |     100 |                   
 src/hooks         |   86.94 |    85.59 |   88.05 |   86.94 |                   
  ...okRegistry.ts |   86.48 |    77.08 |     100 |   86.48 | ...41-344,362-369 
  ...bortSignal.ts |     100 |      100 |     100 |     100 |                   
  ...terpolator.ts |   96.66 |    93.33 |     100 |   96.66 | 66-67             
  ...HookRunner.ts |   96.68 |    87.23 |     100 |   96.68 | 110-112,231-233   
  ...Aggregator.ts |   96.35 |    90.69 |     100 |   96.35 | ...00-301,382,384 
  ...entHandler.ts |   95.32 |    85.05 |   94.11 |   95.32 | ...71,928-929,939 
  hookPlanner.ts   |   86.29 |    83.33 |   85.71 |   86.29 | ...15-219,226-237 
  hookRegistry.ts  |   91.48 |    84.61 |     100 |   91.48 | ...97,416,420,424 
  hookRunner.ts    |   62.42 |    72.04 |   66.66 |   62.42 | ...64-765,774-775 
  hookSystem.ts    |      87 |      100 |   68.88 |      87 | ...15-716,722-723 
  ...HookRunner.ts |   75.51 |     61.9 |      80 |   75.51 | ...05-406,424-425 
  index.ts         |     100 |      100 |     100 |     100 |                   
  ...edCallback.ts |     100 |      100 |     100 |     100 |                   
  ...HookRunner.ts |   96.37 |     90.9 |      90 |   96.37 | 342-350,424-425   
  ...SkillHooks.ts |   78.75 |       75 |   66.66 |   78.75 | 62-66,137-152     
  ...oksManager.ts |   96.66 |    91.66 |     100 |   96.66 | ...90,209-210,223 
  ssrfGuard.ts     |   77.22 |    86.74 |     100 |   77.22 | ...57,261-267,273 
  stopHookCap.ts   |     100 |      100 |     100 |     100 |                   
  trustedHooks.ts  |      90 |    52.63 |     100 |      90 | ...53,66-67,97-98 
  types.ts         |   92.83 |       94 |    87.5 |   92.83 | ...87-488,573-577 
  urlValidator.ts  |     100 |      100 |     100 |     100 |                   
 src/ide           |   75.63 |    83.78 |   78.33 |   75.63 |                   
  constants.ts     |     100 |      100 |     100 |     100 |                   
  detect-ide.ts    |     100 |      100 |     100 |     100 |                   
  ide-client.ts    |    66.3 |    82.26 |   66.66 |    66.3 | ...9-970,999-1007 
  ide-installer.ts |   89.06 |    79.31 |     100 |   89.06 | ...36,143-147,160 
  ideContext.ts    |     100 |      100 |     100 |     100 |                   
  process-utils.ts |   84.84 |    71.79 |     100 |   84.84 | ...37,151,193-194 
  types.ts         |     100 |      100 |     100 |     100 |                   
 src/lsp           |   43.47 |     58.9 |   52.48 |   43.47 |                   
  ...nfigLoader.ts |   78.28 |     64.7 |      95 |   78.28 | ...35-437,441-447 
  ...ionFactory.ts |   42.81 |    73.07 |      50 |   42.81 | ...76-427,433-450 
  ...Normalizer.ts |   23.09 |    13.72 |   30.43 |   23.09 | ...04-905,909-924 
  ...verManager.ts |   25.31 |    62.06 |   41.66 |   25.31 | ...85-704,710-740 
  ...eLspClient.ts |   32.77 |       80 |   17.64 |   32.77 | ...84-288,294-295 
  ...LspService.ts |   51.85 |    65.98 |   68.57 |   51.85 | ...1339,1399-1409 
  constants.ts     |     100 |      100 |     100 |     100 |                   
  types.ts         |     100 |      100 |     100 |     100 |                   
 src/mcp           |   82.39 |    77.73 |   78.33 |   82.39 |                   
  configHash.ts    |     100 |      100 |     100 |     100 |                   
  constants.ts     |     100 |      100 |     100 |     100 |                   
  ...h-provider.ts |   86.95 |      100 |   33.33 |   86.95 | ...,93,97,101-102 
  ...h-provider.ts |   79.52 |    58.06 |     100 |   79.52 | ...33-940,947-949 
  ...en-storage.ts |   98.78 |    97.95 |     100 |   98.78 | 106-107           
  oauth-utils.ts   |   73.61 |    85.24 |    92.3 |   73.61 | ...46-366,392-421 
  ...n-provider.ts |   89.83 |       96 |   45.45 |   89.83 | ...43,147,151-152 
 .../token-storage |   82.12 |    88.19 |   89.28 |   82.12 |                   
  ...en-storage.ts |     100 |      100 |     100 |     100 |                   
  ...en-storage.ts |   87.08 |    87.27 |   95.23 |   87.08 | ...00-201,214-215 
  ...en-storage.ts |     100 |      100 |     100 |     100 |                   
  index.ts         |     100 |      100 |     100 |     100 |                   
  ...en-storage.ts |   68.14 |    82.35 |   64.28 |   68.14 | ...81-295,298-314 
  types.ts         |     100 |      100 |     100 |     100 |                   
 src/memory        |   74.29 |    78.47 |   72.53 |   74.29 |                   
  const.ts         |   94.28 |     92.3 |     100 |   94.28 | 66-67             
  dream.ts         |      66 |    73.33 |      50 |      66 | 51,108-149        
  ...entPlanner.ts |   57.84 |    72.72 |   33.33 |   57.84 | ...35,140-147,152 
  entries.ts       |   63.77 |    79.16 |      50 |   63.77 | ...72-180,183-189 
  extract.ts       |   91.36 |    72.41 |     100 |   91.36 | ...99,118-121,189 
  ...entPlanner.ts |   67.59 |     73.8 |      50 |   67.59 | ...31,240-243,415 
  ...ionPlanner.ts |       0 |        0 |       0 |       0 | 1                 
  forget.ts        |   46.21 |    61.53 |   44.44 |   46.21 | ...06,213,216-348 
  indexer.ts       |    86.3 |       50 |     100 |    86.3 | ...56,62-63,75-76 
  manager.ts       |   78.48 |    83.23 |   76.19 |   78.48 | ...1363,1376-1378 
  memoryAge.ts     |   90.47 |       80 |     100 |   90.47 | 50-51             
  paths.ts         |   79.06 |    95.12 |     100 |   79.06 | 32-33,49-86       
  prompt.ts        |   94.87 |    78.57 |     100 |   94.87 | ...63,166,304-305 
  recall.ts        |   82.06 |       75 |    90.9 |   82.06 | ...59-364,395-406 
  ...ceSelector.ts |    93.1 |    81.81 |     100 |    93.1 | ...25,127-128,136 
  scan.ts          |   92.92 |    78.26 |     100 |   92.92 | ...51-52,62,90-91 
  ...entPlanner.ts |   58.33 |    66.66 |   56.25 |   58.33 | ...61-282,358-403 
  status.ts        |   10.52 |      100 |       0 |   10.52 | 41-98             
  store.ts         |   93.33 |    81.25 |     100 |   93.33 | ...,94-95,119-120 
  types.ts         |     100 |      100 |     100 |     100 |                   
  ...ontextFile.ts |   79.38 |    81.03 |   81.81 |   79.38 | ...58-272,286-291 
 src/mocks         |       0 |        0 |       0 |       0 |                   
  msw.ts           |       0 |        0 |       0 |       0 | 1-9               
 src/models        |   90.15 |    87.76 |   88.15 |   90.15 |                   
  constants.ts     |     100 |      100 |     100 |     100 |                   
  ...tor-config.ts |   90.24 |    91.42 |     100 |   90.24 | 142,148,151-160   
  index.ts         |     100 |      100 |     100 |     100 |                   
  ...nfigErrors.ts |   74.22 |       44 |   84.61 |   74.22 | ...,67-74,106-117 
  ...igResolver.ts |   98.66 |    92.75 |     100 |   98.66 | 163,325,331       
  modelRegistry.ts |     100 |      100 |     100 |     100 |                   
  modelsConfig.ts  |   86.42 |    86.17 |   82.92 |   86.42 | ...1338,1367-1368 
  types.ts         |     100 |      100 |     100 |     100 |                   
 src/output        |     100 |      100 |     100 |     100 |                   
  ...-formatter.ts |     100 |      100 |     100 |     100 |                   
  types.ts         |     100 |      100 |     100 |     100 |                   
 src/permissions   |   82.91 |     91.3 |   69.56 |   82.91 |                   
  autoMode.ts      |   97.74 |       94 |     100 |   97.74 | ...29,557-564,673 
  ...transcript.ts |      98 |       84 |     100 |      98 | 200-201           
  classifier.ts    |      94 |    94.44 |     100 |      94 | 158-165,385-389   
  ...erousRules.ts |     100 |    89.36 |     100 |     100 | 110,133,147,175   
  ...alTracking.ts |     100 |      100 |     100 |     100 |                   
  ...e-commands.ts |   86.77 |     73.8 |     100 |   86.77 | 131-141,210-214   
  index.ts         |     100 |      100 |     100 |     100 |                   
  ...on-manager.ts |   84.91 |     89.1 |      80 |   84.91 | ...1026,1132-1136 
  rule-parser.ts   |   97.42 |    93.82 |     100 |   97.42 | ...-890,1039-1041 
  ...-semantics.ts |   70.36 |    91.07 |   46.66 |   70.36 | ...2237,2300-2303 
  types.ts         |     100 |      100 |     100 |     100 |                   
 ...sifier-prompts |   99.04 |    95.23 |     100 |   99.04 |                   
  system-prompt.ts |   99.04 |    95.23 |     100 |   99.04 | 219               
 src/plan-gate     |   76.16 |    91.42 |      80 |   76.16 |                   
  ...viewAgents.ts |   52.28 |    88.46 |   66.66 |   52.28 | ...24-220,242-243 
  ...provalGate.ts |   92.47 |    92.85 |   85.71 |   92.47 | ...86-187,268-274 
  state.ts         |     100 |      100 |     100 |     100 |                   
  types.ts         |     100 |      100 |     100 |     100 |                   
 src/prompts       |   83.63 |      100 |    87.5 |   83.63 |                   
  mcp-prompts.ts   |   18.18 |      100 |       0 |   18.18 | 11-19             
  ...t-registry.ts |     100 |      100 |     100 |     100 |                   
 src/providers     |   80.44 |    75.28 |   68.75 |   80.44 |                   
  all-providers.ts |   69.23 |      100 |       0 |   69.23 | 71-72,76-82,86-92 
  index.ts         |     100 |      100 |     100 |     100 |                   
  install.ts       |   98.93 |    87.71 |     100 |   98.93 | 286-287           
  ...der-config.ts |    72.6 |    69.49 |   73.91 |    72.6 | ...94-495,502-511 
  types.ts         |       0 |        0 |       0 |       0 | 1                 
 ...viders/presets |   97.56 |    89.28 |   55.55 |   97.56 |                   
  ...oding-plan.ts |   87.34 |      100 |       0 |   87.34 | 82-84,87-89,91-94 
  ...a-standard.ts |     100 |      100 |     100 |     100 |                   
  ...token-plan.ts |     100 |      100 |     100 |     100 |                   
  ...m-provider.ts |   97.05 |    81.25 |      75 |   97.05 | 118-119           
  deepseek.ts      |     100 |      100 |     100 |     100 |                   
  idealab.ts       |     100 |      100 |     100 |     100 |                   
  minimax.ts       |     100 |      100 |     100 |     100 |                   
  modelscope.ts    |     100 |      100 |     100 |     100 |                   
  openrouter.ts    |     100 |      100 |     100 |     100 |                   
  requesty.ts      |     100 |      100 |     100 |     100 |                   
  zai.ts           |     100 |      100 |     100 |     100 |                   
 src/qwen          |    85.3 |    78.57 |   95.89 |    85.3 |                   
  ...tGenerator.ts |   98.64 |    98.18 |     100 |   98.64 | 105-106           
  qwenOAuth2.ts    |   82.55 |    73.24 |   90.62 |   82.55 | ...1183-1199,1229 
  ...kenManager.ts |   85.36 |    76.61 |     100 |   85.36 | ...52-757,778-783 
 src/resources     |     100 |      100 |     100 |     100 |                   
  ...e-registry.ts |     100 |      100 |     100 |     100 |                   
 src/services      |    87.8 |    84.83 |    93.9 |    87.8 |                   
  ...ionTrailer.ts |     100 |      100 |     100 |     100 |                   
  ...llRegistry.ts |   97.35 |    85.34 |     100 |   97.35 | ...94,117,417-418 
  ...ionService.ts |   96.46 |    94.44 |     100 |   96.46 | ...35,651,780-788 
  ...ingService.ts |   84.06 |    82.35 |   81.39 |   84.06 | ...1459,1474-1475 
  ...ttribution.ts |   91.73 |    87.71 |      90 |   91.73 | ...80-685,826-827 
  ...utSlimming.ts |   99.52 |    96.42 |     100 |   99.52 | 98                
  cronScheduler.ts |   95.09 |    90.18 |     100 |   95.09 | ...-940,1239-1240 
  cronTasksFile.ts |   93.78 |     87.5 |     100 |   93.78 | ...72-173,182-183 
  cronTasksLock.ts |   94.44 |    89.47 |     100 |   94.44 | ...02-103,132-133 
  ...eryService.ts |   82.07 |       92 |      80 |   82.07 | ...43,149-150,155 
  ...oryService.ts |   88.17 |    79.02 |    92.3 |   88.17 | ...1303,1344-1347 
  fileReadCache.ts |     100 |      100 |     100 |     100 |                   
  ...temService.ts |   91.27 |    82.69 |    90.9 |   91.27 | ...94,196,294-301 
  ...ratedFiles.ts |      96 |    88.23 |     100 |      96 | 119-120,146-147   
  gitInit.ts       |     100 |      100 |     100 |     100 |                   
  ...reeService.ts |    69.4 |    68.82 |   93.33 |    69.4 | ...2064,2092-2093 
  ...ionService.ts |   99.07 |    98.48 |     100 |   99.07 | 462-463,510-511   
  ...ticsDumper.ts |   98.37 |    95.23 |     100 |   98.37 | 185-186           
  ...ureMonitor.ts |   96.06 |    91.48 |   96.96 |   96.06 | ...49,850,864-866 
  ...orRegistry.ts |   97.26 |    91.22 |     100 |   97.26 | ...50-451,605-606 
  ...ttachments.ts |   97.24 |    90.34 |     100 |   97.24 | ...08,646,661-662 
  sessionRecap.ts  |     9.7 |      100 |       0 |     9.7 | 42-172            
  ...ionService.ts |   86.32 |    78.72 |   94.87 |   86.32 | ...1592,1662-1682 
  sessionTitle.ts  |   93.87 |    71.15 |     100 |   93.87 | ...32-235,266-267 
  ...ionService.ts |   82.44 |    77.74 |   90.62 |   82.44 | ...2173,2179-2184 
  ...pInhibitor.ts |   97.34 |    92.68 |     100 |   97.34 | ...28,167,361-362 
  ...Estimation.ts |     100 |    86.66 |     100 |     100 | 96-97             
  ...ageService.ts |   97.76 |    91.59 |   93.75 |   97.76 | ...61-262,366,567 
  ...UseSummary.ts |   94.63 |    88.46 |     100 |   94.63 | ...62-164,214-215 
  ...oryService.ts |   89.03 |    65.38 |     100 |   89.03 | ...23-325,330-331 
  ...reeCleanup.ts |   14.56 |      100 |   33.33 |   14.56 | 58-185            
  ...ionService.ts |   87.98 |    86.95 |     100 |   87.98 | ...38-439,455-456 
 ...icrocompaction |   99.35 |    95.69 |     100 |   99.35 |                   
  microcompact.ts  |   99.35 |    95.69 |     100 |   99.35 | 224-225,618       
 ...s/visionBridge |   96.73 |    93.97 |   93.75 |   96.73 |                   
  ...part-utils.ts |     100 |      100 |     100 |     100 |                   
  ...ge-service.ts |      96 |     90.9 |      90 |      96 | ...07,208,290,373 
 src/skills        |   88.14 |    86.62 |      90 |   88.14 |                   
  index.ts         |     100 |      100 |     100 |     100 |                   
  ...activation.ts |     100 |     93.1 |     100 |     100 | 93,112            
  skill-load.ts    |   94.84 |     87.5 |     100 |   94.84 | ...03,223,235-237 
  skill-manager.ts |   83.39 |    81.42 |   82.35 |   83.39 | ...1199,1206-1210 
  skill-paths.ts   |   89.15 |    86.36 |     100 |   89.15 | ...00-101,106-107 
  symlinkScope.ts  |     100 |      100 |     100 |     100 |                   
  types.ts         |   97.91 |       98 |     100 |   97.91 | 277-278           
 src/subagents     |   85.84 |    85.55 |   94.33 |   85.84 |                   
  ...ter-schema.ts |     100 |    98.07 |     100 |     100 | 99                
  ...tin-agents.ts |     100 |      100 |     100 |     100 |                   
  index.ts         |     100 |      100 |     100 |     100 |                   
  ...nt-manager.ts |    81.2 |    79.93 |   91.17 |    81.2 | ...1432,1509-1510 
  types.ts         |     100 |      100 |     100 |     100 |                   
  validation.ts    |   92.46 |    95.18 |     100 |   92.46 | 47-52,63-68,71-76 
 src/telemetry     |    78.4 |     86.7 |   80.32 |    78.4 |                   
  config.ts        |     100 |      100 |     100 |     100 |                   
  constants.ts     |     100 |      100 |     100 |     100 |                   
  ...on-metrics.ts |   98.96 |    79.48 |     100 |   98.96 | 169,183           
  ...on-tracing.ts |   74.55 |    73.21 |   70.58 |   74.55 | ...95,336-338,354 
  ...attributes.ts |   98.13 |       88 |     100 |   98.13 | 185-187           
  ...-exporters.ts |   65.78 |    83.33 |   55.55 |   65.78 | ...04-105,108-109 
  index.ts         |     100 |      100 |     100 |     100 |                   
  ...t.circular.ts |       0 |        0 |       0 |       0 | 1-111             
  ...-processor.ts |   99.09 |    95.61 |      95 |   99.09 | 141,365-366       
  ...t.circular.ts |       0 |        0 |       0 |       0 | 1-128             
  loggers.ts       |   52.89 |    65.88 |   60.41 |   52.89 | ...1294,1311-1331 
  metrics.ts       |   75.31 |    80.85 |   77.19 |   75.31 | ...1021,1024-1035 
  ...attributes.ts |     100 |      100 |     100 |     100 |                   
  ...ime-config.ts |       0 |        0 |       0 |       0 | 1                 
  sanitize.ts      |      80 |    83.33 |     100 |      80 | 35-36,41-42       
  sdk.ts           |   86.75 |     88.4 |   66.66 |   86.75 | ...17-621,659-681 
  ...on-context.ts |     100 |      100 |     100 |     100 |                   
  ...on-tracing.ts |   90.04 |    88.07 |   96.55 |   90.04 | ...1504,1535-1538 
  ...etry-utils.ts |     100 |      100 |     100 |     100 |                   
  ...l-decision.ts |     100 |      100 |     100 |     100 |                   
  trace-context.ts |     100 |      100 |     100 |     100 |                   
  ...e-id-utils.ts |     100 |      100 |     100 |     100 |                   
  tracer.ts        |   98.56 |    88.63 |     100 |   98.56 | 52,101            
  types.ts         |   79.26 |    85.27 |   83.54 |   79.26 | ...1282,1286-1293 
  uiTelemetry.ts   |      92 |    95.34 |   80.95 |      92 | ...00,206-216,244 
 ...ry/qwen-logger |   69.95 |    82.35 |   65.51 |   69.95 |                   
  event-types.ts   |       0 |        0 |       0 |       0 |                   
  qwen-logger.ts   |   69.95 |    82.17 |   64.91 |   69.95 | ...1077,1115-1116 
 src/test-utils    |   93.44 |    96.15 |   77.77 |   93.44 |                   
  config.ts        |     100 |      100 |     100 |     100 |                   
  ...st-helpers.ts |   94.11 |       90 |     100 |   94.11 | 69-70             
  index.ts         |     100 |      100 |     100 |     100 |                   
  mock-tool.ts     |   91.71 |    97.36 |   74.19 |   91.71 | ...54,218-219,232 
  ...aceContext.ts |     100 |      100 |     100 |     100 |                   
 src/tools         |   83.01 |    82.58 |    87.5 |   83.01 |                   
  ...erQuestion.ts |   90.74 |    82.43 |    92.3 |   90.74 | ...23-424,431-432 
  cron-create.ts   |   88.69 |    94.73 |   66.66 |   88.69 | ...,45-46,183-191 
  cron-delete.ts   |   97.56 |      100 |   83.33 |   97.56 | 31-32             
  cron-list.ts     |   98.16 |    93.75 |    87.5 |   98.16 | 50-51             
  diffOptions.ts   |     100 |      100 |     100 |     100 |                   
  edit.ts          |   80.82 |    83.48 |      75 |   80.82 | ...08-709,819-869 
  ...r-worktree.ts |   83.14 |    67.56 |    87.5 |   83.14 | ...84-187,278-279 
  enterPlanMode.ts |   81.08 |    66.66 |   85.71 |   81.08 | ...,74-79,112-126 
  exit-worktree.ts |   83.29 |    83.65 |   94.44 |   83.29 | ...14-515,537-538 
  exitPlanMode.ts  |   82.53 |    77.19 |     100 |   82.53 | ...91-394,426-429 
  glob.ts          |   95.92 |    87.69 |    92.3 |   95.92 | ...16,172,303,306 
  grep.ts          |   83.09 |    86.66 |   80.95 |   83.09 | ...60-661,711-712 
  ...adTracking.ts |     100 |      100 |     100 |     100 |                   
  loop-wakeup.ts   |   99.24 |    92.85 |     100 |   99.24 | 44                
  ls.ts            |   96.74 |    90.27 |     100 |   96.74 | 176-181,212,216   
  lsp.ts           |   72.77 |    60.09 |   90.32 |   72.77 | ...1211,1213-1214 
  ...nt-manager.ts |   80.58 |    78.52 |   84.44 |   80.58 | ...2990,2992-2993 
  mcp-client.ts    |   75.07 |    82.64 |      85 |   75.07 | ...1893,1897-1900 
  ...ry-timeout.ts |     100 |      100 |     100 |     100 |                   
  mcp-errors.ts    |     100 |      100 |     100 |     100 |                   
  ...pool-entry.ts |   77.56 |    84.11 |   77.14 |   77.56 | ...1291,1299-1300 
  ...ool-events.ts |       8 |        0 |       0 |       8 | 132-158           
  mcp-pool-key.ts  |   97.46 |    93.93 |     100 |   97.46 | 175-176           
  ...ce-content.ts |   96.55 |    91.17 |     100 |   96.55 | 80-82             
  mcp-status.ts    |     100 |      100 |     100 |     100 |                   
  mcp-tool.ts      |   91.43 |     89.9 |   96.66 |   91.43 | ...72-673,723-724 
  ...sport-pool.ts |   83.49 |    80.15 |   84.61 |   83.49 | ...1409,1416-1420 
  ...ace-budget.ts |   87.27 |     82.6 |     100 |   87.27 | ...00-305,340-345 
  memory-config.ts |     100 |      100 |     100 |     100 |                   
  ...iable-tool.ts |     100 |    84.61 |     100 |     100 | 102,109           
  monitor.ts       |   91.65 |    84.05 |   88.46 |   91.65 | ...87,600,796-801 
  notebook-edit.ts |   85.11 |    76.42 |   81.25 |   85.11 | ...54-870,916-917 
  ...escendants.ts |   36.17 |    64.51 |   55.55 |   36.17 | ...46-310,385-390 
  ...nforcement.ts |   82.57 |    89.74 |     100 |   82.57 | 174-185,234-247   
  read-file.ts     |   94.79 |    90.32 |   81.81 |   94.79 | ...04,307,390-391 
  ...p-resource.ts |   96.85 |      100 |   91.66 |   96.85 | 92-96             
  ripGrep.ts       |   95.87 |     88.4 |   94.73 |   95.87 | ...56-657,663-664 
  ...-transport.ts |    6.34 |        0 |       0 |    6.34 | 47-145            
  send-message.ts  |   81.39 |    88.88 |    62.5 |   81.39 | ...22-228,311-319 
  ...n-mcp-view.ts |   93.57 |     92.3 |      90 |   93.57 | 122-130           
  shell.ts         |   76.79 |    81.58 |   91.11 |   76.79 | ...4718,4781-4782 
  skill-utils.ts   |     100 |      100 |     100 |     100 |                   
  skill.ts         |    89.4 |     92.5 |   88.88 |    89.4 | ...43,447,476-498 
  ...eticOutput.ts |   95.12 |      100 |      80 |   95.12 | 87-88             
  task-create.ts   |   93.85 |     92.3 |   81.81 |   93.85 | 41-45,59-60,91    
  task-list.ts     |   73.38 |    77.77 |   83.33 |   73.38 | ...02,105,109-116 
  task-stop.ts     |   93.14 |    96.15 |   85.71 |   93.14 | 39-40,54-64       
  task-update.ts   |   80.67 |       78 |    92.3 |   80.67 | ...75-383,415-426 
  team-create.ts   |   97.22 |    85.71 |   83.33 |   97.22 | 48-49,129-130     
  team-delete.ts   |   86.74 |    83.33 |   83.33 |   86.74 | 37-38,42-48,72-73 
  todoWrite.ts     |   89.27 |    82.05 |   92.85 |   89.27 | ...50-555,577-578 
  tool-error.ts    |     100 |      100 |     100 |     100 |                   
  tool-names.ts    |     100 |      100 |     100 |     100 |                   
  tool-registry.ts |   76.04 |     76.1 |   81.39 |   76.04 | ...62-863,871-872 
  tool-search.ts   |   92.35 |    85.84 |    92.3 |   92.35 | ...08-213,320-329 
  tools.ts         |   92.36 |    90.74 |   90.47 |   92.36 | ...99-500,516-522 
  web-fetch.ts     |   89.78 |    84.44 |   92.85 |   89.78 | ...11-312,317-318 
  write-file.ts    |   82.65 |    80.45 |   84.61 |   82.65 | ...65-668,696-731 
 src/tools/agent   |   80.69 |    83.58 |      80 |   80.69 |                   
  agent.ts         |   80.62 |    83.71 |   79.51 |   80.62 | ...3100,3127-3190 
  fork-subagent.ts |   82.35 |    77.77 |   85.71 |   82.35 | 83-101,133-134    
 ...tools/artifact |   95.58 |    91.01 |   88.37 |   95.58 |                   
  artifact-tool.ts |   90.23 |    81.39 |   69.23 |   90.23 | ...81-282,290-293 
  ...-publisher.ts |     100 |    85.71 |     100 |     100 | 32                
  ...-publisher.ts |   96.74 |    97.72 |    87.5 |   96.74 | 29-30,156-157     
  html.ts          |     100 |    96.77 |     100 |     100 | 122               
  ...-publisher.ts |     100 |       80 |     100 |     100 | 30                
  oss-publisher.ts |    98.1 |    91.48 |     100 |    98.1 | 43-45             
  publisher.ts     |     100 |      100 |     100 |     100 |                   
 ...s/computer-use |   90.05 |    81.35 |   75.36 |   90.05 |                   
  bootstrap.ts     |   59.42 |    80.95 |   41.66 |   59.42 | ...35-339,341-345 
  client.ts        |   73.22 |    89.65 |   64.28 |   73.22 | ...70-172,233-242 
  constants.ts     |     100 |    94.73 |     100 |     100 | 129,256           
  downloader.ts    |   65.29 |    52.77 |   58.33 |   65.29 | ...99-300,316-355 
  index.ts         |     100 |      100 |     100 |     100 |                   
  install-state.ts |   94.44 |    72.72 |     100 |   94.44 | 44-45             
  ...n-detector.ts |     100 |     87.5 |     100 |     100 | 50                
  schemas.ts       |     100 |      100 |     100 |     100 |                   
  tool.ts          |   96.29 |     85.5 |     100 |   96.29 | 75-76,184,251-257 
 ...tools/workflow |   87.46 |    79.41 |   85.71 |   87.46 |                   
  workflow.ts      |   87.46 |    79.41 |   85.71 |   87.46 | ...51-652,664-667 
 src/utils         |   90.66 |    88.72 |   95.42 |   90.66 |                   
  LruCache.ts      |       0 |        0 |       0 |       0 | 1-41              
  ...Controller.ts |     100 |      100 |     100 |     100 |                   
  ...ssageQueue.ts |     100 |      100 |     100 |     100 |                   
  ...cFileWrite.ts |   94.76 |    93.26 |     100 |   94.76 | ...30-531,634-638 
  bareMode.ts      |   27.27 |      100 |       0 |   27.27 | 9-15,18-19        
  browser.ts       |   86.84 |    78.94 |     100 |   86.84 | 34,36-37,65-66    
  btwUtils.ts      |   13.95 |      100 |       0 |   13.95 | 17-31,34-55       
  bundlePaths.ts   |     100 |      100 |     100 |     100 |                   
  ...ncyLimiter.ts |   94.64 |    95.23 |     100 |   94.64 | 64-66             
  ...igResolver.ts |     100 |      100 |     100 |     100 |                   
  ...engthError.ts |   91.11 |    89.47 |     100 |   91.11 | ...46-147,154-155 
  cronDisplay.ts   |     100 |    91.66 |     100 |     100 | 15,43,57          
  cronParser.ts    |   95.34 |     93.1 |     100 |   95.34 | 41-42,47-48,70-71 
  debugLogger.ts   |   96.42 |    94.11 |   88.23 |   96.42 | 185-189           
  editHelper.ts    |   93.63 |    83.52 |     100 |   93.63 | ...28-429,463-464 
  editor.ts        |   97.65 |    95.45 |     100 |   97.65 | ...35-336,338-339 
  env.ts           |     100 |      100 |     100 |     100 |                   
  ...arResolver.ts |   94.28 |    88.88 |     100 |   94.28 | 28-29,125-126     
  ...entContext.ts |   96.78 |    89.13 |      95 |   96.78 | ...51-252,257,403 
  errorParsing.ts  |    97.7 |    97.05 |     100 |    97.7 | 72-73             
  ...rReporting.ts |   88.46 |       90 |     100 |   88.46 | 69-74             
  errors.ts        |   70.54 |    81.13 |      50 |   70.54 | ...15-231,235-241 
  fetch.ts         |    70.8 |     77.5 |   71.42 |    70.8 | ...41-142,161,186 
  fileUtils.ts     |   91.66 |    86.12 |   95.23 |   91.66 | ...1232,1236-1242 
  forkedAgent.ts   |   80.68 |    78.12 |   83.33 |   80.68 | ...39-545,550-556 
  formatters.ts    |   81.81 |       75 |     100 |   81.81 | 15-16             
  ...eUtilities.ts |   89.21 |    86.66 |     100 |   89.21 | 16-17,49-55,65-66 
  ...rStructure.ts |   94.36 |    94.28 |     100 |   94.36 | ...17-120,330-335 
  getPty.ts        |   31.57 |       50 |     100 |   31.57 | 26-38             
  gitDiff.ts       |   92.36 |    80.09 |     100 |   92.36 | ...55-856,928-929 
  gitDirect.ts     |   98.46 |    90.17 |     100 |   98.46 | 148,268,352       
  ...noreParser.ts |   93.84 |     91.3 |     100 |   93.84 | ...03-104,185-186 
  gitUtils.ts      |   72.91 |    90.32 |   83.33 |   72.91 | ...,77-78,102-153 
  iconvHelper.ts   |     100 |      100 |     100 |     100 |                   
  ...rePatterns.ts |     100 |      100 |     100 |     100 |                   
  ...ionManager.ts |     100 |     90.9 |     100 |     100 | 27                
  ...lPromptIds.ts |     100 |      100 |     100 |     100 |                   
  jsonl-utils.ts   |   93.13 |     92.3 |     100 |   93.13 | ...16-317,356-359 
  ...-detection.ts |     100 |      100 |     100 |     100 |                   
  ...iagnostics.ts |    96.4 |     94.2 |     100 |    96.4 | ...66,293-294,376 
  ...yDiscovery.ts |    92.4 |    89.01 |     100 |    92.4 | ...28,331,522-525 
  ...tProcessor.ts |   93.77 |    89.02 |     100 |   93.77 | ...13-319,406-407 
  ...Inspectors.ts |     100 |      100 |     100 |     100 |                   
  modelId.ts       |   98.96 |    98.18 |     100 |   98.96 | 153               
  ...kerChecker.ts |    90.9 |    91.66 |     100 |    90.9 | 73-79             
  notebook.ts      |   94.57 |    89.83 |   95.83 |   94.57 | ...21,333,385-387 
  openaiLogger.ts  |   90.85 |    87.87 |     100 |   90.85 | ...97-199,222-227 
  partUtils.ts     |     100 |    98.61 |     100 |     100 | 206               
  pathReader.ts    |     100 |      100 |     100 |     100 |                   
  paths.ts         |    93.3 |    92.22 |     100 |    93.3 | ...92-393,395-397 
  pdf.ts           |   93.68 |    87.05 |     100 |   93.68 | ...96-297,321-325 
  projectPath.ts   |     100 |      100 |     100 |     100 |                   
  projectRoot.ts   |   71.73 |    78.57 |     100 |   71.73 | 54-66             
  ...ectSummary.ts |   89.62 |    72.41 |     100 |   89.62 | ...40-145,196-199 
  ...tIdContext.ts |     100 |      100 |     100 |     100 |                   
  proxyUtils.ts    |     100 |      100 |     100 |     100 |                   
  ...rDetection.ts |   58.57 |       76 |     100 |   58.57 | ...4,88-89,95-100 
  ...noreParser.ts |   92.45 |     90.9 |     100 |   92.45 | ...72-173,186-187 
  rateLimit.ts     |   93.75 |    88.34 |     100 |   93.75 | ...13,218-219,262 
  readManyFiles.ts |   95.13 |    85.18 |     100 |   95.13 | ...24-226,252-253 
  retry.ts         |   95.93 |    91.83 |     100 |   95.93 | ...33,524-525,543 
  retryContext.ts  |     100 |      100 |     100 |     100 |                   
  ...sification.ts |   97.52 |    96.84 |     100 |   97.52 | ...05,255-256,282 
  retryPolicy.ts   |   97.72 |    90.56 |     100 |   97.72 | 130-131           
  ripgrepUtils.ts  |   50.94 |    85.71 |      70 |   50.94 | ...54-255,268-346 
  ...sDiscovery.ts |   97.42 |    92.85 |     100 |   97.42 | ...04,182-183,202 
  ...iagnostics.ts |   83.08 |     67.5 |   92.59 |   83.08 | ...23,543-544,550 
  ...tchOptions.ts |   82.18 |    85.18 |   95.23 |   82.18 | ...24,549,578-587 
  ...odelPrefix.ts |     100 |      100 |     100 |     100 |                   
  runtimeStatus.ts |    97.5 |    89.74 |     100 |    97.5 | 162-163           
  safeJsonParse.ts |   74.07 |    83.33 |     100 |   74.07 | 40-46             
  ...nStringify.ts |     100 |      100 |     100 |     100 |                   
  ...aConverter.ts |   90.78 |    88.23 |     100 |   90.78 | ...41-42,93,95-96 
  ...aValidator.ts |   91.97 |    83.42 |     100 |   91.97 | ...44,866-867,880 
  ...r-launcher.ts |   96.35 |    93.97 |   85.71 |   96.35 | ...35-336,347-348 
  sedEditParser.ts |   91.72 |    92.12 |     100 |   91.72 | ...36-539,615-616 
  ...nIdContext.ts |     100 |      100 |     100 |     100 |                   
  ...orageUtils.ts |   95.98 |     83.8 |     100 |   95.98 | ...70,386,466,485 
  shell-utils.ts   |   86.24 |    89.61 |     100 |   86.24 | ...2003,2010-2014 
  ...lAstParser.ts |   95.57 |    85.88 |     100 |   95.57 | ...1066-1068,1078 
  ...ContextEnv.ts |     100 |      100 |     100 |     100 |                   
  ...nlyChecker.ts |   95.08 |    91.66 |     100 |   95.08 | ...15-316,324-325 
  sideQuery.ts     |   86.61 |     87.5 |     100 |   86.61 | ...66-172,174-180 
  ...pEventSink.ts |     100 |       80 |     100 |     100 | 61                
  ...tGenerator.ts |     100 |      100 |     100 |     100 |                   
  ...ameContext.ts |     100 |      100 |     100 |     100 |                   
  symlink.ts       |   81.48 |       75 |     100 |   81.48 | 54-59             
  ...emEncoding.ts |   96.36 |    91.17 |     100 |   96.36 | 59-60,124-125     
  terminalSafe.ts  |     100 |      100 |     100 |     100 |                   
  ...Serializer.ts |   98.72 |       90 |     100 |   98.72 | 42-43,134,201-203 
  testUtils.ts     |   53.33 |      100 |   33.33 |   53.33 | ...53,59-64,70-72 
  textUtils.ts     |      65 |      100 |      75 |      65 | 56-75             
  thoughtUtils.ts  |     100 |    92.85 |     100 |     100 | 71                
  ...-converter.ts |   95.23 |    85.71 |     100 |   95.23 | 36-37             
  tool-utils.ts    |    93.6 |     91.3 |     100 |    93.6 | ...58-159,162-163 
  ...ultCleanup.ts |   71.29 |    75.75 |     100 |   71.29 | ...98-100,119-133 
  ...Compaction.ts |   95.68 |    95.32 |     100 |   95.68 | ...29-334,533-534 
  truncation.ts    |   75.55 |    85.71 |   71.42 |   75.55 | ...44-449,453-477 
  windowsPath.ts   |   89.47 |    79.31 |     100 |   89.47 | ...57-58,62,90-91 
  ...aceContext.ts |   95.81 |    89.39 |     100 |   95.81 | ...74-275,299-301 
  xml.ts           |    97.8 |     87.5 |     100 |    97.8 | 98-99             
  yaml-parser.ts   |   83.87 |    77.27 |     100 |   83.87 | ...31-234,239-240 
 ...ils/filesearch |   83.68 |    80.38 |   94.69 |   83.68 |                   
  crawlCache.ts    |     100 |      100 |     100 |     100 |                   
  crawler.ts       |   82.47 |    76.22 |      95 |   82.47 | ...1525,1559-1560 
  fileSearch.ts    |   93.78 |    87.67 |     100 |   93.78 | ...71-272,274-275 
  fzfWorker.ts     |       0 |        0 |       0 |       0 | 1-109             
  ...rkerHandle.ts |   84.05 |    75.43 |   89.47 |   84.05 | ...30-334,340-341 
  ignore.ts        |     100 |    97.36 |     100 |     100 | 187               
  result-cache.ts  |     100 |    93.75 |     100 |     100 | 49                
 ...uest-tokenizer |   68.81 |    73.82 |   83.87 |   68.81 |                   
  ...eTokenizer.ts |   65.72 |    74.02 |    92.3 |   65.72 | ...65-466,479-533 
  index.ts         |     100 |      100 |     100 |     100 |                   
  ...tTokenizer.ts |   68.39 |    69.49 |    90.9 |   68.39 | ...24-325,327-328 
  ...ageFormats.ts |   76.92 |      100 |   33.33 |   76.92 | 46-49,56-57       
  textTokenizer.ts |     100 |      100 |     100 |     100 |                   
  types.ts         |       0 |        0 |       0 |       0 | 1                 
-------------------|---------|----------|---------|---------|-------------------

For detailed HTML reports, please see the 'coverage-reports-22.x-ubuntu-latest' artifact from the main CI run.

Comment thread packages/cli/src/ui/components/messages/ToolMessage.tsx Outdated
Comment thread packages/cli/src/ui/components/messages/ToolGroupMessage.test.tsx Outdated
秦奇 and others added 2 commits June 23, 2026 20:01
Align tool display with read/search collapse pattern: only
information-gathering tools (read, search, list) are collapsed into a
summary line; mutation tools (edit, write, command, agent) always
render individually with their results.

- Remove compactLabel prop and cross-group merge logic from MainContent
- Add isCollapsibleTool predicate and partition in ToolGroupMessage
- Remove shouldCollapse gate from ToolMessage (results always shown)
- Update CATEGORY_ORDER to search → read → list → command → ...
- Update tests and snapshots to match partition-based rendering

Generated with AI

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
Only string and ANSI results are hidden for completed (Success/Canceled)
tools — diff, plan, todo, and task results always render since they
carry non-repeatable information the user needs to review inline.

Generated with AI

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
@chiga0 chiga0 changed the title feat(tui): unify tool output with semantic summaries and auto-collapse feat(tui): partition tool display by type — collapse read/search, show mutation tools individually Jun 23, 2026
- Fix TS2740: add required AnsiToken properties to ANSI collapse test
- Rename mergedLengthRef → visibleHistoryLengthRef to match removed
  mergedHistory concept
- Fix design doc Rule 5: forceExpandAll forces results only for
  triggering tools, not all siblings
- Update compactToggleHasVisualEffect JSDoc: tool_group no longer
  checked, only gemini_thought items affected by compact mode
- Fix diff bypass test: use collapsible tool name (ReadFile) so
  shouldCollapseResult is actually exercised
- Add all-collapsible memory badge test covering the early-return path

Generated with AI

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
@chiga0 chiga0 requested a review from qwen-code-ci-bot June 25, 2026 02:03

@qwen-code-ci-bot qwen-code-ci-bot left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[Suggestion] The compactMode setting description in packages/cli/src/config/settingsSchema.ts (line ~958) still reads "Hide tool output and thinking for a cleaner view (toggle with Ctrl+O)". After this PR, compact mode no longer hides tool output — that's now handled by the type-based isCollapsibleTool() partition, independent of compactMode. Compact mode only affects gemini_thought / gemini_thought_content blocks. The description should be updated to reflect this, e.g., "Hide thinking blocks for a cleaner view (toggle with Ctrl+O)".

— qwen3.7-max via Qwen Code /review

wenshao
wenshao previously approved these changes Jun 25, 2026
@wenshao

wenshao commented Jun 25, 2026

Copy link
Copy Markdown
Collaborator

@qwen-codee /triage

@wenshao wenshao left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

R5: No new issues found. All R4 suggestions (Canceled test gap, legacy tool name tests, memory badge mixed-group test) have been addressed. Deterministic analysis clean (tsc + eslint 0 findings). All 135 tests pass. Downgraded from Approve to Comment: CI still running.

— qwen3.7-max via Qwen Code /review

@qwen-code-ci-bot qwen-code-ci-bot left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Downgraded from Approve to Comment: CI still running.

Build passes (0 errors), all 229 relevant tests pass, typecheck and lint clean. 2 test coverage suggestions below — no blockers.

— qwen3.7-max via Qwen Code /review

Comment thread packages/cli/src/ui/components/messages/ToolGroupMessage.tsx
Comment thread packages/cli/src/ui/components/messages/ToolGroupMessage.tsx
- Add test: user-initiated group renders all collapsible tools
  individually (bypasses partition into summary line)
- Add test: memory-only group with errored tool falls through to
  expanded path instead of showing compact badge

Generated with AI

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
@wenshao

wenshao commented Jun 25, 2026

Copy link
Copy Markdown
Collaborator

Local runtime verification — PR #5661

Verdict: functionally verified. The type‑based partition behaves exactly as designed across every scenario I drove through the real built bundle (not just vitest). Unit tests pass and are load‑bearing, the merged tree is type‑clean, and a BEFORE/AFTER bundle A/B in tmux shows the intended collapse/expand split. One design trade‑off is flagged for the merge decision (non‑blocking, see Notes).

Method & environment
  • Base (BEFORE): origin/main @ ac2653e9c
  • Merged (AFTER): clean auto‑merge of origin/main + PR head 71e3422e7d8468b2d3 (git merge-tree, no conflicts; diff = exactly the PR's +938 / −606)
  • Two isolated worktrees, each npm ci + full real build chain (patch-package, generate, web‑templates, 5 channel plugins, core, esbuild bundle). Both bundles 64 MB; AFTER chunks contain buildToolSummary/isCollapsibleTool (×9), BEFORE contains 0 → bundles are fresh and distinct.
  • Driver: an OpenAI‑compatible mock that emits parallel tool calls in one assistant message (so each scenario is one tool group), with globally‑unique tool_call ids (avoids the fix(core,cli): close tool_use↔tool_result invariant across all failure paths #4176 history‑dedup drop). Driven in tmux at 210×60, --yolo, isolated QWEN_HOME.
  • node v22.22.2, npm 10.9.7, Linux, tmux 3.5a.

1. Runtime A/B (the headline)

Same prompts, same mock, same terminal — only the bundle differs.

Scenario COLLAPSE — one assistant message calling read_file ×2 + grep + list_directory (all read/search/list):

BEFORE (origin/main)                       AFTER (PR #5661)
> COLLAPSE                                  > COLLAPSE
 ✓ ReadFile a.txt                            ✓ Searched 1 pattern, read 2 files, listed 1 directory
 ✓ ReadFile b.txt                            ✦ COLLAPSE_DONE_MARKER
 ✓ Grep 'TODO' …  Found 2 matches
 ✓ ListFiles .    Listed 3 item(s)
 ✦ COLLAPSE_DONE_MARKER

→ 4 individual rows collapse to one category‑ordered summary line (search → read → list). ✅

Scenario MIXEDread_file + run_shell_command in one message:

BEFORE                                AFTER
> MIXED                               > MIXED
 ✓ ReadFile a.txt  Unchanged: a.txt    ✓ Read 1 file               ← collapsible → summary
 ✓ Shell echo …    MIX_SHELL_MARKER_7  ✓ Shell echo …  MIX_SHELL_MARKER_7   ← mutation → individual + output

→ Mixed group = summary line for the read + the Shell rendered individually with its output. ✅

Scenario MUTATErun_shell_command + write_file (both mutation):

AFTER (identical to BEFORE)
 ✓ Shell echo …      SHELL_OUTPUT_MARKER_42
 ✓ WriteFile …       1 written by mock

→ Non‑collapsible tools are unchanged — always individual, results stay visible. ✅

Scenario ERRGROUP — a read_file that errors:

AFTER
 x ReadFile {…/zzz_nonexistent_path.txt}
   File not found: …

→ An errored collapsible tool triggers forceExpandAll, so it renders individually with the error instead of being hidden in a summary line. ✅ (Confirmation / user‑initiated / focused‑shell / terminal‑subagent take the same force‑expand path.)

Tool category BEFORE AFTER
read / search / list (completed, no error) each rendered individually single summary line, text/ANSI output hidden
command / edit / write / agent / MCP / other individual + results individual + results (unchanged)
any group with error / confirm / user‑initiated / focused shell / terminal subagent expanded force‑expanded (all individual)

2. Unit tests — all PR‑touched suites pass (merged tree)

Suite Result
CompactToolGroupDisplay.test.tsx 19 ✓
ToolGroupMessage.test.tsx 41 ✓
ToolMessage.test.tsx 45 ✓
AppContainer.test.tsx 94 ✓
StandaloneSessionPicker + mergeCompactToolGroups 51 ✓

(The first AppContainer run failed only to load because the @qwen-code/channel-base dist wasn't built yet — an environment artifact; it passes once channels are built.)

3. Typecheck — clean

tsc --noEmit on the merged cli package = 0 errors after building the unrelated acp-bridge/audio-capture dists. BEFORE and AFTER produce an identical error set when those dists are stale (207 each, all in src/serve / src/acp-integration / src/ui/voice) — none in any PR‑touched file. The PR introduces zero new type errors. (Earlier CI TS6133/TS2740 regressions are resolved on the current head.)

4. Revert‑proof — the new tests are load‑bearing

Keeping the PR's tests but swapping a source file back to origin/main:

  • revert ToolGroupMessage.tsx7 partition tests fail (Read 1 file / Read 2 files summaries never appear), 34 pass
  • revert ToolMessage.tsx3 result‑collapse tests fail (collapses text/ANSI…, hides text result…), 42 pass
  • restore both → 105/105 pass

So the tests genuinely exercise the new behavior rather than passing vacuously.

Notes (non‑blocking, for the merge decision)

  1. No inline expand for collapsed groups yet. After this PR, completed read/search/list output is replaced by the one‑line summary and the old Ctrl+O compact toggle no longer re‑renders tool groups (compactToggleHasVisualEffect drops tool_group; the AppContainer test was updated to expect refreshStatic skipped). The content is still in the model's context, but the user has no inline affordance to see read/grep output in scrollback. The PR body scopes the click‑to‑expand and the Ctrl+O transcript screen to a future PR / feat(tui): Ctrl+O frozen transcript view and unified tool output rendering #5666 — worth confirming that sequencing is acceptable before landing.
  2. Dead code deferred. mergeCompactToolGroups is now effectively unused (only compactToggleHasVisualEffect is still imported). The PR body acknowledges this and defers cleanup to feat(tui): Ctrl+O frozen transcript view and unified tool output rendering #5666.
  3. MCP / WebFetch / other tools correctly fall into the non‑collapsible other bucket, so their output stays visible — good, since their results are the answer.

Verified locally on the real esbuild bundle via tmux + a mock provider. Happy to share the mock/driver or re‑run any scenario.

🇨🇳 中文说明(点击展开)

本地真实运行验证 — PR #5661

结论:功能验证通过。真实构建产物(esbuild bundle,而非仅 vitest)上把每个场景都跑了一遍,按类型分区的行为完全符合设计;单测全部通过且“可证伪”(reverts 会让新测试失败),合并后的代码 tsc 干净。下面有一个非阻塞的设计权衡供合并决策参考。

方法与环境

  • BEFORE:origin/main @ ac2653e9c;AFTER:origin/main + PR 头 71e3422e7 的干净自动合并(d8468b2d3,无冲突,diff 恰好等于 PR 的 +938 / −606)。
  • 两个隔离 worktree,各自完整真实构建(patch‑package、generate、web‑templates、5 个 channel 插件、core、esbuild 打包)。AFTER 的 chunk 含 buildToolSummary/isCollapsibleTool(×9),BEFORE 为 0 → 两份产物新鲜且不同。
  • 驱动:OpenAI 兼容 mock,在一条 assistant 消息里发并行 tool_call(每个场景即一个工具组),tool_call id 全局唯一(规避 fix(core,cli): close tool_use↔tool_result invariant across all failure paths #4176 历史去重丢结果)。tmux 210×60、--yolo、隔离 QWEN_HOME

1. 运行期 A/B(核心证据)

  • COLLAPSEread×2 + grep + list):BEFORE 4 行独立工具 → AFTER 一行语义摘要 Searched 1 pattern, read 2 files, listed 1 directory(按 search→read→list 排序)。✅
  • MIXEDread + shell):AFTER = Read 1 file 摘要行 + Shell 单独渲染并保留输出。✅
  • MUTATEshell + write):AFTER 与 BEFORE 完全一致,变更类工具始终独立、结果可见。✅
  • ERRGROUP(读取报错):报错触发 forceExpandAll单独展开显示错误而非折叠进摘要。✅(确认/用户发起/聚焦 shell/终端子代理走相同强制展开路径。)

2. 单测:PR 改动涉及的 6 个测试文件全绿(19 + 41 + 45 + 94 + 51)。AppContainer 首次失败只是因为 channel-base 的 dist 未构建(环境问题),构建后即通过。

3. 类型检查:构建好无关的 acp-bridge/audio-capture 后,合并树 clitsc --noEmit 0 错误;BEFORE 与 AFTER 错误集合完全相同(各 207 条,全在 src/serve/src/acp-integration/src/ui/voice无一在 PR 改动文件)。PR 不引入任何新类型错误。

4. 可证伪(revert‑proof):保留 PR 测试、把单个源文件换回 origin/main

  • 还原 ToolGroupMessage.tsx → 7 个分区测试失败;
  • 还原 ToolMessage.tsx → 3 个结果折叠测试失败;
  • 两者恢复 → 105/105 全通过。
    说明新测试确实在覆盖新行为。

注意事项(非阻塞,供合并参考)

  1. 折叠后暂无就地展开入口。 合并后 read/search/list 的完成输出被一行摘要替代,且 Ctrl+O 不再重绘工具组(compactToggleHasVisualEffect 去掉了 tool_group)。内容仍在模型上下文里,但用户在滚动历史中无法就地查看 read/grep 输出。PR 描述把“逐块点击展开”和“Ctrl+O 全屏 transcript”放到了 feat(tui): Ctrl+O frozen transcript view and unified tool output rendering #5666 / 后续 PR——建议合并前确认这个先后顺序可接受。
  2. 死代码延后清理。 mergeCompactToolGroups 基本已无用(仅 compactToggleHasVisualEffect 仍被引用),PR 描述已说明并把清理推迟到 feat(tui): Ctrl+O frozen transcript view and unified tool output rendering #5666
  3. MCP / WebFetch / 其他工具正确落入不可折叠的 other 类,输出保持可见——合理,因为它们的结果就是答案。

(以上均在真实 esbuild 产物上经 tmux + mock provider 验证;如需 mock/驱动脚本或复跑任意场景,我可以提供。)


// Priority: Confirming > Executing > Error > Canceled > Pending > Success
function getOverallStatus(
export function getOverallStatus(

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[Suggestion] getOverallStatus was changed from private to export function, but no other file imports it — grep confirms only 2 matches (declaration + internal call site at line 240). The export appears unnecessary unless a specific external consumer is planned.

Suggested change
export function getOverallStatus(
function getOverallStatus(

— qwen3.7-max via Qwen Code /review

)}
<Text wrap="truncate-end" bold>
{buildToolSummary(toolCalls, isActive)}
{isActive && <Text key="ellipsis">…</Text>}

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[Suggestion] No component-level test renders CompactToolGroupDisplay with an executing/pending/confirming tool and asserts the character appears in the output. All existing component tests use ToolCallStatus.Success tools. If the ellipsis rendering is ever accidentally removed (e.g., during a future refactor of the active-state logic), no test would catch it.

Consider adding a test in CompactToolGroupDisplay.test.tsx:

it('renders ellipsis when tools are still active', () => {
  const tools = [makeTool({ status: ToolCallStatus.Executing })];
  const { lastFrame } = render(<CompactToolGroupDisplay toolCalls={tools} contentWidth={80} />);
  expect(lastFrame()).toContain('…');
});

— qwen3.7-max via Qwen Code /review

@chiga0 chiga0 requested a review from qwen-code-ci-bot June 25, 2026 07:48
@chiga0

chiga0 commented Jun 25, 2026

Copy link
Copy Markdown
Collaborator Author

@qwen-code-ci-bot /triage

@wenshao

wenshao commented Jun 25, 2026

Copy link
Copy Markdown
Collaborator

@qwen-code /triage

@qwen-code-ci-bot qwen-code-ci-bot left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM, looks ready to ship. ✅

});

it('shows result when forceShowResult overrides compact collapse', () => {
it('shows result when forceShowResult overrides collapse', () => {

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[Suggestion] This test uses baseProps which has name: 'test-tool'. Since isCollapsibleTool('test-tool') returns false, shouldCollapseResult is false regardless of forceShowResult. The assertion (toContain('MockMarkdown:Test result')) passes trivially — the result is never collapsed for non-collapsible tools.

The actual override behavior — where forceShowResult=true prevents collapse of a collapsible tool that WOULD otherwise be collapsed — is never tested. A regression that removes the !forceShowResult gate in shouldCollapseResult would go undetected.

it('shows result when forceShowResult overrides collapse', () => {
  const { lastFrame } = renderWithContext(
    <ToolMessage {...baseProps} name="ReadFile" forceShowResult />,
    StreamingState.Idle,
  );
  expect(lastFrame()).toContain('MockMarkdown:Test result');
});

— qwen3.7-max via Qwen Code /review

// to reduce scrollback noise. Non-collapsible tools (command/edit/agent/MCP/etc.)
// always show results — their output IS the answer. Canceled tools keep partial
// output visible. Diff, plan, todo, task results always render regardless.
const shouldCollapseResult =

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[Suggestion] No test verifies that a Canceled collapsible tool keeps its string/ANSI result visible. The existing Canceled test at line ~297 uses name: 'test-tool' (non-collapsible), so shouldCollapseResult is false regardless of status.

The status === ToolCallStatus.Success gate here was deliberately narrowed from isCompleted (which initially included Canceled). If someone accidentally broadens it back, no test catches the regression — partial output from interrupted read/search tools would silently disappear.

Suggested test:

it('shows result for Canceled collapsible tool (partial output preserved)', () => {
  const { lastFrame } = renderWithContext(
    <ToolMessage {...baseProps} name="ReadFile" description="big.ts"
      status={ToolCallStatus.Canceled} />,
    StreamingState.Idle,
  );
  expect(lastFrame()).toContain('MockMarkdown:Test result');
});

— qwen3.7-max via Qwen Code /review

// must see full details: confirmation prompts, errors, user-initiated
// batches, focused shells, terminal subagents.
const hasTerminalSubagent = inlineToolCalls.some(isTerminalSubagentTool);
const forceExpandAll =

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[Suggestion] isEmbeddedShellFocused and hasSubagentPendingConfirmation are two of six forceExpandAll triggers, but neither has a test in ToolGroupMessage.test.tsx verifying they bypass the collapsible/non-collapsible partition. The other four triggers (hasErrorTool, isUserInitiated, hasConfirmingTool, hasTerminalSubagent) all have explicit partition-bypass tests.

If a refactor drops one of these conditions, collapsible tools in an embedded-shell-focused or subagent-pending-confirmation group would silently collapse into a summary line instead of rendering individually.

Suggested: add two tests similar to the existing isUserInitiated test — asserting that all collapsible tools render as MockTool[...] entries instead of a summary line.

— qwen3.7-max via Qwen Code /review

/* marginBottom */ 1 + collapsibleSummaryHeight + memoryBadgeHeight;
const innerWidth = contentWidth - 2;

let countToolCallsWithResults = 0;

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[Suggestion] When forceExpandAll=true, collapsible tools are routed to nonCollapsibleTools. This loop counts them in countToolCallsWithResults if they have a resultDisplay. However, shouldCollapseResult in ToolMessage still hides their output for non-triggering siblings (forceShowResult is per-tool, narrower than forceExpandAll).

The denominator countToolCallsWithResults is inflated — it includes tools whose results won't render — stealing height budget from non-collapsible tools (Shell, Edit) whose output IS the diagnostic content. In groups with many collapsible tools and few non-collapsible ones (e.g., a subagent that read 5 files then ran 1 shell command that failed), the Shell output gets truncated more than necessary.

Fix: reclassify collapsible tools whose results will be collapsed as one-line tools in the height budget calculation.

— qwen3.7-max via Qwen Code /review

| ----------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
| `CompactToolGroupDisplay.tsx` | Added `buildToolSummary()` with count format, `isCollapsibleTool()`, removed border styles |
| `ToolMessage.tsx` | `shouldCollapseResult` gated on `isCollapsibleTool()` and `Success` only; `isDim` removed |
| `ToolGroupMessage.tsx` | Type-based partition replaces `showCompact`; `forceShowResult` simplified to `forceExpandAll`; height budget accounts for collapsible summary row |

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[Suggestion] The Key Changes table states forceShowResult simplified to forceExpandAll, but the code was reverted to per-tool computation (commit 5ccbcd4). Rule 5 in the same doc correctly says "results forced visible only for the triggering tools" — the table contradicts it. A future maintainer reading this table will make incorrect assumptions about the implementation.

Suggested change
| `ToolGroupMessage.tsx` | Type-based partition replaces `showCompact`; `forceShowResult` simplified to `forceExpandAll`; height budget accounts for collapsible summary row |
| `ToolGroupMessage.tsx` | Type-based partition replaces `showCompact`; `forceShowResult` uses per-tool computation (Confirming, Error, agent-pending, terminal-subagent); height budget accounts for collapsible summary row |

— qwen3.7-max via Qwen Code /review

SearchFiles: 'search',
FindFiles: 'search',
ReadFolder: 'list',
Task: 'agent',

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[Suggestion] TodoWrite uses a bare literal key while every other current tool name uses [ToolDisplayNames.X] computed keys. ToolDisplayNames.TODO_WRITE resolves to 'TodoList', which is currently unmapped — functionally equivalent (both 'other') but inconsistent. If 'other' ever gets different properties, 'TodoList' (current name) and 'TodoWrite' (old session name) would silently diverge.

Suggested change
Task: 'agent',
[ToolDisplayNames.TODO_WRITE]: 'other',
// Legacy display names (from ToolDisplayNamesMigration)
SearchFiles: 'search',
FindFiles: 'search',
ReadFolder: 'list',
Task: 'agent',
TodoWrite: 'other',

— qwen3.7-max via Qwen Code /review

@chiga0 chiga0 added this pull request to the merge queue Jun 25, 2026
Merged via the queue into main with commit a7b9c5d Jun 25, 2026
108 checks passed
@chiga0 chiga0 deleted the worktree-feat+tui-tool-collapse branch June 25, 2026 13:09
chiga0 pushed a commit to chiga0/qwen-code that referenced this pull request Jun 26, 2026
Resolve conflicts by rebasing onto QwenLM#5661's merged type-based tool
partition (the branch was built on an earlier state-based snapshot of
QwenLM#5661 that diverged during its own review). Per the PR's two audit
comments:

- Tool partition: keep main's type-based model (isCollapsibleTool /
  forceExpandAll — collapse read/search/list, render mutation tools
  individually). Drop the branch's state-based showCompact/allComplete
  rewrite and the compactLabel summary-absorption machinery
  (absorbedCallIds / getCompactLabel / isSummaryAbsorbed); tool_use_summary
  renders as a standalone line, matching main.
- fullDetail (Ctrl+O transcript): layered onto the type-based base —
  fullDetail forces forceExpandAll=true (skip partition) + per-tool
  forceShowResult=true + uncapped height. No new shouldForceFullDetail
  predicate; reuse forceExpandAll.
- Remove global compact mode: CompactModeContext + mergeCompactToolGroups
  deleted; test scaffolding uses a local no-op CompactModeProvider.

Touched suites green (ToolGroupMessage/ToolMessage/CompactToolGroupDisplay,
MainContent, HistoryItemDisplay, TranscriptView, StandaloneSessionPicker,
AppContainer, SettingsDialog, keyMatchers — 355 tests). Design doc
(docs/design/ctrl-o-detail-expand) still describes the state-based baseline
and needs a follow-up rewrite to type-based.

Generated with AI

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
chiga0 pushed a commit to chiga0/qwen-code that referenced this pull request Jun 26, 2026
…tion

The design doc was written against an early state-based snapshot of QwenLM#5661
(showCompact = (compactMode || allComplete), whole-group collapse) and even
asserted that forceExpandAll / isCollapsibleTool "don't exist". The merged
QwenLM#5661 is type-based partition and those symbols are its core. Rewrite the
affected sections to match the shipped baseline:

- §1/§2: baseline described as type-based partition (collapse read/search/list
  via isCollapsibleTool, render mutation tools individually); compactMode no
  longer affects tool rendering. Added a revision note.
- §3.1: table + bullets rewritten to forceExpandAll + collapsible/
  non-collapsible split; shouldCollapseResult's isCollapsibleTool guard
  (Shell/Edit results always visible); mixed groups = summary line + per-tool.
- §4.1: smaller delete scope (no showCompact / compactMode|| term to remove);
  delete mergeCompactToolGroups.ts; keep web-shell ui.compactMode passthrough.
- §4.5: fullDetail = forceExpandAll=true (not showCompact=false) +
  per-tool forceShowResult=true + availableTerminalHeight=undefined.
- §4.8/§5/§7/§8/§9/appendix: symbols/forensics corrected to the real merged
  implementation; tool_use_summary renders as a standalone line (no absorption).

Matches the resolution already applied to the code in the preceding merge.

Generated with AI

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
chiga0 pushed a commit to chiga0/qwen-code that referenced this pull request Jun 26, 2026
Three independent audits confirmed the doc is now faithful to the merged
QwenLM#5661 type-based partition; they surfaced three concrete fixes:

- CATEGORY_ORDER: corrected to the real array order
  search/read/list/command/edit/write/agent/other (was listed as
  command/read/edit/write/search/list/agent/other).
- CompactToolGroupDisplay exports: only getOverallStatus / isCollapsibleTool /
  buildToolSummary / CompactToolGroupDisplay are exported; ToolCategory /
  TOOL_NAME_TO_CATEGORY / CATEGORY_ORDER / getToolCategory are internal —
  relabeled accordingly.
- §5.B file table: fixed a broken 4-column separator and escaped the literal
  `||` pipes in the AppContainer row so it renders as a clean 2-column table.

Generated with AI

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
chiga0 pushed a commit to chiga0/qwen-code that referenced this pull request Jun 26, 2026
…w-up)

Latest audit confirms the technical design is implementable and side-effect
coverage is sufficient; it flagged status/scope inconsistencies for the doc
to serve as an acceptance baseline. Fixes:

1. Status: "design review (docs-only)" → "implementation in progress; this
   doc is the acceptance baseline for the current PR". Added an
   implemented-vs-pending status table.
2. Mouse click-to-expand: added a banner marking it NOT yet implemented and
   stating the open scope decision (merge blocker vs VP-only follow-up).
3. QwenLM#5751 (and QwenLM#5661) dependency: corrected from "OPEN, must merge first" to
   "already merged into main; branch rebased on top".
4. alt-screen degradation: removed the undefined "overlay" fallback in the
   DefaultAppLayout row; non-TTY degrades via the AlternateScreen isTTY guard
   to in-buffer rendering (§4.2), no separate overlay path.
5. Fixed a broken bold marker (`\*\*`) in the AppContainer row.

Generated with AI

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
chiga0 pushed a commit to chiga0/qwen-code that referenced this pull request Jun 26, 2026
Assessed the mouse click-to-expand effort against the real code: it's
~250–400 lines across 4–5 files (ToolExpandedContext + AppContainer wiring
+ a ClickableToolMessage component — can't call useMouseEvents inside the
.map() — + ToolGroupMessage wiring + mouse hit-test tests). More
importantly, under QwenLM#5661's type-based partition the collapsed read/search
tools are aggregated into a single summary line, so there is no per-tool
click target — the click granularity must be redesigned to "click the
summary row → expand the whole group". Plus the known SGR-mouse vs native
text-selection risk.

Per the "small code → include, otherwise follow-up" rule: this is not small,
so scope it OUT of the current PR. The current PR delivers Ctrl+O transcript
only. Marked §1 goal QwenLM#4, §4.8 (banner + draft), §9 commit 4, and the status
table accordingly; the §4.8 design is kept as a draft for the follow-up PR.

Generated with AI

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants