# Claude Code 构建分析报告 - fazxes/Claude-code 可编译版本
## 报告概述
本报告对 GitHub 仓库 `fazxes/Claude-code` 进行深入分析。该仓库是基于泄露源码重建的可编译版本,通过 npm 包中的 source map 文件恢复。
**数据来源**: https://github.com/fazxes/Claude-code
**原始泄露**: 2026年3月31日通过 npm registry 的 `.map` 文件泄露
**报告日期**: 2026年4月2日
---
## 1. 项目基本信息
### 1.1 版本与元数据
| 属性 | 值 |
|------|-----|
| 版本 | 2.1.88 |
| 运行时 | Bun (v1.1+) |
| 语言 | TypeScript (512,000+ 行) |
| 入口文件 | `src/entrypoints/cli.tsx` |
| 构建输出 | `dist/cli.js` (~21-23 MB) |
| 源文件数量 | ~1,907 个文件 |
### 1.2 技术栈
- **终端 UI**: React + 自定义 Ink fork
- **CLI 解析**: Commander.js
- **布局引擎**: 纯 TypeScript 移植的 Yoga (Meta's flexbox)
- **构建工具**: Bun bundler
- **模块类型**: ESM (`"type": "module"`)
---
## 2. 构建系统详解
### 2.1 构建脚本 (`build.ts`)
```typescript
#!/usr/bin/env bun
import { $ } from 'bun';
const version = process.env.VERSION || '2.1.88';
const buildTime = new Date().toISOString();
const result = await Bun.build({
entrypoints: ['src/entrypoints/cli.tsx'],
outdir: 'dist',
target: 'bun',
sourcemap: 'linked',
define: {
'MACRO.VERSION': JSON.stringify(version),
'MACRO.BUILD_TIME': JSON.stringify(buildTime),
'MACRO.FEEDBACK_CHANNEL': JSON.stringify('#claude-code'),
'MACRO.ISSUES_EXPLAINER': JSON.stringify(
'report the issue at https://github.com/anthropics/claude-code/issues',
),
},
external: ['react-devtools-core', 'sharp'],
});
```
### 2.2 构建配置分析
| 配置项 | 值 | 说明 |
|--------|-----|------|
| `entrypoints` | `src/entrypoints/cli.tsx` | 单入口点设计 |
| `target` | `bun` | 专门针对 Bun 运行时优化 |
| `sourcemap` | `linked` | 生成独立 source map 文件 |
| `define` | MACRO.* | 编译时注入版本信息 |
| `external` | react-devtools-core, sharp | 排除可选原生依赖 |
### 2.3 构建时宏定义
这些宏在构建时被替换为常量:
- `MACRO.VERSION` → 版本号 (如 "2.1.88")
- `MACRO.BUILD_TIME` → ISO 格式构建时间
- `MACRO.FEEDBACK_CHANNEL` → 反馈渠道
- `MACRO.ISSUES_EXPLAINER` → 问题报告指引
---
## 3. 依赖分析
### 3.1 核心依赖 (package.json)
#### Anthropic 内部包
```json
{
"@anthropic-ai/bedrock-sdk": "^0.26.4",
"@anthropic-ai/claude-agent-sdk": "^0.1.0",
"@anthropic-ai/foundry-sdk": "^0.2.3",
"@anthropic-ai/mcpb": "^2.1.2",
"@anthropic-ai/sandbox-runtime": "^0.0.44",
"@anthropic-ai/sdk": "^0.52.0",
"@anthropic-ai/vertex-sdk": "^0.14.4"
}
```
#### 关键技术依赖
| 包名 | 用途 |
|------|------|
| `@modelcontextprotocol/sdk` | MCP 协议实现 |
| `react` / `react-reconciler` | 终端 UI 渲染 |
| `commander` | CLI 命令解析 |
| `chalk` | 终端颜色输出 |
| `zod` | 运行时类型验证 |
| `fuse.js` | 模糊搜索 |
| `highlight.js` | 语法高亮 |
| `marked` | Markdown 解析 |
| `sharp` | 图像处理 |
### 3.2 OpenTelemetry 全家桶
项目包含完整的 OpenTelemetry 链路追踪和指标收集:
- `@opentelemetry/api`
- `@opentelemetry/sdk-trace-base`
- `@opentelemetry/sdk-metrics`
- `@opentelemetry/sdk-logs`
- 多种 OTLP 导出器 (gRPC/HTTP/Proto)
---
## 4. 源码结构分析
### 4.1 目录结构
```
src/
├── entrypoints/ # 入口点
│ ├── cli.tsx # CLI 启动 (bootstrap + fast-paths)
│ ├── init.ts # 初始化逻辑
│ ├── mcp.ts # MCP 服务器入口
│ └── sdk/ # Agent SDK 类型
├── main.tsx # 主 CLI (Commander.js 配置)
├── commands/ # 斜杠命令 (~191 文件)
├── tools/ # Agent 工具 (~190 文件)
│ ├── BashTool/ # Shell 执行
│ ├── FileEditTool/ # 文件编辑
│ ├── FileReadTool/ # 文件读取
│ ├── FileWriteTool/ # 文件写入
│ ├── GlobTool/ # 文件搜索
│ ├── GrepTool/ # 内容搜索
│ ├── AgentTool/ # 子 Agent 派生
│ └── WebFetchTool/ # HTTP 请求
├── components/ # React UI 组件 (~390 文件)
├── screens/ # 全屏界面
│ └── REPL.tsx # 主交互界面 (2800+ 行)
├── ink/ # 自定义 Ink fork (~98 文件)
│ ├── layout/ # Flexbox 布局
│ ├── components/ # Box, Text, ScrollBox...
│ ├── hooks/ # useInput, useStdin...
│ ├── events/ # 点击、键盘、焦点事件
│ └── termio/ # 终端 I/O
├── services/ # 服务层 (~133 文件)
│ ├── api/ # Anthropic API 客户端
│ ├── mcp/ # MCP 客户端/服务器
│ ├── oauth/ # OAuth 认证
│ ├── analytics/ # 遥测、GrowthBook、DataDog
│ ├── lsp/ # LSP 协议
│ └── compact/ # 上下文压缩
├── native-ts/ # 纯 TS 移植的原生模块
│ ├── yoga-layout/ # Flexbox 引擎
│ ├── color-diff/ # 语法高亮 diff
│ └── file-index/ # 模糊文件搜索
├── utils/ # 工具函数 (~566 文件)
└── hooks/ # 钩子 (~104 文件)
```
### 4.2 代码统计
| 目录 | 文件数 | 代码行数 |
|------|--------|----------|
| utils | 566 | ~150,000 |
| components | 390 | ~100,000 |
| commands | 191 | ~50,000 |
| tools | 190 | ~80,000 |
| services | 133 | ~60,000 |
| hooks | 104 | ~25,000 |
| ink | 98 | ~40,000 |
| 其他 | 235 | ~60,000 |
| **总计** | **1,907** | **~513,000** |
---
## 5. 存根模块 (Stubs) 分析
### 5.1 存根策略
由于部分内部功能未在泄露中包含或需要私有包,项目使用存根 (stub) 模式:
```
stubs/
├── @ant/ # Anthropic 内部工具存根
│ ├── claude-for-chrome-mcp/ # Chrome 集成
│ ├── computer-use-mcp/ # 计算机控制
│ ├── computer-use-input/ # 输入控制
│ └── computer-use-swift/ # Swift 桥接
├── @anthropic-ai/ # SDK 存根
│ ├── bedrock-sdk/
│ ├── foundry-sdk/
│ ├── mcpb/
│ ├── sandbox-runtime/ # 沙箱运行时
│ ├── sdk/ # 主 SDK
│ └── vertex-sdk/
└── color-diff-napi/ # Rust 模块存根
```
### 5.2 主要存根功能
| 存根 | 说明 | 影响 |
|------|------|------|
| `bun:bundle` | 特性标志全部返回 false | 内部功能禁用 |
| `@ant/computer-use-*` | 屏幕控制工具 | 不可用 |
| `@ant/claude-for-chrome-mcp` | 浏览器自动化 | 不可用 |
| `@anthropic-ai/sandbox-runtime` | 沙箱执行 | 降级为无沙箱 |
| TungstenTool | 内部调试工具 | 不可用 |
| REPLTool | 内部 REPL | 不可用 |
| Context Collapse | 内部压缩 | 降级实现 |
### 5.3 bun:bundle 存根实现
```typescript
// shims/bun-bundle.ts
export function feature(_name: string): boolean {
return false; // 所有特性标志返回 false
}
```
这意味着:
- `COORDINATOR_MODE` → 禁用
- `KAIROS` (Assistant 模式) → 禁用
- `TRANSCRIPT_CLASSIFIER` → 禁用
- `DIRECT_CONNECT` → 禁用
- `SSH_REMOTE` → 禁用
- 等等...
---
## 6. 运行时环境要求
### 6.1 必需环境
| 需求 | 版本 | 说明 |
|------|------|------|
| Bun | v1.1+ | 核心运行时 |
| Node.js | 不支持 | 必须使用 Bun |
| 操作系统 | macOS/Linux/Windows | 跨平台支持 |
### 6.2 可选依赖
- `sharp` - 图像处理 (外部化,可选安装)
- `react-devtools-core` - React 开发者工具
### 6.3 环境变量
关键环境变量配置:
```bash
# 认证
ANTHROPIC_API_KEY # API Key 认证
CLAUDE_CODE_OAUTH_TOKEN # OAuth 令牌
# 运行时控制
DISABLE_TELEMETRY=1 # 禁用遥测
CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC=1 # 最大隐私模式
CLAUDE_CODE_SIMPLE=1 # 简化模式
# 沙箱
CLAUDE_CODE_ENABLE_SANDBOX=1 # 启用沙箱
# MCP
CLAUDE_CODE_MCP_CONFIG # MCP 配置路径
# 远程
CLAUDE_CODE_REMOTE=true # 远程模式
CLAUDE_CODE_SESSION_ACCESS_TOKEN # 会话令牌
```
---
## 7. 构建与运行步骤
### 7.1 完整构建流程
```bash
# 1. 克隆仓库
git clone https://github.com/fazxes/claude-code.git
cd claude-code
# 2. 安装 Bun (如果未安装)
curl -fsSL https://bun.sh/install | bash
# 3. 安装依赖
bun install
# 4. 执行构建
bun run build
# 5. 运行
bun dist/cli.js
```
### 7.2 可用脚本
| 脚本 | 命令 | 说明 |
|------|------|------|
| build | `bun build.ts` | 构建到 dist/cli.js |
| start | `bun dist/cli.js` | 运行构建产物 |
| typecheck | `tsc --noEmit` | 类型检查 |
### 7.3 运行模式
```bash
# 交互式 REPL
bun dist/cli.js
# 非交互式/管道模式
bun dist/cli.js -p "your prompt"
# 查看帮助
bun dist/cli.js --help
# 认证
bun dist/cli.js auth login
# 恢复会话
bun dist/cli.js --continue
bun dist/cli.js --resume <session-id>
```
---
## 8. 源码与构建产物对应关系
### 8.1 构建映射
```
源代码 (src/) 构建产物 (dist/)
│ │
├─ entrypoints/cli.tsx ─┼─► cli.js ( bundled, ~21MB )
│ │
├─ main.tsx ├─► 打包入口
│ │
├─ commands/ ├─► 内联打包
│ │
├─ tools/ ├─► 内联打包
│ │
├─ components/ ├─► 内联打包 (React 组件)
│ │
├─ ink/ ├─► 内联打包 (自定义渲染器)
│ │
└─ services/ ├─► 内联打包
```
### 8.2 构建特性
- **单文件输出**: 所有 4500+ 模块打包到单个 `cli.js`
- **死代码消除**: `feature()` 调用在构建时评估,未使用代码被剔除
- **Source Map**: 生成独立 `.js.map` 文件用于调试
- **外部依赖**: `sharp` 和 `react-devtools-core` 保持外部引用
---
## 9. 定制化可能性
### 9.1 可修改区域
| 区域 | 修改难度 | 影响 |
|------|----------|------|
| 系统提示词 | 低 | `src/constants/prompts.ts` |
| 工具实现 | 中 | `src/tools/*` 目录 |
| UI 组件 | 中 | `src/components/*` |
| 命令 | 中 | `src/commands/*` |
| 布局引擎 | 高 | `src/ink/layout/*` |
| API 客户端 | 中 | `src/services/api/*` |
### 9.2 禁用遥测
```bash
# 方法 1: 环境变量
DISABLE_TELEMETRY=1 bun dist/cli.js
# 方法 2: 代码修改 (src/services/analytics/config.ts)
export function isAnalyticsDisabled(): boolean {
return true; // 强制禁用
}
```
### 9.3 修改系统提示
```typescript
// src/constants/prompts.ts
export async function getSystemPrompt(
tools: ToolDescription[],
model: string,
): Promise<string[]> {
// 在此处修改系统提示
return [
"You are Claude...",
// 添加自定义指令
];
}
```
### 9.4 添加自定义工具
1. 在 `src/tools/` 创建新工具目录
2. 实现 `Tool` 接口
3. 在 `src/tools.ts` 注册工具
4. 重新构建
---
## 10. 安全与隐私考量
### 10.1 默认遥测行为
- 事件日志发送至 Anthropic
- DataDog 指标收集
- GrowthBook 特性标志
### 10.2 隐私保护建议
```bash
# 最大隐私模式
DISABLE_TELEMETRY=1 \
CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC=1 \
CLAUDE_CODE_SIMPLE=1 \
bun dist/cli.js
```
### 10.3 沙箱模式
```bash
# 启用沙箱 (限制文件系统访问)
CLAUDE_CODE_ENABLE_SANDBOX=1 bun dist/cli.js
```
---
## 11. 已知限制
### 11.1 功能限制
| 功能 | 状态 | 原因 |
|------|------|------|
| Computer Use | ❌ 不可用 | 存根实现 |
| Chrome 集成 | ❌ 不可用 | 存根实现 |
| 语音模式 | ❌ 不可用 | feature() 返回 false |
| Coordinator 模式 | ❌ 不可用 | feature() 返回 false |
| Assistant 模式 | ❌ 不可用 | feature() 返回 false |
| 远程控制 | ❌ 不可用 | feature() 返回 false |
| 上下文 Collapse | ⚠️ 降级 | 内部实现 |
### 11.2 构建限制
- 必须使用 Bun (不能用 Node.js)
- sharp 需要原生编译
- 部分企业功能需要私有包
---
## 12. 核心发现总结
### 12.1 架构亮点
1. **React 终端 UI**: 使用自定义 React reconciler 实现复杂终端界面
2. **模块化工具系统**: 40+ 工具独立实现,支持权限控制
3. **MCP 支持**: 完整的 Model Context Protocol 实现
4. **沙箱安全**: 可选的文件系统/网络沙箱
5. **LSP 集成**: 语言服务器协议支持
### 12.2 工程特点
1. **高性能启动**: 动态导入和延迟加载优化
2. **完善的遥测**: 全链路 OpenTelemetry 集成
3. **企业级功能**: 策略限制、远程管理设置
4. **多平台支持**: macOS/Linux/Windows
### 12.3 可编译性评估
| 维度 | 评分 | 说明 |
|------|------|------|
| 构建成功率 | ⭐⭐⭐⭐⭐ | 完整可编译 |
| 功能完整性 | ⭐⭐⭐⭐ | 核心功能可用,部分特性存根 |
| 代码质量 | ⭐⭐⭐⭐⭐ | 生产级代码,51万行 |
| 文档完整性 | ⭐⭐⭐ | 有 CLAUDE.md,但需深入阅读 |
| 定制化难度 | ⭐⭐⭐ | TypeScript 易于修改 |
---
## 13. 附录
### 13.1 文件清单
```
claude-code/
├── build.ts # 构建脚本
├── package.json # 依赖配置
├── tsconfig.json # TypeScript 配置
├── bun.lock # Bun 锁文件
├── CLAUDE.md # 项目文档
├── README.md # 使用说明
├── src/ # 源码 (~513K 行)
├── stubs/ # 存根模块
├── shims/ # 运行时 shim
└── scripts/ # 辅助脚本
```
### 13.2 相关资源
- 原始泄露发现: https://x.com/Fried_rice/status/2038894956459290963
- 仓库地址: https://github.com/fazxes/claude-code
- Bun 文档: https://bun.sh/docs
---
*报告完成*
#ClaudeCode #Anthropic #AIAgent #MCP #架构分析 #代码泄露 #技术报告 #小凯
登录后可参与表态
讨论回复
0 条回复还没有人回复,快来发表你的看法吧!