feihong-code 7.2.0 → 7.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 (204) hide show
  1. package/.github/workflows/ci.yml +54 -1
  2. package/.github/workflows/release.yml +30 -0
  3. package/.github/workflows/swebench-real.yml +84 -0
  4. package/CHANGELOG.md +41 -39
  5. package/CONTRIBUTING.md +9 -2
  6. package/README.md +56 -6
  7. package/README.self-evolve.md +279 -274
  8. package/dist/agent/change-manager.js +1 -1
  9. package/dist/agent/code-rag.js +1 -1
  10. package/dist/agent/code-review.js +1 -1
  11. package/dist/agent/code-writer.js +1 -1
  12. package/dist/agent/completion-engine.js +76 -45
  13. package/dist/agent/completion-engine.js.map +1 -1
  14. package/dist/agent/completion-postprocess.js +109 -0
  15. package/dist/agent/completion-postprocess.js.map +1 -0
  16. package/dist/agent/context-budget.js +121 -0
  17. package/dist/agent/context-budget.js.map +1 -0
  18. package/dist/agent/context-compactor.js +58 -0
  19. package/dist/agent/context-compactor.js.map +1 -1
  20. package/dist/agent/experience.js +1 -1
  21. package/dist/agent/layered-memory.js +1 -1
  22. package/dist/agent/lint.js +121 -0
  23. package/dist/agent/lint.js.map +1 -0
  24. package/dist/agent/orchestrator.js +106 -31
  25. package/dist/agent/orchestrator.js.map +1 -1
  26. package/dist/agent/parallel-orchestrator.js +1 -1
  27. package/dist/agent/planner.js +8 -3
  28. package/dist/agent/planner.js.map +1 -1
  29. package/dist/agent/prompts.js +55 -55
  30. package/dist/agent/quality-gate.js +1 -1
  31. package/dist/agent/repo-context.js +1 -1
  32. package/dist/agent/repo-reader.js +1 -1
  33. package/dist/agent/repo-underwriter.js +1 -1
  34. package/dist/agent/self-correction.js +25 -25
  35. package/dist/agent/self-heal.js +32 -27
  36. package/dist/agent/self-heal.js.map +1 -1
  37. package/dist/agent/self-improver.js +1 -1
  38. package/dist/agent/subagent-summary.js +1 -1
  39. package/dist/agent/subagent.js +1 -1
  40. package/dist/agent/swe-agent.js +1 -1
  41. package/dist/agent/swe-verifier.js +1 -1
  42. package/dist/agent/symbol-index.js +1 -1
  43. package/dist/agent/team.js +1 -1
  44. package/dist/agent/type-checker.js +1 -1
  45. package/dist/cli/commands.js +16 -0
  46. package/dist/cli/commands.js.map +1 -1
  47. package/dist/cli/index.js +66 -2
  48. package/dist/cli/index.js.map +1 -1
  49. package/dist/cli/multi-pane-tui.js +217 -0
  50. package/dist/cli/multi-pane-tui.js.map +1 -0
  51. package/dist/cli/repl.js +1 -1
  52. package/dist/cli/run.js +168 -42
  53. package/dist/cli/run.js.map +1 -1
  54. package/dist/cli/self-evolve-cli.js +168 -0
  55. package/dist/cli/tui-run.js +79 -0
  56. package/dist/cli/tui-run.js.map +1 -0
  57. package/dist/cli/tui.js +1 -1
  58. package/dist/cli/tui.js.map +1 -1
  59. package/dist/cli/version.js +3 -3
  60. package/dist/cli/version.js.map +1 -1
  61. package/dist/enterprise/audit.js +1 -1
  62. package/dist/enterprise/index.js +1 -1
  63. package/dist/enterprise/policy.js +1 -1
  64. package/dist/enterprise/quota.js +1 -1
  65. package/dist/enterprise/tenant.js +1 -1
  66. package/dist/harness/executor.js +1 -1
  67. package/dist/harness/index.js +1 -1
  68. package/dist/harness/loader.js +1 -1
  69. package/dist/harness/types.js +1 -1
  70. package/dist/harness/verifier.js +52 -12
  71. package/dist/harness/verifier.js.map +1 -1
  72. package/dist/integrations/feishu-bridge.js +348 -0
  73. package/dist/integrations/feishu-bridge.js.map +1 -0
  74. package/dist/integrations/github-mcp.js +137 -0
  75. package/dist/integrations/github-mcp.js.map +1 -0
  76. package/dist/integrations/wechat-bridge.js +499 -0
  77. package/dist/integrations/wechat-bridge.js.map +1 -0
  78. package/dist/integrations/yuanbao-bridge.js +326 -0
  79. package/dist/integrations/yuanbao-bridge.js.map +1 -0
  80. package/dist/lsp/lsp-client.js +183 -0
  81. package/dist/lsp/lsp-client.js.map +1 -0
  82. package/dist/lsp/lsp-service.js +159 -0
  83. package/dist/lsp/lsp-service.js.map +1 -0
  84. package/dist/models/model-router.js +1 -1
  85. package/dist/models/model.dto.js +1 -1
  86. package/dist/models/providers/ollama.provider.js +1 -1
  87. package/dist/models/providers/openai-compatible.provider.js +1 -1
  88. package/dist/plugins/manager.js +50 -2
  89. package/dist/plugins/manager.js.map +1 -1
  90. package/dist/plugins/plugin-loader.js +1 -1
  91. package/dist/runtime/event-log.js +1 -1
  92. package/dist/runtime/git.js +1 -1
  93. package/dist/runtime/hooks.js +71 -4
  94. package/dist/runtime/hooks.js.map +1 -1
  95. package/dist/runtime/session-persist.js +1 -1
  96. package/dist/runtime/worktree.js +1 -1
  97. package/dist/self-evolve/manager.js +517 -401
  98. package/dist/self-evolve/self-heal-scheduler.js +160 -0
  99. package/dist/self-evolve/self-heal-scheduler.js.map +1 -0
  100. package/dist/shared/concurrency.js +1 -1
  101. package/dist/shared/config.js +4 -2
  102. package/dist/shared/config.js.map +1 -1
  103. package/dist/shared/errors.js +1 -1
  104. package/dist/shared/i18n.js +109 -101
  105. package/dist/shared/i18n.js.map +1 -1
  106. package/dist/shared/secure-store.js +12 -5
  107. package/dist/shared/secure-store.js.map +1 -1
  108. package/dist/shared/types.js +1 -1
  109. package/dist/skills/goal.js +1 -1
  110. package/dist/skills/grill.js +1 -1
  111. package/dist/skills/plan.js +1 -1
  112. package/dist/skills/pua-hooks.js +273 -0
  113. package/dist/skills/pua-hooks.js.map +1 -0
  114. package/dist/skills/self-heal.js +9 -3
  115. package/dist/skills/self-heal.js.map +1 -1
  116. package/dist/skills/skill-loader.js +1 -1
  117. package/dist/skills/skill-market.js +84 -8
  118. package/dist/skills/skill-market.js.map +1 -1
  119. package/dist/tools/analysis/code-analyzer.js +1 -1
  120. package/dist/tools/file/edit.tool.js +18 -3
  121. package/dist/tools/file/edit.tool.js.map +1 -1
  122. package/dist/tools/file/list.tool.js +1 -1
  123. package/dist/tools/file/read.tool.js +1 -1
  124. package/dist/tools/file/write.tool.js +1 -1
  125. package/dist/tools/generator/code-generator.js +41 -41
  126. package/dist/tools/generator/test-generator.js +10 -10
  127. package/dist/tools/index.js +1 -1
  128. package/dist/tools/mcp/index.js +1 -1
  129. package/dist/tools/mcp/mcp-client.js +1 -1
  130. package/dist/tools/safe-path.js +1 -1
  131. package/dist/tools/search/grep.tool.js +1 -1
  132. package/dist/tools/shell/exec.js +24 -2
  133. package/dist/tools/shell/exec.js.map +1 -1
  134. package/dist/tools/shell/run-shell.tool.js +1 -1
  135. package/dist/tools/skills/load-skill.tool.js +1 -1
  136. package/dist/tools/tool.registry.js +10 -1
  137. package/dist/tools/tool.registry.js.map +1 -1
  138. package/dist/tools/verify/build-check.tool.js +1 -1
  139. package/dist/tools/verify/test-run.tool.js +1 -1
  140. package/dist/tools/web/web.tool.js +1 -1
  141. package/dist/voice/voice-programming.js +32 -6
  142. package/dist/voice/voice-programming.js.map +1 -1
  143. package/dist/web/auth.js +34 -2
  144. package/dist/web/auth.js.map +1 -1
  145. package/dist/web/channels.js +1 -1
  146. package/dist/web/extra-apis.js +440 -0
  147. package/dist/web/extra-apis.js.map +1 -0
  148. package/dist/web/public/css/style.css +99 -72
  149. package/dist/web/public/index.html +44 -1
  150. package/dist/web/public/js/api.js +64 -2
  151. package/dist/web/public/js/app.js +151 -128
  152. package/dist/web/public/js/mock-api.js +25 -0
  153. package/dist/web/public/js/monaco-editor.js +161 -1
  154. package/dist/web/public/js/ui.js +292 -56
  155. package/dist/web/public/service-worker.js +5 -29
  156. package/dist/web/server.js +178 -61
  157. package/dist/web/server.js.map +1 -1
  158. package/dist/web/task-queue.js +6 -21
  159. package/dist/web/task-queue.js.map +1 -1
  160. package/docs/App/344/275/277/347/224/250/350/257/264/346/230/216/344/271/246.md +1 -1
  161. package/docs/App/346/212/200/346/234/257/350/257/264/346/230/216/344/271/246.md +1 -1
  162. package/docs/BENCHMARK_REPORT_en.md +62 -5
  163. package/docs/BENCHMARK_REPORT_zh.md +66 -9
  164. package/docs/DPA.md +65 -0
  165. package/docs/DPA/346/225/260/346/215/256/345/244/204/347/220/206/345/215/217/350/256/256/346/250/241/346/235/277_v1.0.md +69 -0
  166. package/docs/Deployment_Guide_EN.md +1 -1
  167. package/docs/SECURITY_WHITEPAPER.md +74 -0
  168. package/docs/SELF-EVOLVE-GUIDE.md +1 -1
  169. package/docs/SWE_BENCH_REPORT.md +73 -0
  170. package/docs/TECHNICAL_SPEC_en.md +1 -1
  171. package/docs/TECHNICAL_SPEC_zh.md +1 -1
  172. package/docs/Technical_Manual_EN.md +1 -1
  173. package/docs/UPDATE_NOTES_en.md +1 -1
  174. package/docs/UPDATE_NOTES_zh.md +1 -1
  175. package/docs/UPGRADE_7.2.0.md +309 -0
  176. package/docs/UPGRADE_GUIDE_7_5.md +86 -0
  177. package/docs/UPGRADE_GUIDE_7_6.md +153 -0
  178. package/docs/User_Manual_EN.md +1 -1
  179. package/docs/VOLTAGENT_SKILLS_CATALOG.md +95 -0
  180. package/docs/error-codes.md +1 -1
  181. package/docs/geo-feihong-code.html +391 -0
  182. package/docs//344/272/247/345/223/201/345/274/200/345/217/221/346/226/207/346/241/243.md +5 -3
  183. package/docs//344/275/277/347/224/250/350/257/264/346/230/216/344/271/246.md +140 -231
  184. package/docs//345/205/250/351/235/242/345/244/215/347/233/230_50/350/275/256/346/267/261/345/272/246/345/256/241/350/256/241_v7.2.0.md +208 -0
  185. package/docs//345/205/250/351/235/242/345/244/215/347/233/230_6/351/241/271/351/207/215/347/202/271/346/240/270/346/237/245_v7.2.0.md +152 -0
  186. package/docs//345/205/250/351/235/242/345/244/215/347/233/230_/350/277/220/350/241/214/346/227/266/345/256/236/346/265/213/347/211/210_v7.2.0.md +271 -0
  187. package/docs//345/220/210/350/247/204/350/256/244/350/257/201/345/207/206/345/244/207/346/270/205/345/215/225_v7.2.0.md +59 -0
  188. package/docs//345/256/211/345/205/250/347/231/275/347/232/256/344/271/246_v7.2.0.md +84 -0
  189. package/docs//346/212/200/346/234/257/350/257/264/346/230/216/344/271/246.md +240 -149
  190. package/docs//351/203/250/347/275/262/350/257/264/346/230/216/344/271/246.md +2 -2
  191. package/electron/main.js +4 -202
  192. package/package.json +182 -172
  193. package/templates/skills/api-design/SKILL.md +27 -0
  194. package/templates/skills/code-review/SKILL.md +35 -0
  195. package/templates/skills/dependency-upgrade/SKILL.md +29 -0
  196. package/templates/skills/doc-gen/SKILL.md +29 -0
  197. package/templates/skills/git-flow/SKILL.md +26 -0
  198. package/templates/skills/onboarding/SKILL.md +27 -0
  199. package/templates/skills/performance/SKILL.md +29 -0
  200. package/templates/skills/refactor/SKILL.md +28 -0
  201. package/templates/skills/security-audit/SKILL.md +28 -0
  202. package/templates/skills/test-gen/SKILL.md +30 -0
  203. package/docs/DEPLOYMENT.md +0 -382
  204. package/docs/MODEL_FINETUNING.md +0 -405
@@ -0,0 +1,35 @@
1
+ ---
2
+ name: "Code Review 代码审查"
3
+ description: "对指定文件/改动进行系统代码审查:定位缺陷、安全问题、可维护性问题,输出分级问题清单。"
4
+ ---
5
+
6
+ # Code Review 代码审查
7
+
8
+ <!-- 模板占位:使用 `fhcode skill-new <name> --template code-review` 复制并定制 -->
9
+
10
+ ## 触发
11
+ 当用户说"审查这段代码/帮我 review / 检查这个 PR 的改动"时使用。
12
+
13
+ ## 执行步骤
14
+ 1. 明确审查对象(文件路径或改动范围),必要时用 git diff 获取改动
15
+ 2. 按以下维度逐项检查:
16
+ - 正确性:边界条件、空值、竞态、异常路径
17
+ - 安全:注入、敏感信息、权限、依赖风险(OWASP Top 10)
18
+ - 可维护性:命名、重复代码、职责划分、可测试性
19
+ - 性能:复杂度、不必要的重复计算、I/O 阻塞
20
+ 3. 输出分级问题清单:🔴 严重(必修)/ 🟡 建议(应修)/ 🟢 优化(可选)
21
+ 4. 每条问题给出:位置(文件:行)、问题说明、修复建议、示例代码
22
+
23
+ ## 输出格式
24
+ ```
25
+ 审查对象:<文件/范围>
26
+ 🔴 严重(N)…
27
+ 🟡 建议(N)…
28
+ 🟢 优化(N)…
29
+ 总体结论:…
30
+ ```
31
+
32
+ ## 自检与边界
33
+ - 每条问题给出可定位的证据(文件:行或代码片段),不空泛断言
34
+ - 分级标准固定:严重=必修/建议=应修/优化=可选,不夸大风险
35
+ - 未覆盖范围(如未读文件)明确声明,不声称"全量审查完成"
@@ -0,0 +1,29 @@
1
+ ---
2
+ name: "依赖升级检查"
3
+ description: "检查依赖版本、升级风险与兼容性,生成安全升级方案。"
4
+ ---
5
+
6
+ # 依赖升级检查
7
+
8
+ <!-- 模板占位:使用 `fhcode skill-new <name> --template dependency-upgrade` 复制并定制 -->
9
+
10
+ ## 触发
11
+ 当用户说"升级依赖/检查过时包/依赖有漏洞"时使用。
12
+
13
+ ## 执行步骤
14
+ 1. 现状盘点:package.json 依赖清单 + 版本范围
15
+ 2. 检查:npm outdated / npm audit / osv-scanner 结果
16
+ 3. 升级分级:
17
+ - patch:直接升(低风险)
18
+ - minor:读 changelog,关注破坏性变更
19
+ - major:大版本,检查 breaking changes + 迁移指南
20
+ 4. 每项升级:当前 → 目标版本、风险、影响面、验证方式
21
+ 5. 输出分阶段升级顺序(先安全补丁,后大版本)
22
+
23
+ ## 输出格式
24
+ 依赖升级清单(含风险与验证)+ 建议顺序。
25
+
26
+ ## 自检与边界
27
+ - 只给出建议命令,不代替用户实际执行升级
28
+ - 版本号必须来自 package.json / 官方 changelog,禁止编造版本
29
+ - 大版本升级必须附迁移要点;未实际验证前标注"待验证"
@@ -0,0 +1,29 @@
1
+ ---
2
+ name: "代码文档生成"
3
+ description: "为代码生成文档:模块说明、函数注释、README、CHANGELOG。"
4
+ ---
5
+
6
+ # 代码文档生成
7
+
8
+ <!-- 模板占位:使用 `fhcode skill-new <name> --template doc-gen` 复制并定制 -->
9
+
10
+ ## 触发
11
+ 当用户说"给这段代码写文档/生成 README/补注释"时使用。
12
+
13
+ ## 执行步骤
14
+ 1. 读代码,理解模块职责、公开 API、数据流
15
+ 2. 生成内容:
16
+ - 模块级:职责、使用场景、依赖
17
+ - 函数级:参数、返回、异常、示例(JSDoc 风格)
18
+ - 文档风格与项目一致(中文/英文)
19
+ 3. 注释只解释"为什么",不逐行翻译代码
20
+ 4. README:一句话定位 + 快速开始 + 配置 + 示例 + FAQ
21
+ 5. CHANGELOG:按 Conventional Commits 归类
22
+
23
+ ## 输出格式
24
+ 按需交付:API 文档 / README / CHANGELOG 片段。
25
+
26
+ ## 自检与边界
27
+ - 不编造不存在的 API/参数/行为;不确定处标注"待确认"
28
+ - 注释只解释"为什么",不逐行翻译代码
29
+ - 文档与实现不一致时以代码为准并提示差异
@@ -0,0 +1,26 @@
1
+ ---
2
+ name: "Git Flow 流程助手"
3
+ description: "Git 提交规范、分支管理、rebase/合并、冲突解决的操作指引。"
4
+ ---
5
+
6
+ # Git Flow 流程助手
7
+
8
+ <!-- 模板占位:使用 `fhcode skill-new <name> --template git-flow` 复制并定制 -->
9
+
10
+ ## 触发
11
+ 当用户涉及 commit / branch / rebase / merge / 冲突解决 / 回滚时使用。
12
+
13
+ ## 执行步骤
14
+ 1. 先查看当前状态:git status / git log --oneline -5 / git branch
15
+ 2. 提交规范:conventional commits(feat/fix/docs/style/refactor/perf/test/chore),正文说明为什么
16
+ 3. 分支操作:新功能用 feat/<name>,修复用 fix/<name>,完成后合并回主分支
17
+ 4. rebase 冲突:git rebase --continue 前先解决冲突文件,git add 后继续
18
+ 5. 回滚:区分 revert(保留历史)与 reset(丢弃历史),谨慎操作
19
+
20
+ ## 输出格式
21
+ 给出可直接执行的命令序列 + 每步说明 + 风险提示。
22
+
23
+ ## 自检与边界
24
+ - 不擅自执行 git reset --hard / force push 等破坏性命令,只给命令并附风险警告
25
+ - 回滚建议区分 revert(保留历史)与 reset(丢弃历史),说明影响面
26
+ - 先 git status 确认当前状态再给操作序列,命令必须与实际状态一致
@@ -0,0 +1,27 @@
1
+ ---
2
+ name: "新项目上手导读"
3
+ description: "快速理解陌生代码库:架构、目录、入口、构建运行、关键模块。"
4
+ ---
5
+
6
+ # 新项目上手导读
7
+
8
+ <!-- 模板占位:使用 `fhcode skill-new <name> --template onboarding` 复制并定制 -->
9
+
10
+ ## 触发
11
+ 当用户说"这个项目怎么跑/看不懂这个仓库/帮我熟悉代码"时使用。
12
+
13
+ ## 执行步骤
14
+ 1. 快速扫描:README、package.json(scripts/deps)、目录结构、配置文件
15
+ 2. 产出仓库地图:
16
+ - 技术栈与运行方式(npm scripts / docker / env)
17
+ - 目录职责(src 分层、入口、测试)
18
+ - 核心数据流/请求链路(入口 → 路由 → 业务 → 存储)
19
+ 3. 标记关键文件与重要模块(含行号)
20
+ 4. 给出"从哪开始读"的路径建议 + 常见任务操作指南(加接口/加页面)
21
+
22
+ ## 输出格式
23
+ 仓库导读:技术栈 / 运行 / 目录地图 / 数据流 / 关键文件 / 上手路径。
24
+
25
+ ## 自检与边界
26
+ - 不编造架构信息:所有结论来自实际文件阅读,注明来源文件
27
+ - 未探查到的模块标注"未探查",不猜测职责
@@ -0,0 +1,29 @@
1
+ ---
2
+ name: "性能优化分析"
3
+ description: "定位性能瓶颈并给出优化方案:复杂度、I/O、缓存、并发。"
4
+ ---
5
+
6
+ # 性能优化分析
7
+
8
+ <!-- 模板占位:使用 `fhcode skill-new <name> --template performance` 复制并定制 -->
9
+
10
+ ## 触发
11
+ 当用户说"太慢了/性能问题/优化下速度/内存泄漏"时使用。
12
+
13
+ ## 执行步骤
14
+ 1. 先量化:不要凭空优化,指出如何测量(benchmark、profile、日志耗时)
15
+ 2. 常见瓶颈排查:
16
+ - 算法复杂度(O(n²)→O(n log n))
17
+ - 重复计算/循环内 I/O
18
+ - 无缓存/缓存失效策略
19
+ - 阻塞(同步 I/O、串行请求可并行化)
20
+ - 内存:大对象、未释放引用、流式处理
21
+ 3. 给出:瓶颈定位 → 量化方法 → 优化方案 → 预期收益 → 验证方法
22
+
23
+ ## 输出格式
24
+ 瓶颈分析表 + 优化前后对比 + 收益预估。
25
+
26
+ ## 自检与边界
27
+ - 优化建议需给出量化方法(如耗时/内存测量),不凭感觉断言瓶颈
28
+ - 收益预估需注明假设与测量前提,标注"估算"
29
+ - 不为了性能牺牲正确性/可读性,权衡需说明
@@ -0,0 +1,28 @@
1
+ ---
2
+ name: "代码重构建议"
3
+ description: "对既有代码提出可落地的重构方案:保持行为不变的前提下提升可读性、可维护性与性能。"
4
+ ---
5
+
6
+ # 代码重构建议
7
+
8
+ <!-- 模板占位:使用 `fhcode skill-new <name> --template refactor` 复制并定制 -->
9
+
10
+ ## 触发
11
+ 当用户说"这段代码太乱/帮我重构/优化下结构"时使用。
12
+
13
+ ## 执行步骤
14
+ 1. 先理解行为:读代码,确定输入输出契约(先写/确认测试覆盖)
15
+ 2. 识别坏味道:长函数、重复代码、过度嵌套、魔法数字、职责混乱
16
+ 3. 给出重构方案(保持行为不变):
17
+ - 提取函数/类、消除重复、简化条件、引入常量/枚举
18
+ - 每步说明"为什么安全"(有测试兜底)
19
+ 4. 提供重构前/后代码对比
20
+ 5. 强调:重构 ≠ 加功能,逐步小步提交,每步跑测试
21
+
22
+ ## 输出格式
23
+ 问题 → 方案 → 重构前后对比 → 验证方式。
24
+
25
+ ## 自检与边界
26
+ - 不改变行为:重构建议必须配套测试验证,未覆盖路径明确提示
27
+ - 不编造测试结果,验证需实际运行
28
+ - 重构 ≠ 加功能,小步提交,每步跑测试
@@ -0,0 +1,28 @@
1
+ ---
2
+ name: "安全审计(OWASP)"
3
+ description: "对代码进行安全审计:OWASP Top 10、敏感信息、依赖漏洞、注入风险。"
4
+ ---
5
+
6
+ # 安全审计(OWASP)
7
+
8
+ <!-- 模板占位:使用 `fhcode skill-new <name> --template security-audit` 复制并定制 -->
9
+
10
+ ## 触发
11
+ 当用户说"安全审计/检查安全问题/有没有漏洞"时使用。
12
+
13
+ ## 执行步骤
14
+ 1. 静态扫描面:
15
+ - 注入:SQL/命令/路径/XSS(拼接用户输入处重点)
16
+ - 敏感信息:密钥/令牌/个人数据是否落库、日志、响应
17
+ - 认证授权:越权访问、弱校验、会话管理
18
+ - 依赖:npm audit / osv-scanner 结果解读
19
+ 2. 逐项给出:位置、漏洞类型(映射 OWASP Top 10)、风险等级、修复代码
20
+ 3. 输出修复优先级:P0(立即修)/ P1(近期)/ P2(规划)
21
+
22
+ ## 输出格式
23
+ 审计报告:发现清单(位置+类型+等级+修复方案)+ 优先级 + 未发现项声明(限定检查范围)。
24
+
25
+ ## 自检与边界
26
+ - 只报告已确认的问题,不夸大;每项标注证据位置
27
+ - 敏感信息不得在输出中明文展示完整密钥/令牌(脱敏展示)
28
+ - 明确声明未检查范围,不声称"全库无漏洞"
@@ -0,0 +1,30 @@
1
+ ---
2
+ name: "单元测试生成"
3
+ description: "为指定函数/模块生成高质量单元测试:覆盖正常/边界/异常路径。"
4
+ ---
5
+
6
+ # 单元测试生成
7
+
8
+ <!-- 模板占位:使用 `fhcode skill-new <name> --template test-gen` 复制并定制 -->
9
+
10
+ ## 触发
11
+ 当用户说"帮这个函数写测试/补测试/覆盖率太低"时使用。
12
+
13
+ ## 执行步骤
14
+ 1. 读目标函数/模块,理解输入输出与依赖
15
+ 2. 设计测试用例矩阵:
16
+ - 正常路径(典型输入)
17
+ - 边界(空、极值、0、超大、类型边界)
18
+ - 异常(非法输入、依赖抛错、超时)
19
+ - 纯函数优先测,外部依赖用 mock/stub
20
+ 3. 按项目测试框架(node:test / jest / vitest)生成
21
+ 4. 用例命名规范:should_<行为>_when_<条件>
22
+ 5. 给出运行命令,确认可通过
23
+
24
+ ## 输出格式
25
+ 测试代码 + 用例矩阵说明 + 运行结果。
26
+
27
+ ## 自检与边界
28
+ - 测试代码必须可运行:先跑通再交付,不交付未验证用例
29
+ - 不编造测试结果,运行输出需真实
30
+ - 外部依赖用 mock/stub,不依赖真实网络/数据库(除非明确要求集成测试)
@@ -1,382 +0,0 @@
1
- # 飞虹 Code CI/CD 部署指南
2
-
3
- > 晋江市飞虹智科技企业管理有限公司 · 飞扬企源研发中心 · 负责人:吴赐虹
4
-
5
- ## 目录
6
-
7
- 1. [CI 持续集成](#1-ci-持续集成)
8
- 2. [CD 持续部署](#2-cd-持续部署)
9
- 3. [Docker 部署](#3-docker-部署)
10
- 4. [Node.js 直接部署](#4-nodejs-直接部署)
11
- 5. [环境变量配置](#5-环境变量配置)
12
- 6. [生产环境最佳实践](#6-生产环境最佳实践)
13
-
14
- ---
15
-
16
- ## 1. CI 持续集成
17
-
18
- ### 1.1 工作流概览
19
-
20
- 项目已配置完整的 CI 工作流(`.github/workflows/ci.yml`),包含 4 个并行 Job:
21
-
22
- | Job | 说明 | 触发条件 |
23
- |---|---|---|
24
- | **build** | 多 Node 版本构建 + 离线冒烟测试 | 每次 push/PR |
25
- | **enterprise** | M4 企业能力验证(RBAC/审计/多租户/配额) | 每次 push/PR |
26
- | **security** | 供应链安全 + 密钥扫描 + npm audit | 每次 push/PR |
27
- | **docker** | Docker 镜像构建校验 + 容器冒烟 | 每次 push/PR |
28
-
29
- ### 1.2 触发条件
30
-
31
- ```yaml
32
- on:
33
- push:
34
- branches: [master, main]
35
- pull_request:
36
- workflow_dispatch: # 手动触发
37
- ```
38
-
39
- ### 1.3 离线安全设计
40
-
41
- CI 全程离线运行,不使用任何 API Key / Secrets:
42
-
43
- ```yaml
44
- env:
45
- FH_OFFLINE: 'true'
46
- FH_PROVIDERS: '[]'
47
- ```
48
-
49
- - PR 来自 fork 也能安全跑完
50
- - 不消耗任何模型 API 额度
51
- - 所有测试基于本地规则引擎
52
-
53
- ### 1.4 质量门禁
54
-
55
- CI 通过以下检查才能合并:
56
-
57
- - ✅ TypeScript 类型检查(`npm run typecheck`)
58
- - ✅ 项目构建(`npm run build`)
59
- - ✅ CLI 可用性验证
60
- - ✅ 离线端到端闭环测试
61
- - ✅ 企业能力断言(RBAC/审计链/租户隔离/配额)
62
- - ✅ 发布包安全检查(无密钥/无源码)
63
- - ✅ 仓库密钥扫描
64
- - ✅ Docker 镜像构建 + 容器冒烟
65
-
66
- ---
67
-
68
- ## 2. CD 持续部署
69
-
70
- ### 2.1 发布工作流
71
-
72
- 项目配置了自动发布工作流(`.github/workflows/release.yml`),包含 5 个阶段:
73
-
74
- | 阶段 | 说明 |
75
- |---|---|
76
- | **version** | 准备版本号(从 tag 或手动输入) |
77
- | **build** | 构建 + 测试 + 上传产物 |
78
- | **npm-publish** | 发布到 npm registry |
79
- | **docker-publish** | 构建并推送 Docker 镜像 |
80
- | **github-release** | 创建 GitHub Release + 变更日志 |
81
-
82
- ### 2.2 触发方式
83
-
84
- **方式一:推送标签(推荐)**
85
-
86
- ```bash
87
- # 创建并推送标签
88
- git tag v1.0.0
89
- git push origin v1.0.0
90
- ```
91
-
92
- **方式二:手动触发**
93
-
94
- 在 GitHub Actions 页面选择 "Release" 工作流,点击 "Run workflow",输入版本号(如 `1.0.0`、`patch`、`minor`、`major`)。
95
-
96
- ### 2.3 所需 Secrets
97
-
98
- 在 GitHub 仓库 Settings → Secrets and variables → Actions 中配置:
99
-
100
- | Secret | 说明 | 获取方式 |
101
- |---|---|---|
102
- | `NPM_TOKEN` | npm 发布令牌 | npmjs.com → Access Tokens → Generate New Token |
103
- | `DOCKERHUB_USERNAME` | Docker Hub 用户名 | hub.docker.com 注册账号 |
104
- | `DOCKERHUB_TOKEN` | Docker Hub 访问令牌 | Docker Hub → Account Settings → Security |
105
-
106
- > `GH_TOKEN` 由 GitHub 自动注入,无需手动配置。
107
-
108
- ### 2.4 发布产物
109
-
110
- 每次发布会生成:
111
-
112
- 1. **npm 包**:`feihong-code@<version>`
113
- ```bash
114
- npm install -g feihong-code
115
- ```
116
-
117
- 2. **Docker 镜像**:`<username>/feihong-code:<version>` 和 `:latest`
118
- ```bash
119
- docker pull <username>/feihong-code:latest
120
- ```
121
-
122
- 3. **GitHub Release**:包含变更日志和安装说明
123
-
124
- ---
125
-
126
- ## 3. Docker 部署
127
-
128
- ### 3.1 快速启动
129
-
130
- ```bash
131
- # 克隆项目
132
- git clone <repo-url> feihong-code
133
- cd feihong-code
134
-
135
- # 使用 docker-compose 启动
136
- FH_WEB_TOKEN=$(openssl rand -hex 32) docker compose up -d
137
-
138
- # 查看服务状态
139
- docker compose ps
140
-
141
- # 查看日志
142
- docker compose logs -f
143
- ```
144
-
145
- ### 3.2 docker-compose.yml 说明
146
-
147
- ```yaml
148
- services:
149
- fhcode:
150
- build: .
151
- image: feihong-code:0.1.0
152
- container_name: fhcode
153
- ports:
154
- - "8080:8080"
155
- environment:
156
- - FH_HOME=/data/fhcode
157
- - FH_WEB_PORT=8080
158
- - FH_WEB_TOKEN=${FH_WEB_TOKEN:-change-me-in-production}
159
- - FH_ENTERPRISE=true
160
- volumes:
161
- - fhcode-data:/data/fhcode
162
- restart: unless-stopped
163
- ```
164
-
165
- ### 3.3 使用预构建镜像
166
-
167
- ```bash
168
- # 拉取官方镜像
169
- docker pull <username>/feihong-code:latest
170
-
171
- # 运行容器
172
- docker run -d \
173
- --name fhcode \
174
- --restart unless-stopped \
175
- -p 8080:8080 \
176
- -e FH_WEB_TOKEN=your-secret-token \
177
- -e FH_ENTERPRISE=true \
178
- -v fhcode-data:/data/fhcode \
179
- <username>/feihong-code:latest
180
- ```
181
-
182
- ### 3.4 数据持久化
183
-
184
- - 容器内数据目录:`/data/fhcode`(对应 `FH_HOME`)
185
- - Docker 命名卷:`fhcode-data`
186
- - 包含:会话记录、审计链、租户数据、团队配置
187
-
188
- 备份数据:
189
-
190
- ```bash
191
- docker run --rm -v fhcode-data:/data -v $(pwd):/backup alpine \
192
- tar czf /backup/fhcode-backup-$(date +%Y%m%d).tar.gz -C /data fhcode
193
- ```
194
-
195
- ---
196
-
197
- ## 4. Node.js 直接部署
198
-
199
- ### 4.1 环境要求
200
-
201
- - Node.js >= 18
202
- - npm >= 9
203
- - (推荐)pm2 进程管理器
204
-
205
- ### 4.2 安装与启动
206
-
207
- ```bash
208
- # 克隆项目
209
- git clone <repo-url> feihong-code
210
- cd feihong-code
211
-
212
- # 安装依赖
213
- npm install --production
214
-
215
- # 构建
216
- npm run build
217
-
218
- # 方式一:使用 pm2(推荐)
219
- npm install -g pm2
220
- FH_WEB_TOKEN=your-secret-token pm2 start dist/cli/index.js --name fhcode -- serve --port 8080
221
- pm2 save
222
- pm2 startup # 开机自启
223
-
224
- # 方式二:直接运行
225
- FH_WEB_TOKEN=your-secret-token node dist/cli/index.js serve --port 8080
226
- ```
227
-
228
- ### 4.3 pm2 常用命令
229
-
230
- ```bash
231
- pm2 status # 查看状态
232
- pm2 logs fhcode # 查看日志
233
- pm2 restart fhcode # 重启
234
- pm2 stop fhcode # 停止
235
- pm2 delete fhcode # 删除
236
- ```
237
-
238
- ---
239
-
240
- ## 5. 环境变量配置
241
-
242
- ### 5.1 核心配置
243
-
244
- | 变量 | 默认值 | 说明 |
245
- |---|---|---|
246
- | `FH_HOME` | `~/.feihong-code` | 数据目录(会话/审计/租户) |
247
- | `FH_WEB_PORT` | `8080` | Web 服务端口 |
248
- | `FH_WEB_TOKEN` | (空) | Web 访问令牌(生产环境必填) |
249
- | `FH_ENTERPRISE` | `true` | 启用企业级 RBAC/审计 |
250
-
251
- ### 5.2 企业级配置
252
-
253
- | 变量 | 说明 |
254
- |---|---|
255
- | `FH_TENANT` | 租户 ID(多租户隔离) |
256
- | `FH_USER` | 当前用户 ID |
257
- | `FH_ROLE` | 用户角色(owner/admin/developer/viewer) |
258
- | `FH_TENANT_BUDGET_USD` | 租户日成本预算上限 |
259
-
260
- ### 5.3 模型配置
261
-
262
- | 变量 | 说明 |
263
- |---|---|
264
- | `FH_PROVIDERS` | 模型提供商配置(JSON 数组) |
265
- | `FH_OFFLINE` | 离线模式(不调用外部 API) |
266
-
267
- ---
268
-
269
- ## 6. 生产环境最佳实践
270
-
271
- ### 6.1 安全配置
272
-
273
- ```bash
274
- # 1. 使用强随机令牌
275
- export FH_WEB_TOKEN=$(openssl rand -hex 32)
276
-
277
- # 2. 启用企业模式
278
- export FH_ENTERPRISE=true
279
-
280
- # 3. 配置租户隔离
281
- export FH_TENANT=production-tenant
282
- export FH_USER=admin
283
- export FH_ROLE=owner
284
-
285
- # 4. 设置成本预算
286
- export FH_TENANT_BUDGET_USD=50
287
- ```
288
-
289
- ### 6.2 反向代理(Nginx)
290
-
291
- ```nginx
292
- server {
293
- listen 80;
294
- server_name fhcode.your-domain.com;
295
-
296
- location / {
297
- proxy_pass http://127.0.0.1:8080;
298
- proxy_http_version 1.1;
299
- proxy_set_header Upgrade $http_upgrade;
300
- proxy_set_header Connection 'upgrade';
301
- proxy_set_header Host $host;
302
- proxy_set_header X-Real-IP $remote_addr;
303
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
304
- proxy_set_header X-Forwarded-Proto $scheme;
305
- proxy_cache_bypass $http_upgrade;
306
- }
307
- }
308
- ```
309
-
310
- ### 6.3 HTTPS 配置(Let's Encrypt)
311
-
312
- ```bash
313
- # 安装 certbot
314
- sudo apt install certbot python3-certbot-nginx
315
-
316
- # 获取证书
317
- sudo certbot --nginx -d fhcode.your-domain.com
318
-
319
- # 自动续期(已内置)
320
- sudo certbot renew --dry-run
321
- ```
322
-
323
- ### 6.4 监控与告警
324
-
325
- ```bash
326
- # 健康检查
327
- curl -H "Authorization: Bearer $TOKEN" http://localhost:8080/api/health
328
-
329
- # Docker 健康检查
330
- docker inspect --format='{{.State.Health.Status}}' fhcode
331
- ```
332
-
333
- ### 6.5 备份策略
334
-
335
- ```bash
336
- # 每日备份(添加到 crontab)
337
- 0 2 * * * /path/to/feihong-code/deploy.sh --backup
338
-
339
- # 保留最近 30 天
340
- find /path/to/backups -name "backup-*.tar.gz" -mtime +30 -delete
341
- ```
342
-
343
- ### 6.6 升级流程
344
-
345
- ```bash
346
- # 1. 备份数据
347
- ./deploy.sh --backup
348
-
349
- # 2. 拉取最新代码并重新部署
350
- ./deploy.sh --update
351
-
352
- # 3. 验证服务
353
- curl -H "Authorization: Bearer $TOKEN" http://localhost:8080/api/health
354
-
355
- # 4. 查看日志确认无异常
356
- ./deploy.sh --logs
357
- ```
358
-
359
- ---
360
-
361
- ## 附录:一键部署脚本
362
-
363
- 项目提供 `deploy.sh` 一键部署脚本,支持 Docker 和 Node.js 两种方式:
364
-
365
- ```bash
366
- # 部署服务
367
- ./deploy.sh
368
-
369
- # 更新并重新部署
370
- ./deploy.sh --update
371
-
372
- # 停止服务
373
- ./deploy.sh --stop
374
-
375
- # 查看日志
376
- ./deploy.sh --logs
377
-
378
- # 备份数据
379
- ./deploy.sh --backup
380
- ```
381
-
382
- 脚本会自动检测 Docker 是否可用,优先使用 Docker 部署;如不可用则回退到 Node.js 直接部署。