Skip to content

附录 · 源码深度分析笔记 ​

这一组文档是逐文件精读源码后产出的原始分析笔记(共约 4800 行),与前面 01-13 章的关系是:

01-13 章(面试讲解)本附录(源码分析)
组织方式按面试阅读逻辑(问题 → 设计 → 追问 → 企业级)按模块 + 文件
目的能在面试里讲出来能查到任何一处实现细节
内容精选 + 提炼 + 话术全量 + 原始 + 带完整行号引用
篇幅约 8700 行约 4800 行

什么时候看附录:

  • 面试官追问到「这个函数的第 37 行具体做了什么」→ 查附录
  • 想确认某个常量/字段/分支的真实取值 → 查附录
  • 想通读某个模块的全部实现细节(包括主文档没展开的边角)→ 查附录

读法提醒:附录是原始笔记,包含大量「源码未体现」「不确定」的诚实标注——这些标注本身就是有价值的信息(说明该处没有实现或行为未定义)。


笔记清单 ​

文档覆盖范围规模对应面试章节
A1 · LLM 协议层internal/llm/(provider / anthropic / openai)、internal/config/、internal/conversation/470 行10 · 多协议抽象与提示工程
A2 · 权限系统internal/permission/ 全部 9 文件 + agent/permission_upgrade.go960 行05 · 权限与安全护栏
A3 · 上下文与记忆internal/compact/、session/、memory/、instructions/918 行06 · 上下文工程与压缩 / 07 · 记忆、会话与项目指令
A4 · 扩展机制internal/mcp/、skills/、hook/、subagent/、task/ 共 25 个源文件676 行08 · 扩展机制 / 09 · SubAgent 与后台任务
A5 · 工具系统internal/tool/ 全部 12 文件(1662 行)1119 行04 · 工具系统与执行编排
A6 · TUI 与提示工程internal/tui/、internal/command/、internal/prompt/、cmd/mewcode/main.go、cmd/smoke/677 行11 · TUI 与 Go 并发模型

六份笔记共同的结构 ​

每份都按同一模板组织,方便横向查阅:

## 模块职责
## 关键类型与接口        (贴真实代码 + 文件:行号)
## 关键流程              (编号步骤,含分支与异常路径)
## 设计决策与权衡        (决策 → 为什么 → 替代方案)
## 边界与容错            (硬编码常量清单 + 异常路径清单 + 「本模块没有的东西」)
## 面试官可能追问        (15-27 条,含答案要点)
## 企业级对应方案        (与业界做法的差异与补齐点)
## 附:源码未体现的点    (诚实清单)

分析过程中发现的最有价值的几个事实 ​

这些是只有逐行读代码才能发现的,已被吸收进对应面试章节,此处集中列出便于复习:

#发现出处
1edit_file 用 file_path 参数而权限层读 m["path"] → 核心编辑工具在主路径下一律被 DenyA5 / A2
2manageAuto 每轮无条件 ReplaceMessages → onReplace 每轮写 compact 标记 + 全量重写历史,写放大 = 轮数 × 历史长度A3
3UsageAnchor 必须包含 CacheRead+CacheWrite,否则 Anthropic 缓存命中时 token 估算严重偏低、压缩永不触发A1
4MCP / 未知工具的 extractTarget 返回空 → 完全绕过沙箱与黑名单,且 Allow(mcp__srv__*) 通配匹配不上A2
5bash 工具完全不受沙箱约束——「最危险的通道防护最弱」A2
6Agent 工具的 120s 转后台阈值被外层 tool.DefaultTimeout=30s 抢先,且 Execute 返回即 cancel() → 后台任务 ctx 启动即失效A4 / A9 章
7escapeGlob 的转义与 matchCommandPattern 的无转义比较语义不匹配 → 含 *?[] 的命令「永久允许」后规则永不命中A2
8filter.go 的白名单写 "load_skill" 而注册名是 "LoadSkill" → 后台子 Agent 的 Skill 工具被静默剔除A5
9Anthropic 的 thinking 一旦历史里出现过工具调用就永久关闭(因为 Message 结构不存 thinking block)A1
10WithApprovalUpgrader 定义了但从未接线 → 子 Agent 遇 Ask 可能永久阻塞A4 / A6
11IsForkContext 全仓零调用点;EventSessionResume 定义但从未派发A4 / A6
12instructions 的路径逃逸检测是字符串前缀比较 → /proj-evil 可绕过A3

这些发现构成了 项目设计 · 已知缺陷清单 的来源。面试时主动讲其中 3-4 条,比背功能列表有说服力得多。


持续学习,持续构建。