# Step 63: 源码对照②
一句话导读:Phase 6 不再加功能,而是把权限、沙箱、分类器、缓存、设置、遥测放回真实源码里检查:方向对了,差距在生产纵深。
# 一、这一步做了什么(What)
step63 是 Phase 6 的复盘篇。它对照真实 Claude Code 的 utils/permissions/、utils/sandbox/、services/analytics/ 等目录,检查 step57-62 是否抓住了真实机制的形状。
结论很清楚:规则优先级、两段式 Bash 分类、应用层 vs 内核沙箱、分层设置、prompt caching、遥测隐私边界,这些方向都对;主要缺口在 symlink、阴影规则、采样、远程策略、内核隔离等生产细节。
# 二、面试官视角:为什么要做?(Why)
面试题:既然教学版功能已经跑通,为什么还要专门做源码对照?
因为“能跑”不等于“方向对”。教学版最容易犯的错是把玩具实现误当成真实设计。源码对照的价值是校准抽象:哪些是故意简化,哪些是根本没做对。
| 对照前 | 对照后 |
|---|---|
| 只知道自己实现了 allow/deny | 知道真实还有 shadowed rule、denial tracking |
| 以为路径 relative 足够 | 发现 symlink 绕过是安全短板 |
| 以为遥测就是日志 | 明白 PII 边界才是核心 |
# 三、原理:它是怎么工作的(How)
step63 的 README 按模块做映射:
step57 权限规则 → utils/permissions/
step59 Bash 分类器 → dangerousPatterns + yoloClassifier
step58 沙箱 → sandbox-runtime / sandboxTypes
step60 Prompt Caching → prompt caching usage / TTL
step61 分层设置 → SETTING_SOURCES / permissionsLoader
step62 遥测 → services/analytics/
2
3
4
5
6
最关键发现是路径校验。教学版 checkPath 用 path.relative(root, target) 判断是否逃出 cwd,但真实源码会解析 symlink:
proj/evil -> /etc
write proj/evil/passwd
relative 判断仍在 proj 内
realpath 后变成 /etc/passwd,必须拒绝
2
3
4
这说明安全校验不能只看字符串路径,必须看文件系统真实指向。
Phase 6 总对照:
规则语法:抄对 exact / prefix / wildcard
权限路径:少 realpath / symlink 防护
Bash 分类:抄对 heuristic + LLM 两段式
沙箱:抄对配置模型,缺系统调用级拦截
设置:抄对层级顺序,缺 drop-in/远程策略/热重载
遥测:抄对隐私边界,缺采样和远程 sink
2
3
4
5
6
# 四、深入追问(面试常见 follow-up)
Q:这次对照里最有价值的发现是什么?
A:路径校验不解析 symlink。它不是功能缺口,而是真安全缺口:字符串看似在项目内,真实文件可能指向项目外。
Q:为什么说差距在“纵深”而不是“方向”?
A:教学版的规则语法、优先级、两段分类、分层合并、遥测边界都和真实一致;缺的是更多边界和生产设施。
Q:源码对照应该逐字复刻吗?
A:不应该。教学版要保留最小可运行内核,关键是知道真实系统在哪些地方更深,而不是把 9000 行搬回来。
Q:为什么 Phase 6 要放一次对照?
A:安全、成本、遥测都是底层能力,错了会影响整个 agent runtime。阶段末尾做对照能及时校准风险。
# 五、踩坑 / 设计权衡
源码对照不是“找差距打击自己”,而是给简化版贴标签:哪些是教学取舍,哪些未来必须补。比如应用层沙箱可以教学,但必须明确真实 Claude Code 靠内核级 sandbox-runtime。
# 六、与真实源码的对照
| 我们的实现 | Claude Code 源码 |
|---|---|
| allow/deny + glob/prefix/exact | permission parser + shellRuleMatching |
relative() 路径校验 | realpath + symlink + deny-within-allow |
| 启发式 + LLM Bash 分类 | dangerousPatterns + yoloClassifier 子系统 |
| 本地 Telemetry JSONL | analytics sink、采样、PII 分列 |
| 五层设置合并 | drop-in、远程策略、schema、热重载 |
# 七、一句话总结
step63 证明 Phase 6 的教学实现“形状对了”:真实差距不在主方向,而在 symlink、采样、热重载、内核沙箱这类生产纵深。
# 下一节预告
下一篇进入 Phase 7:step64 手写最小终端渲染引擎,理解 Ink 的虚拟节点树和 diff 刷屏。