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,127 +1,127 @@
1
- # 飞虹 Code 配置参考
2
-
3
- > 晋江市飞虹智科技企业管理有限公司 · 飞扬企源研发中心 · 负责人:吴赐虹
4
-
5
- 所有配置通过**环境变量**提供,启动时集中校验(fail-fast)。`.env` 文件会被自动加载(仅注入未设置的键),但**切勿提交 `.env`**。
6
-
7
- ---
8
-
9
- ## 1. 环境变量总览
10
-
11
- | 变量 | 必填 | 说明 | 默认 |
12
- | --- | --- | --- | --- |
13
- | `FH_HOME` | 否 | 应用主目录(目标/日志根) | `~/.feihong-code` |
14
- | `FH_LOG_DIR` | 否 | 会话事件日志目录 | `~/.feihong-code/sessions` |
15
- | `FH_PROVIDERS` | 否* | 模型供应商 JSON 数组;为空则离线 | `[]` |
16
- | `FH_MODEL_STRATEGY` | 否 | 路由策略 | `cost` |
17
- | `FH_BUDGET_USD` | 否 | 单任务预算(美元,超限仅告警) | `0.5` |
18
- | `FH_SHELL_ALLOW` | 否 | shell 白名单(逗号分隔) | 空 |
19
- | `FH_REQUIRE_APPROVAL` | 否 | 危险操作是否需审批 | `true` |
20
- | `FH_OFFLINE` | 否 | 设为 `true` 强制离线 | 未设 |
21
- | `FH_ENTERPRISE` | 否 | 企业模式开关;`false` 退回社区版无感行为 | `true` |
22
- | `FH_TENANT` | 否 | 租户 ID(正则 `^[A-Za-z0-9._-]{1,64}$`),触发多租户物理目录隔离 | 未设(默认租户) |
23
- | `FH_USER` | 否 | 当前用户标识(写入审计与租户上下文) | 未设 |
24
- | `FH_ROLE` | 否 | 角色:`viewer` / `developer` / `operator` / `admin` | `developer` |
25
- | `FH_TENANT_BUDGET_USD` | 否 | 租户当日成本预算(USD),超限拒绝新任务(fail-fast) | 未设(取策略角色上限) |
26
- | `FH_POLICY` | 否 | 策略覆盖 JSON(仅能加严:黑名单取并集),优先级高于内置与文件策略 | 未设 |
27
-
28
- > *`FH_PROVIDERS` 缺省或 `[]` → 自动离线(Mock 闭环);非空 → 真实模式。
29
-
30
- ---
31
-
32
- ## 2. FH_PROVIDERS 结构
33
-
34
- JSON 数组,每项一个供应商:
35
-
36
- | 字段 | 类型 | 必填 | 说明 |
37
- | --- | --- | --- | --- |
38
- | `id` | string | ✅ | 唯一标识(用于日志/路由) |
39
- | `type` | `"openai-compatible"` \| `"ollama"` | ✅ | 供应商类型 |
40
- | `baseURL` | string | ✅ | API 基地址(不含末尾斜杠会被规范化) |
41
- | `apiKey` | string | 否 | OpenAI 兼容网关的 Bearer Token;Ollama 留空 |
42
- | `model` | string | 否 | 模型名(openai-compatible 必填;Ollama 指定本地模型) |
43
- | `tags` | `CapabilityTag[]` | ✅ | 能力标签,用于路由筛选 |
44
- | `costPer1k` | number | 否 | 每千 token 成本(USD),用于成本计量与 `cost` 策略 |
45
-
46
- ### CapabilityTag 枚举
47
-
48
- `code-gen` · `reasoning` · `long-context` · `vision` · `cheap` · `local`
49
-
50
- 编排器调用时默认带 `['code-gen']` 标签筛选;路由按策略对命中供应商打分选优。
51
-
52
- ---
53
-
54
- ## 3. 路由策略(FH_MODEL_STRATEGY)
55
-
56
- | 策略 | 选优逻辑 |
57
- | --- | --- |
58
- | `cost` | 优先 `costPer1k` 最低(默认,省钱) |
59
- | `capability` | 优先 `reasoning` + `code-gen` 标签命中 |
60
- | `latency` | 优先 `local`(Ollama 等本地模型) |
61
-
62
- 多供应商时按策略排序,调用失败时**自动 fallback** 到下一个。
63
-
64
- ---
65
-
66
- ## 4. 供应商示例
67
-
68
- ### 4.1 OpenAI 兼容(Agnes,已验证)
69
-
70
- ```json
71
- [{"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}]
72
- ```
73
-
74
- ### 4.2 DeepSeek
75
-
76
- ```json
77
- [{"id":"deepseek","type":"openai-compatible","baseURL":"https://api.deepseek.com/v1","apiKey":"sk-xxx","model":"deepseek-chat","tags":["code-gen","cheap"],"costPer1k":0.0001}]
78
- ```
79
-
80
- ### 4.3 通义千问(DashScope 兼容模式)
81
-
82
- ```json
83
- [{"id":"qwen","type":"openai-compatible","baseURL":"https://dashscope.aliyuncs.com/compatible-mode/v1","apiKey":"sk-xxx","model":"qwen-plus","tags":["code-gen","long-context"],"costPer1k":0.0002}]
84
- ```
85
-
86
- ### 4.4 Ollama(本地,零成本)
87
-
88
- ```json
89
- [{"id":"ollama","type":"ollama","baseURL":"http://localhost:11434","apiKey":"","model":"qwen2.5-coder:7b","tags":["code-gen","local"],"costPer1k":0}]
90
- ```
91
-
92
- ### 4.5 多供应商(路由 + fallback)
93
-
94
- ```json
95
- [
96
- {"id":"deepseek","type":"openai-compatible","baseURL":"https://api.deepseek.com/v1","apiKey":"sk-xxx","model":"deepseek-chat","tags":["code-gen","cheap"],"costPer1k":0.0001},
97
- {"id":"ollama","type":"ollama","baseURL":"http://localhost:11434","apiKey":"","model":"qwen2.5-coder:7b","tags":["code-gen","local"],"costPer1k":0}
98
- ]
99
- ```
100
-
101
- ---
102
-
103
- ## 5. 成本计量
104
-
105
- - 每次 `chat` 返回 `usage`(prompt/completion/total tokens),按 `costPer1k` 估算 `costUsd`。
106
- - 累加进任务总成本,打印在结果中。
107
- - 超过 `FH_BUDGET_USD` 仅**告警日志**,不阻断(避免半途中断)。
108
- - 离线模式成本为 `0`。
109
-
110
- ---
111
-
112
- ## 6. 安全配置建议
113
-
114
- 1. `FH_SHELL_ALLOW` 遵循**最小权限**:只放确实需要的命令(如 `git,npm,node`)。
115
- 2. 保持 `FH_REQUIRE_APPROVAL=true`;仅在完全可信的隔离环境才设 `false`。
116
- 3. `.env` 权限设为仅本人可读:`chmod 600 .env`。
117
- 4. 不要把 `.env` 提交到 Git(已被 `.gitignore` 排除)。
118
- 5. 日志目录(`FH_LOG_DIR`)可能含任务上下文,按敏感数据处理。
119
- 6. **企业模式(M4)**:`FH_ENTERPRISE` 默认开启;若仅作社区使用,设 `false` 即完全关闭 RBAC / 审计 / 租户隔离,行为与 M3 一致。
120
- 7. **租户隔离(M4)**:生产部署务必为每个客户/团队设置独立 `FH_TENANT`;租户 ID 仅允许 `A-Za-z0-9._-`(1–64 位),任何非常规字符都会被拒绝以防目录穿越。
121
- 8. **日预算(M4)**:`FH_TENANT_BUDGET_USD` 是硬上限,超限时新任务直接返回 `QUOTA_EXCEEDED`(HTTP 429 语义),不会静默放行;单任务 `maxCostUsd` 由策略角色上限控制,达上限即熔断并给出结论。
122
- 9. **策略覆盖(M4)**:通过 `FH_POLICY` 或 `<FH_HOME>/policy.json`、`<租户>/policy.json` 注入的覆盖只能**加严**不能放宽——危险命令/敏感路径黑名单取并集,角色权限取交集,确保安全基线不被削弱。
123
- 10. **审计留存(M4)**:`audit-YYYY-MM.jsonl` 为防篡改哈希链,建议只读挂载或异地备份;`audit verify` 可周期性巡检完整性。
124
-
125
- ---
126
-
127
- © 2026 晋江市飞虹智科技企业管理有限公司 · 飞扬企源研发中心 · 负责人:吴赐虹
1
+ # 飞虹 Code 配置参考
2
+
3
+ > 晋江市飞虹智科技企业管理有限公司 · 飞扬企源研发中心 · 负责人:吴赐虹
4
+
5
+ 所有配置通过**环境变量**提供,启动时集中校验(fail-fast)。`.env` 文件会被自动加载(仅注入未设置的键),但**切勿提交 `.env`**。
6
+
7
+ ---
8
+
9
+ ## 1. 环境变量总览
10
+
11
+ | 变量 | 必填 | 说明 | 默认 |
12
+ | --- | --- | --- | --- |
13
+ | `FH_HOME` | 否 | 应用主目录(目标/日志根) | `~/.feihong-code` |
14
+ | `FH_LOG_DIR` | 否 | 会话事件日志目录 | `~/.feihong-code/sessions` |
15
+ | `FH_PROVIDERS` | 否* | 模型供应商 JSON 数组;为空则离线 | `[]` |
16
+ | `FH_MODEL_STRATEGY` | 否 | 路由策略 | `cost` |
17
+ | `FH_BUDGET_USD` | 否 | 单任务预算(美元,超限仅告警) | `0.5` |
18
+ | `FH_SHELL_ALLOW` | 否 | shell 白名单(逗号分隔) | 空 |
19
+ | `FH_REQUIRE_APPROVAL` | 否 | 危险操作是否需审批 | `true` |
20
+ | `FH_OFFLINE` | 否 | 设为 `true` 强制离线 | 未设 |
21
+ | `FH_ENTERPRISE` | 否 | 企业模式开关;`false` 退回社区版无感行为 | `true` |
22
+ | `FH_TENANT` | 否 | 租户 ID(正则 `^[A-Za-z0-9._-]{1,64}$`),触发多租户物理目录隔离 | 未设(默认租户) |
23
+ | `FH_USER` | 否 | 当前用户标识(写入审计与租户上下文) | 未设 |
24
+ | `FH_ROLE` | 否 | 角色:`viewer` / `developer` / `operator` / `admin` | `developer` |
25
+ | `FH_TENANT_BUDGET_USD` | 否 | 租户当日成本预算(USD),超限拒绝新任务(fail-fast) | 未设(取策略角色上限) |
26
+ | `FH_POLICY` | 否 | 策略覆盖 JSON(仅能加严:黑名单取并集),优先级高于内置与文件策略 | 未设 |
27
+
28
+ > *`FH_PROVIDERS` 缺省或 `[]` → 自动离线(Mock 闭环);非空 → 真实模式。
29
+
30
+ ---
31
+
32
+ ## 2. FH_PROVIDERS 结构
33
+
34
+ JSON 数组,每项一个供应商:
35
+
36
+ | 字段 | 类型 | 必填 | 说明 |
37
+ | --- | --- | --- | --- |
38
+ | `id` | string | ✅ | 唯一标识(用于日志/路由) |
39
+ | `type` | `"openai-compatible"` \| `"ollama"` | ✅ | 供应商类型 |
40
+ | `baseURL` | string | ✅ | API 基地址(不含末尾斜杠会被规范化) |
41
+ | `apiKey` | string | 否 | OpenAI 兼容网关的 Bearer Token;Ollama 留空 |
42
+ | `model` | string | 否 | 模型名(openai-compatible 必填;Ollama 指定本地模型) |
43
+ | `tags` | `CapabilityTag[]` | ✅ | 能力标签,用于路由筛选 |
44
+ | `costPer1k` | number | 否 | 每千 token 成本(USD),用于成本计量与 `cost` 策略 |
45
+
46
+ ### CapabilityTag 枚举
47
+
48
+ `code-gen` · `reasoning` · `long-context` · `vision` · `cheap` · `local`
49
+
50
+ 编排器调用时默认带 `['code-gen']` 标签筛选;路由按策略对命中供应商打分选优。
51
+
52
+ ---
53
+
54
+ ## 3. 路由策略(FH_MODEL_STRATEGY)
55
+
56
+ | 策略 | 选优逻辑 |
57
+ | --- | --- |
58
+ | `cost` | 优先 `costPer1k` 最低(默认,省钱) |
59
+ | `capability` | 优先 `reasoning` + `code-gen` 标签命中 |
60
+ | `latency` | 优先 `local`(Ollama 等本地模型) |
61
+
62
+ 多供应商时按策略排序,调用失败时**自动 fallback** 到下一个。
63
+
64
+ ---
65
+
66
+ ## 4. 供应商示例
67
+
68
+ ### 4.1 OpenAI 兼容(Agnes,已验证)
69
+
70
+ ```json
71
+ [{"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}]
72
+ ```
73
+
74
+ ### 4.2 DeepSeek
75
+
76
+ ```json
77
+ [{"id":"deepseek","type":"openai-compatible","baseURL":"https://api.deepseek.com/v1","apiKey":"sk-xxx","model":"deepseek-chat","tags":["code-gen","cheap"],"costPer1k":0.0001}]
78
+ ```
79
+
80
+ ### 4.3 通义千问(DashScope 兼容模式)
81
+
82
+ ```json
83
+ [{"id":"qwen","type":"openai-compatible","baseURL":"https://dashscope.aliyuncs.com/compatible-mode/v1","apiKey":"sk-xxx","model":"qwen-plus","tags":["code-gen","long-context"],"costPer1k":0.0002}]
84
+ ```
85
+
86
+ ### 4.4 Ollama(本地,零成本)
87
+
88
+ ```json
89
+ [{"id":"ollama","type":"ollama","baseURL":"http://localhost:11434","apiKey":"","model":"qwen2.5-coder:7b","tags":["code-gen","local"],"costPer1k":0}]
90
+ ```
91
+
92
+ ### 4.5 多供应商(路由 + fallback)
93
+
94
+ ```json
95
+ [
96
+ {"id":"deepseek","type":"openai-compatible","baseURL":"https://api.deepseek.com/v1","apiKey":"sk-xxx","model":"deepseek-chat","tags":["code-gen","cheap"],"costPer1k":0.0001},
97
+ {"id":"ollama","type":"ollama","baseURL":"http://localhost:11434","apiKey":"","model":"qwen2.5-coder:7b","tags":["code-gen","local"],"costPer1k":0}
98
+ ]
99
+ ```
100
+
101
+ ---
102
+
103
+ ## 5. 成本计量
104
+
105
+ - 每次 `chat` 返回 `usage`(prompt/completion/total tokens),按 `costPer1k` 估算 `costUsd`。
106
+ - 累加进任务总成本,打印在结果中。
107
+ - 超过 `FH_BUDGET_USD` 仅**告警日志**,不阻断(避免半途中断)。
108
+ - 离线模式成本为 `0`。
109
+
110
+ ---
111
+
112
+ ## 6. 安全配置建议
113
+
114
+ 1. `FH_SHELL_ALLOW` 遵循**最小权限**:只放确实需要的命令(如 `git,npm,node`)。
115
+ 2. 保持 `FH_REQUIRE_APPROVAL=true`;仅在完全可信的隔离环境才设 `false`。
116
+ 3. `.env` 权限设为仅本人可读:`chmod 600 .env`。
117
+ 4. 不要把 `.env` 提交到 Git(已被 `.gitignore` 排除)。
118
+ 5. 日志目录(`FH_LOG_DIR`)可能含任务上下文,按敏感数据处理。
119
+ 6. **企业模式(M4)**:`FH_ENTERPRISE` 默认开启;若仅作社区使用,设 `false` 即完全关闭 RBAC / 审计 / 租户隔离,行为与 M3 一致。
120
+ 7. **租户隔离(M4)**:生产部署务必为每个客户/团队设置独立 `FH_TENANT`;租户 ID 仅允许 `A-Za-z0-9._-`(1–64 位),任何非常规字符都会被拒绝以防目录穿越。
121
+ 8. **日预算(M4)**:`FH_TENANT_BUDGET_USD` 是硬上限,超限时新任务直接返回 `QUOTA_EXCEEDED`(HTTP 429 语义),不会静默放行;单任务 `maxCostUsd` 由策略角色上限控制,达上限即熔断并给出结论。
122
+ 9. **策略覆盖(M4)**:通过 `FH_POLICY` 或 `<FH_HOME>/policy.json`、`<租户>/policy.json` 注入的覆盖只能**加严**不能放宽——危险命令/敏感路径黑名单取并集,角色权限取交集,确保安全基线不被削弱。
123
+ 10. **审计留存(M4)**:`audit-YYYY-MM.jsonl` 为防篡改哈希链,建议只读挂载或异地备份;`audit verify` 可周期性巡检完整性。
124
+
125
+ ---
126
+
127
+ © 2026 晋江市飞虹智科技企业管理有限公司 · 飞扬企源研发中心 · 负责人:吴赐虹
@@ -0,0 +1,117 @@
1
+ <!DOCTYPE html>
2
+ <html lang="zh-CN">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>飞虹 Code Web 控制台 — 页面功能复盘与冒烟测试报告</title>
7
+ <style>
8
+ * { box-sizing: border-box; margin: 0; padding: 0; }
9
+ body { font-family: "Microsoft YaHei", "PingFang SC", sans-serif; background: #f5f7fa; color: #1f2937; padding: 32px 16px; }
10
+ .wrap { max-width: 980px; margin: 0 auto; }
11
+ h1 { font-size: 24px; margin-bottom: 4px; }
12
+ .sub { color: #6b7280; font-size: 13px; margin-bottom: 24px; }
13
+ .card { background: #fff; border: 1px solid #e5e7eb; border-radius: 12px; padding: 20px 24px; margin-bottom: 18px; box-shadow: 0 1px 3px rgba(0,0,0,.05); }
14
+ h2 { font-size: 16px; margin-bottom: 12px; border-left: 4px solid #4f46e5; padding-left: 10px; }
15
+ table { width: 100%; border-collapse: collapse; font-size: 13px; }
16
+ th, td { text-align: left; padding: 8px 10px; border-bottom: 1px solid #eef0f3; vertical-align: top; }
17
+ th { background: #f9fafb; color: #374151; font-weight: 600; white-space: nowrap; }
18
+ .ok { color: #059669; font-weight: 600; }
19
+ .warn { color: #d97706; font-weight: 600; }
20
+ .badge { display: inline-block; padding: 1px 8px; border-radius: 99px; font-size: 12px; font-weight: 600; }
21
+ .b-green { background: #ecfdf5; color: #059669; }
22
+ .b-blue { background: #eff6ff; color: #2563eb; }
23
+ .b-gray { background: #f3f4f6; color: #6b7280; }
24
+ .stat-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 12px; margin-bottom: 4px; }
25
+ .stat { background: #f9fafb; border-radius: 10px; padding: 14px; text-align: center; }
26
+ .stat .n { font-size: 26px; font-weight: 700; color: #4f46e5; }
27
+ .stat .l { font-size: 12px; color: #6b7280; margin-top: 2px; }
28
+ ul { padding-left: 18px; font-size: 13px; line-height: 1.9; }
29
+ code { background: #f3f4f6; padding: 1px 6px; border-radius: 4px; font-size: 12px; color: #b91c1c; }
30
+ .foot { text-align: center; color: #9ca3af; font-size: 12px; margin-top: 20px; }
31
+ @media (max-width: 700px){ .stat-grid { grid-template-columns: repeat(2, 1fr); } }
32
+ </style>
33
+ </head>
34
+ <body>
35
+ <div class="wrap">
36
+ <h1>🦞 飞虹 Code Web 控制台 — 页面功能复盘与冒烟测试报告</h1>
37
+ <div class="sub">2026-08-23 · 版本 v0.5.1 · 复盘 + 查漏补缺 + 全面冒烟测试</div>
38
+
39
+ <div class="card">
40
+ <div class="stat-grid">
41
+ <div class="stat"><div class="n">7</div><div class="l">1 级页面</div></div>
42
+ <div class="stat"><div class="n">11</div><div class="l">2 级页面/模态框</div></div>
43
+ <div class="stat"><div class="n">27/27</div><div class="l">接口冒烟通过</div></div>
44
+ <div class="stat"><div class="n">183/183</div><div class="l">单元测试通过</div></div>
45
+ </div>
46
+ </div>
47
+
48
+ <div class="card">
49
+ <h2>一、1 级页面(顶部导航)功能状态</h2>
50
+ <table>
51
+ <tr><th>页面</th><th>核心功能</th><th>状态</th><th>验证方式</th></tr>
52
+ <tr><td>💬 对话(主界面)</td><td>任务列表、新建任务、发送/多轮续接、停止任务、刷新、模型切换、截图/上传/语音/智能体菜单、工作区选择、通话(演示)</td><td><span class="badge b-green">全部实现</span></td><td>代码审阅 + API 实测</td></tr>
53
+ <tr><td>⚡ 自动化</td><td>列表、新建指令、一键运行、删除</td><td><span class="badge b-green">全部实现</span></td><td>GET/POST/DELETE/run 实测</td></tr>
54
+ <tr><td>📚 模板库</td><td>内置模板、我的模板、填入输入框、保存当前为模板、删除</td><td><span class="badge b-green">全部实现</span></td><td>GET/POST/DELETE 实测</td></tr>
55
+ <tr><td>🧩 插件市场</td><td>搜索、来源筛选、安装、已安装列表</td><td><span class="badge b-green">实现</span><br><span class="warn">外部网络依赖</span></td><td>接口实测(外部源当前可达)</td></tr>
56
+ <tr><td>📎 办公助理</td><td>能力清单、点击生成提示词</td><td><span class="badge b-green">全部实现</span></td><td>接口实测</td></tr>
57
+ <tr><td>🧠 记忆系统</td><td>统计卡片、短期/长期/历史 Tab、按日查看、立即总结</td><td><span class="badge b-green">全部实现</span></td><td>4 个接口实测</td></tr>
58
+ <tr><td>🚀 发布</td><td>品牌故事静态页(无接口依赖)</td><td><span class="badge b-gray">静态内容</span></td><td>页面审阅</td></tr>
59
+ </table>
60
+ </div>
61
+
62
+ <div class="card">
63
+ <h2>二、2 级页面 / 模态框功能状态</h2>
64
+ <table>
65
+ <tr><th>功能块</th><th>实现内容</th><th>状态</th></tr>
66
+ <tr><td>📦 任务详情(右侧面板)</td><td>任务属性、步骤追踪、复制/编辑/分享/创建文档气泡操作、打开文件夹/浏览器</td><td><span class="badge b-green">已实现</span></td></tr>
67
+ <tr><td>👁 产物预览(右侧面板)</td><td>文件内容预览、图片预览、产物链接化点击</td><td><span class="badge b-green">已实现</span></td></tr>
68
+ <tr><td>+ 新建任务</td><td>任务描述、智能体类型、工作区选择、创建并归属对话</td><td><span class="badge b-green">已实现</span></td></tr>
69
+ <tr><td>⚙️ 设置</td><td>栏目/主题切换、权限处理、会话管理(自动新建/自动重置/清空历史)、大模型内嵌管理</td><td><span class="badge b-green">已实现</span></td></tr>
70
+ <tr><td>🔒 权限窗口</td><td>可读范围(工作区/指定目录/全部)+ 操作权限开关,持久化到 localStorage</td><td><span class="badge b-green">已实现</span></td></tr>
71
+ <tr><td>🤖 选择智能体类型</td><td>4 种智能体(通用/修复/编写/执行命令)切换</td><td><span class="badge b-green">已实现</span></td></tr>
72
+ <tr><td>📂 选择工作区文件夹</td><td>驱动器扫描、目录树浏览、确认切换并持久化</td><td><span class="badge b-green">已实现</span></td></tr>
73
+ <tr><td>🧠 大模型设置</td><td>模型增删改、RSA 加密传输 Key、设为默认、底部快捷切换</td><td><span class="badge b-green">已实现</span></td></tr>
74
+ <tr><td>⚡ 新建快捷指令</td><td>名称 + 目标保存</td><td><span class="badge b-green">已实现</span></td></tr>
75
+ <tr><td>📚 保存模板</td><td>标题 + 分类 + 目标内容</td><td><span class="badge b-green">已实现</span></td></tr>
76
+ <tr><td>🎉 欢迎引导</td><td>首次登录欢迎任务展示与一键运行</td><td><span class="badge b-green">已实现</span></td></tr>
77
+ </table>
78
+ </div>
79
+
80
+ <div class="card">
81
+ <h2>三、本轮修复与优化</h2>
82
+ <ul>
83
+ <li><b>版本号统一</b>:<code>src/cli/version.ts</code> 0.5.0 → <b>0.5.1</b>,对齐 <code>package.json</code> 与发布页(此前 health 接口与发布页不一致)</li>
84
+ <li><b>dist 产物陈旧修复</b>:dist 被 IDE/Defender 锁导致构建未真正覆盖 → 用 <code>tsc --outDir dist_tmp</code> + 复制前端 + 整体回拷 dist 成功出包;<code>dist/web/public/index.html</code> 已含「执行过程折叠 / ⏹ 停止按钮 / 刷新清空对话」等全部修复(9 处命中),<code>version.js = 0.5.1</code></li>
85
+ <li><b>.gitignore</b>:新增 <code>dist_tmp/</code> 构建中转目录,避免误提交</li>
86
+ <li><b>代码健壮性核对</b>:前端 20+ 关键函数全部有定义且唯一;关键 DOM id(11 个模态框等)全部存在,无白屏隐患</li>
87
+ </ul>
88
+ </div>
89
+
90
+ <div class="card">
91
+ <h2>四、冒烟测试结果(27/27 通过)</h2>
92
+ <table>
93
+ <tr><th>#</th><th>接口</th><th>结果</th><th>说明</th></tr>
94
+ <tr><td>1-4</td><td>health / 登录 / auth.me / drives</td><td class="ok">✅</td><td>手机号直登拿到 token,鉴权链路通</td></tr>
95
+ <tr><td>5-10</td><td>models / tasks 列表 / 创建 / 详情 / 多轮续接 / 停止</td><td class="ok">✅</td><td>创建→running→stop 全链路;续接后 conversation 完整保留 system+目标+工具+上轮回复+新消息(M3 resume 验证 OK)</td></tr>
96
+ <tr><td>11-14</td><td>automations 列表/创建/删除/run</td><td class="ok">✅</td><td>删除后 run 返回 404(符合预期)</td></tr>
97
+ <tr><td>15-17</td><td>templates 列表/创建/删除</td><td class="ok">✅</td><td>含内置模板 + 自定义模板 CRUD</td></tr>
98
+ <tr><td>18-21</td><td>memory stats / short / long / history</td><td class="ok">✅</td><td>短期/长期/总结历史与统计</td></tr>
99
+ <tr><td>22-26</td><td>workspace / workspace.list / office / skills.installed / skills.market</td><td class="ok">✅</td><td>插件市场外部源当前可达</td></tr>
100
+ <tr><td>27</td><td>静态首页 <code>GET /</code></td><td class="ok">✅</td><td>HTTP 200,前端资源可访问</td></tr>
101
+ </table>
102
+ <p style="font-size:13px;color:#6b7280;margin-top:10px;">另:真实模型执行链路验证 —— 首次登录自动创建的 3 个引导任务全部 <span class="badge b-green">done</span>(编排器→模型→工具→落盘端到端跑通);单元测试回归 <b>183/183 全部通过</b>。</p>
103
+ </div>
104
+
105
+ <div class="card">
106
+ <h2>五、遗留注意</h2>
107
+ <ul>
108
+ <li>本机 <b>8099 端口仍有一个旧版 fhcode server</b> 在运行(加载的是旧 dist / 旧前端),<b>需重启该服务</b>才会加载本轮修复后的新 UI</li>
109
+ <li>本轮冒烟测试服务运行在 <b>http://localhost:8077</b>(临时数据目录 C:/fhsmoke,登录任意手机号即可),可直接打开验证新界面;若进程已退出可自行重启:<code>FH_WEB_PORT=8077 node dist/cli/index.js serve</code></li>
110
+ <li>插件市场(🧩)依赖外部技能源网络,离线时优雅降级为错误提示,不影响其他功能</li>
111
+ </ul>
112
+ </div>
113
+
114
+ <div class="foot">晋江市飞虹智科技企业管理有限公司 · 飞扬企源研发中心 · 负责人:吴赐虹</div>
115
+ </div>
116
+ </body>
117
+ </html>
package/package.json CHANGED
@@ -1,109 +1,108 @@
1
- {
2
- "name": "feihong-code",
3
- "version": "0.2.3",
4
- "description": "fhcode(飞虹 Code)— 终端 AI 编程智能体,对标 Muse Code / Cursor CLI:多模型路由(DeepSeek/通义/Ollama/OpenAI)、企业级 RBAC 审计、全自动 SWE Agent、支持离线私有化",
5
- "bin": {
6
- "fhcode": "dist/cli/index.js"
7
- },
8
- "main": "dist/cli/index.js",
9
- "files": [
10
- "dist",
11
- "README.md",
12
- "CHANGELOG.md",
13
- "LICENSE",
14
- "CONTRIBUTING.md",
15
- "CODE_OF_CONDUCT.md",
16
- "AGENT-GUIDE.md",
17
- "tool-schema.json",
18
- "docs",
19
- ".github"
20
- ],
21
- "scripts": {
22
- "build": "tsc && node scripts/copy-web.cjs",
23
- "start": "node dist/cli/index.js",
24
- "dev": "tsx src/cli/index.ts",
25
- "typecheck": "tsc --noEmit",
26
- "verify:m4": "node scripts/verify-m4.mjs",
27
- "test": "tsx --test tests/unit/*.test.ts",
28
- "verify": "npm run typecheck && npm run build && npm run verify:m4",
29
- "prepublishOnly": "npm run build"
30
- },
31
- "keywords": [
32
- "ai",
33
- "agent",
34
- "ai-agent",
35
- "coding",
36
- "cli",
37
- "llm",
38
- "large-language-model",
39
- "muse-code",
40
- "autonomous-agent",
41
- "swe-agent",
42
- "software-engineering",
43
- "deepseek",
44
- "ollama",
45
- "openai",
46
- "typescript",
47
- "rbac",
48
- "enterprise",
49
- "multi-tenant",
50
- "code-generation",
51
- "test-generation",
52
- "terminal",
53
- "developer-tools",
54
- "productivity",
55
- "agentic",
56
- "vibe-coding",
57
- "code-review",
58
- "refactor",
59
- "automation",
60
- "mcp",
61
- "tool-use",
62
- "claude",
63
- "copilot",
64
- "chatgpt",
65
- "devops",
66
- "agent-framework",
67
- "ai-tools",
68
- "coding-assistant",
69
- "self-improving",
70
- "offline-ai",
71
- "ai-coding",
72
- "command-line",
73
- "software-development",
74
- "llm-agent",
75
- "nodejs-cli",
76
- "code-assistant",
77
- "agentic-ai"
78
- ],
79
- "author": "吴赐虹 (晋江市飞虹智科技企业管理有限公司) <wch887292@gmail.com>",
80
- "license": "MIT",
81
- "repository": {
82
- "type": "git",
83
- "url": "https://gitcode.com/gcw_YuRlTP0G/feihong-code.git"
84
- },
85
- "homepage": "https://www.klai.top",
86
- "bugs": {
87
- "url": "https://gitcode.com/gcw_YuRlTP0G/feihong-code/issues"
88
- },
89
- "engines": {
90
- "node": ">=18.0.0"
91
- },
92
- "funding": {
93
- "type": "company",
94
- "url": "https://www.klai.top"
95
- },
96
- "devDependencies": {
97
- "@types/express": "^4.17.21",
98
- "@types/node": "^26.2.0",
99
- "tsx": "^4.19.2",
100
- "typescript": "^5.6.3"
101
- },
102
- "dependencies": {
103
- "express": "^4.21.2",
104
- "zod": "^4.4.3"
105
- },
106
- "publishConfig": {
107
- "registry": "https://registry.npmjs.org/"
108
- }
109
- }
1
+ {
2
+ "name": "feihong-code",
3
+ "version": "0.6.0",
4
+ "description": "fhcode(飞虹 Code)— 终端 AI 编程智能体,对标 Muse Code / Cursor CLI:多模型路由(DeepSeek/通义/Ollama/OpenAI)、企业级 RBAC 审计、全自动 SWE Agent、支持离线私有化",
5
+ "bin": {
6
+ "fhcode": "dist/cli/index.js"
7
+ },
8
+ "main": "dist/cli/index.js",
9
+ "files": [
10
+ "dist",
11
+ "README.md",
12
+ "CHANGELOG.md",
13
+ "LICENSE",
14
+ "CONTRIBUTING.md",
15
+ "CODE_OF_CONDUCT.md",
16
+ "AGENT-GUIDE.md",
17
+ "tool-schema.json",
18
+ "docs",
19
+ ".github"
20
+ ],
21
+ "scripts": {
22
+ "build": "tsc && node scripts/copy-web.cjs",
23
+ "start": "node dist/cli/index.js",
24
+ "dev": "tsx src/cli/index.ts",
25
+ "typecheck": "tsc --noEmit",
26
+ "verify:m4": "node scripts/verify-m4.mjs",
27
+ "verify:m6": "node scripts/verify-m6.mjs",
28
+ "verify:m7": "node scripts/verify-m7.mjs",
29
+ "verify:m8": "node scripts/verify-m8.mjs",
30
+ "verify:m9": "node scripts/verify-m9.mjs",
31
+ "eval": "node scripts/eval.mjs",
32
+ "test": "tsx --test tests/unit/*.test.ts",
33
+ "verify": "npm run typecheck && npm run build && npm run verify:m4 && npm run verify:m6 && npm run verify:m7 && npm run verify:m8 && npm run verify:m9",
34
+ "prepublishOnly": "npm run build"
35
+ },
36
+ "keywords": [
37
+ "ai",
38
+ "agent",
39
+ "ai-agent",
40
+ "coding",
41
+ "cli",
42
+ "llm",
43
+ "large-language-model",
44
+ "muse-code",
45
+ "autonomous-agent",
46
+ "swe-agent",
47
+ "software-engineering",
48
+ "deepseek",
49
+ "ollama",
50
+ "openai",
51
+ "typescript",
52
+ "rbac",
53
+ "enterprise",
54
+ "multi-tenant",
55
+ "code-generation",
56
+ "test-generation",
57
+ "terminal",
58
+ "developer-tools",
59
+ "productivity",
60
+ "agentic",
61
+ "vibe-coding",
62
+ "code-review",
63
+ "refactor",
64
+ "automation",
65
+ "mcp",
66
+ "tool-use",
67
+ "self-evolving",
68
+ "self-healing",
69
+ "swebench",
70
+ "offline-ai",
71
+ "multi-model",
72
+ "production-ready",
73
+ "enterprise-grade",
74
+ "code-assistant",
75
+ "agentic-ai",
76
+ "prompt-template"
77
+ ],
78
+ "author": "吴赐虹 (晋江市飞虹智科技企业管理有限公司) <wch887292@gmail.com>",
79
+ "license": "MIT",
80
+ "repository": {
81
+ "type": "git",
82
+ "url": "https://github.com/wch887292/feihong-code.git"
83
+ },
84
+ "homepage": "https://www.klai.top",
85
+ "bugs": {
86
+ "url": "https://github.com/wch887292/feihong-code/issues"
87
+ },
88
+ "engines": {
89
+ "node": ">=18.0.0"
90
+ },
91
+ "funding": {
92
+ "type": "company",
93
+ "url": "https://www.klai.top"
94
+ },
95
+ "devDependencies": {
96
+ "@types/express": "^5.0.6",
97
+ "@types/node": "^26.2.0",
98
+ "tsx": "^4.19.2",
99
+ "typescript": "^5.6.3"
100
+ },
101
+ "dependencies": {
102
+ "express": "^4.21.2",
103
+ "zod": "^4.4.3"
104
+ },
105
+ "publishConfig": {
106
+ "registry": "https://registry.npmjs.org/"
107
+ }
108
+ }