51.2万行源码泄露:拆解 Anthropic 八层架构
一次 npm 打包错误,让全球开发者免费获得数亿美元研发成果。这不是代码泄露,而是一场 AI 编程架构的公开课。

前言
2026 年 3 月 31 日凌晨, Anthropic 工程师的一次 npm 发布,意外将 51.2 万行 Claude Code 源码完整暴露给全球开发者。
暴露的不只是代码,更是一套经过实战验证的八层架构:从 Runtime 到 QueryEngine ,从 ExecutionRegistry 到 Permission 系统,每一层都凝聚了 200+ 工程年的经验。
对于开发者而言,这是一次弯道超车的黄金机会。
一、八层架构全景

1.1 架构分层
| 层级 | 核心组件 | 代码量 |
| L1 接口层 | CLI / REPL / IDE / Web | – |
| L2 运行时层 | PortRuntime | 193 行 |
| L3 查询引擎层 | QueryEnginePort | 194 行 |
| L4 执行层 | ExecutionRegistry | 52 行 |
| L5 命令系统 | PORTED_COMMANDS | 91 行 |
| L6 工具系统 | PORTED_TOOLS | 97 行 |
| L7 权限层 | ToolPermissionContext | 21 行 |
| L8 存储层 | SessionStore / TranscriptStore | 60 行 |
1.2 数据流

用户输入 → Runtime路由 → ExecutionRegistry → Permission检查
→ QueryEngine → 执行层 → TranscriptStore → SessionStore → 返回
1.3 设计原则
@dataclass(frozen=True)二、 Runtime 运行时层

2.1 智能路由
源码:src/runtime.py( 193 行)
defroute_prompt(self, prompt: str, limit: int = 5):
"""智能路由:将用户输入匹配到命令/工具"""
tokens = {token.lower() for token in prompt.split()}
by_kind = {
'command': self._collect_matches(tokens, PORTED_COMMANDS),
'tool': self._collect_matches(tokens, PORTED_TOOLS),
}
selected = [by_kind[k].pop(0) for k in ('command', 'tool') if by_kind[k]]
return selected[:limit]
可复用价值:优先级算法 + 大小写不敏感匹配
三、 QueryEngine 查询引擎层
3.1 消息压缩
源码:src/query_engine.py( 194 行)
defcompact_messages_if_needed(self):
"""智能压缩:保留最近 N 条对话"""
if len(self.mutable_messages) > self.config.compact_after_turns:
self.mutable_messages[:] = self.mutable_messages[-self.config.compact_after_turns:]
self.transcript_store.compact(self.config.compact_after_turns)
价值:自动管理上下文窗口,避免 Token 超限
四、 Execution 执行层
4.1 统一执行注册表
源码:src/execution_registry.py( 52 行)
@dataclass(frozen=True)
classExecutionRegistry:
commands: tuple[MirroredCommand, ...]
tools: tuple[MirroredTool, ...]
defcommand(self, name: str):
lowered = name.lower()
for cmd in self.commands:
if cmd.name.lower() == lowered:
return cmd
return None
设计亮点:统一接口 + 不可变数据结构
五、 Permission 权限层
5.1 细粒度权限控制
源码:src/permissions.py(仅 21 行!)
@dataclass(frozen=True)
classToolPermissionContext:
deny_names: frozenset[str] = frozenset()
deny_prefixes: tuple[str, ...] = ()
defblocks(self, tool_name: str) -> bool:
lowered = tool_name.lower()
return (lowered in self.deny_names or
any(lowered.startswith(p) for p in self.deny_prefixes))
价值: 21 行实现完整权限系统,双重匹配机制
六、 Storage 存储层
6.1 会话持久化
源码:src/session_store.py( 36 行)
defsave_session(session, directory=None):
target_dir = directory or DEFAULT_SESSION_DIR
target_dir.mkdir(parents=True, exist_ok=True)
path = target_dir / f'{session.session_id}.json'
path.write_text(json.dumps(asdict(session), indent=2))
return path
6.2 消息抄录
源码:src/transcript.py(仅 24 行!)
@dataclass
classTranscriptStore:
entries: list[str] = field(default_factory=list)
defcompact(self, keep_last: int = 10):
if len(self.entries) > keep_last:
self.entries[:] = self.entries[-keep_last:]
七、商业价值
7.1 研发投入
| 投入项 | 估算 |
| 人力成本 | 200+ 工程年 |
| 算力成本 | 250 亿+ tokens |
| 时间成本 | 2 年+ |
| 资金投入 | 2-5 亿美元 |
7.2 竞争格局
| 阶段 | Anthropic | 竞品公司 | 时间差距 |
| 泄漏前 | 2024 ─────────→ 2026 | 从零开始 | 落后 2-3 年 |
| 泄漏后 | 2024 ──●──→ 2026 | 快速跟进 | 落后 6-12 月 |
技术门槛降低约 70%
八、可复用设计模式
8.1 核心模式
| 模块 | 代码量 | 复杂度 |
| permissions.py | 21 行 | 低 |
| transcript.py | 24 行 | 低 |
| session_store.py | 36 行 | 低 |
| execution_registry.py | 52 行 | 中 |
| query_engine.py | 194 行 | 中 |
| runtime.py | 193 行 | 高 |
8.2 复用路径
第一阶段(1-2天):核心模块
├─permissions.py→权限系统
├─transcript.py→消息抄录
└─session_store.py→会话存储
第二阶段(3-5天):执行层
├─execution_registry.py→执行注册表
└─models.py→数据模型
第三阶段(1-2周):查询引擎
├─query_engine.py→查询处理
└─消息压缩机制
第四阶段(2-4周):完整运行时
└─runtime.py→路由与启动
九、行业价值
9.1 技术栈对比
| 技术领域 | 缩短差距 |
| Runtime 设计 | 12-18 月 |
| QueryEngine | 18-24 月 |
| Execution 层 | 12-18 月 |
| Permission 系统 | 6-12 月 |
9.2 跟进案例
| 项目 | 语言 | 进度 |
| claw-code | Rust | 架构已移植 |
| open-claw-py | Python | Tool 系统完成 |
| claude-replica | TypeScript | Agent 层实现 |
十、结语
51.2 万行代码的泄漏,是一次知识解放。
“好的架构被设计出来,就是为了被学习、被改进、被超越。”
夜雨聆风