@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
@@ -0,0 +1,10 @@
1
+ /**
2
+ * 取该 session 的唯一执行入口; 取不到就**响亮失败** (绝不静默回落直呼 `prompt`)。
3
+ * 注意返回的是**绑定过的**函数 —— 见文件头那个坑。
4
+ */
5
+ export function requireRunExecution(agent) {
6
+ if (typeof agent.runExecution !== 'function') {
7
+ throw new Error('K8: 该 session 未提供 runExecution (唯一执行入口) ⇒ 拒绝直呼 prompt');
8
+ }
9
+ return agent.runExecution.bind(agent);
10
+ }
@@ -352,7 +352,11 @@ export const TERMINAL_PATHS = [
352
352
  {
353
353
  path: '失败 / 中断恢复 (Runner 内 finishRun)',
354
354
  file: 'src/agents/pi-sdk.ts',
355
- marker: /await\s+finishRun\s*\(/,
355
+ // 2026-10-02 (K10 ①): 该终止动作**改经内核生命周期端口** —— 直接 `await finishRun(` 已不存在,
356
+ // 现在写作 `submitRunLifecycle({ op: 'finish-run', runId, payload }, { finishRun })` + `assertLifecycleOk`。
357
+ // 登记项**跟着改形状, 不是放宽**: 端口未注入/被拒 ⇒ `assertLifecycleOk` 抛 ⇒ 终止照样走到收尾漏斗;
358
+ // 而"不许再出现直接调用"由 `src/test/k10-run-lifecycle-port.test.ts` 的反向断言钉住 (两处一起才成立)。
359
+ marker: /submitRunLifecycle\(\{[^}]*op:\s*'finish-run'/,
356
360
  via: FUNNEL_CALL_RE,
357
361
  },
358
362
  {
@@ -1,5 +1,7 @@
1
1
  import * as fs from 'fs/promises';
2
+ import { loadDomainModule } from './tool-capability/index.js'; // K1 ④: 领域能力唯一入口
2
3
  import { loadWalletTool } from './wallet-tools.js';
4
+ import { withWriteVerified } from './write-verify.js'; // K10 ⑦: 写类工具成功后拼读回事实
3
5
  import * as fsSync from 'fs';
4
6
  import * as path from 'path';
5
7
  import * as os from 'os';
@@ -1052,7 +1054,11 @@ export function registerBuiltinTools(ctx) {
1052
1054
  await stageWrite(relPath, before, content, action, ctx.cwd).catch(() => { });
1053
1055
  await fs.mkdir(path.dirname(absPath), { recursive: true });
1054
1056
  await fs.writeFile(absPath, content, 'utf-8');
1055
- return { success: true, output: `✅ wrote ${relPath} (${content.length} bytes)` };
1057
+ // K10 ⑦: 写成功 ≠ 任务成功 —— 拼上读回事实 (`[已核对] …` / `[未核对] …`)
1058
+ return withWriteVerified('write_file', { path: relPath }, ctx.cwd, {
1059
+ success: true,
1060
+ output: `✅ wrote ${relPath} (${content.length} bytes)`,
1061
+ });
1056
1062
  }
1057
1063
  catch (e) {
1058
1064
  return { success: false, error: `写文件失败: ${String(e)}` };
@@ -1086,7 +1092,11 @@ export function registerBuiltinTools(ctx) {
1086
1092
  const { stageWrite } = await import('./write-staging.js');
1087
1093
  await stageWrite(relPath, original, updated, 'edit', ctx.cwd).catch(() => { });
1088
1094
  await fs.writeFile(absPath, updated, 'utf-8');
1089
- return { success: true, output: `✅ edited ${relPath} (${oldText.length} → ${newText.length} 字节)` };
1095
+ // K10 ⑦: 同上, 编辑也读回自证
1096
+ return withWriteVerified('edit_file', { path: relPath }, ctx.cwd, {
1097
+ success: true,
1098
+ output: `✅ edited ${relPath} (${oldText.length} → ${newText.length} 字节)`,
1099
+ });
1090
1100
  }
1091
1101
  catch (e) {
1092
1102
  return { success: false, error: `编辑文件失败: ${String(e)}` };
@@ -3829,7 +3839,7 @@ export function registerWalletTools(ctx) {
3829
3839
  parameters: { limit: '可选 数量 (默认 50)', offset: '可选 偏移', closed: '可选 是否只显示已关闭' },
3830
3840
  execute: async (args) => {
3831
3841
  try {
3832
- const { listMarkets } = await import('../constraint-runtime/dist/tools/PolymarketSDK/listMarkets.js').catch(() => import('../constraint-runtime/src/tools/PolymarketSDK/listMarkets.js'));
3842
+ const { listMarkets } = await loadDomainModule('PolymarketSDK/listMarkets');
3833
3843
  const markets = await listMarkets({
3834
3844
  limit: args.limit ? Number(args.limit) : 50,
3835
3845
  offset: args.offset ? Number(args.offset) : 0,
@@ -3852,7 +3862,7 @@ export function registerWalletTools(ctx) {
3852
3862
  parameters: { marketId: '市场 ID (必填)' },
3853
3863
  execute: async (args) => {
3854
3864
  try {
3855
- const mod = await import('../constraint-runtime/dist/tools/PolymarketSDK/getMarket.js').catch(() => import('../constraint-runtime/src/tools/PolymarketSDK/getMarket.js'));
3865
+ const mod = await loadDomainModule('PolymarketSDK/getMarket');
3856
3866
  const fn = mod.getMarket || mod.default;
3857
3867
  const m = await fn(String(args.marketId));
3858
3868
  if (!m)
@@ -3877,7 +3887,7 @@ export function registerWalletTools(ctx) {
3877
3887
  },
3878
3888
  execute: async (args) => {
3879
3889
  try {
3880
- const { getOrders } = await import('../constraint-runtime/dist/tools/PolymarketSDK/getOrders.js').catch(() => import('../constraint-runtime/src/tools/PolymarketSDK/getOrders.js'));
3890
+ const { getOrders } = await loadDomainModule('PolymarketSDK/getOrders');
3881
3891
  const orders = await getOrders({
3882
3892
  privateKey: String(args.privateKey),
3883
3893
  marketId: args.marketId ? String(args.marketId) : undefined,
@@ -3912,7 +3922,7 @@ export function registerWalletTools(ctx) {
3912
3922
  },
3913
3923
  execute: async (args) => {
3914
3924
  try {
3915
- const { createOrder } = await import('../constraint-runtime/dist/tools/PolymarketSDK/createOrder.js').catch(() => import('../constraint-runtime/src/tools/PolymarketSDK/createOrder.js'));
3925
+ const { createOrder } = await loadDomainModule('PolymarketSDK/createOrder');
3916
3926
  const r = await createOrder({
3917
3927
  privateKey: String(args.privateKey),
3918
3928
  marketId: String(args.marketId),
@@ -3949,7 +3959,7 @@ export function registerWalletTools(ctx) {
3949
3959
  },
3950
3960
  execute: async (args) => {
3951
3961
  try {
3952
- const { cancelOrder } = await import('../constraint-runtime/dist/tools/PolymarketSDK/cancelOrder.js').catch(() => import('../constraint-runtime/src/tools/PolymarketSDK/cancelOrder.js'));
3962
+ const { cancelOrder } = await loadDomainModule('PolymarketSDK/cancelOrder');
3953
3963
  const r = await cancelOrder({
3954
3964
  privateKey: String(args.privateKey),
3955
3965
  orderId: String(args.orderId),
@@ -4123,7 +4133,7 @@ export function registerWalletTools(ctx) {
4123
4133
  parameters: { owners: 'JSON 数组 owner 地址 (必填)', threshold: '需要几个签名 (必填)' },
4124
4134
  execute: async (args) => {
4125
4135
  try {
4126
- const { deploySafe } = await import('../constraint-runtime/dist/tools/SafeSDK/deploySafe.js').catch(() => import('../constraint-runtime/src/tools/SafeSDK/deploySafe.js'));
4136
+ const { deploySafe } = await loadDomainModule('SafeSDK/deploySafe');
4127
4137
  const owners = Array.isArray(args.owners) ? args.owners : JSON.parse(String(args.owners));
4128
4138
  const r = await deploySafe({ owners, threshold: Number(args.threshold) });
4129
4139
  return { success: true, output: `✅ Safe 部署: ${JSON.stringify(r)}` };