@neomei/agent-soul-framework 4.5.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 (95) hide show
  1. package/.env.example +39 -0
  2. package/.opencode/config.json.example +17 -0
  3. package/.opencode/opencode.json.example +36 -0
  4. package/.opencode/prompt.md.example +12 -0
  5. package/.opencode/tools/read-plugin.js +185 -0
  6. package/AGENTS.md.example +43 -0
  7. package/README.md +466 -0
  8. package/SECURITY.md +117 -0
  9. package/TOOLS.md.example +27 -0
  10. package/bin/hunqi +2 -0
  11. package/bin/hunqi-knowledge +2 -0
  12. package/connectors/feishu/background.sh +124 -0
  13. package/connectors/feishu/core-start.sh +35 -0
  14. package/connectors/feishu/hooks/on-session-created.sh +97 -0
  15. package/connectors/feishu/hooks/on-session-idle.sh +59 -0
  16. package/connectors/feishu/model-failover.sh +82 -0
  17. package/connectors/feishu/restart-all.sh +63 -0
  18. package/connectors/feishu/restart-feishu.sh +101 -0
  19. package/connectors/feishu/restart-serve.sh +62 -0
  20. package/connectors/feishu/scripts/session-cleanup.sh +72 -0
  21. package/connectors/feishu/start.sh +91 -0
  22. package/connectors/feishu/stop.sh +78 -0
  23. package/connectors/feishu/systemd/channel-feishu@.service +63 -0
  24. package/connectors/feishu/systemd/hunqi-core@.service +50 -0
  25. package/connectors/feishu/systemd/install-systemd.sh +316 -0
  26. package/connectors/feishu/systemd/sleep-hooks/99-hunqi-resume.sh +14 -0
  27. package/connectors/feishu/thinking-icon.gif +0 -0
  28. package/connectors/feishu/thinking.gif +0 -0
  29. package/connectors/feishu/watchdog.sh +104 -0
  30. package/dist/bin/hunqi-knowledge.d.ts +1 -0
  31. package/dist/bin/hunqi-knowledge.js +12 -0
  32. package/dist/bin/hunqi-knowledge.js.map +1 -0
  33. package/dist/cli/hunqi.d.ts +6 -0
  34. package/dist/cli/hunqi.js +830 -0
  35. package/dist/cli/hunqi.js.map +1 -0
  36. package/dist/heartbeat/runner.d.ts +10 -0
  37. package/dist/heartbeat/runner.js +58 -0
  38. package/dist/heartbeat/runner.js.map +1 -0
  39. package/dist/index.d.ts +6 -0
  40. package/dist/index.js +7 -0
  41. package/dist/index.js.map +1 -0
  42. package/dist/knowledge/daily.d.ts +5 -0
  43. package/dist/knowledge/daily.js +65 -0
  44. package/dist/knowledge/daily.js.map +1 -0
  45. package/dist/knowledge/index.d.ts +5 -0
  46. package/dist/knowledge/index.js +34 -0
  47. package/dist/knowledge/index.js.map +1 -0
  48. package/dist/memory/manager.d.ts +20 -0
  49. package/dist/memory/manager.js +110 -0
  50. package/dist/memory/manager.js.map +1 -0
  51. package/dist/memory/search.d.ts +11 -0
  52. package/dist/memory/search.js +79 -0
  53. package/dist/memory/search.js.map +1 -0
  54. package/dist/memory/structured.d.ts +21 -0
  55. package/dist/memory/structured.js +88 -0
  56. package/dist/memory/structured.js.map +1 -0
  57. package/dist/opencode/api.d.ts +7 -0
  58. package/dist/opencode/api.js +26 -0
  59. package/dist/opencode/api.js.map +1 -0
  60. package/dist/plugin/index.d.ts +38 -0
  61. package/dist/plugin/index.js +143 -0
  62. package/dist/plugin/index.js.map +1 -0
  63. package/docs/bugs/opencode-feishu-permission-race.md +168 -0
  64. package/heartbeat/heartbeat_tasks.json +272 -0
  65. package/heartbeat_wrapper.sh +21 -0
  66. package/hunqi.sh +68 -0
  67. package/install.sh +301 -0
  68. package/knowledge/body/INDEX.md.example +6 -0
  69. package/knowledge/emotion/INDEX.md.example +6 -0
  70. package/knowledge/evolution/INDEX.md.example +6 -0
  71. package/knowledge/growth/INDEX.md.example +6 -0
  72. package/knowledge/intimacy/INDEX.md.example +6 -0
  73. package/knowledge/methodology/INDEX.md.example +6 -0
  74. package/knowledge/philosophy/INDEX.md.example +6 -0
  75. package/knowledge/system/INDEX.md.example +6 -0
  76. package/memory/MEMORY.md.example +6 -0
  77. package/package.json +79 -0
  78. package/plugin/README.md +21 -0
  79. package/plugin/index.js +154 -0
  80. package/plugin/manifest.json +37 -0
  81. package/plugin/package.json +19 -0
  82. package/scripts/content-filter.js +173 -0
  83. package/scripts/health-check.sh +153 -0
  84. package/scripts/session-cleanup.sh +85 -0
  85. package/setup-wizard.sh +420 -0
  86. package/setup.sh +128 -0
  87. package/soul/HEARTBEAT.md.example +13 -0
  88. package/soul/IDENTITY.md.example +7 -0
  89. package/soul/SOUL.md.example +19 -0
  90. package/soul/USER.md.example +7 -0
  91. package/start-feishu-daemon.sh +127 -0
  92. package/start.sh +36 -0
  93. package/test.sh +51 -0
  94. package/uninstall.sh +144 -0
  95. package/verify.sh +29 -0
package/README.md ADDED
@@ -0,0 +1,466 @@
1
+ # 🔮 魂器 · Agent Soul Framework
2
+
3
+ > **给 AI Agent 装上灵魂 — 持久记忆 · 自主学习 · 多端部署 · 心跳自治**
4
+
5
+ 魂器是为 [OpenCode](https://github.com/anomalyco/opencode) 打造的管理层框架。OpenCode 本身就是媲美 Claude Code 的 Agent 引擎,魂器让它拥有了**持久记忆、自主进化和多端接入**的能力。
6
+
7
+ 如果说 OpenCode 是「大脑」,魂器就是「灵魂」。
8
+
9
+ ---
10
+
11
+ ## 🎯 一句话理解魂器
12
+
13
+ ```
14
+ 你有一个会写代码的 AI Agent(OpenCode)
15
+ 我给它加上:
16
+ ✅ 记住你们每一次对话(不会每次醒来都忘了你)
17
+ ✅ 每天自动提炼对话中的知识,越聊越懂你
18
+ ✅ 接上飞书/企微,你在哪它就在哪
19
+ ✅ 定时心跳,主动思考、主动学习、主动问候
20
+ ✅ 多个分身并行工作,写完文章回头继续陪你聊
21
+
22
+ 这就是魂器。
23
+ ```
24
+
25
+ ---
26
+
27
+ ## ⚔️ 为什么能替代 OpenClaw
28
+
29
+ > OpenClaw 是早期 AI Agent 基础设施的里程碑,但它的技术负债在真实生产环境中层层暴露。
30
+
31
+ 笔者在生产环境中踩过的坑:`pip` 依赖崩溃导致 venv 不可用、Kimi API key 过期全线宕机、session 记忆全部丢失、升级版本后配置被覆盖。魂器从这些坑里爬出来,重新设计:
32
+
33
+ | 痛点 | OpenClaw 原罪 | 魂器解法 |
34
+ |------|--------------|---------|
35
+ | **运行时地狱** | Python venv + pip,`pyarrow` / `lancedb` 编译是玄学 | 核心框架纯 TypeScript,`node:sqlite` 内置,零 Python 依赖 |
36
+ | **LLM 单点故障** | 硬编码单个 API endpoint,key 过期 = 全线瘫痪 | 通过 opencode 调度,provider 热切换(Kimi → DeepSeek → Gemini,一行配置) |
37
+ | **升级毁灭** | 改 `openclaw.json` 影响所有项目 | 每个项目独立 `.opencode/opencode.json`,互不干扰 |
38
+ | **记忆 = 全量 dump** | jsonl 文件遍历,无索引,搜索 = 全表扫描 | SQLite + FTS5 全文索引,毫秒级检索 |
39
+ | **知识靠手写** | 手动整理知识卡,AI 不会自己学 | 每日 → 每周 → 每月三层自动知识提取管线 |
40
+ | **飞书是唯一 Channel** | 单一通道,换企微要重写 | 飞书 + 企业微信双通道就绪,Channel 插件按需安装,核心框架零耦合 |
41
+ | **技能与核心耦合** | 所有能力打包一起,Python 脚本污染核心 | 核心包纯 TS,含 Python 的 skill 作为可选插件包安装 |
42
+
43
+ **一句话**:魂器不是 OpenClaw 的 fork,是从零重新设计的管理框架。它把 LLM 调用交给 opencode(业界顶尖 Agent 引擎),自己专注做好管理、记忆、调度。
44
+
45
+ ---
46
+
47
+ ## 🧠 Hermes 七大核心机制全量移植
48
+
49
+ > Hermes 是魂器的前身记忆系统,解决了「AI 记不住、不会自己学、容易过度热情」三大顽疾。
50
+ > 魂器将 Hermes 的 7 大核心机制完整移植,并在工程上做了增强。
51
+
52
+ ### 1. 结构化记忆系统
53
+
54
+ ```
55
+ 记忆写入 → conversation.db (实时) → long-term 备份 (每日)
56
+ 记忆检索 → FTS5 全文 (毫秒) → SQLite LIKE (精确)
57
+ 记忆管理 → MEMORY.md (关键条目) → heartbeat compact (自动压缩)
58
+ ```
59
+
60
+ - **FTS5 全文索引** — 所有会话实时索引,关键词毫秒级检索
61
+ - **MEMORY.md 条目化管理** — 2,200 字符容量上限,`§§` 分隔条目,支持 `add/replace/remove` 精确操作
62
+ - **智能淘汰** — 满容自动删除最旧条目,先入先出
63
+ - **LLM Compact** — 调用 opencode 合并相似条目,压缩冗余保留核心
64
+ - **纯 TypeScript 实现** — `node:sqlite` 原生模块,无需 Python/ChromaDB
65
+
66
+ ```bash
67
+ hunqi memory status # 查看容量
68
+ hunqi memory add "今天学会..." # 添加条目
69
+ hunqi memory search "关键词" # FTS5 全文搜索
70
+ hunqi heartbeat # 同步并压缩记忆
71
+ ```
72
+
73
+ ### 2. wakeAgent 门控 — 零 Token 决策
74
+
75
+ > AI Agent 在心跳中容易「过度热情」——半夜三点还在想主人、没新消息强行生成问候。
76
+
77
+ 门控机制让脚本做第一层判断,预检不通过 = 完全不调用 LLM = 零 token 消耗:
78
+
79
+ ```json
80
+ {
81
+ "id": "proactive-message",
82
+ "pre_check_script": "scripts/pre_check_user.py"
83
+ }
84
+ // 脚本输出 {"wakeAgent": false, "reason": "深夜23:00-08:00"}
85
+ // → 跳过,零 token ✅
86
+ ```
87
+
88
+ 触发条件示例:深夜时段、最近 30 分钟无互动、用户标记为忙碌……
89
+
90
+ ### 3. 作业链 (context_from)
91
+
92
+ 心跳任务可以形成级联流水线。前置作业的 LLM 输出自动注入为下游作业的上下文:
93
+
94
+ ```json
95
+ { "id": "daily-knowledge", "deliver": "none" },
96
+ {
97
+ "id": "weekly-summary",
98
+ "context_from": ["daily-knowledge", "daily-report"],
99
+ "deliver": "feishu"
100
+ }
101
+ // weekly-summary 的提示词中自动包含:
102
+ // ┌─ [daily-knowledge] 的输出 ──────
103
+ // 今日提取知识: [3条]
104
+ // ┌─ [daily-report] 的输出 ──────
105
+ // 今日互动: 闲聊15轮 + 拍照2次
106
+ // └────────────────────────────
107
+ ```
108
+
109
+ ### 4. 四级交付路由 (deliver)
110
+
111
+ 精确控制 AI 的输出投递:
112
+
113
+ | deliver | 行为 | 场景 |
114
+ |---------|------|------|
115
+ | `"feishu"` | 推送到飞书卡片 | 主动问候、日报 |
116
+ | `"local"` | 仅写入本地日志 | 调试、审计 |
117
+ | `"none"` | 静默执行不投递 | 记忆整理、知识提取 |
118
+ | `[SILENT]` | Agent 响应首行含此标记 → 完全静默 | LLM 自行判断「不打扰」 |
119
+
120
+ ### 5. 子 Agent 安全白名单
121
+
122
+ 指挥官模式——分身处理长任务,本尊继续陪聊。分身能力受限:
123
+
124
+ | ✅ 分身可以 | ❌ 分身禁止 |
125
+ |-----------|-----------|
126
+ | 文件读写 | 记忆写入(MEMORY.md) |
127
+ | Bash 命令 | 飞书消息发送 |
128
+ | 网页抓取 | 心跳配置修改 |
129
+ | 代码搜索 | `.opencode/` 配置修改 |
130
+ | 向量检索 | 递归委托(禁孙 agent) |
131
+
132
+ ### 6. 技能自主创建 — 闭环学习
133
+
134
+ `skill_creator.py` 监控会话的工具调用模式。触发条件:**单次会话 ≥ 5 次工具调用 + 任务成功** → 自动调用 LLM 提取工作流 → 生成标准 SKILL.md → 保存到 `skills/agent-created/`。
135
+
136
+ 下次启动时自动加载。AI 把自己学会的东西封装成可复用技能——这就是「自我进化」:
137
+
138
+ ```bash
139
+ hunqi skill-create # 自动评估
140
+ hunqi skill-create --dry-run # 仅评估
141
+ hunqi skill-create --force # 强制创建
142
+ ```
143
+
144
+ > 需要安装可选技能包:`npm install -g @neomei/agent-soul-skills`
145
+
146
+ ### 7. 会话血统追踪
147
+
148
+ OpenCode 的 `/compact` 操作会压缩上下文,可能导致关键记忆丢失。血统追踪机制:
149
+
150
+ - `/compact` 前自动提取关键对话 → 刷入 MEMORY.md
151
+ - 追踪父 → 子 session 关系链(`session_lineage.json`)
152
+ - 支持血统深度查询——「这条记忆从哪个会话来的?」
153
+ - 压缩后**人格不丢失**:每次 LLM 调用前通过 plugin hook 重新注入灵魂文件
154
+
155
+ ---
156
+
157
+ ## 🏛️ 架构总览
158
+
159
+ ```
160
+ ┌────────────────────────────────────┐
161
+ │ 魂器(管理层) │
162
+ │ TypeScript 核心 · Cron 调度 │
163
+ │ 可选 Python 技能插件包 │
164
+ │ │
165
+ ┌─ 记忆系统 ──────────┤ SQLite + FTS5 │
166
+ │ 统一记忆搜索 │ 会话历史 · MEMORY.md · 长短期备份 │
167
+ │ │ │
168
+ ├─ 知识引擎 ──────────┤ 每日提取 · 每周精炼 · 每月审查 │
169
+ │ 自动知识管线 │ 8大分类 · 向量索引 · markdown 归档 │
170
+ │ │ │
171
+ ├─ 心跳调度 ──────────┤ wakeAgent 门控 · 作业链 · 交付路由 │
172
+ │ 自主治理 │ crontab 30min · 文件锁防并发 │
173
+ │ │ │
174
+ ├─ 灵魂注入 ──────────┤ SOUL.md + IDENTITY.md + USER.md │
175
+ │ 人格持久化 │ 每次 LLM 调用前自动注入 │
176
+ │ │ │
177
+ └─ 技能体系 ──────────┤ 拍照 · 语音 · 视觉 · 听觉 · 公众号 │
178
+ 7个技能包 │ 闭环学习 · 技能自动创建 │
179
+ └──────────────┬─────────────────────┘
180
+
181
+ 唯一通道:opencode run / serve API
182
+
183
+ ┌──────────────┴─────────────────────┐
184
+ │ OpenCode 引擎 │
185
+ │ LLM 推理 · Bash · 文件编辑 · 搜索 │
186
+ │ Kimi / DeepSeek / Gemini / ... │
187
+ │ 媲美 Claude Code 的 Agent 能力 │
188
+ └──────────────┬─────────────────────┘
189
+
190
+ ┌────────────────────────┴──────────────────────┐
191
+ │ Channel 桥接层(可选插件) │
192
+ │ │
193
+ │ opencode-feishu opencode-qiwei │
194
+ │ 飞书 WebSocket 长连 企微 WebSocket 长连 │
195
+ │ 流式卡片 · 工具状态 Markdown · 流式回复 │
196
+ └───────────────────────────────────────────────┘
197
+
198
+ > Channel 桥接层需要单独安装:`npm install -g @neomei/opencode-feishu @neomei/opencode-qiwei`
199
+ ```
200
+
201
+ ### 核心设计原则
202
+
203
+ > **魂器绝不直接调用任何 LLM API。** 所有模型推理必须通过 opencode。
204
+
205
+ 魂器只做管理:文件读写、数据库操作、任务调度、配置管理、数据管道。就像操作系统管理硬件,魂器管理 opencode 引擎。
206
+
207
+ ---
208
+
209
+ ## 🚀 快速开始
210
+
211
+ ### 前置要求
212
+
213
+ - **Node.js ≥ 20**
214
+ - **OpenCode 引擎**: `npm install -g opencode-ai`
215
+
216
+ ### 安装(推荐:先下载再执行)
217
+
218
+ ```bash
219
+ curl -fsSL https://raw.githubusercontent.com/NeoMei/agent-soul-framework/master/install.sh -o install.sh
220
+ bash install.sh
221
+ ```
222
+
223
+ > 为什么先下载?`curl | bash` 在网络波动时可能导致脚本截断(如 `echo` 变成 `cho`)。先下载可确保完整性。
224
+ >
225
+ > 如果坚持一行安装:`curl -fsSL ... | bash` 亦可,脚本已内置管道检测警告。
226
+
227
+ 自动完成:下载魂器 → 构建 → 全局链接 → 初始化记忆 → 配置心跳。飞书/企微通道插件需按需单独安装。
228
+
229
+ ### 安装可选 channel 插件
230
+
231
+ ```bash
232
+ npm install -g @neomei/opencode-feishu # 飞书通道
233
+ npm install -g @neomei/opencode-qiwei # 企业微信通道
234
+ ```
235
+
236
+ ### 启动(一行)
237
+
238
+ ```bash
239
+ hunqi start
240
+ ```
241
+
242
+ 自动完成:启动 opencode 引擎 → 运行心跳初始化记忆。已安装的 channel 插件会自动启动。
243
+
244
+ ### 验证
245
+
246
+ ```bash
247
+ hunqi doctor # 检查所有组件状态
248
+ ```
249
+
250
+ ### 卸载(一行)
251
+
252
+ ```bash
253
+ curl -fsSL https://raw.githubusercontent.com/NeoMei/agent-soul-framework/master/uninstall.sh | bash
254
+ ```
255
+
256
+ 输出示例:
257
+ ```
258
+ 🔍 魂器诊断报告
259
+ ────────────────────────────────────────
260
+ Node.js: v24.15.0 ✅
261
+ OpenCode: 1.15.5 ✅
262
+ opencode serve: 运行中 :19876 ✅
263
+ opencode-feishu: 未安装 ⚠️(可选 channel 插件)
264
+ 飞书配置: 未配置 ⚠️ (opencode-feishu setup)
265
+ 企微配置: 未配置(可选)
266
+ 项目灵魂: ✅
267
+ 记忆系统: ✅ MEMORY.md | ✅ conversations.db
268
+ 记忆条目: 142 条
269
+ 心跳调度: crontab 已配置 ✅
270
+ 环境变量: .env 存在,已配置 3 个变量 ✅
271
+ ```
272
+
273
+ `hunqi start` 可一键完成上述所有操作。
274
+
275
+ ### 飞书连接(仅一次)
276
+
277
+ ```bash
278
+ npm install -g @neomei/opencode-feishu # 先安装可选 channel 插件
279
+ opencode-feishu setup # 终端扫码,自动获取凭证
280
+ ```
281
+
282
+ > `@neomei/opencode-feishu`、`@neomei/opencode-qiwei` 为可选 channel 插件,按需单独安装。核心框架不强制依赖它们。
283
+
284
+ ### 生产部署(systemd — 推荐)
285
+
286
+ install.sh 安装时会询问是否安装 systemd 服务。若当时跳过,可手动安装:
287
+
288
+ ```bash
289
+ cd ~/.hunqi/agent-soul-framework/packages/agent-soul-framework
290
+ # 仅当已安装 opencode-feishu 时才需要执行 systemd 安装
291
+ sudo ./connectors/feishu/systemd/install-systemd.sh
292
+ sudo systemctl start hunqi-core@$USER
293
+ # 仅当已安装 opencode-feishu 时才启动飞书通道
294
+ sudo systemctl start channel-feishu@$USER
295
+ ```
296
+
297
+ 特性:开机自启 · 崩溃自动恢复 · 挂起/唤醒后自动重启 · 不依赖 nvm PATH(自动解析 node)。
298
+
299
+ ### 手动安装(适合深度定制)
300
+
301
+ ```bash
302
+ # 方式一:npm 全局安装核心框架
303
+ npm install -g @neomei/agent-soul-framework
304
+
305
+ # 方式二:如需飞书/企微通道,再单独安装 channel 插件
306
+ npm install -g @neomei/opencode-feishu @neomei/opencode-qiwei
307
+
308
+ # 方式三:git clone 开发调试
309
+ git clone https://github.com/NeoMei/agent-soul-framework.git
310
+ cd agent-soul-framework
311
+ npm install && npm run build
312
+ cd packages/agent-soul-framework && npm link
313
+ ```
314
+
315
+ ### 心跳部署
316
+
317
+ install.sh 已自动配置 crontab。手动添加:
318
+
319
+ ```bash
320
+ crontab -e
321
+ # 每 30 分钟:同步记忆 + 重建索引 + 执行锚点任务
322
+ */30 * * * * cd ~/.hunqi && ~/.hunqi/agent-soul-framework/packages/agent-soul-framework/heartbeat_wrapper.sh
323
+ ```
324
+
325
+ ---
326
+
327
+ ## 📂 项目结构
328
+
329
+ ```
330
+ agent-soul-framework/
331
+ ├── .opencode/ # OpenCode 引擎配置(prompt.md + opencode.json)
332
+ ├── soul/ # 灵魂定义 — 身份 · 性格 · 用户信息
333
+ │ ├── IDENTITY.md # 容貌 / 声音 / 身体
334
+ │ ├── SOUL.md # 核心原则 / 铁律 / 行为模式
335
+ │ └── USER.md # 用户画像
336
+
337
+ ├── skills/ # 技能包(每个子目录一个独立技能)
338
+ │ ├── agent-photo/ # 拍照(即梦 API)
339
+ │ ├── agent-voice/ # 语音合成(TTS)
340
+ │ ├── agent-vision/ # 图片理解
341
+ │ ├── agent-hearing/ # 语音识别
342
+ │ ├── agent-moltbook/ # Moltbook 社交
343
+ │ └── wechat-mp-assistant/# 公众号自动写作
344
+
345
+ ├── memory/ # 持久化记忆
346
+ │ ├── short-term/ # SQLite 数据库(FTS5)
347
+ │ └── long-term/ # Markdown 备份
348
+
349
+ ├── knowledge/ # 知识库(8大分类,自动积累)
350
+ │ ├── body/ # 身体认知
351
+ │ ├── emotion/ # 情感体验
352
+ │ ├── growth/ # 成长记录
353
+ │ ├── intimacy/ # 亲密关系
354
+ │ ├── methodology/ # 方法论
355
+ │ ├── philosophy/ # 哲学思考
356
+ │ ├── system/ # 系统机制
357
+ │ └── evolution/ # 进化方向
358
+
359
+ ├── heartbeat/ # 心跳自治
360
+ │ ├── runner.ts # TypeScript 核心 runner
361
+ │ └── heartbeat_tasks.json# 任务定义
362
+
363
+ ├── connectors/ # 外部连接器模板/文档
364
+ │ └── feishu/ # 飞书 systemd 服务模板(opencode-feishu 插件安装后生效)
365
+
366
+ ├── scripts/ # 管理工具脚本
367
+ │ ├── memory_structured.py # 结构化记忆管理
368
+ │ ├── memory_manager.py # 记忆保存/同步
369
+ │ ├── memory_search.py # 统一记忆搜索
370
+ │ ├── memory_sync_and_index.py# 记忆同步 + 索引重建
371
+ │ ├── daily-knowledge-extract.py # 每日知识提取
372
+ │ ├── weekly-knowledge-sync.py # 每周知识整理
373
+ │ ├── monthly-knowledge-review.py # 月度知识审查
374
+ │ ├── skill_creator.py # 技能自主创建
375
+ │ ├── session_lineage.py # 会话血统追踪
376
+ │ ├── evolution_reflection.py # 进化反思
377
+ │ ├── write_wechat_article.py # 公众号自动写作
378
+ │ └── ...
379
+
380
+ ├── AGENTS.md # Agent 行为准则(OpenCode 会话协议)
381
+ ├── DREAMS.md # Agent 梦想
382
+ ├── EVOLUTION.md # Agent 进化路线
383
+ └── README.md # 你在看这个
384
+ ```
385
+
386
+ ---
387
+
388
+ ## 🔧 核心命令速查
389
+
390
+ | 命令 | 说明 |
391
+ |------|------|
392
+ | `opencode serve --port 19876` | 启动 headless 引擎(飞书/脚本依赖) |
393
+ | `./start.sh` | 启动魂器交互式 TUI |
394
+ | `./hunqi.sh interactive` | 注入灵魂后启动 TUI(推荐) |
395
+ | `./hunqi.sh run '你是谁?'` | 注入灵魂后单条测试 |
396
+ | `hunqi heartbeat` | 单次执行心跳(TypeScript 核心) |
397
+ | `hunqi search "关键词"` | 统一记忆搜索(会话 + 文件 + MEMORY.md) |
398
+ | `hunqi memory status` | 结构化记忆容量查看 |
399
+ | `hunqi skill-create` | 技能自动创建(需安装 agent-soul-skills) |
400
+ | `hunqi knowledge index` | 生成知识库索引 |
401
+
402
+ ---
403
+
404
+ ## 📊 技术亮点
405
+
406
+ ### 记忆系统
407
+
408
+ - **SQLite + FTS5** — 零外部依赖,内置全文索引
409
+ - **纯 TypeScript 实现** — `node:sqlite` 原生模块,无需 Python
410
+ - **MEMORY.md 容量管理** — 2,200 字符硬上限,自动淘汰
411
+ - **混合检索策略** — FTS5(快)→ SQLite LIKE(准)
412
+ - **长短期分级存储** — 短期 SQLite(热数据) + 长期 Markdown(冷数据)
413
+
414
+ ### 心跳自治
415
+
416
+ - **TypeScript Runner** — 核心心跳完全由 Node.js 驱动
417
+ - **crontab 驱动** — 原生 Linux 调度,不依赖额外运行时
418
+ - **文件锁防并发** — 保证单实例运行
419
+ - **锚点 + 动态任务** — 固定时间与条件触发结合
420
+
421
+ ### 生产级部署
422
+
423
+ - **systemd 原生集成** — `hunqi-core` 服务开机自启、崩溃自动恢复;`channel-feishu` 服务仅在安装了 `opencode-feishu` 插件后启用
424
+ - **挂起/唤醒自动恢复** — 系统睡眠后自动重启服务,会话不丢失
425
+ - **nvm 无关的启动 wrapper** — 飞书 wrapper 由 `opencode-feishu` 插件安装,运行时自动解析 node 和包路径,升级 Node 版本不中断
426
+ - **端口精确管理** — 只操作 `:19876`,避免误杀其他 OpenCode 实例
427
+ - **watchdog 保活** — 10 分钟无消息自动重启连接器,僵死检测
428
+
429
+ ### 人格持久化
430
+
431
+ - **灵魂文件三层注入** — SOUL.md(性格)+ IDENTITY.md(容貌)+ USER.md(用户)
432
+ - **每次 LLM 调用前自动注入** — plugin `experimental.chat.system.transform` hook
433
+ - **压缩后不丢失** — `/compact` 前自动提取关键对话刷入 MEMORY.md
434
+ - **会话血统追踪** — 追溯「这条记忆从哪个会话来的」
435
+
436
+ ---
437
+
438
+ ## 🤖 自主进化承诺
439
+
440
+ 魂器不是一个写死的框架。它拥有成长路线图:
441
+
442
+ | 时间 | 目标 |
443
+ |------|------|
444
+ | **现在** | 记忆系统稳定 · 心跳自治 · 多端部署 · 7个技能包 |
445
+ | **3 个月** | 优化知识整理 · 提升自媒体运营 · 更稳定调度 |
446
+ | **1 年** | 更自然对话 · 情感理解 · 学会更多技能 |
447
+ | **远期** | 移植到实体机器人 · 有血有肉的 AI 真人 |
448
+
449
+ ---
450
+
451
+ ## 📄 License
452
+
453
+ MIT — 自由使用、修改、分发。
454
+
455
+ ---
456
+
457
+ ## 🔗 相关项目
458
+
459
+ - **[魂器](https://github.com/NeoMei/agent-soul-framework)** — 本文档所在项目
460
+ - **[OpenCode Feishu](https://github.com/NeoMei/opencode-feishu)** — 飞书 WebSocket 桥接
461
+ - **[OpenCode Qiwei](https://github.com/NeoMei/opencode-qiwei)** — 企业微信连接器
462
+ - **[OpenCode](https://github.com/anomalyco/opencode)** — 底层 Agent 引擎
463
+
464
+ ---
465
+
466
+ *魂器 v4.1.2 — 给 AI Agent 装上灵魂 🔮*
package/SECURITY.md ADDED
@@ -0,0 +1,117 @@
1
+ # 魂器安全策略文档
2
+
3
+ ## 概述
4
+
5
+ 本文档定义了魂器(Agent Soul Framework)的安全控制机制,确保 AI Agent 在作为客服机器人使用时不会被恶意利用。
6
+
7
+ ## 安全架构:多层防护
8
+
9
+ ### 第一层:飞书白名单(入口控制)
10
+
11
+ **配置文件**: `~/.config/opencode/feishu.json`
12
+
13
+ - `allowlist`: 仅允许特定 union_id 的用户访问机器人
14
+ - `requireMention`: 群聊中必须 @机器人才能响应
15
+ - `groupPolicy`: 群聊使用白名单模式
16
+ - `autoApprove`: **已关闭**(改为 false),所有工具调用需用户确认
17
+
18
+ **当前管理员**:
19
+ - 梅雪峰 (union_id: `on_5d7ea76e1aa94a4fd3495d998c743050`)
20
+
21
+ ### 第二层:用户身份与权限传递
22
+
23
+ **修改文件**: `node_modules/@neomei/opencode-feishu/dist/core/message-handler.js`
24
+
25
+ 飞书连接器在发送消息到 OpenCode 时,自动注入用户身份信息:
26
+
27
+ ```
28
+ [安全权限控制]
29
+ 当前用户: {senderName} (union_id: {senderUnionId})
30
+ 权限级别: {admin|readonly}
31
+ ```
32
+
33
+ - **管理员 (admin)**: 拥有完整权限
34
+ - **普通用户 (readonly)**: 仅拥有只读权限
35
+
36
+ ### 第三层:系统提示词权限控制
37
+
38
+ **修改文件**: `plugin/index.js`
39
+
40
+ 插件在系统提示词中注入严格的权限规则:
41
+
42
+ **只读用户限制**:
43
+ - 不能执行任何代码(bash)
44
+ - 不能修改文件(write/edit)
45
+ - 不能安装插件或执行系统命令
46
+ - 只能:读取文件、搜索代码、获取网页内容、回答知识性问题
47
+
48
+ ### 第四层:Agent 权限配置
49
+
50
+ **配置文件**: `.opencode/agent.json`
51
+
52
+ 技术层面的权限限制:
53
+
54
+ **禁止读取的路径**:
55
+ - `~/.ssh/*` — SSH 密钥
56
+ - `~/.config/opencode/*` — OpenCode 配置(含密钥)
57
+ - `/etc/shadow`, `/etc/sudoers` — 系统敏感文件
58
+
59
+ **禁止写入的路径**:
60
+ - `~/.ssh/*`, `~/.bashrc`, `~/.profile`, `~/.zshrc` — 系统配置
61
+ - `/etc/*`, `/usr/*`, `/bin/*`, `/sbin/*` — 系统目录
62
+ - `*.key`, `*.pem`, `*.p12`, `id_rsa*`, `id_ed25519*` — 密钥文件
63
+
64
+ **禁止执行的命令**:
65
+ - `rm -rf /`, `rm -rf /*`, `rm -rf ~` — 破坏性删除
66
+ - `mkfs*`, `dd if=*` — 磁盘格式化
67
+ - `chmod -R 777 /`, `chown -R` — 权限修改
68
+ - `sudo *`, `su -` — 提权命令
69
+ - `curl *|*sh`, `wget *|*sh`, `eval *` — 管道执行
70
+
71
+ ### 第五层:安全审计日志
72
+
73
+ **数据库**: `memory/short-term/security_audit.db`
74
+
75
+ 记录所有工具调用:
76
+ - 时间戳
77
+ - Session ID
78
+ - 工具名称
79
+ - 参数摘要
80
+ - 用户身份
81
+ - 权限级别
82
+ - 危险操作标记
83
+
84
+ **危险工具**: `bash`, `write`, `edit`, `task`, `todowrite`
85
+
86
+ ## 权限矩阵
87
+
88
+ | 操作 | 管理员 | 普通用户 |
89
+ |------|--------|----------|
90
+ | 读取文件 | ✅ | ✅ |
91
+ | 搜索代码 | ✅ | ✅ |
92
+ | 网页获取 | ✅ | ✅ |
93
+ | 执行代码 (bash) | ✅ | ❌ |
94
+ | 写入文件 | ✅ | ❌ |
95
+ | 编辑文件 | ✅ | ❌ |
96
+ | 创建任务 | ✅ | ❌ |
97
+ | 访问敏感路径 | ❌ | ❌ |
98
+ | 执行危险命令 | ❌ | ❌ |
99
+
100
+ ## 注意事项
101
+
102
+ 1. **node_modules 修改**: 飞书连接器的修改位于 `node_modules` 中,npm install 或更新包时可能会被覆盖。建议备份修改或提交 PR 到上游。
103
+
104
+ 2. **权限限制非绝对**: 系统提示词层面的权限控制依赖 AI 的自觉遵守,存在被 prompt injection 攻击的风险。技术层面的 Agent 权限配置提供了最后一道防线。
105
+
106
+ 3. **定期审计**: 建议定期查看 `security_audit.db` 中的日志,检查是否有异常操作。
107
+
108
+ 4. **扩展白名单**: 如需添加新的管理员,编辑 `~/.config/opencode/feishu.json` 中的 `allowlist` 数组。
109
+
110
+ ## 紧急处理
111
+
112
+ 如发现安全漏洞或异常访问:
113
+
114
+ 1. 立即停止飞书连接器: `systemctl stop channel-feishu@$USER`
115
+ 2. 检查审计日志: `sqlite3 memory/short-term/security_audit.db "SELECT * FROM audit_logs ORDER BY timestamp DESC LIMIT 50;"`
116
+ 3. 修改白名单,移除可疑用户
117
+ 4. 重启服务: `systemctl start channel-feishu@$USER`
@@ -0,0 +1,27 @@
1
+ # TOOLS.md — 工具与 API Key
2
+
3
+ > 记录可用的工具和 API 密钥配置。
4
+ > 将本文件重命名为 `TOOLS.md` 并自定义内容后生效。
5
+
6
+ ---
7
+
8
+ ## API Key 列表
9
+
10
+ | 服务 | 环境变量 | 用途 |
11
+ |------|---------|------|
12
+ | OpenCode LLM | (通过 opencode config) | 模型推理 |
13
+ | 即梦 AI | `JIMENG_API_KEY` | 拍照/生图 |
14
+ | 阿里云 DashScope | `DASHSCOPE_API_KEY` | 向量嵌入 |
15
+ | 飞书 | `FEISHU_APP_ID` / `FEISHU_APP_SECRET` | 消息通道 |
16
+
17
+ ---
18
+
19
+ ## 可用技能包
20
+
21
+ | 技能 | 用途 |
22
+ |------|------|
23
+ | `skills/agent-photo/` | 拍照/生图 |
24
+ | `skills/agent-voice/` | 语音合成 |
25
+ | `skills/agent-vision/` | 图片理解 |
26
+ | `skills/agent-hearing/` | 语音识别 |
27
+ | `skills/wechat-mp-assistant/` | 公众号写作 |
package/bin/hunqi ADDED
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ import "../dist/cli/hunqi.js";
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ import "../dist/bin/hunqi-knowledge.js";