"
Claude Code意外泄漏51.2万行TS核心代码
本文档描述本仓库的主要模块划分 、模块间依赖关系 与典型数据流 。仓库由两部分组成: leak 的 TypeScript / Bun 主程序 (src/)与 Rust 兼容脚手架 (rust/),二者在"概念分层"上对齐,但运行时不耦合------Rust 侧通过解析上游 TS 源码完成 harness 验证。
1. 仓库顶层视图
| 区域 | 角色 | 技术栈 |
|---|---|---|
src/ |
可运行的 Claude Code CLI 实现主体 | TypeScript、Bun、React + Ink |
rust/ |
兼容优先的移植地基:注册表/启动阶段与上游事实抽取 | Rust Cargo workspace |

2. TypeScript 主程序:模块划分
根目录 README.md 已给出 src/ 目录树;从架构角度可归纳为下列逻辑分层。
2.1 入口与启动
src/entrypoints/cli.tsx:轻量 bootstrap 。尽量用动态import()走「快路径」(如--version、专用 MCP/守护进程入口),减少冷启动模块加载。src/main.tsx:完整 CLI 与主运行时。顶层即有 并行预热 (startMdmRawRead、startKeychainPrefetch等),随后拉取配置、遥测、GrowthBook、策略与远程托管设置等。
两者关系:cli 快路径 → 否则加载完整 main 路径 (与 compat-harness 对 cli.tsx 中字符串模式的探测一致)。
2.2 命令与工具(用户意图 vs 模型能力)
| 模块 | 职责 |
|---|---|
commands.ts + commands/ |
以 / 开头的斜杠命令:面向用户的交互面(commit、doctor、mcp、compact 等)。 |
tools.ts + tools/ |
Agent 可调用的工具:Bash、读写文件、Grep/Glob、MCP、子 Agent、Skill 等;带 schema 与权限模型。 |
Tool.ts |
工具相关的类型与契约(输入 schema、权限、进度状态等)。 |
2.3 查询与上下文核心
| 模块 | 职责 |
|---|---|
QueryEngine.ts |
与 LLM API 交互的核心:流式响应 、工具调用循环、thinking、重试、token 统计等。 |
context.ts |
系统/用户上下文拼装。 |
query/ |
查询管线相关逻辑。 |
cost-tracker.ts |
费用/token 追踪。 |
2.4 服务与集成
services/ 集中对外部世界与横切能力:
api/:Anthropic API、文件 API、bootstrap 等。mcp/:MCP 服务连接与配置。oauth/:OAuth 2.0。lsp/:语言服务。analytics/、compact/、policyLimits/等:遥测、压缩、组织策略等。
2.5 终端 UI 与状态
components/、hooks/、screens/、ink/:Ink/React 渲染与全屏界面(如 Doctor、REPL、Resume)。state/:会话与应用状态。
2.6 横切子系统
bridge/:与 VS Code / JetBrains 等 IDE 扩展的双向通道(消息、权限回调、REPL bridge、JWT 等)。coordinator/:多 Agent 编排(与 Agent 工具、Team*工具等配合)。plugins/、skills/:插件与 Skill 加载与执行路径。hooks/toolPermission/: 每次工具调用前的权限判定与用户提示(或按模式自动放行)。schemas/、migrations/:配置与迁移。memdir/、tasks/等:持久记忆与任务。
2.7 构建期特性
通过 bun:bundle 的 feature() 做死代码剔除,按产品形态裁剪 voice、bridge、daemon、coordinator 等代码路径。
3. TypeScript:模块依赖与数据流(概念)
3.1 依赖关系(由外向内)

- 命令层 可直接触发查询或副作用;工具层 主要由 QueryEngine 在模型回合中调度。
- 权限 插在工具执行链上,与 配置/策略 (如
policyLimits、托管设置)共同影响是否可执行。
3.2 典型对话数据流(简化)
- 输入:用户在 TUI 输入或 IDE 经 bridge 注入消息。
- 上下文 :
context、历史、system prompt、services拉取的策略与特性开关参与拼装。 - 模型调用 :
QueryEngine发起流式请求;可能多轮 tool use。 - 工具循环 :模型返回 tool_call → 经 permission → 执行
tools/*→ 结果作为 tool_result 再进入下一轮。 - 输出 :流式文本与工具结果驱动 Ink 更新;部分能力经 compact 等减负。
3.3 启动数据流(简化)
cli.tsx判断是否为 version / 专用模式 / daemon worker 等快路径 → 可能直接退出。- 否则进入
main.tsx:并行 MDM / Keychain 等预取,init/initializeTelemetryAfterTrust,加载全局与远程配置。 - 构建 工具列表 (如
getTools)、模型与 advisor 相关选项,进入 REPL 或子命令路径。
4. Rust 工作空间:模块划分
Rust 侧目标在 rust/README.md 中说明:harness-first,先证明能从上游 TS 抽取出可观测事实,再逐步对齐运行时。
4.1 Crate 列表与职责
| Crate | 职责 |
|---|---|
runtime |
定义 BootstrapPhase 与 BootstrapPlan(与上游 CLI 启动阶段概念对齐,无 I/O)。 |
commands |
CommandRegistry 、CommandManifestEntry、CommandSource(builtin / internal / feature-gated)。 |
tools |
ToolRegistry 、ToolManifestEntry、ToolSource(base / conditional)。 |
compat-harness |
读 src/commands.ts、src/tools.ts、src/entrypoints/cli.tsx,解析出上述 manifest 与 bootstrap 阶段;含集成测试。 |
rusty-claude-cli |
薄二进制:dump-manifests、bootstrap-plan、--help。 |
4.2 Cargo 依赖图

commands与toolscrate 互不依赖(仅共享"清单"形状)。runtime独立,被 harness 与 CLI 引用。compat-harness是唯一直接依赖上游文件路径与解析逻辑的 crate。
4.3 Harness 数据流
UpstreamPaths:由 workspace 目录推导 repo 根,定位
src/commands.ts、src/tools.ts、src/entrypoints/cli.tsx。extract_manifest:读入三份源码字符串。- 命令 :扫描
import、INTERNAL_ONLY_COMMANDS、feature('...')条件加载等模式 →CommandRegistry。 - 工具 :扫描
./tools/导入与 feature 门控 →ToolRegistry。 - Bootstrap :在
cli.tsx文本中匹配子串(如--version、startupProfiler、--daemon-worker)→ 构造BootstrapPlan。 rusty-claude-cli dump-manifests:打印条目数量等;bootstrap-plan打印默认/推断的 phase 列表。
该数据流是 只读、静态 的,用于兼容性与回归验证,不在运行时替代 TypeScript CLI。
5. TS 与 Rust 的对应关系(概念映射)
| TypeScript | Rust(当前里程碑) |
|---|---|
commands.ts 注册的命令集合 |
CommandRegistry + harness 解析 |
tools.ts 注册的工具集合 |
ToolRegistry + harness 解析 |
entrypoints/cli.tsx 启动分支 |
BootstrapPhase / BootstrapPlan |
QueryEngine、完整 REPL |
尚未在 Rust 中实现 |
6. 小结
- 主产品架构 是「CLI/Ink UI + QueryEngine + src/tools + services + bridge + 权限 」的闭环;数据主线是 用户/IDE 输入 → 上下文 → LLM → 工具调用(带权限)→ 结果回注。
- Rust 子工程 是 对齐上游接缝的脚手架 :用独立 crate 划清 runtime / commands / tools ,由 compat-harness 从 TS 源码抽取清单与启动阶段事实,rusty-claude-cli 暴露开发期命令。
- 两者通过 目录与命名约定对齐,而非进程内链接;后续若扩展 Rust 运行时,可沿同一 crate 边界生长。
文档基于仓库内 README.md、rust/README.md 与 rust/crates/*/src 源码整理。