Skip to content

运行与构建

Bun 运行时

Claude Code 选择 Bun 而非 Node.js 作为运行时,原因包括:

  • 更快的启动速度 — Bun 的冷启动比 Node.js 快数倍
  • 内置 TypeScript/TSX 支持 — 无需 ts-node 或编译步骤
  • 内置打包器bun build 直接产出单文件 bundle
  • 兼容 Node.js API — 大部分 npm 包可直接使用

开发模式

bash
# 直接执行 TSX 入口
bun run dev
# 等价于:
bun run src/entrypoints/cli.tsx

开发模式下,Bun 直接解释执行 TypeScript,无需编译步骤。

管道模式

bash
echo "say hello" | bun run src/entrypoints/cli.tsx -p

构建配置

单文件打包

bash
bun run build
# 等价于:
bun build src/entrypoints/cli.tsx --outdir dist --target bun

产出 dist/cli.js(约 25MB),包含所有依赖。

Source: package.json:13

TSConfig 配置

关键配置项:

json
{
  "compilerOptions": {
    "target": "ESNext",
    "module": "ESNext",
    "moduleResolution": "bundler",
    "jsx": "react-jsx",
    "paths": {
      "src/*": ["./src/*"]
    }
  }
}
  • jsx: "react-jsx" — 使用自动 JSX 运行时(React 17+ 风格)
  • paths: { "src/*" } — 路径别名,允许 import { ... } from 'src/utils/...'
  • moduleResolution: "bundler" — 兼容 Bun 打包器的模块解析

Monorepo 结构

项目使用 Bun workspaces 管理内部包:

json
// package.json
{
  "workspaces": [
    "packages/*",
    "packages/@ant/*"
  ]
}

内部包通过 workspace:* 引用:

json
{
  "dependencies": {
    "@ant/computer-use-input": "workspace:*",
    "@ant/computer-use-mcp": "workspace:*",
    "color-diff-napi": "workspace:*"
  }
}

全局变量与宏

MACRO 对象

cli.tsx 在启动时注入全局 MACRO 对象,模拟构建时宏注入:

typescript
// Source: src/entrypoints/cli.tsx:3-13
globalThis.MACRO = {
  VERSION: "2.1.888",
  BUILD_TIME: new Date().toISOString(),
  FEEDBACK_CHANNEL: "",
  ISSUES_EXPLAINER: "",
  NATIVE_PACKAGE_URL: "",
  PACKAGE_URL: "",
  VERSION_CHANGELOG: "",
};
字段用途
VERSIONCLI 版本号,用于 --version 输出
BUILD_TIME构建时间戳
FEEDBACK_CHANNEL反馈渠道(反编译版为空)
PACKAGE_URL包下载地址(反编译版为空)

构建目标变量

typescript
// Source: src/entrypoints/cli.tsx:15-17
globalThis.BUILD_TARGET = "external";    // "external" vs "ant" (内部版)
globalThis.BUILD_ENV = "production";
globalThis.INTERFACE_TYPE = "stdio";
  • BUILD_TARGET — 区分外部发布版和 Anthropic 内部版
  • BUILD_ENV — 当前构建环境
  • INTERFACE_TYPE — 接口类型(终端 I/O)

feature() 函数

typescript
// Source: src/entrypoints/cli.tsx:2
const feature = (_name: string) => false;

在正式构建中,feature() 来自 bun:bundle(构建时 API),用于条件编译。在反编译版本中,它被 polyfill 为始终返回 false,意味着所有特性标志对应的代码都是死代码

已知的特性标志(均被禁用):

标志名功能
BRIDGE_MODE远程桥接模式
DAEMON后台守护进程
BG_SESSIONS后台会话管理
TEMPLATES模板任务
KAIROS助手模式
SSH_REMOTESSH 远程执行
LODESTONE深度链接 URI
ABLATION_BASELINEA/B 测试基线
COORDINATOR_MODE协调器模式
PROACTIVE主动建议

类型系统

全局类型声明

Source: src/types/global.d.ts

typescript
declare var MACRO: {
  VERSION: string;
  BUILD_TIME: string;
  FEEDBACK_CHANNEL: string;
  // ...
};
declare var BUILD_TARGET: "external" | "ant";
declare var BUILD_ENV: "production" | "development";
declare var INTERFACE_TYPE: string;

内部模块声明

Source: src/types/internal-modules.d.ts

为 Bun 特有的模块提供类型:

typescript
declare module 'bun:bundle' {
  export function feature(name: string): boolean;
}

tsc 错误说明

代码库有 ~1341 个 TypeScript 编译错误,这是反编译的正常产物:

  • 大量 unknown / never / {} 类型
  • 缺失的类型推断
  • React Compiler 输出的非标准模式

这些错误不影响 Bun 运行时执行。 Bun 会跳过类型检查直接执行。

下一步

  • 入口与引导 — 深入了解从 cli.tsx 到 REPL 就绪的完整启动流程