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
|
@@ -0,0 +1,288 @@
|
|
|
1
|
+
# Feihong Code (fhcode) — Deployment Guide
|
|
2
|
+
|
|
3
|
+
**Version**: v0.5.0-b
|
|
4
|
+
**Date**: 2026-08-16
|
|
5
|
+
**Product**: Feihong Code (feihong-code) — a terminal AI coding agent (a Muse Code reimplementation)
|
|
6
|
+
**Attribution**: Jinjiang Feihongzhi Tech Enterprise Management Co., Ltd. · Feiyang Qiyuan R&D Center · Lead: Wu Cihong
|
|
7
|
+
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## 1. Deployment Shapes
|
|
11
|
+
|
|
12
|
+
| Shape | Scenario | Components |
|
|
13
|
+
|-------|----------|------------|
|
|
14
|
+
| Standalone CLI | Personal dev / intranet terminal | fhcode CLI (Node.js) |
|
|
15
|
+
| Web service | Team sharing / cloud execution | fhcode serve + task queue |
|
|
16
|
+
| Docker | Containerized / private deployment | Dockerfile + docker-compose |
|
|
17
|
+
| Enterprise private | Multi-tenant / audit / quota | Enterprise mode (FH_ENTERPRISE) |
|
|
18
|
+
| IDE integration | In-editor usage | VSCode extension (thin shell) |
|
|
19
|
+
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
## 2. Requirements
|
|
23
|
+
|
|
24
|
+
| Item | Requirement | Notes |
|
|
25
|
+
|------|-------------|-------|
|
|
26
|
+
| Node.js | ≥ 18 (20/22 recommended) | Runtime |
|
|
27
|
+
| npm | ≥ 9 | Package manager |
|
|
28
|
+
| git | Recommended | diff/rollback/parallel worktrees |
|
|
29
|
+
| Docker | Optional | `FH_SANDBOX_MODE=container` and Docker deployment |
|
|
30
|
+
| Network | Optional | Real model APIs / skills marketplace / HF datasets (offline mode needs no internet) |
|
|
31
|
+
|
|
32
|
+
**Offline deployment notes**: without a model configured, offline mode (Mock-driven) is used automatically with zero external dependencies; model access can point to an intranet Ollama or a private OpenAI-compatible gateway.
|
|
33
|
+
|
|
34
|
+
---
|
|
35
|
+
|
|
36
|
+
## 3. Installation & Deployment
|
|
37
|
+
|
|
38
|
+
### 3.1 npm Global Install
|
|
39
|
+
|
|
40
|
+
```bash
|
|
41
|
+
npm install -g feihong-code
|
|
42
|
+
fhcode --version
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
### 3.2 From Source
|
|
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 static asset copy
|
|
52
|
+
npm test # 164 unit tests self-check
|
|
53
|
+
node scripts/eval.mjs # local benchmark self-check (10/10)
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
### 3.3 Docker Deployment (Web service)
|
|
57
|
+
|
|
58
|
+
```bash
|
|
59
|
+
# build image
|
|
60
|
+
docker build -t feihong-code .
|
|
61
|
+
|
|
62
|
+
# run the Web console (with task queue)
|
|
63
|
+
docker run -d --name fhcode \
|
|
64
|
+
-p 8080:8080 \
|
|
65
|
+
-e FH_WEB_TOKEN=<your-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 (recommended)
|
|
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} # model config
|
|
82
|
+
FH_TASK_CONCURRENCY: "2" # task concurrency cap
|
|
83
|
+
FH_TASK_PERSIST_DIR: /data/tasks # task persistence (resume after restart)
|
|
84
|
+
FH_ENTERPRISE: "true" # enterprise mode
|
|
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
|
+
## 4. Environment Variable Reference (full)
|
|
96
|
+
|
|
97
|
+
### 4.1 App & Paths
|
|
98
|
+
|
|
99
|
+
| Variable | Default | Description |
|
|
100
|
+
|----------|---------|-------------|
|
|
101
|
+
| `FH_HOME` | `~/.feihong-code` | Home dir (sessions/audit/experience/stats/cache) |
|
|
102
|
+
| `FH_LOG_DIR` | `$FH_HOME/sessions` | Session log dir (`~` expansion supported) |
|
|
103
|
+
| `FH_CONFIG` | — | Config file path (fhcode.config.json) |
|
|
104
|
+
| `FHCODE_LANG` | system locale | UI language zh/en |
|
|
105
|
+
|
|
106
|
+
### 4.2 Model Routing
|
|
107
|
+
|
|
108
|
+
| Variable | Description |
|
|
109
|
+
|----------|-------------|
|
|
110
|
+
| `FH_PROVIDERS` | JSON array (highest priority): `{name,type,baseURL,apiKey,tags[],costPer1k}` |
|
|
111
|
+
| `FH_MODEL_NAME/TYPE/BASE_URL/API_KEY/TAGS/COST_PER_1K` | Quick single-var setup |
|
|
112
|
+
| `FH_MODEL_STRATEGY` | cost/capability/latency |
|
|
113
|
+
| `FH_BUDGET_USD` | Per-task cost cap (circuit breaker) |
|
|
114
|
+
| `FH_TENANT_BUDGET_USD` | Tenant daily cost cap (overrides policy) |
|
|
115
|
+
|
|
116
|
+
### 4.3 Security
|
|
117
|
+
|
|
118
|
+
| Variable | Description |
|
|
119
|
+
|----------|-------------|
|
|
120
|
+
| `FH_SANDBOX_MODE` | read-only / workspace-write / danger-full-access / container |
|
|
121
|
+
| `FH_SANDBOX_IMAGE` | container mode image (default node:22-alpine) |
|
|
122
|
+
| `FH_SHELL_ALLOW` | Shell allowlist (comma-separated) |
|
|
123
|
+
| `FH_REQUIRE_APPROVAL` | Approval switch (default true) |
|
|
124
|
+
| `FH_NETWORK_ALLOW/DENY` | Network domain rules (deny effective in all modes) |
|
|
125
|
+
| `FH_HOOKS` | Hooks JSON array (PreToolUse/PostToolUse/PostEdit) |
|
|
126
|
+
| `FH_POLICY` | Inline policy JSON (RBAC/blacklists, tighten-only) |
|
|
127
|
+
|
|
128
|
+
### 4.4 Enterprise Mode
|
|
129
|
+
|
|
130
|
+
| Variable | Description |
|
|
131
|
+
|----------|-------------|
|
|
132
|
+
| `FH_ENTERPRISE` | On by default (false reverts to community mode) |
|
|
133
|
+
| `FH_TENANT` | Tenant id (default: default) |
|
|
134
|
+
| `FH_USER` | User id |
|
|
135
|
+
| `FH_ROLE` | viewer/developer/operator/admin |
|
|
136
|
+
|
|
137
|
+
### 4.5 Web / Cloud Execution
|
|
138
|
+
|
|
139
|
+
| Variable | Description |
|
|
140
|
+
|----------|-------------|
|
|
141
|
+
| `FH_WEB_TOKEN` | Web console access token (auto-generated if unset) |
|
|
142
|
+
| `FH_WEB_PORT` | Port (default 8080) |
|
|
143
|
+
| `FH_TASK_CONCURRENCY` | Task concurrency cap (default 2) |
|
|
144
|
+
| `FH_TASK_PERSIST_DIR` | Task persistence dir (default `$FH_HOME/tasks`) |
|
|
145
|
+
| `FH_TASK_WEBHOOK_URL` | Task-status webhook (dynamically registrable) |
|
|
146
|
+
|
|
147
|
+
### 4.6 Message Channels
|
|
148
|
+
|
|
149
|
+
| Variable | Description |
|
|
150
|
+
|----------|-------------|
|
|
151
|
+
| `FH_CHANNEL_TELEGRAM_BOT_TOKEN/CHAT_ID` | Telegram notifications |
|
|
152
|
+
| `FH_CHANNEL_WECOM_KEY` | WeCom bot keys (comma-separated, multiple) |
|
|
153
|
+
| `FH_CHANNEL_ALLOW` | Outbound channel allowlist |
|
|
154
|
+
|
|
155
|
+
### 4.7 Marketplace / Benchmark
|
|
156
|
+
|
|
157
|
+
| Variable | Description |
|
|
158
|
+
|----------|-------------|
|
|
159
|
+
| `FH_SKILL_MARKET` | Skills marketplace source (default agentskills.io) |
|
|
160
|
+
| `FH_SWEBENCH_DATA_URL` | SWE-bench data mirror/offline JSON (intranet-friendly) |
|
|
161
|
+
|
|
162
|
+
---
|
|
163
|
+
|
|
164
|
+
## 5. Enterprise Private Deployment
|
|
165
|
+
|
|
166
|
+
### 5.1 Directory Layout (tenant isolation)
|
|
167
|
+
|
|
168
|
+
```
|
|
169
|
+
$FH_HOME/
|
|
170
|
+
├── tenants/<tenantId>/
|
|
171
|
+
│ ├── sessions/ # session checkpoints
|
|
172
|
+
│ ├── audit/ # audit hash chain (audit-YYYY-MM.jsonl)
|
|
173
|
+
│ └── goals/ # goal files
|
|
174
|
+
├── policy.json # global policy (RBAC/blacklists)
|
|
175
|
+
├── experiences/ # experience library
|
|
176
|
+
├── model-stats.jsonl # model stats
|
|
177
|
+
├── skills/ # user-level skills
|
|
178
|
+
├── plugins/ # user-level plugins
|
|
179
|
+
└── bench/ # eval/SWE-bench cache & baselines
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
### 5.2 Production Recommendations
|
|
183
|
+
|
|
184
|
+
1. **Token management**: always set `FH_WEB_TOKEN` explicitly (auto-generated is session-only); inject via a secrets manager
|
|
185
|
+
2. **Audit compliance**: run `fhcode audit verify` periodically to validate hash-chain integrity; audit files are monthly-sharded for archiving
|
|
186
|
+
3. **Quota governance**: set `FH_TENANT_BUDGET_USD` for tenant daily budgets; tasks are fail-fast rejected when exceeded
|
|
187
|
+
4. **Backups**: back up `$FH_HOME` (sessions/audit/experience) daily; keep `FH_TASK_PERSIST_DIR` on a separate volume
|
|
188
|
+
5. **Multi-instance**: the task queue persists per file; instances sharing the persist dir cross-recover (queued re-enqueues, running zombies marked failed)
|
|
189
|
+
6. **Intranet models**: point `FH_PROVIDERS` at an intranet Ollama/private gateway to run fully offline
|
|
190
|
+
|
|
191
|
+
### 5.3 Security Baseline (production must)
|
|
192
|
+
|
|
193
|
+
```bash
|
|
194
|
+
export FH_REQUIRE_APPROVAL=true
|
|
195
|
+
export FH_SANDBOX_MODE=workspace-write # or container
|
|
196
|
+
export FH_NETWORK_DENY=... # as needed
|
|
197
|
+
export FH_ENTERPRISE=true
|
|
198
|
+
export FH_CHANNEL_ALLOW=telegram,wecom # channel allowlist (optional)
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
---
|
|
202
|
+
|
|
203
|
+
## 6. Web Service Operations
|
|
204
|
+
|
|
205
|
+
### 6.1 Start & Health Check
|
|
206
|
+
|
|
207
|
+
```bash
|
|
208
|
+
fhcode serve --port 8080
|
|
209
|
+
curl http://localhost:8080/api/health # unauthenticated health check
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
### 6.2 Task Queue API (Bearer auth)
|
|
213
|
+
|
|
214
|
+
```bash
|
|
215
|
+
TOKEN=$FH_WEB_TOKEN
|
|
216
|
+
# submit / list / query / webhook register
|
|
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 Restart Recovery
|
|
224
|
+
|
|
225
|
+
- Tasks persist to `$FH_HOME/tasks/<id>.json` (atomic writes)
|
|
226
|
+
- After restart: queued tasks re-enqueue, running zombies are marked failed, terminal states remain queryable
|
|
227
|
+
- webhook/channel notifications re-fire on the queued node during recovery
|
|
228
|
+
|
|
229
|
+
---
|
|
230
|
+
|
|
231
|
+
## 7. CI/CD Integration (regression gate)
|
|
232
|
+
|
|
233
|
+
```yaml
|
|
234
|
+
# .github/workflows/ci.yml excerpt
|
|
235
|
+
- name: Build & test
|
|
236
|
+
run: |
|
|
237
|
+
npm ci
|
|
238
|
+
npm run typecheck
|
|
239
|
+
npm test
|
|
240
|
+
npm run build
|
|
241
|
+
|
|
242
|
+
- name: eval regression gate (baseline compare)
|
|
243
|
+
run: |
|
|
244
|
+
npm run build
|
|
245
|
+
node scripts/eval.mjs --baseline bench/eval-baseline.json
|
|
246
|
+
# fails when current pass is below baseline
|
|
247
|
+
|
|
248
|
+
- name: Update baseline (main branch)
|
|
249
|
+
if: github.ref == 'refs/heads/main'
|
|
250
|
+
run: node scripts/eval.mjs --save-baseline bench/eval-baseline.json
|
|
251
|
+
```
|
|
252
|
+
|
|
253
|
+
### SWE-bench harness (optional)
|
|
254
|
+
|
|
255
|
+
```bash
|
|
256
|
+
node scripts/eval-swebench.mjs --split lite --limit 20 --run --report report.md
|
|
257
|
+
# offline/intranet: point FH_SWEBENCH_DATA_URL at a mirror JSON
|
|
258
|
+
```
|
|
259
|
+
|
|
260
|
+
---
|
|
261
|
+
|
|
262
|
+
## 8. Upgrades & Rollback
|
|
263
|
+
|
|
264
|
+
| Action | Command |
|
|
265
|
+
|--------|---------|
|
|
266
|
+
| Upgrade npm package | `npm install -g feihong-code@latest` |
|
|
267
|
+
| Upgrade from source | `git pull && npm install && npm run build` |
|
|
268
|
+
| Check version | `fhcode --version` / `fhcode doctor` |
|
|
269
|
+
| Rollback | npm install a previous version / git checkout an old tag (data dir is compatible and does not roll back with code) |
|
|
270
|
+
|
|
271
|
+
> Data compatibility: session checkpoints/audit/experience are JSON/JSONL text formats, backward compatible across minor versions; back up `$FH_HOME` before upgrading.
|
|
272
|
+
|
|
273
|
+
---
|
|
274
|
+
|
|
275
|
+
## 9. Troubleshooting
|
|
276
|
+
|
|
277
|
+
| Symptom | Diagnosis |
|
|
278
|
+
|---------|-----------|
|
|
279
|
+
| 401 after service start | `FH_WEB_TOKEN` unset or mismatched with the caller (Bearer header) |
|
|
280
|
+
| Tasks stuck queued | Concurrency full (`FH_TASK_CONCURRENCY`) or persist dir not writable |
|
|
281
|
+
| Model calls fail | Run `fhcode doctor` to check network reachability and provider config |
|
|
282
|
+
| Shell fails inside Docker | Confirm `FH_SANDBOX_MODE`/image; `FH_SANDBOX_IMAGE` must include required tools |
|
|
283
|
+
| Abnormal task states after restart | Running zombies are marked failed (expected); queued tasks auto-resume |
|
|
284
|
+
| Marketplace/dataset fetch fails | Use a mirror on intranet: `FH_SKILL_MARKET` / `FH_SWEBENCH_DATA_URL` |
|
|
285
|
+
|
|
286
|
+
---
|
|
287
|
+
|
|
288
|
+
*Full configuration: see Configuration Reference; error codes and detailed troubleshooting: see FAQ & Troubleshooting.*
|
|
@@ -0,0 +1,313 @@
|
|
|
1
|
+
# 自我进化系统使用指南
|
|
2
|
+
|
|
3
|
+
> 版本: v0.5.1 | 最后更新: 2026-08-22
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## 概述
|
|
8
|
+
|
|
9
|
+
自我进化(Self-Evolve)是 feihong-code 的核心能力之一,使系统能够从失败中学习、积累经验并持续优化。该系统包含三个主要组件:
|
|
10
|
+
|
|
11
|
+
1. **失败记录** - 自动捕获执行过程中的错误
|
|
12
|
+
2. **经验学习** - 分析历史失败,生成解决方案
|
|
13
|
+
3. **每日复盘** - 总结当日工作,优化策略
|
|
14
|
+
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
## 快速开始
|
|
18
|
+
|
|
19
|
+
### 启用自我进化
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
# CLI 模式
|
|
23
|
+
fhcode "你的任务" --self-evolve
|
|
24
|
+
|
|
25
|
+
# Web 控制台
|
|
26
|
+
# 在设置中启用 "Self-Evolve" 开关
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
### 查看进化状态
|
|
30
|
+
|
|
31
|
+
```bash
|
|
32
|
+
# 查看当前进化状态
|
|
33
|
+
fhcode evolve status
|
|
34
|
+
|
|
35
|
+
# 查看失败记录
|
|
36
|
+
fhcode evolve failures
|
|
37
|
+
|
|
38
|
+
# 查看学习经验
|
|
39
|
+
fhcode evolve lessons
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
---
|
|
43
|
+
|
|
44
|
+
## 核心功能
|
|
45
|
+
|
|
46
|
+
### 1. 失败记录机制
|
|
47
|
+
|
|
48
|
+
系统自动记录以下类型的失败:
|
|
49
|
+
|
|
50
|
+
| 错误类型 | 触发条件 | 记录内容 |
|
|
51
|
+
|----------|----------|----------|
|
|
52
|
+
| `MODEL_TIMEOUT` | 模型响应超时 | 超时时长、模型名称 |
|
|
53
|
+
| `AUTH_FAILURE` | API 认证失败 | 错误代码、提供商 |
|
|
54
|
+
| `RATE_LIMIT` | 请求频率限制 | 限制值、重置时间 |
|
|
55
|
+
| `EXECUTION_ERROR` | 工具执行失败 | 工具名、错误信息 |
|
|
56
|
+
| `PERMISSION_DENIED` | 权限不足 | 操作类型、所需权限 |
|
|
57
|
+
|
|
58
|
+
**存储位置**: `~/.fhcode/evolve/failures.jsonl`
|
|
59
|
+
|
|
60
|
+
### 2. 经验学习引擎
|
|
61
|
+
|
|
62
|
+
系统会分析失败记录,生成可复用的解决方案:
|
|
63
|
+
|
|
64
|
+
```typescript
|
|
65
|
+
// 经验数据结构
|
|
66
|
+
interface LearnedLesson {
|
|
67
|
+
errorType: string; // 错误类型
|
|
68
|
+
pattern: string; // 问题模式
|
|
69
|
+
solution: string; // 解决方案
|
|
70
|
+
confidence: number; // 置信度 (0-1)
|
|
71
|
+
usageCount: number; // 应用次数
|
|
72
|
+
createdAt: Date; // 创建时间
|
|
73
|
+
}
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
**查看学习经验**:
|
|
77
|
+
```bash
|
|
78
|
+
fhcode evolve lessons --recent # 查看最近学习的经验
|
|
79
|
+
fhcode evolve lessons --type MODEL_TIMEOUT # 按类型筛选
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
### 3. 每日复盘报告
|
|
83
|
+
|
|
84
|
+
系统每天自动生成复盘报告:
|
|
85
|
+
|
|
86
|
+
```bash
|
|
87
|
+
# 手动生成复盘报告
|
|
88
|
+
fhcode evolve report --date 2026-08-22
|
|
89
|
+
|
|
90
|
+
# 查看今日报告
|
|
91
|
+
fhcode evolve report --today
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
**报告内容**:
|
|
95
|
+
- 今日失败统计
|
|
96
|
+
- 已应用的解决方案
|
|
97
|
+
- 未解决的问题
|
|
98
|
+
- 优化建议
|
|
99
|
+
|
|
100
|
+
---
|
|
101
|
+
|
|
102
|
+
## 配置选项
|
|
103
|
+
|
|
104
|
+
### 基本配置
|
|
105
|
+
|
|
106
|
+
编辑 `~/.fhcode/config.json`:
|
|
107
|
+
|
|
108
|
+
```json
|
|
109
|
+
{
|
|
110
|
+
"selfEvolve": {
|
|
111
|
+
"enabled": true,
|
|
112
|
+
"maxFailuresToRemember": 100,
|
|
113
|
+
"lessonConfidenceThreshold": 0.7,
|
|
114
|
+
"dailyReportEnabled": true,
|
|
115
|
+
"autoApplyLessons": true
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
### 配置参数说明
|
|
121
|
+
|
|
122
|
+
| 参数 | 默认值 | 说明 |
|
|
123
|
+
|------|--------|------|
|
|
124
|
+
| `enabled` | `true` | 是否启用自我进化 |
|
|
125
|
+
| `maxFailuresToRemember` | `100` | 最大保留失败记录数 |
|
|
126
|
+
| `lessonConfidenceThreshold` | `0.7` | 经验应用的最低置信度 |
|
|
127
|
+
| `dailyReportEnabled` | `true` | 是否生成每日报告 |
|
|
128
|
+
| `autoApplyLessons` | `true` | 是否自动应用学习到的经验 |
|
|
129
|
+
|
|
130
|
+
---
|
|
131
|
+
|
|
132
|
+
## 高级用法
|
|
133
|
+
|
|
134
|
+
### 强制重新学习
|
|
135
|
+
|
|
136
|
+
```bash
|
|
137
|
+
# 清除所有学习经验,重新开始
|
|
138
|
+
fhcode evolve reset --lessons
|
|
139
|
+
|
|
140
|
+
# 仅清除失败记录
|
|
141
|
+
fhcode evolve reset --failures
|
|
142
|
+
|
|
143
|
+
# 完全重置(谨慎使用)
|
|
144
|
+
fhcode evolve reset --all
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
### 导出学习数据
|
|
148
|
+
|
|
149
|
+
```bash
|
|
150
|
+
# 导出失败记录
|
|
151
|
+
fhcode evolve export --type failures --format json
|
|
152
|
+
|
|
153
|
+
# 导出学习经验
|
|
154
|
+
fhcode evolve export --type lessons --format json
|
|
155
|
+
|
|
156
|
+
# 导出复盘报告
|
|
157
|
+
fhcode evolve export --type report --format markdown
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
### 导入外部经验
|
|
161
|
+
|
|
162
|
+
```bash
|
|
163
|
+
# 从 JSON 文件导入经验
|
|
164
|
+
fhcode evolve import --file lessons.json
|
|
165
|
+
|
|
166
|
+
# 从 GitHub Gist 导入
|
|
167
|
+
fhcode evolve import --url https://gist.github.com/...
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
---
|
|
171
|
+
|
|
172
|
+
## 与企业安全集成
|
|
173
|
+
|
|
174
|
+
自我进化系统完全兼容企业安全策略:
|
|
175
|
+
|
|
176
|
+
- **审计链**: 所有失败记录和解决方案变更都会记录到审计日志
|
|
177
|
+
- **权限控制**: 可通过 RBAC 控制谁可以查看/修改学习经验
|
|
178
|
+
- **数据隔离**: 多租户场景下,各租户的学习经验相互隔离
|
|
179
|
+
|
|
180
|
+
### 安全配置示例
|
|
181
|
+
|
|
182
|
+
```json
|
|
183
|
+
{
|
|
184
|
+
"selfEvolve": {
|
|
185
|
+
"enabled": true,
|
|
186
|
+
"auditEnabled": true,
|
|
187
|
+
"dataIsolation": "tenant",
|
|
188
|
+
"maxRetentionDays": 90
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
---
|
|
194
|
+
|
|
195
|
+
## 故障排查
|
|
196
|
+
|
|
197
|
+
### 常见问题
|
|
198
|
+
|
|
199
|
+
**Q: 自我进化没有正常工作?**
|
|
200
|
+
|
|
201
|
+
检查项:
|
|
202
|
+
1. 确认 `selfEvolve.enabled` 为 `true`
|
|
203
|
+
2. 检查 `~/.fhcode/evolve/` 目录权限
|
|
204
|
+
3. 查看日志: `cat ~/.fhcode/logs/evolve.log`
|
|
205
|
+
|
|
206
|
+
**Q: 学习经验没有生效?**
|
|
207
|
+
|
|
208
|
+
检查项:
|
|
209
|
+
1. 确认 `autoApplyLessons` 为 `true`
|
|
210
|
+
2. 检查经验的 `confidence` 是否达到阈值
|
|
211
|
+
3. 查看应用日志: `fhcode evolve lessons --verbose`
|
|
212
|
+
|
|
213
|
+
**Q: 每日报告没有生成?**
|
|
214
|
+
|
|
215
|
+
检查项:
|
|
216
|
+
1. 确认 `dailyReportEnabled` 为 `true`
|
|
217
|
+
2. 报告在每天 23:59 自动生成,检查当时系统是否运行
|
|
218
|
+
3. 手动生成测试: `fhcode evolve report --today`
|
|
219
|
+
|
|
220
|
+
### 日志位置
|
|
221
|
+
|
|
222
|
+
| 日志类型 | 路径 |
|
|
223
|
+
|----------|------|
|
|
224
|
+
| 主日志 | `~/.fhcode/logs/main.log` |
|
|
225
|
+
| 进化日志 | `~/.fhcode/logs/evolve.log` |
|
|
226
|
+
| 审计日志 | `~/.fhcode/audit/audit.jsonl` |
|
|
227
|
+
|
|
228
|
+
---
|
|
229
|
+
|
|
230
|
+
## 最佳实践
|
|
231
|
+
|
|
232
|
+
### 1. 定期审查学习经验
|
|
233
|
+
|
|
234
|
+
```bash
|
|
235
|
+
# 每周审查一次
|
|
236
|
+
fhcode evolve lessons --review
|
|
237
|
+
|
|
238
|
+
# 清理低置信度经验
|
|
239
|
+
fhcode evolve clean --confidence < 0.5
|
|
240
|
+
```
|
|
241
|
+
|
|
242
|
+
### 2. 分享成功经验
|
|
243
|
+
|
|
244
|
+
将学习到的经验分享给团队:
|
|
245
|
+
|
|
246
|
+
```bash
|
|
247
|
+
# 导出团队可用的经验
|
|
248
|
+
fhcode evolve export --scope team --format json
|
|
249
|
+
```
|
|
250
|
+
|
|
251
|
+
### 3. 监控进化指标
|
|
252
|
+
|
|
253
|
+
关注以下指标评估自我进化效果:
|
|
254
|
+
|
|
255
|
+
- **失败率下降趋势**: 同类错误重复发生次数应逐渐减少
|
|
256
|
+
- **经验应用成功率**: 自动应用的解决方案成功率应 > 80%
|
|
257
|
+
- **问题解决时长**: 从首次失败到解决方案生成的时间
|
|
258
|
+
|
|
259
|
+
---
|
|
260
|
+
|
|
261
|
+
## 技术架构
|
|
262
|
+
|
|
263
|
+
### 数据流
|
|
264
|
+
|
|
265
|
+
```
|
|
266
|
+
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
|
|
267
|
+
│ 任务执行 │ ──→ │ 失败捕获 │ ──→ │ 经验学习 │
|
|
268
|
+
└─────────────┘ └─────────────┘ └─────────────┘
|
|
269
|
+
┌─────────────┐
|
|
270
|
+
│ 每日复盘 │
|
|
271
|
+
└─────────────┘
|
|
272
|
+
│
|
|
273
|
+
↓
|
|
274
|
+
┌─────────────┐
|
|
275
|
+
│ 策略优化 │
|
|
276
|
+
└─────────────┘
|
|
277
|
+
```
|
|
278
|
+
|
|
279
|
+
### 核心类
|
|
280
|
+
|
|
281
|
+
```typescript
|
|
282
|
+
// 自我进化管理器
|
|
283
|
+
class SelfEvolveManager {
|
|
284
|
+
init(): void;
|
|
285
|
+
recordFailure(errorType: string, error: any, attemptedSolutions?: string[]): void;
|
|
286
|
+
searchSolution(errorType: string, errorMessage: string): Lesson[];
|
|
287
|
+
generateDailyReport(): Report;
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
// 经验数据模型
|
|
291
|
+
interface LearnedLesson {
|
|
292
|
+
id: string;
|
|
293
|
+
errorType: string;
|
|
294
|
+
pattern: string;
|
|
295
|
+
solution: string;
|
|
296
|
+
confidence: number;
|
|
297
|
+
usageCount: number;
|
|
298
|
+
createdAt: Date;
|
|
299
|
+
updatedAt: Date;
|
|
300
|
+
}
|
|
301
|
+
```
|
|
302
|
+
|
|
303
|
+
---
|
|
304
|
+
|
|
305
|
+
## 相关链接
|
|
306
|
+
|
|
307
|
+
- [错误码参考](./error-codes.md)
|
|
308
|
+
- [企业部署指南](../DEPLOYMENT-GUIDE.md)
|
|
309
|
+
- [自我进化实现细节](./self-evolve-implementation.md)
|
|
310
|
+
|
|
311
|
+
---
|
|
312
|
+
|
|
313
|
+
*本系统由飞扬企源研发中心 (FyqyRDC) 开发*
|