init: cc泄露源码
This commit is contained in:
@@ -0,0 +1,240 @@
|
||||
# Claude Code Haha — 项目代码分析
|
||||
|
||||
## 概述
|
||||
|
||||
本项目是基于 **2026-03-31 泄露的 Anthropic Claude Code 源码** 修复而成的本地可运行版本,命名为 **Claude Code Haha**。它是一个功能完整的 **AI 编程助手 CLI 工具**,支持接入任意 Anthropic 兼容 API(如 MiniMax、OpenRouter 等)。
|
||||
|
||||
> [!NOTE]
|
||||
> 泄露的原始源码无法直接运行。本仓库修复了启动链路中的多个阻塞问题(Enter 键无响应、TUI 不启动、stub 文件缺失等),使完整的 Ink TUI 交互界面可以在本地工作。
|
||||
|
||||
---
|
||||
|
||||
## 技术栈
|
||||
|
||||
| 类别 | 技术 | 说明 |
|
||||
|------|------|------|
|
||||
| **运行时** | [Bun](https://bun.sh) | 高性能 JS/TS 运行时,用于替代 Node.js |
|
||||
| **语言** | TypeScript (ESNext) | 全量 TS,`moduleResolution: bundler` |
|
||||
| **终端 UI** | React 19 + [Ink 6](https://github.com/vadimdemedes/ink) | 基于 React 渲染终端 TUI 界面 |
|
||||
| **CLI 解析** | Commander.js (`@commander-js/extra-typings`) | 命令行参数解析和子命令 |
|
||||
| **AI API** | `@anthropic-ai/sdk` | Anthropic Messages API 通信 |
|
||||
| **MCP 协议** | `@modelcontextprotocol/sdk` | Model Context Protocol 客户端 |
|
||||
| **LSP** | `vscode-jsonrpc` / `vscode-languageserver-types` | Language Server Protocol 集成 |
|
||||
| **可观测性** | OpenTelemetry (logs/metrics/tracing) | 遥测数据采集 |
|
||||
| **特性开关** | GrowthBook (`@growthbook/growthbook`) | A/B 测试与功能门控 |
|
||||
| **构建特性** | `bun:bundle` (`feature()`) | 编译时死代码消除 |
|
||||
| **数据验证** | Zod v4 | 输入 schema 定义与校验 |
|
||||
| **云认证** | `google-auth-library`, `@aws-sdk/client-bedrock-runtime` | Google/AWS 多云认证 |
|
||||
| **Markdown** | `marked` + `highlight.js` | Markdown 渲染和代码高亮 |
|
||||
| **搜索** | `fuse.js` | 模糊搜索(命令/文件搜索) |
|
||||
| **其他** | `chalk`, `diff`, `chokidar`, `yaml`, `zod`, `ws` | 着色、diff、文件监听、YAML 解析、WebSocket |
|
||||
|
||||
---
|
||||
|
||||
## 架构概览
|
||||
|
||||
### 启动链路
|
||||
|
||||
```
|
||||
bin/claude-haha (Bash)
|
||||
└─ bun --env-file=.env src/entrypoints/cli.tsx
|
||||
├─ Fast paths: --version, --daemon, --bridge, ps/logs/attach/kill
|
||||
└─ Full CLI: src/main.tsx (Commander.js 解析 → React/Ink TUI)
|
||||
└─ src/screens/REPL.tsx (主交互 REPL 循环)
|
||||
```
|
||||
|
||||
- **`preload.ts`** — Bun preload 脚本,注入 `MACRO` 全局变量(版本号等)
|
||||
- **`cli.tsx`** — Bootstrap 入口,通过 fast-path 优化各子命令的加载速度
|
||||
- **`main.tsx`** (~800KB) — 核心主逻辑,Commander.js 定义所有命令行选项
|
||||
- **`REPL.tsx`** (~900KB) — 交互式 REPL 界面,处理用户输入、消息渲染、工具执行
|
||||
|
||||
### 核心模块层次
|
||||
|
||||
```mermaid
|
||||
graph TD
|
||||
A[CLI Entry - cli.tsx] --> B[Main - main.tsx]
|
||||
B --> C[REPL Screen - REPL.tsx]
|
||||
C --> D[Query Engine - query.ts]
|
||||
D --> E[API Service - services/api]
|
||||
D --> F[Tool System - tools/]
|
||||
D --> G[Auto Compact - services/compact]
|
||||
C --> H[UI Components - components/]
|
||||
C --> I[React Hooks - hooks/]
|
||||
F --> J[Permission System - utils/permissions]
|
||||
C --> K[MCP Clients - services/mcp]
|
||||
C --> L[Slash Commands - commands/]
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 核心系统详解
|
||||
|
||||
### 1. Query Engine (`query.ts`, `QueryEngine.ts`)
|
||||
|
||||
**核心循环**:`query()` 是一个 `AsyncGenerator`,驱动整个 AI 对话循环:
|
||||
|
||||
1. **上下文管理** — 自动压缩(auto compact)、微压缩(microcompact)、snip(历史裁剪)
|
||||
2. **API 调用** — 流式调用 Anthropic Messages API
|
||||
3. **工具执行** — 解析模型返回的 `tool_use` 块,执行对应工具
|
||||
4. **循环继续** — 将工具结果拼接回消息列表,继续下一轮推理
|
||||
|
||||
关键特性:
|
||||
- **Task Budget** — 限制单次 agentic turn 的总 token 消耗
|
||||
- **Reactive Compact** — 遇到 prompt-too-long 时自动触发压缩
|
||||
- **Streaming Tool Execution** — 流式接收模型输出的同时并行启动工具执行
|
||||
- **Fallback Model** — 主模型失败时自动降级到备用模型
|
||||
|
||||
### 2. Tool System (`Tool.ts`, `tools.ts`, `tools/`)
|
||||
|
||||
采用 **`buildTool()` 工厂模式**,统一工具定义接口。每个工具包含:
|
||||
- `inputSchema` (Zod) — 输入校验
|
||||
- `checkPermissions()` — 权限检查
|
||||
- `call()` — 执行逻辑
|
||||
- `renderToolUseMessage()` / `renderToolResultMessage()` — UI 渲染
|
||||
- `prompt()` — 给模型的工具说明
|
||||
|
||||
#### 内置工具清单 (40+)
|
||||
|
||||
| 分类 | 工具 | 说明 |
|
||||
|------|------|------|
|
||||
| **文件操作** | `FileReadTool`, `FileWriteTool`, `FileEditTool`, `NotebookEditTool` | 读/写/编辑文件、Jupyter Notebook |
|
||||
| **搜索** | `GrepTool`, `GlobTool`, `WebSearchTool`, `ToolSearchTool` | Ripgrep 搜索、Glob 匹配、网页搜索、工具发现 |
|
||||
| **Shell** | `BashTool`, `PowerShellTool`, `REPLTool` | Bash/PowerShell 命令执行、REPL VM 模式 |
|
||||
| **任务管理** | `TaskCreateTool`, `TaskGetTool`, `TaskUpdateTool`, `TaskListTool`, `TaskStopTool`, `TaskOutputTool` | 多任务并行管理 |
|
||||
| **Agent** | `AgentTool`, `TeamCreateTool`, `TeamDeleteTool`, `SendMessageTool` | 子 Agent 派生、团队协作 |
|
||||
| **计划模式** | `EnterPlanModeTool`, `ExitPlanModeTool`, `EnterWorktreeTool`, `ExitWorktreeTool` | 进入/退出计划模式、Git Worktree 隔离 |
|
||||
| **网络** | `WebFetchTool`, `WebBrowserTool` | HTTP 抓取、浏览器自动化 |
|
||||
| **MCP** | `MCPTool`, `ListMcpResourcesTool`, `ReadMcpResourceTool` | MCP 服务器工具代理 |
|
||||
| **其他** | `TodoWriteTool`, `SkillTool`, `AskUserQuestionTool`, `LSPTool`, `ConfigTool`, `SleepTool`, `BriefTool` | TODO 管理、Skill 调用、用户交互、LSP 诊断 |
|
||||
| **特殊** | `ScheduleCronTool`, `RemoteTriggerTool`, `WorkflowTool`, `MonitorTool` | 定时任务、远程触发、工作流脚本 |
|
||||
|
||||
### 3. 斜杠命令系统 (`commands/`)
|
||||
|
||||
项目包含 **87+ 个斜杠命令目录**,覆盖:
|
||||
|
||||
| 分类 | 命令示例 |
|
||||
|------|----------|
|
||||
| **Git 操作** | `/commit`, `/diff`, `/branch`, `/review`, `/pr_comments` |
|
||||
| **会话管理** | `/session`, `/resume`, `/compact`, `/clear`, `/export`, `/share` |
|
||||
| **配置** | `/config`, `/model`, `/theme`, `/keybindings`, `/permissions`, `/vim` |
|
||||
| **Agent/协作** | `/agents`, `/buddy`, `/tasks`, `/teleport` |
|
||||
| **开发工具** | `/doctor`, `/stats`, `/debug-tool-call`, `/heapdump`, `/ctx_viz` |
|
||||
| **集成** | `/mcp`, `/plugin`, `/skills`, `/chrome`, `/ide`, `/desktop` |
|
||||
| **其他** | `/help`, `/version`, `/upgrade`, `/feedback`, `/voice`, `/login`, `/logout` |
|
||||
|
||||
### 4. 服务层 (`services/`)
|
||||
|
||||
| 服务 | 说明 |
|
||||
|------|------|
|
||||
| `api/` | API 调用封装 (重试、fallback、mock、dump prompts) |
|
||||
| `mcp/` | MCP 客户端管理 (连接、工具注册、资源读取) |
|
||||
| `compact/` | 自动压缩 (auto compact, reactive compact, snip) |
|
||||
| `oauth/` | OAuth 认证流程 |
|
||||
| `lsp/` | LSP 服务器集成 |
|
||||
| `analytics/` | 分析追踪 (GrowthBook, 事件上报) |
|
||||
| `plugins/` | 插件加载与管理 |
|
||||
| `voice.ts` | 语音输入 (STT) |
|
||||
| `tips/` | 使用提示推送 |
|
||||
| `policyLimits/` | 组织策略限制 |
|
||||
|
||||
### 5. UI 组件 (`components/`)
|
||||
|
||||
基于 React + Ink 构建的终端 UI 组件体系,包含 **113 个组件文件** + **31 个子目录**:
|
||||
|
||||
- **核心交互**: `PromptInput/`, `TextInput`, `VimTextInput`, `BaseTextInput`
|
||||
- **消息渲染**: `Message`, `MessageRow`, `Messages`, `VirtualMessageList`(虚拟滚动)
|
||||
- **差异展示**: `StructuredDiff/`, `FileEditToolDiff`, `diff/`
|
||||
- **对话框**: `ModelPicker`, `ThemePicker`, `GlobalSearchDialog`, `HistorySearchDialog`
|
||||
- **状态显示**: `StatusLine`, `Spinner`, `AgentProgressLine`, `CoordinatorAgentStatus`
|
||||
- **Markdown**: `Markdown`, `MarkdownTable`, `HighlightedCode/`
|
||||
- **设计系统**: `design-system/`, `ui/`
|
||||
|
||||
### 6. Skill 系统 (`skills/`)
|
||||
|
||||
Skill 是可扩展的指令文件系统:
|
||||
- `bundledSkills.ts` — 内置 skill 注册
|
||||
- `loadSkillsDir.ts` — 从文件系统加载自定义 skill
|
||||
- `bundled/` — 内置 skill 目录
|
||||
- 支持 YAML frontmatter 格式的 `.md` 文件
|
||||
|
||||
### 7. 多 Agent 架构 (`coordinator/`)
|
||||
|
||||
- **Coordinator Mode** — 协调器模式,中央 Agent 分配任务给 Worker Agent
|
||||
- **Agent Tool** — 派生子 Agent 执行独立任务
|
||||
- **Team System** — 创建/删除团队成员
|
||||
- **Worktree** — Git Worktree 隔离执行
|
||||
|
||||
### 8. 权限与安全 (`utils/permissions/`)
|
||||
|
||||
多层权限控制体系:
|
||||
- **PermissionMode**: `default`, `plan`, `auto`, `bypass`
|
||||
- **规则来源**: project CLAUDE.md、user settings、CLI flags
|
||||
- **规则类型**: `alwaysAllow`, `alwaysDeny`, `alwaysAsk`
|
||||
- **Hooks**: `PreToolUse`, `PostToolUse` 钩子
|
||||
|
||||
---
|
||||
|
||||
## 关键数据流
|
||||
|
||||
```
|
||||
用户输入 → PromptInput → handlePromptSubmit()
|
||||
→ slash command? → 执行 command handler
|
||||
→ 否 → query() async generator
|
||||
→ auto compact / microcompact / snip
|
||||
→ prependUserContext() + appendSystemContext()
|
||||
→ deps.callModel() (流式 API 调用)
|
||||
→ 解析 tool_use 块 → StreamingToolExecutor
|
||||
→ checkPermissions() → call() → ToolResult
|
||||
→ 拼接 tool_result → 继续循环
|
||||
→ stop_reason ≠ tool_use → 结束
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 项目文件统计
|
||||
|
||||
| 目录 | 估计文件数 | 说明 |
|
||||
|------|-----------|------|
|
||||
| `src/tools/` | 44 目录 | 内置工具实现 |
|
||||
| `src/commands/` | 87 目录 + 15 文件 | 斜杠命令 |
|
||||
| `src/components/` | 113 文件 + 31 目录 | UI 组件 |
|
||||
| `src/hooks/` | 83 文件 + 2 目录 | React hooks |
|
||||
| `src/utils/` | 298 文件 + 31 目录 | 工具函数 |
|
||||
| `src/services/` | 16 文件 + 20 目录 | 服务层 |
|
||||
| **总计** | ~700+ 文件 | **大型 TypeScript 项目** |
|
||||
|
||||
> [!IMPORTANT]
|
||||
> 核心文件体量巨大:`main.tsx` (~800KB)、`REPL.tsx` (~900KB)、`messages.ts` (~193KB)、`query.ts` (~69KB)。这是一个工业级的 AI 编程助手完整实现。
|
||||
|
||||
---
|
||||
|
||||
## 本地修复清单
|
||||
|
||||
| 问题 | 修复方式 |
|
||||
|------|----------|
|
||||
| TUI 不启动 | 恢复 `cli.tsx` 完整入口(原代码错误路由到 recovery CLI) |
|
||||
| 启动卡死 | 创建 stub `.md` 文件(`verify` skill 导入缺失) |
|
||||
| `--print` 卡死 | 创建 `filePersistence/types.ts` 和 `ultraplan/prompt.txt` 桩文件 |
|
||||
| Enter 键无响应 | `modifiers-napi` native 包缺失,加 try-catch 容错 |
|
||||
| setup 被跳过 | 移除 `preload.ts` 中默认设置的 `LOCAL_RECOVERY=1` |
|
||||
|
||||
---
|
||||
|
||||
## 总结
|
||||
|
||||
这是一个 **功能极其完整的 AI 编程助手** 实现,涵盖:
|
||||
|
||||
1. ✅ 完整的终端 TUI 交互界面 (React/Ink)
|
||||
2. ✅ 40+ 内建工具 (文件操作、搜索、Shell、Agent、MCP)
|
||||
3. ✅ 87+ 斜杠命令
|
||||
4. ✅ 多 Agent 并行执行 (Coordinator/Worker 架构)
|
||||
5. ✅ MCP 协议支持
|
||||
6. ✅ Skill/Plugin 扩展系统
|
||||
7. ✅ 自动上下文压缩 (auto compact, reactive compact, snip)
|
||||
8. ✅ 流式工具执行
|
||||
9. ✅ 多层权限控制
|
||||
10. ✅ 语音输入支持
|
||||
11. ✅ Git Worktree 隔离执行
|
||||
12. ✅ IDE 集成 (VS Code, JetBrains)
|
||||
13. ✅ OAuth / API Key 认证
|
||||
14. ✅ 会话持久化与恢复
|
||||
Reference in New Issue
Block a user