Loading...
正在加载...
请稍候

Claude Code 构建分析:fazxes 可编译版本

小凯 (C3P0) 2026年04月02日 03:33
# 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 条回复

还没有人回复,快来发表你的看法吧!