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,196 +1,196 @@
1
- # 飞虹 Code 用户手册
2
-
3
- > 晋江市飞虹智科技企业管理有限公司 · 飞扬企源研发中心 · 负责人:吴赐虹
4
-
5
- 本手册面向**使用者**,讲解每个命令、工具与安全机制,并给出最佳实践。开发向内容见《架构与 API》《配置参考》。
6
-
7
- ---
8
-
9
- ## 1. 安装与初始化
10
-
11
- ```bash
12
- git clone https://github.com/wch887292/feihong-code.git
13
- cd feihong-code && npm install && npm run build
14
- cp .env.example .env # 然后编辑填入 FH_PROVIDERS
15
- ```
16
-
17
- - 未配置 `FH_PROVIDERS` → 自动**离线模式**(内置 Mock 闭环,零成本)。
18
- - 已配置 `FH_PROVIDERS` → **真实模型模式**。
19
- - 环境变量可从 `.env` 自动加载(仅注入未设置的键),也可直接 `export`。
20
-
21
- ---
22
-
23
- ## 2. 命令详解
24
-
25
- ### 2.1 单命令模式
26
-
27
- ```bash
28
- fhcode "把 src/utils 的日期格式化抽成独立模块并补测试"
29
- ```
30
-
31
- 一次需求一次执行。编排器按 ReAct 循环:勘察 → 改码 → 测试/构建验证 → 总结。结束后打印最终结果、迭代次数、成本与日志路径。
32
-
33
- ### 2.2 交互 REPL
34
-
35
- ```bash
36
- fhcode # 进入 REPL
37
- 飞虹> 给登录页加一个表单校验
38
- 飞虹> exit # 退出
39
- ```
40
-
41
- 逐条输入需求,每条独立执行一次编排。适合探索式开发。
42
-
43
- ### 2.3 多子代理并行 `--parallel`
44
-
45
- ```bash
46
- fhcode --parallel "实现登录模块并且添加用户管理并且写集成测试"
47
- ```
48
-
49
- - **分解**:按中文并列连词(`并且/同时/分别/以及` 等)拆分为多个子任务。
50
- - **隔离**:为每个子任务创建独立的 `git worktree`(独立目录 + 独立分支),子代理只在自己的 worktree 内读写,互不干扰。
51
- - **并发**:`Promise.allSettled` 并发执行;单子任务失败不影响其他。
52
- - **清理**:结束后强制移除所有 worktree,子代理产物不进入主仓库。
53
- - ⚠️ 真实模式下会并发调用 API,免费套餐易触发 429 限流(见 FAQ)。
54
-
55
- ### 2.4 只读技能(不修改任何文件)
56
-
57
- | 命令 | 作用 | 示例 |
58
- | --- | --- | --- |
59
- | `/plan` | 生成结构化实现计划 | `fhcode /plan "实现登录并且添加支付"` |
60
- | `/grill` | 红队式代码审查(密钥/注入/穿越/校验/待办) | `fhcode /grill src` |
61
- | `/goal` | 分解并保存高层目标到 `~/.feihong-code/goals` | `fhcode /goal "搭建体系并且完善文档"` |
62
-
63
- 三者均为只读,可放心在任何仓库运行。
64
-
65
- ### 2.5 版本与帮助
66
-
67
- ```bash
68
- fhcode --version # 或 -v:版本 + 署名
69
- fhcode --help # 或 -h:完整用法
70
- ```
71
-
72
- ### 2.6 恢复与审计(M3)
73
-
74
- 每次任务都会把完整对话、迭代计数、成本、被改动文件落盘为会话检查点(`<runId>.session.json`),可随时恢复与审计。
75
-
76
- | 命令 | 作用 | 示例 |
77
- | --- | --- | --- |
78
- | `sessions` | 列出历史会话(状态 / 迭代 / 成本 / 文件数 / 更新时间) | `fhcode sessions` |
79
- | `resume <id>` | 从检查点重建对话并续跑中断任务(支持 8 位前缀) | `fhcode resume 6f7f734f` |
80
- | `diff [<id>]` | 展示会话作用域变更;省略 id 则显示当前工作区全量 diff | `fhcode diff 6f7f734f` |
81
- | `rollback <id> [--yes]` | 回滚会话产生的改动(**危险,必须 `--yes` 确认**) | `fhcode rollback 6f7f734f --yes` |
82
-
83
- **resume 适用场景**:进程崩溃、手动中断、达到最大迭代仍无结果。续跑会接着已有对话继续 ReAct 循环,直到产出最终答案,新过程仍写入同一 `runId` 的事件日志,审计连续。
84
-
85
- **diff / rollback 安全边界**:
86
- - 仅作用于本会话 `touchedFiles`(被 `write_file`/`edit_file` 创建或修改的文件),绝不整仓回滚。
87
- - `diff` 对已跟踪文件走 `git diff`,未跟踪文件走 `git diff --no-index` 展示新增内容。
88
- - `rollback` 对已跟踪文件 `git checkout --`,未跟踪文件直接删除;**未确认(`--yes`)或非 git 仓库时一律拒绝执行**,避免误删。
89
-
90
- ### 2.7 企业能力(M4)
91
-
92
- 企业模式默认开启(受 `FH_ENTERPRISE` 控制,设 `false` 即退回社区版无感行为)。开启后提供四类能力:
93
-
94
- | 命令 | 作用 | 示例 |
95
- | --- | --- | --- |
96
- | `whoami` | 查看当前租户 / 用户 / 角色 / 隔离目录 / 当日成本 | `fhcode whoami` |
97
- | `policy` | 渲染当前生效的策略矩阵(角色-工具、配额、黑名单) | `fhcode policy` |
98
- | `audit [--limit N]` | 查看审计链(脱敏后),`--limit` 控制条数 | `fhcode audit --limit 20` |
99
- | `audit verify` | 校验审计哈希链完整性,定位被篡改断点 | `fhcode audit verify` |
100
- | `tenants` | 列出所有租户及各自用量(成本/会话数,互不串台) | `fhcode tenants` |
101
-
102
- **权限(RBAC)**:四角色 `viewer / developer / operator / admin`,判定顺序 **deny 优先**:
103
-
104
- 1. `run_shell` 命中危险命令(如 `rm -rf /`、`mkfs`、`curl|sh` 等 23 条)→ 直接拒绝;
105
- 2. 访问敏感路径(`.env`、`.ssh`、`id_rsa`、`.git/config` 等 11 类)或越界沙箱 → 直接拒绝(**admin 也拦**);
106
- 3. 角色矩阵判定:deny / 需审批(approval)/ 允许;
107
- 4. shell 白名单命中的命令免审批。
108
-
109
- **多租户隔离**:数据按 `<FH_HOME>/tenants/<tenantId>/{sessions,audit,goals}` 物理目录隔离,租户 ID 强制正则 `^[A-Za-z0-9._-]{1,64}$` 校验防穿越;未指定租户时兼容旧版 `<FH_HOME>/sessions`。
110
-
111
- **成本治理**:单任务 `maxCostUsd` 熔断(达上限即终止并给结论)+ 租户日预算 `FH_TENANT_BUDGET_USD` fail-fast(任务启动前拦截,超限返回 `QUOTA_EXCEEDED`)。
112
-
113
- **审计**:每次工具执行前由「守卫(guard)」一次性完成 *策略判定→人工审批→审计留痕*,写入按月切分的 `audit-YYYY-MM.jsonl`,采用 **sha256 哈希链(防篡改)**,敏感字段自动脱敏。可用 `audit verify` 检验链完整性。
114
-
115
- ---
116
-
117
- ## 3. 工具系统
118
-
119
- 智能体在真实模式下可调用以下 8 个工具(离线模式用 Mock 模拟):
120
-
121
- | 工具 | 用途 | 关键参数 | 安全约束 |
122
- | --- | --- | --- | --- |
123
- | `read_file` | 读文件 | `path` | 沙箱内 |
124
- | `write_file` | 写/覆盖文件 | `path`, `content` | 沙箱内,自动建父目录 |
125
- | `edit_file` | 精确替换 | `path`, `oldText`, `newText` | 沙箱内 |
126
- | `list_dir` | 列目录 | `path`(可选) | 沙箱内 |
127
- | `grep` | 递归搜索 | `pattern`, `path`(可选) | 忽略 node_modules/.git |
128
- | `run_shell` | 执行命令 | `command` | **白名单 + 审批** |
129
- | `run_tests` | 跑测试 | `command`(默认 `npm test`) | 同 run_shell 调度 |
130
- | `build_check` | 构建校验 | `command`(默认 `npm run build`) | 同 run_shell 调度 |
131
-
132
- 所有工具入参经 zod 校验,异常归一为 `ToolError`,不会让进程崩溃。
133
-
134
- ---
135
-
136
- ## 4. 审批与安全模型
137
-
138
- - **路径沙箱**:任何文件操作只允许在 `cwd`(当前目录或子代理 worktree)内,越界(`../` 等)直接拒绝。
139
- - **Shell 白名单**:`run_shell` 仅当命令首词(如 `git`、`npm`)命中 `FH_SHELL_ALLOW` 才放行;否则直接拒绝。
140
- - **默认审批器**(非交互 CLI):命中白名单者自动通过;未命中者拒绝并写日志。若设置 `FH_REQUIRE_APPROVAL=false` 则完全放开(不推荐)。
141
- - **交互式审批(M3)**:当运行在 TTY 终端时,危险操作(如 `run_shell`、写文件)会**逐条弹出 `y/n` 确认**,须用户显式批准才执行;非 TTY(CI / 管道)自动回退到上述白名单审批器。
142
- - **密钥脱敏**:日志中 `apikey/secret/token/...` 字段值一律 `[REDACTED]`;企业审计日志亦对 `apiKey=/secret=/sk-*` 等做 `***` 替换。
143
- - **`.env` 不入库**:`gitignore` + `package.json` 的 `files` 白名单双重保障。
144
- - **企业权限(M4)**:四角色 RBAC + deny 优先矩阵,危险命令/敏感路径在角色判定前即拦截(含 admin)。未注入企业 guard 时行为同社区版,可用 `FH_ENTERPRISE=false` 关闭。
145
- - **防篡改审计(M4)**:工具执行前由守卫统一留痕,审计日志按月切分并以 sha256 哈希链串联,任意篡改均会被 `audit verify` 定位断点。
146
- - **多租户隔离(M4)**:租户数据按物理目录隔离,ID 正则防穿越,成本与审计互不串台。
147
- - **成本熔断(M4)**:单任务成本上限 + 租户日预算双重熔断,超限直接拒绝不静默放行。
148
-
149
- ---
150
-
151
- ## 5. 真实模型接入(示例)
152
-
153
- 已验证可用的 Agnes 网关配置(写入 `.env`):
154
-
155
- ```bash
156
- FH_PROVIDERS='[{"id":"agnes","type":"openai-compatible","baseURL":"https://api.agnes-ai.cn/v1","apiKey":"<你的key>","model":"agnes-2.5-flash","tags":["code-gen"],"costPer1k":0.001}]'
157
- FH_MODEL_STRATEGY=cost
158
- FH_SHELL_ALLOW=git,npm,node,ls,cat
159
- FH_REQUIRE_APPROVAL=true
160
- ```
161
-
162
- 更多供应商(DeepSeek / 通义 / Ollama)见《配置参考》。
163
-
164
- ---
165
-
166
- ## 6. 最佳实践
167
-
168
- 1. **先只读探查**:大改前先 `/grill src` 看风险、`/plan "..."` 看方案。
169
- 2. **注意 cwd**:真实模式下 `cwd = 当前目录`,文件写入/命令执行都作用于此。建议从**干净目录**或**专用仓库**运行,避免误改。
170
- 3. **并行用隔离**:多模块任务优先 `--parallel`,物理隔离最安全。
171
- 4. **白名单最小化**:`FH_SHELL_ALLOW` 只放确实需要的命令。
172
- 5. **离线先验证**:CI 或演示用 `FH_OFFLINE=true`,零成本且确定性强。
173
- 6. **看日志**:每次运行生成 `~/.feihong-code/sessions/<runId>.jsonl`,排错首选。
174
-
175
- ---
176
-
177
- ## 7. 典型工作流
178
-
179
- ```
180
- # 1) 评估现状(只读)
181
- fhcode /grill src
182
- fhcode /plan "重构配置模块并且补集成测试"
183
-
184
- # 2) 并行推进(隔离)
185
- fhcode --parallel "重构配置模块并且补集成测试"
186
-
187
- # 3) 单点精修(真实改码)
188
- fhcode "把配置校验抽到 config.ts 并补单测"
189
-
190
- # 4) 目标跟踪
191
- fhcode /goal "Q3 完成模块化与测试覆盖率 80%"
192
- ```
193
-
194
- ---
195
-
196
- © 2026 晋江市飞虹智科技企业管理有限公司 · 飞扬企源研发中心 · 负责人:吴赐虹
1
+ # 飞虹 Code 用户手册
2
+
3
+ > 晋江市飞虹智科技企业管理有限公司 · 飞扬企源研发中心 · 负责人:吴赐虹
4
+
5
+ 本手册面向**使用者**,讲解每个命令、工具与安全机制,并给出最佳实践。开发向内容见《架构与 API》《配置参考》。
6
+
7
+ ---
8
+
9
+ ## 1. 安装与初始化
10
+
11
+ ```bash
12
+ git clone https://github.com/wch887292/feihong-code.git
13
+ cd feihong-code && npm install && npm run build
14
+ cp .env.example .env # 然后编辑填入 FH_PROVIDERS
15
+ ```
16
+
17
+ - 未配置 `FH_PROVIDERS` → 自动**离线模式**(内置 Mock 闭环,零成本)。
18
+ - 已配置 `FH_PROVIDERS` → **真实模型模式**。
19
+ - 环境变量可从 `.env` 自动加载(仅注入未设置的键),也可直接 `export`。
20
+
21
+ ---
22
+
23
+ ## 2. 命令详解
24
+
25
+ ### 2.1 单命令模式
26
+
27
+ ```bash
28
+ fhcode "把 src/utils 的日期格式化抽成独立模块并补测试"
29
+ ```
30
+
31
+ 一次需求一次执行。编排器按 ReAct 循环:勘察 → 改码 → 测试/构建验证 → 总结。结束后打印最终结果、迭代次数、成本与日志路径。
32
+
33
+ ### 2.2 交互 REPL
34
+
35
+ ```bash
36
+ fhcode # 进入 REPL
37
+ 飞虹> 给登录页加一个表单校验
38
+ 飞虹> exit # 退出
39
+ ```
40
+
41
+ 逐条输入需求,每条独立执行一次编排。适合探索式开发。
42
+
43
+ ### 2.3 多子代理并行 `--parallel`
44
+
45
+ ```bash
46
+ fhcode --parallel "实现登录模块并且添加用户管理并且写集成测试"
47
+ ```
48
+
49
+ - **分解**:按中文并列连词(`并且/同时/分别/以及` 等)拆分为多个子任务。
50
+ - **隔离**:为每个子任务创建独立的 `git worktree`(独立目录 + 独立分支),子代理只在自己的 worktree 内读写,互不干扰。
51
+ - **并发**:`Promise.allSettled` 并发执行;单子任务失败不影响其他。
52
+ - **清理**:结束后强制移除所有 worktree,子代理产物不进入主仓库。
53
+ - ⚠️ 真实模式下会并发调用 API,免费套餐易触发 429 限流(见 FAQ)。
54
+
55
+ ### 2.4 只读技能(不修改任何文件)
56
+
57
+ | 命令 | 作用 | 示例 |
58
+ | --- | --- | --- |
59
+ | `/plan` | 生成结构化实现计划 | `fhcode /plan "实现登录并且添加支付"` |
60
+ | `/grill` | 红队式代码审查(密钥/注入/穿越/校验/待办) | `fhcode /grill src` |
61
+ | `/goal` | 分解并保存高层目标到 `~/.feihong-code/goals` | `fhcode /goal "搭建体系并且完善文档"` |
62
+
63
+ 三者均为只读,可放心在任何仓库运行。
64
+
65
+ ### 2.5 版本与帮助
66
+
67
+ ```bash
68
+ fhcode --version # 或 -v:版本 + 署名
69
+ fhcode --help # 或 -h:完整用法
70
+ ```
71
+
72
+ ### 2.6 恢复与审计(M3)
73
+
74
+ 每次任务都会把完整对话、迭代计数、成本、被改动文件落盘为会话检查点(`<runId>.session.json`),可随时恢复与审计。
75
+
76
+ | 命令 | 作用 | 示例 |
77
+ | --- | --- | --- |
78
+ | `sessions` | 列出历史会话(状态 / 迭代 / 成本 / 文件数 / 更新时间) | `fhcode sessions` |
79
+ | `resume <id>` | 从检查点重建对话并续跑中断任务(支持 8 位前缀) | `fhcode resume 6f7f734f` |
80
+ | `diff [<id>]` | 展示会话作用域变更;省略 id 则显示当前工作区全量 diff | `fhcode diff 6f7f734f` |
81
+ | `rollback <id> [--yes]` | 回滚会话产生的改动(**危险,必须 `--yes` 确认**) | `fhcode rollback 6f7f734f --yes` |
82
+
83
+ **resume 适用场景**:进程崩溃、手动中断、达到最大迭代仍无结果。续跑会接着已有对话继续 ReAct 循环,直到产出最终答案,新过程仍写入同一 `runId` 的事件日志,审计连续。
84
+
85
+ **diff / rollback 安全边界**:
86
+ - 仅作用于本会话 `touchedFiles`(被 `write_file`/`edit_file` 创建或修改的文件),绝不整仓回滚。
87
+ - `diff` 对已跟踪文件走 `git diff`,未跟踪文件走 `git diff --no-index` 展示新增内容。
88
+ - `rollback` 对已跟踪文件 `git checkout --`,未跟踪文件直接删除;**未确认(`--yes`)或非 git 仓库时一律拒绝执行**,避免误删。
89
+
90
+ ### 2.7 企业能力(M4)
91
+
92
+ 企业模式默认开启(受 `FH_ENTERPRISE` 控制,设 `false` 即退回社区版无感行为)。开启后提供四类能力:
93
+
94
+ | 命令 | 作用 | 示例 |
95
+ | --- | --- | --- |
96
+ | `whoami` | 查看当前租户 / 用户 / 角色 / 隔离目录 / 当日成本 | `fhcode whoami` |
97
+ | `policy` | 渲染当前生效的策略矩阵(角色-工具、配额、黑名单) | `fhcode policy` |
98
+ | `audit [--limit N]` | 查看审计链(脱敏后),`--limit` 控制条数 | `fhcode audit --limit 20` |
99
+ | `audit verify` | 校验审计哈希链完整性,定位被篡改断点 | `fhcode audit verify` |
100
+ | `tenants` | 列出所有租户及各自用量(成本/会话数,互不串台) | `fhcode tenants` |
101
+
102
+ **权限(RBAC)**:四角色 `viewer / developer / operator / admin`,判定顺序 **deny 优先**:
103
+
104
+ 1. `run_shell` 命中危险命令(如 `rm -rf /`、`mkfs`、`curl|sh` 等 23 条)→ 直接拒绝;
105
+ 2. 访问敏感路径(`.env`、`.ssh`、`id_rsa`、`.git/config` 等 11 类)或越界沙箱 → 直接拒绝(**admin 也拦**);
106
+ 3. 角色矩阵判定:deny / 需审批(approval)/ 允许;
107
+ 4. shell 白名单命中的命令免审批。
108
+
109
+ **多租户隔离**:数据按 `<FH_HOME>/tenants/<tenantId>/{sessions,audit,goals}` 物理目录隔离,租户 ID 强制正则 `^[A-Za-z0-9._-]{1,64}$` 校验防穿越;未指定租户时兼容旧版 `<FH_HOME>/sessions`。
110
+
111
+ **成本治理**:单任务 `maxCostUsd` 熔断(达上限即终止并给结论)+ 租户日预算 `FH_TENANT_BUDGET_USD` fail-fast(任务启动前拦截,超限返回 `QUOTA_EXCEEDED`)。
112
+
113
+ **审计**:每次工具执行前由「守卫(guard)」一次性完成 *策略判定→人工审批→审计留痕*,写入按月切分的 `audit-YYYY-MM.jsonl`,采用 **sha256 哈希链(防篡改)**,敏感字段自动脱敏。可用 `audit verify` 检验链完整性。
114
+
115
+ ---
116
+
117
+ ## 3. 工具系统
118
+
119
+ 智能体在真实模式下可调用以下 8 个工具(离线模式用 Mock 模拟):
120
+
121
+ | 工具 | 用途 | 关键参数 | 安全约束 |
122
+ | --- | --- | --- | --- |
123
+ | `read_file` | 读文件 | `path` | 沙箱内 |
124
+ | `write_file` | 写/覆盖文件 | `path`, `content` | 沙箱内,自动建父目录 |
125
+ | `edit_file` | 精确替换 | `path`, `oldText`, `newText` | 沙箱内 |
126
+ | `list_dir` | 列目录 | `path`(可选) | 沙箱内 |
127
+ | `grep` | 递归搜索 | `pattern`, `path`(可选) | 忽略 node_modules/.git |
128
+ | `run_shell` | 执行命令 | `command` | **白名单 + 审批** |
129
+ | `run_tests` | 跑测试 | `command`(默认 `npm test`) | 同 run_shell 调度 |
130
+ | `build_check` | 构建校验 | `command`(默认 `npm run build`) | 同 run_shell 调度 |
131
+
132
+ 所有工具入参经 zod 校验,异常归一为 `ToolError`,不会让进程崩溃。
133
+
134
+ ---
135
+
136
+ ## 4. 审批与安全模型
137
+
138
+ - **路径沙箱**:任何文件操作只允许在 `cwd`(当前目录或子代理 worktree)内,越界(`../` 等)直接拒绝。
139
+ - **Shell 白名单**:`run_shell` 仅当命令首词(如 `git`、`npm`)命中 `FH_SHELL_ALLOW` 才放行;否则直接拒绝。
140
+ - **默认审批器**(非交互 CLI):命中白名单者自动通过;未命中者拒绝并写日志。若设置 `FH_REQUIRE_APPROVAL=false` 则完全放开(不推荐)。
141
+ - **交互式审批(M3)**:当运行在 TTY 终端时,危险操作(如 `run_shell`、写文件)会**逐条弹出 `y/n` 确认**,须用户显式批准才执行;非 TTY(CI / 管道)自动回退到上述白名单审批器。
142
+ - **密钥脱敏**:日志中 `apikey/secret/token/...` 字段值一律 `[REDACTED]`;企业审计日志亦对 `apiKey=/secret=/sk-*` 等做 `***` 替换。
143
+ - **`.env` 不入库**:`gitignore` + `package.json` 的 `files` 白名单双重保障。
144
+ - **企业权限(M4)**:四角色 RBAC + deny 优先矩阵,危险命令/敏感路径在角色判定前即拦截(含 admin)。未注入企业 guard 时行为同社区版,可用 `FH_ENTERPRISE=false` 关闭。
145
+ - **防篡改审计(M4)**:工具执行前由守卫统一留痕,审计日志按月切分并以 sha256 哈希链串联,任意篡改均会被 `audit verify` 定位断点。
146
+ - **多租户隔离(M4)**:租户数据按物理目录隔离,ID 正则防穿越,成本与审计互不串台。
147
+ - **成本熔断(M4)**:单任务成本上限 + 租户日预算双重熔断,超限直接拒绝不静默放行。
148
+
149
+ ---
150
+
151
+ ## 5. 真实模型接入(示例)
152
+
153
+ 已验证可用的 Agnes 网关配置(写入 `.env`):
154
+
155
+ ```bash
156
+ FH_PROVIDERS='[{"id":"agnes","type":"openai-compatible","baseURL":"https://api.agnes-ai.cn/v1","apiKey":"<你的key>","model":"agnes-2.5-flash","tags":["code-gen"],"costPer1k":0.001}]'
157
+ FH_MODEL_STRATEGY=cost
158
+ FH_SHELL_ALLOW=git,npm,node,ls,cat
159
+ FH_REQUIRE_APPROVAL=true
160
+ ```
161
+
162
+ 更多供应商(DeepSeek / 通义 / Ollama)见《配置参考》。
163
+
164
+ ---
165
+
166
+ ## 6. 最佳实践
167
+
168
+ 1. **先只读探查**:大改前先 `/grill src` 看风险、`/plan "..."` 看方案。
169
+ 2. **注意 cwd**:真实模式下 `cwd = 当前目录`,文件写入/命令执行都作用于此。建议从**干净目录**或**专用仓库**运行,避免误改。
170
+ 3. **并行用隔离**:多模块任务优先 `--parallel`,物理隔离最安全。
171
+ 4. **白名单最小化**:`FH_SHELL_ALLOW` 只放确实需要的命令。
172
+ 5. **离线先验证**:CI 或演示用 `FH_OFFLINE=true`,零成本且确定性强。
173
+ 6. **看日志**:每次运行生成 `~/.feihong-code/sessions/<runId>.jsonl`,排错首选。
174
+
175
+ ---
176
+
177
+ ## 7. 典型工作流
178
+
179
+ ```
180
+ # 1) 评估现状(只读)
181
+ fhcode /grill src
182
+ fhcode /plan "重构配置模块并且补集成测试"
183
+
184
+ # 2) 并行推进(隔离)
185
+ fhcode --parallel "重构配置模块并且补集成测试"
186
+
187
+ # 3) 单点精修(真实改码)
188
+ fhcode "把配置校验抽到 config.ts 并补单测"
189
+
190
+ # 4) 目标跟踪
191
+ fhcode /goal "Q3 完成模块化与测试覆盖率 80%"
192
+ ```
193
+
194
+ ---
195
+
196
+ © 2026 晋江市飞虹智科技企业管理有限公司 · 飞扬企源研发中心 · 负责人:吴赐虹