first commit
This commit is contained in:
280
claude code源码/README-zh.md
Normal file
280
claude code源码/README-zh.md
Normal file
@@ -0,0 +1,280 @@
|
||||
# Claude Code 源码快照(安全研究用)
|
||||
|
||||
> 本仓库镜像了一份**公开暴露的 Claude Code 源码快照**,该快照于 **2026 年 3 月 31 日** 通过 npm 分发包中的 source map 暴露问题而可访问。本仓库仅用于**教育、防守性安全研究和软件供应链分析**目的。
|
||||
|
||||
---
|
||||
|
||||
## 研究背景
|
||||
|
||||
本仓库研究方向包括:
|
||||
|
||||
- 软件供应链暴露与构建产物泄露
|
||||
- 安全软件工程实践
|
||||
- 代理式开发者工具架构
|
||||
- 真实世界 CLI 系统的防御性分析
|
||||
|
||||
此存档旨在支持:
|
||||
|
||||
- 教育学习
|
||||
- 安全研究实践
|
||||
- 架构审查
|
||||
- 打包和发布流程失败的讨论
|
||||
|
||||
本仓库**不声索原始代码的所有权**,也不应被视为 Anthropic 的官方仓库。
|
||||
|
||||
---
|
||||
|
||||
## 公开快照是如何可访问的
|
||||
|
||||
[Chaofan Shou (@Fried_rice)](https://x.com/Fried_rice) 公开指出 Claude Code 源码可以通过 npm 包中暴露的 `.map` 文件访问:
|
||||
|
||||
> **"Claude Code 源代码通过其 npm registry 中的 map 文件泄露了!"**
|
||||
>
|
||||
> — [@Fried_rice,2026 年 3 月 31 日](https://x.com/Fried_rice/status/2038894956459290963)
|
||||
|
||||
发布的 source map 引用了托管在 Anthropic R2 存储桶中的未混淆 TypeScript 源码,使 `src/` 快照可供公众下载。
|
||||
|
||||
---
|
||||
|
||||
## 仓库范围
|
||||
|
||||
Claude Code 是 Anthropic 的 CLI 工具,用于在终端中与 Claude 交互,执行软件工程任务,如编辑文件、运行命令、搜索代码库和协调工作流程。
|
||||
|
||||
本仓库包含用于研究和分析的镜像 `src/` 快照。
|
||||
|
||||
- **公开暴露发现日期**:2026-03-31
|
||||
- **语言**:TypeScript
|
||||
- **运行时**:Bun
|
||||
- **终端 UI**:React + [Ink](https://github.com/vadimdemedes/ink)
|
||||
- **规模**:约 1,900 个文件,512,000+ 行代码
|
||||
|
||||
---
|
||||
|
||||
## 目录结构
|
||||
|
||||
```text
|
||||
src/
|
||||
├── main.tsx # 入口点编排(基于 Commander.js 的 CLI 路径)
|
||||
├── commands.ts # 命令注册表
|
||||
├── tools.ts # 工具注册表
|
||||
├── Tool.ts # 工具类型定义
|
||||
├── QueryEngine.ts # LLM 查询引擎
|
||||
├── context.ts # 系统/用户上下文收集
|
||||
├── cost-tracker.ts # Token 成本追踪
|
||||
│
|
||||
├── commands/ # 斜杠命令实现(约 50 个)
|
||||
├── tools/ # 代理工具实现(约 40 个)
|
||||
├── components/ # Ink UI 组件(约 140 个)
|
||||
├── hooks/ # React hooks
|
||||
├── services/ # 外部服务集成
|
||||
├── screens/ # 全屏 UI(Doctor、REPL、Resume)
|
||||
├── types/ # TypeScript 类型定义
|
||||
├── utils/ # 工具函数
|
||||
│
|
||||
├── bridge/ # IDE 和远程控制桥接
|
||||
├── coordinator/ # 多代理协调器
|
||||
├── plugins/ # 插件系统
|
||||
├── skills/ # 技能系统
|
||||
├── keybindings/ # 键位配置
|
||||
├── vim/ # Vim 模式
|
||||
├── voice/ # 语音输入
|
||||
├── remote/ # 远程会话
|
||||
├── server/ # 服务器模式
|
||||
├── memdir/ # 持久化内存目录
|
||||
├── tasks/ # 任务管理
|
||||
├── state/ # 状态管理
|
||||
├── migrations/ # 配置迁移
|
||||
├── schemas/ # 配置模式(Zod)
|
||||
├── entrypoints/ # 初始化逻辑
|
||||
├── ink/ # Ink 渲染器封装
|
||||
├── buddy/ # 伙伴精灵
|
||||
├── native-ts/ # 原生 TypeScript 工具
|
||||
├── outputStyles/ # 输出样式
|
||||
├── query/ # 查询管道
|
||||
└── upstreamproxy/ # 代理配置
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 架构概述
|
||||
|
||||
### 1. 工具系统 (`src/tools/`)
|
||||
|
||||
Claude Code 可调用的每个工具都实现为自包含的模块。每个工具定义其输入模式、权限模型和执行逻辑。
|
||||
|
||||
| 工具 | 描述 |
|
||||
|---|---|
|
||||
| `BashTool` | Shell 命令执行 |
|
||||
| `FileReadTool` | 文件读取(图片、PDF、笔记本) |
|
||||
| `FileWriteTool` | 文件创建/覆盖 |
|
||||
| `FileEditTool` | 部分文件修改(字符串替换) |
|
||||
| `GlobTool` | 文件模式匹配搜索 |
|
||||
| `GrepTool` | 基于 ripgrep 的内容搜索 |
|
||||
| `WebFetchTool` | 获取 URL 内容 |
|
||||
| `WebSearchTool` | 网络搜索 |
|
||||
| `AgentTool` | 子代理生成 |
|
||||
| `SkillTool` | 技能执行 |
|
||||
| `MCPTool` | MCP 服务器工具调用 |
|
||||
| `LSPTool` | 语言服务器协议集成 |
|
||||
| `NotebookEditTool` | Jupyter 笔记本编辑 |
|
||||
| `TaskCreateTool` / `TaskUpdateTool` | 任务创建和管理 |
|
||||
| `SendMessageTool` | 代理间消息传递 |
|
||||
| `TeamCreateTool` / `TeamDeleteTool` | 团队代理管理 |
|
||||
| `EnterPlanModeTool` / `ExitPlanModeTool` | 计划模式切换 |
|
||||
| `EnterWorktreeTool` / `ExitWorktreeTool` | Git worktree 隔离 |
|
||||
| `ToolSearchTool` | 延迟工具发现 |
|
||||
| `CronCreateTool` | 定时触发器创建 |
|
||||
| `RemoteTriggerTool` | 远程触发器 |
|
||||
| `SleepTool` | 主动模式等待 |
|
||||
| `SyntheticOutputTool` | 结构化输出生成 |
|
||||
|
||||
### 2. 命令系统 (`src/commands/`)
|
||||
|
||||
用户以 `/` 前缀调用的斜杠命令。
|
||||
|
||||
| 命令 | 描述 |
|
||||
|---|---|
|
||||
| `/commit` | 创建 git 提交 |
|
||||
| `/review` | 代码审查 |
|
||||
| `/compact` | 上下文压缩 |
|
||||
| `/mcp` | MCP 服务器管理 |
|
||||
| `/config` | 设置管理 |
|
||||
| `/doctor` | 环境诊断 |
|
||||
| `/login` / `/logout` | 认证 |
|
||||
| `/memory` | 持久化内存管理 |
|
||||
| `/skills` | 技能管理 |
|
||||
| `/tasks` | 任务管理 |
|
||||
| `/vim` | Vim 模式切换 |
|
||||
| `/diff` | 查看更改 |
|
||||
| `/cost` | 查看使用成本 |
|
||||
| `/theme` | 更改主题 |
|
||||
| `/context` | 上下文可视化 |
|
||||
| `/pr_comments` | 查看 PR 评论 |
|
||||
| `/resume` | 恢复之前的会话 |
|
||||
| `/share` | 分享会话 |
|
||||
| `/desktop` | 桌面应用交接 |
|
||||
| `/mobile` | 移动应用交接 |
|
||||
|
||||
### 3. 服务层 (`src/services/`)
|
||||
|
||||
| 服务 | 描述 |
|
||||
|---|---|
|
||||
| `api/` | Anthropic API 客户端、文件 API、引导程序 |
|
||||
| `mcp/` | 模型上下文协议服务器连接和管理 |
|
||||
| `oauth/` | OAuth 2.0 认证流程 |
|
||||
| `lsp/` | 语言服务器协议管理器 |
|
||||
| `analytics/` | 基于 GrowthBook 的功能标志和分析 |
|
||||
| `plugins/` | 插件加载器 |
|
||||
| `compact/` | 对话上下文压缩 |
|
||||
| `policyLimits/` | 组织策略限制 |
|
||||
| `remoteManagedSettings/` | 远程托管设置 |
|
||||
| `extractMemories/` | 自动记忆提取 |
|
||||
| `tokenEstimation.ts` | Token 数量估算 |
|
||||
| `teamMemorySync/` | 团队记忆同步 |
|
||||
|
||||
### 4. 桥接系统 (`src/bridge/`)
|
||||
|
||||
双向通信层,连接 IDE 扩展(VS Code、JetBrains)与 Claude Code CLI。
|
||||
|
||||
- `bridgeMain.ts` — 桥接主循环
|
||||
- `bridgeMessaging.ts` — 消息协议
|
||||
- `bridgePermissionCallbacks.ts` — 权限回调
|
||||
- `replBridge.ts` — REPL 会话桥接
|
||||
- `jwtUtils.ts` — 基于 JWT 的认证
|
||||
- `sessionRunner.ts` — 会话执行管理
|
||||
|
||||
### 5. 权限系统 (`src/hooks/toolPermission/`)
|
||||
|
||||
在每个工具调用时检查权限。根据配置的权限模式(`default`、`plan`、`bypassPermissions`、`auto` 等)提示用户批准/拒绝或自动解析。
|
||||
|
||||
### 6. 功能标志
|
||||
|
||||
通过 Bun 的 `bun:bundle` 功能标志进行死代码消除:
|
||||
|
||||
```typescript
|
||||
import { feature } from 'bun:bundle'
|
||||
|
||||
// 非活动代码在构建时完全剥离
|
||||
const voiceCommand = feature('VOICE_MODE')
|
||||
? require('./commands/voice/index.js').default
|
||||
: null
|
||||
```
|
||||
|
||||
重要标志:`PROACTIVE`、`KAIROS`、`BRIDGE_MODE`、`DAEMON`、`VOICE_MODE`、`AGENT_TRIGGERS`、`MONITOR_TOOL`
|
||||
|
||||
---
|
||||
|
||||
## 关键文件详解
|
||||
|
||||
### `QueryEngine.ts`(约 46K 行)
|
||||
|
||||
LLM API 调用的核心引擎。处理流式响应、工具调用循环、思考模式、重试逻辑和 token 计数。
|
||||
|
||||
### `Tool.ts`(约 29K 行)
|
||||
|
||||
定义所有工具的基础类型和接口——输入模式、权限模型和进度状态类型。
|
||||
|
||||
### `commands.ts`(约 25K 行)
|
||||
|
||||
管理所有斜杠命令的注册和执行。使用条件导入来按环境加载不同的命令集。
|
||||
|
||||
### `main.tsx`
|
||||
|
||||
基于 Commander.js 的 CLI 解析器和 React/Ink 渲染器初始化。在启动时并行处理 MDM 设置、Keychain 预取和 GrowthBook 初始化,以加快启动速度。
|
||||
|
||||
---
|
||||
|
||||
## 技术栈
|
||||
|
||||
| 类别 | 技术 |
|
||||
|---|---|
|
||||
| 运行时 | [Bun](https://bun.sh) |
|
||||
| 语言 | TypeScript(严格模式) |
|
||||
| 终端 UI | [React](https://react.dev) + [Ink](https://github.com/vadimdemedes/ink) |
|
||||
| CLI 解析 | [Commander.js](https://github.com/tj/commander.js)(extra-typings) |
|
||||
| 模式验证 | [Zod v4](https://zod.dev) |
|
||||
| 代码搜索 | [ripgrep](https://github.com/BurntSushi/ripgrep) |
|
||||
| 协议 | [MCP SDK](https://modelcontextprotocol.io)、LSP |
|
||||
| API | [Anthropic SDK](https://docs.anthropic.com) |
|
||||
| 遥测 | OpenTelemetry + gRPC |
|
||||
| 功能标志 | GrowthBook |
|
||||
| 认证 | OAuth 2.0、JWT、macOS Keychain |
|
||||
|
||||
---
|
||||
|
||||
## 值得关注的设计模式
|
||||
|
||||
### 并行预取
|
||||
|
||||
通过在重型模块评估开始前并行预取 MDM 设置、Keychain 读取和 API 预连接来优化启动时间。
|
||||
|
||||
```typescript
|
||||
// main.tsx — 在其他导入之前作为副作用触发
|
||||
startMdmRawRead()
|
||||
startKeychainPrefetch()
|
||||
```
|
||||
|
||||
### 懒加载
|
||||
|
||||
重型模块(OpenTelemetry、gRPC、分析工具和某些功能门控子系统)通过动态 `import()` 延迟加载,直到实际需要时才加载。
|
||||
|
||||
### 代理蜂群
|
||||
|
||||
子代理通过 `AgentTool` 生成,由 `coordinator/` 处理多代理编排。`TeamCreateTool` 支持团队级并行工作。
|
||||
|
||||
### 技能系统
|
||||
|
||||
`skills/` 中定义的可重用工作流通过 `SkillTool` 执行。用户可以添加自定义技能。
|
||||
|
||||
### 插件架构
|
||||
|
||||
内置和第三方插件通过 `plugins/` 子系统加载。
|
||||
|
||||
---
|
||||
|
||||
## 研究/所有权免责声明
|
||||
|
||||
- 本仓库用作**教育和防守性安全研究存档**。
|
||||
- 旨在研究源码暴露、打包失败和现代代理式 CLI 系统的架构。
|
||||
- 原始 Claude Code 源码仍为 **Anthropic** 的财产。
|
||||
- 本仓库**与 Anthropic 没有关联、未被 Anthropic 认可或由 Anthropic 维护**。
|
||||
Reference in New Issue
Block a user