项目:
/Users/konghayao/code/ai/claude-code日期: 2026-03-31 包管理器: bun
将 claude-code 项目运行起来,必要时可以删减次级能力。
这是一个 Anthropic 官方的 Claude Code CLI 工具的源码反编译/逆向还原项目。项目的核心目标是:
bun run build 和 bun run dev 的阻塞问题@ant/*)的功能,可以用 stub 替代或直接移除| 模块 | 说明 | 处理方式 |
|---|---|---|
| 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 | 企业级认证 | 简化 |
| 阶段 | 错误数 | 说明 |
|---|---|---|
| 初始状态 | ~1800 | 仅缺少 npm 依赖的 TS2307 错误 |
| 补全依赖后 | ~1800 | npm 包已安装,开始处理类型 |
| 当前状态 | 2123 | 类型 stub 已创建,但存在质量待修问题 |
| 错误码 | 数量 | 含义 |
|---|---|---|
| TS2693 | 727 | export type X 被当作值使用(应为 export const/function) |
| TS2339 | 537 | 属性不存在(类型收窄、unknown 类型) |
| TS2614 | 468 | 模块只有默认导出,但代码用命名导入 |
| TS2322 | 128 | 类型不匹配 |
| TS2345 | 57 | 参数类型不匹配 |
| TS2300 | 34 | 重复标识符(stub 文件中 export 重复) |
| TS2307 | 29 | 仍有缺失模块 |
| TS2305 | 28 | 缺失导出成员 |
| TS2724 | 21 | 导出名称不匹配(如 HookEvent vs HOOK_EVENTS) |
| TS2367 | 17 | 比较类型无交集("external" === "ant" 等) |
| 其他 | ~100 | TS2578/TS2315/TS2365/TS2741 等 |
src/types/global.d.ts)声明了编译时宏和内部标识符:
bun:bundle 提供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, McpbUserConfigurationOptioncolor-diff-napi — ColorDiff, SyntaxTheme, getSyntaxThemeaudio-capture-napi / image-processor-napi / url-handler-napibun:bundle / bun:ffisrc/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 等工具类型 |
scripts/create-type-stubs.mjs)编写了自动分析脚本,通过解析 tsc 错误和源码 import 语句,自动创建缺失模块的 stub 文件:
export type X = any stubexport type 被当作值使用 ⚠️ 关键原因: scripts/create-type-stubs.mjs 统一使用 export type X = any 生成 stub,但代码中很多地方将导入的名称作为值使用(如调用函数、渲染 JSX 组件等)。
示例:
// stub 中: export type performLogout = any
// 实际使用: performLogout() // TS2693: only refers to a type, but is being used as a value
修复方案: 将 export type X = any 改为 declare const X: any 或 export const X: any。需要区分哪些是纯类型、哪些是值/函数/组件。
原因: 部分 stub 文件使用 export default {} as any(早期手动创建),但代码用命名导入 import { Message } from ...。
示例: src/types/message.ts 当前内容为 export default {} as any,但代码 import type { Message } from '../types/message.js'
修复方案: 将默认导出改为命名导出。
原因: stub 文件中有 export type X = any 行,同时源文件中也存在同名定义,造成冲突。部分 stub 文件路径不正确(如 src/components/CustomSelect/select.ts 既有真实代码又有 stub 导出)。
修复方案: 检查这些文件,如果真实文件存在则删除 stub 中的重复导出。
原因: any 类型的 stub 过于宽松时可以正常工作,但部分地方类型收窄后(如联合类型判别、unknown 类型)无法访问属性。
分类:
unknown 类型需要类型断言(源码问题)McpServerConfigForProcessTransport 等类型定义过窄(stub 精度问题){ ok: true } | { ok: false; error: string } 联合类型访问 .error(源码惯用模式)修复方案: 调整相关 stub 类型定义使其更精确。
主要是路径解析问题产生的重复 stub(如 src/cli/src/ 下的文件已被删除)以及一些深度嵌套的相对路径。
部分 stub 文件被错误创建在 src/cli/src/ 等嵌套路径下(因为 import { X } from 'src/something' 从 src/cli/handlers/auth.ts 解析时路径计算错误)。已手动删除部分重复文件,但可能仍有残留。
改进 scripts/create-type-stubs.mjs:
分析 import 语句上下文:
import type { X } → 纯类型,用 export type X = anyimport { X } (无 type) → 可能是值,用 export const X: any = (() => {}) as anyexport const X: React.FC<any> = () => null分析使用上下文:
X() 调用 → 函数/值导出<X /> → React 组件X.property → 对象/命名空间将所有 export default {} as any 的 stub 文件替换为带命名导出的版本:
// 之前
export default {} as any
// 之后 — 根据导入需求
export type Message = any
export type NormalizedUserMessage = any
// ... 等
TS2300 错误的文件,删除与真实代码冲突的 stubsrc/cli/src/、src/components/*/src/ 等错误路径下的 stub 残留tsconfig.json 的 paths 配置,确保 src/* 映射正确对高频使用的类型提供更精确的定义:
type 字段为字面量联合类型,而非 stringhook_event_name 字面量类型allow | deny这些是源码本身的问题,不属于 stub 范畴:
TS2367: "external" === "ant" — 构建时消除的死代码TS2339: 联合类型属性访问 — 需要类型收窄或断言TS2322: 类型字面量不匹配(如 "result" vs "result_success")| 文件 | 用途 |
|---|---|
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/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 生成脚本 |
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