chainlesschain 0.166.62 → 0.166.64

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 (172) hide show
  1. package/README.md +54 -8
  2. package/package.json +3 -1
  3. package/src/assets/web-panel/assets/{AIOps-BqoRiuXE.js → AIOps-BFbLDWTF.js} +1 -1
  4. package/src/assets/web-panel/assets/{ActionButton-BwBhyFIm.js → ActionButton-CAHMtgNB.js} +1 -1
  5. package/src/assets/web-panel/assets/{Analytics-DTW03Emb.js → Analytics-CkrSj0oR.js} +3 -3
  6. package/src/assets/web-panel/assets/{AppLayout-CI-wxMLQ.js → AppLayout-BTb0Ws1l.js} +4 -4
  7. package/src/assets/web-panel/assets/{Artifacts-DVqbM3iE.js → Artifacts-C2Pgepj-.js} +1 -1
  8. package/src/assets/web-panel/assets/{Audit-DulhOs16.js → Audit-ZweyxXW8.js} +1 -1
  9. package/src/assets/web-panel/assets/{BackgroundAgents-DnRs67e8.js → BackgroundAgents-BS8tAnzP.js} +1 -1
  10. package/src/assets/web-panel/assets/{Backup-BFEZo0vX.js → Backup-CLkG_74M.js} +1 -1
  11. package/src/assets/web-panel/assets/{BaseInput-D185sBnp.js → BaseInput-MIfNcdUZ.js} +1 -1
  12. package/src/assets/web-panel/assets/{Chat-DUvP-2SK.js → Chat-DBwqlWWr.js} +6 -6
  13. package/src/assets/web-panel/assets/{ChatBubbleRenderer-u9WKQbZb.js → ChatBubbleRenderer-6T0uoJuS.js} +1 -1
  14. package/src/assets/web-panel/assets/{Checkbox-D8Zh_18b.js → Checkbox-DdBYhlVX.js} +1 -1
  15. package/src/assets/web-panel/assets/{Codegen-WdiWRdfC.js → Codegen-BR6MhiDo.js} +1 -1
  16. package/src/assets/web-panel/assets/{Col-CnSoVpw6.js → Col-yO-5EbbM.js} +1 -1
  17. package/src/assets/web-panel/assets/{Community-BJDHgBkw.js → Community-B608q_m7.js} +1 -1
  18. package/src/assets/web-panel/assets/{Compact-uNRdmBaq.js → Compact-BmVHi7Z7.js} +1 -1
  19. package/src/assets/web-panel/assets/{Compliance-_6jRTJa3.js → Compliance-BQ-DzutA.js} +1 -1
  20. package/src/assets/web-panel/assets/{Cowork-D5lnbXR6.js → Cowork-BEfLyXvi.js} +2 -2
  21. package/src/assets/web-panel/assets/{Cron-D6tuGBVg.js → Cron-Cld6NX-_.js} +2 -2
  22. package/src/assets/web-panel/assets/{Crosschain-Ce5e9Lbm.js → Crosschain-CUA3nDId.js} +1 -1
  23. package/src/assets/web-panel/assets/{DID-1VVKZ_c1.js → DID-DSI3E9zv.js} +2 -2
  24. package/src/assets/web-panel/assets/{Dashboard-DuHcZ13w.js → Dashboard-CoWtEdhO.js} +2 -2
  25. package/src/assets/web-panel/assets/{Dropdown-BC3EK0wN.js → Dropdown-CGhZ1Dyy.js} +1 -1
  26. package/src/assets/web-panel/assets/{EmailListRenderer-DzLpGs5E.js → EmailListRenderer-BHZe2K5q.js} +1 -1
  27. package/src/assets/web-panel/assets/{EvolutionSettings-x2XZHG0Z.js → EvolutionSettings-Corjo98k.js} +1 -1
  28. package/src/assets/web-panel/assets/{FamilyGuardDashboard-nAavV50Y.js → FamilyGuardDashboard-dPSWF3Pt.js} +1 -1
  29. package/src/assets/web-panel/assets/{Federation-CCHWVS5J.js → Federation-DT-Zr78c.js} +1 -1
  30. package/src/assets/web-panel/assets/{FormItemContext-CGod_3Ni.js → FormItemContext-CzKq63B0.js} +1 -1
  31. package/src/assets/web-panel/assets/{GenericCardRenderer-DIFYQa2f.js → GenericCardRenderer-CDkKrmu0.js} +1 -1
  32. package/src/assets/web-panel/assets/{Git-DikM1Nc5.js → Git-BrwRnLOv.js} +2 -2
  33. package/src/assets/web-panel/assets/{Governance-SzzBXCDX.js → Governance-C4PtCzod.js} +1 -1
  34. package/src/assets/web-panel/assets/{Inference-wVsu9QzM.js → Inference-CVPv5nwa.js} +1 -1
  35. package/src/assets/web-panel/assets/{KnowledgeGraph-DDpVxfO-.js → KnowledgeGraph-CmT9lvED.js} +1 -1
  36. package/src/assets/web-panel/assets/{Logs-BnIjS-2Z.js → Logs-DaRgv7pL.js} +2 -2
  37. package/src/assets/web-panel/assets/{MarkdownRenderer-3AsRzie6.js → MarkdownRenderer-B3zZwlSz.js} +1 -1
  38. package/src/assets/web-panel/assets/{Marketplace-Cj3PLhXV.js → Marketplace-Bm0GGEaL.js} +1 -1
  39. package/src/assets/web-panel/assets/{McpTools-DMKO55Kz.js → McpTools-71L5h0en.js} +3 -3
  40. package/src/assets/web-panel/assets/{Memory-wWJl5yJL.js → Memory-BoWrfASi.js} +2 -2
  41. package/src/assets/web-panel/assets/{MobileBridge-CJ_VIPgJ.js → MobileBridge-Dp4FcX_-.js} +1 -1
  42. package/src/assets/web-panel/assets/{MobileProjects-CiJT5cF8.js → MobileProjects-00ja0Z7O.js} +1 -1
  43. package/src/assets/web-panel/assets/{Mtc-BXmndm9a.js → Mtc-BZF6YNYp.js} +2 -2
  44. package/src/assets/web-panel/assets/{MtcAudit-C3hWIAnz.js → MtcAudit-Bp_vcI6H.js} +2 -2
  45. package/src/assets/web-panel/assets/{Multisig-DU4OUQ7u.js → Multisig-CnCo56CS.js} +3 -3
  46. package/src/assets/web-panel/assets/{NLProgramming-CyAwOeU5.js → NLProgramming-BCSzNHpv.js} +1 -1
  47. package/src/assets/web-panel/assets/{Notes--YvcAg13.js → Notes-kXoQk8B7.js} +3 -3
  48. package/src/assets/web-panel/assets/{NotificationSettings-Dyu6dC0D.js → NotificationSettings-oN-1fkcy.js} +1 -1
  49. package/src/assets/web-panel/assets/{OrderTableRenderer-Df-0iTO2.js → OrderTableRenderer-5ZVHrVZ9.js} +1 -1
  50. package/src/assets/web-panel/assets/{Organization-a9Em4Sgu.js → Organization-D4_T9Tdc.js} +4 -4
  51. package/src/assets/web-panel/assets/{Overflow-CCQtvcsw.js → Overflow-d8vZwo9w.js} +1 -1
  52. package/src/assets/web-panel/assets/{P2P--CaB5e38.js → P2P-0HGUdmTv.js} +2 -2
  53. package/src/assets/web-panel/assets/{PdhVaultBrowser-CmfHjoJG.js → PdhVaultBrowser-Cx8vp92z.js} +3 -3
  54. package/src/assets/web-panel/assets/{Permissions-BCDjNsXi.js → Permissions-XHd6pVQB.js} +4 -4
  55. package/src/assets/web-panel/assets/{PersonalDataHub-ByprqCJd.js → PersonalDataHub-CB5bZU9T.js} +4 -4
  56. package/src/assets/web-panel/assets/{Pipeline-CZRZq-P0.js → Pipeline-Dy_qx4-0.js} +1 -1
  57. package/src/assets/web-panel/assets/{Privacy-CeDay_dV.js → Privacy-BgR0-uEu.js} +1 -1
  58. package/src/assets/web-panel/assets/{ProjectInit-CgpIfRAZ.js → ProjectInit-DAcRi1Nx.js} +2 -2
  59. package/src/assets/web-panel/assets/{ProjectSettings-CU8iakEs.js → ProjectSettings-Bd1Q0rK_.js} +2 -2
  60. package/src/assets/web-panel/assets/{Projects-pPM0KRfQ.js → Projects-DVc9DcbM.js} +1 -1
  61. package/src/assets/web-panel/assets/{Providers-BfpxsZh1.js → Providers-C3c4QfUT.js} +1 -1
  62. package/src/assets/web-panel/assets/{QrScannerModal-Dmv3rax1.js → QrScannerModal-Ba_GbitW.js} +1 -1
  63. package/src/assets/web-panel/assets/{QuickAsk-DBOtB5wd.js → QuickAsk-CSn5tIkO.js} +1 -1
  64. package/src/assets/web-panel/assets/{Recommend-C_KnHRvS.js → Recommend-B3-8PLX0.js} +1 -1
  65. package/src/assets/web-panel/assets/{RemoteSession-OIO9kT7D.js → RemoteSession-Bd_7Zmi-.js} +2 -2
  66. package/src/assets/web-panel/assets/{Reputation-BCfNIBt3.js → Reputation-BU2A_wy5.js} +1 -1
  67. package/src/assets/web-panel/assets/{Row-pnhw7dyj.js → Row-I0JFMjCz.js} +1 -1
  68. package/src/assets/web-panel/assets/{RssFeed-CLJ1A3FF.js → RssFeed-CNc4Dgfz.js} +3 -3
  69. package/src/assets/web-panel/assets/{Search-CSQzJ3gj.js → Search-uAA6ceLl.js} +1 -1
  70. package/src/assets/web-panel/assets/{Security-CS_mvkaE.js → Security-U1SWj5nP.js} +4 -4
  71. package/src/assets/web-panel/assets/{Services-DBqA2Csq.js → Services-BFjZ5ASY.js} +2 -2
  72. package/src/assets/web-panel/assets/{Skeleton-BjR3_iWH.js → Skeleton-B8InBvQf.js} +1 -1
  73. package/src/assets/web-panel/assets/{Skills-DwGIXRJS.js → Skills-BDYwf3QV.js} +1 -1
  74. package/src/assets/web-panel/assets/{Sla-DwiHHJtJ.js → Sla-Dcc6iq3q.js} +1 -1
  75. package/src/assets/web-panel/assets/{SpeechSettings-QYN_t0CS.js → SpeechSettings-C3Ta-mC9.js} +1 -1
  76. package/src/assets/web-panel/assets/{SyncSettings-DcXA1Jp3.js → SyncSettings-BNHEYO95.js} +2 -2
  77. package/src/assets/web-panel/assets/Tasks-JbV6L1FX.js +1 -0
  78. package/src/assets/web-panel/assets/{Templates-C6MTuLXU.js → Templates-Yp0CUTBz.js} +1 -1
  79. package/src/assets/web-panel/assets/{Tenant-DmbdMB2D.js → Tenant-CToNYxCo.js} +1 -1
  80. package/src/assets/web-panel/assets/{Terminal-DYeXnE4A.js → Terminal-D7W9UqSD.js} +2 -2
  81. package/src/assets/web-panel/assets/{TimelineRenderer-BrwLhsSE.js → TimelineRenderer-B7rqc1kE.js} +1 -1
  82. package/src/assets/web-panel/assets/{Tokens-C5kKpRWj.js → Tokens-QP7K4ppA.js} +1 -1
  83. package/src/assets/web-panel/assets/{Trigger-C4Zyg1jj.js → Trigger-CAWowQCR.js} +1 -1
  84. package/src/assets/web-panel/assets/{Trust-D0mrY3kY.js → Trust-B-0XOP97.js} +1 -1
  85. package/src/assets/web-panel/assets/{UkeySign-Bq5NMLLb.js → UkeySign-BtiZbiuj.js} +1 -1
  86. package/src/assets/web-panel/assets/{VideoEditing-OObS6euz.js → VideoEditing-Dee11JI0.js} +1 -1
  87. package/src/assets/web-panel/assets/{Wallet-Die77ZAO.js → Wallet-y7qOmaWY.js} +4 -4
  88. package/src/assets/web-panel/assets/{WebAuthn-DFpqn0WO.js → WebAuthn-CjyRRWGK.js} +5 -5
  89. package/src/assets/web-panel/assets/{WorkflowEditor-BgKZiece.js → WorkflowEditor-D7Kiz25Q.js} +1 -1
  90. package/src/assets/web-panel/assets/{chat-CbWtbRmr.js → chat-4F_yB-Gw.js} +1 -1
  91. package/src/assets/web-panel/assets/{colors-Zu_TgmpG.js → colors-CrczPd-t.js} +1 -1
  92. package/src/assets/web-panel/assets/{compact-item-BqABAwA_.js → compact-item-AenPL6fz.js} +1 -1
  93. package/src/assets/web-panel/assets/{createContext-DR6r1ykz.js → createContext-BcwoqPgi.js} +1 -1
  94. package/src/assets/web-panel/assets/devWarning-C4qWsAvh.js +1 -0
  95. package/src/assets/web-panel/assets/{hasIn-BNnYbjOt.js → hasIn-YouHmap8.js} +1 -1
  96. package/src/assets/web-panel/assets/{index-BQHn6m4S.js → index--xwN0ZvG.js} +1 -1
  97. package/src/assets/web-panel/assets/{index-DxloCIDQ.js → index-31dhJpt3.js} +1 -1
  98. package/src/assets/web-panel/assets/{index-CuYLjMxX.js → index-4r7B8sTx.js} +1 -1
  99. package/src/assets/web-panel/assets/{index-hZ41pakD.js → index-5GHNjmnt.js} +1 -1
  100. package/src/assets/web-panel/assets/{index--vigBXnN.js → index-B5Vmr0CM.js} +1 -1
  101. package/src/assets/web-panel/assets/{index-CpmSx_mp.js → index-B8EXHVmM.js} +1 -1
  102. package/src/assets/web-panel/assets/{index-BQ1WFS4G.js → index-BHA5Fyjc.js} +1 -1
  103. package/src/assets/web-panel/assets/{index-ys7--3Ab.js → index-B_I1INkw.js} +1 -1
  104. package/src/assets/web-panel/assets/{index-CO9hQ7ri.js → index-BaguGDJP.js} +1 -1
  105. package/src/assets/web-panel/assets/{index-DaKziwj_.js → index-BoVeUGhC.js} +1 -1
  106. package/src/assets/web-panel/assets/{index-DiaPl_6F.js → index-BsGhFk79.js} +1 -1
  107. package/src/assets/web-panel/assets/{index-DEdqCQKQ.js → index-BwUqDg9_.js} +1 -1
  108. package/src/assets/web-panel/assets/{index-hWckjvz-.js → index-BzyDSW_e.js} +1 -1
  109. package/src/assets/web-panel/assets/index-C-ltOW-O.js +1 -0
  110. package/src/assets/web-panel/assets/{index-P-0rrwu0.js → index-C5hpEYbx.js} +1 -1
  111. package/src/assets/web-panel/assets/{index-CVgcq0cJ.js → index-CHNKoexH.js} +1 -1
  112. package/src/assets/web-panel/assets/{index-rS1lj7A9.js → index-COgeZETv.js} +1 -1
  113. package/src/assets/web-panel/assets/{index-Ct4xnx2r.js → index-CWgIKCVS.js} +1 -1
  114. package/src/assets/web-panel/assets/{index-CYgH1j85.js → index-CZ9Ikuo6.js} +1 -1
  115. package/src/assets/web-panel/assets/{index-BtQDpNFU.js → index-CZT-LLGS.js} +1 -1
  116. package/src/assets/web-panel/assets/{index-B9qA3lcI.js → index-CedvtJA_.js} +1 -1
  117. package/src/assets/web-panel/assets/{index-DuCixW1o.js → index-D0dXNgvi.js} +1 -1
  118. package/src/assets/web-panel/assets/{index-55eCb40A.js → index-D5Rvq67L.js} +3 -3
  119. package/src/assets/web-panel/assets/index-D7Ir0TiS.js +1 -0
  120. package/src/assets/web-panel/assets/{index-fvl4dSWm.js → index-D7m5Z4We.js} +1 -1
  121. package/src/assets/web-panel/assets/{index-D08ytPR_.js → index-D8a1AEVK.js} +1 -1
  122. package/src/assets/web-panel/assets/{index-CbJgVaoQ.js → index-DAGfuEUu.js} +1 -1
  123. package/src/assets/web-panel/assets/{index-n62j7dTt.js → index-DAh5KwVL.js} +1 -1
  124. package/src/assets/web-panel/assets/{index-BCyrVLzm.js → index-DE3qPp9l.js} +1 -1
  125. package/src/assets/web-panel/assets/{index-C912Wlyi.js → index-DNHmbdGm.js} +1 -1
  126. package/src/assets/web-panel/assets/{index--1t0mcMh.js → index-DPrzFdCg.js} +1 -1
  127. package/src/assets/web-panel/assets/{index-uwS83tsv.js → index-DVrgnhfu.js} +1 -1
  128. package/src/assets/web-panel/assets/{index-CR4uB9Mt.js → index-D_4VsL-L.js} +1 -1
  129. package/src/assets/web-panel/assets/{index-BvQB-LK5.js → index-Dfw3WyZU.js} +1 -1
  130. package/src/assets/web-panel/assets/{index-BbHnxChr.js → index-GP5u18DV.js} +1 -1
  131. package/src/assets/web-panel/assets/{index-CkBDWART.js → index-YX4dcbgh.js} +1 -1
  132. package/src/assets/web-panel/assets/{index-CSNMSJAt.js → index-fCuM1NPH.js} +1 -1
  133. package/src/assets/web-panel/assets/{index-GrGT2dft.js → index-gy1H_PJk.js} +1 -1
  134. package/src/assets/web-panel/assets/{index-CmGll9ri.js → index-q_9aqSgF.js} +1 -1
  135. package/src/assets/web-panel/assets/{initDefaultProps-BEtGYjIT.js → initDefaultProps-Ci6zc6ZA.js} +1 -1
  136. package/src/assets/web-panel/assets/{motion-Cvnft4fL.js → motion-DS3kjIxw.js} +1 -1
  137. package/src/assets/web-panel/assets/{move-CdxE_5Yl.js → move-DCdWAKk4.js} +1 -1
  138. package/src/assets/web-panel/assets/{mtc-parser-CS0l6IJn.js → mtc-parser-B0Wfce9U.js} +1 -1
  139. package/src/assets/web-panel/assets/{omit-Bnji87sb.js → omit-Clx9TR6z.js} +1 -1
  140. package/src/assets/web-panel/assets/{pickAttrs-BYdnEgN3.js → pickAttrs-CqSiqUvN.js} +1 -1
  141. package/src/assets/web-panel/assets/{placementArrow-DYYd524z.js → placementArrow-BWe_v-40.js} +1 -1
  142. package/src/assets/web-panel/assets/{responsiveObserve-BbIJIkXp.js → responsiveObserve-BSJ68bw6.js} +1 -1
  143. package/src/assets/web-panel/assets/{slide-BSvuvfUS.js → slide-VRPlLxZB.js} +1 -1
  144. package/src/assets/web-panel/assets/{statusUtils-DeLSt3js.js → statusUtils-BFBVDPdB.js} +1 -1
  145. package/src/assets/web-panel/assets/{styleChecker-DpJTPfyI.js → styleChecker-CehOXy1f.js} +1 -1
  146. package/src/assets/web-panel/assets/{useFlexGapSupport-S7WdFQMU.js → useFlexGapSupport-BCOdfK18.js} +1 -1
  147. package/src/assets/web-panel/assets/{useFs-CkfCBy52.js → useFs-BMKrjfJQ.js} +1 -1
  148. package/src/assets/web-panel/assets/{usePersonalDataHub-CA48p8Gt.js → usePersonalDataHub-BIjZ7IgI.js} +1 -1
  149. package/src/assets/web-panel/assets/{vnode-C9D1tq_L.js → vnode-oD0MXddQ.js} +1 -1
  150. package/src/assets/web-panel/assets/{zoom-B0TG7YQI.js → zoom-D7WqH2Ai.js} +1 -1
  151. package/src/assets/web-panel/index.html +1 -1
  152. package/src/data/changelog.json +26 -0
  153. package/src/lib/evolution/evolution-artifact-ports.js +3 -0
  154. package/src/lib/evolution/evolution-deployment-loader.js +125 -9
  155. package/src/lib/evolution/pm-exploration-budget-executor.js +346 -0
  156. package/src/lib/evolution/pm-exploration-business-grader.js +581 -0
  157. package/src/lib/evolution/pm-exploration-evidence-bundle.js +613 -0
  158. package/src/lib/evolution/pm-exploration-execution-host.js +946 -0
  159. package/src/lib/evolution/pm-exploration-ledger-adapter.js +210 -22
  160. package/src/lib/evolution/pm-exploration-provider-settlement-adapter.js +420 -0
  161. package/src/lib/evolution/pm-exploration-receipts.js +626 -0
  162. package/src/lib/evolution/pm-exploration-recovery-snapshot-store.js +521 -0
  163. package/src/lib/evolution/pm-exploration-rounds.js +12 -2
  164. package/src/lib/evolution/pm-exploration-transition-committer.js +541 -0
  165. package/src/lib/evolution/pm-exploration-volcengine-provider.js +724 -0
  166. package/src/lib/read-file-loop-guard.js +13 -7
  167. package/src/lib/task-progress-tracker.js +1 -1
  168. package/src/runtime/agent-core.js +14 -7
  169. package/src/assets/web-panel/assets/Tasks-DwWqvoyB.js +0 -1
  170. package/src/assets/web-panel/assets/devWarning-CmMzSuk5.js +0 -1
  171. package/src/assets/web-panel/assets/index-Dw-oPGSM.js +0 -1
  172. package/src/assets/web-panel/assets/index-OXemaG8f.js +0 -1
@@ -253,19 +253,103 @@ async function loadBuiltInFactories(commandName) {
253
253
  });
254
254
  }
255
255
  if (commandName === "desktop") {
256
- const [adapter, rounds, ledgerPorts, artifactPorts, ledgerBackend, store] =
257
- await Promise.all([
258
- import("./pm-exploration-ledger-adapter.js"),
259
- import("./pm-exploration-rounds.js"),
260
- import("./evolution-ledger-ports.js"),
261
- import("./evolution-artifact-ports.js"),
262
- import("./evolution-ledger-file-backend.js"),
263
- import("../artifact-store.js"),
264
- ]);
256
+ const [
257
+ adapter,
258
+ rounds,
259
+ receipts,
260
+ execution,
261
+ transitionCommitter,
262
+ recoverySnapshotStore,
263
+ evidence,
264
+ provider,
265
+ settlementAdapter,
266
+ businessGrader,
267
+ ledgerPorts,
268
+ artifactPorts,
269
+ ledgerBackend,
270
+ store,
271
+ ] = await Promise.all([
272
+ import("./pm-exploration-ledger-adapter.js"),
273
+ import("./pm-exploration-rounds.js"),
274
+ import("./pm-exploration-receipts.js"),
275
+ import("./pm-exploration-execution-host.js"),
276
+ import("./pm-exploration-transition-committer.js"),
277
+ import("./pm-exploration-recovery-snapshot-store.js"),
278
+ import("./pm-exploration-evidence-bundle.js"),
279
+ import("./pm-exploration-volcengine-provider.js"),
280
+ import("./pm-exploration-provider-settlement-adapter.js"),
281
+ import("./pm-exploration-business-grader.js"),
282
+ import("./evolution-ledger-ports.js"),
283
+ import("./evolution-artifact-ports.js"),
284
+ import("./evolution-ledger-file-backend.js"),
285
+ import("../artifact-store.js"),
286
+ ]);
265
287
  Object.assign(factories, {
266
288
  createPmExplorationLedgerAdapter: (options) =>
267
289
  new adapter.PmExplorationLedgerAdapter(options),
268
290
  createPmExplorationPlan: rounds.createPmExplorationPlan,
291
+ createPmExplorationJournal: rounds.createPmExplorationJournal,
292
+ enterPmExplorationDeepStage: rounds.enterPmExplorationDeepStage,
293
+ exportPmExplorationRecoverySnapshot:
294
+ rounds.exportPmExplorationRecoverySnapshot,
295
+ inspectPmExplorationJournal: rounds.inspectPmExplorationJournal,
296
+ createPmExplorationReceiptAuthority:
297
+ receipts.createPmExplorationReceiptAuthority,
298
+ createPmExplorationReceiptSigner:
299
+ receipts.createPmExplorationReceiptSigner,
300
+ getPmExplorationReceiptSignerAuthority:
301
+ receipts.getPmExplorationReceiptSignerAuthority,
302
+ inspectPmExplorationReceiptAuthority:
303
+ receipts.inspectPmExplorationReceiptAuthority,
304
+ createPmExplorationExecutionManifest:
305
+ execution.createPmExplorationExecutionManifest,
306
+ createPmExplorationRunner: execution.createPmExplorationRunner,
307
+ createPmExplorationGrader: execution.createPmExplorationGrader,
308
+ createPmExplorationMerger: execution.createPmExplorationMerger,
309
+ createPmExplorationEvaluator: execution.createPmExplorationEvaluator,
310
+ createPmExplorationExecutionHost:
311
+ execution.createPmExplorationExecutionHost,
312
+ isPmExplorationExecutionHost: execution.isPmExplorationExecutionHost,
313
+ inspectPmExplorationExecutionHost:
314
+ execution.inspectPmExplorationExecutionHost,
315
+ createPmExplorationTransitionCommitter:
316
+ transitionCommitter.createPmExplorationTransitionCommitter,
317
+ capturePmExplorationTransitionCommitter:
318
+ transitionCommitter.capturePmExplorationTransitionCommitter,
319
+ verifyPmExplorationTransitionEvidence:
320
+ transitionCommitter.verifyPmExplorationTransitionEvidence,
321
+ createPmExplorationRecoverySnapshotStore:
322
+ recoverySnapshotStore.createPmExplorationRecoverySnapshotStore,
323
+ capturePmExplorationRecoverySnapshotStore:
324
+ recoverySnapshotStore.capturePmExplorationRecoverySnapshotStore,
325
+ verifyPmExplorationRecoverySnapshotAck:
326
+ recoverySnapshotStore.verifyPmExplorationRecoverySnapshotAck,
327
+ executePmExplorationRound: execution.executePmExplorationRound,
328
+ mergePmExplorationBranches: execution.mergePmExplorationBranches,
329
+ evaluatePmExplorationMemory: execution.evaluatePmExplorationMemory,
330
+ createPmExplorationEvidenceBundle:
331
+ evidence.createPmExplorationEvidenceBundle,
332
+ verifyPmExplorationEvidenceBundle:
333
+ evidence.verifyPmExplorationEvidenceBundle,
334
+ createPmExplorationVolcengineProvider:
335
+ provider.createPmExplorationVolcengineProvider,
336
+ inspectPmExplorationVolcengineProvider:
337
+ provider.inspectPmExplorationVolcengineProvider,
338
+ invokePmExplorationVolcengine: provider.invokePmExplorationVolcengine,
339
+ verifyPmExplorationVolcengineSettlement:
340
+ provider.verifyPmExplorationVolcengineSettlement,
341
+ verifyPmExplorationVolcengineSettlementRecord:
342
+ provider.verifyPmExplorationVolcengineSettlementRecord,
343
+ createPmExplorationProviderSettlementAdapter: (options) =>
344
+ new settlementAdapter.PmExplorationProviderSettlementAdapter(options),
345
+ capturePmExplorationProviderSettlementStore:
346
+ settlementAdapter.capturePmExplorationProviderSettlementStore,
347
+ createPmExplorationReadOnlyOutcomeSource:
348
+ businessGrader.createPmExplorationReadOnlyOutcomeSource,
349
+ inspectPmExplorationReadOnlyOutcomeSource:
350
+ businessGrader.inspectPmExplorationReadOnlyOutcomeSource,
351
+ createPmExplorationBusinessGrader:
352
+ businessGrader.createPmExplorationBusinessGrader,
269
353
  createEvolutionLedgerDurableArtifactResolver:
270
354
  ledgerPorts.createEvolutionLedgerDurableArtifactResolver,
271
355
  createEvolutionArtifactPorts: (options) =>
@@ -568,6 +652,38 @@ function bindFactoriesToModule(factories, moduleDigest) {
568
652
  return factories[name](options);
569
653
  };
570
654
  }
655
+ for (const name of [
656
+ "createPmExplorationReceiptAuthority",
657
+ "createPmExplorationReceiptSigner",
658
+ "createPmExplorationProviderSettlementAdapter",
659
+ "createPmExplorationReadOnlyOutcomeSource",
660
+ ]) {
661
+ if (typeof factories[name] !== "function") continue;
662
+ result[name] = (options = {}) => {
663
+ const handlerArtifactDigest =
664
+ name === "createPmExplorationProviderSettlementAdapter"
665
+ ? options?.descriptor?.handlerArtifactDigest
666
+ : name === "createPmExplorationReadOnlyOutcomeSource"
667
+ ? options?.descriptor?.handlerArtifactDigest
668
+ : options?.handlerArtifactDigest;
669
+ if (handlerArtifactDigest !== moduleDigest)
670
+ throw new Error(
671
+ `${name} handlerArtifactDigest must equal the authenticated deployment module digest`,
672
+ );
673
+ return factories[name](options);
674
+ };
675
+ }
676
+ if (typeof factories.createPmExplorationExecutionManifest === "function") {
677
+ result.createPmExplorationExecutionManifest = (input = {}) => {
678
+ for (const authority of ["runner", "grader", "merger", "evaluator"]) {
679
+ if (input?.[authority]?.handlerArtifactDigest !== moduleDigest)
680
+ throw new Error(
681
+ `PM exploration ${authority} handlerArtifactDigest must equal the authenticated deployment module digest`,
682
+ );
683
+ }
684
+ return factories.createPmExplorationExecutionManifest(input);
685
+ };
686
+ }
571
687
  if (
572
688
  typeof factories.createWikiSkillBenchmarkExecutionManifest === "function"
573
689
  ) {
@@ -0,0 +1,346 @@
1
+ import { createHash } from "node:crypto";
2
+ import { performance } from "node:perf_hooks";
3
+ import { isProxy } from "node:util/types";
4
+
5
+ export const PM_EXPLORATION_BUDGET_OUTCOME_SCHEMA =
6
+ "chainlesschain.pm-exploration-budget-outcome/v1";
7
+
8
+ const TOOL_ID = /^[a-z][a-z0-9]*(?:[._:-][a-z0-9]+)*$/u;
9
+
10
+ function exact(value, keys, label) {
11
+ if (
12
+ !value ||
13
+ typeof value !== "object" ||
14
+ Array.isArray(value) ||
15
+ isProxy(value) ||
16
+ Object.getPrototypeOf(value) !== Object.prototype
17
+ ) {
18
+ throw new TypeError(`${label} must be a plain object`);
19
+ }
20
+ const actual = Reflect.ownKeys(value);
21
+ if (
22
+ actual.length !== keys.length ||
23
+ actual.some((key) => {
24
+ const descriptor = Object.getOwnPropertyDescriptor(value, key);
25
+ return (
26
+ typeof key !== "string" ||
27
+ !keys.includes(key) ||
28
+ !descriptor ||
29
+ !descriptor.enumerable ||
30
+ !("value" in descriptor)
31
+ );
32
+ })
33
+ ) {
34
+ throw new TypeError(`${label} has unexpected or accessor fields`);
35
+ }
36
+ }
37
+
38
+ function integer(value, label) {
39
+ if (!Number.isSafeInteger(value) || value < 0)
40
+ throw new TypeError(`${label} must be a non-negative safe integer`);
41
+ return value;
42
+ }
43
+
44
+ function copyJson(
45
+ value,
46
+ label,
47
+ context = { bytes: 0, nodes: 0, seen: new WeakSet() },
48
+ ) {
49
+ if (
50
+ value === null ||
51
+ typeof value === "string" ||
52
+ typeof value === "boolean"
53
+ ) {
54
+ context.bytes += Buffer.byteLength(JSON.stringify(value));
55
+ if (context.bytes > 1024 * 1024)
56
+ throw new TypeError(`${label} exceeds its byte bound`);
57
+ return value;
58
+ }
59
+ if (typeof value === "number" && Number.isFinite(value)) return value;
60
+ if (
61
+ !value ||
62
+ typeof value !== "object" ||
63
+ isProxy(value) ||
64
+ context.seen.has(value) ||
65
+ context.nodes >= 20_000
66
+ ) {
67
+ throw new TypeError(`${label} must be bounded acyclic JSON data`);
68
+ }
69
+ context.seen.add(value);
70
+ context.nodes += 1;
71
+ if (Array.isArray(value)) {
72
+ if (
73
+ Object.getPrototypeOf(value) !== Array.prototype ||
74
+ Reflect.ownKeys(value).length !== value.length + 1
75
+ ) {
76
+ throw new TypeError(`${label} must be a dense plain array`);
77
+ }
78
+ const result = [];
79
+ for (let index = 0; index < value.length; index += 1) {
80
+ const descriptor = Object.getOwnPropertyDescriptor(value, String(index));
81
+ if (!descriptor || !descriptor.enumerable || !("value" in descriptor))
82
+ throw new TypeError(`${label} contains a hole or accessor`);
83
+ result.push(copyJson(descriptor.value, label, context));
84
+ }
85
+ context.seen.delete(value);
86
+ return result;
87
+ }
88
+ if (Object.getPrototypeOf(value) !== Object.prototype)
89
+ throw new TypeError(`${label} must use the default object prototype`);
90
+ const result = {};
91
+ for (const key of Reflect.ownKeys(value)) {
92
+ const descriptor = Object.getOwnPropertyDescriptor(value, key);
93
+ if (
94
+ typeof key !== "string" ||
95
+ !descriptor ||
96
+ !descriptor.enumerable ||
97
+ !("value" in descriptor)
98
+ ) {
99
+ throw new TypeError(`${label} contains a symbol or accessor`);
100
+ }
101
+ context.bytes += Buffer.byteLength(key);
102
+ if (context.bytes > 1024 * 1024)
103
+ throw new TypeError(`${label} exceeds its byte bound`);
104
+ Object.defineProperty(result, key, {
105
+ value: copyJson(descriptor.value, label, context),
106
+ enumerable: true,
107
+ configurable: true,
108
+ writable: true,
109
+ });
110
+ }
111
+ context.seen.delete(value);
112
+ return result;
113
+ }
114
+
115
+ function traceDigest(reason, failureClass) {
116
+ return `sha256:${createHash("sha256")
117
+ .update(PM_EXPLORATION_BUDGET_OUTCOME_SCHEMA)
118
+ .update("\0")
119
+ .update(reason)
120
+ .update("\0")
121
+ .update(failureClass)
122
+ .digest("hex")}`;
123
+ }
124
+
125
+ function abortReason(signal) {
126
+ const reason = signal?.reason;
127
+ if (reason instanceof PmExplorationBudgetError) return reason.reason;
128
+ return "parent-aborted";
129
+ }
130
+
131
+ export class PmExplorationBudgetError extends Error {
132
+ constructor(reason) {
133
+ super(`PM exploration execution stopped: ${reason}`);
134
+ this.name = "AbortError";
135
+ this.code = "CC_PM_EXPLORATION_BUDGET_EXHAUSTED";
136
+ this.reason = reason;
137
+ }
138
+ }
139
+
140
+ export async function executePmExplorationBudgetedOperation({
141
+ limits,
142
+ operation,
143
+ allowedToolIds = [],
144
+ invokeTool = null,
145
+ parentSignal = null,
146
+ now = performance.now.bind(performance),
147
+ setTimer = setTimeout,
148
+ clearTimer = clearTimeout,
149
+ } = {}) {
150
+ exact(
151
+ limits,
152
+ ["maxTokens", "maxToolCalls", "maxWallClockMs"],
153
+ "PM exploration budget limits",
154
+ );
155
+ const maximum = Object.freeze({
156
+ tokens: integer(limits.maxTokens, "maxTokens"),
157
+ toolCalls: integer(limits.maxToolCalls, "maxToolCalls"),
158
+ wallClockMs: integer(limits.maxWallClockMs, "maxWallClockMs"),
159
+ });
160
+ if (typeof operation !== "function" || isProxy(operation))
161
+ throw new TypeError(
162
+ "PM exploration budget operation must be a direct function",
163
+ );
164
+ if (
165
+ invokeTool !== null &&
166
+ (typeof invokeTool !== "function" || isProxy(invokeTool))
167
+ )
168
+ throw new TypeError("PM exploration tool broker must be a direct function");
169
+ if (!Array.isArray(allowedToolIds) || isProxy(allowedToolIds))
170
+ throw new TypeError("allowedToolIds must be an array");
171
+ const toolIds = new Set();
172
+ for (const toolId of allowedToolIds) {
173
+ if (
174
+ typeof toolId !== "string" ||
175
+ toolId.length > 256 ||
176
+ !TOOL_ID.test(toolId) ||
177
+ toolIds.has(toolId)
178
+ ) {
179
+ throw new TypeError("allowedToolIds contains an invalid or duplicate ID");
180
+ }
181
+ toolIds.add(toolId);
182
+ }
183
+ if (
184
+ (parentSignal !== null && !(parentSignal instanceof AbortSignal)) ||
185
+ typeof now !== "function" ||
186
+ typeof setTimer !== "function" ||
187
+ typeof clearTimer !== "function"
188
+ ) {
189
+ throw new TypeError(
190
+ "PM exploration budget runtime dependencies are invalid",
191
+ );
192
+ }
193
+
194
+ const controller = new AbortController();
195
+ const totals = { tokens: 0, toolCalls: 0 };
196
+ let activeTools = 0;
197
+ let closed = false;
198
+ let stoppedReason = null;
199
+ const startedAt = Number(now());
200
+ if (!Number.isFinite(startedAt))
201
+ throw new TypeError("PM exploration monotonic clock is invalid");
202
+
203
+ const stop = (reason) => {
204
+ if (stoppedReason === null) stoppedReason = reason;
205
+ if (!controller.signal.aborted)
206
+ controller.abort(new PmExplorationBudgetError(stoppedReason));
207
+ };
208
+ const assertOpen = () => {
209
+ if (closed) throw new Error("PM exploration budget runtime is closed");
210
+ if (controller.signal.aborted)
211
+ throw (
212
+ controller.signal.reason ?? new PmExplorationBudgetError(stoppedReason)
213
+ );
214
+ };
215
+
216
+ const runtime = Object.freeze({
217
+ signal: controller.signal,
218
+ recordTokens(count) {
219
+ assertOpen();
220
+ const delta = integer(count, "token count");
221
+ if (!Number.isSafeInteger(totals.tokens + delta))
222
+ throw new TypeError("token total exceeds the safe integer range");
223
+ totals.tokens += delta;
224
+ if (totals.tokens > maximum.tokens) {
225
+ stop("max-tokens");
226
+ throw controller.signal.reason;
227
+ }
228
+ return totals.tokens;
229
+ },
230
+ async invokeTool(toolId, input) {
231
+ assertOpen();
232
+ if (!toolIds.has(toolId)) {
233
+ stop("tool-not-allowed");
234
+ throw controller.signal.reason;
235
+ }
236
+ totals.toolCalls += 1;
237
+ if (totals.toolCalls > maximum.toolCalls) {
238
+ stop("max-tool-calls");
239
+ throw controller.signal.reason;
240
+ }
241
+ if (invokeTool === null) {
242
+ stop("tool-broker-unavailable");
243
+ throw controller.signal.reason;
244
+ }
245
+ const safeInput = copyJson(input, "tool input");
246
+ activeTools += 1;
247
+ try {
248
+ const output = await invokeTool(
249
+ Object.freeze({
250
+ toolId,
251
+ input: safeInput,
252
+ signal: controller.signal,
253
+ }),
254
+ );
255
+ assertOpen();
256
+ return copyJson(output, "tool output");
257
+ } finally {
258
+ activeTools -= 1;
259
+ }
260
+ },
261
+ snapshot() {
262
+ const current = Number(now());
263
+ if (!Number.isFinite(current) || current < startedAt)
264
+ throw new TypeError("PM exploration monotonic clock moved backwards");
265
+ return Object.freeze({
266
+ tokens: totals.tokens,
267
+ toolCalls: totals.toolCalls,
268
+ wallClockMs: Math.ceil(current - startedAt),
269
+ });
270
+ },
271
+ });
272
+
273
+ const parentAbort = () => stop(abortReason(parentSignal));
274
+ if (parentSignal) {
275
+ if (parentSignal.aborted) parentAbort();
276
+ else parentSignal.addEventListener("abort", parentAbort, { once: true });
277
+ }
278
+ if (maximum.wallClockMs === 0) stop("max-wall-clock-ms");
279
+
280
+ let timer = null;
281
+ const timeout = new Promise((resolve) => {
282
+ timer = setTimer(() => {
283
+ stop("max-wall-clock-ms");
284
+ resolve(Object.freeze({ kind: "stopped" }));
285
+ }, maximum.wallClockMs);
286
+ });
287
+ const attempted = Promise.resolve()
288
+ .then(() => {
289
+ if (controller.signal.aborted)
290
+ throw (
291
+ controller.signal.reason ??
292
+ new PmExplorationBudgetError(stoppedReason)
293
+ );
294
+ return operation(runtime);
295
+ })
296
+ .then(
297
+ (value) => Object.freeze({ kind: "value", value }),
298
+ () => Object.freeze({ kind: "error" }),
299
+ );
300
+ const winner = controller.signal.aborted
301
+ ? Object.freeze({ kind: "stopped" })
302
+ : await Promise.race([attempted, timeout]);
303
+
304
+ if (timer !== null) clearTimer(timer);
305
+ if (parentSignal && !parentSignal.aborted)
306
+ parentSignal.removeEventListener("abort", parentAbort);
307
+ let current = Number(now());
308
+ if (!Number.isFinite(current) || current < startedAt) current = startedAt;
309
+ const wallClockMs = Math.ceil(current - startedAt);
310
+ if (wallClockMs > maximum.wallClockMs) stop("max-wall-clock-ms");
311
+ if (activeTools !== 0) stop("unsettled-tools");
312
+ closed = true;
313
+
314
+ const metrics = Object.freeze({
315
+ tokens: totals.tokens,
316
+ toolCalls: totals.toolCalls,
317
+ wallClockMs,
318
+ });
319
+ let status;
320
+ let failureClass;
321
+ let reason;
322
+ let value = null;
323
+ if (stoppedReason !== null || winner.kind === "stopped") {
324
+ status = "aborted";
325
+ reason = stoppedReason ?? "parent-aborted";
326
+ failureClass = reason.startsWith("max-") ? "budget" : "sandbox";
327
+ } else if (winner.kind === "error") {
328
+ status = "failed";
329
+ reason = "operation-failed";
330
+ failureClass = "infrastructure";
331
+ } else {
332
+ status = "succeeded";
333
+ reason = "completed";
334
+ failureClass = "none";
335
+ value = winner.value;
336
+ }
337
+ return Object.freeze({
338
+ schema: PM_EXPLORATION_BUDGET_OUTCOME_SCHEMA,
339
+ status,
340
+ failureClass,
341
+ reason,
342
+ metrics,
343
+ traceDigest: traceDigest(reason, failureClass),
344
+ value,
345
+ });
346
+ }