claude-code/RECORD.md
2026-03-31 20:40:16 +08:00

10 KiB
Raw Blame History

Claude Code 项目运行记录

项目: /Users/konghayao/code/ai/claude-code 日期: 2026-03-31 包管理器: bun


零、项目目标

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

这是一个 Anthropic 官方的 Claude Code CLI 工具的源码反编译/逆向还原项目。项目的核心目标是:

  1. 使项目能够成功构建和运行 — 优先解决 bun run buildbun run dev 的阻塞问题
  2. 删减次级能力以降低复杂度 — 对于依赖私有 npm 包(如 @ant/*)的功能,可以用 stub 替代或直接移除
  3. 保留核心 CLI 交互能力 — 保留与 Anthropic API 通信、工具调用、REPL 交互等核心功能

可删减的次级能力

模块 说明 处理方式
Computer Use @ant/computer-use-* 私有包 stub 或移除
Claude for Chrome @ant/claude-for-chrome-mcp stub 或移除
Magic Docs 私有文档处理 移除
Voice Mode 语音模式 移除
LSP Server vscode-languageserver-* 移除
Analytics/Telemetry 数据上报 空实现
GrowthBook A/B 实验 空实现
Plugins/Marketplace 插件市场 移除
Desktop Upsell 桌面端推销 移除
Ultraplan 私有功能 移除
Tungsten 私有功能 移除
Sentry 错误上报 移除
Auto Dream 自动后台任务 移除
MCP OAuth/IDP 企业级认证 简化

核心保留能力

  • API 通信Anthropic SDK / Bedrock / Vertex
  • Bash/FileRead/FileWrite/FileEdit 等核心工具
  • REPL 交互界面ink 终端渲染)
  • 对话历史与会话管理
  • 权限系统(基础)
  • Agent/子代理系统

一、整体进度

阶段 错误数 说明
初始状态 ~1800 仅缺少 npm 依赖的 TS2307 错误
补全依赖后 ~1800 npm 包已安装,开始处理类型
第一轮 stub 生成 ~2163 自动 stub 生成但质量问题多(全用 export type
第二轮修复后 ~1341 修复了默认导出、补充命名导出、泛型类型

当前错误分布(第二轮修复后)

错误码 数量 含义 性质
TS2339 701 属性不存在 主要是源码级问题unknown 344, never 121, {} 52
TS2322 210 类型不匹配 源码级
TS2345 134 参数类型不匹配 源码级
TS2367 106 比较类型无交集 源码级(编译时死代码)
TS2307 29 缺失模块 可修但收益小
TS2693 13 type 当值用 少量残留
TS2300 10 重复标识符 小问题
其他 ~138 TS2365/TS2554/TS2578/TS2538/TS2698 等 混合

关键发现

剩余 1341 个错误中,绝大多数(~1200+)是源码级别的类型问题,不是 stub 缺失导致的:

  • unknown 类型访问属性 (344) — 反编译产生的 unknown 需要断言
  • never 类型 (121) — 联合类型穷尽后的死路径
  • {} 空对象 (52) — 空 stub 模块的残留影响
  • ComputerUseAPI/ComputerUseInputAPI (42) — 私有包声明不够详细

继续逐个修复类型错误的投入产出比很低。应该改变方向,尝试直接构建运行。


二、已完成的工作

2.1 全局变量声明 (src/types/global.d.ts)

声明了编译时宏和内部标识符:

  • MACRO / MACRO.VERSION — Bun 编译时宏,通过 bun:bundle 提供
  • MACRO.BUILD_TIME / FEEDBACK_CHANNEL / ISSUES_EXPLAINER 等编译时常量
  • resolveAntModel / getAntModels / getAntModelOverrideConfig — 内部模型解析
  • fireCompanionObserver — Companion 观察器
  • apiMetricsRef / computeTtftText — 指标计算
  • Gates / GateOverridesWarning / ExperimentEnrollmentNotice — 功能门控
  • HOOK_TIMING_DISPLAY_THRESHOLD_MS — Hook 时间阈值
  • UltraplanChoiceDialog / UltraplanLaunchDialog / launchUltraplan — Ultraplan 功能
  • TungstenPill — Tungsten 功能
  • T — React compiler 输出泄露的泛型参数

2.2 内部包声明 (src/types/internal-modules.d.ts)

为 Anthropic 私有包提供了详细的类型导出:

  • @ant/claude-for-chrome-mcp — BROWSER_TOOLS, ClaudeForChromeContext, Logger 等
  • @ant/computer-use-mcp — ComputerExecutor, ScreenshotResult, buildComputerUseTools 等
  • @ant/computer-use-mcp/types — ComputerUseHostAdapter, CoordinateMode 等
  • @ant/computer-use-mcp/sentinelApps — getSentinelCategory
  • @ant/computer-use-input — ComputerUseInput, ComputerUseInputAPI
  • @ant/computer-use-swift — ComputerUseAPI
  • @anthropic-ai/mcpb — McpbManifest, McpbUserConfigurationOption
  • color-diff-napi — ColorDiff, SyntaxTheme, getSyntaxTheme
  • audio-capture-napi / image-processor-napi / url-handler-napi
  • bun:bundle / bun:ffi

2.3 SDK 模块补全 (src/entrypoints/sdk/)

为缺失的 SDK 子模块创建了 stub 文件:

文件 说明
controlTypes.ts 控制协议类型SDKControlRequest/Response
runtimeTypes.ts 运行时类型SDKSession, Query, Options, SdkMcpToolDefinition 等)
coreTypes.generated.ts 从 Zod schema 生成的类型ModelUsage, HookInput 系列, SDK 消息类型等)
settingsTypes.generated.ts Settings 类型
toolTypes.ts 工具类型
sdkUtilityTypes.ts NonNullableUsage 等工具类型

2.4 自动化 stub 生成 (scripts/create-type-stubs.mjs)

编写了自动分析脚本,通过解析 tsc 错误和源码 import 语句,自动创建缺失模块的 stub 文件:

  • 扫描 TS2305/TS2614/TS2724 获取缺失导出
  • 扫描源码 import 语句获取命名导入
  • 自动创建 export type X = any stub
  • 已生成 1206 个 stub 文件,覆盖 2067 个命名导出

2.5 第二轮修复 — 默认导出 & 缺失导出 (本次会话)

scripts/fix-default-stubs.mjs — 修复 120 个 export default {} as any 的 stub 文件

  • 扫描源码中所有 import 语句,区分 import type {} vs import {}
  • 将纯类型导出为 export type X = any,值导出为 export const X: any = (() => {}) as any
  • 效果: TS2614 从 632 → 0 (完全消除)

scripts/fix-missing-exports.mjs — 补全空模块的导出成员

  • 解析 TS2339 中 typeof import("...") 的错误,给 81 个模块添加了 147 个缺失导出
  • 解析 TS2305 添加了 10 个缺失导出
  • 解析 TS2724 添加了 4 个命名不匹配的导出
  • 创建了 2 个新 stub 文件修复 TS2307

泛型类型修复

将以下类型从非泛型改为泛型(修复 86 个 TS2315

  • DeepImmutable<T>, Permutations<T> (src/types/utils.ts)
  • AttachmentMessage<T>, ProgressMessage<T>, NormalizedAssistantMessage<T> (src/types/message.ts 及其多个副本)
  • WizardContextValue<T> (src/components/wizard/types.ts)

语法修复

修复 4 个 export const default 非法语法buddy/fork/peers/workflows 的 index.ts


三、当前问题分析

3.1 剩余错误已触达 "源码级" 地板

剩余 ~1341 个错误绝大多数不是 stub 缺失问题,而是源码本身的类型问题:

  • unknown (344): 反编译代码中大量 unknown 类型变量直接访问属性
  • never (121): 联合类型穷尽后的 never 路径(通常是 switch/if-else 的 exhaustive check
  • {} (52): 空对象类型
  • 类型比较 (106 TS2367): 编译时死代码如 "external" === "ant"
  • 类型不匹配 (210 TS2322 + 134 TS2345): stub 类型不够精确

3.2 继续修类型错误的问题

  1. 投入产出比极低 — 每个 TS2339/TS2322 都需要理解具体上下文
  2. Bun bundler 不强制要求零 TS 错误 — Bun 可以在有类型错误的情况下成功构建
  3. 大部分是运行时无影响的类型问题unknown as any 等模式不影响实际执行

四、后续方向建议

方向 A: 直接尝试 bun build 构建 推荐

Bun bundler 对类型错误比 tsc 宽容得多。应该直接尝试构建:

bun build src/entrypoints/cli.tsx --target=node --outdir=dist

遇到的构建错误才是真正需要修的问题(缺失模块、语法错误等),而非类型错误。

方向 B: 在 tsconfig 中进一步放宽

{
  "compilerOptions": {
    "strict": false,
    "noImplicitAny": false,
    "strictNullChecks": false
  }
}

已经是 strict: false,但可以进一步添加 "skipLibCheck": true(已有)。

方向 C: 批量 // @ts-nocheck

对有大量源码级类型错误的文件加 // @ts-nocheck,快速消除错误。


五、关键文件清单

文件 用途
src/types/global.d.ts 全局变量/宏声明
src/types/internal-modules.d.ts 内部 npm 包类型声明
src/types/react-compiler-runtime.d.ts React compiler runtime
src/types/sdk-stubs.d.ts SDK 通配符类型(备用)
src/types/message.ts Message 系列类型 stub (39 types)
src/types/tools.ts 工具进度类型 stub
src/types/utils.ts DeepImmutable / Permutations 泛型
src/entrypoints/sdk/controlTypes.ts SDK 控制类型 stub
src/entrypoints/sdk/runtimeTypes.ts SDK 运行时类型 stub
src/entrypoints/sdk/coreTypes.generated.ts SDK 核心类型 stub
src/entrypoints/sdk/settingsTypes.generated.ts SDK 设置类型 stub
src/entrypoints/sdk/toolTypes.ts SDK 工具类型 stub
src/entrypoints/sdk/sdkUtilityTypes.ts SDK 工具类型
scripts/create-type-stubs.mjs 自动 stub 生成脚本
scripts/fix-default-stubs.mjs 修复 export default stub 为命名导出
scripts/fix-missing-exports.mjs 补全空模块缺失的导出成员
tsconfig.json TypeScript 配置
package.json 依赖配置

六、运行命令

# 检查当前错误数
cd /Users/konghayao/code/ai/claude-code && npx tsc --noEmit 2>&1 | grep "error TS" | wc -l

# 错误分类统计
npx tsc --noEmit 2>&1 | grep "error TS" | sed 's/.*error //' | sed 's/:.*//' | sort | uniq -c | sort -rn

# 重新生成 stub修复脚本后
node scripts/create-type-stubs.mjs

# 修复默认导出 stub
node scripts/fix-default-stubs.mjs

# 补全缺失导出
node scripts/fix-missing-exports.mjs

# 尝试构建(下一步)
bun build src/entrypoints/cli.tsx --target=node --outdir=dist