feihong-code 0.2.2 → 0.5.1
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.
- package/.github/FUNDING.yml +4 -0
- package/.github/ISSUE_TEMPLATE/bug_report.md +37 -37
- package/.github/ISSUE_TEMPLATE/config.yml +14 -14
- package/.github/ISSUE_TEMPLATE/feature_request.md +28 -28
- package/.github/PULL_REQUEST_TEMPLATE.md +46 -46
- package/.github/SECURITY.md +67 -67
- package/.github/dependabot.yml +16 -0
- package/.github/workflows/ci.yml +1 -1
- package/AGENT-GUIDE.md +382 -237
- package/CHANGELOG.md +405 -73
- package/CODE_OF_CONDUCT.md +56 -56
- package/CONTRIBUTING.md +68 -68
- package/LICENSE +22 -22
- package/README.md +31 -25
- package/README.self-evolve.md +274 -0
- package/dist/agent/code-review.js +2 -0
- package/dist/agent/code-review.js.map +1 -1
- package/dist/agent/code-writer.js +70 -17
- package/dist/agent/code-writer.js.map +1 -1
- package/dist/agent/context-compactor.js +13 -4
- package/dist/agent/context-compactor.js.map +1 -1
- package/dist/agent/experience.js +262 -62
- package/dist/agent/experience.js.map +1 -1
- package/dist/agent/orchestrator.js +148 -68
- package/dist/agent/orchestrator.js.map +1 -1
- package/dist/agent/quality-gate.js +10 -4
- package/dist/agent/quality-gate.js.map +1 -1
- package/dist/agent/repo-context.js +181 -0
- package/dist/agent/repo-context.js.map +1 -0
- package/dist/agent/repo-reader.js +92 -99
- package/dist/agent/repo-reader.js.map +1 -1
- package/dist/agent/self-heal.js +38 -48
- package/dist/agent/self-heal.js.map +1 -1
- package/dist/agent/self-improver.js +65 -61
- package/dist/agent/self-improver.js.map +1 -1
- package/dist/agent/subagent-summary.js +31 -0
- package/dist/agent/subagent-summary.js.map +1 -0
- package/dist/agent/subagent.js +52 -2
- package/dist/agent/subagent.js.map +1 -1
- package/dist/agent/symbol-index.js +160 -0
- package/dist/agent/symbol-index.js.map +1 -0
- package/dist/agent/team.js +193 -0
- package/dist/agent/team.js.map +1 -0
- package/dist/cli/commands.js +124 -143
- package/dist/cli/commands.js.map +1 -1
- package/dist/cli/index.js +113 -106
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/repl.js +82 -7
- package/dist/cli/repl.js.map +1 -1
- package/dist/cli/run.js +601 -95
- package/dist/cli/run.js.map +1 -1
- package/dist/cli/tui.js +145 -0
- package/dist/cli/tui.js.map +1 -0
- package/dist/cli/version.js +1 -1
- package/dist/enterprise/audit.js +75 -12
- package/dist/enterprise/audit.js.map +1 -1
- package/dist/enterprise/index.js +14 -11
- package/dist/enterprise/index.js.map +1 -1
- package/dist/enterprise/policy.js +22 -10
- package/dist/enterprise/policy.js.map +1 -1
- package/dist/harness/executor.js +127 -0
- package/dist/harness/executor.js.map +1 -0
- package/dist/harness/harness.js +87 -0
- package/dist/harness/harness.js.map +1 -0
- package/dist/harness/index.js +31 -0
- package/dist/harness/index.js.map +1 -0
- package/dist/harness/loader.js +138 -0
- package/dist/harness/loader.js.map +1 -0
- package/dist/harness/reporter.js +34 -0
- package/dist/harness/reporter.js.map +1 -0
- package/dist/harness/types.js +10 -0
- package/dist/harness/types.js.map +1 -0
- package/dist/harness/verifier.js +48 -0
- package/dist/harness/verifier.js.map +1 -0
- package/dist/hello.js +14 -0
- package/dist/hello.js.map +1 -0
- package/dist/memory/auto-summarize.js +208 -0
- package/dist/memory/auto-summarize.js.map +1 -0
- package/dist/memory/index.js +228 -0
- package/dist/memory/index.js.map +1 -0
- package/dist/models/model-router.js +23 -10
- package/dist/models/model-router.js.map +1 -1
- package/dist/plugins/plugin-loader.js +179 -0
- package/dist/plugins/plugin-loader.js.map +1 -0
- package/dist/runtime/event-log.js.map +1 -1
- package/dist/runtime/hooks.js +80 -0
- package/dist/runtime/hooks.js.map +1 -0
- package/dist/self-evolve/hook.js +60 -0
- package/dist/self-evolve/hook.js.map +1 -0
- package/dist/shared/config.js +35 -3
- package/dist/shared/config.js.map +1 -1
- package/dist/shared/i18n.js +535 -0
- package/dist/shared/i18n.js.map +1 -0
- package/dist/skills/grill.js +2 -1
- package/dist/skills/grill.js.map +1 -1
- package/dist/skills/self-heal.js +73 -0
- package/dist/skills/self-heal.js.map +1 -0
- package/dist/skills/skill-loader.js +131 -0
- package/dist/skills/skill-loader.js.map +1 -0
- package/dist/skills/skill-market.js +195 -0
- package/dist/skills/skill-market.js.map +1 -0
- package/dist/tools/analysis/code-analyzer.js +45 -18
- package/dist/tools/analysis/code-analyzer.js.map +1 -1
- package/dist/tools/index.js +5 -0
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/mcp/index.js +84 -0
- package/dist/tools/mcp/index.js.map +1 -0
- package/dist/tools/mcp/mcp-client.js +172 -0
- package/dist/tools/mcp/mcp-client.js.map +1 -0
- package/dist/tools/sandbox.js +126 -0
- package/dist/tools/sandbox.js.map +1 -0
- package/dist/tools/shell/exec.js +25 -0
- package/dist/tools/shell/exec.js.map +1 -1
- package/dist/tools/shell/run-shell.tool.js +4 -1
- package/dist/tools/shell/run-shell.tool.js.map +1 -1
- package/dist/tools/skills/load-skill.tool.js +36 -0
- package/dist/tools/skills/load-skill.tool.js.map +1 -0
- package/dist/tools/tool.interface.js.map +1 -1
- package/dist/tools/tool.registry.js +37 -1
- package/dist/tools/tool.registry.js.map +1 -1
- package/dist/tools/web/web.tool.js +139 -0
- package/dist/tools/web/web.tool.js.map +1 -0
- package/dist/web/auth.js +42 -3
- package/dist/web/auth.js.map +1 -1
- package/dist/web/channels.js +171 -0
- package/dist/web/channels.js.map +1 -0
- package/dist/web/public/index.html +3253 -39
- package/dist/web/public/index.html.tmp +3117 -0
- package/dist/web/public/index_new.html +3196 -0
- package/dist/web/server.js +790 -11
- package/dist/web/server.js.map +1 -1
- package/dist/web/task-queue.js +352 -0
- package/dist/web/task-queue.js.map +1 -0
- package/dist/web/web-config.js +143 -0
- package/dist/web/web-config.js.map +1 -0
- package/docs/Deployment_Guide_EN.md +288 -0
- package/docs/Technical_Manual_EN.md +216 -0
- package/docs/User_Manual_EN.md +314 -0
- package/docs/self-evolve-implementation.md +165 -0
- package/docs/self-evolve.md +166 -0
- package/docs//344/272/247/345/223/201/345/274/200/345/217/221/346/226/207/346/241/243.md +614 -614
- 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
- package/docs//344/275/277/347/224/250/350/257/264/346/230/216/344/271/246.md +318 -358
- 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
- package/docs//346/212/200/346/234/257/350/257/264/346/230/216/344/271/246.md +216 -303
- package/docs//346/236/266/346/236/204/344/270/216API.md +238 -238
- package/docs//347/224/250/346/210/267/346/211/213/345/206/214.md +196 -196
- package/docs//351/203/250/347/275/262/346/214/207/345/215/227.md +165 -165
- package/docs//351/203/250/347/275/262/350/257/264/346/230/216/344/271/246.md +288 -0
- package/docs//351/205/215/347/275/256/345/217/202/350/200/203.md +127 -127
- package/package.json +114 -109
- package/tool-schema.json +127 -127
|
@@ -1,358 +1,318 @@
|
|
|
1
|
-
# 飞虹 Code(fhcode)使用说明书
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
**署名**:晋江市飞虹智科技企业管理有限公司 · 飞扬企源研发中心 · 负责人:吴赐虹
|
|
7
|
-
|
|
8
|
-
---
|
|
9
|
-
|
|
10
|
-
##
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
```
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
fhcode
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
```bash
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
fhcode
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
fhcode
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
#
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
#
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
export
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
|
296
|
-
|
|
297
|
-
| `
|
|
298
|
-
| `
|
|
299
|
-
| `
|
|
300
|
-
|
|
|
301
|
-
|
|
|
302
|
-
|
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
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
|
+
*完整配置清单见《配置参考》与《部署说明书》;常见错误码见《常见问题与故障排查》。*
|