feihong-code 7.6.0 → 8.0.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/ISSUE_TEMPLATE/bug_report.md +36 -22
- package/.github/ISSUE_TEMPLATE/config.yml +10 -13
- package/.github/ISSUE_TEMPLATE/feature_request.md +38 -13
- package/.github/PULL_REQUEST_TEMPLATE.md +65 -30
- package/.github/workflows/ci.yml +2 -2
- package/.github/workflows/release.yml +5 -5
- package/.github/workflows/swebench-real.yml +2 -2
- package/CONTRIBUTING.md +52 -3
- package/dist/cli/version.js +1 -1
- package/dist/memory/honcho-store.js +231 -0
- package/dist/memory/honcho-store.js.map +1 -0
- package/dist/shared/log-rotator.js +238 -0
- package/dist/shared/log-rotator.js.map +1 -0
- package/dist/shared/sqlite-store.js +512 -0
- package/dist/shared/sqlite-store.js.map +1 -0
- package/dist/tools/docker-sandbox.js +212 -0
- package/dist/tools/docker-sandbox.js.map +1 -0
- package/dist/web/public/favicon.svg +11 -0
- package/dist/web/public/index.html +4 -1
- package/dist/web/public/robots.txt +14 -0
- package/dist/web/server.js +70 -0
- package/dist/web/server.js.map +1 -1
- package/docs/API.md +827 -0
- package/docs/PROJECT-ANALYSIS-AND-TEST.md +721 -0
- package/docs/TECHNICAL-SPECIFICATION.md +746 -0
- package/docs/UPGRADE-v7.9.0.md +291 -0
- package/docs/UPGRADE-v8.0.0.md +237 -0
- package/docs//344/275/277/347/224/250/350/257/264/346/230/216/344/271/246-v8.0.0.md +922 -0
- package/package.json +6 -6
|
@@ -0,0 +1,746 @@
|
|
|
1
|
+
# 飞虹 Code 技术说明书
|
|
2
|
+
|
|
3
|
+
**文档版本**:v2.0
|
|
4
|
+
**发布日期**:2026-09-03
|
|
5
|
+
**适用版本**:v8.0.0
|
|
6
|
+
**技术栈**:TypeScript + Node.js + Express + Electron + Capacitor + SQLite
|
|
7
|
+
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## 一、项目概述
|
|
11
|
+
|
|
12
|
+
### 1.1 产品定位
|
|
13
|
+
飞虹 Code(feihong-code)是一款终端 AI 编程智能体,对标 Muse Code / Cursor CLI / Claude Code,具备多模型路由、企业级 RBAC 审计、全自动 SWE Agent、离线私有化部署等能力。v7.9.0 引入 Hermes Agent 自我进化框架,实现持久记忆、自演化技能、自动化调度三大核心能力。
|
|
14
|
+
|
|
15
|
+
### 1.2 核心特性
|
|
16
|
+
| 特性 | 说明 |
|
|
17
|
+
|------|------|
|
|
18
|
+
| 多模型路由 | DeepSeek / 通义 / Ollama / OpenAI / Agnes / 自定义 OpenAI 兼容 |
|
|
19
|
+
| 企业级审计 | RBAC 权限控制、操作审计日志 |
|
|
20
|
+
| 全自动 SWE Agent | 自动创建技能、改进技能、持久记忆、FTS5 跨会话搜索 |
|
|
21
|
+
| 离线私有化 | 支持本地 Ollama、内网部署、无云依赖 |
|
|
22
|
+
| Hermes 自我进化 | 持久记忆 + 自演化技能 + 自动化调度 + 工具集 |
|
|
23
|
+
| 免密网络层 | 5节点环形轮转 + Ring Failover,开箱即用 |
|
|
24
|
+
| SQLite 统一存储(v8.0) | 10 张表,模型 Key 加密落盘,零外部依赖 |
|
|
25
|
+
| Docker 沙盒(v8.0) | 容器隔离执行,网络/资源/命令三重限制 |
|
|
26
|
+
| Honcho 语义记忆(v8.0) | 用户建模 + 事实记忆 + 跨会话检索 + 记忆注入 |
|
|
27
|
+
| 多端覆盖 | Web 控制台 + Electron 桌面端 + Android APP |
|
|
28
|
+
| 多平台桥接 | 微信 / 飞书 / 元宝(配置后启用) |
|
|
29
|
+
|
|
30
|
+
### 1.3 技术指标
|
|
31
|
+
| 指标 | 值 |
|
|
32
|
+
|------|-----|
|
|
33
|
+
| 源代码文件数 | 160+ |
|
|
34
|
+
| 子系统数量 | 21 个 |
|
|
35
|
+
| 核心依赖 | 5 个(express / monaco-editor / playwright-core / zod / @capacitor/core) |
|
|
36
|
+
| 后端编译产物 | dist/ 目录,server.js 130KB |
|
|
37
|
+
| 移动端 APK | 3.2MB(v7.9.0) |
|
|
38
|
+
| 健康检查响应 | 平均 14.6ms |
|
|
39
|
+
| 首页加载 | 59ms(74KB HTML) |
|
|
40
|
+
| SQLite 存储 | feihong.db,SCHEMA_VERSION=1,10 张表 |
|
|
41
|
+
| 集成测试 | 34 用例 100% |
|
|
42
|
+
|
|
43
|
+
---
|
|
44
|
+
|
|
45
|
+
## 二、系统架构
|
|
46
|
+
|
|
47
|
+
### 2.1 整体架构图
|
|
48
|
+
|
|
49
|
+
```
|
|
50
|
+
┌─────────────────────────────────────────────────────────────┐
|
|
51
|
+
│ 客户端层 │
|
|
52
|
+
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
|
|
53
|
+
│ │ Web 控制台│ │Electron │ │Android │ │ CLI 终端 │ │
|
|
54
|
+
│ │ (浏览器) │ │ 桌面端 │ │ APP │ │ (终端) │ │
|
|
55
|
+
│ └────┬─────┘ └────┬─────┘ └────┬─────┘ └────┬─────┘ │
|
|
56
|
+
└───────┼──────────────┼──────────────┼──────────────┼────────┘
|
|
57
|
+
│ │ │ │
|
|
58
|
+
▼ ▼ ▼ ▼
|
|
59
|
+
┌─────────────────────────────────────────────────────────────┐
|
|
60
|
+
│ API 网关层 (Express) │
|
|
61
|
+
│ ┌─────────────────────────────────────────────────────────┐ │
|
|
62
|
+
│ │ 认证中间件 │ 路由分发 │ 限流 │ 日志 │ CORS │ │
|
|
63
|
+
│ └─────────────────────────────────────────────────────────┘ │
|
|
64
|
+
└──────────────────────────────┬──────────────────────────────┘
|
|
65
|
+
│
|
|
66
|
+
┌──────────────────────┼──────────────────────┐
|
|
67
|
+
▼ ▼ ▼
|
|
68
|
+
┌───────────────┐ ┌───────────────┐ ┌───────────────┐
|
|
69
|
+
│ Agent 核心层 │ │ Hermes 进化层 │ │ 工具服务层 │
|
|
70
|
+
│ │ │ │ │ │
|
|
71
|
+
│ Orchestrator │ │ MemoryManager │ │ Web 搜索 │
|
|
72
|
+
│ Multi-Agent │ │ SkillManager │ │ 浏览器自动化 │
|
|
73
|
+
│ Solo-Agent │ │ Scheduler │ │ 文件读写 │
|
|
74
|
+
│ Self-Heal │ │ ToolRegistry │ │ Shell 执行 │
|
|
75
|
+
│ Self-Correct │ │ AgentCore │ │ MCP 外部工具 │
|
|
76
|
+
└───────┬───────┘ └───────┬───────┘ └───────┬───────┘
|
|
77
|
+
│ │ │
|
|
78
|
+
▼ ▼ ▼
|
|
79
|
+
┌─────────────────────────────────────────────────────────────┐
|
|
80
|
+
│ 模型与数据层 │
|
|
81
|
+
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
|
|
82
|
+
│ │ 模型路由层 │ │ 持久存储层 │ │ 任务队列 │ │
|
|
83
|
+
│ │ (多模型) │ │ (文件/JSON) │ │ (持久化) │ │
|
|
84
|
+
│ └─────────────┘ └─────────────┘ └─────────────┘ │
|
|
85
|
+
└─────────────────────────────────────────────────────────────┘
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
### 2.2 分层架构说明
|
|
89
|
+
|
|
90
|
+
| 层级 | 职责 | 核心模块 |
|
|
91
|
+
|------|------|----------|
|
|
92
|
+
| 客户端层 | 用户交互界面 | Web 控制台 / Electron / Android APP / CLI |
|
|
93
|
+
| API 网关层 | 请求路由、认证、限流、日志 | Express server.ts(122KB)、auth.ts |
|
|
94
|
+
| Agent 核心层 | 任务编排、多 Agent 协作、自我修复 | orchestrator、multi-agent、self-heal |
|
|
95
|
+
| Hermes 进化层 | 持久记忆、自演化技能、自动化调度 | hermes-agent.js(移动端)、self-evolve(后端) |
|
|
96
|
+
| 工具服务层 | 外部工具调用、沙盒执行 | tools/(22个文件)、sandbox、mcp |
|
|
97
|
+
| 模型与数据层 | 模型路由、持久化存储、任务队列 | models/、memory/、task-queue |
|
|
98
|
+
|
|
99
|
+
---
|
|
100
|
+
|
|
101
|
+
## 三、目录结构
|
|
102
|
+
|
|
103
|
+
### 3.1 后端源码结构(src/)
|
|
104
|
+
|
|
105
|
+
```
|
|
106
|
+
src/
|
|
107
|
+
├── agent/ # Agent 核心(38个文件)
|
|
108
|
+
│ ├── orchestrator.ts # 统一编排器(36KB)
|
|
109
|
+
│ ├── multi-agent.ts # 多 Agent 协作
|
|
110
|
+
│ ├── solo-agent.ts # 单 Agent
|
|
111
|
+
│ ├── custom-agent.ts # 自定义 Agent
|
|
112
|
+
│ ├── team.ts # 团队协作
|
|
113
|
+
│ ├── team-collaboration.ts # 团队协作扩展
|
|
114
|
+
│ ├── self-heal.ts # 自我修复
|
|
115
|
+
│ ├── self-correction.ts # 自我纠错
|
|
116
|
+
│ ├── self-improver.ts # 自我改进
|
|
117
|
+
│ ├── event-driven-agent.ts # 事件驱动 Agent
|
|
118
|
+
│ ├── layered-memory.ts # 分层记忆
|
|
119
|
+
│ ├── context-compactor.ts # 上下文压缩
|
|
120
|
+
│ ├── experience.ts # 经验沉淀
|
|
121
|
+
│ ├── completion-engine.ts # 补全引擎(27KB)
|
|
122
|
+
│ ├── code-writer.ts # 代码生成
|
|
123
|
+
│ ├── code-review.ts # 代码审查
|
|
124
|
+
│ ├── code-rag.ts # 代码 RAG
|
|
125
|
+
│ ├── git-integration.ts # Git 集成
|
|
126
|
+
│ ├── repo-reader.ts # 仓库读取
|
|
127
|
+
│ ├── repo-context.ts # 仓库上下文
|
|
128
|
+
│ ├── symbol-index.ts # 符号索引
|
|
129
|
+
│ ├── quality-gate.ts # 质量门控
|
|
130
|
+
│ ├── planner.ts # 规划器
|
|
131
|
+
│ ├── prompts.ts # 提示词管理
|
|
132
|
+
│ ├── swe-agent.ts # SWE Agent
|
|
133
|
+
│ ├── swe-planner.ts # SWE 规划
|
|
134
|
+
│ ├── swe-verifier.ts # SWE 验证
|
|
135
|
+
│ ├── subagent.ts # 子 Agent
|
|
136
|
+
│ ├── subagent-summary.ts # 子 Agent 摘要
|
|
137
|
+
│ ├── parallel-orchestrator.ts # 并行编排
|
|
138
|
+
│ ├── change-manager.ts # 变更管理
|
|
139
|
+
│ ├── browser-agent.ts # 浏览器 Agent
|
|
140
|
+
│ ├── design-to-code.ts # 设计转代码
|
|
141
|
+
│ ├── lint.ts # Lint 检查
|
|
142
|
+
│ ├── type-checker.ts # 类型检查
|
|
143
|
+
│ └── context-budget.ts # 上下文预算
|
|
144
|
+
├── cli/ # CLI 入口(9个文件)
|
|
145
|
+
│ ├── index.ts # 主入口
|
|
146
|
+
│ ├── run.ts # 运行逻辑(63KB)
|
|
147
|
+
│ ├── commands.ts # 命令定义
|
|
148
|
+
│ ├── version.ts # 版本号集中定义
|
|
149
|
+
│ ├── tui.ts # 终端 UI
|
|
150
|
+
│ ├── tui-run.ts # TUI 运行
|
|
151
|
+
│ ├── repl.ts # REPL 交互
|
|
152
|
+
│ └── multi-pane-tui.ts # 多面板 TUI
|
|
153
|
+
├── web/ # Web 服务器(16个文件)
|
|
154
|
+
│ ├── server.ts # Express 服务器(122KB)
|
|
155
|
+
│ ├── auth.ts # 认证
|
|
156
|
+
│ ├── channels.ts # 多通道
|
|
157
|
+
│ ├── task-queue.ts # 任务队列(23KB)
|
|
158
|
+
│ ├── extra-apis.ts # 扩展 API
|
|
159
|
+
│ ├── web-config.ts # Web 配置
|
|
160
|
+
│ ├── express.d.ts # Express 类型扩展
|
|
161
|
+
│ └── public/ # Web 前端静态资源
|
|
162
|
+
├── tools/ # 工具集(22个文件)
|
|
163
|
+
│ ├── index.ts # 工具注册中心
|
|
164
|
+
│ ├── tool.interface.ts # 工具接口
|
|
165
|
+
│ ├── tool.registry.ts # 工具注册表
|
|
166
|
+
│ ├── sandbox.ts # 沙盒执行
|
|
167
|
+
│ ├── safe-path.ts # 安全路径
|
|
168
|
+
│ ├── search/ # 网页搜索
|
|
169
|
+
│ ├── shell/ # Shell 执行
|
|
170
|
+
│ ├── file/ # 文件读写
|
|
171
|
+
│ ├── browser/ # 浏览器自动化(8个工具)
|
|
172
|
+
│ ├── mcp/ # MCP 外部工具
|
|
173
|
+
│ ├── analysis/ # 分析工具
|
|
174
|
+
│ ├── generator/ # 生成工具
|
|
175
|
+
│ ├── skills/ # 技能工具
|
|
176
|
+
│ ├── verify/ # 验证工具
|
|
177
|
+
│ └── web/ # Web 工具
|
|
178
|
+
├── memory/ # 记忆系统(2个文件)
|
|
179
|
+
│ ├── index.ts # 记忆管理
|
|
180
|
+
│ └── auto-summarize.ts # 自动摘要
|
|
181
|
+
├── skills/ # 技能系统(7个文件)
|
|
182
|
+
│ ├── skill-loader.ts # 技能加载器
|
|
183
|
+
│ ├── skill-market.ts # 技能市场(10KB)
|
|
184
|
+
│ ├── pua-hooks.ts # PUA 扩展 hooks
|
|
185
|
+
│ ├── self-heal.ts # 技能自愈
|
|
186
|
+
│ ├── goal.ts # 目标技能
|
|
187
|
+
│ ├── grill.ts # 追问技能
|
|
188
|
+
│ └── plan.ts # 规划技能
|
|
189
|
+
├── self-evolve/ # 自我进化(4个文件)
|
|
190
|
+
│ ├── manager.js # 进化管理器(17KB)
|
|
191
|
+
│ ├── manager.d.ts # 类型定义
|
|
192
|
+
│ ├── hook.ts # 进化钩子
|
|
193
|
+
│ └── self-heal-scheduler.ts # 自愈调度器
|
|
194
|
+
├── models/ # 模型管理(7个文件)
|
|
195
|
+
├── enterprise/ # 企业版(6个文件)
|
|
196
|
+
├── harness/ # 测试框架(7个文件)
|
|
197
|
+
├── integrations/ # 第三方集成(7个文件)
|
|
198
|
+
├── knowledge/ # 知识库(1个文件)
|
|
199
|
+
├── lsp/ # 语言服务器(2个文件)
|
|
200
|
+
├── plugins/ # 插件系统(2个文件)
|
|
201
|
+
├── runtime/ # 运行时(6个文件)
|
|
202
|
+
├── shared/ # 共享模块(7个文件)
|
|
203
|
+
├── training/ # 训练(2个文件)
|
|
204
|
+
├── voice/ # 语音(1个文件)
|
|
205
|
+
└── workers/ # Worker(1个文件)
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
### 3.2 移动端源码结构(app-mobile/)
|
|
209
|
+
|
|
210
|
+
```
|
|
211
|
+
app-mobile/
|
|
212
|
+
├── index.html # 主页面(23KB)
|
|
213
|
+
├── css/
|
|
214
|
+
│ └── style.css # 样式(21KB)
|
|
215
|
+
└── js/
|
|
216
|
+
├── app.js # 主应用逻辑(83KB)
|
|
217
|
+
├── game-templates.js # 12款游戏模板(68KB)
|
|
218
|
+
├── keyless.js # 免密网络层(16KB)
|
|
219
|
+
└── hermes-agent.js # Hermes Agent 核心(24KB)
|
|
220
|
+
```
|
|
221
|
+
|
|
222
|
+
### 3.3 安卓工程结构(android/)
|
|
223
|
+
|
|
224
|
+
```
|
|
225
|
+
android/
|
|
226
|
+
├── app/
|
|
227
|
+
│ ├── build.gradle # 构建配置(versionCode=26, versionName=7.9.0)
|
|
228
|
+
│ ├── fhcode-release.jks # 签名密钥
|
|
229
|
+
│ └── src/main/
|
|
230
|
+
│ ├── AndroidManifest.xml
|
|
231
|
+
│ ├── java/ # Java 源码
|
|
232
|
+
│ └── assets/public/ # Web 资源(与 app-mobile 同步)
|
|
233
|
+
├── build.gradle
|
|
234
|
+
├── gradle.properties
|
|
235
|
+
├── settings.gradle
|
|
236
|
+
└── gradlew.bat # Gradle Wrapper
|
|
237
|
+
```
|
|
238
|
+
|
|
239
|
+
---
|
|
240
|
+
|
|
241
|
+
## 四、核心模块技术设计
|
|
242
|
+
|
|
243
|
+
### 4.1 Hermes Agent 核心(移动端 hermes-agent.js)
|
|
244
|
+
|
|
245
|
+
#### 4.1.1 MemoryManager — 持久记忆系统
|
|
246
|
+
|
|
247
|
+
**设计目标**:实现跨会话长期记忆,维护 MEMORY.md 和 USER.md,自动摘要历史任务。
|
|
248
|
+
|
|
249
|
+
**数据结构**:
|
|
250
|
+
```javascript
|
|
251
|
+
memory = {
|
|
252
|
+
content: string, // MEMORY.md 完整内容
|
|
253
|
+
updatedAt: number // 最后更新时间戳
|
|
254
|
+
}
|
|
255
|
+
user = {
|
|
256
|
+
content: string, // USER.md 完整内容
|
|
257
|
+
updatedAt: number
|
|
258
|
+
}
|
|
259
|
+
history = [ // 历史任务摘要(最多100条)
|
|
260
|
+
{ time, type, summary, msgCount }
|
|
261
|
+
]
|
|
262
|
+
contexts = { // 项目上下文键值存储
|
|
263
|
+
[key]: { value, time }
|
|
264
|
+
}
|
|
265
|
+
```
|
|
266
|
+
|
|
267
|
+
**核心方法**:
|
|
268
|
+
| 方法 | 功能 |
|
|
269
|
+
|------|------|
|
|
270
|
+
| `load()` | 从 localStorage 加载所有记忆数据 |
|
|
271
|
+
| `save()` | 持久化到 localStorage |
|
|
272
|
+
| `getContextPrompt()` | 生成记忆注入提示词(拼接到系统提示) |
|
|
273
|
+
| `digestConversation(messages, taskType)` | 对话结束后自动沉淀记忆 |
|
|
274
|
+
| `recall(query, limit)` | 关键词检索历史记忆 |
|
|
275
|
+
| `extractKeyFacts(messages)` | 从对话中提取关键事实(项目名、版本、技术栈) |
|
|
276
|
+
| `extractUserPreferences(messages)` | 从对话中提取用户偏好 |
|
|
277
|
+
| `appendToSection(section, items, isUser)` | 向 MEMORY.md/USER.md 指定章节追加内容 |
|
|
278
|
+
|
|
279
|
+
**记忆注入流程**:
|
|
280
|
+
```
|
|
281
|
+
用户输入 → AgentCore.processInput()
|
|
282
|
+
→ MemoryManager.getContextPrompt()
|
|
283
|
+
→ 提取 MEMORY.md 项目上下文
|
|
284
|
+
→ 提取 USER.md 用户偏好
|
|
285
|
+
→ 列出最近5条历史任务
|
|
286
|
+
→ 拼接到系统提示词
|
|
287
|
+
→ 发送给大模型
|
|
288
|
+
```
|
|
289
|
+
|
|
290
|
+
**自动沉淀触发点**:每轮对话结束(callModelStream 的 onDone 回调),调用 `digestConversation()`。
|
|
291
|
+
|
|
292
|
+
#### 4.1.2 SkillManager — 自演化技能系统
|
|
293
|
+
|
|
294
|
+
**设计目标**:从执行过的任务自动提炼可复用技能,兼容 agentskills.io 开放标准。
|
|
295
|
+
|
|
296
|
+
**技能数据结构**(兼容 agentskills.io):
|
|
297
|
+
```javascript
|
|
298
|
+
skill = {
|
|
299
|
+
id: string, // 唯一标识
|
|
300
|
+
name: string, // 技能名称
|
|
301
|
+
description: string, // 技能描述
|
|
302
|
+
trigger: string, // 触发词(| 分隔多个)
|
|
303
|
+
prompt: string, // 提示词模板(支持 {{content}} {{变量}})
|
|
304
|
+
tools: string[], // 依赖工具列表
|
|
305
|
+
tags: string[], // 标签
|
|
306
|
+
version: string, // 版本号
|
|
307
|
+
createdAt: number, // 创建时间
|
|
308
|
+
useCount: number, // 使用次数
|
|
309
|
+
builtin?: boolean, // 是否内置
|
|
310
|
+
autoExtracted?: boolean // 是否自动提炼
|
|
311
|
+
}
|
|
312
|
+
```
|
|
313
|
+
|
|
314
|
+
**内置技能**(4个):
|
|
315
|
+
| 技能 | 触发词 | 用途 |
|
|
316
|
+
|------|--------|------|
|
|
317
|
+
| 内容摘要 | 摘要\|总结\|概括\|提炼 | 结构化摘要长文本 |
|
|
318
|
+
| 中英互译 | 翻译\|translate\|英文\|中文 | 中英文双向翻译 |
|
|
319
|
+
| 代码审查 | 代码审查\|code review | 安全性/性能/规范审查 |
|
|
320
|
+
| 小红书文案 | 小红书\|种草文案 | 小红书风格种草文案 |
|
|
321
|
+
|
|
322
|
+
**技能匹配算法**:
|
|
323
|
+
```
|
|
324
|
+
输入文本 → 小写化
|
|
325
|
+
→ 遍历所有技能
|
|
326
|
+
→ 触发词匹配(+20分/词)
|
|
327
|
+
→ 技能名匹配(+15分)
|
|
328
|
+
→ 描述匹配(+5分)
|
|
329
|
+
→ 标签匹配(+8分/标签)
|
|
330
|
+
→ 取最高分技能
|
|
331
|
+
→ 分数 >= 15 则匹配成功
|
|
332
|
+
```
|
|
333
|
+
|
|
334
|
+
**技能执行**:`execute(skill, content, vars)` 将 `{{content}}` 替换为用户输入,`{{变量}}` 替换为传入变量。
|
|
335
|
+
|
|
336
|
+
**自动提炼**:`extractFromTask(messages, taskName)` 从对话中提取用户需求和助手回复,生成新技能。
|
|
337
|
+
|
|
338
|
+
#### 4.1.3 Scheduler — 自动化调度
|
|
339
|
+
|
|
340
|
+
**设计目标**:自然语言设定定时任务,替代手写 cron。
|
|
341
|
+
|
|
342
|
+
**时间解析支持**:
|
|
343
|
+
| 表达 | 解析结果 | 重复模式 |
|
|
344
|
+
|------|----------|----------|
|
|
345
|
+
| `每天 9:00` | 明天9:00 | daily |
|
|
346
|
+
| `每周一 10:30` | 下周一10:30 | weekly |
|
|
347
|
+
| `每隔 30 分钟` | 30分钟后 | interval |
|
|
348
|
+
| `14:00` | 今天/明天14:00 | once |
|
|
349
|
+
|
|
350
|
+
**任务数据结构**:
|
|
351
|
+
```javascript
|
|
352
|
+
task = {
|
|
353
|
+
id: string,
|
|
354
|
+
name: string,
|
|
355
|
+
expression: string, // 原始自然语言表达
|
|
356
|
+
prompt: string, // 任务内容
|
|
357
|
+
schedule: {
|
|
358
|
+
timestamp: number,
|
|
359
|
+
repeat: 'once'|'daily'|'weekly'|'interval',
|
|
360
|
+
nextRun: number, // 下次运行时间戳
|
|
361
|
+
intervalMs?: number, // 间隔模式的毫秒数
|
|
362
|
+
weekday?: number // 周模式的星期几
|
|
363
|
+
},
|
|
364
|
+
enabled: boolean,
|
|
365
|
+
createdAt: number,
|
|
366
|
+
lastRun: number|null,
|
|
367
|
+
runCount: number
|
|
368
|
+
}
|
|
369
|
+
```
|
|
370
|
+
|
|
371
|
+
**调度机制**:
|
|
372
|
+
- 每 30 秒检查一次到期任务(`setInterval`)
|
|
373
|
+
- 到期任务触发 `hermes-scheduled-task` 自定义事件
|
|
374
|
+
- 重复任务自动计算下次运行时间
|
|
375
|
+
- 一次性任务执行后自动禁用
|
|
376
|
+
|
|
377
|
+
#### 4.1.4 ToolRegistry — 工具集
|
|
378
|
+
|
|
379
|
+
**设计目标**:统一工具注册和调用机制。
|
|
380
|
+
|
|
381
|
+
**已注册工具**:
|
|
382
|
+
| 工具 | 功能 | 实现 |
|
|
383
|
+
|------|------|------|
|
|
384
|
+
| `tts` | 文字转语音 | 浏览器 SpeechSynthesis API |
|
|
385
|
+
| `tts_stop` | 停止语音 | speechSynthesis.cancel() |
|
|
386
|
+
| `web_search` | 免密网页搜索 | 复用 keyless.js 双源搜索 |
|
|
387
|
+
| `read_file` | 文件读取 | 占位实现 |
|
|
388
|
+
| `recall_memory` | 记忆查询 | MemoryManager.recall() |
|
|
389
|
+
|
|
390
|
+
**工具调用接口**:
|
|
391
|
+
```javascript
|
|
392
|
+
ToolRegistry.register(name, handler, description) // 注册工具
|
|
393
|
+
ToolRegistry.execute(name, args) // 调用工具
|
|
394
|
+
ToolRegistry.list() // 列出所有工具
|
|
395
|
+
```
|
|
396
|
+
|
|
397
|
+
#### 4.1.5 AgentCore — 统一执行循环
|
|
398
|
+
|
|
399
|
+
**处理流程**:
|
|
400
|
+
```
|
|
401
|
+
用户输入
|
|
402
|
+
↓
|
|
403
|
+
AgentCore.processInput(input)
|
|
404
|
+
├─ 1. 技能匹配 → SkillManager.match(input)
|
|
405
|
+
│ └─ 匹配成功 → SkillManager.execute() 生成增强 prompt
|
|
406
|
+
├─ 2. 记忆注入 → MemoryManager.getContextPrompt()
|
|
407
|
+
├─ 3. 工具检测 → 关键词触发(朗读/搜索等)
|
|
408
|
+
└─ 返回 { enhancedPrompt, matchedSkill, memoryContext, toolsToCall }
|
|
409
|
+
↓
|
|
410
|
+
发送给大模型(callModelStream)
|
|
411
|
+
↓
|
|
412
|
+
收到回复
|
|
413
|
+
↓
|
|
414
|
+
AgentCore.onConversationEnd(messages, taskType)
|
|
415
|
+
└─ MemoryManager.digestConversation() 沉淀记忆
|
|
416
|
+
```
|
|
417
|
+
|
|
418
|
+
### 4.2 免密网络层(keyless.js)
|
|
419
|
+
|
|
420
|
+
**设计目标**:内置 5 家厂商免费模型接口,环形轮转池,开箱即用。
|
|
421
|
+
|
|
422
|
+
**5节点环形池**:
|
|
423
|
+
| 节点 | 模型 | 权重 | 来源 |
|
|
424
|
+
|------|------|------|------|
|
|
425
|
+
| ddg-gpt4o | gpt-4o-mini | 30 | DuckDuckGo AI |
|
|
426
|
+
| ddg-claude | claude-3-haiku | 25 | DuckDuckGo AI |
|
|
427
|
+
| ddg-llama | Llama 3.1 70B | 25 | DuckDuckGo AI |
|
|
428
|
+
| ddg-mixtral | Mixtral 8x7B | 15 | DuckDuckGo AI |
|
|
429
|
+
| wiki-knowledge | Wikipedia 知识引擎 | 5 | Wikipedia API |
|
|
430
|
+
|
|
431
|
+
**Ring Failover 机制**:
|
|
432
|
+
- 失败自动轮转下一家
|
|
433
|
+
- 连续失败 3 次冷却 30 秒
|
|
434
|
+
- 成功后固定在该节点
|
|
435
|
+
- 全部失败则友好提示配置自定义模型
|
|
436
|
+
|
|
437
|
+
**DuckDuckGo AI 调用流程**:
|
|
438
|
+
```
|
|
439
|
+
1. GET https://duckduckgo.com/duckchat/v1/status
|
|
440
|
+
→ 获取 x-vqd-4 token
|
|
441
|
+
2. POST https://duckduckgo.com/duckchat/v1/chat
|
|
442
|
+
Header: x-vqd-4: <token>
|
|
443
|
+
Body: { model, messages }
|
|
444
|
+
3. 流式解析响应
|
|
445
|
+
```
|
|
446
|
+
|
|
447
|
+
**免密搜索**:DuckDuckGo HTML 搜索 + Wikipedia API 双源并行。
|
|
448
|
+
|
|
449
|
+
### 4.3 后端 Web 服务器(server.ts)
|
|
450
|
+
|
|
451
|
+
**设计目标**:Express 全功能 Web 服务器,支持 API、静态资源、WebSocket、认证。
|
|
452
|
+
|
|
453
|
+
**核心中间件链**:
|
|
454
|
+
```
|
|
455
|
+
请求 → CORS → 日志 → 认证(可选) → 限流 → 路由分发 → 响应
|
|
456
|
+
```
|
|
457
|
+
|
|
458
|
+
**主要路由**:
|
|
459
|
+
| 路由 | 方法 | 认证 | 功能 |
|
|
460
|
+
|------|------|------|------|
|
|
461
|
+
| `/api/health` | GET | 否 | 健康检查 |
|
|
462
|
+
| `/api/version` | GET | 是 | 版本信息 |
|
|
463
|
+
| `/api/status` | GET | 是 | 系统状态 |
|
|
464
|
+
| `/api/config` | GET/POST | 是 | 配置管理 |
|
|
465
|
+
| `/api/models` | GET | 是 | 模型列表 |
|
|
466
|
+
| `/api/agents` | GET/POST | 是 | Agent 管理 |
|
|
467
|
+
| `/api/skills` | GET/POST | 是 | 技能管理 |
|
|
468
|
+
| `/api/tools` | GET | 是 | 工具列表 |
|
|
469
|
+
| `/api/tasks` | GET/POST | 是 | 任务队列 |
|
|
470
|
+
| `/api/knowledge` | GET/POST | 是 | 知识库 |
|
|
471
|
+
| `/api/plugins` | GET/POST | 是 | 插件管理 |
|
|
472
|
+
| `/` | GET | 否 | Web 控制台首页 |
|
|
473
|
+
| `/*` | GET | 否 | 静态资源 |
|
|
474
|
+
|
|
475
|
+
**认证机制**:
|
|
476
|
+
- FH_WEB_TOKEN 环境变量生成访问令牌
|
|
477
|
+
- 未认证请求返回 401
|
|
478
|
+
- 令牌在启动日志中输出
|
|
479
|
+
|
|
480
|
+
**任务队列**:
|
|
481
|
+
- 持久化到 `~/.feihong-code/tasks/`
|
|
482
|
+
- 启动时自动恢复(98个任务)
|
|
483
|
+
- 支持异步任务执行
|
|
484
|
+
|
|
485
|
+
---
|
|
486
|
+
|
|
487
|
+
## 五、数据存储设计
|
|
488
|
+
|
|
489
|
+
### 5.1 后端存储
|
|
490
|
+
|
|
491
|
+
| 数据 | 存储方式 | 路径 |
|
|
492
|
+
|------|----------|------|
|
|
493
|
+
| 任务队列 | JSON 文件 | `~/.feihong-code/tasks/` |
|
|
494
|
+
| 知识库 | Markdown 文件 | `~/.feihong-code/knowledge/` |
|
|
495
|
+
| 插件 | 目录 | `~/.feihong-code/plugins/` |
|
|
496
|
+
| 自我进化 | JSON 文件 | `~/.feihong-code/self-evolve/` |
|
|
497
|
+
| 日志 | 文本文件 | `FH_LOG_DIR` 环境变量 |
|
|
498
|
+
| 配置 | .env / JSON | 项目根目录 |
|
|
499
|
+
| **SQLite 统一存储(v8.0)** | **SQLite 数据库** | **`$FH_HOME/feihong.db`(可 FH_DB_PATH 覆盖)** |
|
|
500
|
+
|
|
501
|
+
### 5.2 SQLite 数据存储(v8.0 新增)
|
|
502
|
+
|
|
503
|
+
基于 Node.js 内置 `node:sqlite`(DatabaseSync),零外部依赖,10 张表:
|
|
504
|
+
|
|
505
|
+
| 表名 | 用途 |
|
|
506
|
+
|------|------|
|
|
507
|
+
| `meta` | Schema 版本管理(SCHEMA_VERSION=1,自动迁移) |
|
|
508
|
+
| `kv` | 通用键值(models/config/settings) |
|
|
509
|
+
| `tasks` | 任务持久化(type/status/progress/input/result/error/model) |
|
|
510
|
+
| `models` | 模型配置(**api_key AES-256-GCM 加密落盘**) |
|
|
511
|
+
| `agents` | Agent 注册表 |
|
|
512
|
+
| `skills` | 技能库(名称/触发词/提示词/使用计数) |
|
|
513
|
+
| `memory` | 记忆键值(MEMORY.md 等,kind 区分) |
|
|
514
|
+
| `memory_history` | 会话摘要历史(跨会话检索) |
|
|
515
|
+
| `users` + `user_memory` | Honcho 用户建模(偏好/特质/事实记忆+重要度) |
|
|
516
|
+
| `knowledge` | 知识库文档索引 |
|
|
517
|
+
|
|
518
|
+
安全特性:
|
|
519
|
+
- 敏感字段自动加密:`models.api_key`、`config.value` 使用主密钥(`FH_SECRET` 或 `$FH_HOME/.secret`)AES-256-GCM 加密,格式 `v1:iv:cipher:tag`
|
|
520
|
+
- WAL 日志模式 + 外键约束
|
|
521
|
+
- 启动自动建表 + 版本化迁移,兼容已有库升级
|
|
522
|
+
|
|
523
|
+
### 5.3 移动端存储(localStorage)
|
|
524
|
+
|
|
525
|
+
| Key | 用途 |
|
|
526
|
+
|-----|------|
|
|
527
|
+
| `fh.app.models` | 模型列表 |
|
|
528
|
+
| `fh.app.defaultModelId` | 默认模型 |
|
|
529
|
+
| `fh.app.tasks` | 对话任务 |
|
|
530
|
+
| `fh.app.theme` | 主题 |
|
|
531
|
+
| `fh.app.games` | 游戏数据 |
|
|
532
|
+
| `fh.app.gamebest.<key>` | 游戏最高分 |
|
|
533
|
+
| `fh.app.gamerecent` | 最近玩过的游戏 |
|
|
534
|
+
| `fh.app.flashapps` | 闪应用 |
|
|
535
|
+
| `fh.app.vlconfig` | 视觉模型配置 |
|
|
536
|
+
| `fh.app.creative` | 创作配置 |
|
|
537
|
+
| `fh.hermes.memory.md` | Hermes MEMORY.md |
|
|
538
|
+
| `fh.hermes.user.md` | Hermes USER.md |
|
|
539
|
+
| `fh.hermes.history` | Hermes 历史任务 |
|
|
540
|
+
| `fh.hermes.contexts` | Hermes 项目上下文 |
|
|
541
|
+
| `fh.hermes.skills` | Hermes 技能库 |
|
|
542
|
+
| `fh.hermes.scheduled` | Hermes 定时任务 |
|
|
543
|
+
|
|
544
|
+
---
|
|
545
|
+
|
|
546
|
+
## 六、安全机制
|
|
547
|
+
|
|
548
|
+
### 6.1 认证与授权
|
|
549
|
+
- Web 控制台:FH_WEB_TOKEN 令牌认证
|
|
550
|
+
- API 接口:除 /api/health 外全部需要认证
|
|
551
|
+
- 企业版:RBAC 角色权限控制
|
|
552
|
+
|
|
553
|
+
### 6.2 沙盒执行
|
|
554
|
+
- Shell 命令在沙盒中执行(sandbox.ts)
|
|
555
|
+
- 安全路径检查(safe-path.ts),防止路径遍历
|
|
556
|
+
- 可配置 FH_SHELL_ALLOW 白名单
|
|
557
|
+
- FH_REQUIRE_APPROVAL 审批机制
|
|
558
|
+
- **Docker 容器沙盒(v8.0)**:`src/tools/docker-sandbox.ts` 实现 container 模式真实执行
|
|
559
|
+
- `docker run --rm` 一次性容器,执行完自动销毁
|
|
560
|
+
- 默认 `--network none` 禁用网络(可 `FH_SANDBOX_NETWORK=true` 开启)
|
|
561
|
+
- 工作区默认只读挂载(可 `FH_SANDBOX_READONLY=false` 关闭)
|
|
562
|
+
- 内存/CPU 资源限制(默认 512m / 1 CPU)
|
|
563
|
+
- 危险命令拦截(`rm -rf /`、`mkfs`、`dd 写块设备`、fork 炸弹)
|
|
564
|
+
- 超时强杀(默认 60s,`docker kill`)
|
|
565
|
+
|
|
566
|
+
### 6.3 数据安全
|
|
567
|
+
- .env 文件包含密钥,已加入 .gitignore
|
|
568
|
+
- API Key 在前端 localStorage 存储(移动端)
|
|
569
|
+
- 健康检查不返回敏感信息
|
|
570
|
+
- 不存在的 API 返回 401(不暴露存在性)
|
|
571
|
+
|
|
572
|
+
### 6.4 依赖安全
|
|
573
|
+
- 核心依赖仅 5 个,减少攻击面
|
|
574
|
+
- zod 用于输入验证
|
|
575
|
+
- playwright-core 用于浏览器自动化隔离
|
|
576
|
+
|
|
577
|
+
---
|
|
578
|
+
|
|
579
|
+
## 七、部署方式
|
|
580
|
+
|
|
581
|
+
### 7.1 后端部署
|
|
582
|
+
|
|
583
|
+
#### 本地开发
|
|
584
|
+
```bash
|
|
585
|
+
npm install
|
|
586
|
+
npx tsc
|
|
587
|
+
$env:FH_WEB_PORT="8080"
|
|
588
|
+
node dist/cli/index.js serve
|
|
589
|
+
```
|
|
590
|
+
|
|
591
|
+
#### 一键启动
|
|
592
|
+
```bash
|
|
593
|
+
node start-web.js
|
|
594
|
+
```
|
|
595
|
+
|
|
596
|
+
#### Docker 部署
|
|
597
|
+
```bash
|
|
598
|
+
docker build -t feihong-code .
|
|
599
|
+
docker run -p 8080:8080 feihong-code
|
|
600
|
+
```
|
|
601
|
+
|
|
602
|
+
#### Docker Compose
|
|
603
|
+
```bash
|
|
604
|
+
docker-compose up -d
|
|
605
|
+
```
|
|
606
|
+
|
|
607
|
+
### 7.2 移动端部署
|
|
608
|
+
|
|
609
|
+
#### APK 构建
|
|
610
|
+
```bash
|
|
611
|
+
cd android
|
|
612
|
+
$env:JAVA_HOME = "C:\Program Files\Microsoft\jdk-21.0.12.101-hotspot"
|
|
613
|
+
.\gradlew.bat assembleRelease --no-daemon
|
|
614
|
+
# 产物:android/app/build/outputs/apk/release/app-release.apk
|
|
615
|
+
```
|
|
616
|
+
|
|
617
|
+
#### 签名配置
|
|
618
|
+
- Keystore:`android/fhcode-release.jks`
|
|
619
|
+
- storePassword:`fhcode2026`
|
|
620
|
+
- keyAlias:`fhcode`
|
|
621
|
+
- keyPassword:`fhcode2026`
|
|
622
|
+
|
|
623
|
+
### 7.3 Electron 桌面端
|
|
624
|
+
```bash
|
|
625
|
+
npm run electron:dev # 开发模式
|
|
626
|
+
npm run electron:build # 构建 Windows 安装包
|
|
627
|
+
```
|
|
628
|
+
|
|
629
|
+
---
|
|
630
|
+
|
|
631
|
+
## 八、API 接口规范
|
|
632
|
+
|
|
633
|
+
### 8.1 健康检查(公开)
|
|
634
|
+
|
|
635
|
+
**请求**:`GET /api/health`
|
|
636
|
+
|
|
637
|
+
**响应**:
|
|
638
|
+
```json
|
|
639
|
+
{
|
|
640
|
+
"ok": true,
|
|
641
|
+
"product": "飞虹 Code",
|
|
642
|
+
"version": "7.9.0",
|
|
643
|
+
"signature": "晋江市飞虹智科技企业管理有限公司 · 飞扬企源研发中心 · 负责人:吴赐虹",
|
|
644
|
+
"enterprise": true,
|
|
645
|
+
"lang": "zh",
|
|
646
|
+
"wechat": "disabled",
|
|
647
|
+
"feishu": "disabled",
|
|
648
|
+
"yuanbao": "disabled",
|
|
649
|
+
"time": "2026-09-03T03:22:41.905Z"
|
|
650
|
+
}
|
|
651
|
+
```
|
|
652
|
+
|
|
653
|
+
### 8.2 认证方式
|
|
654
|
+
|
|
655
|
+
所有受保护接口需要在请求头中携带令牌:
|
|
656
|
+
```
|
|
657
|
+
Authorization: Bearer <FH_WEB_TOKEN>
|
|
658
|
+
```
|
|
659
|
+
|
|
660
|
+
未认证响应:
|
|
661
|
+
```json
|
|
662
|
+
{
|
|
663
|
+
"error": "Unauthorized",
|
|
664
|
+
"code": 401
|
|
665
|
+
}
|
|
666
|
+
```
|
|
667
|
+
|
|
668
|
+
### 8.3 错误响应格式
|
|
669
|
+
|
|
670
|
+
```json
|
|
671
|
+
{
|
|
672
|
+
"error": "错误描述",
|
|
673
|
+
"code": 404,
|
|
674
|
+
"details": {}
|
|
675
|
+
}
|
|
676
|
+
```
|
|
677
|
+
|
|
678
|
+
---
|
|
679
|
+
|
|
680
|
+
## 九、性能指标
|
|
681
|
+
|
|
682
|
+
### 9.1 后端性能(实测)
|
|
683
|
+
|
|
684
|
+
| 指标 | 值 | 评级 |
|
|
685
|
+
|------|-----|------|
|
|
686
|
+
| 健康检查平均响应 | 14.6ms | 优秀 |
|
|
687
|
+
| 健康检查最快响应 | 12ms | 优秀 |
|
|
688
|
+
| 健康检查最慢响应 | 25ms | 优秀 |
|
|
689
|
+
| 首页加载 | 59ms | 优秀 |
|
|
690
|
+
| 首页大小 | 74KB | 适中 |
|
|
691
|
+
| 并发稳定性 | 5/5 成功 | 优秀 |
|
|
692
|
+
| 内存占用 | 228MB | 适中 |
|
|
693
|
+
| 启动时间 | < 1秒 | 优秀 |
|
|
694
|
+
|
|
695
|
+
### 9.2 构建性能
|
|
696
|
+
|
|
697
|
+
| 指标 | 值 |
|
|
698
|
+
|------|-----|
|
|
699
|
+
| TypeScript 编译 | < 5秒 |
|
|
700
|
+
| APK 构建 | 17-23秒 |
|
|
701
|
+
| APK 大小 | 3.2MB |
|
|
702
|
+
|
|
703
|
+
---
|
|
704
|
+
|
|
705
|
+
## 十、扩展与集成
|
|
706
|
+
|
|
707
|
+
### 10.1 多平台桥接(需配置)
|
|
708
|
+
|
|
709
|
+
| 平台 | 环境变量 | 状态 |
|
|
710
|
+
|------|----------|------|
|
|
711
|
+
| 微信(企业微信/公众号) | `FH_WECHAT_MODE=wecom\|mp` | disabled |
|
|
712
|
+
| 飞书 | `FH_FEISHU_ENABLED=true` | disabled |
|
|
713
|
+
| 元宝 | `FH_YUANBAO_ENABLED=true` | disabled |
|
|
714
|
+
|
|
715
|
+
### 10.2 MCP 外部工具
|
|
716
|
+
- 支持 Model Context Protocol 接入外部工具
|
|
717
|
+
- 工具目录:`src/tools/mcp/`
|
|
718
|
+
- 可扩展自定义 MCP 服务器
|
|
719
|
+
|
|
720
|
+
### 10.3 插件系统
|
|
721
|
+
- 动态插件加载
|
|
722
|
+
- 插件目录:`~/.feihong-code/plugins/`
|
|
723
|
+
- 支持自定义插件开发
|
|
724
|
+
|
|
725
|
+
---
|
|
726
|
+
|
|
727
|
+
## 十一、版本历史
|
|
728
|
+
|
|
729
|
+
| 版本 | 日期 | 主要变更 |
|
|
730
|
+
|------|------|----------|
|
|
731
|
+
| v7.6.0 | 2026-08-30 | 基础版本,20个子系统 |
|
|
732
|
+
| v7.7.0-v7.7.6 | 2026-08-31 | 移动端多轮对话修复、12款游戏、创作中心、布局修复 |
|
|
733
|
+
| v7.8.0 | 2026-09-02 | 免密网络层(Keyless Web Tier)+ Hermes 记忆基础 |
|
|
734
|
+
| **v7.9.0** | **2026-09-03** | **Hermes Agent 完整框架(持久记忆+自演化技能+自动化调度+工具集),后端版本对齐** |
|
|
735
|
+
|
|
736
|
+
---
|
|
737
|
+
|
|
738
|
+
## 十二、联系方式
|
|
739
|
+
|
|
740
|
+
- **项目负责人**:吴赐虹
|
|
741
|
+
- **研发团队**:晋江市飞虹智科技企业管理有限公司 · 飞扬企源研发中心
|
|
742
|
+
- **技术支持**:通过飞虹 Code Web 控制台提交反馈
|
|
743
|
+
|
|
744
|
+
---
|
|
745
|
+
|
|
746
|
+
*本文档随版本更新而维护,最新版本以项目仓库 docs/ 目录为准。*
|