Files
2026-04-03 13:01:19 +08:00

280 lines
9.7 KiB
Markdown
Raw Permalink 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 源码快照(安全研究用)
> 本仓库镜像了一份**公开暴露的 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_rice2026 年 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/ # 全屏 UIDoctor、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 维护**。