Files
claude-code-source-code/README_CN.md
2026-03-31 20:03:59 +08:00

309 lines
16 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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] # Telemetry & Privacy — what's collected, why you can't opt out
│ ├── [02-hidden-features-and-codenames.md] # Codenames (Capybara/Tengu/Numbat), feature flags, internal vs external
│ ├── [03-undercover-mode.md] # Undercover Mode — hiding AI authorship in open-source repos
│ ├── [04-remote-control-and-killswitches.md]# Remote Control — managed settings, killswitches, model overrides
│ └── [05-future-roadmap.md] # Future Roadmap — Numbat, KAIROS, voice mode, unreleased tools
└── zh/ # 中文
├── [01-遥测与隐私分析.md] # 遥测与隐私 — 收集了什么,为什么无法退出
├── [02-隐藏功能与模型代号.md] # 隐藏功能 — 模型代号feature flag内外用户差异
├── [03-卧底模式分析.md] # 卧底模式 — 在开源项目中隐藏 AI 身份
├── [04-远程控制与紧急开关.md] # 远程控制 — 托管设置,紧急开关,模型覆盖
└── [05-未来路线图.md] # 未来路线图 — NumbatKAIROS语音模式未上线工具
```
> 点击文件名即可跳转到对应报告。
| # | 主题 | 核心发现 | 链接 |
|---|------|---------|------|
| 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` | 交互式 REPLVM 沙箱) | `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 包。