|
6 | 6 |
|
7 | 7 | --- |
8 | 8 |
|
9 | | -## 零、项目目标 |
| 9 | +## 一、项目目标 |
10 | 10 |
|
11 | 11 | **将 claude-code 项目运行起来,必要时可以删减次级能力。** |
12 | 12 |
|
13 | | -这是一个 Anthropic 官方的 Claude Code CLI 工具的源码反编译/逆向还原项目。项目的核心目标是: |
14 | | - |
15 | | -1. **使项目能够成功构建和运行** — 优先解决 `bun run build` 和 `bun run dev` 的阻塞问题 |
16 | | -2. **删减次级能力以降低复杂度** — 对于依赖私有 npm 包(如 `@ant/*`)的功能,可以用 stub 替代或直接移除 |
17 | | -3. **保留核心 CLI 交互能力** — 保留与 Anthropic API 通信、工具调用、REPL 交互等核心功能 |
18 | | - |
19 | | -### 可删减的次级能力 |
20 | | - |
21 | | -| 模块 | 说明 | 处理方式 | |
22 | | -|------|------|----------| |
23 | | -| Computer Use | `@ant/computer-use-*` 私有包 | stub 或移除 | |
24 | | -| Claude for Chrome | `@ant/claude-for-chrome-mcp` | stub 或移除 | |
25 | | -| Magic Docs | 私有文档处理 | 移除 | |
26 | | -| Voice Mode | 语音模式 | 移除 | |
27 | | -| LSP Server | `vscode-languageserver-*` | 移除 | |
28 | | -| Analytics/Telemetry | 数据上报 | 空实现 | |
29 | | -| GrowthBook | A/B 实验 | 空实现 | |
30 | | -| Plugins/Marketplace | 插件市场 | 移除 | |
31 | | -| Desktop Upsell | 桌面端推销 | 移除 | |
32 | | -| Ultraplan | 私有功能 | 移除 | |
33 | | -| Tungsten | 私有功能 | 移除 | |
34 | | -| Sentry | 错误上报 | 移除 | |
35 | | -| Auto Dream | 自动后台任务 | 移除 | |
36 | | -| MCP OAuth/IDP | 企业级认证 | 简化 | |
| 13 | +这是 Anthropic 官方 Claude Code CLI 工具的源码反编译/逆向还原项目。 |
37 | 14 |
|
38 | 15 | ### 核心保留能力 |
39 | 16 |
|
|
44 | 21 | - 权限系统(基础) |
45 | 22 | - Agent/子代理系统 |
46 | 23 |
|
47 | | ---- |
48 | | - |
49 | | -## 一、整体进度 |
50 | | - |
51 | | -| 阶段 | 错误数 | 说明 | |
52 | | -|------|--------|------| |
53 | | -| 初始状态 | ~1800 | 仅缺少 npm 依赖的 TS2307 错误 | |
54 | | -| 补全依赖后 | ~1800 | npm 包已安装,开始处理类型 | |
55 | | -| 第一轮 stub 生成 | ~2163 | 自动 stub 生成但质量问题多(全用 `export type`) | |
56 | | -| **第二轮修复后** | **~1341** | 修复了默认导出、补充命名导出、泛型类型 | |
57 | | - |
58 | | -### 当前错误分布(第二轮修复后) |
| 24 | +### 已删减的次级能力 |
59 | 25 |
|
60 | | -| 错误码 | 数量 | 含义 | 性质 | |
61 | | -|--------|------|------|------| |
62 | | -| TS2339 | 701 | 属性不存在 | **主要是源码级问题**(unknown 344, never 121, {} 52) | |
63 | | -| TS2322 | 210 | 类型不匹配 | 源码级 | |
64 | | -| TS2345 | 134 | 参数类型不匹配 | 源码级 | |
65 | | -| TS2367 | 106 | 比较类型无交集 | 源码级(编译时死代码) | |
66 | | -| TS2307 | 29 | 缺失模块 | 可修但收益小 | |
67 | | -| TS2693 | 13 | type 当值用 | 少量残留 | |
68 | | -| TS2300 | 10 | 重复标识符 | 小问题 | |
69 | | -| 其他 | ~138 | TS2365/TS2554/TS2578/TS2538/TS2698 等 | 混合 | |
70 | | - |
71 | | -### 关键发现 |
72 | | - |
73 | | -剩余 1341 个错误中,**绝大多数(~1200+)是源码级别的类型问题**,不是 stub 缺失导致的: |
74 | | - |
75 | | -- `unknown` 类型访问属性 (344) — 反编译产生的 `unknown` 需要断言 |
76 | | -- `never` 类型 (121) — 联合类型穷尽后的死路径 |
77 | | -- `{}` 空对象 (52) — 空 stub 模块的残留影响 |
78 | | -- ComputerUseAPI/ComputerUseInputAPI (42) — 私有包声明不够详细 |
79 | | - |
80 | | -**继续逐个修复类型错误的投入产出比很低。应该改变方向,尝试直接构建运行。** |
| 26 | +| 模块 | 处理方式 | |
| 27 | +|------|----------| |
| 28 | +| Computer Use (`@ant/computer-use-*`) | stub | |
| 29 | +| Claude for Chrome (`@ant/claude-for-chrome-mcp`) | stub | |
| 30 | +| Magic Docs / Voice Mode / LSP Server | 移除 | |
| 31 | +| Analytics / GrowthBook / Sentry | 空实现 | |
| 32 | +| Plugins/Marketplace / Desktop Upsell | 移除 | |
| 33 | +| Ultraplan / Tungsten / Auto Dream | 移除 | |
| 34 | +| MCP OAuth/IDP | 简化 | |
| 35 | +| DAEMON / BRIDGE / BG_SESSIONS / TEMPLATES 等 | feature flag 关闭 | |
81 | 36 |
|
82 | 37 | --- |
83 | 38 |
|
84 | | -## 二、已完成的工作 |
85 | | - |
86 | | -### 2.1 全局变量声明 (`src/types/global.d.ts`) |
87 | | - |
88 | | -声明了编译时宏和内部标识符: |
89 | | - |
90 | | -- **MACRO / MACRO.VERSION** — Bun 编译时宏,通过 `bun:bundle` 提供 |
91 | | -- **MACRO.BUILD_TIME / FEEDBACK_CHANNEL / ISSUES_EXPLAINER** 等编译时常量 |
92 | | -- **resolveAntModel / getAntModels / getAntModelOverrideConfig** — 内部模型解析 |
93 | | -- **fireCompanionObserver** — Companion 观察器 |
94 | | -- **apiMetricsRef / computeTtftText** — 指标计算 |
95 | | -- **Gates / GateOverridesWarning / ExperimentEnrollmentNotice** — 功能门控 |
96 | | -- **HOOK_TIMING_DISPLAY_THRESHOLD_MS** — Hook 时间阈值 |
97 | | -- **UltraplanChoiceDialog / UltraplanLaunchDialog / launchUltraplan** — Ultraplan 功能 |
98 | | -- **TungstenPill** — Tungsten 功能 |
99 | | -- **T** — React compiler 输出泄露的泛型参数 |
| 39 | +## 二、当前状态:Dev 模式已可运行 |
100 | 40 |
|
101 | | -### 2.2 内部包声明 (`src/types/internal-modules.d.ts`) |
102 | | - |
103 | | -为 Anthropic 私有包提供了详细的类型导出: |
104 | | - |
105 | | -- `@ant/claude-for-chrome-mcp` — BROWSER_TOOLS, ClaudeForChromeContext, Logger 等 |
106 | | -- `@ant/computer-use-mcp` — ComputerExecutor, ScreenshotResult, buildComputerUseTools 等 |
107 | | -- `@ant/computer-use-mcp/types` — ComputerUseHostAdapter, CoordinateMode 等 |
108 | | -- `@ant/computer-use-mcp/sentinelApps` — getSentinelCategory |
109 | | -- `@ant/computer-use-input` — ComputerUseInput, ComputerUseInputAPI |
110 | | -- `@ant/computer-use-swift` — ComputerUseAPI |
111 | | -- `@anthropic-ai/mcpb` — McpbManifest, McpbUserConfigurationOption |
112 | | -- `color-diff-napi` — ColorDiff, SyntaxTheme, getSyntaxTheme |
113 | | -- `audio-capture-napi / image-processor-napi / url-handler-napi` |
114 | | -- `bun:bundle / bun:ffi` |
115 | | - |
116 | | -### 2.3 SDK 模块补全 (`src/entrypoints/sdk/`) |
117 | | - |
118 | | -为缺失的 SDK 子模块创建了 stub 文件: |
| 41 | +```bash |
| 42 | +# dev 运行 |
| 43 | +bun run dev |
| 44 | +# 直接运行 |
| 45 | +bun run src/entrypoints/cli.tsx |
| 46 | +# 测试 -p 模式 |
| 47 | +echo "say hello" | bun run src/entrypoints/cli.tsx -p |
| 48 | +# 构建 |
| 49 | +bun run build |
| 50 | +``` |
119 | 51 |
|
120 | | -| 文件 | 说明 | |
| 52 | +| 测试 | 结果 | |
121 | 53 | |------|------| |
122 | | -| `controlTypes.ts` | 控制协议类型(SDKControlRequest/Response) | |
123 | | -| `runtimeTypes.ts` | 运行时类型(SDKSession, Query, Options, SdkMcpToolDefinition 等) | |
124 | | -| `coreTypes.generated.ts` | 从 Zod schema 生成的类型(ModelUsage, HookInput 系列, SDK 消息类型等) | |
125 | | -| `settingsTypes.generated.ts` | Settings 类型 | |
126 | | -| `toolTypes.ts` | 工具类型 | |
127 | | -| `sdkUtilityTypes.ts` | NonNullableUsage 等工具类型 | |
128 | | - |
129 | | -### 2.4 自动化 stub 生成 (`scripts/create-type-stubs.mjs`) |
130 | | - |
131 | | -编写了自动分析脚本,通过解析 `tsc` 错误和源码 `import` 语句,自动创建缺失模块的 stub 文件: |
132 | | - |
133 | | -- 扫描 TS2305/TS2614/TS2724 获取缺失导出 |
134 | | -- 扫描源码 import 语句获取命名导入 |
135 | | -- 自动创建 `export type X = any` stub |
136 | | -- 已生成 **1206 个 stub 文件,覆盖 2067 个命名导出** |
137 | | - |
138 | | -### 2.5 第二轮修复 — 默认导出 & 缺失导出 (本次会话) |
139 | | - |
140 | | -#### `scripts/fix-default-stubs.mjs` — 修复 120 个 `export default {} as any` 的 stub 文件 |
141 | | - |
142 | | -- 扫描源码中所有 import 语句,区分 `import type {}` vs `import {}` |
143 | | -- 将纯类型导出为 `export type X = any`,值导出为 `export const X: any = (() => {}) as any` |
144 | | -- **效果**: TS2614 从 632 → 0 (完全消除) |
145 | | - |
146 | | -#### `scripts/fix-missing-exports.mjs` — 补全空模块的导出成员 |
| 54 | +| `--version` | `2.1.87 (Claude Code)` | |
| 55 | +| `--help` | 完整帮助信息输出 | |
| 56 | +| `-p` 模式 | 成功调用 API 返回响应 | |
147 | 57 |
|
148 | | -- 解析 TS2339 中 `typeof import("...")` 的错误,给 81 个模块添加了 147 个缺失导出 |
149 | | -- 解析 TS2305 添加了 10 个缺失导出 |
150 | | -- 解析 TS2724 添加了 4 个命名不匹配的导出 |
151 | | -- 创建了 2 个新 stub 文件修复 TS2307 |
| 58 | +### TS 类型错误说明 |
152 | 59 |
|
153 | | -#### 泛型类型修复 |
154 | | - |
155 | | -将以下类型从非泛型改为泛型(修复 86 个 TS2315): |
156 | | - |
157 | | -- `DeepImmutable<T>`, `Permutations<T>` (`src/types/utils.ts`) |
158 | | -- `AttachmentMessage<T>`, `ProgressMessage<T>`, `NormalizedAssistantMessage<T>` (`src/types/message.ts` 及其多个副本) |
159 | | -- `WizardContextValue<T>` (`src/components/wizard/types.ts`) |
160 | | - |
161 | | -#### 语法修复 |
162 | | - |
163 | | -修复 4 个 `export const default` 非法语法(buddy/fork/peers/workflows 的 index.ts) |
| 60 | +仍有 ~1341 个 tsc 错误,绝大多数是反编译产生的源码级类型问题(unknown/never/{}),**不影响 Bun 运行时**。不再逐个修复。 |
164 | 61 |
|
165 | 62 | --- |
166 | 63 |
|
167 | | -## 三、当前问题分析 |
168 | | - |
169 | | -### 3.1 剩余错误已触达 "源码级" 地板 |
170 | | - |
171 | | -剩余 ~1341 个错误绝大多数不是 stub 缺失问题,而是源码本身的类型问题: |
172 | | - |
173 | | -- **unknown (344)**: 反编译代码中大量 `unknown` 类型变量直接访问属性 |
174 | | -- **never (121)**: 联合类型穷尽后的 never 路径(通常是 switch/if-else 的 exhaustive check) |
175 | | -- **{} (52)**: 空对象类型 |
176 | | -- **类型比较 (106 TS2367)**: 编译时死代码如 `"external" === "ant"` |
177 | | -- **类型不匹配 (210 TS2322 + 134 TS2345)**: stub 类型不够精确 |
| 64 | +## 三、关键修复记录 |
178 | 65 |
|
179 | | -### 3.2 继续修类型错误的问题 |
| 66 | +### 3.1 自动化 stub 生成 |
180 | 67 |
|
181 | | -1. **投入产出比极低** — 每个 TS2339/TS2322 都需要理解具体上下文 |
182 | | -2. **Bun bundler 不强制要求零 TS 错误** — Bun 可以在有类型错误的情况下成功构建 |
183 | | -3. **大部分是运行时无影响的类型问题** — `unknown as any` 等模式不影响实际执行 |
| 68 | +通过 3 个脚本自动处理了缺失模块问题: |
| 69 | +- `scripts/create-type-stubs.mjs` — 生成 1206 个 stub 文件 |
| 70 | +- `scripts/fix-default-stubs.mjs` — 修复 120 个默认导出 stub |
| 71 | +- `scripts/fix-missing-exports.mjs` — 补全 81 个模块的 161 个缺失导出 |
184 | 72 |
|
185 | | ---- |
| 73 | +### 3.2 手动类型修复 |
186 | 74 |
|
187 | | -## 四、后续方向建议 |
| 75 | +- `src/types/global.d.ts` — MACRO 宏、内部函数声明 |
| 76 | +- `src/types/internal-modules.d.ts` — `@ant/*` 等私有包类型声明 |
| 77 | +- `src/entrypoints/sdk/` — 6 个 SDK 子模块 stub |
| 78 | +- 泛型类型修复(DeepImmutable、AttachmentMessage 等) |
| 79 | +- 4 个 `export const default` 非法语法修复 |
188 | 80 |
|
189 | | -### 方向 A: 直接尝试 `bun build` 构建 ⭐ 推荐 |
| 81 | +### 3.3 运行时修复 |
190 | 82 |
|
191 | | -Bun bundler 对类型错误比 tsc 宽容得多。应该直接尝试构建: |
| 83 | +**Commander 非法短标志**:`-d2e, --debug-to-stderr` → `--debug-to-stderr`(反编译错误) |
192 | 84 |
|
193 | | -```bash |
194 | | -bun build src/entrypoints/cli.tsx --target=node --outdir=dist |
| 85 | +**`bun:bundle` 运行时 Polyfill**(`src/entrypoints/cli.tsx` 顶部): |
| 86 | +```typescript |
| 87 | +const feature = (_name: string) => false; // 所有 feature flag 分支被跳过 |
| 88 | +(globalThis as any).MACRO = { VERSION: "2.1.87", ... }; // 绕过版本检查 |
195 | 89 | ``` |
196 | 90 |
|
197 | | -遇到的构建错误才是真正需要修的问题(缺失模块、语法错误等),而非类型错误。 |
198 | | - |
199 | | -### 方向 B: 在 tsconfig 中进一步放宽 |
200 | | - |
201 | | -```json |
202 | | -{ |
203 | | - "compilerOptions": { |
204 | | - "strict": false, |
205 | | - "noImplicitAny": false, |
206 | | - "strictNullChecks": false |
207 | | - } |
208 | | -} |
209 | | -``` |
210 | | - |
211 | | -已经是 `strict: false`,但可以进一步添加 `"skipLibCheck": true`(已有)。 |
212 | | - |
213 | | -### 方向 C: 批量 `// @ts-nocheck` |
214 | | - |
215 | | -对有大量源码级类型错误的文件加 `// @ts-nocheck`,快速消除错误。 |
216 | | - |
217 | 91 | --- |
218 | 92 |
|
219 | | -## 五、关键文件清单 |
| 93 | +## 四、关键文件清单 |
220 | 94 |
|
221 | 95 | | 文件 | 用途 | |
222 | 96 | |------|------| |
| 97 | +| `src/entrypoints/cli.tsx` | 入口文件(含 MACRO/feature polyfill) | |
| 98 | +| `src/main.tsx` | 主 CLI 逻辑(Commander 定义) | |
223 | 99 | | `src/types/global.d.ts` | 全局变量/宏声明 | |
224 | 100 | | `src/types/internal-modules.d.ts` | 内部 npm 包类型声明 | |
225 | | -| `src/types/react-compiler-runtime.d.ts` | React compiler runtime | |
226 | | -| `src/types/sdk-stubs.d.ts` | SDK 通配符类型(备用) | |
227 | | -| `src/types/message.ts` | Message 系列类型 stub (39 types) | |
228 | | -| `src/types/tools.ts` | 工具进度类型 stub | |
229 | | -| `src/types/utils.ts` | DeepImmutable / Permutations 泛型 | |
230 | | -| `src/entrypoints/sdk/controlTypes.ts` | SDK 控制类型 stub | |
231 | | -| `src/entrypoints/sdk/runtimeTypes.ts` | SDK 运行时类型 stub | |
232 | | -| `src/entrypoints/sdk/coreTypes.generated.ts` | SDK 核心类型 stub | |
233 | | -| `src/entrypoints/sdk/settingsTypes.generated.ts` | SDK 设置类型 stub | |
234 | | -| `src/entrypoints/sdk/toolTypes.ts` | SDK 工具类型 stub | |
235 | | -| `src/entrypoints/sdk/sdkUtilityTypes.ts` | SDK 工具类型 | |
| 101 | +| `src/entrypoints/sdk/*.ts` | SDK 类型 stub | |
| 102 | +| `src/types/message.ts` | Message 系列类型 stub | |
236 | 103 | | `scripts/create-type-stubs.mjs` | 自动 stub 生成脚本 | |
237 | | -| `scripts/fix-default-stubs.mjs` | 修复 `export default` stub 为命名导出 | |
238 | | -| `scripts/fix-missing-exports.mjs` | 补全空模块缺失的导出成员 | |
239 | | -| `tsconfig.json` | TypeScript 配置 | |
240 | | -| `package.json` | 依赖配置 | |
241 | | - |
242 | | ---- |
243 | | - |
244 | | -## 六、运行命令 |
245 | | - |
246 | | -```bash |
247 | | -# 检查当前错误数 |
248 | | -cd /Users/konghayao/code/ai/claude-code && npx tsc --noEmit 2>&1 | grep "error TS" | wc -l |
249 | | - |
250 | | -# 错误分类统计 |
251 | | -npx tsc --noEmit 2>&1 | grep "error TS" | sed 's/.*error //' | sed 's/:.*//' | sort | uniq -c | sort -rn |
252 | | - |
253 | | -# 重新生成 stub(修复脚本后) |
254 | | -node scripts/create-type-stubs.mjs |
255 | | - |
256 | | -# 修复默认导出 stub |
257 | | -node scripts/fix-default-stubs.mjs |
258 | | - |
259 | | -# 补全缺失导出 |
260 | | -node scripts/fix-missing-exports.mjs |
261 | | - |
262 | | -# 尝试构建(下一步) |
263 | | -bun build src/entrypoints/cli.tsx --target=node --outdir=dist |
264 | | -``` |
| 104 | +| `scripts/fix-default-stubs.mjs` | 修复默认导出 stub | |
| 105 | +| `scripts/fix-missing-exports.mjs` | 补全缺失导出 | |
0 commit comments