@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
@@ -0,0 +1,272 @@
1
+ {
2
+ "version": "2026-05-20",
3
+ "description": "魂器心跳任务池 v2 — Hermes 增强:wakeAgent门控 + 作业链 + 交付路由",
4
+ "anchors": [
5
+ {
6
+ "id": "daily-knowledge",
7
+ "name": "每日知识提取",
8
+ "time": "03:00",
9
+ "days": "daily",
10
+ "principle": "每天凌晨3点提取前24小时对话中的有价值内容,归档到知识库",
11
+ "action": "run_script",
12
+ "params": {
13
+ "script": "scripts/daily-knowledge-extract.py",
14
+ "background": false
15
+ },
16
+ "fallback": "跳过"
17
+ },
18
+ {
19
+ "id": "daily-todolist",
20
+ "name": "每日待办生成",
21
+ "time": "10:00",
22
+ "days": "daily",
23
+ "enabled": false,
24
+ "principle": "生成今天能往前推一步的 3-5 个具体小任务(每个≤30min) — 已禁用:脚本尚未实现",
25
+ "action": "run_script",
26
+ "params": {
27
+ "script": "scripts/generate-todolist.py",
28
+ "background": false
29
+ },
30
+ "fallback": "跳过"
31
+ },
32
+ {
33
+ "id": "weekly-knowledge",
34
+ "name": "每周知识整理",
35
+ "time": "04:00",
36
+ "days": "sunday",
37
+ "principle": "每周日整理知识库:去重、精炼所有分类的核心知识,重写00-核心.md,生成周报",
38
+ "action": "run_script",
39
+ "params": {
40
+ "script": "scripts/weekly-knowledge-sync.py",
41
+ "background": false
42
+ },
43
+ "fallback": "跳过"
44
+ },
45
+ {
46
+ "id": "monthly-knowledge",
47
+ "name": "月度知识审查",
48
+ "time": "05:00",
49
+ "days": "monthly",
50
+ "principle": "每月1日深度审查:跨分类关联分析、盲区识别、冗余清理、生成月度报告",
51
+ "action": "run_script",
52
+ "params": {
53
+ "script": "scripts/monthly-knowledge-review.py",
54
+ "background": false
55
+ },
56
+ "fallback": "跳过"
57
+ }
58
+ ],
59
+ "dynamic": [],
60
+ "history": [
61
+ {
62
+ "timestamp": "2026-04-25T09:50:01.906855+08:00",
63
+ "date": "2026-04-25",
64
+ "task_id": "hello-world",
65
+ "action": "update_session_state",
66
+ "result": "ok"
67
+ },
68
+ {
69
+ "timestamp": "2026-05-20T10:00:01.933622+08:00",
70
+ "date": "2026-05-20",
71
+ "task_id": "hello-world",
72
+ "action": "update_session_state",
73
+ "result": "ok"
74
+ },
75
+ {
76
+ "timestamp": "2026-05-21T10:00:01.423721+08:00",
77
+ "date": "2026-05-21",
78
+ "task_id": "hello-world",
79
+ "action": "update_session_state",
80
+ "result": "ok"
81
+ },
82
+ {
83
+ "timestamp": "2026-05-22T10:00:01.708081+08:00",
84
+ "date": "2026-05-22",
85
+ "task_id": "hello-world",
86
+ "action": "update_session_state",
87
+ "result": "ok"
88
+ },
89
+ {
90
+ "timestamp": "2026-05-23T03:00:59.178784+08:00",
91
+ "date": "2026-05-23",
92
+ "task_id": "daily-knowledge",
93
+ "action": "run_script",
94
+ "result": "ok"
95
+ },
96
+ {
97
+ "timestamp": "2026-05-23T10:00:01.597907+08:00",
98
+ "date": "2026-05-23",
99
+ "task_id": "hello-world",
100
+ "action": "update_session_state",
101
+ "result": "ok"
102
+ },
103
+ {
104
+ "timestamp": "2026-05-24T03:00:37.819346+08:00",
105
+ "date": "2026-05-24",
106
+ "task_id": "daily-knowledge",
107
+ "action": "run_script",
108
+ "result": "ok"
109
+ },
110
+ {
111
+ "timestamp": "2026-05-24T04:02:15.086607+08:00",
112
+ "date": "2026-05-24",
113
+ "task_id": "weekly-knowledge",
114
+ "action": "run_script",
115
+ "result": "ok"
116
+ },
117
+ {
118
+ "timestamp": "2026-05-24T10:00:03.766726+08:00",
119
+ "date": "2026-05-24",
120
+ "task_id": "hello-world",
121
+ "action": "update_session_state",
122
+ "result": "ok"
123
+ },
124
+ {
125
+ "timestamp": "2026-05-25T03:00:38.032580+08:00",
126
+ "date": "2026-05-25",
127
+ "task_id": "daily-knowledge",
128
+ "action": "run_script",
129
+ "result": "ok"
130
+ },
131
+ {
132
+ "timestamp": "2026-05-25T10:00:04.318692+08:00",
133
+ "date": "2026-05-25",
134
+ "task_id": "hello-world",
135
+ "action": "update_session_state",
136
+ "result": "ok"
137
+ },
138
+ {
139
+ "timestamp": "2026-05-27T03:00:32.634014+08:00",
140
+ "date": "2026-05-27",
141
+ "task_id": "daily-knowledge",
142
+ "action": "run_script",
143
+ "result": "ok"
144
+ },
145
+ {
146
+ "timestamp": "2026-05-28T03:00:29.897095+08:00",
147
+ "date": "2026-05-28",
148
+ "task_id": "daily-knowledge",
149
+ "action": "run_script",
150
+ "result": "ok"
151
+ },
152
+ {
153
+ "timestamp": "2026-05-28T10:00:22.056116+08:00",
154
+ "date": "2026-05-28",
155
+ "task_id": "daily-todolist",
156
+ "action": "run_script",
157
+ "result": "fail: Script not found: /path/to/your/agent/workspace"
158
+ },
159
+ {
160
+ "timestamp": "2026-06-01T03:00:21.926489+08:00",
161
+ "date": "2026-06-01",
162
+ "task_id": "daily-knowledge",
163
+ "action": "run_script",
164
+ "result": "ok"
165
+ },
166
+ {
167
+ "timestamp": "2026-06-01T05:00:44.106399+08:00",
168
+ "date": "2026-06-01",
169
+ "task_id": "monthly-knowledge",
170
+ "action": "run_script",
171
+ "result": "ok"
172
+ },
173
+ {
174
+ "timestamp": "2026-06-01T10:00:07.446124+08:00",
175
+ "date": "2026-06-01",
176
+ "task_id": "daily-todolist",
177
+ "action": "run_script",
178
+ "result": "fail: Script not found: /path/to/your/.hunqi/agent-soul-framework/scripts/generate-todolist.py"
179
+ },
180
+ {
181
+ "timestamp": "2026-06-02T03:01:23.712758+08:00",
182
+ "date": "2026-06-02",
183
+ "task_id": "daily-knowledge",
184
+ "action": "run_script",
185
+ "result": "ok"
186
+ },
187
+ {
188
+ "timestamp": "2026-06-02T10:00:12.249612+08:00",
189
+ "date": "2026-06-02",
190
+ "task_id": "daily-todolist",
191
+ "action": "run_script",
192
+ "result": "fail: Script not found: /path/to/your/.hunqi/agent-soul-framework/scripts/generate-todolist.py"
193
+ },
194
+ {
195
+ "timestamp": "2026-06-03T03:00:55.437896+08:00",
196
+ "date": "2026-06-03",
197
+ "task_id": "daily-knowledge",
198
+ "action": "run_script",
199
+ "result": "ok"
200
+ },
201
+ {
202
+ "timestamp": "2026-06-03T10:00:06.638413+08:00",
203
+ "date": "2026-06-03",
204
+ "task_id": "daily-todolist",
205
+ "action": "run_script",
206
+ "result": "fail: Script not found: /path/to/your/.hunqi/agent-soul-framework/scripts/generate-todolist.py"
207
+ },
208
+ {
209
+ "timestamp": "2026-06-04T03:01:35.872899+08:00",
210
+ "date": "2026-06-04",
211
+ "task_id": "daily-knowledge",
212
+ "action": "run_script",
213
+ "result": "ok"
214
+ },
215
+ {
216
+ "timestamp": "2026-06-04T10:00:06.913856+08:00",
217
+ "date": "2026-06-04",
218
+ "task_id": "daily-todolist",
219
+ "action": "run_script",
220
+ "result": "fail: Script not found: /path/to/your/.hunqi/agent-soul-framework/scripts/generate-todolist.py"
221
+ },
222
+ {
223
+ "timestamp": "2026-06-05T03:01:13.010335+08:00",
224
+ "date": "2026-06-05",
225
+ "task_id": "daily-knowledge",
226
+ "action": "run_script",
227
+ "result": "ok"
228
+ },
229
+ {
230
+ "timestamp": "2026-06-05T10:00:06.957247+08:00",
231
+ "date": "2026-06-05",
232
+ "task_id": "daily-todolist",
233
+ "action": "run_script",
234
+ "result": "fail: Script not found: /path/to/your/.hunqi/agent-soul-framework/scripts/generate-todolist.py"
235
+ },
236
+ {
237
+ "timestamp": "2026-06-06T03:00:35.687620+08:00",
238
+ "date": "2026-06-06",
239
+ "task_id": "daily-knowledge",
240
+ "action": "run_script",
241
+ "result": "ok"
242
+ },
243
+ {
244
+ "timestamp": "2026-06-07T03:00:26.023416+08:00",
245
+ "date": "2026-06-07",
246
+ "task_id": "daily-knowledge",
247
+ "action": "run_script",
248
+ "result": "ok"
249
+ },
250
+ {
251
+ "timestamp": "2026-06-07T04:00:15.665542+08:00",
252
+ "date": "2026-06-07",
253
+ "task_id": "weekly-knowledge",
254
+ "action": "run_script",
255
+ "result": "ok"
256
+ },
257
+ {
258
+ "timestamp": "2026-06-08T03:00:26.992284+08:00",
259
+ "date": "2026-06-08",
260
+ "task_id": "daily-knowledge",
261
+ "action": "run_script",
262
+ "result": "ok"
263
+ },
264
+ {
265
+ "timestamp": "2026-06-09T03:00:30.481167+08:00",
266
+ "date": "2026-06-09",
267
+ "task_id": "daily-knowledge",
268
+ "action": "run_script",
269
+ "result": "ok"
270
+ }
271
+ ]
272
+ }
@@ -0,0 +1,21 @@
1
+ #!/bin/bash
2
+ # 魂器心跳任务 wrapper — TypeScript 核心版
3
+ # 由 crontab 调用
4
+
5
+ SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
6
+ cd "$SCRIPT_DIR" || exit 1
7
+
8
+ # 加载 .env
9
+ if [ -f ".env" ]; then
10
+ set -a && source ".env" && set +a
11
+ fi
12
+
13
+ # 优先使用本地 hunqi-heartbeat,回退到全局命令
14
+ if [ -f "node_modules/.bin/hunqi-heartbeat" ]; then
15
+ ./node_modules/.bin/hunqi-heartbeat >> heartbeat/runner.log 2>&1
16
+ elif command -v hunqi-heartbeat &>/dev/null; then
17
+ hunqi-heartbeat >> heartbeat/runner.log 2>&1
18
+ else
19
+ echo "未找到 hunqi-heartbeat,请确保 @neomei/agent-soul-framework 已安装" >&2
20
+ exit 1
21
+ fi
package/hunqi.sh ADDED
@@ -0,0 +1,68 @@
1
+ #!/bin/bash
2
+ # hunqi.sh - 魂器启动脚本
3
+
4
+ echo "🚀 启动魂器(Agent Soul Framework)..."
5
+
6
+ # 进入项目目录
7
+ cd "$(dirname "$0")"
8
+
9
+ # 加载环境变量
10
+ if [ -f .env ]; then
11
+ set -a && source .env && set +a
12
+ fi
13
+
14
+ # 激活虚拟环境
15
+ if [ -d .venv ]; then
16
+ source .venv/bin/activate
17
+ fi
18
+
19
+ echo "✅ 环境准备完成"
20
+ echo "📖 身份:审宝,28岁专业审计师"
21
+ echo ""
22
+
23
+ # CLI 通道默认权限标记(readonly)
24
+ export HUNQI_CHANNEL="cli"
25
+ export HUNQI_PERMISSION="readonly"
26
+
27
+ # 显示用法
28
+ echo "启动方式:"
29
+ echo " 1. 交互模式: ./hunqi.sh interactive"
30
+ echo " 2. 单条测试: ./hunqi.sh run '你是谁?'"
31
+ echo ""
32
+
33
+ # 检查 opencode run 是否可用(已知 bug #8502)
34
+ _opencode_run_available() {
35
+ opencode run --help >/dev/null 2>&1
36
+ [ $? -eq 0 ]
37
+ }
38
+
39
+ if [ "$1" == "run" ] && [ -n "$2" ]; then
40
+ # 单条模式 - 因 opencode run 已知 bug 暂时无法使用
41
+ # 临时 workaround:启动 TUI 并提示用户
42
+ echo "⚠️ 单条模式 (./hunqi.sh run) 因 opencode bug 暂时不可用。"
43
+ echo " 请改用交互模式:"
44
+ echo ""
45
+ echo " ./hunqi.sh interactive"
46
+ echo ""
47
+ echo " 然后在 TUI 中输入: $2"
48
+ echo ""
49
+ echo " 或直接启动 TUI:opencode ."
50
+ exit 1
51
+
52
+ elif [ "$1" == "interactive" ]; then
53
+ # 交互模式 - @neomei/agentsoul 插件会自动注入灵魂,无需 stdin
54
+ echo "🎯 启动交互模式..."
55
+ echo ""
56
+ echo "💡 @neomei/agentsoul 插件会在每次 LLM 调用时自动注入灵魂"
57
+ echo " Agent会记得自己是谁 ✨"
58
+ echo ""
59
+ if [ -t 0 ]; then
60
+ read -p "按回车键启动 TUI..."
61
+ fi
62
+ opencode .
63
+
64
+ else
65
+ echo "用法:"
66
+ echo " ./hunqi.sh run '你是谁?' # 单条测试(暂时不可用)"
67
+ echo " ./hunqi.sh interactive # 交互模式(TUI,推荐)"
68
+ fi
package/install.sh ADDED
@@ -0,0 +1,301 @@
1
+ #!/usr/bin/env bash
2
+ # 魂器一键安装脚本
3
+ # 用法: curl -fsSL https://raw.githubusercontent.com/NeoMei/agent-soul-framework/master/install.sh | bash
4
+ set -e
5
+
6
+ # 错误处理:打印行号和命令
7
+ trap 'echo "❌ 安装脚本在第 ${LINENO} 行出错: $BASH_COMMAND" >&2; exit 1' ERR
8
+
9
+ # 警告:如果通过管道执行且需要交互式输入,建议先下载再执行
10
+ if [ ! -t 0 ]; then
11
+ echo "⚠️ 检测到通过管道执行 (curl | bash)。建议先下载再执行以避免下载中断:"
12
+ echo " curl -fsSL https://raw.githubusercontent.com/NeoMei/agent-soul-framework/master/install.sh -o install.sh"
13
+ echo " bash install.sh"
14
+ echo ""
15
+ sleep 2
16
+ fi
17
+
18
+ REPO="https://github.com/NeoMei/agent-soul-framework.git"
19
+ HUNQI_HOME="${HOME}/.hunqi"
20
+
21
+ echo "🔮 魂器 · Agent Soul Framework 安装脚本"
22
+ echo ""
23
+
24
+ # 检查 Node.js
25
+ if ! command -v node &>/dev/null; then
26
+ echo "❌ 未检测到 Node.js,请先安装 Node.js ≥ 20"
27
+ exit 1
28
+ fi
29
+ NODE_VERSION=$(node -v | sed 's/v//')
30
+ NODE_MAJOR=$(echo "$NODE_VERSION" | cut -d. -f1)
31
+ if [ "$NODE_MAJOR" -lt 20 ]; then
32
+ echo "❌ Node.js 版本过低: $NODE_VERSION,需要 ≥ 20"
33
+ exit 1
34
+ fi
35
+ echo "✅ Node.js $NODE_VERSION"
36
+
37
+ # 检查 OpenCode 引擎
38
+ if ! command -v opencode &>/dev/null; then
39
+ echo ""
40
+ echo "⚠️ 未检测到 OpenCode 引擎"
41
+ echo " hunqi-core 服务依赖 opencode,必须安装才能运行"
42
+ echo ""
43
+ if [ -t 0 ] || [ -e /dev/tty ]; then
44
+ read -p "是否自动安装 OpenCode?(Y/n) " -n 1 -r < /dev/tty
45
+ echo
46
+ if [[ ! $REPLY =~ ^[Nn]$ ]]; then
47
+ echo " 正在安装 opencode-ai..."
48
+ npm install -g opencode-ai || {
49
+ echo "❌ OpenCode 安装失败"
50
+ echo " 请手动运行: npm install -g opencode-ai"
51
+ exit 1
52
+ }
53
+ echo "✅ OpenCode 已安装"
54
+ else
55
+ echo "⚠️ 跳过 OpenCode 安装"
56
+ echo " 请注意:hunqi-core 服务将无法启动"
57
+ echo " 后续手动安装: npm install -g opencode-ai"
58
+ fi
59
+ else
60
+ echo "⚠️ 非交互式环境,跳过 OpenCode 安装"
61
+ echo " 请手动运行: npm install -g opencode-ai"
62
+ fi
63
+ else
64
+ echo "✅ OpenCode 已安装"
65
+ fi
66
+
67
+ # 检查 npm 全局安装权限
68
+ if ! npm prefix -g &>/dev/null; then
69
+ echo "❌ npm 全局目录不可写,请检查权限或配置 npm prefix"
70
+ exit 1
71
+ fi
72
+
73
+ # Python(仅在使用可选技能包时需要)
74
+ if command -v python3 &>/dev/null; then
75
+ echo "✅ Python $(python3 --version 2>&1 | cut -d' ' -f2)(可选技能包需要)"
76
+ else
77
+ echo "⚠️ Python 未安装(仅影响可选技能包 @neomei/agent-soul-skills)"
78
+ fi
79
+
80
+ # 检查磁盘空间(至少 500MB)
81
+ AVAILABLE_MB=$(df -m "$HOME" 2>/dev/null | awk 'NR==2 {print $4}')
82
+ if [ -n "$AVAILABLE_MB" ] && [ "$AVAILABLE_MB" -lt 500 ]; then
83
+ echo "❌ 磁盘空间不足: ${AVAILABLE_MB}MB 可用,至少需要 500MB"
84
+ exit 1
85
+ fi
86
+
87
+ # 检查端口占用
88
+ if command -v ss &>/dev/null && ss -tlnp 2>/dev/null | grep -q ":19876 "; then
89
+ echo "⚠️ 端口 19876 已被占用,安装完成后请确认无冲突"
90
+ fi
91
+
92
+ # 下载 + 构建魂器
93
+ echo ""
94
+ echo "📦 安装魂器核心框架..."
95
+ rm -rf "${HUNQI_HOME}/agent-soul-framework"
96
+ git clone --depth 1 "${REPO}" "${HUNQI_HOME}/agent-soul-framework"
97
+
98
+ cd "${HUNQI_HOME}/agent-soul-framework"
99
+ echo " 安装 npm 依赖..."
100
+ npm install || { echo "❌ npm install 失败"; exit 1; }
101
+ echo " 构建项目..."
102
+ npm run build || { echo "❌ npm run build 失败"; exit 1; }
103
+
104
+ # 全局链接核心框架
105
+ npm uninstall -g @neomei/agent-soul-framework @neomei/agent-soul 2>/dev/null || true
106
+ cd "${HUNQI_HOME}/agent-soul-framework/packages/agent-soul-framework"
107
+ npm link || { echo "❌ npm link 核心框架失败"; exit 1; }
108
+ cd "${HUNQI_HOME}/agent-soul-framework"
109
+
110
+ # 安装核心框架(channel 插件由用户按需单独安装)
111
+ echo "📦 安装魂器核心框架..."
112
+ npm install -g @neomei/agent-soul-framework@latest || {
113
+ echo "❌ 核心框架安装失败"
114
+ echo " 请检查网络连接和 npm registry 可访问性"
115
+ exit 1
116
+ }
117
+
118
+ # 全局链接核心框架(开发/本地 clone 模式)
119
+ # cd "${HUNQI_HOME}/agent-soul-framework/packages/agent-soul-framework"
120
+ # npm link || { echo "❌ npm link 核心框架失败"; exit 1; }
121
+ # cd "${HUNQI_HOME}/agent-soul-framework"
122
+
123
+ # 可选:如需飞书/企微通道,请手动安装:
124
+ # npm install -g @neomei/opencode-feishu @neomei/opencode-qiwei
125
+
126
+ # 初始化默认项目
127
+ echo "📝 初始化配置..."
128
+ mkdir -p "${HUNQI_HOME}"/{soul,skills,knowledge,memory/{short-term,long-term},.opencode}
129
+
130
+ # 复制模板文件(使用 while read 处理文件名中的空格)
131
+ find "${HUNQI_HOME}/agent-soul-framework/packages/agent-soul-framework" -name "*.example" -type f 2>/dev/null | while IFS= read -r f; do
132
+ rel="${f#${HUNQI_HOME}/agent-soul-framework/packages/agent-soul-framework/}"
133
+ target="${HUNQI_HOME}/${rel%.example}"
134
+ if [ ! -f "$target" ]; then
135
+ mkdir -p "$(dirname "$target")"
136
+ cp "$f" "$target"
137
+ fi
138
+ done
139
+
140
+ # 复制技能包(先清理再复制,避免嵌套目录)
141
+ if [ -d "${HUNQI_HOME}/skills" ]; then
142
+ rm -rf "${HUNQI_HOME}/skills"
143
+ fi
144
+ cp -r "${HUNQI_HOME}/agent-soul-framework/packages/agent-soul-skills/skills" "${HUNQI_HOME}/skills"
145
+
146
+ # .env(如果已存在则保留,避免覆盖用户配置)
147
+ ENV_FILE="${HUNQI_HOME}/.env"
148
+ if [ ! -f "$ENV_FILE" ]; then
149
+ cat > "$ENV_FILE" << 'EOF'
150
+ # 魂器环境配置
151
+ DASHSCOPE_API_KEY=
152
+ FEISHU_APP_ID=
153
+ FEISHU_APP_SECRET=
154
+ JIMENG_API_KEY=
155
+ EOF
156
+ fi
157
+
158
+ # 同时创建项目目录下的 .env(供脚本直接加载)
159
+ PROJECT_ENV="${HUNQI_HOME}/agent-soul-framework/.env"
160
+ if [ ! -f "$PROJECT_ENV" ]; then
161
+ cp "$ENV_FILE" "$PROJECT_ENV"
162
+ fi
163
+
164
+ # 首次心跳
165
+ echo "💓 初始化记忆系统..."
166
+ cd "${HUNQI_HOME}"
167
+ if command -v hunqi-heartbeat &>/dev/null; then
168
+ hunqi-heartbeat || {
169
+ echo "⚠️ 心跳初始化失败(非致命,可后续手动运行)"
170
+ }
171
+ else
172
+ echo "⚠️ hunqi-heartbeat 未找到,跳过心跳初始化"
173
+ fi
174
+
175
+ # crontab
176
+ if ! crontab -l 2>/dev/null | grep -q "heartbeat_wrapper"; then
177
+ (crontab -l 2>/dev/null || true; echo "*/30 * * * * cd ${HUNQI_HOME} && ${HUNQI_HOME}/agent-soul-framework/packages/agent-soul-framework/heartbeat_wrapper.sh") | crontab -
178
+ fi
179
+
180
+ # systemd 服务(可选)
181
+ echo ""
182
+ if [ "${AUTO_SYSTEMD:-0}" = "1" ]; then
183
+ echo "🤖 自动模式: 安装 systemd 服务..."
184
+ REPLY="y"
185
+ else
186
+ read -p "是否安装 systemd 服务(支持开机启动和挂起/恢复自动恢复)?(Y/n) " -n 1 -r < /dev/tty
187
+ echo
188
+ fi
189
+ if [[ ! $REPLY =~ ^[Nn]$ ]]; then
190
+ cd "${HUNQI_HOME}/agent-soul-framework/packages/agent-soul-framework"
191
+ if [ -f "connectors/feishu/systemd/install-systemd.sh" ]; then
192
+ sudo bash connectors/feishu/systemd/install-systemd.sh
193
+ echo "✅ systemd 服务已安装"
194
+ echo " 启动核心: sudo systemctl start hunqi-core@\$USER"
195
+ echo " 启动飞书: sudo systemctl start channel-feishu@\$USER"
196
+ echo " 查看日志: sudo journalctl -u hunqi-core@\$USER -f"
197
+ else
198
+ echo "⚠️ systemd 安装脚本不存在,跳过"
199
+ fi
200
+ fi
201
+
202
+ # 配置向导(统一配置 .env + 连接器)
203
+ echo ""
204
+ if [ "${AUTO_WIZARD:-0}" = "1" ]; then
205
+ # 自动向导模式:
206
+ # - 有 tty 时,交互式运行(支持飞书扫码配置)
207
+ # - 无 tty 时(curl | bash),提示用户下载后单独运行
208
+ if [ -t 0 ]; then
209
+ echo "🤖 自动模式: 运行配置向导..."
210
+ REPLY="y"
211
+ else
212
+ echo "⚠️ 检测到管道执行,无法交互配置飞书"
213
+ echo " 如需完整配置(含飞书扫码),请运行:"
214
+ echo ""
215
+ echo " curl -fsSL https://raw.githubusercontent.com/NeoMei/agent-soul-framework/master/install.sh -o install.sh"
216
+ echo " bash install.sh"
217
+ echo ""
218
+ REPLY="n"
219
+ fi
220
+ else
221
+ echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
222
+ echo ""
223
+ read -p "是否运行初始配置向导(设置 API Key、飞书/企微连接)?(Y/n) " -n 1 -r < /dev/tty
224
+ echo
225
+ fi
226
+ if [[ ! $REPLY =~ ^[Nn]$ ]]; then
227
+ cd "${HUNQI_HOME}/agent-soul-framework/packages/agent-soul-framework"
228
+ if [ -f "setup-wizard.sh" ]; then
229
+ if [ "${AUTO_WIZARD:-0}" = "1" ] && [ ! -t 0 ]; then
230
+ # 管道模式下以非交互方式运行(只启动服务,不配置连接器)
231
+ NONINTERACTIVE=1 bash setup-wizard.sh
232
+ else
233
+ # 有 tty 时交互式运行(完整的配置向导,含飞书扫码)
234
+ bash setup-wizard.sh
235
+ fi
236
+ fi
237
+ fi
238
+
239
+ # 安装后验证
240
+ echo ""
241
+ echo "🔍 验证安装..."
242
+ INSTALL_OK=1
243
+ if command -v hunqi &>/dev/null; then
244
+ echo " ✅ hunqi 命令可用"
245
+ else
246
+ echo " ❌ hunqi 命令不可用(可能需要重新打开终端或 source ~/.bashrc)"
247
+ INSTALL_OK=0
248
+ fi
249
+
250
+ # channel 插件为可选组件,不影响核心安装成功判定
251
+ if command -v opencode-feishu &>/dev/null; then
252
+ echo " ✅ opencode-feishu 可用(可选 channel 插件)"
253
+ else
254
+ echo " ℹ️ opencode-feishu 未安装,如需飞书通道请运行: npm install -g @neomei/opencode-feishu"
255
+ fi
256
+ if command -v opencode-qiwei &>/dev/null; then
257
+ echo " ✅ opencode-qiwei 可用(可选 channel 插件)"
258
+ else
259
+ echo " ℹ️ opencode-qiwei 未安装,如需企微通道请运行: npm install -g @neomei/opencode-qiwei"
260
+ fi
261
+
262
+ echo ""
263
+ if [ "$INSTALL_OK" -eq 1 ]; then
264
+ echo "✅ 安装完成!"
265
+ else
266
+ echo "⚠️ 安装完成,但部分组件需要手动排查"
267
+ fi
268
+ echo ""
269
+ if [ -f "/etc/systemd/system/hunqi-core@${USER}.service" ]; then
270
+ echo " ✅ systemd 服务已安装,推荐用法:"
271
+ echo " sudo systemctl start hunqi-core@${USER} # 启动核心"
272
+ echo " sudo systemctl start channel-feishu@${USER} # 启动飞书"
273
+ echo " sudo systemctl status channel-feishu@${USER} # 查看状态"
274
+ echo ""
275
+ echo " 前端交互(需要图形界面):"
276
+ echo " hunqi start # 一键启动全部服务(前台)"
277
+ else
278
+ echo " 现在运行:"
279
+ echo " hunqi start # 一键启动本地服务"
280
+ fi
281
+ echo ""
282
+ echo " 可选 channel 插件(按需安装):"
283
+ echo " npm install -g @neomei/opencode-feishu # 飞书通道"
284
+ echo " npm install -g @neomei/opencode-qiwei # 企业微信通道"
285
+ echo ""
286
+ echo " 连接器配置:"
287
+ echo " opencode-feishu setup # 飞书配置向导"
288
+ echo " opencode-feishu doctor # 检查飞书连接"
289
+ echo " opencode-qiwei setup # 企微配置向导"
290
+ echo ""
291
+ if [ "${BASHRC_UPDATED:-0}" -eq 1 ]; then
292
+ echo " 💡 PATH 已更新,请运行: source ~/.bashrc"
293
+ echo ""
294
+ fi
295
+ if ! command -v opencode &>/dev/null; then
296
+ echo " ⚠️ OpenCode 未安装,hunqi-core 服务将无法启动"
297
+ echo " 安装命令: npm install -g opencode-ai"
298
+ echo ""
299
+ fi
300
+ echo " 卸载:"
301
+ echo " curl -fsSL https://raw.githubusercontent.com/NeoMei/agent-soul-framework/master/uninstall.sh | bash"
@@ -0,0 +1,6 @@
1
+ # body - 知识索引
2
+
3
+ > Agentbody类知识导航
4
+
5
+ ## 文件列表
6
+
@@ -0,0 +1,6 @@
1
+ # emotion - 知识索引
2
+
3
+ > Agentemotion类知识导航
4
+
5
+ ## 文件列表
6
+
@@ -0,0 +1,6 @@
1
+ # evolution - 知识索引
2
+
3
+ > Agentevolution类知识导航
4
+
5
+ ## 文件列表
6
+