|
| 1 | +# Session 更新计划 |
| 2 | + |
| 3 | +## 原则 |
| 4 | + |
| 5 | +- 每章开独立 Explore Agent 深入读 CC 源码,拿到具体的字段名、行号、常量值、算法逻辑 |
| 6 | +- 源码分析写入 `<details>` 折叠,不污染教学主线 |
| 7 | +- 深入但不堆砌——只保留对理解核心概念有帮助的差异点 |
| 8 | +- 简单章(概念足够直观)分析可以轻量,复杂章(机制密集)必须全量 |
| 9 | + |
| 10 | +## 更新完成标准 |
| 11 | + |
| 12 | +每章更新后应满足: |
| 13 | +- [ ] README 主线无 CC 内部工程术语(tengu_*、GrowthBook 等) |
| 14 | +- [ ] `<details>` 折叠中有基于源码行号的逐项对照 |
| 15 | +- [ ] 关键差异点有"教学版为什么简化"的说明 |
| 16 | +- [ ] 复杂章有 SVG 图,简单章 code 够用 |
| 17 | +- [ ] code.py 可独立运行 |
| 18 | + |
| 19 | +--- |
| 20 | + |
| 21 | +## Batch 1: 已有深度的章(微调) |
| 22 | + |
| 23 | +### s01 Agent Loop ✅ 已完成 |
| 24 | +- query.ts 1729 行全量分析 |
| 25 | +- State 11 字段 + 10 退出路径 + 7 继续路径 |
| 26 | +- 改动:无需 |
| 27 | + |
| 28 | +### s02 Tool Use ✅ 已完成 |
| 29 | +- Tool.ts + toolOrchestration.ts + StreamingToolExecutor.ts 分析 |
| 30 | +- isConcurrencySafe vs isReadOnly 修正 |
| 31 | +- 并发对比 SVG |
| 32 | +- 改动:无需 |
| 33 | + |
| 34 | +### s08 Context Compact ✅ 已完成 |
| 35 | +- compact.ts 1705 行 + autoCompact.ts 351 行全量分析 |
| 36 | +- 5 层修正为 4 层管线 + 应急 |
| 37 | +- 14 个精确常量 |
| 38 | +- 改动:无需 |
| 39 | + |
| 40 | +--- |
| 41 | + |
| 42 | +## Batch 2: 亟待深化的复杂章(深度分析 + 重写 CC 对照) |
| 43 | + |
| 44 | +### s03 Permission System |
| 45 | + |
| 46 | +**CC 源码位置**: |
| 47 | +- `src/Tool.ts` — checkPermissions(), PermissionResult 类型 |
| 48 | +- `src/services/tools/toolExecution.ts` — checkPermissionsAndCallTool() 完整管线 |
| 49 | +- `src/tools.ts` — canUseTool callback, permissionContext |
| 50 | +- `src/query.ts` — permission 在循环中的调用点 |
| 51 | +- YoloClassifier / auto-approve 逻辑 |
| 52 | + |
| 53 | +**分析重点**: |
| 54 | +1. PermissionResult 的完整类型定义(allow/deny/ask 三种决策) |
| 55 | +2. checkPermissions 的调用时机和参数 |
| 56 | +3. canUseTool callback 的签名和作用 |
| 57 | +4. 权限决策管线的精确顺序(schema → validateInput → hooks → permission → call) |
| 58 | +5. YoloClassifier 如何自动批准 |
| 59 | +6. permission bubbling 机制 |
| 60 | + |
| 61 | +**更新内容**: |
| 62 | +- [ ] 重写 `<details>` 折叠:完整 PermissionResult 类型 + 管线顺序 + 行号 |
| 63 | +- [ ] 补充 permission bubbling 概念 |
| 64 | +- [ ] 术语小抄补上 |
| 65 | + |
| 66 | +--- |
| 67 | + |
| 68 | +### s04 Hooks System |
| 69 | + |
| 70 | +**CC 源码位置**: |
| 71 | +- `src/services/tools/toolHooks.ts` (650 行) — PreToolUse/PostToolUse 钩子执行 |
| 72 | +- `src/query.ts` — stop hooks, hook_stopped_continuation |
| 73 | +- `src/hooks/` 目录 — 各类 React hooks(与教学无关),但 stop hooks 相关的逻辑在 query.ts |
| 74 | +- `src/services/compact/postCompactCleanup.ts` — 压缩后钩子清理 |
| 75 | + |
| 76 | +**分析重点**: |
| 77 | +1. PreToolUse hooks 的完整执行流程和返回值类型 |
| 78 | +2. PostToolUse hooks 的触发时机 |
| 79 | +3. Hook 返回值如何影响工具执行(preventContinuation, updatedInput, permissionDecision) |
| 80 | +4. Stop hooks 的触发时机和处理逻辑 |
| 81 | +5. 钩子注册和优先级机制 |
| 82 | + |
| 83 | +**更新内容**: |
| 84 | +- [ ] 重写 `<details>` 折叠:PreToolUse/PostToolUse/Stop hooks 的完整类型 + 触发时机 + 行号 |
| 85 | +- [ ] 教学版的 register_hook/trigger_hooks 与 CC 的差异对比 |
| 86 | + |
| 87 | +--- |
| 88 | + |
| 89 | +### s09 Memory System |
| 90 | + |
| 91 | +**CC 源码位置**: |
| 92 | +- `src/services/extractMemories/extractMemories.ts` (615 行) — 记忆提取 |
| 93 | +- `src/services/extractMemories/prompts.ts` — 提取 prompt |
| 94 | +- `src/services/SessionMemory/sessionMemory.ts` (495 行) — 会话记忆 |
| 95 | +- `src/services/SessionMemory/prompts.ts` — 记忆 prompt |
| 96 | +- `src/services/autoDream/consolidationLock.ts` — 巩固锁 |
| 97 | +- `src/query.ts` — 记忆加载和提取的调用点 |
| 98 | + |
| 99 | +**分析重点**: |
| 100 | +1. MemorySelector 的筛选算法(embedding 相似度 vs 关键词) |
| 101 | +2. ExtractMemories 的触发时机(stop hook 中,不是 autoCompact 后) |
| 102 | +3. DreamConsolidator 的触发频率和逻辑 |
| 103 | +4. 记忆的 JSON 结构(type、tags、timestamp、expires_at) |
| 104 | +5. session memory vs user memory 的区分 |
| 105 | +6. 记忆文件存储位置和格式 |
| 106 | + |
| 107 | +**更新内容**: |
| 108 | +- [ ] 重写 `<details>` 折叠:三子系统的具体触发时机 + 数据结构 + 行号 |
| 109 | +- [ ] 补充 session memory compact(s08 中回撤的那个机制) |
| 110 | +- [ ] 术语小抄补上 |
| 111 | + |
| 112 | +--- |
| 113 | + |
| 114 | +### s11 Error Recovery |
| 115 | + |
| 116 | +**CC 源码位置**: |
| 117 | +- `src/query.ts` — 全部恢复逻辑: |
| 118 | + - max_tokens escalation (8K→64K) |
| 119 | + - max_output_tokens recovery (续写提示,最多 3 次) |
| 120 | + - collapse_drain_retry |
| 121 | + - reactive_compact_retry |
| 122 | + - stop_hook_blocking |
| 123 | + - token_budget_continuation |
| 124 | + - fallback model 切换 |
| 125 | + - 指数退避 |
| 126 | + |
| 127 | +**分析重点**: |
| 128 | +1. 7 种 Continue 路径的精确触发条件和行号(部分已在 s01 中覆盖) |
| 129 | +2. 指数退避的具体参数(BASE_DELAY_MS, MAX_RETRIES, jitter) |
| 130 | +3. fallback model 的切换逻辑 |
| 131 | +4. max_tokens escalation 的单次限制 |
| 132 | +5. reactiveCompact vs autoCompact 的触发差异 |
| 133 | + |
| 134 | +**更新内容**: |
| 135 | +- [ ] 重写 `<details>` 折叠:四条恢复路径的精确条件 + 常量 + 行号 |
| 136 | +- [ ] 添加错误恢复决策树 SVG |
| 137 | +- [ ] 术语小抄补上 |
| 138 | + |
| 139 | +--- |
| 140 | + |
| 141 | +### s15 Agent Teams |
| 142 | + |
| 143 | +**CC 源码位置**: |
| 144 | +- `src/hooks/useSwarmInitialization.ts` (81 行) — Team/Swarm 初始化 |
| 145 | +- `src/hooks/useSwarmPermissionPoller.ts` (330 行) — 权限轮询 |
| 146 | +- `src/hooks/useInboxPoller.ts` (969 行) — 收件箱轮询 |
| 147 | +- `src/hooks/useTeammateViewAutoExit.ts` (63 行) — 队友自动退出 |
| 148 | +- `src/Task.ts` — teammate 相关的 task 逻辑 |
| 149 | +- `src/query.ts` — teammate idle notification, TaskCompleted hooks |
| 150 | + |
| 151 | +**分析重点**: |
| 152 | +1. Teammate 的生命周期管理 |
| 153 | +2. 收件箱的 JSONL 格式和读写锁 |
| 154 | +3. 消息总线的实现方式 |
| 155 | +4. permission bubbling 在 team 中的实际应用 |
| 156 | +5. teammate 的 idle 通知机制 |
| 157 | + |
| 158 | +**更新内容**: |
| 159 | +- [ ] 重写 `<details>` 折叠:team 拓扑 + 消息格式 + 权限冒泡 + 行号 |
| 160 | +- [ ] 术语小抄补上 |
| 161 | + |
| 162 | +--- |
| 163 | + |
| 164 | +### s19 MCP Plugin |
| 165 | + |
| 166 | +**CC 源码位置**: |
| 167 | +- `src/services/mcp/client.ts` (3348 行) — MCP Client 核心 |
| 168 | +- `src/services/mcp/auth.ts` — MCP 认证 |
| 169 | +- `src/services/mcp/config.ts` — MCP 配置 |
| 170 | +- `src/services/mcp/channelPermissions.ts` (240 行) — 通道权限 |
| 171 | +- `src/services/mcp/channelNotification.ts` — 通道通知 |
| 172 | +- `src/services/mcp/channelAllowlist.ts` — 通道白名单 |
| 173 | + |
| 174 | +**分析重点**: |
| 175 | +1. MCP Client 的连接生命周期(stdio/SSE/HTTP 三种 transport) |
| 176 | +2. tools/list 和 tools/call 的 JSON-RPC 协议细节 |
| 177 | +3. Channel 机制——MCP server 如何反向给 Agent 发消息 |
| 178 | +4. 工具池合并的精确算法 |
| 179 | +5. MCP tool 的命名规则(mcp__server__tool) |
| 180 | + |
| 181 | +**更新内容**: |
| 182 | +- [ ] 重写 `<details>` 折叠:MCP 协议细节 + transport 类型 + channel 机制 + 行号 |
| 183 | +- [ ] 术语小抄补上 |
| 184 | + |
| 185 | +--- |
| 186 | + |
| 187 | +## Batch 3: 中等复杂章(定向分析 + 补充 CC 对照) |
| 188 | + |
| 189 | +### s06 Subagent |
| 190 | + |
| 191 | +**CC 源码位置**: |
| 192 | +- `src/tools/AgentTool/` — AgentTool 定义 |
| 193 | +- `src/query.ts` — fork mode, fresh messages[] |
| 194 | +- `src/Task.ts` — 子 Agent 的 task 绑定 |
| 195 | + |
| 196 | +**分析重点**: |
| 197 | +1. fork mode vs fresh mode 的实际差异 |
| 198 | +2. prompt cache 在子 Agent 中的共享机制 |
| 199 | +3. 子 Agent 的上下文限制 |
| 200 | + |
| 201 | +**更新内容**: |
| 202 | +- [ ] 补充 CC 源码对照折叠 |
| 203 | +- [ ] 术语小抄 |
| 204 | + |
| 205 | +### s07 Skill Loading |
| 206 | + |
| 207 | +**CC 源码位置**: |
| 208 | +- `src/setup.ts` — skill loading 初始化 |
| 209 | +- `src/query.ts` — skill 注入点 |
| 210 | +- `src/tools.ts` — skill 工具的注册 |
| 211 | + |
| 212 | +**分析重点**: |
| 213 | +1. Skill 的目录结构和 manifest 格式 |
| 214 | +2. 两级加载的具体实现 |
| 215 | +3. Skill 内容注入方式(system prompt vs tool_result) |
| 216 | + |
| 217 | +**更新内容**: |
| 218 | +- [ ] 补充 CC 源码对照折叠 |
| 219 | +- [ ] 术语小抄 |
| 220 | + |
| 221 | +### s10 System Prompt |
| 222 | + |
| 223 | +**CC 源码位置**: |
| 224 | +- `src/constants/systemPromptSections.ts` (68 行) — 所有 prompt section |
| 225 | +- `src/constants/prompts.ts` (914 行) — 完整 prompt 模板 |
| 226 | +- `src/context.ts` (189 行) — 上下文组装 |
| 227 | +- `src/query.ts` — getSystemContext/getUserContext 调用点 |
| 228 | + |
| 229 | +**分析重点**: |
| 230 | +1. system prompt 的 section 列表和顺序 |
| 231 | +2. 运行时组装的逻辑(哪些始终加载,哪些按需) |
| 232 | +3. memoize 缓存机制 |
| 233 | + |
| 234 | +**更新内容**: |
| 235 | +- [ ] 补充 CC 源码对照折叠 |
| 236 | +- [ ] 术语小抄 |
| 237 | + |
| 238 | +### s12 Task System |
| 239 | + |
| 240 | +**CC 源码位置**: |
| 241 | +- `src/utils/tasks.ts` (862 行) — Task 数据结构和 CRUD |
| 242 | +- `src/tools/TaskCreateTool/TaskCreateTool.ts` — 创建任务 |
| 243 | +- `src/tools/TaskListTool/TaskListTool.ts` — 列出任务 |
| 244 | +- `src/tools/TaskGetTool/TaskGetTool.ts` — 获取任务 |
| 245 | +- `src/tools/TaskUpdateTool/TaskUpdateTool.ts` — 更新任务 |
| 246 | +- `src/hooks/useTaskListWatcher.ts` (221 行) — 任务看板监听 |
| 247 | + |
| 248 | +**分析重点**: |
| 249 | +1. TaskRecord 的完整字段(id, subject, status, owner, blockedBy, ...) |
| 250 | +2. 任务状态机的所有合法转换 |
| 251 | +3. claim task 的并发安全机制 |
| 252 | +4. 任务文件存储格式 |
| 253 | + |
| 254 | +**更新内容**: |
| 255 | +- [ ] 补充 CC 源码对照折叠 |
| 256 | +- [ ] 术语小抄 |
| 257 | +- [ ] 任务状态机 SVG |
| 258 | + |
| 259 | +### s13 Background Tasks |
| 260 | + |
| 261 | +**CC 源码位置**: |
| 262 | +- `src/query.ts` — pendingToolUseSummary, notification queue, background execution |
| 263 | + |
| 264 | +**分析重点**: |
| 265 | +1. background task 的线程模型 |
| 266 | +2. notification queue 的注入时机 |
| 267 | +3. pendingToolUseSummary 的生成(Haiku 后台摘要) |
| 268 | + |
| 269 | +**更新内容**: |
| 270 | +- [ ] 补充 CC 源码对照折叠 |
| 271 | +- [ ] 术语小抄 |
| 272 | + |
| 273 | +### s14 Cron Scheduler |
| 274 | + |
| 275 | +**CC 源码位置**: |
| 276 | +- `src/hooks/useScheduledTasks.ts` (139 行) |
| 277 | +- CC 的 cron job 存储和触发机制 |
| 278 | + |
| 279 | +**分析重点**: |
| 280 | +1. durable vs session-only 的持久化方式 |
| 281 | +2. cron 表达式的解析和匹配算法 |
| 282 | +3. 调度器在主循环中的集成点 |
| 283 | + |
| 284 | +**更新内容**: |
| 285 | +- [ ] 补充 CC 源码对照折叠 |
| 286 | +- [ ] 术语小抄 |
| 287 | + |
| 288 | +--- |
| 289 | + |
| 290 | +## Batch 4: 概念章或教学虚构章(轻量分析) |
| 291 | + |
| 292 | +### s05 TodoWrite |
| 293 | +- CC 中已被 Task 系统取代 |
| 294 | +- [ ] 补充说明 CC 的演进路径 |
| 295 | +- [ ] 术语小抄 |
| 296 | + |
| 297 | +### s16 Team Protocols |
| 298 | +- shutdown_request/response 协议在 query.ts 中的实现 |
| 299 | +- [ ] 轻量 CC 对照 |
| 300 | + |
| 301 | +### s17 Autonomous Agents |
| 302 | +- 来新璐指出"真实 CC 里没有这套",是教学假设 |
| 303 | +- [ ] 开篇诚实标注,不需要 CC 源码分析 |
| 304 | +- [ ] 术语小抄 |
| 305 | + |
| 306 | +### s18 Worktree Isolation |
| 307 | +- git worktree 命令的使用在 setup.ts/tools.ts 中 |
| 308 | +- [ ] 轻量 CC 对照 |
| 309 | + |
| 310 | +--- |
| 311 | + |
| 312 | +## 执行顺序 |
| 313 | + |
| 314 | +``` |
| 315 | +Batch 1 (已完成): s01, s02, s08 |
| 316 | +
|
| 317 | +Batch 2 (深度分析, 本周): |
| 318 | + Day 1: s03 Permission + s04 Hooks (并行跑 2 个 Agent) |
| 319 | + Day 2: s09 Memory + s11 Error Recovery (并行跑 2 个 Agent) |
| 320 | + Day 3: s15 Agent Teams + s19 MCP (并行跑 2 个 Agent) |
| 321 | +
|
| 322 | +Batch 3 (定向分析, 后续): |
| 323 | + s06 Subagent + s07 Skill Loading (并行) |
| 324 | + s10 System Prompt + s12 Task System (并行) |
| 325 | + s13 Background + s14 Cron (并行) |
| 326 | +
|
| 327 | +Batch 4 (轻量, 最后): |
| 328 | + s05 TodoWrite + s16 Team Protocols (并行) |
| 329 | + s17 Autonomous + s18 Worktree (并行) |
| 330 | +``` |
| 331 | + |
| 332 | +## 总工作量估算 |
| 333 | + |
| 334 | +| Batch | 章数 | 每章预估 | |
| 335 | +|-------|------|---------| |
| 336 | +| Batch 2 深度 | 6 章 | 2-3 Agent 调用 + 编辑 | |
| 337 | +| Batch 3 定向 | 8 章 | 1-2 Agent 调用 + 编辑 | |
| 338 | +| Batch 4 轻量 | 4 章 | 直接编辑 | |
| 339 | +| **合计** | **18 章**(s01/s02/s08 已完成) | | |
0 commit comments