diff --git a/CLAUDE.md b/CLAUDE.md new file mode 100644 index 0000000..942ffc8 --- /dev/null +++ b/CLAUDE.md @@ -0,0 +1,183 @@ +# 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 |