Files
claude-code/CLAUDE.md
T
2026-05-06 14:35:37 +08:00

184 lines
6.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# CLAUDE.md
## 项目概述
LHY Code — 基于 Claude Code 泄露源码修复的**本地可运行版本**,支持接入任意 Anthropic 兼容 APIMiniMax、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 CLIreadline 模式)
├── 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/ # 内置 Skillsverify、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 |