mirror of
https://github.com/sanbuphy/claude-code-source-code.git
synced 2026-04-03 19:44:58 +08:00
307 lines
16 KiB
Markdown
307 lines
16 KiB
Markdown
# Claude Code v2.1.88 — 源码分析
|
||
|
||
> 从 npm 包 `@anthropic-ai/claude-code` **2.1.88** 版本中提取。
|
||
> 发布的包只有一个打包后的 `cli.js`(~12MB)。本仓库的 `src/` 目录包含从 npm 包中解包的 **TypeScript 源码**。
|
||
|
||
**语言**: [English](README.md) | **中文**
|
||
|
||
---
|
||
|
||
## 目录
|
||
|
||
- [深度分析文档 (`docs/`)](#深度分析文档-docs) — 遥测、模型代号、卧底模式、远程控制、未来路线图
|
||
- [缺失模块说明](#缺失模块说明108-个模块) — 108 个被 feature gate 移除的模块
|
||
- [架构概览](#架构概览) — 入口 → 查询引擎 → 工具/服务/状态
|
||
- [构建说明](#构建说明) — 为什么不能直接编译
|
||
|
||
---
|
||
|
||
## 深度分析文档 (`docs/`)
|
||
|
||
基于 v2.1.88 反编译源码的分析报告,中英双语。
|
||
|
||
```
|
||
docs/
|
||
├── en/ # English
|
||
│ ├── 01-telemetry-and-privacy.md # 遥测与隐私 — 双层数据管道,收集了什么,为什么无法退出
|
||
│ ├── 02-hidden-features-and-codenames.md# 隐藏功能 — 模型代号(Capybara/Tengu/Numbat),feature flag,内外用户差异
|
||
│ ├── 03-undercover-mode.md # 卧底模式 — Anthropic 员工如何在开源项目中隐藏 AI 身份
|
||
│ ├── 04-remote-control-and-killswitches.md # 远程控制 — 托管设置(拒绝就退出),紧急开关,模型覆盖
|
||
│ └── 05-future-roadmap.md # 未来路线图 — Numbat 模型、KAIROS 自主代理、语音模式、未上线工具
|
||
│
|
||
└── zh/ # 中文
|
||
├── 01-遥测与隐私分析.md
|
||
├── 02-隐藏功能与模型代号.md
|
||
├── 03-卧底模式分析.md
|
||
├── 04-远程控制与紧急开关.md
|
||
└── 05-未来路线图.md
|
||
```
|
||
|
||
| # | 主题 | 核心发现 | 链接 |
|
||
|---|------|---------|------|
|
||
| 01 | **遥测与隐私** | 双层分析管道(1P→Anthropic, Datadog)。环境指纹、进程指标、每个事件携带会话/用户 ID。**没有面向用户的退出开关**。`OTEL_LOG_TOOL_DETAILS=1` 可记录完整工具输入。 | [EN](docs/en/01-telemetry-and-privacy.md) · [中文](docs/zh/01-遥测与隐私分析.md) |
|
||
| 02 | **隐藏功能与代号** | 动物代号体系(Capybara v8, Tengu, Fennec→Opus 4.6, **Numbat** 下一代)。Feature flag 用随机词对掩盖用途。内部用户获得更好的 prompt 和验证代理。隐藏命令:`/btw`、`/stickers`。 | [EN](docs/en/02-hidden-features-and-codenames.md) · [中文](docs/zh/02-隐藏功能与模型代号.md) |
|
||
| 03 | **卧底模式** | Anthropic 员工在公开仓库自动进入卧底模式。模型指令:"**不要暴露你的掩护身份**" — 剥离所有 AI 归属,commit 看起来像人类写的。**没有强制关闭选项。** | [EN](docs/en/03-undercover-mode.md) · [中文](docs/zh/03-卧底模式分析.md) |
|
||
| 04 | **远程控制与 Killswitch** | 每小时轮询 `/api/claude_code/settings`。危险变更弹出阻塞对话框 — **拒绝 = 程序退出**。6+ 紧急开关(绕过权限、快速模式、语音模式、分析 sink)。GrowthBook 可无同意改变任何用户行为。 | [EN](docs/en/04-remote-control-and-killswitches.md) · [中文](docs/zh/04-远程控制与紧急开关.md) |
|
||
| 05 | **未来路线图** | **Numbat** 代号确认。Opus 4.7 / Sonnet 4.8 开发中。**KAIROS** = 完全自主代理模式,心跳 `<tick>`、推送通知、PR 订阅。语音模式(push-to-talk)已就绪。发现 17 个未上线工具。 | [EN](docs/en/05-future-roadmap.md) · [中文](docs/zh/05-未来路线图.md) |
|
||
|
||
---
|
||
|
||
## 缺失模块说明(108 个模块)
|
||
|
||
> **源码不完整。** 108 个被 `feature()` 门控的模块**未包含**在 npm 包中。
|
||
> 它们仅存在于 Anthropic 的内部 monorepo 中,在编译时被死代码消除。
|
||
> **无法**从 `cli.js`、`sdk-tools.d.ts` 或任何已发布的制品中恢复。
|
||
|
||
### Anthropic 内部代码(~70 个模块,从未发布)
|
||
|
||
这些模块在 npm 包中没有任何源文件。它们是 Anthropic 内部基础设施。
|
||
|
||
<details>
|
||
<summary>点击展开完整列表</summary>
|
||
|
||
| Module | Purpose | Feature Gate |
|
||
|--------|---------|-------------|
|
||
| `daemon/main.js` | 后台守护进程管理器 | `DAEMON` |
|
||
| `daemon/workerRegistry.js` | 守护进程 worker 注册 | `DAEMON` |
|
||
| `proactive/index.js` | 主动通知系统 | `PROACTIVE` |
|
||
| `contextCollapse/index.js` | 上下文折叠服务(实验性) | `CONTEXT_COLLAPSE` |
|
||
| `contextCollapse/operations.js` | 折叠操作 | `CONTEXT_COLLAPSE` |
|
||
| `contextCollapse/persist.js` | 折叠持久化 | `CONTEXT_COLLAPSE` |
|
||
| `skillSearch/featureCheck.js` | 远程技能特性检查 | `EXPERIMENTAL_SKILL_SEARCH` |
|
||
| `skillSearch/remoteSkillLoader.js` | 远程技能加载器 | `EXPERIMENTAL_SKILL_SEARCH` |
|
||
| `skillSearch/remoteSkillState.js` | 远程技能状态 | `EXPERIMENTAL_SKILL_SEARCH` |
|
||
| `skillSearch/telemetry.js` | 技能搜索遥测 | `EXPERIMENTAL_SKILL_SEARCH` |
|
||
| `skillSearch/localSearch.js` | 本地技能搜索 | `EXPERIMENTAL_SKILL_SEARCH` |
|
||
| `skillSearch/prefetch.js` | 技能预取 | `EXPERIMENTAL_SKILL_SEARCH` |
|
||
| `coordinator/workerAgent.js` | 多代理协调器 worker | `COORDINATOR_MODE` |
|
||
| `bridge/peerSessions.js` | 桥接对等会话管理 | `BRIDGE_MODE` |
|
||
| `assistant/index.js` | KAIROS 助手模式 | `KAIROS` |
|
||
| `assistant/AssistantSessionChooser.js` | 助手会话选择器 | `KAIROS` |
|
||
| `compact/reactiveCompact.js` | 响应式上下文压缩 | `CACHED_MICROCOMPACT` |
|
||
| `compact/snipCompact.js` | 基于裁剪的压缩 | `HISTORY_SNIP` |
|
||
| `compact/snipProjection.js` | 裁剪投影 | `HISTORY_SNIP` |
|
||
| `compact/cachedMCConfig.js` | 缓存微压缩配置 | `CACHED_MICROCOMPACT` |
|
||
| `sessionTranscript/sessionTranscript.js` | 会话转录服务 | `TRANSCRIPT_CLASSIFIER` |
|
||
| `commands/agents-platform/index.js` | 内部代理平台 | `ant` (内部) |
|
||
| `commands/assistant/index.js` | 助手命令 | `KAIROS` |
|
||
| `commands/buddy/index.js` | Buddy 系统通知 | `BUDDY` |
|
||
| `commands/fork/index.js` | Fork 子代理命令 | `FORK_SUBAGENT` |
|
||
| `commands/peers/index.js` | 多对等命令 | `BRIDGE_MODE` |
|
||
| `commands/proactive.js` | 主动命令 | `PROACTIVE` |
|
||
| `commands/remoteControlServer/index.js` | 远程控制服务器 | `DAEMON` + `BRIDGE_MODE` |
|
||
| `commands/subscribe-pr.js` | GitHub PR 订阅 | `KAIROS_GITHUB_WEBHOOKS` |
|
||
| `commands/torch.js` | 内部调试工具 | `TORCH` |
|
||
| `commands/workflows/index.js` | 工作流命令 | `WORKFLOW_SCRIPTS` |
|
||
| `jobs/classifier.js` | 内部任务分类器 | `TEMPLATES` |
|
||
| `memdir/memoryShapeTelemetry.js` | 记忆形态遥测 | `MEMORY_SHAPE_TELEMETRY` |
|
||
| `services/sessionTranscript/sessionTranscript.js` | 会话转录 | `TRANSCRIPT_CLASSIFIER` |
|
||
| `tasks/LocalWorkflowTask/LocalWorkflowTask.js` | 本地工作流任务 | `WORKFLOW_SCRIPTS` |
|
||
| `protectedNamespace.js` | 内部命名空间守卫 | `ant` (内部) |
|
||
| `protectedNamespace.js` (envUtils) | 受保护命名空间运行时 | `ant` (内部) |
|
||
| `coreTypes.generated.js` | 生成的核心类型 | `ant` (内部) |
|
||
| `devtools.js` | 内部开发工具 | `ant` (内部) |
|
||
| `attributionHooks.js` | 内部归属钩子 | `COMMIT_ATTRIBUTION` |
|
||
| `systemThemeWatcher.js` | 系统主题监视器 | `AUTO_THEME` |
|
||
| `udsClient.js` / `udsMessaging.js` | UDS 消息客户端 | `UDS_INBOX` |
|
||
|
||
</details>
|
||
|
||
### Feature-Gated 工具(~20 个模块)
|
||
|
||
这些工具有类型签名,但实现被编译时移除。
|
||
|
||
<details>
|
||
<summary>点击展开完整列表</summary>
|
||
|
||
| Tool | Purpose | Feature Gate |
|
||
|------|---------|-------------|
|
||
| `REPLTool` | 交互式 REPL(VM 沙箱) | `ant` (内部) |
|
||
| `SnipTool` | 上下文裁剪 | `HISTORY_SNIP` |
|
||
| `SleepTool` | 代理循环中的休眠/延迟 | `PROACTIVE` / `KAIROS` |
|
||
| `MonitorTool` | MCP 监控 | `MONITOR_TOOL` |
|
||
| `OverflowTestTool` | 溢出测试 | `OVERFLOW_TEST_TOOL` |
|
||
| `WorkflowTool` | 工作流执行 | `WORKFLOW_SCRIPTS` |
|
||
| `WebBrowserTool` | 浏览器自动化 | `WEB_BROWSER_TOOL` |
|
||
| `TerminalCaptureTool` | 终端捕获 | `TERMINAL_PANEL` |
|
||
| `TungstenTool` | 内部性能监控 | `ant` (内部) |
|
||
| `VerifyPlanExecutionTool` | 计划验证 | `CLAUDE_CODE_VERIFY_PLAN` |
|
||
| `SendUserFileTool` | 向用户发送文件 | `KAIROS` |
|
||
| `SubscribePRTool` | GitHub PR 订阅 | `KAIROS_GITHUB_WEBHOOKS` |
|
||
| `SuggestBackgroundPRTool` | 建议后台 PR | `KAIROS` |
|
||
| `PushNotificationTool` | 推送通知 | `KAIROS` |
|
||
| `CtxInspectTool` | 上下文检查 | `CONTEXT_COLLAPSE` |
|
||
| `ListPeersTool` | 列出活跃对等方 | `UDS_INBOX` |
|
||
| `DiscoverSkillsTool` | 技能发现 | `EXPERIMENTAL_SKILL_SEARCH` |
|
||
|
||
</details>
|
||
|
||
### 文本/Prompt 资源(~6 个文件)
|
||
|
||
| File | Purpose |
|
||
|------|---------|
|
||
| `yolo-classifier-prompts/auto_mode_system_prompt.txt` | 自动模式分类器系统提示 |
|
||
| `yolo-classifier-prompts/permissions_anthropic.txt` | Anthropic 内部权限提示 |
|
||
| `yolo-classifier-prompts/permissions_external.txt` | 外部用户权限提示 |
|
||
| `verify/SKILL.md` | 验证技能文档 |
|
||
| `verify/examples/cli.md` | CLI 验证示例 |
|
||
| `verify/examples/server.md` | 服务端验证示例 |
|
||
|
||
### 为什么缺失
|
||
|
||
```
|
||
Anthropic 内部 Monorepo 发布的 npm 包
|
||
────────────────────── ─────────────────────
|
||
feature('DAEMON') → true ──构建──→ feature('DAEMON') → false
|
||
↓ ↓
|
||
daemon/main.js ← 包含 ──打包──→ daemon/main.js ← 删除 (DCE)
|
||
tools/REPLTool ← 包含 ──打包──→ tools/REPLTool ← 删除 (DCE)
|
||
proactive/ ← 包含 ──打包──→ (被引用但 src/ 中不存在)
|
||
```
|
||
|
||
Bun 的 `feature()` 是**编译时内建函数**:
|
||
- 在 Anthropic 内部构建中返回 `true` → 代码保留在 bundle 中
|
||
- 在发布构建中返回 `false` → 代码被死代码消除
|
||
- 108 个模块在已发布的制品中根本不存在
|
||
|
||
---
|
||
|
||
## 版权与免责声明
|
||
|
||
```
|
||
Copyright (c) Anthropic PBC. All rights reserved.
|
||
|
||
本仓库中所有源码均为 Anthropic 的知识产权。
|
||
本仓库仅用于技术研究和教育目的。严禁商业使用。
|
||
|
||
如果您是版权所有者并认为本仓库侵犯了您的权利,
|
||
请联系仓库所有者立即删除。
|
||
```
|
||
|
||
---
|
||
|
||
## 统计数据
|
||
|
||
| 项目 | 数量 |
|
||
|------|------|
|
||
| 源文件 (.ts/.tsx) | ~1,884 |
|
||
| 代码行数 | ~512,664 |
|
||
| 最大单文件 | `query.ts` (~785KB) |
|
||
| 内置工具 | ~40+ |
|
||
| 斜杠命令 | ~80+ |
|
||
| 依赖 (node_modules) | ~192 个包 |
|
||
| 运行时 | Bun(编译为 Node.js >= 18 bundle)|
|
||
|
||
---
|
||
|
||
## 代理模式
|
||
|
||
```
|
||
核心循环
|
||
========
|
||
|
||
用户 --> messages[] --> Claude API --> 响应
|
||
|
|
||
stop_reason == "tool_use"?
|
||
/ \
|
||
是 否
|
||
| |
|
||
执行工具 返回文本
|
||
追加 tool_result
|
||
循环回退 -----------------> messages[]
|
||
|
||
|
||
这就是最小的代理循环。Claude Code 在此循环上
|
||
包裹了生产级线束:权限、流式传输、并发、
|
||
压缩、子代理、持久化和 MCP。
|
||
```
|
||
|
||
---
|
||
|
||
## 目录参考
|
||
|
||
```
|
||
src/
|
||
├── main.tsx # REPL 引导程序,4,683 行
|
||
├── QueryEngine.ts # SDK/headless 查询生命周期引擎
|
||
├── query.ts # 主代理循环 (785KB,最大文件)
|
||
├── Tool.ts # 工具接口 + buildTool 工厂
|
||
├── Task.ts # 任务类型、ID、状态基类
|
||
├── tools.ts # 工具注册、预设、过滤
|
||
├── commands.ts # 斜杠命令定义
|
||
├── context.ts # 用户输入上下文
|
||
├── cost-tracker.ts # API 成本累积
|
||
├── setup.ts # 首次运行设置流程
|
||
│
|
||
├── bridge/ # Claude Desktop / 远程桥接
|
||
│ ├── bridgeMain.ts # 会话生命周期管理器
|
||
│ ├── bridgeApi.ts # HTTP 客户端
|
||
│ ├── bridgeConfig.ts # 连接配置
|
||
│ ├── bridgeMessaging.ts # 消息中继
|
||
│ ├── sessionRunner.ts # 进程生成
|
||
│ ├── jwtUtils.ts # JWT 刷新
|
||
│ ├── workSecret.ts # 认证令牌
|
||
│ └── capacityWake.ts # 基于容量的唤醒
|
||
│
|
||
├── cli/ # CLI 基础设施
|
||
│ ├── handlers/ # 命令处理器
|
||
│ └── transports/ # I/O 传输 (stdio, structured)
|
||
│
|
||
├── commands/ # ~80 个斜杠命令
|
||
├── components/ # React/Ink 终端 UI
|
||
├── entrypoints/ # 应用入口点
|
||
├── hooks/ # React hooks
|
||
├── services/ # 业务逻辑层
|
||
├── state/ # 应用状态
|
||
├── tasks/ # 任务实现
|
||
├── tools/ # 40+ 工具实现
|
||
├── types/ # 类型定义
|
||
├── utils/ # 工具函数(最大目录)
|
||
└── vendor/ # 原生模块源码存根
|
||
```
|
||
|
||
---
|
||
|
||
## 架构概览
|
||
|
||
```
|
||
┌─────────────────────────────────────────────────────────────────────┐
|
||
│ 入口层 │
|
||
│ cli.tsx ──> main.tsx ──> REPL.tsx (交互式) │
|
||
│ └──> QueryEngine.ts (headless/SDK) │
|
||
└──────────────────────────────┬──────────────────────────────────────┘
|
||
│
|
||
▼
|
||
┌─────────────────────────────────────────────────────────────────────┐
|
||
│ 查询引擎 │
|
||
│ submitMessage(prompt) ──> AsyncGenerator<SDKMessage> │
|
||
│ ├── fetchSystemPromptParts() ──> 组装系统提示词 │
|
||
│ ├── processUserInput() ──> 处理 /命令 │
|
||
│ ├── query() ──> 主代理循环 │
|
||
│ │ ├── StreamingToolExecutor ──> 并行工具执行 │
|
||
│ │ ├── autoCompact() ──> 上下文压缩 │
|
||
│ │ └── runTools() ──> 工具编排 │
|
||
│ └── yield SDKMessage ──> 流式传输给消费者 │
|
||
└──────────────────────────────┬──────────────────────────────────────┘
|
||
```
|
||
|
||
---
|
||
|
||
## 构建说明
|
||
|
||
本源码**不能直接从本仓库编译**:
|
||
|
||
- 缺少 `tsconfig.json`、构建脚本和 Bun bundler 配置
|
||
- `feature()` 调用是 Bun 编译时内建函数 — 在打包时解析
|
||
- `MACRO.VERSION` 在构建时注入
|
||
- `process.env.USER_TYPE === 'ant'` 部分是 Anthropic 内部的
|
||
- 编译后的 `cli.js` 是一个自包含的 12MB bundle,只需 Node.js >= 18
|
||
|
||
**构建说明详见 [QUICKSTART.md](QUICKSTART.md)。**
|
||
|
||
---
|
||
|
||
## 许可证
|
||
|
||
本仓库中所有源码版权归 **Anthropic PBC** 所有。本仓库仅用于技术研究和教育目的。完整许可条款请参阅原始 npm 包。
|