@bolloon/bolloon-agent 0.6.0 → 0.6.1

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 (72) hide show
  1. package/dist/agents/execution-entry.js +10 -0
  2. package/dist/agents/goal-flywheel/wiring/seams.js +5 -1
  3. package/dist/agents/pi-sdk-tools.js +18 -8
  4. package/dist/agents/pi-sdk.js +472 -1263
  5. package/dist/agents/runner-resolver.js +2 -1
  6. package/dist/agents/tool-capability/index.js +51 -0
  7. package/dist/agents/workflow-pivot-loop.js +31 -10
  8. package/dist/agents/write-verify.js +60 -0
  9. package/dist/bollharness-integration/integration.js +8 -0
  10. package/dist/bollharness-integration/skill-adapter.js +32 -3
  11. package/dist/electron-build/agents/goal-flywheel/wiring/seams.js +5 -1
  12. package/dist/electron-build/agents/goal-flywheel/wiring/seams.js.map +1 -1
  13. package/dist/electron-build/agents/pi-sdk-tools.js +21 -11
  14. package/dist/electron-build/agents/pi-sdk-tools.js.map +1 -1
  15. package/dist/electron-build/agents/pi-sdk.js +473 -1262
  16. package/dist/electron-build/agents/pi-sdk.js.map +1 -1
  17. package/dist/electron-build/agents/runner-resolver.js +2 -1
  18. package/dist/electron-build/agents/runner-resolver.js.map +1 -1
  19. package/dist/electron-build/agents/tool-capability/index.js +90 -0
  20. package/dist/electron-build/agents/tool-capability/index.js.map +1 -0
  21. package/dist/electron-build/agents/workflow-pivot-loop.js +31 -10
  22. package/dist/electron-build/agents/workflow-pivot-loop.js.map +1 -1
  23. package/dist/electron-build/agents/write-verify.js +99 -0
  24. package/dist/electron-build/agents/write-verify.js.map +1 -0
  25. package/dist/electron-build/bollharness-integration/integration.js +8 -0
  26. package/dist/electron-build/bollharness-integration/integration.js.map +1 -1
  27. package/dist/electron-build/bollharness-integration/skill-adapter.js +32 -3
  28. package/dist/electron-build/bollharness-integration/skill-adapter.js.map +1 -1
  29. package/dist/electron-build/kernel/channel-actor.js +25 -0
  30. package/dist/electron-build/kernel/channel-actor.js.map +1 -1
  31. package/dist/electron-build/kernel/control.js +102 -0
  32. package/dist/electron-build/kernel/control.js.map +1 -0
  33. package/dist/electron-build/kernel/model-runtime.js +508 -0
  34. package/dist/electron-build/kernel/model-runtime.js.map +1 -0
  35. package/dist/electron-build/kernel/run-lifecycle.js +146 -0
  36. package/dist/electron-build/kernel/run-lifecycle.js.map +1 -0
  37. package/dist/electron-build/kernel/transport.js +119 -0
  38. package/dist/electron-build/kernel/transport.js.map +1 -0
  39. package/dist/electron-build/llm/native-adapter.js +122 -0
  40. package/dist/electron-build/llm/native-adapter.js.map +1 -0
  41. package/dist/index.js +19 -0
  42. package/dist/ios/bolloon-web.json +3 -3
  43. package/dist/ios/client.js +13 -7
  44. package/dist/ios/mobile-core.js +7762 -6289
  45. package/dist/ios/mobile.js +64 -0
  46. package/dist/ios/routes-mobile-tasks.js +2 -1
  47. package/dist/ios/routes-tasks.js +16 -1
  48. package/dist/ios/routes-x402-info.js +28 -1
  49. package/dist/ios/server-storage.js +26 -5
  50. package/dist/ios/server.js +840 -862
  51. package/dist/ios/sw.js +1 -1
  52. package/dist/ios/ui/message-renderer.js +473 -29
  53. package/dist/ios/ui/step-timeline.js +13 -12
  54. package/dist/kernel/channel-actor.js +24 -0
  55. package/dist/kernel/gate-scan.js +318 -4
  56. package/dist/kernel/model-runtime.js +22 -0
  57. package/dist/kernel/plan-channel-actor.js +12 -5
  58. package/dist/kernel/plan-communication.js +163 -0
  59. package/dist/kernel/plan-constraint.js +2 -15
  60. package/dist/kernel/plan-deletion.js +1 -1
  61. package/dist/kernel/plan-harness.js +78 -0
  62. package/dist/kernel/plan.js +1 -5
  63. package/dist/kernel/roster.js +13 -11
  64. package/dist/kernel/run-lifecycle.js +138 -0
  65. package/dist/kernel/transport.js +111 -0
  66. package/dist/llm/native-adapter.js +117 -0
  67. package/dist/web/bolloon-web.json +3 -3
  68. package/dist/web/client.js +9 -5
  69. package/dist/web/routes-tasks.js +12 -1
  70. package/dist/web/server.js +802 -866
  71. package/dist/web/sw.js +1 -1
  72. package/package.json +1 -1
@@ -1,10 +1,10 @@
1
1
  {
2
2
  "schema": "bolloon-mobile-web/1",
3
- "version": "0.6.0",
3
+ "version": "0.6.1",
4
4
  "channel": "stable",
5
5
  "build": "stable",
6
- "commit": "85c140cad0d8249f7c5240cc33b6082887c8d45c",
7
- "builtAt": "2026-10-02T06:29:18.303Z",
6
+ "commit": "18c1afa87b36043e6df5dc9ccef0417cdcf323da",
7
+ "builtAt": "2026-10-04T08:01:30.567Z",
8
8
  "layer": "web",
9
9
  "note": "web 资源层构建戳 (手机端 OTA 的身份第 ③ 级回退; 装机后以 OTA state.json 为准)"
10
10
  }
@@ -2887,6 +2887,11 @@ ${data.error || "channel not found"}`, "error");
2887
2887
  }
2888
2888
  var lastUsedJudgmentIds = [];
2889
2889
  var currentPreviewBubble = null;
2890
+ function retirePreviewBubbles(container) {
2891
+ if (!container) return;
2892
+ container.querySelectorAll(".message-ai.preview").forEach((el) => el.remove());
2893
+ currentPreviewBubble = null;
2894
+ }
2890
2895
  var selfImproveCardSeq = 0;
2891
2896
  function getMessagesContainerForCurrent2() {
2892
2897
  if (currentChannelId && messagesContainers.get(currentChannelId)) {
@@ -3146,9 +3151,7 @@ ${data.error || "channel not found"}`, "error");
3146
3151
  addMessage2(data.content, "user", true, container);
3147
3152
  }
3148
3153
  } else if (data.type === "ai") {
3149
- const allPreviews = container.querySelectorAll(".message-ai.preview");
3150
- allPreviews.forEach((el) => el.remove());
3151
- currentPreviewBubble = null;
3154
+ retirePreviewBubbles(container);
3152
3155
  if (!MR_hasStreamingText()) {
3153
3156
  addMessage2(data.content || "", "ai", true, container, lastUsedJudgmentIds || []);
3154
3157
  } else {
@@ -3158,8 +3161,7 @@ ${data.error || "channel not found"}`, "error");
3158
3161
  sendRokidText(data.content || "", { source: "ai" });
3159
3162
  } else if (data.type === "reply-preview") {
3160
3163
  const previewContent = data.content || "";
3161
- const oldPreviews = container.querySelectorAll(".message-ai.preview");
3162
- oldPreviews.forEach((el) => el.remove());
3164
+ retirePreviewBubbles(container);
3163
3165
  addMessage2(previewContent, "ai", false, container, []);
3164
3166
  const newPreview = container.querySelector(".message-ai:not(.preview):last-of-type") || container.lastElementChild;
3165
3167
  if (newPreview) {
@@ -3181,6 +3183,7 @@ ${data.error || "channel not found"}`, "error");
3181
3183
  handleStepEvent2(data);
3182
3184
  } else if (data.type === "done") {
3183
3185
  finalizeTimelineAsMessage2();
3186
+ retirePreviewBubbles(container);
3184
3187
  hideLoopStatusBar2();
3185
3188
  setSendMode("idle");
3186
3189
  } else if (data.type === "renamed") {
@@ -3194,6 +3197,7 @@ ${data.error || "channel not found"}`, "error");
3194
3197
  }
3195
3198
  } else if (data.type === "error") {
3196
3199
  const errContent = String(data.content || "\u672A\u77E5\u9519\u8BEF");
3200
+ retirePreviewBubbles(container);
3197
3201
  addMessage2(`\u26A0\uFE0F ${errContent}`, "ai", false, container);
3198
3202
  if (typeof showSimpleToast === "function") {
3199
3203
  showSimpleToast("\u26A0\uFE0F " + errContent.slice(0, 200));
@@ -313,7 +313,18 @@ async function executeTask(task, channelId, getAgentForChannel, broadcast) {
313
313
  // 闭包里 TS 不保留收窄 ⇒ 先收成局部 const
314
314
  const desc = task.description;
315
315
  const agentForRun = agent;
316
- result = await deliverThroughActor(agentForRun, () => agentForRun.prompt(desc));
316
+ // 2026-10-02 (K8): 走 Pi 的**唯一执行入口** `runExecution` (K5 步骤⑦ 已建), 不再由通道自己直呼 prompt
317
+ if (typeof agentForRun.runExecution !== 'function') {
318
+ // K8 纪律: 拿不到唯一执行入口 ⇒ **响亮失败**, 不静默回落直呼 prompt (否则收口变成纸面的)
319
+ throw new Error('K8: 该 session 未提供 runExecution (唯一执行入口) ⇒ 拒绝直呼 prompt');
320
+ }
321
+ // 注意: 这里**显式传 channelId** —— ExecutionRequest 要求它, 且语义上本就该绑定 task 的通道。
322
+ // 与旧写法 (prompt(desc), 隐式走 actor 绑定) 相比这是一处**行为差量**: 绑定从隐式变显式。
323
+ // 按纪律记过"待真跑核验", **2026-10-02 已核验通过** (`src/test/k8-routes-tasks-execution.test.ts`,
324
+ // 真 express + 真 HTTP + 真任务队列): ① agent 只给 runExecution (无 prompt) 也能跑通 ⇒ 活路径唯一;
325
+ // ② **两半 id 一致** (解析 agent 用的 id == 绑 run 用的 id) 是自检不变量; ③ 无门时响亮失败且 prompt 调用 0 次。
326
+ // 真变异: 绑成 `channelId + '-mut'` ⇒ 判红; 回落直呼 `prompt` ⇒ 判红; 还原 ⇒ 回绿无残差。
327
+ result = await deliverThroughActor(agentForRun, () => agentForRun.runExecution({ input: desc, channelId }));
317
328
  }
318
329
  break;
319
330
  case 'read':