# CLAUDE.md ## 项目概述 LHY Code — 基于 Claude Code 泄露源码修复的**本地可运行版本**,支持接入任意 Anthropic 兼容 API(MiniMax、OpenRouter 等)。 ## 技术栈 - **运行时**: [Bun](https://bun.sh)(唯一运行时,不可用 Node.js) - **语言**: TypeScript - **终端 UI**: React 19 + [Ink 6](https://github.com/vadimdemedes/ink) - **CLI 解析**: Commander.js - **API**: Anthropic SDK (`@anthropic-ai/sdk`) - **协议**: MCP、LSP - **构建**: Bun bundler(通过 `bun:bundle` 的 `feature()` 做 DCE) - **包管理**: bun install(锁文件 `bun.lock`) ## 启动与运行 ```bash # 安装依赖 bun install # 交互 TUI 模式 ./bin/lhy-code # 无头模式 ./bin/lhy-code -p "your prompt" # 管道输入 echo "explain this code" | ./bin/lhy-code -p # Windows 直接调用 bun --env-file=.env ./src/entrypoints/cli.tsx # 降级 Recovery CLI CLAUDE_CODE_FORCE_RECOVERY_CLI=1 ./bin/lhy-code ``` ## 环境变量 | 变量 | 说明 | |------|------| | `ANTHROPIC_AUTH_TOKEN` | Bearer Token 认证(`Authorization` 头) | | `ANTHROPIC_API_KEY` | API Key 认证(`x-api-key` 头) | | `ANTHROPIC_BASE_URL` | 自定义 API 端点 | | `ANTHROPIC_MODEL` | 默认模型 | | `ANTHROPIC_DEFAULT_SONNET/HAIKU/OPUS_MODEL` | 各 tier 模型映射 | | `API_TIMEOUT_MS` | API 超时(默认 600000) | | `DISABLE_TELEMETRY` | 设为 `1` 禁用遥测 | | `CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC` | 设为 `1` 禁用非必要网络请求 | ## 项目结构 ``` bin/lhy-code # Bash 入口脚本 preload.ts # Bun preload(设置 MACRO 全局变量) .env # 环境变量(gitignore) src/ ├── entrypoints/cli.tsx # CLI 主入口(快速路径分流、动态导入) ├── main.tsx # TUI 主逻辑(Commander.js + React/Ink 渲染) ├── localRecoveryCli.ts # 降级 Recovery CLI(readline 模式) ├── setup.ts # 启动初始化(配置、OAuth、遥测等) ├── screens/REPL.tsx # 交互 REPL 主界面 ├── ink/ # Ink 终端渲染引擎(定制版) │ ├── components/ # Box、Text 等基础组件 │ ├── reconciler.ts # React Reconciler │ ├── renderer.ts # 渲染器 │ ├── layout/ # Yoga 布局引擎 │ └── termio/ # ANSI/CSI/SGR 终端协议解析 ├── components/ # UI 组件(Message、PromptInput、权限对话框等) ├── tools/ # Agent 工具系统(Bash、Edit、Grep、WebFetch、MCP 等) ├── commands/ # 斜杠命令(/commit、/review、/help 等) ├── skills/ # Skill 系统(内置 + 可扩展) │ └── bundled/ # 内置 Skills(verify、loop、debug 等) ├── services/ # 服务层 │ ├── api/ # Anthropic API 客户端(流式、重试) │ ├── mcp/ # MCP 协议实现 │ ├── oauth/ # OAuth 认证 │ ├── lsp/ # LSP 语言服务器 │ ├── analytics/ # 遥测/分析 │ └── plugins/ # 插件系统 ├── bridge/ # 远程控制桥接(Bridge 模式) ├── hooks/ # React Hooks ├── state/ # 全局状态管理(useSyncExternalStore) ├── utils/ # 工具函数 │ ├── git/ # Git 操作 │ ├── github/ # GitHub 集成 │ ├── permissions/ # 权限系统 │ ├── model/ # 模型选择与路由 │ ├── bash/ # Shell 执行 │ ├── sandbox/ # 沙箱隔离 │ ├── settings/ # 配置管理 │ └── memory/ # 记忆系统 ├── constants/ # 常量与系统提示词 ├── types/ # TypeScript 类型定义 │ └── generated/ # Protobuf 生成类型 ├── plugins/ # 插件接口与内置插件 ├── coordinator/ # 多 Agent 协调 ├── keybindings/ # 键盘快捷键 ├── vim/ # Vim 模式 └── voice/ # 语音输入 ``` ## 核心架构 ### 启动流程 ``` bin/lhy-code → entrypoints/cli.tsx → 快速路径分流 → main.tsx → screens/REPL.tsx ``` `cli.tsx` 使用动态导入 + 快速路径模式,对 `--version`、`--daemon-worker`、`remote-control` 等特殊参数先行处理,避免加载完整模块。 ### Feature Flags(构建时 DCE) 通过 `feature('FLAG_NAME')` 实现 Dead Code Elimination: - `BRIDGE_MODE`:远程控制桥接 - `DAEMON`:守护进程 - `BG_SESSIONS`:后台会话管理 - `VOICE_MODE`:语音输入 - `COORDINATOR_MODE`:多 Agent 协调 - `WORKFLOW_SCRIPTS`:工作流脚本 ### 工具系统 所有工具继承 `Tool` 基类,核心工具: - **BashTool** — Shell 命令执行 - **FileReadTool / FileEditTool / FileWriteTool** — 文件操作 - **GlobTool / GrepTool** — 文件/内容搜索 - **WebFetchTool / WebSearchTool** — 网络访问 - **AgentTool** — 子 Agent 生成 - **MCPTool / LSPTool** — 协议工具 - **SkillTool** — Skill 调用 - **TaskCreateTool / TaskStopTool 等** — 任务管理 ### 权限模型 工具调用需要权限确认,支持: - `denyRules`:禁止特定工具/参数 - `allowRules`:允许特定工具/参数 - `bypassMode`:绕过权限检查 - 权限持久化到 `~/.claude/settings.json` ### 状态管理 使用 React `useSyncExternalStore` + 选择器模式: - `AppStateStore` 全局 store - `useAppState(selector)` 订阅特定切片 - 避免不必要的重渲染 ## 开发约定 ### 语言 - 代码注释用中文 - 提交消息用中文(约定式提交格式:`feat:`、`fix:`、`refactor:` 等) ### 文件组织 - 函数 < 50 行,文件 < 800 行 - 高内聚低耦合,按功能而非类型组织 - 嵌套层级不超过 4 层 ### 代码风格 - 不可变性优先(创建新对象,不修改现有对象) - 显式处理错误,禁止静默吞掉异常 - 禁止硬编码密钥/凭据 - 系统边界处验证所有输入 ### 安全 - `.env` 文件已 gitignore,禁止提交 - 不要在前端代码中暴露 API Key - 工具执行前必须经过权限检查 ## 关键入口文件 | 文件 | 说明 | |------|------| | [bin/lhy-code](bin/lhy-code) | Bash 启动脚本 | | [src/entrypoints/cli.tsx](src/entrypoints/cli.tsx) | CLI 入口(快速路径分流) | | [src/main.tsx](src/main.tsx) | TUI 主程序 | | [src/screens/REPL.tsx](src/screens/REPL.tsx) | REPL 交互界面 | | [src/localRecoveryCli.ts](src/localRecoveryCli.ts) | 降级 CLI | | [preload.ts](preload.ts) | Bun preload |