Files
claude-code/docs/features/stub-recovery-priority.md
unraid 95fece4b51 feat: 整合功能恢复与技能学习闭环(含 ECC v2.1 parity + Opus 4.7 接入 + prompt 工程优化)
主要变更:
- 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 修复
2026-04-22 16:07:42 +08:00

399 lines
14 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 剩余 Stub 恢复优先级(按当前源码)
> 更新日期: 2026-04-15
> 结论口径: 以当前 `src/` + `packages/` 源码为准,不以历史设计文档为准。
> 目标: 将剩余 stub 按 `恢复收益 / 实现复杂度 / 是否挡主流程` 归类,给出实际可执行的恢复顺序。
## 一、判定口径
本文中的“主流程”特指外部版默认用户最容易直接碰到的执行链路:
1. `src/entrypoints/cli.tsx` 快速入口
2. `src/main.tsx` 命令注册与主 action
3. `src/screens/REPL.tsx``src/query.ts` 的常规对话循环
4. 默认或显式可见的工具与命令
以下内容不视为主流程阻塞:
- `process.env.USER_TYPE === 'ant'` 的内部路径
- 纯遥测 / 内部监控
- feature flag 关闭时根本不会暴露给普通用户的能力
- 已被显式隐藏的占位命令
## 二、先说结论
建议恢复顺序:
1. `SSH`
2. `Bash Classifier`
3. `WebBrowserTool`
并行的收口 / 验证项:
4. `WorkflowTool` 设计口径澄清
5. `DiscoverSkillsTool`
6. `Cached Microcompact`
原因:`WebBrowserTool` 仍然属于真正部分完成的能力面;`WorkflowTool` 按当前代码模型更像 prompt expansion surface不应继续误判为“缺少执行引擎”`DiscoverSkillsTool``Cached Microcompact` 已从“待恢复”转为“基本完成,需收口验证”。
## 三、优先级总表
| 优先级 | 模块 | 主要文件 | 恢复收益 | 实现复杂度 | 挡主流程 | 结论 |
|------|------|------|------|------|------|------|
| P0 | SSH 远程会话 | `src/ssh/createSSHSession.ts` | 高 | 中高 | 是 | 最优先 |
| P1 | Bash 语义分类器 | `src/utils/permissions/bashClassifier.ts` | 高 | 中 | 否 | 高 ROI |
| P2 | Workflow prompt surface | `packages/builtin-tools/src/tools/WorkflowTool/WorkflowTool.ts` | 中 | 低 | 否 | 基本完成,需澄清设计边界 |
| P2 | 显式技能搜索工具 | `packages/builtin-tools/src/tools/DiscoverSkillsTool/DiscoverSkillsTool.ts` | 中 | 低 | 否 | 基本完成,转入收口与测试 |
| P1 | 内嵌浏览器工具 | `packages/builtin-tools/src/tools/WebBrowserTool/WebBrowserTool.ts` | 中 | 中高 | 否 | 部分完成,需补 runtime 或收口成 browser-lite |
| P2 | Cached microcompact | `src/services/compact/cachedMicrocompact.ts` | 高 | 中 | 否 | 基本完成,转入硬化与验证 |
| P2 | Agent snapshot 更新对话框 | `src/components/agents/SnapshotUpdateDialog.ts` | 中 | 低中 | 否 | 补齐一个已连通但无 UI 的链路 |
| P3 | 反馈受挫检测 | `src/components/FeedbackSurvey/useFrustrationDetection.ts` | 低中 | 低 | 否 | UX 补丁 |
| P3 | 平台辅助原生模块 | `packages/modifiers-napi/src/index.ts`, `packages/url-handler-napi/src/index.ts` | 低中 | 低中 | 否 | 平台能力补强 |
| P3 | `/reset-limits` | `src/commands/reset-limits/index.ts` | 低 | 低 | 否 | 仅补齐显式提示链路 |
| P4 | internal runner / telemetry | `src/environment-runner/main.ts`, `src/self-hosted-runner/main.ts`, `src/utils/sessionDataUploader.ts`, `src/utils/sdkHeapDumpMonitor.ts`, `src/hooks/notifs/useAntOrgWarningNotification.ts` | 低 | 中到高 | 否 | 长期后置 |
## 四、P0 - P2 详细说明
### P0: SSH 远程会话
**文件**
- `src/ssh/createSSHSession.ts`
**现状**
- `src/main.tsx` 已明确暴露 `claude ssh <host> [dir]`
- `main.tsx``3775` 行附近直接动态导入 `createSSHSession()` / `createLocalSSHSession()`
- 当前实现直接抛 `SSHSessionError('SSH sessions are not supported in this build')`
**为什么排第一**
- 这是一个已经暴露给用户、但运行时被 stub 卡死的显式入口。
- 不是“未来功能”,而是“入口存在、帮助里可见、实际不能用”。
- 修复后能立刻把一个主命令从假可用变成真可用。
**复杂度来源**
- 需要处理 SSH 建链、错误回传、远端 cwd、auth proxy、stderr tail。
- 已有 `SSHSessionManager` 接口,说明调用方契约基本稳定,难点主要在 runtime 实现而不是接口设计。
**建议拆解**
1. 先恢复 `createLocalSSHSession()`,打通本地伪 SSH 流程。
2. 再补真实 SSH session 创建。
3. 最后补重连、端口转发和更好的错误分类。
### P1: Bash 语义分类器
**文件**
- `src/utils/permissions/bashClassifier.ts`
**现状**
- 权限 UI、`bashPermissions.ts``classifierDecision.ts` 都已接入。
- 当前实现明确写着 `Stub for external builds - classifier permissions feature is ANT-ONLY`
- `isClassifierPermissionsEnabled()` 恒为 `false``classifyBashCommand()` 恒返回 disabled。
**为什么优先级高**
- 不挡主流程,但直接影响 Bash 工具体验和自动审批能力。
- 修复收益覆盖面广,因为 BashTool 是高频主工具。
- 不需要先重做整个权限框架,只需把分类后端从 no-op 变成可用实现。
**复杂度来源**
- 需要决定是本地规则引擎、轻量 AST、还是保守的模式匹配策略。
- 但外围编排基本都在,属于“后端一补,整条链路就活”。
**建议目标**
- 第一阶段先做保守匹配,支持 deny / ask / allow 的最小闭环。
- 不要一开始追求 Anthropic 内部同等能力。
### P2: Workflow prompt surface
**文件**
- `packages/builtin-tools/src/tools/WorkflowTool/WorkflowTool.ts`
**现状**
- `WorkflowTool``createWorkflowCommand.ts``constants.ts``WorkflowPermissionRequest.tsx``src/tasks/LocalWorkflowTask/LocalWorkflowTask.ts` 已存在。
- `getWorkflowCommands()` 生成的是 `type: 'prompt'` 的命令,`kind: 'workflow'`
- `WorkflowTool.call()` 会读取 workflow 内容并把它返回给模型。
- 这条链路和 `/commit`、skills、prompt command 的执行模式一致:命令/工具提供 prompt模型再去调用普通工具执行。
**为什么不再列为主恢复项**
- 当前更准确的判断是:它按现有设计已经基本可用。
- 缺的不是“执行引擎”,而是文档口径和能力边界说明。
- `LocalWorkflowTask` / `WorkflowDetailDialog` 这类结构更像未来高级 background workflow 轨道,不是当前 WorkflowTool 主路径的必需部分。
**建议动作**
1. 把文档统一改成“workflow = prompt-backed command”
2. 统一 `/workflow-name``WorkflowTool.call()` 的输出语义
3. 再决定是否要把 background workflow 作为未来升级功能单独推进
### P1: DiscoverSkillsTool
**文件**
- `packages/builtin-tools/src/tools/DiscoverSkillsTool/prompt.ts`
- `packages/builtin-tools/src/tools/DiscoverSkillsTool/DiscoverSkillsTool.ts`
**现状**
- `src/constants/prompts.ts` 已经尝试读取 `DISCOVER_SKILLS_TOOL_NAME`
- 本地 skill index、prefetch、remote loader、remote state 都已有实现。
- `DISCOVER_SKILLS_TOOL_NAME` 已补上,`DiscoverSkillsTool.call()` 已能调用本地 TF-IDF 搜索。
**为什么排 P1**
- 这项已经不再是主恢复缺口。
- 当前更准确的状态是“基本完成”,剩余工作集中在测试、上下文使用和文档同步。
**建议拆解**
1. 补测试,覆盖显式搜索结果与空结果路径。
2. 修正 `call()` 中对上下文 `cwd` 的获取。
3. 同步文档口径,移出“待恢复主项”。
### P2: WebBrowserTool
**文件**
- `packages/builtin-tools/src/tools/WebBrowserTool/WebBrowserTool.ts`
- `packages/builtin-tools/src/tools/WebBrowserTool/WebBrowserPanel.ts`
**现状**
- `src/tools.ts` 已在 `feature('WEB_BROWSER_TOOL')` 下注册工具。
- `src/screens/REPL.tsx` 已给面板留了位置。
- 当前 `navigate` / `screenshot` 已有 HTTP fetch-lite 实现,但 `click` / `type` / `scroll` 仍需 full runtimePanel 仍是 `null`
**为什么是 P2不是 P1**
- 功能面存在,但默认外部用户并不会直接依赖它完成主流程。
- 但它已经不是纯 placeholder更准确的状态是“部分完成待补完”。
- 真正的复杂度仍在 full browser runtime / Bun WebView。
**建议拆解**
1. 先决定产品方向:收口成 browser-lite还是继续补 full runtime。
2. 若走 browser-lite收紧文案并补简单 Panel。
3. 若走 full runtime再补 `click / type / scroll`
### P2: Cached Microcompact
**文件**
- `src/services/compact/cachedMicrocompact.ts`
- `src/services/compact/cachedMCConfig.ts`
**现状**
- `microCompact.ts``query.ts``services/api/claude.ts` 都已经接了调用点。
- `constants/prompts.ts` 也已经预留配置读取。
- `cachedMicrocompact.ts``cachedMCConfig.ts` 现在已有真实实现,`microCompact.ts` 也已经走 `cachedMicrocompactPath()`
**为什么不是更高优先级**
- 它已经不再是“待恢复”主项。
- 更准确的状态是“基本完成,但需要硬化验证”。
- 当前主要风险是边界行为、模型兼容性和测试覆盖,而不是主路径完全缺失。
**建议拆解**
1. 补集成测试覆盖阈值、去重、pin、baseline/delta 逻辑。
2. 补更明确的 debug logging 与失败回退。
3. 从“恢复主项”移到“验证/硬化项”。
### P2: Snapshot 更新对话框
**文件**
- `src/components/agents/SnapshotUpdateDialog.ts`
**现状**
- `main.tsx``dialogLaunchers.tsx` 都会走到这里。
- 当前组件直接 `return null``buildMergePrompt()` 也返回空字符串。
**为什么是 P2**
- 这不是大 feature但它属于“调用点真实存在、UI 仍为空”的典型残缺项。
- 实现成本低于前几个,适合穿插修复。
## 五、P3 - P4 详细说明
### P3: 反馈与平台辅助项
**包含**
- `src/components/FeedbackSurvey/useFrustrationDetection.ts`
- `packages/modifiers-napi/src/index.ts`
- `packages/url-handler-napi/src/index.ts`
- `src/commands/reset-limits/index.ts`
**判断**
- `useFrustrationDetection.ts` 已被 `REPL.tsx` 使用,但只是 survey UX不挡核心功能。
- `modifiers-napi` 在 macOS 下有部分实现,其他平台退化为 false可接受。
- `url-handler-napi` 会影响 deep link URL launch但不是日常主流程。
- `/reset-limits` 已在文案中出现,但仍是隐藏 stub修复价值有限。
### P4: internal runner / telemetry
**包含**
- `src/environment-runner/main.ts`
- `src/self-hosted-runner/main.ts`
- `src/utils/sessionDataUploader.ts`
- `src/utils/sdkHeapDumpMonitor.ts`
- `src/hooks/notifs/useAntOrgWarningNotification.ts`
**判断**
- 这些模块不是没有价值,而是对当前外部版几乎不构成主线能力缺口。
- 多数要么是 feature-gated要么是 `ant-only`,要么明显偏内部监控与基础设施。
## 六、建议的实际恢复批次
### 批次 A: 先修“显式暴露但跑不通”的入口
1. `src/ssh/createSSHSession.ts`
2. `src/utils/permissions/bashClassifier.ts`
### 批次 B: 修“骨架已齐、核心仍空”的 feature shell
1. `packages/builtin-tools/src/tools/WorkflowTool/WorkflowTool.ts` 的设计口径澄清与文档统一
### 批次 C: 修“已注册但 runtime 缺失”的增强能力
1. `packages/builtin-tools/src/tools/WebBrowserTool/WebBrowserTool.ts`
2. `packages/builtin-tools/src/tools/WebBrowserTool/WebBrowserPanel.ts`
### 批次 D: 做“基本完成项”的收口与验证
1. `packages/builtin-tools/src/tools/DiscoverSkillsTool/DiscoverSkillsTool.ts`
2. `src/services/compact/cachedMicrocompact.ts`
### 批次 E: 修“可见但不挡主线”的 UI / 平台补丁
1. `src/components/agents/SnapshotUpdateDialog.ts`
2. `src/components/FeedbackSurvey/useFrustrationDetection.ts`
3. `packages/url-handler-napi/src/index.ts`
4. `packages/modifiers-napi/src/index.ts`
## 七、当前不建议优先投入的方向
### 关于 `summary` 的状态说明
仓库里现在有两种不同含义的 `summary`,需要明确区分:
1. **后台会话 task summary**
- 文件: `src/utils/taskSummary.ts`
- 状态: **已从纯 stub 变成基础实现**
- 当前能力: 仅在 `BG_SESSIONS` + bg session 下生效,按最近一次 assistant/tool_use 更新 `status``waitingFor`
- 结论: 不能算“完整”,但也不应继续归类为纯 stub
2. **隐藏的 `/summary` 命令**
- 文件: `src/commands/summary/index.js`
- 状态: **仍为隐藏 stub**
- 当前能力: `isEnabled: () => false`
- 结论: 如果讨论“summary 命令是否完成”,答案是否定的
因此,后续讨论 `summary` 时应统一使用下面的表述:
- `task summary`: 基础版已完成
- `/summary` 命令: 仍未完成
### 隐藏命令 stub
当前至少还有一批明确导出为 `name: 'stub'` 的隐藏命令,包括:
- `teleport`
- `summary`
- `ctx_viz`
- `share`
- `bughunter`
- `backfill-sessions`
- `autofix-pr`
- `break-cache`
- `ant-trace`
- `issue`
- `env`
- `debug-tool-call`
- `perf-issue`
- `good-claude`
- `onboarding`
- `oauth-refresh`
- `mock-limits`
- `reset-limits`
这些命令的共同特点是:
- 不是“看起来能用、但运行时报错”,而是已经明确被隐藏和禁用。
- 从产品角度,它们比 SSH、Workflow、Bash Classifier 更靠后。
### 大规模 type stub 清理
当前扫描中带 `Auto-generated type stub` 标记的文件仍有数百个量级。
这类工作重要,但不适合和功能恢复搅在一起做。更合理的顺序是:
1. 先恢复高价值运行时 stub。
2. 再单独开一个类型恢复专项。
## 八、哪些旧文档结论已经过期
以下模块在历史文档中曾被写成 stub但当前源码已经不是本轮恢复重点
- `src/services/compact/reactiveCompact.ts`
- `src/proactive/index.ts`
- `src/tasks/LocalWorkflowTask/LocalWorkflowTask.ts`
- `src/utils/taskSummary.ts`(现为基础实现,不再是纯 stub
- `src/utils/eventLoopStallDetector.ts`
- `src/utils/ccshareResume.ts`
- `src/services/contextCollapse/index.ts`
后续如果需要继续维护 stub 清单,应优先更新本文档,而不是继续沿用这些旧设计稿中的状态判断。
## 九、执行建议
如果目标是尽快提升外部版可用性,建议严格按下面顺序推进:
1. `SSH`
2. `bashClassifier`
3. `WebBrowserTool`
4. `WorkflowTool` 设计口径澄清
5. `DiscoverSkillsTool` 收口
6. `cachedMicrocompact` 硬化
如果明确**先不处理** `SSH``bashClassifier`,后续完整顺序改为:
1. `WebBrowserTool`
2. `WorkflowTool` 设计口径澄清
3. `DiscoverSkillsTool` 收口
4. `cachedMicrocompact` 硬化
5. `SnapshotUpdateDialog`
6. `useFrustrationDetection`
7. `url-handler-napi`
8. `modifiers-napi`
9. `/summary`
10. 其他隐藏命令 stub
11. type stub 专项清理
如果目标是“减少仓库里看起来像半成品的地方”,则应在上面这条主线完成后,再处理:
1. `SnapshotUpdateDialog`
2. `useFrustrationDetection`
3. `url-handler-napi`
4. `modifiers-napi`
5. 隐藏命令 stub
6. type stub 专项清理