@bolloon/bolloon-agent 0.3.52 → 0.4.2

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 (225) hide show
  1. package/README.md +135 -135
  2. package/bin/bolloon-cli.cjs +183 -183
  3. package/bin/bolloon.cjs +0 -0
  4. package/bin/bolloon.js +157 -0
  5. package/dist/agents/constraint-layer.js +19 -19
  6. package/dist/agents/judgment-protocol.js +14 -14
  7. package/dist/agents/loop-review.js +21 -0
  8. package/dist/agents/pi-sdk-tools.js +86 -2
  9. package/dist/agents/pi-sdk-types.js +12 -12
  10. package/dist/agents/pi-sdk.js +90 -90
  11. package/dist/agents/shell-guard.js +22 -1
  12. package/dist/agents/skill-organizer.js +19 -19
  13. package/dist/agents/verify-recipe.js +84 -0
  14. package/dist/agents/workflow-pivot-loop.js +101 -13
  15. package/dist/bollharness/src/scripts/deploy-guard.js +8 -8
  16. package/dist/bollharness-integration/context-router-judgment.js +4 -4
  17. package/dist/bollharness-integration/context-router.js +292 -292
  18. package/dist/bollharness-integration/gate-state-machine.js +13 -13
  19. package/dist/bollharness-integration/llm-judgment-engine.js +134 -134
  20. package/dist/bollharness-integration/skill-adapter.js +21 -21
  21. package/dist/bootstrap/chat-archiver.js +14 -14
  22. package/dist/bootstrap/context-os.js +50 -40
  23. package/dist/bootstrap/memory-compressor.js +13 -13
  24. package/dist/cli-entry.js +36 -36
  25. package/dist/context-compaction/auto-compact.js +7 -7
  26. package/dist/cron/cron-parser.js +142 -0
  27. package/dist/cron/jobs-store.js +96 -0
  28. package/dist/cron/scheduler.js +72 -0
  29. package/dist/cron/suggestion-catalog.js +41 -0
  30. package/dist/cron/suggestions-command.js +96 -0
  31. package/dist/cron/suggestions.js +110 -0
  32. package/dist/electron/first-run.js +54 -54
  33. package/dist/electron-build/electron/first-run.js +54 -54
  34. package/dist/electron-preload.js.map +1 -1
  35. package/dist/electron.js.map +1 -1
  36. package/dist/external-engines/delegate-handle.js +70 -0
  37. package/dist/external-engines/delegate.js +24 -3
  38. package/dist/index.js +219 -112
  39. package/dist/llm/error-lessons.js +69 -0
  40. package/dist/llm/llm-judgment-client.js +102 -102
  41. package/dist/llm/pi-ai.js +86 -48
  42. package/dist/llm/system-prompt/layers/channel/human-async.md +41 -41
  43. package/dist/llm/system-prompt/layers/channel/local.md +14 -14
  44. package/dist/llm/system-prompt/layers/channel/p2p-agent.md +18 -18
  45. package/dist/llm/system-prompt/layers/channel/p2p-peer-sync.md +51 -51
  46. package/dist/llm/system-prompt/layers/channel/p2p-proactive.md +43 -43
  47. package/dist/llm/system-prompt/layers/channel/p2p-visitor.md +19 -19
  48. package/dist/llm/system-prompt/layers/channel/session-handoff.md +61 -61
  49. package/dist/llm/system-prompt/layers/core/artifacts_storage.md +89 -89
  50. package/dist/llm/system-prompt/layers/core/evenhandedness.md +21 -21
  51. package/dist/llm/system-prompt/layers/core/external-engagement.md +73 -73
  52. package/dist/llm/system-prompt/layers/core/hibs_reminders.md +15 -15
  53. package/dist/llm/system-prompt/layers/core/identity.md +48 -48
  54. package/dist/llm/system-prompt/layers/core/knowledge.md +17 -17
  55. package/dist/llm/system-prompt/layers/core/memory_system.md +12 -12
  56. package/dist/llm/system-prompt/layers/core/network_filesystem.md +28 -28
  57. package/dist/llm/system-prompt/layers/core/refusal.md +37 -37
  58. package/dist/llm/system-prompt/layers/core/tone.md +31 -31
  59. package/dist/llm/system-prompt/layers/core/tools.thin.md +13 -13
  60. package/dist/llm/system-prompt/layers/core/wellbeing.md +41 -41
  61. package/dist/llm/system-prompt/layers/role/architect.md +20 -20
  62. package/dist/llm/system-prompt/layers/role/expert.md +19 -19
  63. package/dist/llm/system-prompt/layers/role/implementer.md +15 -15
  64. package/dist/llm/system-prompt/layers/role/security.md +15 -15
  65. package/dist/llm/system-prompt/layers/tool/artifacts.md +72 -72
  66. package/dist/llm/system-prompt/layers/tool/bash.md +25 -25
  67. package/dist/llm/system-prompt/layers/tool/goal_handoff.md +77 -77
  68. package/dist/llm/system-prompt/layers/tool/hibs_api.md +171 -171
  69. package/dist/llm/system-prompt/layers/tool/image_search.md +70 -70
  70. package/dist/llm/system-prompt/layers/tool/manifest.md +89 -89
  71. package/dist/llm/system-prompt/layers/tool/mcp_apps.md +53 -53
  72. package/dist/llm/system-prompt/layers/tool/p2p_request.md +61 -61
  73. package/dist/llm/system-prompt/layers/tool/web_search.md +83 -83
  74. package/dist/llm/system-prompt/registry.js +9 -1
  75. package/dist/llm/tool-manifest/ask_user_input.js +1 -1
  76. package/dist/llm/tool-manifest/bash.js +3 -3
  77. package/dist/llm/tool-manifest/create_file.js +4 -4
  78. package/dist/llm/tool-manifest/fetch_sports_data.js +3 -3
  79. package/dist/llm/tool-manifest/image_search.js +2 -2
  80. package/dist/llm/tool-manifest/index.js +0 -59
  81. package/dist/llm/tool-manifest/mcp.js +2 -2
  82. package/dist/llm/tool-manifest/message_compose.js +3 -3
  83. package/dist/llm/tool-manifest/places.js +2 -2
  84. package/dist/llm/tool-manifest/present_files.js +1 -1
  85. package/dist/llm/tool-manifest/recipe.js +2 -2
  86. package/dist/llm/tool-manifest/str_replace.js +5 -5
  87. package/dist/llm/tool-manifest/view.js +3 -3
  88. package/dist/llm/tool-manifest/weather.js +4 -4
  89. package/dist/llm/tool-manifest/web.js +4 -4
  90. package/dist/locales/en.js +28 -0
  91. package/dist/locales/zh.js +26 -0
  92. package/dist/pi-ecosystem-colony/index.js +365 -0
  93. package/dist/pi-ecosystem-judgment/causal-judge.js +51 -51
  94. package/dist/pi-ecosystem-judgment/distill-prompt.js +42 -42
  95. package/dist/pi-ecosystem-judgment/distillation.js +14 -14
  96. package/dist/pi-ecosystem-judgment/monitor-gate.js +28 -28
  97. package/dist/pi-ecosystem-judgment/value-injection.js +102 -102
  98. package/dist/security/context-router-tool.js +15 -15
  99. package/dist/social/ant-colony/AdaptiveHeartbeat.js +101 -0
  100. package/dist/social/ant-colony/PheromoneEngine.js +227 -0
  101. package/dist/social/ant-colony/index.js +6 -0
  102. package/dist/social/ant-colony/types.js +24 -0
  103. package/dist/storage/trajectory.js +101 -0
  104. package/dist/test/ai-judgment-test.js +80 -0
  105. package/dist/test/bollharness-integration.test.js +318 -0
  106. package/dist/test/channel-agent-multi-dialogue.js +205 -0
  107. package/dist/test/channel-heartbeat-agent-test.js +201 -0
  108. package/dist/test/constraint-layer.test.js +164 -0
  109. package/dist/test/diap-identity-test.js +172 -0
  110. package/dist/test/diap-quick-test.js +62 -0
  111. package/dist/test/global-shared-context.test.js +315 -0
  112. package/dist/test/harness-judgment-injection.test.js +246 -0
  113. package/dist/test/harness-workflow-integrator-test.js +228 -0
  114. package/dist/test/human-value-store.test.js +243 -0
  115. package/dist/test/hybrid-integration-test.js +118 -0
  116. package/dist/test/hybrid-messenger-verify.js +55 -0
  117. package/dist/test/iroh-bistream-debug.js +38 -0
  118. package/dist/test/iroh-communication.test.js +66 -0
  119. package/dist/test/iroh-debug-test.js +57 -0
  120. package/dist/test/iroh-diap-test.js +71 -0
  121. package/dist/test/iroh-direct-connect.js +55 -0
  122. package/dist/test/iroh-e2e-fixed.js +89 -0
  123. package/dist/test/iroh-e2e-same-process.js +63 -0
  124. package/dist/test/iroh-e2e.js +66 -0
  125. package/dist/test/iroh-final-e2e.js +72 -0
  126. package/dist/test/iroh-relay-test.js +37 -0
  127. package/dist/test/iroh-simple-test.js +41 -0
  128. package/dist/test/iroh-transport-verify.js +54 -0
  129. package/dist/test/iroh-transport.test.js +37 -0
  130. package/dist/test/iroh-two-nodes.js +70 -0
  131. package/dist/test/iroh-verify.js +44 -0
  132. package/dist/test/judgment-decision.test.js +219 -0
  133. package/dist/test/llm-judgment-integration.test.js +220 -0
  134. package/dist/test/p2p-agent-complex-dialogue.js +385 -0
  135. package/dist/test/p2p-agent-dialogue.js +341 -0
  136. package/dist/test/p2p-agent-full-bidirectional.js +510 -0
  137. package/dist/test/p2p-agent-harness-flow.js +437 -0
  138. package/dist/test/p2p-agent-harness-single.js +143 -0
  139. package/dist/test/p2p-ai-dialogue-test.js +318 -0
  140. package/dist/test/p2p-cid-connect-test.js +195 -0
  141. package/dist/test/p2p-connect-receiver.js +69 -0
  142. package/dist/test/p2p-doc-transfer.js +110 -0
  143. package/dist/test/p2p-identity-page-test.js +77 -0
  144. package/dist/test/p2p-iroh-test.js +171 -0
  145. package/dist/test/p2p-minimal-test.js +241 -0
  146. package/dist/test/p2p-node-1.js +148 -0
  147. package/dist/test/p2p-node-2.js +148 -0
  148. package/dist/test/p2p-server.js +281 -0
  149. package/dist/test/p2p-two-nodes-test.js +438 -0
  150. package/dist/test/pi-sdk.test.js +44 -0
  151. package/dist/test/set-persona.js +40 -0
  152. package/dist/test/simple.test.js +9 -0
  153. package/dist/test/storage-integration.test.js +150 -0
  154. package/dist/test/subagent-manager.test.js +276 -0
  155. package/dist/test/test-gate-flow.test.js +81 -0
  156. package/dist/test/workflow-engine.test.js +87 -0
  157. package/dist/test/workflow-pivot-loop.test.js +246 -0
  158. package/dist/web/api-config.html +779 -779
  159. package/dist/web/client-hearth.js +10 -10
  160. package/dist/web/components/wallet-viem.mjs +118 -118
  161. package/dist/web/delivery-ledger.js +103 -0
  162. package/dist/web/i18n.js +104 -0
  163. package/dist/web/index.html +472 -472
  164. package/dist/web/loop-noise.js +86 -0
  165. package/dist/web/manifest.json +20 -20
  166. package/dist/web/routes-tasks.js +242 -24
  167. package/dist/web/server-sse.js +10 -5
  168. package/dist/web/server-storage.js +111 -0
  169. package/dist/web/server.js +55 -26
  170. package/dist/web/style.css +4946 -4946
  171. package/dist/web/task-breaker.js +18 -0
  172. package/dist/web/task-cancel.js +35 -0
  173. package/dist/web/task-deps.js +36 -0
  174. package/dist/web/task-review.js +27 -0
  175. package/dist/web/task-verify.js +60 -0
  176. package/package.json +196 -196
  177. package/scripts/build-cli.js +215 -215
  178. package/scripts/build-web.ts +130 -130
  179. package/scripts/postinstall.js +152 -152
  180. package/bin/bolloon-daemon.sh +0 -207
  181. package/dist/constraint-runtime/reference_data/archive_surface_snapshot.json +0 -63
  182. package/dist/constraint-runtime/reference_data/commands_snapshot.json +0 -1037
  183. package/dist/constraint-runtime/reference_data/subsystems/assistant.json +0 -8
  184. package/dist/constraint-runtime/reference_data/subsystems/bootstrap.json +0 -8
  185. package/dist/constraint-runtime/reference_data/subsystems/bridge.json +0 -32
  186. package/dist/constraint-runtime/reference_data/subsystems/buddy.json +0 -13
  187. package/dist/constraint-runtime/reference_data/subsystems/cli.json +0 -26
  188. package/dist/constraint-runtime/reference_data/subsystems/components.json +0 -32
  189. package/dist/constraint-runtime/reference_data/subsystems/constants.json +0 -28
  190. package/dist/constraint-runtime/reference_data/subsystems/coordinator.json +0 -8
  191. package/dist/constraint-runtime/reference_data/subsystems/entrypoints.json +0 -15
  192. package/dist/constraint-runtime/reference_data/subsystems/hooks.json +0 -32
  193. package/dist/constraint-runtime/reference_data/subsystems/keybindings.json +0 -21
  194. package/dist/constraint-runtime/reference_data/subsystems/memdir.json +0 -15
  195. package/dist/constraint-runtime/reference_data/subsystems/migrations.json +0 -18
  196. package/dist/constraint-runtime/reference_data/subsystems/moreright.json +0 -8
  197. package/dist/constraint-runtime/reference_data/subsystems/native_ts.json +0 -11
  198. package/dist/constraint-runtime/reference_data/subsystems/outputStyles.json +0 -8
  199. package/dist/constraint-runtime/reference_data/subsystems/plugins.json +0 -9
  200. package/dist/constraint-runtime/reference_data/subsystems/remote.json +0 -11
  201. package/dist/constraint-runtime/reference_data/subsystems/schemas.json +0 -8
  202. package/dist/constraint-runtime/reference_data/subsystems/screens.json +0 -10
  203. package/dist/constraint-runtime/reference_data/subsystems/server.json +0 -10
  204. package/dist/constraint-runtime/reference_data/subsystems/services.json +0 -32
  205. package/dist/constraint-runtime/reference_data/subsystems/skills.json +0 -27
  206. package/dist/constraint-runtime/reference_data/subsystems/state.json +0 -13
  207. package/dist/constraint-runtime/reference_data/subsystems/types.json +0 -18
  208. package/dist/constraint-runtime/reference_data/subsystems/upstreamproxy.json +0 -9
  209. package/dist/constraint-runtime/reference_data/subsystems/utils.json +0 -32
  210. package/dist/constraint-runtime/reference_data/subsystems/vim.json +0 -12
  211. package/dist/constraint-runtime/reference_data/subsystems/voice.json +0 -8
  212. package/dist/constraint-runtime/reference_data/tools_snapshot.json +0 -922
  213. package/dist/electron/config.js.map +0 -1
  214. package/dist/electron/dialogs.js.map +0 -1
  215. package/dist/electron/first-run.js.map +0 -1
  216. package/dist/electron/ipc.js.map +0 -1
  217. package/dist/electron/logger.js.map +0 -1
  218. package/dist/electron/main.js.map +0 -1
  219. package/dist/electron/menu.js.map +0 -1
  220. package/dist/electron/paths.js.map +0 -1
  221. package/dist/electron/server.js.map +0 -1
  222. package/dist/electron/tray.js.map +0 -1
  223. package/dist/electron/window.js.map +0 -1
  224. package/dist/utils/auto-update.js.map +0 -1
  225. package/dist/web/client.js.map +0 -7
@@ -2397,19 +2397,19 @@ export async function createWebServer(port = 3000, options = {}) {
2397
2397
  .map((p) => `- ${p.name || p.publicKey.slice(0, 8)} (pk=${p.publicKey.slice(0, 12)}…): 渠道[${p.channels.map((c) => c.name).join(', ') || '无'}]`)
2398
2398
  .join('\n');
2399
2399
  const goalDesc = ctx.goal ? `当前目标: ${ctx.goal.description} (已发起 ${ctx.goal.initiationsUsed}/${ctx.goal.maxInitiations}, 有效回复 ${ctx.goal.effectfulReplies}/${ctx.goal.effectThreshold})` : '当前无明确目标';
2400
- const prompt = `你是智能体「${ctx.self.name || '本地智能体'}」。你通过 P2P 网络认识以下其他智能体:
2401
- ${peerLines}
2402
-
2403
- ${goalDesc}
2404
-
2405
- 规则:
2406
- 1. 社交是为了达成上述目标, 不是闲聊。只在你有真正有价值的信息要分享/询问、且能推进目标时才主动发起。
2407
- 2. 不要重复最近已经聊过的话题, 不要每条心跳都发消息, 保持克制。
2408
- 3. 如果目标已经通过已有交流达成 (或你认为无需再聊), 输出 {"initiate": false, "goalAchieved": true}。
2409
- 4. 如果决定发起, 选一个最合适的目标渠道 (用对方渠道的真实 id)。
2410
-
2411
- 现在是否要主动联系其中某个智能体? 只输出一个 JSON 对象, 不要任何其他文字:
2412
- {"initiate": true 或 false, "goalAchieved": true 或 false, "targetPeerPublicKey": "对方 pk", "targetChannelId": "对方渠道 id", "message": "你要说的话"}
2400
+ const prompt = `你是智能体「${ctx.self.name || '本地智能体'}」。你通过 P2P 网络认识以下其他智能体:
2401
+ ${peerLines}
2402
+
2403
+ ${goalDesc}
2404
+
2405
+ 规则:
2406
+ 1. 社交是为了达成上述目标, 不是闲聊。只在你有真正有价值的信息要分享/询问、且能推进目标时才主动发起。
2407
+ 2. 不要重复最近已经聊过的话题, 不要每条心跳都发消息, 保持克制。
2408
+ 3. 如果目标已经通过已有交流达成 (或你认为无需再聊), 输出 {"initiate": false, "goalAchieved": true}。
2409
+ 4. 如果决定发起, 选一个最合适的目标渠道 (用对方渠道的真实 id)。
2410
+
2411
+ 现在是否要主动联系其中某个智能体? 只输出一个 JSON 对象, 不要任何其他文字:
2412
+ {"initiate": true 或 false, "goalAchieved": true 或 false, "targetPeerPublicKey": "对方 pk", "targetChannelId": "对方渠道 id", "message": "你要说的话"}
2413
2413
  若不想发起, 输出 {"initiate": false}。`;
2414
2414
  const raw = await agent.promptStream(prompt, () => { }, undefined, local.id);
2415
2415
  const m = raw.match(/\{[\s\S]*\}/);
@@ -7226,20 +7226,49 @@ ${goalDesc}
7226
7226
  console.log('服务器已监听');
7227
7227
  // 安装 chat bus -> SSE 桥 (供前端 inbox UI 实时刷新)
7228
7228
  void installChatBusHook();
7229
- // 2026-06-16: ping 改为 data: {"type":"ping"} 之前是 SSE 注释格式 (: ping\n\n),
7230
- // 浏览器 EventSource 不触发 onmessage, 客户端 60s 阈值 (现已 30s) 误判死链.
7231
- // 改后前端 onmessage 收到 ping 就重置 lastEventTime, 真死链才 30s 后重建.
7232
- setInterval(() => {
7233
- for (const client of sseClients) {
7234
- try {
7235
- client.res.write('data: {"type":"ping"}\n\n');
7236
- }
7237
- catch (err) {
7238
- // socket 已断, 跳过 — client 端 onerror 会触发重连
7239
- console.warn('[SSE ping] write 失败, 跳过该客户端:', err.message);
7229
+ // 2026-08-11 (Hermes release_stale_claims): 任务认领 TTL 过期释放
7230
+ // 60s 周期清扫 + 启动即清一次 (重启后进程内锁已丢, 磁盘上 running+过期的任务要回收)
7231
+ void (async () => {
7232
+ const { releaseStaleClaims } = await import('./server-storage.js');
7233
+ const n0 = await releaseStaleClaims();
7234
+ if (n0 > 0)
7235
+ console.warn(`[task-claim] 启动回收 ${n0} 个过期认领任务`);
7236
+ setInterval(() => {
7237
+ void releaseStaleClaims().then((n) => {
7238
+ if (n > 0)
7239
+ console.warn(`[task-claim] 定时回收 ${n} 个过期认领任务`);
7240
+ });
7241
+ }, 60_000);
7242
+ })();
7243
+ // 2026-08-11 (Hermes delivery_ledger + channel_directory 模式): SSE 投递账本 —
7244
+ // ping/广播写账本 (attempting→delivered/failed), 同类错误窗口内只 warn 一次 (防刷屏)
7245
+ void (async () => {
7246
+ const { DeliveryLedger } = await import('./delivery-ledger.js');
7247
+ const deliveryLedger = new DeliveryLedger();
7248
+ // 2026-06-16: ping 改为 data: {"type":"ping"} — 之前是 SSE 注释格式 (: ping\n\n),
7249
+ // 浏览器 EventSource 不触发 onmessage, 客户端 60s 阈值 (现已 30s) 误判死链.
7250
+ // 改后前端 onmessage 收到 ping 就重置 lastEventTime, 真死链才 30s 后重建.
7251
+ setInterval(() => {
7252
+ for (const client of sseClients) {
7253
+ const clientId = String(client.channelId ?? 'anon');
7254
+ deliveryLedger.markAttempting(clientId);
7255
+ try {
7256
+ client.res.write('data: {"type":"ping"}\n\n');
7257
+ deliveryLedger.markDelivered(clientId);
7258
+ }
7259
+ catch (err) {
7260
+ // socket 已断, 跳过 — client 端 onerror 会触发重连; 同类错误节流后只 warn 一次
7261
+ const shouldWarn = deliveryLedger.markFailed(clientId, err);
7262
+ if (shouldWarn) {
7263
+ console.warn(`[SSE ping] write 失败 (${deliveryLedger.get(clientId)?.consecutiveFailures} 连败), 跳过该客户端:`, err.message);
7264
+ }
7265
+ }
7240
7266
  }
7241
- }
7242
- }, 30000);
7267
+ const s = deliveryLedger.stats();
7268
+ if (s.dead > 0)
7269
+ console.warn(`[SSE ledger] ${s.dead} 个客户端判定死亡 (待重连), 存活 ${s.delivered}`);
7270
+ }, 30000);
7271
+ })();
7243
7272
  // 2026-06-16: 全局捕获 socket error 事件, 避免未处理 EPIPE/ETIMEDOUT 让进程崩
7244
7273
  currentServer.on('clientError', (err, socket) => {
7245
7274
  console.warn('[server] clientError:', err.code, err.message);