主要变更: - Skill Learning 闭环系统 (9/9 AC) - Opus 4.7 模型层接入 + adaptive thinking - Prompt 工程优化 (64 审计测试) - Agent Teams 简化门控 (默认启用) - Windows Terminal 后端修复 (EncodedCommand/WT_SESSION) - TF-IDF 技能搜索精准化 (字段加权/CJK 优化) - Autonomy 系统 (/autonomy 命令) - ACP 协议完整实现 - mock.module 泄漏修复 (CI 全绿) - 152+ lint/type 修复
8.7 KiB
次级能力面完整设计说明
更新日期: 2026-04-15 范围:
SnapshotUpdateDialogCtxInspectTool- 其他 UI / 平台补洞
目的: 给出比路线图更完整的设计说明,基于当前真实调用链和代码边界,明确这些能力到底应该怎么补、补到什么程度才算完成。
一、为什么需要单独写这份文档
路线图文档只回答:
- 现在先做什么
- 为什么这么排
但对下面这些项,仅给“下一步做它”是不够的:
SnapshotUpdateDialogCtxInspectTooluseFrustrationDetection/url-handler-napi/modifiers-napi
因为它们都不是单纯的“把 stub 填满”:
SnapshotUpdateDialog需要明确交互语义CtxInspectTool需要明确是“最小可用版”还是“完整上下文诊断器”- UI / 平台补洞需要明确哪些是外部版真的值得补,哪些只是 internal-only 壳
二、SnapshotUpdateDialog
2.1 当前实际调用链
真实调用链已经存在:
-
main.tsx检查:feature('AGENT_MEMORY_SNAPSHOT')mainThreadAgentDefinitionisCustomAgent(...)agentDef.pendingSnapshotUpdate
-
满足条件后,调用: launchSnapshotUpdateDialog
-
launchSnapshotUpdateDialog()动态加载: SnapshotUpdateDialog.ts -
对话框返回三种 choice:
mergekeepreplace
-
如果返回
merge,main.tsx会继续调用:buildMergePrompt(agentType, scope)
2.2 当前缺口
当前文件还是纯 stub:
- 组件直接
return null buildMergePrompt()返回空字符串
这意味着:
- 主流程已经走到这里
- 但用户根本看不到任何对话框
merge路径理论上存在,但因为 prompt 为空,行为不完整
2.3 这个对话框真正需要回答什么
它本质上是在问用户:
检测到 agent memory snapshot 与当前 agent memory 有冲突/差异,你希望怎么处理?
三个动作的语义建议固定成:
merge保留当前内容,并把 snapshot 差异合并成一段后续指令交给模型处理keep保留当前内容,忽略 snapshotreplace用 snapshot 覆盖当前 agent memory
2.4 第一版应该实现到什么程度
建议第一版做到:
- 能展示对话框
- 能展示:
agentTypescopesnapshotTimestamp
- 三个按钮/选项:
- Merge
- Keep current
- Replace with snapshot
buildMergePrompt()返回一段清晰的系统提示,告诉模型:- 当前存在 snapshot update
- 应在当前 agent memory 与 snapshot 之间做语义合并
2.5 replace 该不该第一版真正落地
当前 main.tsx 只在 choice === 'merge' 时有后续动作。
这意味着:
keep当前天然等于“不做额外处理”replace如果没有后续落地逻辑,只是一个假选项
所以完整设计应该二选一:
方案 A:第一版只保留两个语义真实的选项
mergekeep
优点:
- 简化
- 不引入“选了 replace 但什么都没发生”的假交互
方案 B:保留三选项,但显式补后续逻辑
需要额外实现:
replace对应的 memory 覆写动作
如果现在没有清晰的写入目标,建议第一版走 方案 A。
2.6 推荐设计
我推荐:
- 第一版 UI 仍显示三选项,但如果没有 replace 的真实行为,就先改成:
MergeKeep currentUse snapshot later(而不是replace)
或者更干脆:
- 只做二选项版
2.7 验收标准
满足以下条件就算完成:
- 当
pendingSnapshotUpdate存在时,真实弹出对话框 - 用户能看到 snapshot 时间、agent 类型、scope
merge能生成非空 merge promptkeep行为稳定- 不再出现“调用链存在但 UI 完全空”的状态
三、CtxInspectTool
3.1 当前实际位置
文件:
当前接线:
src/tools.ts在feature('CONTEXT_COLLAPSE')下注册它/context命令与上下文可视化相关组件已经有自己的路径services/contextCollapse/index.ts已存在getStats()、applyCollapsesIfNeeded()、recoverFromOverflow()等接口
3.2 当前缺口
当前 CtxInspectTool.call() 只返回:
total_tokens: 0message_count: 0summary: Context inspection requires the CONTEXT_COLLAPSE runtime.
也就是说:
- 工具外壳是存在的
- 但真正的上下文检查能力完全没接起来
3.3 第一版不应该等完整 CONTEXT_COLLAPSE
这是最关键的设计点。
如果把 CtxInspectTool 和完整 CONTEXT_COLLAPSE 绑定死,就会出现两个问题:
- 工具一直 unusable
- 上下文诊断能力被一个大 feature 卡住
更合理的做法是:
先做一个最小可用版上下文检查工具
即使 CONTEXT_COLLAPSE 仍未完整,也能提供有价值的信息。
3.4 最小可用版应该返回什么
建议第一版输出:
message_countestimated_tokenscontext_window_modelprompt_caching_enabledsession_memory_enabledcontext_collapse_enabledsummary
其中:
message_count可以直接基于当前消息数组estimated_tokens可复用现有 token estimation / rough estimation 能力summary用自然语言组织当前上下文状态
3.5 query 参数第一版怎么用
当前 schema 已有:
query?: string
建议第一版语义:
- 无
query:返回整体摘要 - 有
query:在摘要中优先聚焦与该 query 相关的上下文项
但第一版不建议做复杂搜索。
例如:
query: "tool usage"只触发不同摘要模板- 不做真正的 message-level semantic filter
3.6 输出格式建议
建议保持工具结果紧凑但有结构:
Context: 128k estimated tokens, 42 messages
- Model context: claude-sonnet-4-6
- Prompt caching: enabled
- Session memory: enabled
- Context collapse: disabled
- Tool-heavy history detected: yes
- Largest contributors: file reads, bash output
3.7 完整版可以做什么
等 CONTEXT_COLLAPSE 更成熟后,再扩展:
- 已折叠 span 数
- staged span 数
- collapsed message 数
- 最近一次 overflow recovery 状态
- query-based focused inspection
3.8 验收标准
最小可用版完成标准:
- 工具不再返回 placeholder 文案
- 能输出真实消息数
- 能输出真实/估算 token 数
- 能输出上下文机制状态摘要
- 不依赖完整
CONTEXT_COLLAPSE才能工作
四、其他 UI / 平台补洞
这一类不应被混在一起看。建议拆成两组:
4.1 UI 补洞
useFrustrationDetection
文件:
当前状态:
- 已被 REPL 使用
- 但实现恒返回
closed
它的设计重点不是“能不能跑”,而是:
- 用哪些信号判定用户受挫
- 何时弹出反馈调查不会打扰用户
建议第一版只做简单规则:
- 连续出现 API error
- 连续用户打断
- 同一轮多次失败后仍未完成
4.2 平台能力补洞
url-handler-napi
文件:
当前状态:
waitForUrlEvent()恒返回null
它影响的是:
- macOS URL scheme launch / deep link 流程
如果当前外部版根本不主打 URL launch,这项可以长期后置。
modifiers-napi
文件:
当前状态:
- macOS 有部分 FFI 实现
- 其他平台全部退化为 false
这类能力的完整设计重点不在 UI,而在:
- 是否值得跨平台补齐
- 还是明确标注为 macOS-only best-effort
建议结论:
- 不要把它当成“必须恢复的主功能”
- 把它明确定位成平台增强能力
五、建议的实现顺序
如果真的要推进这三块,而不是只写路线图,我建议:
SnapshotUpdateDialogCtxInspectTool最小可用版useFrustrationDetectionurl-handler-napimodifiers-napi
原因:
- 前两项用户价值更直接
- 后三项更偏补洞与平台增强
六、最终结论
这三块里:
SnapshotUpdateDialog:是真实可达但 UI 为空,应先补CtxInspectTool:是最适合做最小可用版 的工具,不该继续等完整大 feature- 其他 UI / 平台补洞:需要拆开看,不能笼统列在一起