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.
- 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 +392 -0
- package/CODE_OF_CONDUCT.md +56 -56
- package/CONTRIBUTING.md +68 -68
- package/LICENSE +22 -22
- package/README.md +586 -522
- 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 +74 -18
- 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 +319 -84
- package/dist/agent/experience.js.map +1 -1
- package/dist/agent/orchestrator.js +233 -71
- package/dist/agent/orchestrator.js.map +1 -1
- package/dist/agent/planner.js +30 -7
- package/dist/agent/planner.js.map +1 -1
- package/dist/agent/prompts.js +9 -0
- package/dist/agent/prompts.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 +80 -60
- 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 +600 -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 +145 -23
- 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 +100 -27
- package/dist/models/model-router.js.map +1 -1
- package/dist/models/model.dto.js +25 -3
- package/dist/models/model.dto.js.map +1 -1
- package/dist/models/providers/ollama.provider.js +12 -0
- package/dist/models/providers/ollama.provider.js.map +1 -1
- package/dist/models/providers/openai-compatible.provider.js +14 -1
- package/dist/models/providers/openai-compatible.provider.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/self-evolve/hook.ts +80 -0
- package/dist/self-evolve/manager.d.ts +8 -0
- package/dist/self-evolve/manager.js +401 -0
- package/dist/shared/config.js +35 -3
- package/dist/shared/config.js.map +1 -1
- package/dist/shared/errors.js +6 -2
- package/dist/shared/errors.js.map +1 -1
- package/dist/shared/i18n.js +535 -0
- package/dist/shared/i18n.js.map +1 -0
- package/dist/shared/secure-store.js +117 -0
- package/dist/shared/secure-store.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 +194 -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 +72 -3
- package/dist/tools/shell/exec.js.map +1 -1
- package/dist/tools/shell/run-shell.tool.js +37 -7
- 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 +69 -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 +178 -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/css/style.css +1546 -0
- package/dist/web/public/index.html +804 -37
- package/dist/web/public/js/api.js +309 -0
- package/dist/web/public/js/app.js +1472 -0
- package/dist/web/public/js/ui.js +832 -0
- package/dist/web/public/js/utils.js +170 -0
- package/dist/web/server.js +937 -11
- package/dist/web/server.js.map +1 -1
- package/dist/web/task-queue.js +470 -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/App/344/275/277/347/224/250/350/257/264/346/230/216/344/271/246.md +299 -0
- package/docs/App/346/212/200/346/234/257/350/257/264/346/230/216/344/271/246.md +554 -0
- package/docs/Deployment_Guide_EN.md +288 -0
- package/docs/SELF-EVOLVE-GUIDE.md +313 -0
- package/docs/Technical_Manual_EN.md +216 -0
- package/docs/User_Manual_EN.md +314 -0
- package/docs/error-codes.md +198 -0
- package/docs/screenshots/cli-demo.png +0 -0
- package/docs/screenshots/feature-comparison.png +0 -0
- package/docs/screenshots/web-console.png +0 -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/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
- package/package.json +108 -109
- package/tool-schema.json +117 -46
|
@@ -1,165 +1,165 @@
|
|
|
1
|
-
# 飞虹 Code 部署指南
|
|
2
|
-
|
|
3
|
-
> 晋江市飞虹智科技企业管理有限公司 · 飞扬企源研发中心 · 负责人:吴赐虹
|
|
4
|
-
|
|
5
|
-
覆盖:环境要求、源码/全局安装、Docker、CI、npm 发布、内网部署。
|
|
6
|
-
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
## 1. 环境要求
|
|
10
|
-
|
|
11
|
-
- **Node.js >= 18**(CI 与 Docker 均使用 18)。
|
|
12
|
-
- **Git**:`--parallel` 依赖 `git worktree` 隔离,必须可用(Docker 镜像已内置)。
|
|
13
|
-
- 仅需运行时依赖 `zod`(dev 依赖 typescript/tsx 仅构建期需要)。
|
|
14
|
-
|
|
15
|
-
---
|
|
16
|
-
|
|
17
|
-
## 2. 从源码部署
|
|
18
|
-
|
|
19
|
-
```bash
|
|
20
|
-
git clone https://github.com/wch887292/feihong-code.git
|
|
21
|
-
cd feihong-code
|
|
22
|
-
npm install
|
|
23
|
-
npm run build
|
|
24
|
-
node dist/cli/index.js --version
|
|
25
|
-
```
|
|
26
|
-
|
|
27
|
-
或直接用脚本:`bash install.sh`(自动 install + build + 全局安装)。
|
|
28
|
-
|
|
29
|
-
---
|
|
30
|
-
|
|
31
|
-
## 3. 全局安装
|
|
32
|
-
|
|
33
|
-
```bash
|
|
34
|
-
npm install -g . # 从本地源码装为全局命令 fhcode
|
|
35
|
-
fhcode --version
|
|
36
|
-
```
|
|
37
|
-
|
|
38
|
-
发布到 npm 后:`npm install -g feihong-code`。
|
|
39
|
-
|
|
40
|
-
---
|
|
41
|
-
|
|
42
|
-
## 4. Docker 部署
|
|
43
|
-
|
|
44
|
-
```bash
|
|
45
|
-
docker build -t feihong-code .
|
|
46
|
-
```
|
|
47
|
-
|
|
48
|
-
运行(离线):
|
|
49
|
-
|
|
50
|
-
```bash
|
|
51
|
-
docker run --rm feihong-code --version
|
|
52
|
-
```
|
|
53
|
-
|
|
54
|
-
运行(真实模型,挂载密钥与日志):
|
|
55
|
-
|
|
56
|
-
```bash
|
|
57
|
-
docker run --rm \
|
|
58
|
-
-v "$PWD/.env:/app/.env" \
|
|
59
|
-
-v feihong-data:/data/feihong-code \
|
|
60
|
-
feihong-code "把 src/utils 的日期格式化抽成独立模块并补测试"
|
|
61
|
-
```
|
|
62
|
-
|
|
63
|
-
- 镜像为多阶段构建:构建期装全依赖编译 `dist`,运行期仅 `npm install --omit=dev` + 复制 `dist`。
|
|
64
|
-
- 运行期已 `apk add git`,支持 `--parallel` 的 worktree 隔离。
|
|
65
|
-
- `FH_HOME` 默认 `/data/feihong-code`,建议挂载为卷以持久化目标与日志。
|
|
66
|
-
|
|
67
|
-
---
|
|
68
|
-
|
|
69
|
-
## 5. CI / CD(M4 三流水线)
|
|
70
|
-
|
|
71
|
-
`.github/workflows/ci.yml` 在 `push`/`pull_request` 触发,**全离线、零 Secrets**,fork PR 安全。分为三个 job:
|
|
72
|
-
|
|
73
|
-
### 5.1 `build` — 构建与离线闭环
|
|
74
|
-
|
|
75
|
-
- Node 18 / 20 / 22 矩阵;
|
|
76
|
-
- `npm run typecheck` → `npm run build`;
|
|
77
|
-
- 离线冒烟:`FH_OFFLINE=true fhcode "..."`;只读技能 `/plan` `/grill` 校验;
|
|
78
|
-
- 目的:保证多版本 Node 下可构建、社区闭环可跑。
|
|
79
|
-
|
|
80
|
-
### 5.2 `enterprise` — 企业能力断言
|
|
81
|
-
|
|
82
|
-
- 运行 `npm run verify:m4`(`scripts/verify-m4.mjs`,**41 项全离线断言**):
|
|
83
|
-
- RBAC 矩阵(5) / deny 优先(4) / 策略覆盖(4) / 审计哈希链(7) / 守卫链路(11) / 多租户(7) / 配额(3);
|
|
84
|
-
- CLI 冒烟:`whoami` / `policy` / `audit` / `audit verify` / `tenants`;
|
|
85
|
-
- **租户隔离断言**:用 `beta` 租户执行任务后,断言其 `sessions` 读不到 `acme` 租户会话(物理目录互不串台)。
|
|
86
|
-
|
|
87
|
-
### 5.3 `security` — 发布安全
|
|
88
|
-
|
|
89
|
-
- `npm pack --dry-run` 白名单校验:禁止 `.env` / `src` / `policy.json` / `.workbuddy` 进入产物;
|
|
90
|
-
- 仓库明文密钥扫描(`git grep` 规则集):杜绝 accidental secret 入库;
|
|
91
|
-
- `npm audit`:依赖漏洞检查。
|
|
92
|
-
|
|
93
|
-
> 本地完整校验:`npm run verify`(= typecheck + build + verify:m4)。
|
|
94
|
-
|
|
95
|
-
- **企业模式不触碰密钥**:CI 仅做离线冒烟、企业断言与发布安全,**绝不**读取或回显任何 API key。
|
|
96
|
-
- 真实联调建议在本地或带加密 secret 的受控环境执行,切勿把密钥明文写入 CI 日志。
|
|
97
|
-
|
|
98
|
-
---
|
|
99
|
-
|
|
100
|
-
## 5.1 企业合规部署建议(M4)
|
|
101
|
-
|
|
102
|
-
- **多租户物理隔离**:为每个客户/团队分配独立 `FH_TENANT`,数据落 `<FH_HOME>/tenants/<tenantId>/`,互不串台。
|
|
103
|
-
- **最小角色**:日常运行用 `developer`;仅可信运维用 `operator`/`admin`;只读巡检用 `viewer`。
|
|
104
|
-
- **日预算硬上限**:为每个租户设 `FH_TENANT_BUDGET_USD`,超限即 `QUOTA_EXCEEDED` 拒绝,防成本失控。
|
|
105
|
-
- **审计留存**:`audit-YYYY-MM.jsonl` 建议只读挂载或异地备份,并周期性 `fhcode audit verify` 巡检哈希链完整性。
|
|
106
|
-
- **关闭企业模式**:纯社区/单机使用可设 `FH_ENTERPRISE=false`,行为与 M3 一致、零额外开销。
|
|
107
|
-
|
|
108
|
-
---
|
|
109
|
-
|
|
110
|
-
## 6. 发布到 npm
|
|
111
|
-
|
|
112
|
-
`package.json` 已做好发布安全:
|
|
113
|
-
|
|
114
|
-
- `files` 白名单:`dist` + `README.md` + `LICENSE` + `CONTRIBUTING.md` + `docs`(**绝不**包含 `.env` / `src` / `.workbuddy`)。
|
|
115
|
-
- `prepublishOnly`: `npm run build`(发布前自动构建,保证 `dist` 最新)。
|
|
116
|
-
- `.npmignore` 作为冗余保险。
|
|
117
|
-
|
|
118
|
-
发布步骤:
|
|
119
|
-
|
|
120
|
-
```bash
|
|
121
|
-
npm run build
|
|
122
|
-
npm version patch # 或 minor/major
|
|
123
|
-
npm publish # 仅携带 files 白名单内容
|
|
124
|
-
```
|
|
125
|
-
|
|
126
|
-
> ⚠️ **密钥安全铁律**:`.env` 含 API key,已被 `.gitignore` 与 `files` 白名单双重排除,永远不会进入 npm 包或 Git 仓库。
|
|
127
|
-
|
|
128
|
-
---
|
|
129
|
-
|
|
130
|
-
## 7. 内网 / 离线部署建议
|
|
131
|
-
|
|
132
|
-
- **完全离线**:不配 `FH_PROVIDERS`,用内置 Mock 闭环(演示/回归)。
|
|
133
|
-
- **本地模型**:配 Ollama 供应商(`type: ollama`,`baseURL: http://<内网IP>:11434`),数据不出本机。
|
|
134
|
-
- **代理网关**:OpenAI 兼容供应商的 `baseURL` 可指向企业内网网关。
|
|
135
|
-
- **日志合规**:`FH_LOG_DIR` 指向受控存储,按敏感数据留存策略管理。
|
|
136
|
-
|
|
137
|
-
---
|
|
138
|
-
|
|
139
|
-
## 8. 作为后台服务(可选 systemd)
|
|
140
|
-
|
|
141
|
-
```ini
|
|
142
|
-
[Unit]
|
|
143
|
-
Description=飞虹 Code Agent
|
|
144
|
-
After=network.target
|
|
145
|
-
|
|
146
|
-
[Service]
|
|
147
|
-
WorkingDirectory=/opt/feihong-code
|
|
148
|
-
ExecStart=/usr/bin/fhcode "守护型需求"
|
|
149
|
-
Environment=FH_HOME=/var/lib/feihong-code
|
|
150
|
-
Restart=on-failure
|
|
151
|
-
|
|
152
|
-
[Install]
|
|
153
|
-
WantedBy=multi-user.target
|
|
154
|
-
```
|
|
155
|
-
|
|
156
|
-
---
|
|
157
|
-
|
|
158
|
-
## 9. 升级与回滚
|
|
159
|
-
|
|
160
|
-
- 升级:`git pull && npm install && npm run build`(或 `npm update -g feihong-code`)。
|
|
161
|
-
- 回滚:npm 包使用 `npm install -g feihong-code@<旧版本>`;源码用 `git checkout <tag>` 后重建。
|
|
162
|
-
|
|
163
|
-
---
|
|
164
|
-
|
|
165
|
-
© 2026 晋江市飞虹智科技企业管理有限公司 · 飞扬企源研发中心 · 负责人:吴赐虹
|
|
1
|
+
# 飞虹 Code 部署指南
|
|
2
|
+
|
|
3
|
+
> 晋江市飞虹智科技企业管理有限公司 · 飞扬企源研发中心 · 负责人:吴赐虹
|
|
4
|
+
|
|
5
|
+
覆盖:环境要求、源码/全局安装、Docker、CI、npm 发布、内网部署。
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## 1. 环境要求
|
|
10
|
+
|
|
11
|
+
- **Node.js >= 18**(CI 与 Docker 均使用 18)。
|
|
12
|
+
- **Git**:`--parallel` 依赖 `git worktree` 隔离,必须可用(Docker 镜像已内置)。
|
|
13
|
+
- 仅需运行时依赖 `zod`(dev 依赖 typescript/tsx 仅构建期需要)。
|
|
14
|
+
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
## 2. 从源码部署
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
git clone https://github.com/wch887292/feihong-code.git
|
|
21
|
+
cd feihong-code
|
|
22
|
+
npm install
|
|
23
|
+
npm run build
|
|
24
|
+
node dist/cli/index.js --version
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
或直接用脚本:`bash install.sh`(自动 install + build + 全局安装)。
|
|
28
|
+
|
|
29
|
+
---
|
|
30
|
+
|
|
31
|
+
## 3. 全局安装
|
|
32
|
+
|
|
33
|
+
```bash
|
|
34
|
+
npm install -g . # 从本地源码装为全局命令 fhcode
|
|
35
|
+
fhcode --version
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
发布到 npm 后:`npm install -g feihong-code`。
|
|
39
|
+
|
|
40
|
+
---
|
|
41
|
+
|
|
42
|
+
## 4. Docker 部署
|
|
43
|
+
|
|
44
|
+
```bash
|
|
45
|
+
docker build -t feihong-code .
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
运行(离线):
|
|
49
|
+
|
|
50
|
+
```bash
|
|
51
|
+
docker run --rm feihong-code --version
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
运行(真实模型,挂载密钥与日志):
|
|
55
|
+
|
|
56
|
+
```bash
|
|
57
|
+
docker run --rm \
|
|
58
|
+
-v "$PWD/.env:/app/.env" \
|
|
59
|
+
-v feihong-data:/data/feihong-code \
|
|
60
|
+
feihong-code "把 src/utils 的日期格式化抽成独立模块并补测试"
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
- 镜像为多阶段构建:构建期装全依赖编译 `dist`,运行期仅 `npm install --omit=dev` + 复制 `dist`。
|
|
64
|
+
- 运行期已 `apk add git`,支持 `--parallel` 的 worktree 隔离。
|
|
65
|
+
- `FH_HOME` 默认 `/data/feihong-code`,建议挂载为卷以持久化目标与日志。
|
|
66
|
+
|
|
67
|
+
---
|
|
68
|
+
|
|
69
|
+
## 5. CI / CD(M4 三流水线)
|
|
70
|
+
|
|
71
|
+
`.github/workflows/ci.yml` 在 `push`/`pull_request` 触发,**全离线、零 Secrets**,fork PR 安全。分为三个 job:
|
|
72
|
+
|
|
73
|
+
### 5.1 `build` — 构建与离线闭环
|
|
74
|
+
|
|
75
|
+
- Node 18 / 20 / 22 矩阵;
|
|
76
|
+
- `npm run typecheck` → `npm run build`;
|
|
77
|
+
- 离线冒烟:`FH_OFFLINE=true fhcode "..."`;只读技能 `/plan` `/grill` 校验;
|
|
78
|
+
- 目的:保证多版本 Node 下可构建、社区闭环可跑。
|
|
79
|
+
|
|
80
|
+
### 5.2 `enterprise` — 企业能力断言
|
|
81
|
+
|
|
82
|
+
- 运行 `npm run verify:m4`(`scripts/verify-m4.mjs`,**41 项全离线断言**):
|
|
83
|
+
- RBAC 矩阵(5) / deny 优先(4) / 策略覆盖(4) / 审计哈希链(7) / 守卫链路(11) / 多租户(7) / 配额(3);
|
|
84
|
+
- CLI 冒烟:`whoami` / `policy` / `audit` / `audit verify` / `tenants`;
|
|
85
|
+
- **租户隔离断言**:用 `beta` 租户执行任务后,断言其 `sessions` 读不到 `acme` 租户会话(物理目录互不串台)。
|
|
86
|
+
|
|
87
|
+
### 5.3 `security` — 发布安全
|
|
88
|
+
|
|
89
|
+
- `npm pack --dry-run` 白名单校验:禁止 `.env` / `src` / `policy.json` / `.workbuddy` 进入产物;
|
|
90
|
+
- 仓库明文密钥扫描(`git grep` 规则集):杜绝 accidental secret 入库;
|
|
91
|
+
- `npm audit`:依赖漏洞检查。
|
|
92
|
+
|
|
93
|
+
> 本地完整校验:`npm run verify`(= typecheck + build + verify:m4)。
|
|
94
|
+
|
|
95
|
+
- **企业模式不触碰密钥**:CI 仅做离线冒烟、企业断言与发布安全,**绝不**读取或回显任何 API key。
|
|
96
|
+
- 真实联调建议在本地或带加密 secret 的受控环境执行,切勿把密钥明文写入 CI 日志。
|
|
97
|
+
|
|
98
|
+
---
|
|
99
|
+
|
|
100
|
+
## 5.1 企业合规部署建议(M4)
|
|
101
|
+
|
|
102
|
+
- **多租户物理隔离**:为每个客户/团队分配独立 `FH_TENANT`,数据落 `<FH_HOME>/tenants/<tenantId>/`,互不串台。
|
|
103
|
+
- **最小角色**:日常运行用 `developer`;仅可信运维用 `operator`/`admin`;只读巡检用 `viewer`。
|
|
104
|
+
- **日预算硬上限**:为每个租户设 `FH_TENANT_BUDGET_USD`,超限即 `QUOTA_EXCEEDED` 拒绝,防成本失控。
|
|
105
|
+
- **审计留存**:`audit-YYYY-MM.jsonl` 建议只读挂载或异地备份,并周期性 `fhcode audit verify` 巡检哈希链完整性。
|
|
106
|
+
- **关闭企业模式**:纯社区/单机使用可设 `FH_ENTERPRISE=false`,行为与 M3 一致、零额外开销。
|
|
107
|
+
|
|
108
|
+
---
|
|
109
|
+
|
|
110
|
+
## 6. 发布到 npm
|
|
111
|
+
|
|
112
|
+
`package.json` 已做好发布安全:
|
|
113
|
+
|
|
114
|
+
- `files` 白名单:`dist` + `README.md` + `LICENSE` + `CONTRIBUTING.md` + `docs`(**绝不**包含 `.env` / `src` / `.workbuddy`)。
|
|
115
|
+
- `prepublishOnly`: `npm run build`(发布前自动构建,保证 `dist` 最新)。
|
|
116
|
+
- `.npmignore` 作为冗余保险。
|
|
117
|
+
|
|
118
|
+
发布步骤:
|
|
119
|
+
|
|
120
|
+
```bash
|
|
121
|
+
npm run build
|
|
122
|
+
npm version patch # 或 minor/major
|
|
123
|
+
npm publish # 仅携带 files 白名单内容
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
> ⚠️ **密钥安全铁律**:`.env` 含 API key,已被 `.gitignore` 与 `files` 白名单双重排除,永远不会进入 npm 包或 Git 仓库。
|
|
127
|
+
|
|
128
|
+
---
|
|
129
|
+
|
|
130
|
+
## 7. 内网 / 离线部署建议
|
|
131
|
+
|
|
132
|
+
- **完全离线**:不配 `FH_PROVIDERS`,用内置 Mock 闭环(演示/回归)。
|
|
133
|
+
- **本地模型**:配 Ollama 供应商(`type: ollama`,`baseURL: http://<内网IP>:11434`),数据不出本机。
|
|
134
|
+
- **代理网关**:OpenAI 兼容供应商的 `baseURL` 可指向企业内网网关。
|
|
135
|
+
- **日志合规**:`FH_LOG_DIR` 指向受控存储,按敏感数据留存策略管理。
|
|
136
|
+
|
|
137
|
+
---
|
|
138
|
+
|
|
139
|
+
## 8. 作为后台服务(可选 systemd)
|
|
140
|
+
|
|
141
|
+
```ini
|
|
142
|
+
[Unit]
|
|
143
|
+
Description=飞虹 Code Agent
|
|
144
|
+
After=network.target
|
|
145
|
+
|
|
146
|
+
[Service]
|
|
147
|
+
WorkingDirectory=/opt/feihong-code
|
|
148
|
+
ExecStart=/usr/bin/fhcode "守护型需求"
|
|
149
|
+
Environment=FH_HOME=/var/lib/feihong-code
|
|
150
|
+
Restart=on-failure
|
|
151
|
+
|
|
152
|
+
[Install]
|
|
153
|
+
WantedBy=multi-user.target
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
---
|
|
157
|
+
|
|
158
|
+
## 9. 升级与回滚
|
|
159
|
+
|
|
160
|
+
- 升级:`git pull && npm install && npm run build`(或 `npm update -g feihong-code`)。
|
|
161
|
+
- 回滚:npm 包使用 `npm install -g feihong-code@<旧版本>`;源码用 `git checkout <tag>` 后重建。
|
|
162
|
+
|
|
163
|
+
---
|
|
164
|
+
|
|
165
|
+
© 2026 晋江市飞虹智科技企业管理有限公司 · 飞扬企源研发中心 · 负责人:吴赐虹
|
|
@@ -0,0 +1,288 @@
|
|
|
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
|
+
| 形态 | 场景 | 组件 |
|
|
13
|
+
|------|------|------|
|
|
14
|
+
| 单机 CLI | 个人开发 / 内网终端 | fhcode CLI(Node.js) |
|
|
15
|
+
| Web 服务 | 团队共享 / 云执行 | fhcode serve + 任务队列 |
|
|
16
|
+
| Docker | 容器化 / 私有化 | Dockerfile + docker-compose |
|
|
17
|
+
| 企业私有化 | 多租户 / 审计 / 配额 | 企业模式(FH_ENTERPRISE) |
|
|
18
|
+
| IDE 集成 | 编辑器内使用 | VSCode 扩展(薄壳) |
|
|
19
|
+
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
## 二、环境要求
|
|
23
|
+
|
|
24
|
+
| 项 | 要求 | 说明 |
|
|
25
|
+
|----|------|------|
|
|
26
|
+
| Node.js | ≥ 18(推荐 20/22) | 运行时 |
|
|
27
|
+
| npm | ≥ 9 | 包管理 |
|
|
28
|
+
| git | 推荐 | diff/rollback/并行 worktree |
|
|
29
|
+
| Docker | 可选 | `FH_SANDBOX_MODE=container` 与 Docker 部署 |
|
|
30
|
+
| 网络 | 可选 | 真实模型 API / 技能市场 / HF 数据集(离线模式不需外网) |
|
|
31
|
+
|
|
32
|
+
**离线部署要点**:未配置模型时自动进入离线模式(Mock 驱动),零外网依赖;模型接入可指向内网 Ollama 或私有 OpenAI 兼容网关。
|
|
33
|
+
|
|
34
|
+
---
|
|
35
|
+
|
|
36
|
+
## 三、安装部署
|
|
37
|
+
|
|
38
|
+
### 3.1 npm 全局安装
|
|
39
|
+
|
|
40
|
+
```bash
|
|
41
|
+
npm install -g feihong-code
|
|
42
|
+
fhcode --version
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
### 3.2 源码部署
|
|
46
|
+
|
|
47
|
+
```bash
|
|
48
|
+
git clone https://github.com/wch887292/feihong-code.git
|
|
49
|
+
cd feihong-code
|
|
50
|
+
npm install
|
|
51
|
+
npm run build # tsc + Web 静态资源复制
|
|
52
|
+
npm test # 164 单测自检
|
|
53
|
+
node scripts/eval.mjs # 本地跑分自检(10/10)
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
### 3.3 Docker 部署(Web 服务)
|
|
57
|
+
|
|
58
|
+
```bash
|
|
59
|
+
# 构建镜像
|
|
60
|
+
docker build -t feihong-code .
|
|
61
|
+
|
|
62
|
+
# 运行 Web 控制台(含任务队列)
|
|
63
|
+
docker run -d --name fhcode \
|
|
64
|
+
-p 8080:8080 \
|
|
65
|
+
-e FH_WEB_TOKEN=<你的令牌> \
|
|
66
|
+
-e FH_PROVIDERS='[{"name":"deepseek","type":"openai-compatible","baseUrl":"https://api.deepseek.com/v1","apiKey":"sk-...","tags":["code-gen"]}]' \
|
|
67
|
+
-v fhcode-data:/root/.feihong-code \
|
|
68
|
+
feihong-code
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
### 3.4 docker-compose(推荐)
|
|
72
|
+
|
|
73
|
+
```yaml
|
|
74
|
+
# docker-compose.yml
|
|
75
|
+
services:
|
|
76
|
+
fhcode:
|
|
77
|
+
build: .
|
|
78
|
+
ports: ["8080:8080"]
|
|
79
|
+
environment:
|
|
80
|
+
FH_WEB_TOKEN: ${FH_WEB_TOKEN}
|
|
81
|
+
FH_PROVIDERS: ${FH_PROVIDERS} # 模型配置
|
|
82
|
+
FH_TASK_CONCURRENCY: "2" # 任务并发上限
|
|
83
|
+
FH_TASK_PERSIST_DIR: /data/tasks # 任务持久化(重启恢复)
|
|
84
|
+
FH_ENTERPRISE: "true" # 企业模式
|
|
85
|
+
volumes:
|
|
86
|
+
- fhcode-data:/data
|
|
87
|
+
- fhcode-home:/root/.feihong-code
|
|
88
|
+
volumes:
|
|
89
|
+
fhcode-data:
|
|
90
|
+
fhcode-home:
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
---
|
|
94
|
+
|
|
95
|
+
## 四、环境变量参考(完整)
|
|
96
|
+
|
|
97
|
+
### 4.1 应用与路径
|
|
98
|
+
|
|
99
|
+
| 变量 | 默认 | 说明 |
|
|
100
|
+
|------|------|------|
|
|
101
|
+
| `FH_HOME` | `~/.feihong-code` | 主目录(会话/审计/经验/统计/缓存) |
|
|
102
|
+
| `FH_LOG_DIR` | `$FH_HOME/sessions` | 会话日志目录(支持 `~` 展开) |
|
|
103
|
+
| `FH_CONFIG` | — | 配置文件路径(fhcode.config.json) |
|
|
104
|
+
| `FHCODE_LANG` | 系统 locale | 界面语言 zh/en |
|
|
105
|
+
|
|
106
|
+
### 4.2 模型路由
|
|
107
|
+
|
|
108
|
+
| 变量 | 说明 |
|
|
109
|
+
|------|------|
|
|
110
|
+
| `FH_PROVIDERS` | JSON 数组(最高优先级):`{name,type,baseURL,apiKey,tags[],costPer1k}` |
|
|
111
|
+
| `FH_MODEL_NAME/TYPE/BASE_URL/API_KEY/TAGS/COST_PER_1K` | 单变量快速接入 |
|
|
112
|
+
| `FH_MODEL_STRATEGY` | cost/capability/latency |
|
|
113
|
+
| `FH_BUDGET_USD` | 单任务成本上限(熔断) |
|
|
114
|
+
| `FH_TENANT_BUDGET_USD` | 租户日成本上限(覆盖策略) |
|
|
115
|
+
|
|
116
|
+
### 4.3 安全
|
|
117
|
+
|
|
118
|
+
| 变量 | 说明 |
|
|
119
|
+
|------|------|
|
|
120
|
+
| `FH_SANDBOX_MODE` | read-only / workspace-write / danger-full-access / container |
|
|
121
|
+
| `FH_SANDBOX_IMAGE` | container 模式镜像(默认 node:22-alpine) |
|
|
122
|
+
| `FH_SHELL_ALLOW` | shell 白名单(逗号分隔) |
|
|
123
|
+
| `FH_REQUIRE_APPROVAL` | 审批开关(默认 true) |
|
|
124
|
+
| `FH_NETWORK_ALLOW/DENY` | 网络域名规则(deny 全模式生效) |
|
|
125
|
+
| `FH_HOOKS` | hooks JSON 数组(PreToolUse/PostToolUse/PostEdit) |
|
|
126
|
+
| `FH_POLICY` | 内联策略 JSON(RBAC/黑名单,仅加严) |
|
|
127
|
+
|
|
128
|
+
### 4.4 企业模式
|
|
129
|
+
|
|
130
|
+
| 变量 | 说明 |
|
|
131
|
+
|------|------|
|
|
132
|
+
| `FH_ENTERPRISE` | 默认开启(false 关闭退化为社区版) |
|
|
133
|
+
| `FH_TENANT` | 租户 id(缺省 default) |
|
|
134
|
+
| `FH_USER` | 用户 id |
|
|
135
|
+
| `FH_ROLE` | viewer/developer/operator/admin |
|
|
136
|
+
|
|
137
|
+
### 4.5 Web / 云执行
|
|
138
|
+
|
|
139
|
+
| 变量 | 说明 |
|
|
140
|
+
|------|------|
|
|
141
|
+
| `FH_WEB_TOKEN` | Web 控制台访问令牌(缺省自动生成) |
|
|
142
|
+
| `FH_WEB_PORT` | 端口(缺省 8080) |
|
|
143
|
+
| `FH_TASK_CONCURRENCY` | 任务并发上限(缺省 2) |
|
|
144
|
+
| `FH_TASK_PERSIST_DIR` | 任务持久化目录(缺省 `$FH_HOME/tasks`) |
|
|
145
|
+
| `FH_TASK_WEBHOOK_URL` | 任务状态 webhook(可动态注册) |
|
|
146
|
+
|
|
147
|
+
### 4.6 消息渠道
|
|
148
|
+
|
|
149
|
+
| 变量 | 说明 |
|
|
150
|
+
|------|------|
|
|
151
|
+
| `FH_CHANNEL_TELEGRAM_BOT_TOKEN/CHAT_ID` | Telegram 通知 |
|
|
152
|
+
| `FH_CHANNEL_WECOM_KEY` | 企业微信机器人 key(可多个逗号分隔) |
|
|
153
|
+
| `FH_CHANNEL_ALLOW` | 出站渠道白名单 |
|
|
154
|
+
|
|
155
|
+
### 4.7 技能市场 / 基准
|
|
156
|
+
|
|
157
|
+
| 变量 | 说明 |
|
|
158
|
+
|------|------|
|
|
159
|
+
| `FH_SKILL_MARKET` | 技能市场源(缺省 agentskills.io) |
|
|
160
|
+
| `FH_SWEBENCH_DATA_URL` | SWE-bench 数据镜像/离线 JSON(国内网络友好) |
|
|
161
|
+
|
|
162
|
+
---
|
|
163
|
+
|
|
164
|
+
## 五、企业私有化部署
|
|
165
|
+
|
|
166
|
+
### 5.1 目录结构(租户隔离)
|
|
167
|
+
|
|
168
|
+
```
|
|
169
|
+
$FH_HOME/
|
|
170
|
+
├── tenants/<tenantId>/
|
|
171
|
+
│ ├── sessions/ # 会话检查点
|
|
172
|
+
│ ├── audit/ # 审计哈希链(audit-YYYY-MM.jsonl)
|
|
173
|
+
│ └── goals/ # 目标文件
|
|
174
|
+
├── policy.json # 全局策略(RBAC/黑名单)
|
|
175
|
+
├── experiences/ # 经验库
|
|
176
|
+
├── model-stats.jsonl # 模型统计
|
|
177
|
+
├── skills/ # 用户级技能
|
|
178
|
+
├── plugins/ # 用户级插件
|
|
179
|
+
└── bench/ # eval/SWE-bench 缓存与基线
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
### 5.2 生产建议
|
|
183
|
+
|
|
184
|
+
1. **令牌管理**:`FH_WEB_TOKEN` 必须显式设置(缺省自动生成仅限本会话),通过密钥管理服务注入
|
|
185
|
+
2. **审计合规**:`fhcode audit verify` 定期校验哈希链完整性;审计文件按月分片便于归档
|
|
186
|
+
3. **配额治理**:`FH_TENANT_BUDGET_USD` 设租户日预算,超限 fail-fast 拒绝任务
|
|
187
|
+
4. **备份**:`$FH_HOME`(会话/审计/经验)建议每日备份;任务队列 `FH_TASK_PERSIST_DIR` 独立卷
|
|
188
|
+
5. **多实例**:任务队列按文件持久化,多实例共享持久化目录可交叉恢复(queued 重新入队、running 僵尸标记 failed)
|
|
189
|
+
6. **内网模型**:`FH_PROVIDERS` 指向内网 Ollama/私有网关,可完全断外网运行
|
|
190
|
+
|
|
191
|
+
### 5.3 安全基线(生产必须)
|
|
192
|
+
|
|
193
|
+
```bash
|
|
194
|
+
export FH_REQUIRE_APPROVAL=true
|
|
195
|
+
export FH_SANDBOX_MODE=workspace-write # 或 container
|
|
196
|
+
export FH_NETWORK_DENY=... # 按需配置
|
|
197
|
+
export FH_ENTERPRISE=true
|
|
198
|
+
export FH_CHANNEL_ALLOW=telegram,wecom # 渠道白名单(可选)
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
---
|
|
202
|
+
|
|
203
|
+
## 六、Web 服务运维
|
|
204
|
+
|
|
205
|
+
### 6.1 启动与健康检查
|
|
206
|
+
|
|
207
|
+
```bash
|
|
208
|
+
fhcode serve --port 8080
|
|
209
|
+
curl http://localhost:8080/api/health # 免鉴权健康检查
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
### 6.2 任务队列 API(Bearer 鉴权)
|
|
213
|
+
|
|
214
|
+
```bash
|
|
215
|
+
TOKEN=$FH_WEB_TOKEN
|
|
216
|
+
# 提交 / 列表 / 查询 / webhook 注册
|
|
217
|
+
curl -X POST http://localhost:8080/api/tasks -H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" -d '{"goal":"..."}'
|
|
218
|
+
curl http://localhost:8080/api/tasks -H "Authorization: Bearer $TOKEN"
|
|
219
|
+
curl http://localhost:8080/api/tasks/<id> -H "Authorization: Bearer $TOKEN"
|
|
220
|
+
curl -X POST http://localhost:8080/api/webhook -H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" -d '{"url":"https://ci.example.com/hook"}'
|
|
221
|
+
```
|
|
222
|
+
|
|
223
|
+
### 6.3 重启恢复
|
|
224
|
+
|
|
225
|
+
- 任务落盘 `$FH_HOME/tasks/<id>.json`(原子写)
|
|
226
|
+
- 重启后:queued 重新入队执行、running 僵尸标记 failed、终态保留可查询
|
|
227
|
+
- webhook/渠道通知在恢复时重新触发(queued 节点)
|
|
228
|
+
|
|
229
|
+
---
|
|
230
|
+
|
|
231
|
+
## 七、CI/CD 集成(回归门禁)
|
|
232
|
+
|
|
233
|
+
```yaml
|
|
234
|
+
# .github/workflows/ci.yml 片段
|
|
235
|
+
- name: Build & test
|
|
236
|
+
run: |
|
|
237
|
+
npm ci
|
|
238
|
+
npm run typecheck
|
|
239
|
+
npm test
|
|
240
|
+
npm run build
|
|
241
|
+
|
|
242
|
+
- name: eval 回归门禁(基线对比)
|
|
243
|
+
run: |
|
|
244
|
+
npm run build
|
|
245
|
+
node scripts/eval.mjs --baseline bench/eval-baseline.json
|
|
246
|
+
# 本次 pass 低于基线即失败
|
|
247
|
+
|
|
248
|
+
- name: 更新基线(main 分支)
|
|
249
|
+
if: github.ref == 'refs/heads/main'
|
|
250
|
+
run: node scripts/eval.mjs --save-baseline bench/eval-baseline.json
|
|
251
|
+
```
|
|
252
|
+
|
|
253
|
+
### SWE-bench 基准接入(可选)
|
|
254
|
+
|
|
255
|
+
```bash
|
|
256
|
+
node scripts/eval-swebench.mjs --split lite --limit 20 --run --report report.md
|
|
257
|
+
# 离线/内网:FH_SWEBENCH_DATA_URL 指向镜像 JSON
|
|
258
|
+
```
|
|
259
|
+
|
|
260
|
+
---
|
|
261
|
+
|
|
262
|
+
## 八、升级与回滚
|
|
263
|
+
|
|
264
|
+
| 操作 | 命令 |
|
|
265
|
+
|------|------|
|
|
266
|
+
| 升级 npm 包 | `npm install -g feihong-code@latest` |
|
|
267
|
+
| 升级源码 | `git pull && npm install && npm run build` |
|
|
268
|
+
| 检查版本 | `fhcode --version` / `fhcode doctor` |
|
|
269
|
+
| 回滚 | npm 指定旧版本 / git checkout 旧 tag(数据目录不随代码回滚,兼容) |
|
|
270
|
+
|
|
271
|
+
> 数据兼容:会话检查点/审计/经验均为 JSON/JSONL 文本格式,跨小版本向后兼容;升级前建议备份 `$FH_HOME`。
|
|
272
|
+
|
|
273
|
+
---
|
|
274
|
+
|
|
275
|
+
## 九、故障排查
|
|
276
|
+
|
|
277
|
+
| 现象 | 排查 |
|
|
278
|
+
|------|------|
|
|
279
|
+
| 服务启动后 401 | `FH_WEB_TOKEN` 未设置或与调用方不一致(Bearer 头) |
|
|
280
|
+
| 任务一直 queued | 并发满(`FH_TASK_CONCURRENCY`)或持久化目录不可写 |
|
|
281
|
+
| 模型调用失败 | `fhcode doctor` 检查网络连通与 provider 配置 |
|
|
282
|
+
| Docker 内无法执行 shell | 确认 `FH_SANDBOX_MODE` 与镜像;`FH_SANDBOX_IMAGE` 含所需工具 |
|
|
283
|
+
| 重启后任务状态异常 | running 僵尸会被标记 failed(预期行为),queued 会自动续跑 |
|
|
284
|
+
| 市场/数据集拉取失败 | 内网设镜像:`FH_SKILL_MARKET` / `FH_SWEBENCH_DATA_URL` |
|
|
285
|
+
|
|
286
|
+
---
|
|
287
|
+
|
|
288
|
+
*完整配置见《配置参考》;错误码与详细排查见《常见问题与故障排查》。*
|