chainlesschain 0.166.65 → 0.166.68

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 (198) hide show
  1. package/README.md +20 -12
  2. package/package.json +4 -4
  3. package/src/assets/web-panel/assets/{AIOps-Byz17CTN.js → AIOps-CXkSNOGY.js} +1 -1
  4. package/src/assets/web-panel/assets/{ActionButton-C5LiW2-J.js → ActionButton-ysMR6gTs.js} +1 -1
  5. package/src/assets/web-panel/assets/{Analytics-D1INcvZF.js → Analytics-WGZ0sWuw.js} +3 -3
  6. package/src/assets/web-panel/assets/{AppLayout-DZzHO1VV.js → AppLayout-Cs2iRlQG.js} +4 -4
  7. package/src/assets/web-panel/assets/{Artifacts-WfYQL6Ia.js → Artifacts-5IdfxWz0.js} +1 -1
  8. package/src/assets/web-panel/assets/{Audit-DohBoGWO.js → Audit-U9V434QX.js} +1 -1
  9. package/src/assets/web-panel/assets/{BackgroundAgents-Chtk-Hde.js → BackgroundAgents-BvFwxPlC.js} +1 -1
  10. package/src/assets/web-panel/assets/{Backup-B813PuMz.js → Backup-C9yTr9hO.js} +1 -1
  11. package/src/assets/web-panel/assets/{BaseInput-DaDdWWgK.js → BaseInput-BdsSwUgE.js} +1 -1
  12. package/src/assets/web-panel/assets/{Chat-D4pJ6oZ7.js → Chat-BB_2oBgH.js} +5 -5
  13. package/src/assets/web-panel/assets/ChatBubbleRenderer-Bpf1hDUl.js +1 -0
  14. package/src/assets/web-panel/assets/{Checkbox-Clo9TvO6.js → Checkbox-v6M5m7dK.js} +1 -1
  15. package/src/assets/web-panel/assets/{Codegen-uejLg8Ih.js → Codegen-CtouWSIz.js} +1 -1
  16. package/src/assets/web-panel/assets/{Col-B7nbx-iJ.js → Col-CqQJ4ORW.js} +1 -1
  17. package/src/assets/web-panel/assets/{Community-FEyjPK1j.js → Community-BO__QCOy.js} +1 -1
  18. package/src/assets/web-panel/assets/{Compact-B6Fk0Kn6.js → Compact-D0Kq4xlH.js} +1 -1
  19. package/src/assets/web-panel/assets/{Compliance-BQG8goUl.js → Compliance-BSLKKBjA.js} +1 -1
  20. package/src/assets/web-panel/assets/{Cowork-CbBeEfHp.js → Cowork-VsujXW5o.js} +3 -3
  21. package/src/assets/web-panel/assets/{Cron-DPzlFcEZ.js → Cron-j8DbLGi5.js} +2 -2
  22. package/src/assets/web-panel/assets/{Crosschain-B8pWJrbg.js → Crosschain-DWpYH1yN.js} +1 -1
  23. package/src/assets/web-panel/assets/{DID-gGQHUlFN.js → DID-mLaRxLQh.js} +2 -2
  24. package/src/assets/web-panel/assets/{Dashboard-C2TMFHrn.js → Dashboard-Cff033Jr.js} +2 -2
  25. package/src/assets/web-panel/assets/{Dropdown-BVPxGbll.js → Dropdown-B1Upt6fP.js} +1 -1
  26. package/src/assets/web-panel/assets/{EmailListRenderer-CNPxs0hd.js → EmailListRenderer-CPtb8joV.js} +1 -1
  27. package/src/assets/web-panel/assets/{EvolutionSettings-_XTiB7q1.js → EvolutionSettings-CVh4Uv4g.js} +1 -1
  28. package/src/assets/web-panel/assets/{FamilyGuardDashboard-UyE3VWtI.js → FamilyGuardDashboard-CrD1PhbF.js} +1 -1
  29. package/src/assets/web-panel/assets/{Federation-CLt6FHK-.js → Federation-ftxrvqW5.js} +1 -1
  30. package/src/assets/web-panel/assets/{FormItemContext-CdNQPRPw.js → FormItemContext-9O80slC1.js} +1 -1
  31. package/src/assets/web-panel/assets/{GenericCardRenderer-BJ0AMhrh.js → GenericCardRenderer-DaYvYIj9.js} +1 -1
  32. package/src/assets/web-panel/assets/{Git-CQnvMfOM.js → Git-BKZh0YE5.js} +2 -2
  33. package/src/assets/web-panel/assets/{Governance-deYsHC-o.js → Governance-vWbN873j.js} +1 -1
  34. package/src/assets/web-panel/assets/{Inference-qaSck43z.js → Inference-BN6RR-l8.js} +1 -1
  35. package/src/assets/web-panel/assets/{KnowledgeGraph-De0aJ3Ls.js → KnowledgeGraph-x49x9m7Q.js} +1 -1
  36. package/src/assets/web-panel/assets/Logs-Co2EPLsJ.js +2 -0
  37. package/src/assets/web-panel/assets/MarkdownRenderer-D7wIB-c7.js +1 -0
  38. package/src/assets/web-panel/assets/{Marketplace-Byz3xCBN.js → Marketplace-DpPu6XQp.js} +1 -1
  39. package/src/assets/web-panel/assets/{McpTools-DOZUUW6z.js → McpTools-BR0ksiax.js} +3 -3
  40. package/src/assets/web-panel/assets/{Memory-C33wC2hA.js → Memory-BXznJ5-C.js} +2 -2
  41. package/src/assets/web-panel/assets/{MobileBridge-zZe-T_6M.js → MobileBridge-BHSOpfv7.js} +1 -1
  42. package/src/assets/web-panel/assets/{MobileProjects-CRnUIume.js → MobileProjects-DdWmgIup.js} +1 -1
  43. package/src/assets/web-panel/assets/{Mtc-C1xlRVAN.js → Mtc-D9Rk_IGT.js} +5 -5
  44. package/src/assets/web-panel/assets/{MtcAudit-D0U07bIi.js → MtcAudit--i8q1lKc.js} +2 -2
  45. package/src/assets/web-panel/assets/{Multisig-DF8uvV3h.js → Multisig-BHnNG7R9.js} +3 -3
  46. package/src/assets/web-panel/assets/{NLProgramming-bBPGAFlt.js → NLProgramming-Duo1ij2_.js} +1 -1
  47. package/src/assets/web-panel/assets/{Notes-BHAaOsgg.js → Notes-B44Le73p.js} +3 -3
  48. package/src/assets/web-panel/assets/{NotificationSettings-Cl0fG_rA.js → NotificationSettings-C3oy_7Gf.js} +1 -1
  49. package/src/assets/web-panel/assets/{OrderTableRenderer-BEPAs8Zv.js → OrderTableRenderer-Da_73SI5.js} +1 -1
  50. package/src/assets/web-panel/assets/{Organization-BAxSwgk5.js → Organization-ChsSwKxT.js} +4 -4
  51. package/src/assets/web-panel/assets/{Overflow-D68KubAu.js → Overflow-DR5G_cCn.js} +1 -1
  52. package/src/assets/web-panel/assets/{P2P-bhdT17zk.js → P2P-yfaobqow.js} +2 -2
  53. package/src/assets/web-panel/assets/PdhVaultBrowser-DgimH6Jp.js +7 -0
  54. package/src/assets/web-panel/assets/{Permissions-Bq8fvkak.js → Permissions-DhinFvtE.js} +4 -4
  55. package/src/assets/web-panel/assets/{PersonalDataHub-BYd2JEic.js → PersonalDataHub-CfeNVic1.js} +5 -5
  56. package/src/assets/web-panel/assets/{Pipeline-Csg_ja69.js → Pipeline-CGKO26Nk.js} +1 -1
  57. package/src/assets/web-panel/assets/{Privacy-lwxwLj4M.js → Privacy-CxxfYEJh.js} +1 -1
  58. package/src/assets/web-panel/assets/{ProjectInit-BdBZkH8z.js → ProjectInit-CZsaAab9.js} +2 -2
  59. package/src/assets/web-panel/assets/{ProjectSettings-ClWgFy-K.js → ProjectSettings-BUm_6clQ.js} +2 -2
  60. package/src/assets/web-panel/assets/{Projects-Bu-qj8N1.js → Projects-Capr8bVq.js} +1 -1
  61. package/src/assets/web-panel/assets/{Providers-DEjxrxw3.js → Providers-D28VqPja.js} +1 -1
  62. package/src/assets/web-panel/assets/{QrScannerModal-eccy-8Vi.js → QrScannerModal-Cj200vUb.js} +1 -1
  63. package/src/assets/web-panel/assets/{QuickAsk-Vx3uDvFg.js → QuickAsk-BGpnEiam.js} +1 -1
  64. package/src/assets/web-panel/assets/{Recommend-CfUivNps.js → Recommend-Ix79Tpni.js} +1 -1
  65. package/src/assets/web-panel/assets/{RemoteSession-BU4gk7GI.js → RemoteSession-BdGAFbIk.js} +3 -3
  66. package/src/assets/web-panel/assets/{Reputation-CbPzdZ0C.js → Reputation-B1Lis0Wk.js} +1 -1
  67. package/src/assets/web-panel/assets/{Row-CYLrgfKA.js → Row-Ba_okwOW.js} +1 -1
  68. package/src/assets/web-panel/assets/{RssFeed-DbY1oyuv.js → RssFeed-DDbEuI-m.js} +3 -3
  69. package/src/assets/web-panel/assets/{Search-QeW41K5r.js → Search-D89wAkMy.js} +1 -1
  70. package/src/assets/web-panel/assets/{Security-CJxf1kLZ.js → Security-CJKCKAU-.js} +3 -3
  71. package/src/assets/web-panel/assets/{Services-CFO9ySZc.js → Services-mitEc1XV.js} +2 -2
  72. package/src/assets/web-panel/assets/{Skeleton-CQFjeQN0.js → Skeleton-CnBjLDfX.js} +1 -1
  73. package/src/assets/web-panel/assets/{Skills-CLLB4INW.js → Skills-DSzDYvH3.js} +1 -1
  74. package/src/assets/web-panel/assets/{Sla-DxeLIJk0.js → Sla-CglJ_4p3.js} +1 -1
  75. package/src/assets/web-panel/assets/SpeechSettings-BicWJS7f.js +1 -0
  76. package/src/assets/web-panel/assets/{SyncSettings-C6NOkcQK.js → SyncSettings-Cq7o6fmr.js} +2 -2
  77. package/src/assets/web-panel/assets/{Tasks-LmVPWDfQ.js → Tasks-DOxFOBpU.js} +1 -1
  78. package/src/assets/web-panel/assets/{Templates-BdEfUoVB.js → Templates-bY0wSbQM.js} +1 -1
  79. package/src/assets/web-panel/assets/{Tenant-IUlESacN.js → Tenant-BAyyl0qX.js} +1 -1
  80. package/src/assets/web-panel/assets/{Terminal-B9pDe7sn.js → Terminal-BGBhSpqc.js} +2 -2
  81. package/src/assets/web-panel/assets/{TimelineRenderer-ZCwB-Pki.js → TimelineRenderer-BvW5lXYz.js} +1 -1
  82. package/src/assets/web-panel/assets/{Tokens-4qk16LX1.js → Tokens-Ua_LIx8-.js} +1 -1
  83. package/src/assets/web-panel/assets/{Trigger-jXNyargn.js → Trigger-BGwb2KL1.js} +1 -1
  84. package/src/assets/web-panel/assets/{Trust-D13PydtT.js → Trust-CD2IEHvj.js} +1 -1
  85. package/src/assets/web-panel/assets/{UkeySign-yPgws6mS.js → UkeySign-D5LetK6P.js} +1 -1
  86. package/src/assets/web-panel/assets/{VideoEditing-B329WjpG.js → VideoEditing-oP7ehFgR.js} +1 -1
  87. package/src/assets/web-panel/assets/{Wallet-T8VM-Ttm.js → Wallet-BBtu4-xa.js} +4 -4
  88. package/src/assets/web-panel/assets/{WebAuthn-XuRibrpP.js → WebAuthn-iSPRU4Ht.js} +5 -5
  89. package/src/assets/web-panel/assets/{WorkflowEditor-D1Gwz3YR.js → WorkflowEditor-DuEDhQmB.js} +1 -1
  90. package/src/assets/web-panel/assets/{chat-DjydtnT-.js → chat-DGDgqvvm.js} +1 -1
  91. package/src/assets/web-panel/assets/{colors-gFtBvPrr.js → colors-DGQMWa1-.js} +1 -1
  92. package/src/assets/web-panel/assets/{compact-item-CndxhGfx.js → compact-item-COVznBL4.js} +1 -1
  93. package/src/assets/web-panel/assets/{createContext-DnfGpd0L.js → createContext-DIxVeHXI.js} +1 -1
  94. package/src/assets/web-panel/assets/devWarning-CjR9h-Z_.js +1 -0
  95. package/src/assets/web-panel/assets/{hasIn-CmT5hRVW.js → hasIn-DkxZO3E9.js} +1 -1
  96. package/src/assets/web-panel/assets/{index-BGlmPbl_.js → index-0ToBFsvW.js} +1 -1
  97. package/src/assets/web-panel/assets/{index-BsRKmb6k.js → index-2JZizEPc.js} +1 -1
  98. package/src/assets/web-panel/assets/{index-C14jryXi.js → index-BAL2p7YC.js} +1 -1
  99. package/src/assets/web-panel/assets/{index-B0WFjxWs.js → index-BAlrovUm.js} +1 -1
  100. package/src/assets/web-panel/assets/{index-BlTcxT_L.js → index-BBw2MLIe.js} +1 -1
  101. package/src/assets/web-panel/assets/{index-DjcR-CwS.js → index-BHH95jcm.js} +1 -1
  102. package/src/assets/web-panel/assets/{index-DreYqebI.js → index-BOTshZNx.js} +1 -1
  103. package/src/assets/web-panel/assets/{index-DaEPE2DC.js → index-BQm7ntcn.js} +1 -1
  104. package/src/assets/web-panel/assets/{index-BNHdO6Jr.js → index-BUqwlzc8.js} +1 -1
  105. package/src/assets/web-panel/assets/{index-C3HvYeA3.js → index-BY6MSbWT.js} +1 -1
  106. package/src/assets/web-panel/assets/{index-DUlubR4l.js → index-BY9Ossof.js} +1 -1
  107. package/src/assets/web-panel/assets/{index-Dbpk75MO.js → index-BgM-3a1w.js} +1 -1
  108. package/src/assets/web-panel/assets/{index-CqpR0Des.js → index-Bv0_u0ze.js} +1 -1
  109. package/src/assets/web-panel/assets/{index-DjY-3sMA.js → index-C3XeNS82.js} +3 -3
  110. package/src/assets/web-panel/assets/{index-DV6NrfJx.js → index-C3bN6751.js} +1 -1
  111. package/src/assets/web-panel/assets/{index-DuAvYTmY.js → index-CNRRrP3-.js} +1 -1
  112. package/src/assets/web-panel/assets/{index-BW3nWiu0.js → index-CV0KnNqR.js} +1 -1
  113. package/src/assets/web-panel/assets/{index-CZLDbPTa.js → index-CcNGQWum.js} +1 -1
  114. package/src/assets/web-panel/assets/{index-D5na0B7G.js → index-Ci34vbh0.js} +1 -1
  115. package/src/assets/web-panel/assets/{index-DoBKSzqu.js → index-ClQVcrFt.js} +1 -1
  116. package/src/assets/web-panel/assets/{index-CuOx4Pbe.js → index-Cligb-Dl.js} +1 -1
  117. package/src/assets/web-panel/assets/{index-CgMKElUh.js → index-CokrhbY2.js} +1 -1
  118. package/src/assets/web-panel/assets/{index-BFif4Cev.js → index-CpZxDiVK.js} +1 -1
  119. package/src/assets/web-panel/assets/{index-HHP1zzo7.js → index-CyMHF2Bi.js} +1 -1
  120. package/src/assets/web-panel/assets/{index-_-wGLtAg.js → index-DDwPBGdA.js} +1 -1
  121. package/src/assets/web-panel/assets/{index-ktN-K1Tf.js → index-DU1ArKl5.js} +1 -1
  122. package/src/assets/web-panel/assets/{index-C4Mqhmas.js → index-DV0H83eS.js} +1 -1
  123. package/src/assets/web-panel/assets/index-D_nxBMX5.js +1 -0
  124. package/src/assets/web-panel/assets/{index-BXNUTiW8.js → index-DaWQSp5a.js} +1 -1
  125. package/src/assets/web-panel/assets/{index-DKyuE_Y2.js → index-DmduvOYT.js} +1 -1
  126. package/src/assets/web-panel/assets/{index-DV2PR3Fa.js → index-ECoDhyH3.js} +1 -1
  127. package/src/assets/web-panel/assets/{index-BVM_w30N.js → index-ZcqTvPnt.js} +1 -1
  128. package/src/assets/web-panel/assets/{index-CRqz8TtI.js → index-b2_M6o20.js} +1 -1
  129. package/src/assets/web-panel/assets/{index-CB27echm.js → index-b_0qTo8O.js} +1 -1
  130. package/src/assets/web-panel/assets/{index-D88-8bsB.js → index-dfYkGovV.js} +1 -1
  131. package/src/assets/web-panel/assets/{index-DGbKeg8G.js → index-jo7DbU0w.js} +1 -1
  132. package/src/assets/web-panel/assets/{index-D2d7358Y.js → index-usmG13jq.js} +1 -1
  133. package/src/assets/web-panel/assets/{index-zQf599Uq.js → index-vXrktF3e.js} +1 -1
  134. package/src/assets/web-panel/assets/index-z_cTUMX-.js +1 -0
  135. package/src/assets/web-panel/assets/{initDefaultProps-KV3V-PNH.js → initDefaultProps-CkSeiBwL.js} +1 -1
  136. package/src/assets/web-panel/assets/{motion-PFGQg7_X.js → motion-CSzhDP0s.js} +1 -1
  137. package/src/assets/web-panel/assets/{move-Dnl79wq4.js → move-mgCt4iC6.js} +1 -1
  138. package/src/assets/web-panel/assets/{mtc-parser-Bwl5JH9V.js → mtc-parser-BEZBLcKt.js} +1 -1
  139. package/src/assets/web-panel/assets/{omit-DCcTtM1l.js → omit-BsHctMEr.js} +1 -1
  140. package/src/assets/web-panel/assets/{pickAttrs-Cl6BjjDf.js → pickAttrs-1BHamnGW.js} +1 -1
  141. package/src/assets/web-panel/assets/{placementArrow-fdqhyo42.js → placementArrow--Vb4Bd7l.js} +1 -1
  142. package/src/assets/web-panel/assets/{responsiveObserve-DYQpmcDW.js → responsiveObserve-DD33SqCm.js} +1 -1
  143. package/src/assets/web-panel/assets/{slide-C4l-VfO4.js → slide-DfrLtxgK.js} +1 -1
  144. package/src/assets/web-panel/assets/{statusUtils-DYDw_dyZ.js → statusUtils-D9Pe_gXW.js} +1 -1
  145. package/src/assets/web-panel/assets/{styleChecker-BEsubSMu.js → styleChecker-0NY5iMun.js} +1 -1
  146. package/src/assets/web-panel/assets/{useFlexGapSupport-Cj82ggQ_.js → useFlexGapSupport-DSsZstwg.js} +1 -1
  147. package/src/assets/web-panel/assets/{useFs-B7L1eJ0V.js → useFs-BU8HyH59.js} +1 -1
  148. package/src/assets/web-panel/assets/{usePersonalDataHub-DVlJVD4d.js → usePersonalDataHub-D_xttink.js} +1 -1
  149. package/src/assets/web-panel/assets/{vnode-BBAbRN_Y.js → vnode-39VhX2lM.js} +1 -1
  150. package/src/assets/web-panel/assets/{zoom-BYn48q-I.js → zoom-D5KQ8Pks.js} +1 -1
  151. package/src/assets/web-panel/index.html +1 -1
  152. package/src/data/changelog.json +20 -7
  153. package/src/lib/dependency-install-policy.js +1 -1
  154. package/src/lib/evolution/browser-download-action-authority.js +747 -0
  155. package/src/lib/evolution/browser-download-artifact-disposal-authority.js +436 -0
  156. package/src/lib/evolution/browser-filesystem-quarantine-custody.js +2453 -0
  157. package/src/lib/evolution/browser-filesystem-quarantine-disposal.js +36 -0
  158. package/src/lib/evolution/browser-keyboard-action-authority.js +560 -0
  159. package/src/lib/evolution/browser-navigation-action-authority.js +546 -0
  160. package/src/lib/evolution/browser-quarantine-lock-maintenance-authority.js +573 -0
  161. package/src/lib/evolution/browser-quarantine-operator-revocation-authority.js +442 -0
  162. package/src/lib/evolution/browser-quarantine-retention-authority.js +503 -0
  163. package/src/lib/evolution/browser-quarantine-retention-scheduler.js +207 -0
  164. package/src/lib/evolution/browser-quarantined-download-executor.js +525 -0
  165. package/src/lib/evolution/browser-tab-open-action-authority.js +491 -0
  166. package/src/lib/evolution/browser-vision-action-authority.js +444 -0
  167. package/src/lib/evolution/browser-vision-observation-authority.js +304 -0
  168. package/src/lib/evolution/evolution-deployment-loader.js +202 -1
  169. package/src/lib/evolution/evolution-eval-child-evidence-ledger-adapter.js +5 -0
  170. package/src/lib/evolution/evolution-eval-gate.js +2 -1
  171. package/src/lib/evolution/evolution-eval-process-supervisor-worker.mjs +71 -9
  172. package/src/lib/evolution/evolution-eval-process-supervisor.js +276 -9
  173. package/src/lib/evolution/evolution-workbench-metrics.js +81 -21
  174. package/src/lib/evolution/pm-exploration-benchmark.js +747 -0
  175. package/src/lib/evolution/pm-exploration-budget-executor.js +106 -9
  176. package/src/lib/evolution/pm-exploration-egress-authority.js +382 -0
  177. package/src/lib/evolution/pm-exploration-evidence-bundle.js +149 -44
  178. package/src/lib/evolution/pm-exploration-execution-host.js +1254 -8
  179. package/src/lib/evolution/pm-exploration-process-grader.js +458 -0
  180. package/src/lib/evolution/pm-exploration-process-reviewer.js +456 -0
  181. package/src/lib/evolution/pm-exploration-process-runner.js +500 -0
  182. package/src/lib/evolution/pm-exploration-receipts.js +211 -11
  183. package/src/lib/evolution/pm-exploration-recovery-snapshot-store.js +465 -46
  184. package/src/lib/evolution/pm-exploration-transition-committer.js +185 -34
  185. package/src/lib/evolution/skill-outcome-index-authority.js +7 -3
  186. package/src/lib/governance-coverage.js +1 -1
  187. package/src/lib/headless-manifest.js +1 -1
  188. package/src/lib/protocol-replay.js +1 -1
  189. package/src/lib/skill-outcome-transcript-authority.js +45 -5
  190. package/src/runtime/agent-core.js +17 -0
  191. package/src/assets/web-panel/assets/ChatBubbleRenderer-Cf3LLgDc.js +0 -1
  192. package/src/assets/web-panel/assets/Logs-ZtS98jCm.js +0 -2
  193. package/src/assets/web-panel/assets/MarkdownRenderer-CTsYo9NN.js +0 -1
  194. package/src/assets/web-panel/assets/PdhVaultBrowser-DqaO6wgH.js +0 -7
  195. package/src/assets/web-panel/assets/SpeechSettings-D4FA9KYI.js +0 -1
  196. package/src/assets/web-panel/assets/devWarning-D60SbiD-.js +0 -1
  197. package/src/assets/web-panel/assets/index-C0yR4_7h.js +0 -1
  198. package/src/assets/web-panel/assets/index-D4xuvo03.js +0 -1
@@ -0,0 +1,456 @@
1
+ import { createHash, randomBytes } from "node:crypto";
2
+ import { isProxy } from "node:util/types";
3
+
4
+ import {
5
+ buildEvolutionEvalAttestationDigest,
6
+ computeEvolutionEvalIsolatedTargetDigest,
7
+ computeEvolutionEvalSignedEvidenceDigest,
8
+ computeEvolutionEvalSupervisedResultDigest,
9
+ computeEvolutionEvalTargetAuthorityDigest,
10
+ EVOLUTION_EVAL_ATTESTATION_PURPOSES,
11
+ EVOLUTION_EVAL_ISOLATED_TARGET_SCHEMA,
12
+ EVOLUTION_EVAL_SUPERVISION_SCHEMA,
13
+ } from "./evolution-eval-gate.js";
14
+ import { isEvolutionEvalProcessSupervisor } from "./evolution-eval-process-supervisor.js";
15
+
16
+ export const PM_EXPLORATION_MERGER_ISOLATION_SCHEMA =
17
+ "chainlesschain.pm-exploration-merger-isolation/v1";
18
+ export const PM_EXPLORATION_EVALUATOR_ISOLATION_SCHEMA =
19
+ "chainlesschain.pm-exploration-evaluator-isolation/v1";
20
+ export const PM_EXPLORATION_CURRICULUM_ISOLATION_SCHEMA =
21
+ "chainlesschain.pm-exploration-curriculum-isolation/v1";
22
+
23
+ const DIGEST = /^sha256:[a-f0-9]{64}$/u;
24
+ const ID = /^[a-z][a-z0-9]*(?:[._:-][a-z0-9]+)*$/u;
25
+ const EXECUTORS = new WeakMap();
26
+ const CONFIG = Object.freeze({
27
+ merge: Object.freeze({
28
+ operation: "pm-exploration-merge",
29
+ schema: PM_EXPLORATION_MERGER_ISOLATION_SCHEMA,
30
+ }),
31
+ evaluate: Object.freeze({
32
+ operation: "pm-exploration-evaluate",
33
+ schema: PM_EXPLORATION_EVALUATOR_ISOLATION_SCHEMA,
34
+ }),
35
+ curriculum: Object.freeze({
36
+ operation: "pm-exploration-select-task",
37
+ schema: PM_EXPLORATION_CURRICULUM_ISOLATION_SCHEMA,
38
+ }),
39
+ });
40
+ const SUPERVISION_RECEIPT_KEYS = Object.freeze([
41
+ "schema",
42
+ "requestDigest",
43
+ "invocationNonce",
44
+ "invocationId",
45
+ "capabilityDigest",
46
+ "operation",
47
+ "requestedAt",
48
+ "deadlineAt",
49
+ "payloadDigest",
50
+ "targetDigest",
51
+ "targetHandlerId",
52
+ "targetRevision",
53
+ "targetAuthorityDigest",
54
+ "completedAt",
55
+ "status",
56
+ "isolation",
57
+ "hardDeadlineEnforced",
58
+ "lateSideEffectsPrevented",
59
+ "invocationCount",
60
+ "capabilityRevoked",
61
+ "resultDigest",
62
+ "targetInvocationDigest",
63
+ "revocationDigest",
64
+ "revocationMode",
65
+ "wasActive",
66
+ "activeInvocationTerminated",
67
+ "terminatedAt",
68
+ "supervisorRevision",
69
+ "attestation",
70
+ ]);
71
+
72
+ function canonical(value) {
73
+ if (value === null || typeof value !== "object") return JSON.stringify(value);
74
+ if (Array.isArray(value)) return `[${value.map(canonical).join(",")}]`;
75
+ return `{${Object.keys(value)
76
+ .sort()
77
+ .map((key) => `${JSON.stringify(key)}:${canonical(value[key])}`)
78
+ .join(",")}}`;
79
+ }
80
+
81
+ function hash(domain, value) {
82
+ return `sha256:${createHash("sha256")
83
+ .update(domain)
84
+ .update("\0")
85
+ .update(canonical(value))
86
+ .digest("hex")}`;
87
+ }
88
+
89
+ function exact(value, keys, label) {
90
+ if (
91
+ !value ||
92
+ typeof value !== "object" ||
93
+ Array.isArray(value) ||
94
+ isProxy(value) ||
95
+ Object.getPrototypeOf(value) !== Object.prototype
96
+ ) {
97
+ throw new TypeError(`${label} must be a plain object`);
98
+ }
99
+ const actual = Reflect.ownKeys(value);
100
+ if (
101
+ actual.length !== keys.length ||
102
+ actual.some((key) => {
103
+ const field = Object.getOwnPropertyDescriptor(value, key);
104
+ return (
105
+ typeof key !== "string" ||
106
+ !keys.includes(key) ||
107
+ !field ||
108
+ !field.enumerable ||
109
+ !("value" in field)
110
+ );
111
+ })
112
+ ) {
113
+ throw new TypeError(`${label} has unexpected or accessor fields`);
114
+ }
115
+ }
116
+
117
+ function identifier(value, label) {
118
+ if (typeof value !== "string" || value.length > 256 || !ID.test(value))
119
+ throw new TypeError(`${label} is invalid`);
120
+ return value;
121
+ }
122
+
123
+ function digest(value, label) {
124
+ if (typeof value !== "string" || !DIGEST.test(value))
125
+ throw new TypeError(`${label} must be a sha256 digest`);
126
+ return value;
127
+ }
128
+
129
+ function timestamp(now) {
130
+ const milliseconds = Number(now());
131
+ if (!Number.isSafeInteger(milliseconds) || milliseconds < 0)
132
+ throw new TypeError("process reviewer clock is invalid");
133
+ return Object.freeze({
134
+ milliseconds,
135
+ iso: new Date(milliseconds).toISOString(),
136
+ });
137
+ }
138
+
139
+ function targetBinding(value, config) {
140
+ const targetDigest = computeEvolutionEvalIsolatedTargetDigest(value);
141
+ const targetAuthorityDigest =
142
+ computeEvolutionEvalTargetAuthorityDigest(value);
143
+ if (
144
+ value.schema !== EVOLUTION_EVAL_ISOLATED_TARGET_SCHEMA ||
145
+ value.isolation !== "process" ||
146
+ value.operation !== config.operation
147
+ ) {
148
+ throw new TypeError(
149
+ `PM exploration process reviewer requires a ${config.operation} target`,
150
+ );
151
+ }
152
+ return Object.freeze({
153
+ target: Object.freeze(structuredClone(value)),
154
+ targetDigest,
155
+ targetAuthorityDigest,
156
+ });
157
+ }
158
+
159
+ function supervisionReceiptDigest(value, kind) {
160
+ exact(value, SUPERVISION_RECEIPT_KEYS, `PM ${kind} supervision receipt`);
161
+ return computeEvolutionEvalSignedEvidenceDigest(
162
+ value,
163
+ EVOLUTION_EVAL_ATTESTATION_PURPOSES.supervisor,
164
+ );
165
+ }
166
+
167
+ function validateReceipt({ receipt, request, binding, value }) {
168
+ const evidenceDigest = supervisionReceiptDigest(receipt, binding.kind);
169
+ const { attestation, ...core } = receipt;
170
+ const completedAt = Date.parse(receipt.completedAt);
171
+ if (
172
+ receipt.schema !== EVOLUTION_EVAL_SUPERVISION_SCHEMA ||
173
+ receipt.requestDigest !== request.requestDigest ||
174
+ receipt.invocationNonce !== request.invocationNonce ||
175
+ receipt.invocationId !== request.invocationId ||
176
+ receipt.capabilityDigest !== request.capabilityDigest ||
177
+ receipt.operation !== binding.target.operation ||
178
+ receipt.requestedAt !== request.requestedAt ||
179
+ receipt.deadlineAt !== request.deadlineAt ||
180
+ receipt.payloadDigest !== request.payloadDigest ||
181
+ receipt.targetDigest !== binding.targetDigest ||
182
+ receipt.targetHandlerId !== binding.target.handlerId ||
183
+ receipt.targetRevision !== binding.target.handlerRevision ||
184
+ receipt.targetAuthorityDigest !== binding.targetAuthorityDigest ||
185
+ !Number.isFinite(completedAt) ||
186
+ completedAt < Date.parse(request.requestedAt) ||
187
+ completedAt > Date.parse(request.deadlineAt) ||
188
+ receipt.status !== "completed" ||
189
+ receipt.isolation !== "process" ||
190
+ receipt.hardDeadlineEnforced !== true ||
191
+ receipt.lateSideEffectsPrevented !== true ||
192
+ receipt.invocationCount !== 1 ||
193
+ receipt.capabilityRevoked !== true ||
194
+ receipt.resultDigest !==
195
+ computeEvolutionEvalSupervisedResultDigest(value) ||
196
+ !DIGEST.test(receipt.targetInvocationDigest ?? "") ||
197
+ !DIGEST.test(receipt.revocationDigest ?? "") ||
198
+ receipt.revocationMode !== "completed-release" ||
199
+ receipt.wasActive !== false ||
200
+ receipt.activeInvocationTerminated !== false ||
201
+ receipt.terminatedAt !== null ||
202
+ receipt.supervisorRevision !==
203
+ binding.supervisor.authorityDescriptor.handlerRevision
204
+ ) {
205
+ throw new Error(
206
+ `PM ${binding.kind} process supervision receipt is invalid`,
207
+ );
208
+ }
209
+ const verified = binding.supervisor.verifyEnforcement({
210
+ purpose: EVOLUTION_EVAL_ATTESTATION_PURPOSES.supervisor,
211
+ payloadDigest: buildEvolutionEvalAttestationDigest(
212
+ core,
213
+ EVOLUTION_EVAL_ATTESTATION_PURPOSES.supervisor,
214
+ ),
215
+ attestation,
216
+ });
217
+ if (verified !== true || (verified && typeof verified.then === "function"))
218
+ throw new Error(`PM ${binding.kind} supervision attestation was rejected`);
219
+ return evidenceDigest;
220
+ }
221
+
222
+ function capability(binding, request, invocation) {
223
+ let revocation = null;
224
+ return Object.freeze({
225
+ async invoke() {
226
+ const result = await binding.supervisor.invokeTarget(invocation);
227
+ return Object.freeze({
228
+ value: result.value,
229
+ resultDigest: computeEvolutionEvalSupervisedResultDigest(result.value),
230
+ targetInvocationDigest: computeEvolutionEvalSignedEvidenceDigest(
231
+ result.evidence,
232
+ EVOLUTION_EVAL_ATTESTATION_PURPOSES.targetInvocation,
233
+ ),
234
+ });
235
+ },
236
+ async revoke({ mode }) {
237
+ if (revocation !== null) return revocation;
238
+ revocation = binding.supervisor
239
+ .revokeTarget({
240
+ requestDigest: request.requestDigest,
241
+ capabilityDigest: request.capabilityDigest,
242
+ targetDigest: binding.targetDigest,
243
+ invocationId: request.invocationId,
244
+ mode,
245
+ requestedAt:
246
+ mode === "hard-terminate"
247
+ ? request.deadlineAt
248
+ : new Date().toISOString(),
249
+ deadlineAt: request.deadlineAt,
250
+ })
251
+ .then((receipt) =>
252
+ Object.freeze({
253
+ revocationDigest: computeEvolutionEvalSignedEvidenceDigest(
254
+ receipt,
255
+ EVOLUTION_EVAL_ATTESTATION_PURPOSES.targetRevocation,
256
+ ),
257
+ revocationMode: mode,
258
+ wasActive: receipt.wasActive,
259
+ activeInvocationTerminated: receipt.activeInvocationTerminated,
260
+ terminatedAt: receipt.terminatedAt,
261
+ }),
262
+ );
263
+ return revocation;
264
+ },
265
+ });
266
+ }
267
+
268
+ export function createPmExplorationProcessReviewerExecutor(options = {}) {
269
+ if (
270
+ !options ||
271
+ typeof options !== "object" ||
272
+ Array.isArray(options) ||
273
+ isProxy(options) ||
274
+ Object.getPrototypeOf(options) !== Object.prototype
275
+ ) {
276
+ throw new TypeError(
277
+ "PM exploration process reviewer options must be a plain object",
278
+ );
279
+ }
280
+ const hasNow = Reflect.ownKeys(options).includes("now");
281
+ exact(
282
+ options,
283
+ hasNow
284
+ ? ["kind", "supervisor", "target", "maxWallClockMs", "now"]
285
+ : ["kind", "supervisor", "target", "maxWallClockMs"],
286
+ "PM exploration process reviewer options",
287
+ );
288
+ const config = CONFIG[options.kind];
289
+ if (!config)
290
+ throw new TypeError(
291
+ "process reviewer kind must be merge, evaluate, or curriculum",
292
+ );
293
+ if (!isEvolutionEvalProcessSupervisor(options.supervisor))
294
+ throw new TypeError("a branded evolution process supervisor is required");
295
+ if (
296
+ !Number.isSafeInteger(options.maxWallClockMs) ||
297
+ options.maxWallClockMs < 1 ||
298
+ options.maxWallClockMs > 600_000
299
+ ) {
300
+ throw new TypeError("process reviewer maxWallClockMs is out of bounds");
301
+ }
302
+ const now = hasNow ? options.now : Date.now;
303
+ if (typeof now !== "function" || isProxy(now))
304
+ throw new TypeError("process reviewer clock must be a direct function");
305
+ const supervisorDescriptor = options.supervisor.authorityDescriptor;
306
+ if (!supervisorDescriptor || typeof supervisorDescriptor !== "object")
307
+ throw new TypeError("process supervisor authority descriptor is required");
308
+ const captured = targetBinding(options.target, config);
309
+ const descriptor = Object.freeze({
310
+ schema: config.schema,
311
+ mode: "process",
312
+ targetDigest: captured.targetDigest,
313
+ targetAuthorityDigest: captured.targetAuthorityDigest,
314
+ handlerId: identifier(
315
+ captured.target.handlerId,
316
+ `process ${options.kind} handlerId`,
317
+ ),
318
+ handlerRevision: identifier(
319
+ captured.target.handlerRevision,
320
+ `process ${options.kind} handlerRevision`,
321
+ ),
322
+ operation: captured.target.operation,
323
+ handlerArtifactDigest: digest(
324
+ captured.target.handlerArtifactDigest,
325
+ `process ${options.kind} handlerArtifactDigest`,
326
+ ),
327
+ supervisorAuthorityDigest: hash(
328
+ `chainlesschain.pm-exploration-${options.kind}-supervisor-authority/v1`,
329
+ {
330
+ authorityDescriptor: supervisorDescriptor,
331
+ childEvidenceStoreDescriptor:
332
+ options.supervisor.childEvidenceStoreDescriptor ?? null,
333
+ },
334
+ ),
335
+ maxWallClockMs: options.maxWallClockMs,
336
+ });
337
+ const executor = Object.freeze({});
338
+ EXECUTORS.set(executor, {
339
+ ...captured,
340
+ descriptor,
341
+ kind: options.kind,
342
+ maxWallClockMs: options.maxWallClockMs,
343
+ now,
344
+ supervisor: options.supervisor,
345
+ });
346
+ return executor;
347
+ }
348
+
349
+ export function inspectPmExplorationProcessReviewerExecutor(value) {
350
+ const binding = EXECUTORS.get(value);
351
+ if (!binding)
352
+ throw new TypeError(
353
+ "a branded PM exploration process reviewer is required",
354
+ );
355
+ return binding.descriptor;
356
+ }
357
+
358
+ export async function invokePmExplorationProcessReviewer(
359
+ executorValue,
360
+ request,
361
+ runtime,
362
+ ) {
363
+ const binding = EXECUTORS.get(executorValue);
364
+ if (!binding)
365
+ throw new TypeError(
366
+ "a branded PM exploration process reviewer is required",
367
+ );
368
+ if (!(runtime?.signal instanceof AbortSignal))
369
+ throw new TypeError("process reviewer requires a budget abort signal");
370
+ if (runtime.signal.aborted)
371
+ throw runtime.signal.reason ?? new Error("process reviewer was aborted");
372
+ const current = timestamp(binding.now);
373
+ const deadlineAt = new Date(
374
+ current.milliseconds + binding.maxWallClockMs,
375
+ ).toISOString();
376
+ const payloadDigest = hash(
377
+ "chainlesschain.evolution-eval-supervision-payload/v1",
378
+ request,
379
+ );
380
+ const invocationNonce = `supervision-${randomBytes(16).toString("hex")}`;
381
+ const invocationId = `target-invocation-${randomBytes(16).toString("hex")}`;
382
+ const capabilityNonce = `invocation-capability-${randomBytes(16).toString("hex")}`;
383
+ const capabilityDigest = hash(
384
+ "chainlesschain.evolution-eval-invocation-capability/v1",
385
+ {
386
+ capabilityNonce,
387
+ invocationNonce,
388
+ invocationId,
389
+ payloadDigest,
390
+ targetDigest: binding.targetDigest,
391
+ deadlineAt,
392
+ },
393
+ );
394
+ const requestCore = Object.freeze({
395
+ schema: "chainlesschain.evolution-eval-supervision-request/v3",
396
+ operation: binding.target.operation,
397
+ invocationNonce,
398
+ invocationId,
399
+ capabilityDigest,
400
+ requestedAt: current.iso,
401
+ deadlineAt,
402
+ payloadDigest,
403
+ targetDigest: binding.targetDigest,
404
+ targetHandlerId: binding.target.handlerId,
405
+ targetRevision: binding.target.handlerRevision,
406
+ targetAuthorityDigest: binding.targetAuthorityDigest,
407
+ });
408
+ const supervisionRequest = Object.freeze({
409
+ ...requestCore,
410
+ requestDigest: hash(
411
+ "chainlesschain.evolution-eval-supervision/v3/request",
412
+ requestCore,
413
+ ),
414
+ });
415
+ const invocation = Object.freeze({
416
+ schema: "chainlesschain.evolution-eval-target-invocation-request/v2",
417
+ requestDigest: supervisionRequest.requestDigest,
418
+ capabilityDigest,
419
+ invocationId,
420
+ deadlineAt,
421
+ payload: request,
422
+ payloadDigest,
423
+ target: binding.target,
424
+ targetDigest: binding.targetDigest,
425
+ });
426
+ const invocationCapability = capability(
427
+ binding,
428
+ supervisionRequest,
429
+ invocation,
430
+ );
431
+ let abortRevocation = null;
432
+ const abort = () => {
433
+ abortRevocation ??= invocationCapability.revoke({ mode: "hard-terminate" });
434
+ };
435
+ runtime.signal.addEventListener("abort", abort, { once: true });
436
+ try {
437
+ const response = await binding.supervisor.run(
438
+ supervisionRequest,
439
+ invocationCapability,
440
+ );
441
+ if (runtime.signal.aborted)
442
+ throw runtime.signal.reason ?? new Error("process reviewer was aborted");
443
+ return Object.freeze({
444
+ value: response.value,
445
+ supervisionReceiptDigest: validateReceipt({
446
+ receipt: response.receipt,
447
+ request: supervisionRequest,
448
+ binding,
449
+ value: response.value,
450
+ }),
451
+ });
452
+ } finally {
453
+ runtime.signal.removeEventListener("abort", abort);
454
+ if (abortRevocation !== null) await abortRevocation.catch(() => {});
455
+ }
456
+ }