@@ -15,6 +15,9 @@ bun install
1515# Dev mode (runs cli.tsx with MACRO defines injected via -d flags)
1616bun run dev
1717
18+ # Dev mode with debugger (set BUN_INSPECT=9229 to pick port)
19+ bun run dev:inspect
20+
1821# Pipe mode
1922echo " say hello" | bun run src/entrypoints/cli.tsx -p
2023
@@ -30,6 +33,15 @@ bun test --coverage # with coverage report
3033bun run lint # check only
3134bun run lint:fix # auto-fix
3235bun run format # format all src/
36+
37+ # Health check
38+ bun run health
39+
40+ # Check unused exports
41+ bun run check:unused
42+
43+ # Docs dev server (Mintlify)
44+ bun run docs:dev
3345```
3446
3547详细的测试规范、覆盖状态和改进计划见 ` docs/testing-spec.md ` 。
@@ -39,20 +51,27 @@ bun run format # format all src/
3951### Runtime & Build
4052
4153- ** Runtime** : Bun (not Node.js). All imports, builds, and execution use Bun APIs.
42- - ** Build** : ` build.ts ` 执行 ` Bun.build() ` with ` splitting: true ` ,入口 ` src/entrypoints/cli.tsx ` ,输出 ` dist/cli.js ` + ~ 450 chunk files。构建后自动替换 ` import.meta.require ` 为 Node.js 兼容版本(产物 bun/node 都可运行)。
43- - ** Dev mode** : ` scripts/dev.ts ` 通过 Bun ` -d ` flag 注入 ` MACRO.* ` defines,运行 ` src/entrypoints/cli.tsx ` 。` scripts/defines.ts ` 集中管理 define map 。
54+ - ** Build** : ` build.ts ` 执行 ` Bun.build() ` with ` splitting: true ` ,入口 ` src/entrypoints/cli.tsx ` ,输出 ` dist/cli.js ` + chunk files。默认启用 ` AGENT_TRIGGERS_REMOTE ` feature 。构建后自动替换 ` import.meta.require ` 为 Node.js 兼容版本(产物 bun/node 都可运行)。
55+ - ** Dev mode** : ` scripts/dev.ts ` 通过 Bun ` -d ` flag 注入 ` MACRO.* ` defines,运行 ` src/entrypoints/cli.tsx ` 。默认启用 ` BUDDY ` 、 ` TRANSCRIPT_CLASSIFIER ` 、 ` BRIDGE_MODE ` 、 ` AGENT_TRIGGERS_REMOTE ` 四个 feature 。
4456- ** Module system** : ESM (` "type": "module" ` ), TSX with ` react-jsx ` transform.
4557- ** Monorepo** : Bun workspaces — internal packages live in ` packages/ ` resolved via ` workspace:* ` .
4658- ** Lint/Format** : Biome (` biome.json ` )。` bun run lint ` / ` bun run lint:fix ` / ` bun run format ` 。
59+ - ** Defines** : 集中管理在 ` scripts/defines.ts ` 。当前版本 ` 2.1.888 ` 。
4760
4861### Entry & Bootstrap
4962
50- 1 . ** ` src/entrypoints/cli.tsx ` ** — True entrypoint. Sets up runtime globals:
51- - ` globalThis.MACRO ` — build-time macro values (VERSION, BUILD_TIME, etc.),通过 ` scripts/dev.ts ` 的 ` -d ` flags 注入。
52- - ` BUILD_TARGET ` , ` BUILD_ENV ` , ` INTERFACE_TYPE ` globals。
53- - ` feature() ` 由 ` bun:bundle ` 内置模块提供,不需要在此 polyfill。
54- 2 . ** ` src/main.tsx ` ** — Commander.js CLI definition. Parses args, initializes services (auth, analytics, policy), then launches the REPL or runs in pipe mode.
55- 3 . ** ` src/entrypoints/init.ts ` ** — One-time initialization (telemetry, config, trust dialog).
63+ 1 . ** ` src/entrypoints/cli.tsx ` ** — True entrypoint。` main() ` 函数按优先级处理多条快速路径:
64+ - ` --version ` / ` -v ` — 零模块加载
65+ - ` --dump-system-prompt ` — feature-gated (DUMP_SYSTEM_PROMPT)
66+ - ` --claude-in-chrome-mcp ` / ` --chrome-native-host `
67+ - ` --daemon-worker=<kind> ` — feature-gated (DAEMON)
68+ - ` remote-control ` / ` rc ` / ` bridge ` — feature-gated (BRIDGE_MODE)
69+ - ` daemon ` — feature-gated (DAEMON)
70+ - ` ps ` / ` logs ` / ` attach ` / ` kill ` / ` --bg ` — feature-gated (BG_SESSIONS)
71+ - ` --tmux ` + ` --worktree ` 组合
72+ - 默认路径:加载 ` main.tsx ` 启动完整 CLI
73+ 2 . ** ` src/main.tsx ` ** (~ 4680 行) — Commander.js CLI definition。注册大量 subcommands:` mcp ` (serve/add/remove/list...)、` server ` 、` ssh ` 、` open ` 、` auth ` 、` plugin ` 、` agents ` 、` auto-mode ` 、` doctor ` 、` update ` 等。主 ` .action() ` 处理器负责权限、MCP、会话恢复、REPL/Headless 模式分发。
74+ 3 . ** ` src/entrypoints/init.ts ` ** — One-time initialization (telemetry, config, trust dialog)。
5675
5776### Core Loop
5877
@@ -70,25 +89,37 @@ bun run format # format all src/
7089
7190- ** ` src/Tool.ts ` ** — Tool interface definition (` Tool ` type) and utilities (` findToolByName ` , ` toolMatchesName ` ).
7291- ** ` src/tools.ts ` ** — Tool registry. Assembles the tool list; some tools are conditionally loaded via ` feature() ` flags or ` process.env.USER_TYPE ` .
73- - ** ` src/tools/<ToolName>/ ` ** — Each tool in its own directory (e.g., ` BashTool ` , ` FileEditTool ` , ` GrepTool ` , ` AgentTool ` ).
74- - Tools define: ` name ` , ` description ` , ` inputSchema ` (JSON Schema), ` call() ` (execution), and optionally a React component for rendering results.
92+ - ** ` src/tools/<ToolName>/ ` ** — 61 个 tool 目录(如 BashTool, FileEditTool, GrepTool, AgentTool, WebFetchTool, LSPTool, MCPTool 等)。每个 tool 包含 ` name ` 、 ` description ` 、 ` inputSchema ` 、 ` call() ` 及可选的 React 渲染组件。
93+ - ** ` src/tools/shared/ ` ** — Tool 共享工具函数。
7594
7695### UI Layer (Ink)
7796
7897- ** ` src/ink.ts ` ** — Ink render wrapper with ThemeProvider injection.
7998- ** ` src/ink/ ` ** — Custom Ink framework (forked/internal): custom reconciler, hooks (` useInput ` , ` useTerminalSize ` , ` useSearchHighlight ` ), virtual list rendering.
80- - ** ` src/components/ ` ** — React components rendered in terminal via Ink. Key ones:
81- - ` App.tsx ` — Root provider (AppState, Stats, FpsMetrics).
82- - ` Messages.tsx ` / ` MessageRow.tsx ` — Conversation message rendering.
83- - ` PromptInput/ ` — User input handling.
84- - ` permissions/ ` — Tool permission approval UI.
99+ - ** ` src/components/ ` ** — 大量 React 组件(170+ 项),渲染于终端 Ink 环境中。关键组件:
100+ - ` App.tsx ` — Root provider (AppState, Stats, FpsMetrics)
101+ - ` Messages.tsx ` / ` MessageRow.tsx ` — Conversation message rendering
102+ - ` PromptInput/ ` — User input handling
103+ - ` permissions/ ` — Tool permission approval UI
104+ - ` design-system/ ` — 复用 UI 组件(Dialog, FuzzyPicker, ProgressBar, ThemeProvider 等)
85105- Components use React Compiler runtime (` react/compiler-runtime ` ) — decompiled output has ` _c() ` memoization calls throughout.
86106
87107### State Management
88108
89109- ** ` src/state/AppState.tsx ` ** — Central app state type and context provider. Contains messages, tools, permissions, MCP connections, etc.
90- - ** ` src/state/store.ts ` ** — Zustand-style store for AppState.
91- - ** ` src/bootstrap/state.ts ` ** — Module-level singletons for session-global state (session ID, CWD, project root, token counts).
110+ - ** ` src/state/AppStateStore.ts ` ** — Default state and store factory.
111+ - ** ` src/state/store.ts ` ** — Zustand-style store for AppState (` createStore ` ).
112+ - ** ` src/state/selectors.ts ` ** — State selectors.
113+ - ** ` src/bootstrap/state.ts ` ** — Module-level singletons for session-global state (session ID, CWD, project root, token counts, model overrides, client type, permission mode).
114+
115+ ### Bridge / Remote Control
116+
117+ - ** ` src/bridge/ ` ** (~ 35 files) — Remote Control / Bridge 模式。feature-gated by ` BRIDGE_MODE ` 。包含 bridge API、会话管理、JWT 认证、消息传输、权限回调等。Entry: ` bridgeMain.ts ` 。
118+ - CLI 快速路径: ` claude remote-control ` / ` claude rc ` / ` claude bridge ` 。
119+
120+ ### Daemon Mode
121+
122+ - ** ` src/daemon/ ` ** — Daemon 模式(长驻 supervisor)。feature-gated by ` DAEMON ` 。包含 ` main.ts ` (entry)和 ` workerRegistry.ts ` (worker 管理)。
92123
93124### Context & System Prompt
94125
@@ -97,17 +128,16 @@ bun run format # format all src/
97128
98129### Feature Flag System
99130
100- Feature flags control which functionality is enabled at runtime. The system works as follows :
131+ Feature flags control which functionality is enabled at runtime:
101132
102133- ** 在代码中使用** : 统一通过 ` import { feature } from 'bun:bundle' ` 导入,调用 ` feature('FLAG_NAME') ` 返回 ` boolean ` 。** 不要** 在 ` cli.tsx ` 或其他文件里自己定义 ` feature ` 函数或覆盖这个 import。
103134- ** 启用方式** : 通过环境变量 ` FEATURE_<FLAG_NAME>=1 ` 。例如 ` FEATURE_BUDDY=1 bun run dev ` 启用 BUDDY 功能。
104- - ** Dev 模式** : ` scripts/dev.ts ` 自动扫描所有 ` FEATURE_* ` 环境变量,转换为 Bun 的 ` --feature ` 参数传递给运行时。
105- - ** Build 模式** : ` build.ts ` 同样读取 ` FEATURE_* ` 环境变量,传入 ` Bun.build({ features }) ` 数组。
106- - ** 默认行为** : 不设置任何 ` FEATURE_* ` 环境变量时,所有 ` feature() ` 调用返回 ` false ` ,即所有 feature-gated 代码不执行。
107- - ** 常见 flag 名称** : ` BUDDY ` 、` FORK_SUBAGENT ` 、` PROACTIVE ` 、` KAIROS ` 、` VOICE_MODE ` 、` DAEMON ` 等(见 ` src/commands.ts ` 中的使用)。
135+ - ** Dev 默认 features** : ` BUDDY ` 、` TRANSCRIPT_CLASSIFIER ` 、` BRIDGE_MODE ` 、` AGENT_TRIGGERS_REMOTE ` (见 ` scripts/dev.ts ` )。
136+ - ** Build 默认 features** : ` AGENT_TRIGGERS_REMOTE ` (见 ` build.ts ` )。
137+ - ** 常见 flag** : ` BUDDY ` , ` DAEMON ` , ` BRIDGE_MODE ` , ` BG_SESSIONS ` , ` PROACTIVE ` , ` KAIROS ` , ` VOICE_MODE ` , ` FORK_SUBAGENT ` , ` SSH_REMOTE ` , ` DIRECT_CONNECT ` , ` TEMPLATES ` , ` CHICAGO_MCP ` , ` BYOC_ENVIRONMENT_RUNNER ` , ` SELF_HOSTED_RUNNER ` , ` COORDINATOR_MODE ` , ` UDS_INBOX ` , ` LODESTONE ` , ` ABLATION_BASELINE ` 等。
108138- ** 类型声明** : ` src/types/internal-modules.d.ts ` 中声明了 ` bun:bundle ` 模块的 ` feature ` 函数签名。
109139
110- ** 新增功能的正确做法** : 如果要让某个 feature-gated 模块(如 buddy)永久启用,应保留代码中 ` import { feature } from 'bun:bundle' ` + ` feature('FLAG_NAME') ` 的标准模式,在运行时通过环境变量或配置控制,而不是绕过 feature flag 直接 import。
140+ ** 新增功能的正确做法** : 保留 ` import { feature } from 'bun:bundle' ` + ` feature('FLAG_NAME') ` 的标准模式,在运行时通过环境变量或配置控制,不要绕过 feature flag 直接 import。
111141
112142### Stubbed/Deleted Modules
113143
@@ -131,17 +161,19 @@ Feature flags control which functionality is enabled at runtime. The system work
131161
132162- ** 框架** : ` bun:test ` (内置断言 + mock)
133163- ** 单元测试** : 就近放置于 ` src/**/__tests__/ ` ,文件名 ` <module>.test.ts `
134- - ** 集成测试** : ` tests/integration/ ` ,共享 mock/fixture 在 ` tests/mocks/ `
164+ - ** 集成测试** : ` tests/integration/ ` — 4 个文件(cli-arguments, context-build, message-pipeline, tool-chain)
165+ - ** 共享 mock/fixture** : ` tests/mocks/ ` (api-responses, file-system, fixtures/)
135166- ** 命名** : ` describe("functionName") ` + ` test("behavior description") ` ,英文
136167- ** Mock 模式** : 对重依赖模块使用 ` mock.module() ` + ` await import() ` 解锁(必须内联在测试文件中,不能从共享 helper 导入)
137- - ** 当前状态** : 1286 tests / 67 files / 0 fail(详见 ` docs/testing-spec.md ` 的覆盖状态表和评分 )
168+ - ** 当前状态** : ~ 1623 tests / 114 files (110 unit + 4 integration) / 0 fail(详见 ` docs/testing-spec.md ` )
138169
139170## Working with This Codebase
140171
141172- ** Don't try to fix all tsc errors** — they're from decompilation and don't affect runtime.
142- - ** Feature flags** — 默认全部关闭(` feature() ` 返回 ` false ` )。启用方式见上方 Feature Flag System 章节 。不要在 ` cli.tsx ` 中重定义 ` feature ` 函数。
173+ - ** Feature flags** — 默认全部关闭(` feature() ` 返回 ` false ` )。Dev/build 各有自己的默认启用列表 。不要在 ` cli.tsx ` 中重定义 ` feature ` 函数。
143174- ** React Compiler output** — Components have decompiled memoization boilerplate (` const $ = _c(N) ` ). This is normal.
144175- ** ` bun:bundle ` import** — ` import { feature } from 'bun:bundle' ` 是 Bun 内置模块,由运行时/构建器解析。不要用自定义函数替代它。
145176- ** ` src/ ` path alias** — tsconfig maps ` src/* ` to ` ./src/* ` . Imports like ` import { ... } from 'src/utils/...' ` are valid.
146177- ** MACRO defines** — 集中管理在 ` scripts/defines.ts ` 。Dev mode 通过 ` bun -d ` 注入,build 通过 ` Bun.build({ define }) ` 注入。修改版本号等常量只改这个文件。
147178- ** 构建产物兼容 Node.js** — ` build.ts ` 会自动后处理 ` import.meta.require ` ,产物可直接用 ` node dist/cli.js ` 运行。
179+ - ** Biome 配置** — 大量 lint 规则被关闭(decompiled 代码不适合严格 lint)。` .tsx ` 文件用 120 行宽 + 强制分号;其他文件 80 行宽 + 按需分号。
0 commit comments