Skip to content

Commit c16341f

Browse files
秦奇qwencoder
andcommitted
docs(tui): fix factual nits from cross-audit of the ctrl-o design doc
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>
1 parent af07564 commit c16341f

1 file changed

Lines changed: 4 additions & 4 deletions

File tree

docs/design/ctrl-o-detail-expand/design.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ qwen-code 当前把 **Ctrl+O 绑定为 `TOGGLE_COMPACT_MODE`**:一个**全局
4444
| 块级状态 | ❌ 无 |`expandedKeys`(按 tool_use_id/uuid) |`ToolActionsContext.toggleExpansion` |
4545
| 退出方式 | 再按 Ctrl+O 切回 | 再按 Ctrl+O / Esc 回 prompt | 再按 Ctrl+O 收起 |
4646

47-
**qwen 的"新现状底座"= #5661 的 type-based partition 模型(本方案的起点,不是要推翻的旧基线):** #5661 把工具组默认渲染从"靠 `compactMode` 全显/全隐"演进为 **按工具类型分区折叠**——`forceExpandAll` 为假时,`collapsibleTools`(read/search/list,经 `isCollapsibleTool(name)`,非 Canceled)折叠成 `CompactToolGroupDisplay` 分区摘要行(按 `CATEGORY_ORDER`:command/read/edit/write/search/list/agent/other 聚合,如 `Read 3 files, edited 2 files`),`nonCollapsibleTools`(edit/write/command/agent + Canceled)**始终逐个** `ToolMessage`;force 条件(确认/错误/聚焦 shell/用户发起/终端子代理)令 `forceExpandAll=true` → 全部逐个展开。**该模型与 `compactMode` 无关**——`compactMode` 在 #5661 中已不影响工具渲染(仅残留影响思考块)。本方案在此底座上**保留整个 type-based partition 机制不动**,只删除残留的全局 `compactMode` 开关,并叠加 transcript 的 `fullDetail`(置 `forceExpandAll=true`)。
47+
**qwen 的"新现状底座"= #5661 的 type-based partition 模型(本方案的起点,不是要推翻的旧基线):** #5661 把工具组默认渲染从"靠 `compactMode` 全显/全隐"演进为 **按工具类型分区折叠**——`forceExpandAll` 为假时,`collapsibleTools`(read/search/list,经 `isCollapsibleTool(name)`,非 Canceled)折叠成 `CompactToolGroupDisplay` 分区摘要行(按 `CATEGORY_ORDER`:search/read/list/command/edit/write/agent/other 聚合,如 `Read 3 files, edited 2 files`),`nonCollapsibleTools`(edit/write/command/agent + Canceled)**始终逐个** `ToolMessage`;force 条件(确认/错误/聚焦 shell/用户发起/终端子代理)令 `forceExpandAll=true` → 全部逐个展开。**该模型与 `compactMode` 无关**——`compactMode` 在 #5661 中已不影响工具渲染(仅残留影响思考块)。本方案在此底座上**保留整个 type-based partition 机制不动**,只删除残留的全局 `compactMode` 开关,并叠加 transcript 的 `fullDetail`(置 `forceExpandAll=true`)。
4848

4949
**Claude Code 的实际机制(来自 `claude-code` 打包源码取证):**
5050

@@ -293,10 +293,10 @@ transcript 走 alt-screen 接管整屏,但后台对话仍在跑——这带来
293293
### B. 修改
294294
295295
| 文件 | 动作 |
296-
| -------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
296+
| --- | --- |
297297
| `packages/cli/src/config/keyBindings.ts` | 删 `TOGGLE_COMPACT_MODE`;加 `TOGGLE_TRANSCRIPT='toggleTranscript'`,默认绑 Ctrl+O;保留 `SHOW_MORE_LINES`(Ctrl+S) 不动;启动时检测用户 keybindings 是否残留 `toggleCompactMode` 绑定,若有则提示迁移到 `toggleTranscript`(§6) |
298298
| `packages/cli/src/ui/keyMatchers.ts` | 同步增删 matcher |
299-
| `packages/cli/src/ui/AppContainer.tsx` | 删 `compactMode/compactInline/setCompactMode` 状态、`CompactModeProvider`、Ctrl+O 旧分支、`compactToggleHasVisualEffect` 调用;加 `isTranscriptOpen`(canonical useState,§4.2)+ `isTranscriptOpenRef` + `transcriptFreeze` + `toggleTranscript/openTranscript/closeTranscript`;全局 Ctrl+O→`toggleTranscript`;Esc/q/Ctrl+C **handleGlobalKeypress 第一分支**关闭(早于 QUIT/EXIT/ESCAPE 及 vim INSERT 守卫,§4.3);`useEffect` 监听**全部阻塞确认/对话框**自动关闭(§4.6 #1);消息队列 drain 守卫加 ` | | isTranscriptOpenRef.current`(§4.6 #3);`refreshStatic``isTranscriptOpenRef`守卫、退出时重绘一次(§4.4)。**不并入`dialogsVisible`,不改 `useDialogClose`\*\* |
299+
| `packages/cli/src/ui/AppContainer.tsx` | 删 `compactMode/compactInline/setCompactMode` 状态、`CompactModeProvider`、Ctrl+O 旧分支、`compactToggleHasVisualEffect` 调用;加 `isTranscriptOpen`(canonical useState,§4.2)+ `isTranscriptOpenRef` + `transcriptFreeze` + `toggleTranscript/openTranscript/closeTranscript`;全局 Ctrl+O→`toggleTranscript`;Esc/q/Ctrl+C **handleGlobalKeypress 第一分支**关闭(早于 QUIT/EXIT/ESCAPE 及 vim INSERT 守卫,§4.3);`useEffect` 监听**全部阻塞确认/对话框**自动关闭(§4.6 #1);消息队列 drain 守卫加 `\|\| isTranscriptOpenRef.current`(§4.6 #3);`refreshStatic``isTranscriptOpenRef`守卫、退出时重绘一次(§4.4)。**不并入`dialogsVisible`,不改 `useDialogClose`\*\* |
300300
| `packages/cli/src/ui/contexts/UIStateContext.tsx` | **surface**(只读投影)`isTranscriptOpen``transcriptFreeze`——canonical 仍在 `AppContainer` useState,此处仅暴露给消费者(与现有 dialog 状态同模式,§4.2) |
301301
| `packages/cli/src/ui/contexts/UIActionsContext.tsx` | 加 `toggleTranscript/closeTranscript` |
302302
| `packages/cli/src/ui/hooks/useDialogClose.ts` | **不改动**(transcript 不走此路径,Esc 在全局前置分支处理,见 §4.3) |
@@ -399,7 +399,7 @@ transcript 走 alt-screen 接管整屏,但后台对话仍在跑——这带来
399399
### #5661 type-based partition 基线取证(本 PR 保留并叠加,符号名以**已合入 main** 的真实代码为准)
400400
401401
- **`ToolGroupMessage.tsx``forceExpandAll` + 分区决策)**:`forceExpandAll = hasConfirmingTool || hasSubagentPendingConfirmation || hasErrorTool || isEmbeddedShellFocused || isUserInitiated || hasTerminalSubagent`(**不含 `compactMode`/`allComplete`**)。`collapsibleTools = forceExpandAll ? [] : inlineToolCalls.filter(t => isCollapsibleTool(t.name) && t.status !== Canceled)``nonCollapsibleTools = forceExpandAll ? inlineToolCalls : 其余`。全 collapsible 组 → `<CompactToolGroupDisplay>`;混合组 → 摘要行 + 逐个 `<ToolMessage>`;对 ToolMessage 逐个传 `forceShowResult={isUserInitiated || Confirming || Error || isAgentWithPendingConfirmation || isTerminalSubagentTool}`。**本 PR 叠加**:`forceExpandAll = fullDetail || ...``forceShowResult = fullDetail || ...`、fullDetail 时 `availableTerminalHeight=undefined`
402-
- **`CompactToolGroupDisplay.tsx`(分区摘要渲染器 + `isCollapsibleTool`)**:导出 `ToolCategory``TOOL_NAME_TO_CATEGORY``CATEGORY_ORDER``command/read/edit/write/search/list/agent/other`)、`getToolCategory``buildToolSummary`、以及 **`isCollapsibleTool(name)`**(判定 read/search/list。本 PR **保留**。
402+
- **`CompactToolGroupDisplay.tsx`(分区摘要渲染器 + `isCollapsibleTool`)**:**导出**(`export``getOverallStatus``isCollapsibleTool(name)`(判定 read/search/list)、`buildToolSummary``CompactToolGroupDisplay`;**内部符号**(非导出,仅文件内使用)`ToolCategory``TOOL_NAME_TO_CATEGORY``CATEGORY_ORDER`(实际顺序 `search/read/list/command/edit/write/agent/other`)、`getToolCategory`。本 PR **保留**。
403403
- **`ToolMessage.tsx``shouldCollapseResult` gate)**:`shouldCollapseResult = !forceShowResult && status === ToolCallStatus.Success && isCollapsibleTool(name) && (effectiveDisplayRenderer.type === 'string' || 'ansi')`(**注意 `isCollapsibleTool(name)` 守卫**:仅 read/search/list 的 string/ansi 结果折叠,Shell/Edit/Agent 结果始终显示;diff/plan/todo/task 走各自 renderer);高度约束符号:`MaxSizedBox``sliceTextForMaxHeight``shellOutputMaxLines`/`shellStringCapHeight``isCappingShell`(被 `!forceShowResult` 解除)。本 PR **保留** gate,叠加 fullDetail/点击展开联动(`forceShowResult=true` + `availableTerminalHeight=undefined`,无需改 `ToolMessage` 本体)。
404404
- **更正(早期文档基于 state-based 快照的错误断言)**:早期版本曾断言"**没有** `forceExpandAll` / `isCollapsibleTool`"——**事实相反,这两个符号是 #5661 合入实现的核心,确实存在**。`shouldForceFullDetail.ts` / `COLLAPSIBLE_CATEGORIES` 不存在(force 语义内联在 `forceExpandAll`,分区类别内联在 `TOOL_NAME_TO_CATEGORY`/`isCollapsibleTool`),以真实代码为准。
405405

0 commit comments

Comments
 (0)