Skip to content

Commit 751a684

Browse files
feat: 第一个可启动版本
1 parent bd756cc commit 751a684

3 files changed

Lines changed: 69 additions & 216 deletions

File tree

RECORD.md

Lines changed: 55 additions & 214 deletions
Original file line numberDiff line numberDiff line change
@@ -6,34 +6,11 @@
66
77
---
88

9-
## 、项目目标
9+
## 、项目目标
1010

1111
**将 claude-code 项目运行起来,必要时可以删减次级能力。**
1212

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 工具的源码反编译/逆向还原项目。
3714

3815
### 核心保留能力
3916

@@ -44,221 +21,85 @@
4421
- 权限系统(基础)
4522
- Agent/子代理系统
4623

47-
---
48-
49-
## 一、整体进度
50-
51-
| 阶段 | 错误数 | 说明 |
52-
|------|--------|------|
53-
| 初始状态 | ~1800 | 仅缺少 npm 依赖的 TS2307 错误 |
54-
| 补全依赖后 | ~1800 | npm 包已安装,开始处理类型 |
55-
| 第一轮 stub 生成 | ~2163 | 自动 stub 生成但质量问题多(全用 `export type`|
56-
| **第二轮修复后** | **~1341** | 修复了默认导出、补充命名导出、泛型类型 |
57-
58-
### 当前错误分布(第二轮修复后)
24+
### 已删减的次级能力
5925

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 关闭 |
8136

8237
---
8338

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 模式已可运行
10040

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+
```
11951

120-
| 文件 | 说明 |
52+
| 测试 | 结果 |
12153
|------|------|
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 返回响应 |
14757

148-
- 解析 TS2339 中 `typeof import("...")` 的错误,给 81 个模块添加了 147 个缺失导出
149-
- 解析 TS2305 添加了 10 个缺失导出
150-
- 解析 TS2724 添加了 4 个命名不匹配的导出
151-
- 创建了 2 个新 stub 文件修复 TS2307
58+
### TS 类型错误说明
15259

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 运行时**。不再逐个修复。
16461

16562
---
16663

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+
## 三、关键修复记录
17865

179-
### 3.2 继续修类型错误的问题
66+
### 3.1 自动化 stub 生成
18067

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 个缺失导出
18472

185-
---
73+
### 3.2 手动类型修复
18674

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` 非法语法修复
18880

189-
### 方向 A: 直接尝试 `bun build` 构建 ⭐ 推荐
81+
### 3.3 运行时修复
19082

191-
Bun bundler 对类型错误比 tsc 宽容得多。应该直接尝试构建:
83+
**Commander 非法短标志**`-d2e, --debug-to-stderr``--debug-to-stderr`(反编译错误)
19284

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", ... }; // 绕过版本检查
19589
```
19690

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-
21791
---
21892

219-
## 、关键文件清单
93+
## 、关键文件清单
22094

22195
| 文件 | 用途 |
22296
|------|------|
97+
| `src/entrypoints/cli.tsx` | 入口文件(含 MACRO/feature polyfill) |
98+
| `src/main.tsx` | 主 CLI 逻辑(Commander 定义) |
22399
| `src/types/global.d.ts` | 全局变量/宏声明 |
224100
| `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 |
236103
| `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` | 补全缺失导出 |

src/entrypoints/cli.tsx

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,16 @@
1-
import { feature } from "bun:bundle";
1+
// Runtime polyfill for bun:bundle (build-time macros)
2+
const feature = (_name: string) => false;
3+
if (typeof globalThis.MACRO === "undefined") {
4+
(globalThis as any).MACRO = {
5+
VERSION: "2.1.87",
6+
BUILD_TIME: new Date().toISOString(),
7+
FEEDBACK_CHANNEL: "",
8+
ISSUES_EXPLAINER: "",
9+
NATIVE_PACKAGE_URL: "",
10+
PACKAGE_URL: "",
11+
VERSION_CHANGELOG: "",
12+
};
13+
}
214

315
// Bugfix for corepack auto-pinning, which adds yarnpkg to peoples' package.jsons
416
// eslint-disable-next-line custom-rules/no-top-level-side-effects

0 commit comments

Comments
 (0)