hwjcode 1.1.26

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (33) hide show
  1. package/LICENSE +202 -0
  2. package/README.md +1392 -0
  3. package/bundle/assets/help/cli-help-knowledge.md +1971 -0
  4. package/bundle/assets/sounds/confirmation-required.wav +0 -0
  5. package/bundle/assets/sounds/response-complete.wav +0 -0
  6. package/bundle/assets/sounds/selection-made.wav +0 -0
  7. package/bundle/easycode.js +7737 -0
  8. package/bundle/fix-binary-permissions.js +215 -0
  9. package/bundle/login/templates/authSelectPage.html +1123 -0
  10. package/bundle/login/templates/deepv.ico +0 -0
  11. package/bundle/login/templates/feishu.ico +0 -0
  12. package/bundle/node_modules/@vscode/ripgrep/bin/darwin-arm64-rg +0 -0
  13. package/bundle/node_modules/@vscode/ripgrep/bin/darwin-x64-rg +0 -0
  14. package/bundle/node_modules/@vscode/ripgrep/bin/linux-arm-rg +0 -0
  15. package/bundle/node_modules/@vscode/ripgrep/bin/linux-arm64-rg +0 -0
  16. package/bundle/node_modules/@vscode/ripgrep/bin/linux-x64-rg +0 -0
  17. package/bundle/node_modules/@vscode/ripgrep/bin/rg +0 -0
  18. package/bundle/node_modules/@vscode/ripgrep/bin/win32-arm64-rg.exe +0 -0
  19. package/bundle/node_modules/@vscode/ripgrep/bin/win32-ia32-rg.exe +0 -0
  20. package/bundle/node_modules/@vscode/ripgrep/bin/win32-x64-rg.exe +0 -0
  21. package/bundle/node_modules/@vscode/ripgrep/lib/download.js +357 -0
  22. package/bundle/node_modules/@vscode/ripgrep/lib/index.d.ts +1 -0
  23. package/bundle/node_modules/@vscode/ripgrep/lib/index.js +42 -0
  24. package/bundle/node_modules/@vscode/ripgrep/lib/postinstall.js +121 -0
  25. package/bundle/node_modules/@vscode/ripgrep/package.json +24 -0
  26. package/bundle/package.json +3 -0
  27. package/bundle/sandbox-macos-permissive-closed.sb +26 -0
  28. package/bundle/sandbox-macos-permissive-open.sb +19 -0
  29. package/bundle/sandbox-macos-permissive-proxied.sb +31 -0
  30. package/bundle/sandbox-macos-restrictive-closed.sb +87 -0
  31. package/bundle/sandbox-macos-restrictive-open.sb +90 -0
  32. package/bundle/sandbox-macos-restrictive-proxied.sb +92 -0
  33. package/package.json +168 -0
package/README.md ADDED
@@ -0,0 +1,1392 @@
1
+ <div align="center">
2
+
3
+ # 🚀 Easy Code
4
+
5
+ ### **AI 驱动的智能编程助手**
6
+
7
+ *赋能开发者,加速创新*
8
+
9
+ > ℹ️ **品牌升级提示**:本项目原名 **Easy Code**,现已统一更名为 **Easy Code**。
10
+ > 包名、命令名、配置目录在过渡期内保留旧名(`easycode-ai` / `easycode` / `.easycode/` 等)以保证向后兼容;后续新文档与界面均使用新品牌名。
11
+
12
+ <br>
13
+
14
+ [![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](LICENSE)
15
+ [![Node.js](https://img.shields.io/badge/Node.js-20%2B-43853D.svg?logo=node.js&logoColor=white)](https://nodejs.org/)
16
+ [![TypeScript](https://img.shields.io/badge/TypeScript-5.0%2B-3178C6.svg?logo=typescript&logoColor=white)](https://www.typescriptlang.org/)
17
+ [![npm](https://img.shields.io/badge/npm-easycode--code-CB3837.svg?logo=npm)](https://www.npmjs.com/package/easycode-ai)
18
+ [![VS Code](https://img.shields.io/badge/VS%20Code-Extension-007ACC.svg?logo=visual-studio-code)](https://code.visualstudio.com/)
19
+
20
+ <br>
21
+
22
+ [English](./README_EN.md) | **简体中文**
23
+
24
+ <br>
25
+
26
+ <!-- 如果有演示 GIF,取消下面这行注释 -->
27
+ <!-- <img src="docs/assets/demo.gif" alt="Easy Code Demo" width="800"> -->
28
+
29
+ </div>
30
+
31
+ ---
32
+
33
+ ## 📖 目录
34
+
35
+ - [项目简介](#-项目简介)
36
+ - [为什么选择 Easy Code](#-为什么选择-easycode-ai)
37
+ - [核心特性](#-核心特性)
38
+ - [快速安装](#-快速安装)
39
+ - [快速开始](#-快速开始)
40
+ - [CLI 命令参考](#-cli-命令参考)
41
+ - [交互式斜杠命令](#-交互式斜杠命令)
42
+ - [项目架构](#️-项目架构)
43
+ - [VS Code 扩展](#-vs-code-扩展)
44
+ - [内置工具系统](#️-内置工具系统)
45
+ - [MCP 协议支持](#-mcp-协议支持)
46
+ - [Hooks 钩子机制](#-hooks-钩子机制)
47
+ - [配置文件](#️-配置文件)
48
+ - [开发指南](#-开发指南)
49
+ - [常见问题](#-常见问题)
50
+ - [贡献指南](#-贡献指南)
51
+ - [路线图](#️-路线图)
52
+ - [许可证](#-许可证)
53
+ - [相关链接](#-相关链接)
54
+
55
+ ---
56
+
57
+ ## ✨ 项目简介
58
+
59
+ **Easy Code** 是一款革命性的 AI 驱动智能编程助手,通过深度整合人工智能技术,全面提升软件开发的效率、质量和创新能力。
60
+
61
+ 不同于传统的代码补全工具,Easy Code 是一个能够**理解整个项目上下文**、**自主编排工具完成复杂任务**的智能代理(Agent)。它将开发者从繁琐重复的工作中解放出来,让你专注于更高层次的创新和问题解决。
62
+
63
+ ### 💡 Easy Code 能做什么?
64
+
65
+ ```
66
+ 👤 你:帮我分析这个项目的架构,找出性能瓶颈,并给出优化方案
67
+
68
+ 🤖 Easy Code:
69
+ ├── 📂 扫描项目结构,理解模块依赖
70
+ ├── 🔍 分析代码热点和复杂度
71
+ ├── 📊 识别潜在的性能问题
72
+ ├── 💡 生成优化建议和重构方案
73
+ └── ✏️ 自动应用修改(经你确认后)
74
+ ```
75
+
76
+ ---
77
+
78
+ ## 🌟 为什么选择 Easy Code
79
+
80
+ <table>
81
+ <tr>
82
+ <td width="50%">
83
+
84
+ ### 🎯 与传统 AI 编码助手的区别
85
+
86
+ | 特性 | 传统工具 | Easy Code |
87
+ |:---:|:---:|:---:|
88
+ | 上下文范围 | 单文件 | **整个项目** |
89
+ | 交互方式 | 被动补全 | **主动代理** |
90
+ | 任务复杂度 | 简单补全 | **复杂工作流** |
91
+ | 工具调用 | 无 | **Shell/文件/Web** |
92
+ | 会话管理 | 无 | **持久化会话** |
93
+ | 可扩展性 | 受限 | **MCP/Hooks/Skills** |
94
+
95
+ </td>
96
+ <td width="50%">
97
+
98
+ ### 🚀 核心优势
99
+
100
+ - **🧠 深度理解** - 通过 MCP 协议构建完整项目认知
101
+ - **🛠️ 自主执行** - AI 可调用工具完成实际操作
102
+ - **🔄 持续对话** - 会话保存/恢复,上下文不丢失
103
+ - **🎨 多端支持** - CLI + VS Code 插件
104
+ - **🔌 高度可扩展** - Hooks、Skills、MCP 服务器
105
+ - **🔒 安全可控** - 敏感操作需用户确认
106
+
107
+ </td>
108
+ </tr>
109
+ </table>
110
+
111
+ ---
112
+
113
+ ## 🎯 核心特性
114
+
115
+ ### 🧠 AI 驱动的代码生成与重构
116
+
117
+ - **智能代码生成** - 根据自然语言描述生成完整的函数、类、模块甚至整个应用
118
+ - **代码重构建议** - 识别代码异味,提供优化方案,自动统一代码风格
119
+ - **Bug 智能修复** - 分析错误堆栈,定位问题根源,生成修复代码
120
+ - **多语言支持** - TypeScript、JavaScript、Python、Go、Rust、Java 等主流语言
121
+
122
+ ### 🔍 智能调试与问题解决
123
+
124
+ - **错误日志分析** - 深入解析错误信息,快速定位问题
125
+ - **堆栈追踪诊断** - 理解调用链路,找出异常根因
126
+ - **自动修复执行** - 生成修复方案,一键应用(需确认)
127
+ - **增强调试控制台** - `Ctrl+O` 三状态循环:全部日志 → 仅错误 → 关闭,智能过滤错误信息
128
+
129
+ ### 📦 高级上下文管理 (MCP)
130
+
131
+ Model Context Protocol (MCP) 是 Easy Code 的核心创新:
132
+
133
+ - **全局项目视图** - 理解文件结构、模块依赖、代码语义
134
+ - **跨文件分析** - 追踪函数调用链、类型引用、导入导出
135
+ - **智能上下文选择** - 自动识别与任务相关的文件和代码段
136
+ - **第三方 MCP 服务器** - 接入外部数据源和工具
137
+
138
+ ### 🛠️ 可扩展工具系统
139
+
140
+ AI 通过工具与外部环境交互,内置丰富工具集:
141
+
142
+ ```
143
+ 📁 文件操作 → read_file, write_file, replace, delete_file, glob
144
+ 🔍 代码搜索 → grep (ripgrep), read_many_files
145
+ 💻 命令执行 → shell (bash/powershell)
146
+ 🌐 网络访问 → web_fetch, web_search (Google)
147
+ 🧩 MCP 工具 → 调用任意 MCP 服务器提供的工具
148
+ 📊 代码分析 → task (启动分析子 Agent)
149
+ 📝 任务管理 → todo_write
150
+ 💾 记忆系统 → memory (长期记忆)
151
+ ```
152
+
153
+ ### 🪝 Hooks 钩子机制
154
+
155
+ 在关键工作流节点注入自定义逻辑:
156
+
157
+ - **PreToolExecution** - 工具执行前触发
158
+ - **PostToolExecution** - 工具执行后触发
159
+ - **OnSessionStart** - 会话开始时触发
160
+ - **OnSessionEnd** - 会话结束时触发
161
+
162
+ 支持自动化代码检查、格式化、提交前验证等场景。
163
+
164
+ ### 🔄 会话管理
165
+
166
+ - **会话持久化** - 自动保存对话历史和上下文
167
+ - **会话恢复** - 随时继续之前的工作
168
+ - **历史压缩** - 智能压缩对话历史,节省 Token
169
+ - **检查点恢复** - 文件修改可回滚到之前状态
170
+
171
+ ---
172
+
173
+ ## 📦 快速安装
174
+
175
+ ### 系统要求
176
+
177
+ - **Node.js** 20.0.0 或更高版本
178
+ - **操作系统** Windows / macOS / Linux
179
+ - **终端** 支持 ANSI 颜色的终端模拟器
180
+
181
+ ### 方式一:npm 全局安装(推荐)
182
+
183
+ ```bash
184
+ # 使用 npm
185
+ npm install -g easycode-ai
186
+
187
+ # 使用 yarn
188
+ yarn global add easycode-ai
189
+
190
+ # 使用 pnpm
191
+ pnpm add -g easycode-ai
192
+ ```
193
+
194
+ 安装完成后,验证安装:
195
+
196
+ ```bash
197
+ easycode --version
198
+ ```
199
+
200
+ ### 方式二:从源码构建
201
+
202
+ ```bash
203
+ # 1. 克隆仓库
204
+ git clone https://github.com/OrionStarAI/EasyCodeCode.git
205
+ cd EasyCode
206
+
207
+ # 2. 安装依赖
208
+ npm install
209
+
210
+ # 3. 构建项目
211
+ npm run build
212
+
213
+ # 4. 本地开发运行
214
+ npm run dev
215
+
216
+ # 5. (可选) 生产环境打包
217
+ npm run pack:prod
218
+ ```
219
+
220
+ ---
221
+
222
+ ## 🚀 快速开始
223
+
224
+ ### 第一步:启动 Easy Code
225
+
226
+ 在任意项目目录中运行:
227
+
228
+ ```bash
229
+ easycode
230
+ ```
231
+
232
+ 首次启动会引导你完成身份认证。
233
+
234
+ ### 第二步:开始对话
235
+
236
+ ```
237
+ ┌─────────────────────────────────────────────────────────────┐
238
+ │ 🚀 Easy Code - AI 驱动的智能编程助手 │
239
+ │─────────────────────────────────────────────────────────────│
240
+ │ │
241
+ │ 👋 你好!我是 Easy Code,你的 AI 编程助手。 │
242
+ │ │
243
+ │ 💡 试试这些命令开始: │
244
+ │ • "分析这个项目的架构" │
245
+ │ • "帮我写一个用户登录的 API" │
246
+ │ • "这段代码有什么问题?" │
247
+ │ • /help 查看帮助 │
248
+ │ │
249
+ └─────────────────────────────────────────────────────────────┘
250
+
251
+ > 你想做什么?
252
+ ```
253
+
254
+ ### 第三步:与 AI 协作
255
+
256
+ ```bash
257
+ # 示例对话
258
+ > 帮我创建一个 Express REST API,包含用户的 CRUD 操作
259
+
260
+ 🤖 好的,我来帮你创建。首先让我了解一下项目结构...
261
+
262
+ [调用工具: glob] 扫描项目文件...
263
+ [调用工具: read_file] 读取 package.json...
264
+ [调用工具: write_file] 创建 src/routes/users.js...
265
+ [调用工具: write_file] 创建 src/controllers/userController.js...
266
+ [调用工具: shell] 安装依赖 express...
267
+
268
+ ✅ 已创建用户 CRUD API,包含以下文件:
269
+ - src/routes/users.js
270
+ - src/controllers/userController.js
271
+ - src/models/User.js
272
+
273
+ 启动服务器:npm run dev
274
+ ```
275
+
276
+ ---
277
+
278
+ ## 📋 CLI 命令参考
279
+
280
+ ### 全局选项
281
+
282
+ ```bash
283
+ easycode [options]
284
+ ```
285
+
286
+ | 选项 | 简写 | 说明 |
287
+ |:---|:---:|:---|
288
+ | `--model <name>` | `-m` | 指定 AI 模型 |
289
+ | `--prompt <text>` | `-p` | 非交互模式,执行单次提示 |
290
+ | `--prompt-interactive <text>` | `-i` | 执行提示后进入交互模式 |
291
+ | `--sandbox` | `-s` | 在沙箱环境中运行(增强安全性) |
292
+ | `--debug` | `-d` | 启用调试模式,输出详细日志 |
293
+ | `--all-files` | `-a` | 在上下文中包含所有项目文件 |
294
+ | `--yolo` | `-y` | YOLO 模式:自动执行所有操作,无需确认 |
295
+ | `--continue` | `-c` | 继续上次会话 |
296
+ | `--session <id>` | | 恢复指定 ID 的会话 |
297
+ | `--list-sessions` | | 列出所有可用会话 |
298
+ | `--workdir <path>` | | 指定工作目录 |
299
+ | `--version` | `-v` | 显示版本号 |
300
+ | `--help` | `-h` | 显示帮助信息 |
301
+
302
+ ### 使用示例
303
+
304
+ ```bash
305
+ # 基本启动
306
+ easycode
307
+
308
+ # 使用 Gemini 2.0 Flash 模型
309
+ easycode -m gemini-2.0-flash
310
+
311
+ # 执行单次任务(非交互)
312
+ easycode -p "为 src/utils.ts 添加单元测试"
313
+
314
+ # 继续上次会话
315
+ easycode -c
316
+
317
+ # YOLO 模式(危险:自动执行所有操作)
318
+ easycode -y
319
+
320
+ # 调试模式
321
+ easycode -d
322
+
323
+ # 指定工作目录
324
+ easycode --workdir /path/to/project
325
+
326
+ # 列出所有会话
327
+ easycode --list-sessions
328
+
329
+ # 恢复特定会话
330
+ easycode --session abc123
331
+ ```
332
+
333
+ ---
334
+
335
+ ## ⚡ 交互式斜杠命令
336
+
337
+ 在交互模式下,使用以 `/` 开头的命令快速执行操作:
338
+
339
+ ### 核心命令
340
+
341
+ | 命令 | 说明 |
342
+ |:---|:---|
343
+ | `/help` | 显示帮助信息和快速入门指南 |
344
+ | `/help-ask` | AI 智能帮助助手,解答使用问题 |
345
+ | `/issue <描述>` | 提交 GitHub Issue(自动附带错误日志) |
346
+ | `/quit` 或 `/exit` | 退出应用,显示会话统计 |
347
+
348
+ ### 会话与模型
349
+
350
+ | 命令 | 说明 |
351
+ |:---|:---|
352
+ | `/session` | 会话管理:`list` / `new` / `select <id>` / `rebuild` |
353
+ | `/model [name]` | 切换 AI 模型,不带参数显示选择对话框 |
354
+ | `/compress` | 压缩对话历史,减少 Token 消耗 |
355
+ | `/stats` | 显示会话统计信息 |
356
+
357
+ ### 工具与扩展
358
+
359
+ | 命令 | 说明 |
360
+ |:---|:---|
361
+ | `/tools [nodesc]` | 查看可用工具列表 |
362
+ | `/mcp [subcommand]` | MCP 服务器管理:`add` / `auth` / `refresh` |
363
+ | `/memory` | 长期记忆管理:`show` / `add` / `refresh` |
364
+
365
+ ### 工作模式
366
+
367
+ | 命令 | 说明 |
368
+ |:---|:---|
369
+ | `/plan [on\|off]` | 计划模式:只讨论不修改代码 |
370
+ | `/yolo [on\|off]` | YOLO 模式:自动执行所有操作 |
371
+ | `/vim` | 切换 Vim 编辑模式 |
372
+
373
+ ### 文件与编辑
374
+
375
+ | 命令 | 说明 |
376
+ |:---|:---|
377
+ | `/restore [id]` | 恢复文件到检查点状态 |
378
+ | `/refine <text>` | 文本润色,支持 `--tone` / `--lang` / `--level` |
379
+ | `/trim-spaces [on\|off]` | 配置是否自动删除行末空格 |
380
+ | `/copy` | 复制最后一条 AI 回复到剪贴板 |
381
+
382
+ ### 界面与设置
383
+
384
+ | 命令 | 说明 |
385
+ |:---|:---|
386
+ | `/clear` | 清空终端屏幕 |
387
+ | `/theme` | 主题选择对话框 |
388
+ | `/editor` | 编辑器配置对话框 |
389
+ | `/about` | 显示系统和应用信息 |
390
+
391
+ ### 调试控制台
392
+
393
+ Easy Code 提供增强的调试控制台功能,通过 `Ctrl+O` 快捷键实现三状态循环:
394
+
395
+ | 快捷键 | 状态 | 说明 |
396
+ |:---|:---|:---|
397
+ | `Ctrl+O` (第1次) | 📊 全部日志 | 打开调试控制台,显示所有日志信息 |
398
+ | `Ctrl+O` (第2次) | ⚠️ 仅错误 | 过滤显示错误日志,显示黄色 `[ERRORS ONLY]` 标识 |
399
+ | `Ctrl+O` (第3次) | 🚫 关闭 | 关闭调试控制台 |
400
+
401
+ **功能特点:**
402
+ - 🎯 **智能过滤**:自动识别错误、异常、堆栈跟踪等关键信息
403
+ - 🎨 **视觉提示**:错误模式显示醒目的黄色标识
404
+ - ⚡ **快速切换**:一键在全部日志和错误过滤间切换
405
+ - 🔍 **错误高亮**:自动检测并显示错误关键词和堆栈信息
406
+
407
+ ### 账户与认证
408
+
409
+ | 命令 | 说明 |
410
+ |:---|:---|
411
+ | `/auth` | 身份认证管理 |
412
+ | `/account` | 账户信息和余额查看 |
413
+
414
+ ### 项目配置
415
+
416
+ | 命令 | 说明 |
417
+ |:---|:---|
418
+ | `/init` | 初始化项目配置文件 `EASYCODE.md` |
419
+ | `/hooks` | 查看 Hooks 钩子机制帮助文档 |
420
+ | `/ide` | IDE 集成管理(VS Code 模式下可用) |
421
+
422
+ ---
423
+
424
+ ## 🏗️ 项目架构
425
+
426
+ Easy Code 采用现代化的 **Monorepo** 架构,确保代码一致性和高效协作。
427
+
428
+ ### 目录结构
429
+
430
+ ```
431
+ EasyCode/
432
+
433
+ ├── 📁 packages/ # 核心包目录
434
+ │ │
435
+ │ ├── 📁 cli/ # 命令行界面包
436
+ │ │ ├── src/
437
+ │ │ │ ├── commands/ # 斜杠命令实现
438
+ │ │ │ ├── ui/ # 终端 UI 组件 (React Ink)
439
+ │ │ │ │ ├── components/ # 可复用 UI 组件
440
+ │ │ │ │ ├── dialogs/ # 对话框组件
441
+ │ │ │ │ └── themes/ # 主题配置
442
+ │ │ │ ├── services/ # 服务层
443
+ │ │ │ ├── auth/ # 客户端认证
444
+ │ │ │ └── utils/ # 工具函数
445
+ │ │ └── package.json
446
+ │ │
447
+ │ ├── 📁 core/ # 核心功能库
448
+ │ │ ├── src/
449
+ │ │ │ ├── tools/ # AI 工具集
450
+ │ │ │ │ ├── shell.ts # Shell 命令执行
451
+ │ │ │ │ ├── read-file.ts # 文件读取
452
+ │ │ │ │ ├── write-file.ts # 文件写入
453
+ │ │ │ │ ├── edit.ts # 文件编辑 (replace)
454
+ │ │ │ │ ├── glob.ts # 文件搜索
455
+ │ │ │ │ ├── grep.ts # 内容搜索
456
+ │ │ │ │ ├── web-fetch.ts # 网页抓取
457
+ │ │ │ │ ├── web-search.ts # Google 搜索
458
+ │ │ │ │ ├── task.ts # 子 Agent 任务
459
+ │ │ │ │ └── ...
460
+ │ │ │ ├── mcp/ # MCP 引擎
461
+ │ │ │ ├── prompts/ # Prompt 模板
462
+ │ │ │ ├── auth/ # 认证模块
463
+ │ │ │ ├── hooks/ # Hooks 系统
464
+ │ │ │ ├── skills/ # Skills 扩展
465
+ │ │ │ ├── services/ # 核心服务
466
+ │ │ │ ├── config/ # 配置管理
467
+ │ │ │ └── utils/ # 工具函数
468
+ │ │ └── package.json
469
+ │ │
470
+ │ ├── 📁 vscode-ide-companion/ # VS Code CLI 伴侣扩展
471
+ │ │ ├── src/
472
+ │ │ │ └── extension.ts # 扩展入口
473
+ │ │ └── package.json
474
+ │ │
475
+ │ └── 📁 vscode-ui-plugin/ # VS Code 完整 UI 插件
476
+ │ ├── src/ # 扩展源码
477
+ │ ├── webview/ # React Webview 前端
478
+ │ └── package.json
479
+
480
+ ├── 📁 docs/ # 文档目录
481
+ │ ├── architecture.md # 架构设计
482
+ │ ├── hooks-user-guide.md # Hooks 使用指南
483
+ │ ├── mcp-improvements-summary.md # MCP 集成说明
484
+ │ └── ...
485
+
486
+ ├── 📁 scripts/ # 构建和工具脚本
487
+ │ ├── build.js # 主构建脚本
488
+ │ ├── build_package.js # 包构建
489
+ │ ├── clean.js # 清理脚本
490
+ │ └── ...
491
+
492
+ ├── 📄 package.json # 根配置 (Workspaces)
493
+ ├── 📄 tsconfig.json # TypeScript 配置
494
+ ├── 📄 eslint.config.js # ESLint 配置
495
+ ├── 📄 esbuild.config.js # esbuild 打包配置
496
+ ├── 📄 EasyCode_Code_Whitepaper.md # 产品白皮书
497
+ ├── 📄 EASYCODE.md # 项目 AI 开发规范
498
+ └── 📄 LICENSE # Apache 2.0 许可证
499
+ ```
500
+
501
+ ### 技术栈详解
502
+
503
+ | 类别 | 技术 | 说明 |
504
+ |:---:|:---|:---|
505
+ | **语言** | TypeScript 5.x | 强类型,提升代码质量 |
506
+ | **运行时** | Node.js 20+ | 现代 JavaScript 运行时 |
507
+ | **CLI UI** | React + Ink | 声明式终端 UI 框架 |
508
+ | **构建** | esbuild | 极速打包,毫秒级构建 |
509
+ | **测试** | Vitest | 现代化单元测试框架 |
510
+ | **代码规范** | ESLint + Prettier | 统一代码风格 |
511
+ | **包管理** | npm Workspaces | Monorepo 管理 |
512
+ | **AI SDK** | @google/genai | Google Gemini API |
513
+ | **MCP** | @modelcontextprotocol/sdk | MCP 协议实现 |
514
+
515
+ ### 交互流程
516
+
517
+ ```
518
+ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐
519
+ │ 用户输入 │────▶│ CLI 包 │────▶│ Core 包 │
520
+ │ (终端) │ │ (UI/交互) │ │ (业务逻辑) │
521
+ └─────────────┘ └─────────────┘ └──────┬──────┘
522
+
523
+ ┌──────────────────────────┼──────────────────────────┐
524
+ │ │ │
525
+ ▼ ▼ ▼
526
+ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐
527
+ │ AI Model │ │ Tools │ │ MCP │
528
+ │ (Gemini) │ │ (Shell/File)│ │ Servers │
529
+ └─────────────┘ └─────────────┘ └─────────────┘
530
+ ```
531
+
532
+ ---
533
+
534
+ ## 🔌 VS Code 扩展
535
+
536
+ Easy Code 提供两个 VS Code 扩展,满足不同使用场景:
537
+
538
+ ### 📡 IDE Companion(CLI 伴侣)
539
+
540
+ **轻量级扩展**,让 VS Code 与终端中运行的 CLI 无缝连接。
541
+
542
+ **功能:**
543
+ - 感知当前打开的文件
544
+ - 获取选中的代码片段
545
+ - 与 CLI 实时同步工作区状态
546
+
547
+ **构建方法:**
548
+
549
+ ```bash
550
+ cd packages/vscode-ide-companion
551
+
552
+ # 安装依赖
553
+ npm install
554
+
555
+ # 构建
556
+ npm run build
557
+
558
+ # 打包为 .vsix
559
+ npm run package
560
+ ```
561
+
562
+ ### 🎨 UI Plugin(图形化插件)
563
+
564
+ **完整功能的图形化 AI 编码助手**。
565
+
566
+ **功能:**
567
+ - 📱 侧边栏 AI 对话窗口
568
+ - 🖱️ 右键菜单代码操作
569
+ - 解释选中代码
570
+ - 优化代码
571
+ - 生成单元测试
572
+ - 添加到当前对话
573
+ - ✨ 代码内联补全建议
574
+ - 🔌 MCP 服务器状态管理
575
+ - 📜 自定义规则管理
576
+ - ⏪ 版本历史和回滚
577
+
578
+ **构建方法:**
579
+
580
+ ```bash
581
+ cd packages/vscode-ui-plugin
582
+
583
+ # 安装扩展依赖
584
+ npm install
585
+
586
+ # 构建 Webview 前端(首次需要)
587
+ cd webview
588
+ npm install
589
+ npm run build
590
+ cd ..
591
+
592
+ # 构建扩展
593
+ npm run build
594
+
595
+ # 打包为 .vsix
596
+ npm run package
597
+ ```
598
+
599
+ **安装扩展:**
600
+
601
+ 1. 打开 VS Code
602
+ 2. 按 `Ctrl+Shift+P` (Windows/Linux) 或 `Cmd+Shift+P` (macOS)
603
+ 3. 输入 "Install from VSIX"
604
+ 4. 选择生成的 `.vsix` 文件
605
+
606
+ ---
607
+
608
+ ## 🛠️ 内置工具系统
609
+
610
+ Easy Code 的 AI 通过工具系统与外部环境交互。所有工具都经过精心设计,确保安全性和可控性。
611
+
612
+ ### 文件操作工具
613
+
614
+ | 工具 | 说明 | 安全级别 |
615
+ |:---|:---|:---:|
616
+ | `read_file` | 读取文件内容,支持文本、图片、PDF、Excel、Word | 🟢 只读 |
617
+ | `read_many_files` | 批量读取多个文件,支持 glob 模式 | 🟢 只读 |
618
+ | `write_file` | 创建新文件或覆盖写入 | 🟡 需确认 |
619
+ | `replace` | 精准替换文件中的特定内容 | 🟡 需确认 |
620
+ | `delete_file` | 删除文件(会保存备份以便恢复) | 🔴 需确认 |
621
+
622
+ ### 搜索工具
623
+
624
+ | 工具 | 说明 | 安全级别 |
625
+ |:---|:---|:---:|
626
+ | `glob` | 按模式搜索文件名,支持 `**/*.ts` 等模式 | 🟢 只读 |
627
+ | `grep` | 在文件内容中搜索正则表达式 (ripgrep) | 🟢 只读 |
628
+ | `ls` | 列出目录内容 | 🟢 只读 |
629
+
630
+ ### 命令执行
631
+
632
+ | 工具 | 说明 | 安全级别 |
633
+ |:---|:---|:---:|
634
+ | `shell` | 执行 Shell 命令 (bash/powershell) | 🔴 需确认 |
635
+
636
+ ### 网络工具
637
+
638
+ | 工具 | 说明 | 安全级别 |
639
+ |:---|:---|:---:|
640
+ | `web_fetch` | 抓取网页内容,支持本地和远程 URL | 🟢 只读 |
641
+ | `web_search` | Google 搜索 | 🟢 只读 |
642
+
643
+ ### 高级工具
644
+
645
+ | 工具 | 说明 | 安全级别 |
646
+ |:---|:---|:---:|
647
+ | `task` | 启动代码分析子 Agent | 🟢 只读 |
648
+ | `mcp_tool` | 调用 MCP 服务器提供的工具 | 🟡 视工具而定 |
649
+ | `todo_write` | 管理任务列表 | 🟢 只读 |
650
+ | `memory` | 保存/读取长期记忆 | 🟢 只读 |
651
+
652
+ ### 代码质量工具
653
+
654
+ | 工具 | 说明 | 安全级别 |
655
+ |:---|:---|:---:|
656
+ | `read_lints` | 读取代码 Linter 错误 | 🟢 只读 |
657
+ | `lint_fix` | 自动修复 Linter 错误 | 🟡 需确认 |
658
+
659
+ ---
660
+
661
+ ## 🔗 MCP 协议支持
662
+
663
+ **Model Context Protocol (MCP)** 是 Easy Code 实现深度上下文理解的核心协议。
664
+
665
+ ### 什么是 MCP?
666
+
667
+ MCP 允许 AI 模型:
668
+ - 连接外部数据源和工具
669
+ - 获取实时信息
670
+ - 与第三方服务交互
671
+
672
+ ### 配置 MCP 服务器
673
+
674
+ 在项目根目录创建 `.easycode/settings.json`:
675
+
676
+ #### 方式一:标准模式(通过命令启动)
677
+
678
+ 适用于本地 MCP 服务器,通过命令行启动进程。
679
+
680
+ ```json
681
+ {
682
+ "mcpServers": {
683
+ "filesystem": {
684
+ "command": "npx",
685
+ "args": ["-y", "@anthropic/mcp-server-filesystem", "/path/to/allowed/dir"]
686
+ },
687
+ "github": {
688
+ "command": "npx",
689
+ "args": ["-y", "@anthropic/mcp-server-github"],
690
+ "env": {
691
+ "GITHUB_TOKEN": "your-token"
692
+ }
693
+ }
694
+ }
695
+ }
696
+ ```
697
+
698
+ **字段说明:**
699
+ - `command`(必需):启动服务器的命令
700
+ - `args`(可选):命令参数数组
701
+ - `env`(可选):环境变量对象
702
+ - `cwd`(可选):工作目录
703
+ - `timeout`(可选):请求超时(毫秒)
704
+ - `trust`(可选):信任服务器,跳过确认
705
+ - `includeTools`(可选):白名单,仅启用指定工具
706
+ - `excludeTools`(可选):黑名单,排除指定工具
707
+
708
+ #### 方式二:Streamable HTTP 模式(推荐用于云服务)
709
+
710
+ 适用于支持 HTTP 的远程 MCP 服务器,无需本地启动进程。
711
+
712
+ ```json
713
+ {
714
+ "mcpServers": {
715
+ "Web-Search-by-Z.ai": {
716
+ "httpUrl": "https://open.bigmodel.cn/api/mcp-broker/proxy/web-search/mcp",
717
+ "headers": {
718
+ "Authorization": "Bearer **************************"
719
+ }
720
+ },
721
+ "myHttpServer": {
722
+ "httpUrl": "https://api.example.com/mcp/endpoint",
723
+ "headers": {
724
+ "Authorization": "Bearer YOUR_API_KEY",
725
+ "Custom-Header": "custom-value"
726
+ }
727
+ }
728
+ }
729
+ }
730
+ ```
731
+
732
+ **Streamable HTTP 模式字段说明:**
733
+ - `httpUrl`(必需):MCP 服务器的 HTTP 端点 URL
734
+ - `headers`(可选):HTTP 请求头对象,用于认证或传递自定义信息
735
+ - 常用认证方式:`Authorization: Bearer <token>`
736
+ - 其他字段(`includeTools`、`excludeTools`、`trust` 等)同样适用
737
+
738
+ **两种模式对比:**
739
+
740
+ | 特性 | 标准模式 | Streamable HTTP 模式 |
741
+ |-----|---------|---------------------|
742
+ | **连接方式** | 本地启动进程 | HTTP 请求 |
743
+ | **适用场景** | 本地 MCP 服务器 | 云服务、远程 MCP |
744
+ | **配置复杂度** | 需要配置命令、路径 | 只需 URL 和可选 Headers |
745
+ | **资源占用** | 本地进程资源 | 无本地进程 |
746
+ | **网络要求** | 无需网络 | 需要网络连接 |
747
+
748
+ ### 管理 MCP 服务器
749
+
750
+ ```bash
751
+ # 查看所有 MCP 服务器状态
752
+ /mcp
753
+
754
+ # 添加新服务器
755
+ /mcp add github
756
+
757
+ # 刷新服务器连接
758
+ /mcp refresh github
759
+
760
+ # 进行 OAuth 认证
761
+ /mcp auth github
762
+ ```
763
+
764
+ ---
765
+
766
+ ## 🤖 自定义模型支持
767
+
768
+ Easy Code 支持配置 OpenAI 兼容格式和 Anthropic Claude API 格式的自定义模型,让你可以使用任何兼容的 AI 服务。
769
+
770
+ ### 为什么使用自定义模型?
771
+
772
+ - 🔓 **自由选择** - 使用你最喜爱的 AI 服务商
773
+ - 💰 **成本控制** - 直接向服务商付费,无需通过中间商
774
+ - 🏠 **本地部署** - 支持本地模型(LM Studio, Ollama 等)
775
+ - 🚀 **灵活配置** - 根据需求调整参数和端点
776
+
777
+ ### 快速配置
778
+
779
+ #### 方式一:使用模型管理界面(推荐)
780
+
781
+ 在 CLI 中输入:
782
+
783
+ ```bash
784
+ /model
785
+ ```
786
+
787
+ 然后选择 **"Model Management"**(模型管理)选项,按向导提示填写:
788
+ 1. 选择提供商类型(OpenAI Compatible / Anthropic Claude)
789
+ 2. 输入显示名称
790
+ 3. 输入 API 基础 URL
791
+ 4. 输入 API 密钥(推荐使用环境变量格式 `${OPENAI_API_KEY}`)
792
+ 5. 输入模型 ID
793
+ 6. 设置最大 Token 数(可选)
794
+ 7. 确认配置
795
+
796
+ #### 方式二:手动编辑配置文件
797
+
798
+ 编辑 `~/.easycode-user/custom-models.json`:
799
+
800
+ ```json
801
+ {
802
+ "models": [
803
+ {
804
+ "displayName": "GPT-4 Turbo",
805
+ "provider": "openai",
806
+ "baseUrl": "https://api.openai.com/v1",
807
+ "apiKey": "${OPENAI_API_KEY}",
808
+ "modelId": "gpt-4-turbo",
809
+ "maxTokens": 128000,
810
+ "enabled": true
811
+ },
812
+ {
813
+ "displayName": "Claude Sonnet",
814
+ "provider": "anthropic",
815
+ "baseUrl": "https://api.anthropic.com",
816
+ "apiKey": "${ANTHROPIC_API_KEY}",
817
+ "modelId": "claude-sonnet-4-5",
818
+ "maxTokens": 200000,
819
+ "enabled": true
820
+ }
821
+ ]
822
+ }
823
+ ```
824
+
825
+ ### 支持的提供商
826
+
827
+ #### OpenAI Compatible (`openai`)
828
+
829
+ 适用于任何遵循 OpenAI Chat Completions 格式的 API:
830
+
831
+ - **OpenAI 官方 API**
832
+ ```json
833
+ {
834
+ "displayName": "GPT-4 Turbo",
835
+ "provider": "openai",
836
+ "baseUrl": "https://api.openai.com/v1",
837
+ "apiKey": "${OPENAI_API_KEY}",
838
+ "modelId": "gpt-4-turbo"
839
+ }
840
+ ```
841
+
842
+ - **Azure OpenAI**
843
+ ```json
844
+ {
845
+ "displayName": "Azure GPT-4",
846
+ "provider": "openai",
847
+ "baseUrl": "https://your-resource.openai.azure.com/openai/deployments/your-deployment",
848
+ "apiKey": "${AZURE_OPENAI_KEY}",
849
+ "modelId": "gpt-4",
850
+ "headers": {
851
+ "api-version": "2024-02-01"
852
+ }
853
+ }
854
+ ```
855
+
856
+ - **本地模型(LM Studio, Ollama)**
857
+ ```json
858
+ {
859
+ "displayName": "Local Llama",
860
+ "provider": "openai",
861
+ "baseUrl": "http://localhost:1234/v1",
862
+ "apiKey": "not-needed",
863
+ "modelId": "llama-3-70b"
864
+ }
865
+ ```
866
+
867
+ - **第三方服务(Groq, Together AI 等)**
868
+ ```json
869
+ {
870
+ "displayName": "Groq Llama 3",
871
+ "provider": "openai",
872
+ "baseUrl": "https://api.groq.com/openai/v1",
873
+ "apiKey": "${GROQ_API_KEY}",
874
+ "modelId": "llama-3-70b-8192"
875
+ }
876
+ ```
877
+
878
+ #### Anthropic Claude (`anthropic`)
879
+
880
+ 适用于 Claude API 端点,支持扩展思考功能:
881
+
882
+ ```json
883
+ {
884
+ "displayName": "Claude Sonnet (Thinking)",
885
+ "provider": "anthropic",
886
+ "baseUrl": "https://api.anthropic.com",
887
+ "apiKey": "${ANTHROPIC_API_KEY}",
888
+ "modelId": "claude-sonnet-4-5",
889
+ "enableThinking": true
890
+ }
891
+ ```
892
+
893
+ ### 配置字段说明
894
+
895
+ **必需字段:**
896
+
897
+ | 字段 | 说明 | 示例 |
898
+ |-----|------|-----|
899
+ | `displayName` | 显示名称 | `GPT-4 Turbo` |
900
+ | `provider` | 提供商类型 | `openai` 或 `anthropic` |
901
+ | `baseUrl` | API 基础 URL | `https://api.openai.com/v1` |
902
+ | `apiKey` | API 密钥 | `${OPENAI_API_KEY}` |
903
+ | `modelId` | 模型名称 | `gpt-4-turbo` |
904
+
905
+ **可选字段:**
906
+
907
+ | 字段 | 说明 | 默认值 |
908
+ |-----|------|--------|
909
+ | `maxTokens` | 最大上下文窗口 | 视提供商而定 |
910
+ | `enabled` | 是否启用 | `true` |
911
+ | `headers` | 额外 HTTP 请求头 | 无 |
912
+ | `timeout` | 请求超时(毫秒) | `300000` |
913
+ | `enableThinking` | 启用 Anthropic 扩展思考 | `false` |
914
+
915
+ ### 使用自定义模型
916
+
917
+ #### 通过模型选择对话框
918
+
919
+ ```bash
920
+ /model
921
+ ```
922
+
923
+ 自定义模型会显示 `[Custom]` 标签和青色,使用方向键选择。
924
+
925
+ #### 直接切换
926
+
927
+ ```bash
928
+ /model custom:openai:gpt-4-turbo@abc123
929
+ ```
930
+
931
+ ### 环境变量设置
932
+
933
+ 推荐使用环境变量存储 API 密钥:
934
+
935
+ **Linux/macOS:**
936
+ ```bash
937
+ export OPENAI_API_KEY="sk-your-key-here"
938
+ export ANTHROPIC_API_KEY="sk-ant-your-key-here"
939
+ ```
940
+
941
+ **Windows PowerShell:**
942
+ ```powershell
943
+ $env:OPENAI_API_KEY="sk-your-key-here"
944
+ $env:ANTHROPIC_API_KEY="sk-ant-your-key-here"
945
+ ```
946
+
947
+ ### 特性与限制
948
+
949
+ ✅ **支持的功能:**
950
+ - 流式和非流式响应
951
+ - 工具调用(Function Calling)
952
+ - 多模态输入(文本、图片)
953
+ - 与 Easy Code 所有功能集成
954
+
955
+ ⚠️ **注意:**
956
+ - 自定义模型不消耗 EasyCode 积分
957
+ - 需直接向 API 提供商付费
958
+ - 某些高级功能可能因提供商限制而不可用
959
+ - Token 计数由提供商决定
960
+
961
+ ### 相关文档
962
+
963
+ - 📖 [自定义模型快速入门](./docs/custom-models-quickstart.md)
964
+ - 📖 [自定义模型完整指南](./docs/custom-models-guide.md)
965
+ - 📖 [自定义模型架构说明](./docs/custom-models-architecture.md)
966
+
967
+ ---
968
+
969
+ ## 🤝 派发任务给本机 Claude Code / Codex
970
+
971
+ Easy Code 可以作为 **ACP 编排方**,把编码任务派发给你本机安装并登录的 **Claude Code** 或 **Codex** 执行——尤其适合飞书网关模式:你在飞书里说一句话,Easy Code 要么自己干,要么转交给本机的 cc / codex 干。
972
+
973
+ ### 前提
974
+
975
+ - 本机已安装并登录 **Claude Code** 和/或 **Codex**(派发会复用其本地登录态,不需要额外配置密钥)。
976
+ - Easy Code 通过官方 ACP 桥按需拉起(默认 `npx` 运行,不打入安装包;桥版本已固定,避免上游破坏性更新影响已调好的环境):
977
+ - Claude Code → `@agentclientprotocol/claude-agent-acp@0.44.0`,可用 `EASYCODE_CLAUDE_CODE_ACP_CMD` 覆盖启动命令(也可借此浮动到 latest)。
978
+ - Codex → `@zed-industries/codex-acp@0.16.0`,可用 `EASYCODE_CODEX_ACP_CMD` 覆盖启动命令。
979
+
980
+ ### 派发方式
981
+
982
+ | 方式 | 说明 |
983
+ |:---|:---|
984
+ | **模型自主** | Easy Code 的 AI 会按任务自行判断,必要时调用内置工具 `delegate_to_agent` 派发(可选 `agent: claude-code\|codex`)。 |
985
+ | **显式强制(飞书)** | 消息前加 `@cc`(或 `/cc`)派发给 Claude Code、`@codex`(或 `/codex`、`@cdx`)派发给 Codex。例:`@cc 给 src/foo.ts 加单元测试`、`@codex 写个基准测试`。 |
986
+ | **群默认(飞书)** | `/bind <项目路径> --agent claude-code\|codex` 把整个群的默认执行方设为对应 agent;`/bind --agent self` 改回 Easy Code 自己。 |
987
+
988
+ 派发期间,外部 agent 的执行进度(消息与工具调用)会通过飞书 CardKit 卡片**实时流式**回传,最终结果汇总返回。
989
+
990
+ ### 📊 多会话管理(飞书 `/sessions`)
991
+
992
+ 在飞书里发送 **`/sessions`**(别名 **`/会话`**)会推送一张 **CardKit 2.0 Dashboard 卡片**,集中展示本机的 Agent 会话:
993
+
994
+ - **🚀 本机任务**:正在运行 / 最近的派发任务,带实时状态——状态徽章(🟢运行中 / ✅完成 / ❌失败)、当前工具、计划进度(`2/5`)、token 占用(`30%`)、已运行时长。卡片会在任务运行期间**自动刷新**。
995
+ - **🗂️ 可续接的历史会话**:自动发现 Claude Code / Codex 各自本机已有的会话(标题、最近活动时间),并为每条给出续接指令。
996
+
997
+ > 派发任务记录会持久化到 `~/.easycode-user/delegate-tasks/`,**网关重启后历史任务仍可在 `/sessions` 查看**(重启期间运行中的任务会被标记为失败)。
998
+
999
+ ### 🔄 续接已有会话
1000
+
1001
+ 想接着某个历史会话继续(保留完整上下文),用 `resume` 子语法:
1002
+
1003
+ ```text
1004
+ @cc:resume <sessionId> 继续把单元测试补全
1005
+ @codex:resume <sessionId> 把上次的重构收尾
1006
+ ```
1007
+
1008
+ `<sessionId>` 即 `/sessions` 卡片里列出的会话 id。外部 agent 会先 `session/load` 恢复该会话的完整历史,再执行你的新任务。绑定了默认 agent 的群也可直接发 `resume <sessionId> <任务>`。
1009
+
1010
+ > ⚠️ 在飞书无人值守场景下,派发的外部 agent 默认**自动放行权限并可改文件**,请仅对可信项目使用。
1011
+
1012
+ ---
1013
+
1014
+ ## 🪝 Hooks 钩子机制
1015
+
1016
+ Hooks 允许你在关键工作流节点注入自定义逻辑。
1017
+
1018
+ ### 配置 Hooks
1019
+
1020
+ 在 `.easycode/settings.json` 中添加:
1021
+
1022
+ ```json
1023
+ {
1024
+ "hooks": {
1025
+ "preToolExecution": [
1026
+ {
1027
+ "matcher": { "toolName": "write_file" },
1028
+ "action": {
1029
+ "type": "shell",
1030
+ "command": "echo 'About to write file: $TOOL_ARGS'"
1031
+ }
1032
+ }
1033
+ ],
1034
+ "postToolExecution": [
1035
+ {
1036
+ "matcher": { "toolName": "write_file", "exitCode": 0 },
1037
+ "action": {
1038
+ "type": "shell",
1039
+ "command": "npm run lint -- --fix $FILE_PATH"
1040
+ }
1041
+ }
1042
+ ]
1043
+ }
1044
+ }
1045
+ ```
1046
+
1047
+ ### 使用场景
1048
+
1049
+ - **自动格式化** - 文件写入后自动运行 Prettier
1050
+ - **代码检查** - 修改代码后自动运行 ESLint
1051
+ - **提交验证** - 执行 Shell 命令前检查分支
1052
+ - **日志记录** - 记录所有工具调用
1053
+
1054
+ ### 相关文档
1055
+
1056
+ - 📖 [Hooks 使用指南](./docs/hooks-user-guide.md)
1057
+ - 📖 [Hooks 架构设计](./docs/HOOKS_ARCHITECTURE.md)
1058
+ - 📖 [Hooks 示例](./docs/hooks-examples.md)
1059
+
1060
+ ---
1061
+
1062
+ ## ⚙️ 配置文件
1063
+
1064
+ ### 项目配置 `EASYCODE.md`
1065
+
1066
+ 在项目根目录创建 `EASYCODE.md`,为 AI 提供项目特定的上下文和规范:
1067
+
1068
+ ```markdown
1069
+ # 项目概述
1070
+ 这是一个基于 React + TypeScript 的前端项目...
1071
+
1072
+ # 技术栈
1073
+ - React 18
1074
+ - TypeScript 5
1075
+ - Vite
1076
+ - TailwindCSS
1077
+
1078
+ # 代码规范
1079
+ - 使用函数组件和 Hooks
1080
+ - 命名使用 camelCase
1081
+ - 组件文件使用 PascalCase
1082
+
1083
+ # 目录结构说明
1084
+ - src/components/ - 可复用组件
1085
+ - src/pages/ - 页面组件
1086
+ - src/hooks/ - 自定义 Hooks
1087
+ - src/utils/ - 工具函数
1088
+ ```
1089
+
1090
+ 使用 `/init` 命令可以自动生成初始配置。
1091
+
1092
+ ### 用户配置 `.easycode/settings.json`
1093
+
1094
+ ```json
1095
+ {
1096
+ "preferredModel": "gemini-2.0-flash",
1097
+ "theme": "dark",
1098
+ "trimSpaces": true,
1099
+ "mcpServers": {},
1100
+ "hooks": {}
1101
+ }
1102
+ ```
1103
+
1104
+ ---
1105
+
1106
+ ## 🧑‍💻 开发指南
1107
+
1108
+ ### 环境准备
1109
+
1110
+ ```bash
1111
+ # 确保 Node.js 版本 >= 20
1112
+ node --version
1113
+
1114
+ # 克隆仓库
1115
+ git clone https://github.com/OrionStarAI/EasyCodeCode.git
1116
+ cd EasyCode
1117
+
1118
+ # 安装依赖
1119
+ npm install
1120
+ ```
1121
+
1122
+ ### 常用命令
1123
+
1124
+ | 命令 | 说明 |
1125
+ |:---|:---|
1126
+ | `npm install` | 安装所有依赖 |
1127
+ | `npm run build` | 构建所有包 |
1128
+ | `npm run dev` | 开发模式运行(带调试) |
1129
+ | `npm run test` | 运行所有测试 |
1130
+ | `npm run lint` | 代码风格检查 |
1131
+ | `npm run lint:fix` | 自动修复代码风格 |
1132
+ | `npm run format` | 格式化代码 (Prettier) |
1133
+ | `npm run typecheck` | TypeScript 类型检查 |
1134
+ | `npm run clean` | 清理构建产物和缓存 |
1135
+ | `npm run pack:prod` | 生产环境打包 |
1136
+ | `npm run pack:vscode` | 打包 VS Code 插件 |
1137
+
1138
+ ### 开发流程
1139
+
1140
+ 1. **修改代码** - 在相应的 `packages/*/src` 目录下修改
1141
+ 2. **构建** - 运行 `npm run build`
1142
+ 3. **测试** - 运行 `npm run dev` 本地测试
1143
+ 4. **检查** - 运行 `npm run lint && npm run typecheck`
1144
+ 5. **提交** - 确保测试通过后提交代码
1145
+
1146
+ ### 调试技巧
1147
+
1148
+ ```bash
1149
+ # 启用调试模式
1150
+ npm run debug
1151
+
1152
+ # 启用文件日志
1153
+ LOG_TO_FILE=true npm run dev
1154
+
1155
+ # 查看详细日志
1156
+ FILE_DEBUG=1 npm run dev
1157
+ ```
1158
+
1159
+ ### 调试控制台功能
1160
+
1161
+ **Ctrl+O 三状态循环**:
1162
+ - **第1次**:打开调试控制台,显示全部日志
1163
+ - **第2次**:切换到仅错误模式,显示黄色 `[ERRORS ONLY]` 标识
1164
+ - **第3次**:关闭调试控制台
1165
+
1166
+ **智能错误过滤**:自动识别并显示错误、异常、堆栈跟踪等关键信息,帮助开发者快速定位问题。
1167
+
1168
+ ### 添加新工具
1169
+
1170
+ 1. 在 `packages/core/src/tools/` 创建工具文件
1171
+ 2. 实现工具接口
1172
+ 3. 在 `tool-registry.ts` 注册工具
1173
+ 4. 添加单元测试
1174
+
1175
+ ---
1176
+
1177
+ ## ❓ 常见问题
1178
+
1179
+ ### 安装问题
1180
+
1181
+ <details>
1182
+ <summary><b>Q: npm install 失败,提示权限错误</b></summary>
1183
+
1184
+ **A:** 尝试以下方法:
1185
+
1186
+ ```bash
1187
+ # 方法 1: 使用 --unsafe-perm
1188
+ npm install -g easycode-ai --unsafe-perm
1189
+
1190
+ # 方法 2: 修改 npm 全局目录权限
1191
+ mkdir ~/.npm-global
1192
+ npm config set prefix '~/.npm-global'
1193
+ export PATH=~/.npm-global/bin:$PATH
1194
+ ```
1195
+
1196
+ </details>
1197
+
1198
+ <details>
1199
+ <summary><b>Q: 提示 Node.js 版本过低</b></summary>
1200
+
1201
+ **A:** Easy Code 需要 Node.js 20+。使用 nvm 管理版本:
1202
+
1203
+ ```bash
1204
+ nvm install 20
1205
+ nvm use 20
1206
+ ```
1207
+
1208
+ </details>
1209
+
1210
+ ### 使用问题
1211
+
1212
+ <details>
1213
+ <summary><b>Q: 如何切换 AI 模型?</b></summary>
1214
+
1215
+ **A:** 使用 `/model` 命令或启动时指定:
1216
+
1217
+ ```bash
1218
+ # 交互模式
1219
+ /model gemini-2.0-flash
1220
+
1221
+ # 启动时指定
1222
+ easycode -m gemini-2.0-flash
1223
+ ```
1224
+
1225
+ </details>
1226
+
1227
+ <details>
1228
+ <summary><b>Q: 如何继续之前的会话?</b></summary>
1229
+
1230
+ **A:** 使用 `-c` 参数或 `/session` 命令:
1231
+
1232
+ ```bash
1233
+ # 继续最近会话
1234
+ easycode -c
1235
+
1236
+ # 列出所有会话
1237
+ /session list
1238
+
1239
+ # 选择特定会话
1240
+ /session select 1
1241
+ ```
1242
+
1243
+ </details>
1244
+
1245
+ <details>
1246
+ <summary><b>Q: YOLO 模式是什么?</b></summary>
1247
+
1248
+ **A:** YOLO 模式下,AI 的所有操作会自动执行,无需用户确认。⚠️ 谨慎使用!
1249
+
1250
+ ```bash
1251
+ # 启用
1252
+ easycode -y
1253
+ # 或
1254
+ /yolo on
1255
+ ```
1256
+
1257
+ </details>
1258
+
1259
+ ---
1260
+
1261
+ ## 🤝 贡献指南
1262
+
1263
+ 我们欢迎社区贡献!无论是 Bug 修复、新功能还是文档改进。
1264
+
1265
+ ### 贡献流程
1266
+
1267
+ 1. **Fork** 本仓库
1268
+ 2. 创建特性分支
1269
+ ```bash
1270
+ git checkout -b feature/AmazingFeature
1271
+ ```
1272
+ 3. 提交改动
1273
+ ```bash
1274
+ git commit -m 'feat: add some amazing feature'
1275
+ ```
1276
+ 4. 推送分支
1277
+ ```bash
1278
+ git push origin feature/AmazingFeature
1279
+ ```
1280
+ 5. 提交 **Pull Request**
1281
+
1282
+ ### 提交规范
1283
+
1284
+ 使用 [Conventional Commits](https://www.conventionalcommits.org/) 规范:
1285
+
1286
+ - `feat:` 新功能
1287
+ - `fix:` Bug 修复
1288
+ - `docs:` 文档更新
1289
+ - `style:` 代码格式
1290
+ - `refactor:` 重构
1291
+ - `test:` 测试相关
1292
+ - `chore:` 构建/工具
1293
+
1294
+ ### 报告问题
1295
+
1296
+ 发现 Bug 或有功能建议?请 [创建 Issue](https://github.com/OrionStarAI/EasyCodeCode/issues),包含:
1297
+
1298
+ - 问题描述
1299
+ - 复现步骤
1300
+ - 期望行为
1301
+ - 环境信息(OS、Node 版本等)
1302
+
1303
+ ---
1304
+
1305
+ ## ⭐ Star History
1306
+
1307
+ [![Star History Chart](https://api.star-history.com/svg?repos=OrionStarAI/EasyCodeCode&type=date&legend=top-left)](https://www.star-history.com/#OrionStarAI/EasyCodeCode&type=date&legend=top-left)
1308
+
1309
+ ---
1310
+
1311
+ ## 🗺️ 路线图
1312
+
1313
+ ### 短期目标 (v1.x)
1314
+
1315
+ - [ ] 优化 MCP 上下文理解能力
1316
+ - [ ] 扩展工具系统,支持更多场景
1317
+ - [ ] 增强 VS Code 插件体验
1318
+ - [ ] 支持更多 AI 模型
1319
+
1320
+ ### 中期目标 (v2.x)
1321
+
1322
+ - [ ] 多模态支持(图表、设计稿)
1323
+ - [ ] 深度架构分析和设计辅助
1324
+ - [ ] 开放插件生态系统
1325
+ - [ ] 团队协作功能
1326
+
1327
+ ### 长期愿景
1328
+
1329
+ - [ ] 自主学习和进化
1330
+ - [ ] 预测开发需求
1331
+ - [ ] 全自动化软件工程
1332
+
1333
+ ---
1334
+
1335
+ ## 📄 许可证与法律信息
1336
+
1337
+ 本项目基于 [Apache License 2.0](LICENSE) 开源。
1338
+
1339
+ | 📄 Legal | |
1340
+ |:---|:---|
1341
+ | **License** | [Apache License 2.0](LICENSE) |
1342
+ | **Terms of Service** | [Terms & Privacy](https://easycode.bot/terms) |
1343
+ | **Privacy Policy** | [Privacy Policy](https://easycode.bot/privacy) |
1344
+ | **Security** | [Security Policy](SECURITY.md) |
1345
+
1346
+ ```
1347
+ Copyright 2025 Easy Code Team
1348
+
1349
+ Licensed under the Apache License, Version 2.0 (the "License");
1350
+ you may not use this file except in compliance with the License.
1351
+ You may obtain a copy of the License at
1352
+
1353
+ http://www.apache.org/licenses/LICENSE-2.0
1354
+ ```
1355
+
1356
+ ---
1357
+
1358
+ ## 🔗 相关链接
1359
+
1360
+ <div align="center">
1361
+
1362
+ | 资源 | 链接 |
1363
+ |:---:|:---|
1364
+ | 🌐 **官方网站** | [https://easycode.bot](https://easycode.bot) |
1365
+ | 📦 **npm 包** | [https://www.npmjs.com/package/easycode-ai](https://www.npmjs.com/package/easycode-ai) |
1366
+ | 📖 **白皮书** | [EasyCode_Code_Whitepaper.md](./EasyCode_Code_Whitepaper.md) |
1367
+ | 🐛 **问题反馈** | [GitHub Issues](https://github.com/OrionStarAI/EasyCodeCode/issues) |
1368
+ | 💬 **讨论区** | [GitHub Discussions](https://github.com/OrionStarAI/EasyCodeCode/discussions) |
1369
+
1370
+ </div>
1371
+
1372
+ ---
1373
+
1374
+ <div align="center">
1375
+
1376
+ ### 💬 "AI 不只是工具,更是每位开发者的伙伴。"
1377
+
1378
+ <br>
1379
+
1380
+ **⭐ 如果这个项目对你有帮助,请给我们一个 Star!⭐**
1381
+
1382
+ <br>
1383
+
1384
+ 🪄 **Happy Coding with Easy Code!** 💻✨
1385
+
1386
+ <br>
1387
+
1388
+ ---
1389
+
1390
+ Made with ❤️ by [Easy Code Team](https://github.com/OrionStarAI)
1391
+
1392
+ </div>