feihong-code 0.2.3 → 0.6.0

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 (180) hide show
  1. package/.github/FUNDING.yml +4 -0
  2. package/.github/ISSUE_TEMPLATE/bug_report.md +37 -37
  3. package/.github/ISSUE_TEMPLATE/config.yml +14 -14
  4. package/.github/ISSUE_TEMPLATE/feature_request.md +28 -28
  5. package/.github/PULL_REQUEST_TEMPLATE.md +46 -46
  6. package/.github/SECURITY.md +67 -67
  7. package/.github/dependabot.yml +16 -0
  8. package/.github/workflows/ci.yml +1 -1
  9. package/AGENT-GUIDE.md +382 -237
  10. package/CHANGELOG.md +392 -0
  11. package/CODE_OF_CONDUCT.md +56 -56
  12. package/CONTRIBUTING.md +68 -68
  13. package/LICENSE +22 -22
  14. package/README.md +586 -522
  15. package/README.self-evolve.md +274 -0
  16. package/dist/agent/code-review.js +2 -0
  17. package/dist/agent/code-review.js.map +1 -1
  18. package/dist/agent/code-writer.js +74 -18
  19. package/dist/agent/code-writer.js.map +1 -1
  20. package/dist/agent/context-compactor.js +13 -4
  21. package/dist/agent/context-compactor.js.map +1 -1
  22. package/dist/agent/experience.js +319 -84
  23. package/dist/agent/experience.js.map +1 -1
  24. package/dist/agent/orchestrator.js +233 -71
  25. package/dist/agent/orchestrator.js.map +1 -1
  26. package/dist/agent/planner.js +30 -7
  27. package/dist/agent/planner.js.map +1 -1
  28. package/dist/agent/prompts.js +9 -0
  29. package/dist/agent/prompts.js.map +1 -1
  30. package/dist/agent/quality-gate.js +10 -4
  31. package/dist/agent/quality-gate.js.map +1 -1
  32. package/dist/agent/repo-context.js +181 -0
  33. package/dist/agent/repo-context.js.map +1 -0
  34. package/dist/agent/repo-reader.js +92 -99
  35. package/dist/agent/repo-reader.js.map +1 -1
  36. package/dist/agent/self-heal.js +80 -60
  37. package/dist/agent/self-heal.js.map +1 -1
  38. package/dist/agent/self-improver.js +65 -61
  39. package/dist/agent/self-improver.js.map +1 -1
  40. package/dist/agent/subagent-summary.js +31 -0
  41. package/dist/agent/subagent-summary.js.map +1 -0
  42. package/dist/agent/subagent.js +52 -2
  43. package/dist/agent/subagent.js.map +1 -1
  44. package/dist/agent/symbol-index.js +160 -0
  45. package/dist/agent/symbol-index.js.map +1 -0
  46. package/dist/agent/team.js +193 -0
  47. package/dist/agent/team.js.map +1 -0
  48. package/dist/cli/commands.js +124 -143
  49. package/dist/cli/commands.js.map +1 -1
  50. package/dist/cli/index.js +113 -106
  51. package/dist/cli/index.js.map +1 -1
  52. package/dist/cli/repl.js +82 -7
  53. package/dist/cli/repl.js.map +1 -1
  54. package/dist/cli/run.js +600 -95
  55. package/dist/cli/run.js.map +1 -1
  56. package/dist/cli/tui.js +145 -0
  57. package/dist/cli/tui.js.map +1 -0
  58. package/dist/cli/version.js +1 -1
  59. package/dist/enterprise/audit.js +145 -23
  60. package/dist/enterprise/audit.js.map +1 -1
  61. package/dist/enterprise/index.js +14 -11
  62. package/dist/enterprise/index.js.map +1 -1
  63. package/dist/enterprise/policy.js +22 -10
  64. package/dist/enterprise/policy.js.map +1 -1
  65. package/dist/harness/executor.js +127 -0
  66. package/dist/harness/executor.js.map +1 -0
  67. package/dist/harness/harness.js +87 -0
  68. package/dist/harness/harness.js.map +1 -0
  69. package/dist/harness/index.js +31 -0
  70. package/dist/harness/index.js.map +1 -0
  71. package/dist/harness/loader.js +138 -0
  72. package/dist/harness/loader.js.map +1 -0
  73. package/dist/harness/reporter.js +34 -0
  74. package/dist/harness/reporter.js.map +1 -0
  75. package/dist/harness/types.js +10 -0
  76. package/dist/harness/types.js.map +1 -0
  77. package/dist/harness/verifier.js +48 -0
  78. package/dist/harness/verifier.js.map +1 -0
  79. package/dist/hello.js +14 -0
  80. package/dist/hello.js.map +1 -0
  81. package/dist/memory/auto-summarize.js +208 -0
  82. package/dist/memory/auto-summarize.js.map +1 -0
  83. package/dist/memory/index.js +228 -0
  84. package/dist/memory/index.js.map +1 -0
  85. package/dist/models/model-router.js +100 -27
  86. package/dist/models/model-router.js.map +1 -1
  87. package/dist/models/model.dto.js +25 -3
  88. package/dist/models/model.dto.js.map +1 -1
  89. package/dist/models/providers/ollama.provider.js +12 -0
  90. package/dist/models/providers/ollama.provider.js.map +1 -1
  91. package/dist/models/providers/openai-compatible.provider.js +14 -1
  92. package/dist/models/providers/openai-compatible.provider.js.map +1 -1
  93. package/dist/plugins/plugin-loader.js +179 -0
  94. package/dist/plugins/plugin-loader.js.map +1 -0
  95. package/dist/runtime/event-log.js.map +1 -1
  96. package/dist/runtime/hooks.js +80 -0
  97. package/dist/runtime/hooks.js.map +1 -0
  98. package/dist/self-evolve/hook.js +60 -0
  99. package/dist/self-evolve/hook.js.map +1 -0
  100. package/dist/self-evolve/hook.ts +80 -0
  101. package/dist/self-evolve/manager.d.ts +8 -0
  102. package/dist/self-evolve/manager.js +401 -0
  103. package/dist/shared/config.js +35 -3
  104. package/dist/shared/config.js.map +1 -1
  105. package/dist/shared/errors.js +6 -2
  106. package/dist/shared/errors.js.map +1 -1
  107. package/dist/shared/i18n.js +535 -0
  108. package/dist/shared/i18n.js.map +1 -0
  109. package/dist/shared/secure-store.js +117 -0
  110. package/dist/shared/secure-store.js.map +1 -0
  111. package/dist/skills/grill.js +2 -1
  112. package/dist/skills/grill.js.map +1 -1
  113. package/dist/skills/self-heal.js +73 -0
  114. package/dist/skills/self-heal.js.map +1 -0
  115. package/dist/skills/skill-loader.js +131 -0
  116. package/dist/skills/skill-loader.js.map +1 -0
  117. package/dist/skills/skill-market.js +195 -0
  118. package/dist/skills/skill-market.js.map +1 -0
  119. package/dist/tools/analysis/code-analyzer.js +45 -18
  120. package/dist/tools/analysis/code-analyzer.js.map +1 -1
  121. package/dist/tools/index.js +5 -0
  122. package/dist/tools/index.js.map +1 -1
  123. package/dist/tools/mcp/index.js +84 -0
  124. package/dist/tools/mcp/index.js.map +1 -0
  125. package/dist/tools/mcp/mcp-client.js +194 -0
  126. package/dist/tools/mcp/mcp-client.js.map +1 -0
  127. package/dist/tools/sandbox.js +126 -0
  128. package/dist/tools/sandbox.js.map +1 -0
  129. package/dist/tools/shell/exec.js +72 -3
  130. package/dist/tools/shell/exec.js.map +1 -1
  131. package/dist/tools/shell/run-shell.tool.js +37 -7
  132. package/dist/tools/shell/run-shell.tool.js.map +1 -1
  133. package/dist/tools/skills/load-skill.tool.js +36 -0
  134. package/dist/tools/skills/load-skill.tool.js.map +1 -0
  135. package/dist/tools/tool.interface.js.map +1 -1
  136. package/dist/tools/tool.registry.js +69 -1
  137. package/dist/tools/tool.registry.js.map +1 -1
  138. package/dist/tools/web/web.tool.js +139 -0
  139. package/dist/tools/web/web.tool.js.map +1 -0
  140. package/dist/web/auth.js +178 -3
  141. package/dist/web/auth.js.map +1 -1
  142. package/dist/web/channels.js +171 -0
  143. package/dist/web/channels.js.map +1 -0
  144. package/dist/web/public/css/style.css +1546 -0
  145. package/dist/web/public/index.html +804 -37
  146. package/dist/web/public/js/api.js +309 -0
  147. package/dist/web/public/js/app.js +1472 -0
  148. package/dist/web/public/js/ui.js +832 -0
  149. package/dist/web/public/js/utils.js +170 -0
  150. package/dist/web/server.js +937 -11
  151. package/dist/web/server.js.map +1 -1
  152. package/dist/web/task-queue.js +470 -0
  153. package/dist/web/task-queue.js.map +1 -0
  154. package/dist/web/web-config.js +143 -0
  155. package/dist/web/web-config.js.map +1 -0
  156. package/docs/App/344/275/277/347/224/250/350/257/264/346/230/216/344/271/246.md +299 -0
  157. package/docs/App/346/212/200/346/234/257/350/257/264/346/230/216/344/271/246.md +554 -0
  158. package/docs/Deployment_Guide_EN.md +288 -0
  159. package/docs/SELF-EVOLVE-GUIDE.md +313 -0
  160. package/docs/Technical_Manual_EN.md +216 -0
  161. package/docs/User_Manual_EN.md +314 -0
  162. package/docs/error-codes.md +198 -0
  163. package/docs/screenshots/cli-demo.png +0 -0
  164. package/docs/screenshots/feature-comparison.png +0 -0
  165. package/docs/screenshots/web-console.png +0 -0
  166. package/docs/self-evolve-implementation.md +165 -0
  167. package/docs/self-evolve.md +166 -0
  168. package/docs//344/272/247/345/223/201/345/274/200/345/217/221/346/226/207/346/241/243.md +614 -614
  169. package/docs//344/274/201/344/270/232/351/203/250/347/275/262/344/270/216/345/220/210/350/247/204.md +267 -267
  170. package/docs//344/275/277/347/224/250/350/257/264/346/230/216/344/271/246.md +318 -358
  171. package/docs//345/270/270/350/247/201/351/227/256/351/242/230/344/270/216/346/225/205/351/232/234/346/216/222/346/237/245.md +130 -130
  172. package/docs//346/212/200/346/234/257/350/257/264/346/230/216/344/271/246.md +216 -303
  173. package/docs//346/236/266/346/236/204/344/270/216API.md +238 -238
  174. package/docs//347/224/250/346/210/267/346/211/213/345/206/214.md +196 -196
  175. package/docs//351/203/250/347/275/262/346/214/207/345/215/227.md +165 -165
  176. package/docs//351/203/250/347/275/262/350/257/264/346/230/216/344/271/246.md +288 -0
  177. package/docs//351/205/215/347/275/256/345/217/202/350/200/203.md +127 -127
  178. package/docs//351/241/265/351/235/242/345/212/237/350/203/275/345/244/215/347/233/230/344/270/216/345/206/222/347/203/237/346/265/213/350/257/225/346/212/245/345/221/212.html +117 -0
  179. package/package.json +108 -109
  180. package/tool-schema.json +117 -46
@@ -1,358 +1,318 @@
1
- # 飞虹 Code(fhcode)使用说明书
2
-
3
- > 本文为飞虹 Code 的**权威用户文档**,面向使用者与运维人员。技术细节见《技术说明书》。
4
- > 版本 0.1.0(稳定版,含 M4 企业能力 + M5 Web 控制台 BETA + M6 自我进化 + M7 编程能力 + M8 自主迭代)。
5
-
6
- **署名**:晋江市飞虹智科技企业管理有限公司 · 飞扬企源研发中心 · 负责人:吴赐虹
7
-
8
- ---
9
-
10
- ## 1. 产品简介
11
-
12
- 飞虹 Code(`fhcode`)是终端 AI 编程智能体。给它一个"目标",它会自动规划、调用工具、反思并完成;支持多子代理并行、会话恢复与审计。企业版额外提供权限管控、防篡改审计、多租户隔离与成本治理,并可通过 Web 控制台可视化运维。
13
-
14
- ---
15
-
16
- ## 2. 安装
17
-
18
- ### 环境要求
19
- - Node.js **≥ 18**(推荐 20 LTS)
20
- - 操作系统:Windows / macOS / Linux
21
-
22
- ### 方式一:npm 全局安装(推荐)
23
- ```bash
24
- npm install -g feihong-code
25
- fhcode --help
26
- ```
27
-
28
- ### 方式二:源码构建
29
- ```bash
30
- git clone <repo> && cd feihong-code
31
- npm install
32
- npm run build
33
- node dist/cli/index.js --help
34
- ```
35
-
36
- ### 方式三:Docker(稳定部署推荐)
37
- ```bash
38
- docker build -t feihong-code .
39
- docker run -p 8080:8080 -e FH_WEB_TOKEN=你的强随机令牌 feihong-code serve
40
- # 或一键编排:
41
- FH_WEB_TOKEN=你的强随机令牌 docker compose up -d
42
- ```
43
-
44
- ### 方式四:安装脚本
45
- ```bash
46
- ./install.sh
47
- ```
48
-
49
- ---
50
-
51
- ## 3. 快速上手
52
-
53
- ### 第一条目标(离线可用)
54
- ```bash
55
- fhcode "创建一个说明文件 README-demo.md,写一句话介绍本项目"
56
- ```
57
- 未配置模型时自动进入**离线模式**(用本地 mock 完成闭环,成本恒为 0),适合体验与 CI。
58
-
59
- ### 接入真实模型
60
- 在项目根目录创建 `.env`(已被 gitignore,不会入库):
61
- ```
62
- FH_API_KEY=sk-你的密钥
63
- FH_MODEL=你的模型名
64
- FH_BASE_URL=https://你的模型网关
65
- ```
66
- 真实模式会按用量计量成本;密钥仅存 `.env`,日志中一律脱敏。
67
-
68
- ---
69
-
70
- ## 4. 命令总览
71
-
72
- | 命令 | 说明 |
73
- |------|------|
74
- | `fhcode "目标"` | 运行单条目标 |
75
- | `fhcode /plan "需求"` | 生成实现规划 |
76
- | `fhcode /grill <路径>` | 代码评审 |
77
- | `fhcode /goal` | 目标模式 |
78
- | `fhcode sessions` | 列出会话检查点 |
79
- | `fhcode resume <id>` | 断点续跑 |
80
- | `fhcode diff [id]` | 会话作用域 diff |
81
- | `fhcode rollback <id> [--yes]` | 回滚被改文件(需确认) |
82
- | `fhcode whoami` | 身份与用量 |
83
- | `fhcode policy` | 权限矩阵 |
84
- | `fhcode audit [--limit N]` | 审计链(脱敏) |
85
- | `fhcode audit verify` | 校验审计完整性 |
86
- | `fhcode tenants` | 租户用量汇总 |
87
- | `fhcode serve [--port 8080]` | 启动 Web 控制台(BETA) |
88
- | `fhcode model-stats` | 查看模型性能统计(M6) |
89
- | `fhcode experiences [路径]` | 列出经验库(M6) |
90
- | `fhcode code-write "<目标>"` | 自主编写代码(M8) |
91
- | `fhcode quality-gate [路径]` | 质量门禁审查(M8) |
92
- | `fhcode self-improve` | 自我改进统计(M8) |
93
- | `fhcode swe "<目标>"` | 全自动软件工程 Agent(M9):读仓库→拆解→实现+验证+自愈→报告 |
94
-
95
- ---
96
-
97
- ## 5. 核心工作流
98
-
99
- ### 5.1 目标运行
100
- ```bash
101
- fhcode "为登录页增加手机号校验,并补充单元测试"
102
- ```
103
- 智能体将规划、编码、自检,最终给出答案与改动文件清单。
104
-
105
- ### 5.2 规划与评审
106
- ```bash
107
- fhcode /plan "实现支付回调验签"
108
- fhcode /grill src/payment/
109
- ```
110
-
111
- ### 5.3 会话恢复与审计(M3)
112
- 任务中断后可续跑,不丢进度:
113
- ```bash
114
- fhcode sessions # 看有哪些检查点
115
- fhcode resume <id> # 从断点继续
116
- fhcode diff <id> # 本次会话改了哪些文件
117
- fhcode rollback <id> # 回滚(未确认/非 git 仓库一律拒绝,防误删)
118
- ```
119
-
120
- ---
121
-
122
- ## 6. 企业版使用(M4)
123
-
124
- ### 6.1 启用企业模式
125
- 默认在注入 guard 时启用;可用 `FH_ENTERPRISE=false` 关闭回到社区版。
126
-
127
- ### 6.2 身份与用量
128
- ```bash
129
- export FH_TENANT=acme
130
- export FH_USER=alice
131
- export FH_ROLE=developer
132
- fhcode whoami
133
- ```
134
- 输出当前租户、用户、角色、隔离目录与今日成本/预算。
135
-
136
- ### 6.3 权限矩阵查看
137
- ```bash
138
- fhcode policy
139
- ```
140
- 展示四角色(viewer/developer/operator/admin)的工具权限、危险命令与敏感路径黑名单。
141
-
142
- ### 6.4 审计与取证
143
- ```bash
144
- fhcode audit --limit 20 # 最近 20 条(脱敏)
145
- fhcode audit verify # 校验哈希链是否被篡改,定位断点
146
- ```
147
-
148
- ### 6.5 多租户
149
- ```bash
150
- fhcode tenants # 所有租户用量汇总(物理目录隔离,互不串台)
151
- ```
152
- 数据落在 `<FH_HOME>/tenants/<tenantId>/`,租户 ID 经正则校验防穿越。
153
-
154
- ### 6.6 成本治理
155
- - 单任务成本超限会**熔断**(终止并给答案)。
156
- - 租户日预算 `FH_TENANT_BUDGET_USD` 超限会**拒绝新任务**(HTTP 429 语义)并记入审计 `quota:block`。
157
-
158
- ---
159
-
160
- ## 7. Web 控制台(M5 BETA)
161
-
162
- > 仅观测、不执行,保持 guard 权威。
163
-
164
- ### 启动
165
- ```bash
166
- export FH_WEB_TOKEN=你的强随机令牌
167
- fhcode serve --port 8080
168
- ```
169
- 浏览器访问 `http://localhost:8080` 即可看到仪表盘(租户总览 / 策略矩阵 / 审计浏览+verify / 会话列表 / 配额进度条)。
170
-
171
- ### 鉴权
172
- 所有 `/api/*` `Authorization: Bearer <FH_WEB_TOKEN>`;未设或错误令牌一律 401(fail-closed)。生产环境务必用强随机令牌并通过环境变量注入,勿用默认值。
173
-
174
- ### 端点速查
175
- `/api/health`、`/api/tenants`、`/api/whoami`、`/api/policy`、`/api/audit`、`/api/audit/verify`、`/api/sessions`、`/api/quota`。
176
-
177
- ---
178
-
179
- ## 8. 自我进化能力(M6)
180
-
181
- ### 模型性能统计
182
- ```bash
183
- fhcode model-stats
184
- ```
185
- 查看各模型提供商的成功率、延迟、成本等性能指标,辅助模型路由决策。
186
-
187
- ### 经验库管理
188
- ```bash
189
- fhcode experiences [路径]
190
- ```
191
- 列出系统积累的经验记录,包括高效工具调用模式、错误规避模式等。指定路径可查看自定义经验库。
192
-
193
- ---
194
-
195
- ## 9. 自主编程能力(M8)
196
-
197
- ### 自主编写代码
198
- ```bash
199
- fhcode code-write "<目标描述>"
200
- ```
201
- 启动自主编写流程:规划→编写→测试生成→审查→修复→总结,全程自动化完成代码迭代。
202
-
203
- ### 质量门禁审查
204
- ```bash
205
- fhcode quality-gate [路径]
206
- ```
207
- 对指定目录进行质量门禁审查,包括安全审查、代码质量分析、测试覆盖检查,输出标准化报告。
208
-
209
- ### 自我改进统计
210
- ```bash
211
- fhcode self-improve
212
- ```
213
- 查看系统自我改进的统计信息,包括反思次数、成功率、平均耗时等指标。
214
-
215
- ---
216
-
217
- ## 9.1 全自动软件工程 Agent(M9)
218
-
219
- 对标业界"全自动软件工程 Agent":读取整个(大型)代码仓库 → 任务拆解规划 → 修改代码 → 执行命令、跑测试 → 验证结果,自主完成长链路开发。
220
-
221
- **核心四阶段(由 `src/agent/swe-agent.ts` 主编排):**
222
-
223
- 1. **仓库读取(repo-reader)**:扫描整个仓库(支持大型仓库,含文件数/体积限流与 `.gitignore` 解析),产出语言分布、关键文件、测试/构建命令、目录树与上下文串。
224
- 2. **任务拆解(swe-planner)**:把目标拆解为有序、可独立验证的子任务(勘察→实现/修复/重构→测试→构建验证),每个子任务携带目标文件、验收标准、验证命令。
225
- 3. **实现 + 验证(逐任务闭环)**:每个子任务委托 Orchestrator(ReAct + 工具系统 + 自愈)实现;随后自动跑构建与测试验证;**验证失败则把错误摘要注入下一轮实现,自我修复重试(最多 `--max-retries` 次)**。
226
- 4. **报告(SweReport)**:汇总每个子任务状态、改动文件、验证结果,给出 overall(success/partial/failed)。
227
-
228
- **命令用法:**
229
- ```bash
230
- # 全自动执行:读当前仓库 → 拆解 → 实现+验证+自愈 → 报告
231
- fhcode swe "新增用户登录接口并补充测试"
232
-
233
- # 指定仓库路径
234
- fhcode swe "重构工具模块" --repo /path/to/repo
235
-
236
- # 仅规划,不执行(适合先 review 计划)
237
- fhcode swe "重构工具模块" --plan-only
238
-
239
- # 仅跑验证,不实现(适合 CI 质量门禁)
240
- fhcode swe "检查构建与测试" --verify-only
241
-
242
- # 限制子任务数与自愈重试次数
243
- fhcode swe "实现新功能" --max-tasks 6 --max-retries 3
244
-
245
- # 限制每个子任务的模型推理轮数(真实模型建议 4~8,控制成本与耗时)
246
- fhcode swe "实现新功能" --max-iterations 6
247
- ```
248
-
249
- **说明:**
250
- - 离线(`FH_OFFLINE=true` 或无任何模型配置)时,实现阶段由脚本化 Mock 驱动闭环,验证阶段跑真实构建/测试命令,可完整演示长链路。
251
- - 接入真实模型后,实现阶段的读/写/编辑/执行命令均由大模型自主决策。
252
- - `--plan-only` 与 `--verify-only` 非常适合在 CI 中分别做"计划评审"与"质量门禁"。
253
- - 真实模型接入方式见第 10 章《配置指南》;可用 `node scripts/verify-m9-real.mjs` 做"真实 HTTP provider 全链路"离线实测(不依赖任何外部模型)。
254
-
255
- ---
256
-
257
- ## 10. 配置指南
258
-
259
- ### 真实模型接入(三种优先级,从高到低)
260
-
261
- **方式一:环境变量 `FH_PROVIDERS`(JSON 数组,最完整,可配多个供应商)**
262
- ```bash
263
- export FH_PROVIDERS='[{"id":"deepseek","type":"openai-compatible","baseURL":"https://api.deepseek.com/v1","model":"deepseek-chat","apiKey":"sk-xxxx","tags":["code-gen","reasoning"]}]'
264
- ```
265
-
266
- **方式二:配置文件 `fhcode.config.json`(项目根或 FH_HOME 下)**
267
- ```json
268
- {
269
- "models": {
270
- "providers": [
271
- { "id": "local", "type": "ollama", "baseURL": "http://localhost:11434", "model": "qwen2.5-coder:1.5b", "tags": ["code-gen","reasoning","local"] }
272
- ]
273
- }
274
- }
275
- ```
276
-
277
- **方式三:单环境变量快速接入(无需写 JSON)**
278
- ```bash
279
- export FH_MODEL_NAME=qwen2.5-coder:1.5b
280
- export FH_MODEL_TYPE=ollama # 或 openai-compatible
281
- export FH_MODEL_BASE_URL=http://localhost:11434
282
- export FH_MODEL_API_KEY= # openai-compatible 必填
283
- export FH_MODEL_TAGS=code-gen,reasoning
284
- ```
285
-
286
- > 供应商类型:`ollama`(本地,零成本,数据不出机)或 `openai-compatible`(DeepSeek / 通义 / OpenRouter 等 OpenAI 协议接口)。
287
- > 标签必须含 `code-gen`,编排器才会把代码任务路由给它。网络可通 `api.deepseek.com`(需自备密钥)。
288
-
289
- ### 常用环境变量
290
- | 变量 | 作用 |
291
- |------|------|
292
- | `FH_HOME` | 数据根目录 |
293
- | `FH_ENTERPRISE` | 企业模式(`false` 关) |
294
- | `FH_TENANT` / `FH_USER` / `FH_ROLE` | 租户/用户/角色 |
295
- | `FH_TENANT_BUDGET_USD` | 租户日预算 |
296
- | `FH_POLICY` | 策略 JSON 覆盖片段 |
297
- | `FH_WEB_PORT` / `FH_WEB_TOKEN` | Web 控制台端口/令牌 |
298
- | `FH_OFFLINE` | 强制离线(`true` 时忽略所有模型配置,使用 Mock) |
299
- | `FH_PROVIDERS` | 供应商 JSON 数组(方式一) |
300
- | `FH_CONFIG` | 指定配置文件路径 |
301
- | `FH_MODEL_NAME` / `FH_MODEL_TYPE` / `FH_MODEL_BASE_URL` / `FH_MODEL_API_KEY` / `FH_MODEL_TAGS` | 单环境变量快速接入(方式三) |
302
- | `FH_MODEL_STRATEGY` | 路由策略(`cost`/`capability`/`latency`,默认 `cost`) |
303
- | `FH_BUDGET_USD` | 单任务成本告警阈值 |
304
-
305
- ---
306
-
307
- ## 9. 常见问题与故障排查
308
-
309
- **Q1. 离线模式能做什么?**
310
- 不请求模型,用本地 mock 完成闭环,适合体验、CI 与无网环境;成本恒为 0。
311
-
312
- **Q2. 危险命令被拒怎么办?**
313
- `rm -rf /`、`.env` 写入等命中黑名单会被直接拒绝(admin 也拦)。确属必要的运维操作请走受控流程,不要绕过 guard。
314
-
315
- **Q3. 配额超限(QUOTA_EXCEEDED)?**
316
- 当日租户成本超过 `FH_TENANT_BUDGET_USD`。调高预算或次日再跑;`whoami` 可看已用/上限。
317
-
318
- **Q4. 审计校验失败(brokenAt)?**
319
- `audit verify` 返回断点行号,说明审计链在该处不连续或被篡改。检查该时间段的操作记录与文件权限。
320
-
321
- **Q5. 租户互相看得到会话?**
322
- 不应发生。物理目录隔离 + ID 正则校验保障隔离;`tenants` 与 `sessions` 按租户作用域,CI 已做隔离断言。
323
-
324
- **Q6. 想关掉企业能力?**
325
- `FH_ENTERPRISE=false`,行为退回社区版(M3),无感降级。
326
-
327
- **Q7. Web 控制台起不来 / 401?**
328
- 确认 `FH_WEB_TOKEN` 已设置且请求带 `Authorization: Bearer`;端口被占用换 `--port`。
329
-
330
- **Q8. 构建/编译被安全软件拦截?**
331
- 本地 Windows 下 `tsc` 编译可能被 Defender 实时扫描短暂锁文件。属环境限制非代码问题;CI(GitHub Actions)是权威构建来源。
332
-
333
- **Q9. M8 自主编写功能如何使用?**
334
- 通过 `fhcode code-write` 命令启动,系统会自动完成规划、编写、测试、审查、修复全流程。可使用 `quality-gate` 进行质量门禁检查。
335
-
336
- **Q10. 如何查看自我进化数据?**
337
- 使用 `model-stats` 查看模型性能统计,使用 `experiences` 查看经验库,使用 `self-improve` 查看改进统计。
338
-
339
- ---
340
-
341
- ## 11. 安全与合规须知
342
-
343
- - 密钥仅存 `.env`(gitignore),不回显、不入库、日志脱敏。
344
- - 危险操作与敏感路径受 deny 优先策略保护;审批通道缺失即拒绝。
345
- - Web 控制台仅观测不执行,且 fail-closed 鉴权。
346
- - 发布包经白名单校验,`.env`/`src`/`.workbuddy` 不随 `npm publish` 泄露。
347
- - 审计链可验证、防篡改,满足合规取证基本要求。
348
-
349
- ---
350
-
351
- ## 12. 署名与版权
352
-
353
- - **公司**:晋江市飞虹智科技企业管理有限公司
354
- - **中心**:飞扬企源研发中心
355
- - **负责人**:吴赐虹
356
- - **许可证**:MIT
357
-
358
- *本文档与《技术说明书》共同构成飞虹 Code 稳定版(0.1.0)权威文档集。*
1
+ # 飞虹 Code(fhcode)使用说明书
2
+
3
+ **版本**:v0.5.0-b
4
+ **日期**:2026-08-16
5
+ **产品**:飞虹 Code(feihong-code)— 终端 AI 编程智能体(Muse Code 参照复刻)
6
+ **署名**:晋江市飞虹智科技企业管理有限公司 · 飞扬企源研发中心 · 负责人:吴赐虹
7
+
8
+ ---
9
+
10
+ ## 一、快速开始
11
+
12
+ ### 1.1 环境要求
13
+
14
+ - Node.js ≥ 18(推荐 20/22)
15
+ - npm ≥ 9
16
+ - git(diff/rollback/并行 worktree 需要)
17
+ - Docker(仅 `FH_SANDBOX_MODE=container` 时需要)
18
+
19
+ ### 1.2 安装
20
+
21
+ ```bash
22
+ # 方式一:源码构建(推荐)
23
+ git clone https://github.com/wch887292/feihong-code.git
24
+ cd feihong-code
25
+ npm install
26
+ npm run build
27
+
28
+ # 方式二:npm 全局安装
29
+ npm install -g feihong-code
30
+ fhcode --version # 验证
31
+ ```
32
+
33
+ ### 1.3 三秒上手
34
+
35
+ ```bash
36
+ # 未配置模型时自动进入离线模式(Mock 驱动闭环),可直接体验
37
+ fhcode "写一个 hello.ts"
38
+
39
+ # 配置真实模型(DeepSeek 示例)后走真实模式
40
+ export FH_PROVIDERS='[{"name":"deepseek","type":"openai-compatible","baseUrl":"https://api.deepseek.com/v1","apiKey":"sk-...","tags":["code-gen","reasoning"],"priority":1}]'
41
+ fhcode "修复 src/auth.ts 中的 token 校验 bug"
42
+ ```
43
+
44
+ ---
45
+
46
+ ## 二、命令速查
47
+
48
+ ```bash
49
+ # 基础
50
+ fhcode 进入交互式 REPL(TTY 下自动启用 TUI)
51
+ fhcode "<需求>" 单命令执行一条需求
52
+ fhcode --stream "<需求>" 流式输出(任务过程实时可见)
53
+ fhcode --yes "<需求>" 跳过审批(危险操作需谨慎)
54
+ fhcode --lang zh|en 设置界面语言
55
+
56
+ # 只读技能
57
+ fhcode /plan "<目标>" 生成实现计划
58
+ fhcode /grill [路径] 红队式代码审查(文本)
59
+ fhcode review [路径] [--json] 结构化代码审查(--json 供 IDE/CI 消费)
60
+ fhcode /goal "<目标>" 分解并保存高层目标
61
+
62
+ # 会话管理(M3)
63
+ fhcode sessions 列出历史会话
64
+ fhcode resume <id> 从检查点续跑
65
+ fhcode diff [id] 查看会话/工作区变更
66
+ fhcode rollback <id> --yes 回滚会话改动(破坏性)
67
+
68
+ # 企业能力(M4)
69
+ fhcode whoami 当前租户/用户/角色/配额
70
+ fhcode policy 查看生效 RBAC 策略
71
+ fhcode audit [verify] 审计记录 / 哈希链校验
72
+ fhcode tenants 租户用量汇总
73
+
74
+ # 自我进化(M6/M8/M9)
75
+ fhcode model-stats 模型性能统计
76
+ fhcode experiences [路径] 经验库
77
+ fhcode code-write "<目标>" 自主编程
78
+ fhcode quality-gate [路径] 质量门禁审查
79
+ fhcode self-improve 自我改进统计
80
+ fhcode swe "<目标>" 全自动软件工程 Agent
81
+ fhcode team "<目标>" 多 agent 协作(共享任务板+消息总线)
82
+
83
+ # 生态
84
+ fhcode skill-market search "<关键词>" 搜索技能市场(agentskills.io)
85
+ fhcode skill-market install <技能名> 安装技能
86
+ fhcode skill-market list 列出本地技能
87
+ fhcode plugin install <目录|git URL> 安装插件
88
+ fhcode plugin list 列出插件
89
+ fhcode doctor 环境自检
90
+ ```
91
+
92
+ **常用 flag**:`--parallel`(并行 worktree)/ `--repo`(swe 目标仓库/市场源)/ `--context-file <path>`(附加文件上下文)/ `--max-iterations N` / `--max-retries N` / `--plan-only` / `--verify-only` / `--json`。
93
+
94
+ ---
95
+
96
+ ## 三、模型配置
97
+
98
+ ### 3.1 配置优先级
99
+
100
+ 1. `FH_PROVIDERS`(JSON 数组,最高优先级)
101
+ 2. `fhcode.config.json`(项目配置文件 `models.providers`)
102
+ 3. 单环境变量 `FH_MODEL_*`
103
+
104
+ ### 3.2 Ollama 本地模型
105
+
106
+ ```bash
107
+ export FH_MODEL_NAME=qwen3:8b
108
+ export FH_MODEL_TYPE=ollama
109
+ export FH_MODEL_BASE_URL=http://localhost:11434
110
+ export FH_MODEL_TAGS=code-gen,reasoning,local
111
+ ```
112
+
113
+ ### 3.3 DeepSeek / 通义
114
+
115
+ ```bash
116
+ # DeepSeek
117
+ export FH_PROVIDERS='[{"name":"deepseek","type":"openai-compatible","baseUrl":"https://api.deepseek.com/v1","apiKey":"sk-...","tags":["code-gen","reasoning"],"costPer1k":0.0001}]'
118
+ # 通义千问
119
+ export FH_PROVIDERS='[{"name":"qwen","type":"openai-compatible","baseUrl":"https://dashscope.aliyuncs.com/compatible-mode/v1","apiKey":"...","tags":["code-gen","long-context"]}]'
120
+ ```
121
+
122
+ ### 3.4 路由策略
123
+
124
+ ```bash
125
+ export FH_MODEL_STRATEGY=cost # cost | capability | latency
126
+ export FH_BUDGET_USD=0.5 # 单任务成本上限(超限熔断)
127
+ ```
128
+ 低成本标签 `cheap` 的 provider 会优先承担 `swe`/并行子任务(P1-1 模型分工)。
129
+
130
+ ---
131
+
132
+ ## 四、典型工作流
133
+
134
+ ### 4.1 单任务
135
+
136
+ ```bash
137
+ # 基础
138
+ fhcode "实现一个 HTTP 服务器,监听 3000 端口"
139
+ # 流式 + 指定上下文文件
140
+ fhcode --stream --context-file src/auth.ts "审查并修复此文件中的安全问题"
141
+ ```
142
+
143
+ ### 4.2 全自动软件工程(swe)
144
+
145
+ ```bash
146
+ fhcode swe "修复 src/calc.ts 的 add 函数 bug,让 tests/calc.test.ts 通过" \
147
+ --repo /path/to/project \
148
+ --max-tasks 3 --max-iterations 5
149
+ # --plan-only 仅规划 / --verify-only 仅验证 / --max-retries N 自愈重试
150
+ ```
151
+
152
+ ### 4.3 agent 协作(team)
153
+
154
+ ```bash
155
+ fhcode team "实现登录模块 并且 添加用户管理 并且 写集成测试"
156
+ # 目标自动拆解 agent 并发认领 → 消息总线汇报 → 团队报告
157
+ ```
158
+
159
+ ### 4.4 技能市场与插件
160
+
161
+ ```bash
162
+ # agentskills.io 搜索并安装技能(安装后任务中自动发现)
163
+ fhcode skill-market search "code review"
164
+ fhcode skill-market install code-review
165
+ # 安装插件(打包 skills+hooks+MCP)
166
+ fhcode plugin install ./my-plugin
167
+ ```
168
+
169
+ ### 4.5 会话恢复与回滚
170
+
171
+ ```bash
172
+ fhcode sessions # 找到会话 id
173
+ fhcode resume <id> # 中断后续跑
174
+ fhcode diff <id> # 查看改动
175
+ fhcode rollback <id> --yes # 回滚(破坏性)
176
+ ```
177
+
178
+ ### 4.6 环境自检
179
+
180
+ ```bash
181
+ fhcode doctor
182
+ # ✅ Node 版本 / git / 模型配置 / 网络连通 / 主目录可写 / 沙箱模式
183
+ ```
184
+
185
+ ---
186
+
187
+ ## 五、REPL / TUI 使用
188
+
189
+ ```bash
190
+ fhcode # 进入交互模式(TTY 自动启用 TUI)
191
+ ```
192
+ - TUI:顶部 sticky header 显示 模式/runId/迭代/成本/状态;内容区滚动;滚轮可回看
193
+ - 输入需求回车执行;`exit`/`quit`/Ctrl+D 退出
194
+ - 支持 `/plan` `/grill` `/goal` 斜杠技能
195
+
196
+ ---
197
+
198
+ ## 六、VSCode 扩展
199
+
200
+ 在 `vscode-extension/` 目录打包(`npx @vscode/vsce package`)或 F5 调试加载:
201
+
202
+ | 命令 | 说明 |
203
+ |------|------|
204
+ | `fhcode: 运行任务(附带选区上下文)` | 选中代码自动注入 `<selection>` 上下文 |
205
+ | `fhcode: 内联评审当前文件` | `review --json` → 编辑器内联诊断(红/黄/蓝) |
206
+ | `fhcode: 就地查看工作区 diff` | 原生 diff 编辑器 HEAD↔工作区 |
207
+ | `fhcode: 查看最近任务输出` | 聚焦 Output Channel |
208
+
209
+ 配置:`fhcode.binaryPath` / `fhcode.offline` / `fhcode.reviewOnSave`(保存自动评审,默认开)。
210
+
211
+ ---
212
+
213
+ ## 七、Web 控制台(云执行)
214
+
215
+ ```bash
216
+ fhcode serve --port 8080
217
+ # 浏览器打开 http://localhost:8080
218
+ ```
219
+
220
+ **任务面板**:输入 token(终端输出的 `FH_WEB_TOKEN`)→ 提交目标 → 轮询状态 → 展开结果详情。
221
+
222
+ **API 调用**(Bearer 鉴权):
223
+
224
+ ```bash
225
+ TOKEN=$(echo $FH_WEB_TOKEN)
226
+ # 提交任务
227
+ curl -X POST http://localhost:8080/api/tasks \
228
+ -H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
229
+ -d '{"goal":"写一个 hello.ts"}'
230
+ # 查询
231
+ curl http://localhost:8080/api/tasks -H "Authorization: Bearer $TOKEN"
232
+ curl http://localhost:8080/api/tasks/<id> -H "Authorization: Bearer $TOKEN"
233
+ # 注册 webhook(任务状态回调,可被 CI 调度)
234
+ curl -X POST http://localhost:8080/api/webhook \
235
+ -H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
236
+ -d '{"url":"https://your-ci.example.com/hook"}'
237
+ ```
238
+
239
+ ---
240
+
241
+ ## 八、消息渠道
242
+
243
+ ```bash
244
+ # Telegram 通知(任务状态变化推送)
245
+ export FH_CHANNEL_TELEGRAM_BOT_TOKEN=bot:xxx
246
+ export FH_CHANNEL_TELEGRAM_CHAT_ID=12345
247
+ # 企业微信群机器人(可多个 key)
248
+ export FH_CHANNEL_WECOM_KEY=key1,key2
249
+ # 出站白名单(可选,配置后仅白名单渠道可发)
250
+ export FH_CHANNEL_ALLOW=telegram,wecom
251
+ ```
252
+
253
+ ---
254
+
255
+ ## 九、沙箱与安全使用
256
+
257
+ ```bash
258
+ # 沙箱模式
259
+ export FH_SANDBOX_MODE=workspace-write # 默认
260
+ export FH_SANDBOX_MODE=read-only # 只读勘察(禁写禁执行)
261
+ export FH_SANDBOX_MODE=danger-full-access # 全权限(危险命令仍拦截)
262
+ export FH_SANDBOX_MODE=container # Docker 容器内执行 shell
263
+ export FH_SANDBOX_IMAGE=node:22-alpine # 容器镜像
264
+
265
+ # 网络域名规则
266
+ export FH_NETWORK_DENY=evil.example.com
267
+ # export FH_NETWORK_ALLOW=api.example.com
268
+
269
+ # 确定性 hooks(PreToolUse 非零退出拦截)
270
+ export FH_HOOKS='[{"event":"PreToolUse","command":"node scripts/guard.js","tools":["run_shell"]}]'
271
+ ```
272
+
273
+ ---
274
+
275
+ ## 十、eval 跑分与回归门禁
276
+
277
+ ```bash
278
+ # 本地跑分(场景 5 + 验收 5,验证真实产物)
279
+ npm run build && npm run eval
280
+
281
+ # 存档基线 + 对比门禁(低于基线即失败,可接入 CI)
282
+ node scripts/eval.mjs --save-baseline bench/eval-baseline.json
283
+ node scripts/eval.mjs --baseline bench/eval-baseline.json
284
+
285
+ # SWE-bench 数据集加载(HF 或镜像)
286
+ node scripts/eval-swebench.mjs --split lite --limit 5
287
+ node scripts/eval-swebench.mjs --split lite --limit 5 --run --report report.md
288
+ FH_SWEBENCH_DATA_URL=https://mirror.example/swebench.json node scripts/eval-swebench.mjs --limit 3
289
+ ```
290
+
291
+ ---
292
+
293
+ ## 十一、常见问题速查
294
+
295
+ | 问题 | 处理 |
296
+ |------|------|
297
+ | 未配置模型却想用真实模式 | `FH_PROVIDERS` `FH_MODEL_NAME` 配置后自动进入真实模式 |
298
+ | 任务超预算中止 | 调高 `FH_BUDGET_USD` 或角色策略 `maxCostUsd`,用 `resume` 续跑 |
299
+ | 配额拒绝(QUOTA_EXCEEDED) | 调整 `FH_TENANT_BUDGET_USD` policy tenantDailyBudgetUsd |
300
+ | review 输出为空 | 确认路径为文件或目录且含受支持扩展名(ts/js/tsx/jsx/json/md/py/go/java) |
301
+ | 技能市场拉取失败 | 检查网络或设 `FH_SWEBENCH_DATA_URL`/`--repo` 镜像源 |
302
+ | 中文/英文切换 | `fhcode --lang en` 或 `FHCODE_LANG=en` |
303
+
304
+ ---
305
+
306
+ ## 十二、故障排查与日志
307
+
308
+ ```bash
309
+ export FH_LOG_LEVEL=debug # 详细日志
310
+ fhcode doctor # 环境自检(快速定位)
311
+ fhcode audit verify # 审计链完整性校验
312
+ # 日志目录:~/.feihong-code/sessions/<runId>.jsonl(事件日志)
313
+ # 检查点:~/.feihong-code/sessions/<runId>.session.json
314
+ ```
315
+
316
+ ---
317
+
318
+ *完整配置清单见《配置参考》与《部署说明书》;常见错误码见《常见问题与故障排查》。*