# 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. ✅ 会话持久化与恢复
