chainlesschain 0.166.65 → 0.166.69

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 (200) 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-FhevRfL6.js} +1 -1
  4. package/src/assets/web-panel/assets/{ActionButton-C5LiW2-J.js → ActionButton-rOeOykx5.js} +1 -1
  5. package/src/assets/web-panel/assets/{Analytics-D1INcvZF.js → Analytics-BK_wYlfz.js} +3 -3
  6. package/src/assets/web-panel/assets/{AppLayout-DZzHO1VV.js → AppLayout-_2cCtZKV.js} +5 -5
  7. package/src/assets/web-panel/assets/{Artifacts-WfYQL6Ia.js → Artifacts-D5MSvVzk.js} +1 -1
  8. package/src/assets/web-panel/assets/{Audit-DohBoGWO.js → Audit-yd-Ah-A3.js} +1 -1
  9. package/src/assets/web-panel/assets/{BackgroundAgents-Chtk-Hde.js → BackgroundAgents-yCaw_Gu_.js} +1 -1
  10. package/src/assets/web-panel/assets/{Backup-B813PuMz.js → Backup-G3ADD4N-.js} +1 -1
  11. package/src/assets/web-panel/assets/{BaseInput-DaDdWWgK.js → BaseInput-ByDhkLbF.js} +1 -1
  12. package/src/assets/web-panel/assets/{Chat-D4pJ6oZ7.js → Chat-BMrc7qjz.js} +4 -4
  13. package/src/assets/web-panel/assets/ChatBubbleRenderer-nA7n0I6S.js +1 -0
  14. package/src/assets/web-panel/assets/{Checkbox-Clo9TvO6.js → Checkbox-BHYgyZWA.js} +1 -1
  15. package/src/assets/web-panel/assets/{Codegen-uejLg8Ih.js → Codegen-DJfcy0jC.js} +1 -1
  16. package/src/assets/web-panel/assets/{Col-B7nbx-iJ.js → Col-C27zROxc.js} +1 -1
  17. package/src/assets/web-panel/assets/{Community-FEyjPK1j.js → Community-CuS5tq_1.js} +1 -1
  18. package/src/assets/web-panel/assets/{Compact-B6Fk0Kn6.js → Compact-BrYJNe7Q.js} +1 -1
  19. package/src/assets/web-panel/assets/{Compliance-BQG8goUl.js → Compliance-8hfahYHT.js} +1 -1
  20. package/src/assets/web-panel/assets/{Cowork-CbBeEfHp.js → Cowork-DdE0n2lp.js} +2 -2
  21. package/src/assets/web-panel/assets/{Cron-DPzlFcEZ.js → Cron-CUq3aSiX.js} +2 -2
  22. package/src/assets/web-panel/assets/{Crosschain-B8pWJrbg.js → Crosschain-BM4XSPWG.js} +1 -1
  23. package/src/assets/web-panel/assets/{DID-gGQHUlFN.js → DID-CdaBY57N.js} +2 -2
  24. package/src/assets/web-panel/assets/{Dashboard-C2TMFHrn.js → Dashboard-Cwtd52So.js} +2 -2
  25. package/src/assets/web-panel/assets/{Dropdown-BVPxGbll.js → Dropdown-BvlObh6U.js} +1 -1
  26. package/src/assets/web-panel/assets/{EmailListRenderer-CNPxs0hd.js → EmailListRenderer-e3fLhjnX.js} +1 -1
  27. package/src/assets/web-panel/assets/{EvolutionSettings-_XTiB7q1.js → EvolutionSettings-CTtk1Zo8.js} +1 -1
  28. package/src/assets/web-panel/assets/{FamilyGuardDashboard-UyE3VWtI.js → FamilyGuardDashboard-BpPJUnCU.js} +1 -1
  29. package/src/assets/web-panel/assets/{Federation-CLt6FHK-.js → Federation-vzjZ6_nQ.js} +1 -1
  30. package/src/assets/web-panel/assets/{FormItemContext-CdNQPRPw.js → FormItemContext-DEDNLhkE.js} +1 -1
  31. package/src/assets/web-panel/assets/{GenericCardRenderer-BJ0AMhrh.js → GenericCardRenderer-DEl2Te5f.js} +1 -1
  32. package/src/assets/web-panel/assets/{Git-CQnvMfOM.js → Git-BzsYQnCq.js} +2 -2
  33. package/src/assets/web-panel/assets/{Governance-deYsHC-o.js → Governance-zxJs6Y8s.js} +1 -1
  34. package/src/assets/web-panel/assets/{Inference-qaSck43z.js → Inference-5JUsrmF1.js} +1 -1
  35. package/src/assets/web-panel/assets/{KnowledgeGraph-De0aJ3Ls.js → KnowledgeGraph-Br8b5Htz.js} +1 -1
  36. package/src/assets/web-panel/assets/{Logs-ZtS98jCm.js → Logs-D-tubDMJ.js} +2 -2
  37. package/src/assets/web-panel/assets/MarkdownRenderer-In4itZX2.js +1 -0
  38. package/src/assets/web-panel/assets/{Marketplace-Byz3xCBN.js → Marketplace-s8MmWkS9.js} +1 -1
  39. package/src/assets/web-panel/assets/{McpTools-DOZUUW6z.js → McpTools-Wu-WRg4M.js} +3 -3
  40. package/src/assets/web-panel/assets/{Memory-C33wC2hA.js → Memory-B_i-eX9w.js} +2 -2
  41. package/src/assets/web-panel/assets/{MobileBridge-zZe-T_6M.js → MobileBridge-Ca64kjVx.js} +1 -1
  42. package/src/assets/web-panel/assets/{MobileProjects-CRnUIume.js → MobileProjects-Cq9AFiO4.js} +1 -1
  43. package/src/assets/web-panel/assets/{Mtc-C1xlRVAN.js → Mtc-DKvGmG3y.js} +4 -4
  44. package/src/assets/web-panel/assets/{MtcAudit-D0U07bIi.js → MtcAudit-BVvWx8pF.js} +2 -2
  45. package/src/assets/web-panel/assets/{Multisig-DF8uvV3h.js → Multisig-wqeJ2O9x.js} +3 -3
  46. package/src/assets/web-panel/assets/{NLProgramming-bBPGAFlt.js → NLProgramming-DX87ysYu.js} +1 -1
  47. package/src/assets/web-panel/assets/{Notes-BHAaOsgg.js → Notes-ChenGdu0.js} +3 -3
  48. package/src/assets/web-panel/assets/{NotificationSettings-Cl0fG_rA.js → NotificationSettings-BZRa68-x.js} +1 -1
  49. package/src/assets/web-panel/assets/{OrderTableRenderer-BEPAs8Zv.js → OrderTableRenderer-DZ6xG1M6.js} +1 -1
  50. package/src/assets/web-panel/assets/{Organization-BAxSwgk5.js → Organization-BWJp4VPX.js} +4 -4
  51. package/src/assets/web-panel/assets/{Overflow-D68KubAu.js → Overflow-BoM4bYt5.js} +1 -1
  52. package/src/assets/web-panel/assets/{P2P-bhdT17zk.js → P2P-Cvi8YV09.js} +2 -2
  53. package/src/assets/web-panel/assets/{PdhVaultBrowser-DqaO6wgH.js → PdhVaultBrowser-CNVC1NIj.js} +3 -3
  54. package/src/assets/web-panel/assets/{Permissions-Bq8fvkak.js → Permissions-DNd1MRjW.js} +4 -4
  55. package/src/assets/web-panel/assets/{PersonalDataHub-BYd2JEic.js → PersonalDataHub-DGSBYZ5-.js} +5 -5
  56. package/src/assets/web-panel/assets/{Pipeline-Csg_ja69.js → Pipeline-DkcoGMBo.js} +1 -1
  57. package/src/assets/web-panel/assets/{Privacy-lwxwLj4M.js → Privacy-DltwvMAW.js} +1 -1
  58. package/src/assets/web-panel/assets/{ProjectInit-BdBZkH8z.js → ProjectInit-ChYbpHg8.js} +2 -2
  59. package/src/assets/web-panel/assets/{ProjectSettings-ClWgFy-K.js → ProjectSettings-B8FWiHTJ.js} +2 -2
  60. package/src/assets/web-panel/assets/{Projects-Bu-qj8N1.js → Projects-DuyhtSm4.js} +1 -1
  61. package/src/assets/web-panel/assets/{Providers-DEjxrxw3.js → Providers-Bo18Tx_6.js} +1 -1
  62. package/src/assets/web-panel/assets/{QrScannerModal-eccy-8Vi.js → QrScannerModal-6W85KlsG.js} +1 -1
  63. package/src/assets/web-panel/assets/{QuickAsk-Vx3uDvFg.js → QuickAsk-DznRUedP.js} +1 -1
  64. package/src/assets/web-panel/assets/{Recommend-CfUivNps.js → Recommend-CQDN3_p-.js} +1 -1
  65. package/src/assets/web-panel/assets/{RemoteSession-BU4gk7GI.js → RemoteSession-CiJgokEj.js} +3 -3
  66. package/src/assets/web-panel/assets/{Reputation-CbPzdZ0C.js → Reputation-DexzGH7E.js} +1 -1
  67. package/src/assets/web-panel/assets/{Row-CYLrgfKA.js → Row-BgZOIvSi.js} +1 -1
  68. package/src/assets/web-panel/assets/{RssFeed-DbY1oyuv.js → RssFeed-BWIZJ_Jr.js} +3 -3
  69. package/src/assets/web-panel/assets/{Search-QeW41K5r.js → Search-B376EwWJ.js} +1 -1
  70. package/src/assets/web-panel/assets/{Security-CJxf1kLZ.js → Security-92mUR5OD.js} +4 -4
  71. package/src/assets/web-panel/assets/{Services-CFO9ySZc.js → Services-ClSEAOHk.js} +2 -2
  72. package/src/assets/web-panel/assets/{Skeleton-CQFjeQN0.js → Skeleton-DVhLbv99.js} +1 -1
  73. package/src/assets/web-panel/assets/{Skills-CLLB4INW.js → Skills-JTcXs_xI.js} +1 -1
  74. package/src/assets/web-panel/assets/{Sla-DxeLIJk0.js → Sla-DnKY9zy9.js} +1 -1
  75. package/src/assets/web-panel/assets/{SpeechSettings-D4FA9KYI.js → SpeechSettings-GO1JefAH.js} +1 -1
  76. package/src/assets/web-panel/assets/{SyncSettings-C6NOkcQK.js → SyncSettings-jX5tB2St.js} +2 -2
  77. package/src/assets/web-panel/assets/{Tasks-LmVPWDfQ.js → Tasks-BxRBzhUc.js} +1 -1
  78. package/src/assets/web-panel/assets/{Templates-BdEfUoVB.js → Templates-CAVkbTG1.js} +1 -1
  79. package/src/assets/web-panel/assets/{Tenant-IUlESacN.js → Tenant-5Y7sHBkz.js} +1 -1
  80. package/src/assets/web-panel/assets/{Terminal-B9pDe7sn.js → Terminal-CbbLShYb.js} +2 -2
  81. package/src/assets/web-panel/assets/{TimelineRenderer-ZCwB-Pki.js → TimelineRenderer-2HptWihL.js} +1 -1
  82. package/src/assets/web-panel/assets/{Tokens-4qk16LX1.js → Tokens-B-jGxzHl.js} +1 -1
  83. package/src/assets/web-panel/assets/{Trigger-jXNyargn.js → Trigger-9DGa90DT.js} +1 -1
  84. package/src/assets/web-panel/assets/{Trust-D13PydtT.js → Trust-BSJEkEOO.js} +1 -1
  85. package/src/assets/web-panel/assets/{UkeySign-yPgws6mS.js → UkeySign-C807So5R.js} +1 -1
  86. package/src/assets/web-panel/assets/{VideoEditing-B329WjpG.js → VideoEditing-ByiieAv-.js} +1 -1
  87. package/src/assets/web-panel/assets/{Wallet-T8VM-Ttm.js → Wallet-BixbIOUv.js} +4 -4
  88. package/src/assets/web-panel/assets/{WebAuthn-XuRibrpP.js → WebAuthn-z7akhor4.js} +5 -5
  89. package/src/assets/web-panel/assets/{WorkflowEditor-D1Gwz3YR.js → WorkflowEditor-KvijuUuR.js} +1 -1
  90. package/src/assets/web-panel/assets/{chat-DjydtnT-.js → chat-BYKoh0YG.js} +1 -1
  91. package/src/assets/web-panel/assets/{colors-gFtBvPrr.js → colors-CLT8IYBt.js} +1 -1
  92. package/src/assets/web-panel/assets/{compact-item-CndxhGfx.js → compact-item-DlBIyYHF.js} +1 -1
  93. package/src/assets/web-panel/assets/{createContext-DnfGpd0L.js → createContext-5XmAnNLr.js} +1 -1
  94. package/src/assets/web-panel/assets/devWarning-BmcCIHwY.js +1 -0
  95. package/src/assets/web-panel/assets/{hasIn-CmT5hRVW.js → hasIn-rPdRhm7K.js} +1 -1
  96. package/src/assets/web-panel/assets/{index-DoBKSzqu.js → index-8un-eUDI.js} +1 -1
  97. package/src/assets/web-panel/assets/{index-DGbKeg8G.js → index-B-0nAxf5.js} +1 -1
  98. package/src/assets/web-panel/assets/{index-DreYqebI.js → index-B1VfBUPB.js} +1 -1
  99. package/src/assets/web-panel/assets/{index-zQf599Uq.js → index-BBt2CSAx.js} +1 -1
  100. package/src/assets/web-panel/assets/{index-BlTcxT_L.js → index-BDtlwjSr.js} +1 -1
  101. package/src/assets/web-panel/assets/{index-CqpR0Des.js → index-BIRl2Ii5.js} +1 -1
  102. package/src/assets/web-panel/assets/{index-C3HvYeA3.js → index-BgevTkUv.js} +1 -1
  103. package/src/assets/web-panel/assets/{index-B0WFjxWs.js → index-Bve7Wsgf.js} +1 -1
  104. package/src/assets/web-panel/assets/{index-BNHdO6Jr.js → index-Bzd0sFkp.js} +1 -1
  105. package/src/assets/web-panel/assets/{index-DV2PR3Fa.js → index-C2sFDVb_.js} +1 -1
  106. package/src/assets/web-panel/assets/{index-D2d7358Y.js → index-CErvHCDe.js} +1 -1
  107. package/src/assets/web-panel/assets/{index-DaEPE2DC.js → index-CM_a9spK.js} +1 -1
  108. package/src/assets/web-panel/assets/{index-DKyuE_Y2.js → index-CY6TMc2m.js} +1 -1
  109. package/src/assets/web-panel/assets/{index-BVM_w30N.js → index-ChlzaTV3.js} +1 -1
  110. package/src/assets/web-panel/assets/{index-CZLDbPTa.js → index-CsnbOKdI.js} +1 -1
  111. package/src/assets/web-panel/assets/{index-HHP1zzo7.js → index-D3-NL-x-.js} +1 -1
  112. package/src/assets/web-panel/assets/{index-BFif4Cev.js → index-D3f9Jzx2.js} +1 -1
  113. package/src/assets/web-panel/assets/{index-C14jryXi.js → index-DCDSycWo.js} +1 -1
  114. package/src/assets/web-panel/assets/{index-CB27echm.js → index-DIVrVGvf.js} +1 -1
  115. package/src/assets/web-panel/assets/{index-BGlmPbl_.js → index-DI_tYFBe.js} +1 -1
  116. package/src/assets/web-panel/assets/{index-BsRKmb6k.js → index-DPS4mWnI.js} +1 -1
  117. package/src/assets/web-panel/assets/{index-BXNUTiW8.js → index-DTslLzPJ.js} +1 -1
  118. package/src/assets/web-panel/assets/{index-Dbpk75MO.js → index-DW8vozBS.js} +1 -1
  119. package/src/assets/web-panel/assets/index-DY8rmd6x.js +1 -0
  120. package/src/assets/web-panel/assets/{index-DjY-3sMA.js → index-DZiSMYoD.js} +3 -3
  121. package/src/assets/web-panel/assets/{index-DV6NrfJx.js → index-DZjGcIGU.js} +1 -1
  122. package/src/assets/web-panel/assets/{index-ktN-K1Tf.js → index-Dea32nOK.js} +1 -1
  123. package/src/assets/web-panel/assets/{index-DjcR-CwS.js → index-Djd7uqwM.js} +1 -1
  124. package/src/assets/web-panel/assets/{index-CuOx4Pbe.js → index-Dntid6oj.js} +1 -1
  125. package/src/assets/web-panel/assets/{index-BW3nWiu0.js → index-DqZU4_7J.js} +1 -1
  126. package/src/assets/web-panel/assets/{index-C4Mqhmas.js → index-DuvweiCz.js} +1 -1
  127. package/src/assets/web-panel/assets/{index-CRqz8TtI.js → index-DzExCCLS.js} +1 -1
  128. package/src/assets/web-panel/assets/{index-D5na0B7G.js → index-LKT-Ol0A.js} +1 -1
  129. package/src/assets/web-panel/assets/{index-_-wGLtAg.js → index-akwXS-FF.js} +1 -1
  130. package/src/assets/web-panel/assets/{index-CgMKElUh.js → index-b-rQCMkx.js} +1 -1
  131. package/src/assets/web-panel/assets/{index-DUlubR4l.js → index-eHbr3f5I.js} +1 -1
  132. package/src/assets/web-panel/assets/{index-D88-8bsB.js → index-kx6zDWew.js} +1 -1
  133. package/src/assets/web-panel/assets/{index-DuAvYTmY.js → index-rRuCGdKW.js} +1 -1
  134. package/src/assets/web-panel/assets/index-sbwcUeRS.js +1 -0
  135. package/src/assets/web-panel/assets/{initDefaultProps-KV3V-PNH.js → initDefaultProps-a8411LiK.js} +1 -1
  136. package/src/assets/web-panel/assets/{motion-PFGQg7_X.js → motion-oVcQdpCm.js} +1 -1
  137. package/src/assets/web-panel/assets/{move-Dnl79wq4.js → move-B-eyzzzL.js} +1 -1
  138. package/src/assets/web-panel/assets/{mtc-parser-Bwl5JH9V.js → mtc-parser-BCYIxuG7.js} +1 -1
  139. package/src/assets/web-panel/assets/{omit-DCcTtM1l.js → omit-DuFtWiYh.js} +1 -1
  140. package/src/assets/web-panel/assets/{pickAttrs-Cl6BjjDf.js → pickAttrs-CVAoJhGu.js} +1 -1
  141. package/src/assets/web-panel/assets/{placementArrow-fdqhyo42.js → placementArrow-Y2iub2bO.js} +1 -1
  142. package/src/assets/web-panel/assets/{responsiveObserve-DYQpmcDW.js → responsiveObserve-BHenWIVD.js} +1 -1
  143. package/src/assets/web-panel/assets/{slide-C4l-VfO4.js → slide-CKrMaL29.js} +1 -1
  144. package/src/assets/web-panel/assets/{statusUtils-DYDw_dyZ.js → statusUtils-w8eb_1da.js} +1 -1
  145. package/src/assets/web-panel/assets/{styleChecker-BEsubSMu.js → styleChecker-CCVi_Ww3.js} +1 -1
  146. package/src/assets/web-panel/assets/{useFlexGapSupport-Cj82ggQ_.js → useFlexGapSupport-BsmR_q0r.js} +1 -1
  147. package/src/assets/web-panel/assets/{useFs-B7L1eJ0V.js → useFs-a8GMBjnc.js} +1 -1
  148. package/src/assets/web-panel/assets/{usePersonalDataHub-DVlJVD4d.js → usePersonalDataHub-BMUYSPn-.js} +1 -1
  149. package/src/assets/web-panel/assets/{vnode-BBAbRN_Y.js → vnode-DL2pI31V.js} +1 -1
  150. package/src/assets/web-panel/assets/{zoom-BYn48q-I.js → zoom-Cbi8fISi.js} +1 -1
  151. package/src/assets/web-panel/index.html +1 -1
  152. package/src/data/changelog.json +33 -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 +241 -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/evolution/skill-writer-inventory-manifest.js +0 -39
  187. package/src/lib/evolution/volcengine-function-execution-authority.js +2949 -0
  188. package/src/lib/evolution/volcengine-function-process-executor.js +615 -0
  189. package/src/lib/evolution/volcengine-function-replay-store.js +836 -0
  190. package/src/lib/evolution/volcengine-function-revocation-status-floor-store.js +480 -0
  191. package/src/lib/governance-coverage.js +1 -1
  192. package/src/lib/headless-manifest.js +1 -1
  193. package/src/lib/protocol-replay.js +1 -1
  194. package/src/lib/skill-outcome-transcript-authority.js +45 -5
  195. package/src/runtime/agent-core.js +17 -0
  196. package/src/assets/web-panel/assets/ChatBubbleRenderer-Cf3LLgDc.js +0 -1
  197. package/src/assets/web-panel/assets/MarkdownRenderer-CTsYo9NN.js +0 -1
  198. package/src/assets/web-panel/assets/devWarning-D60SbiD-.js +0 -1
  199. package/src/assets/web-panel/assets/index-C0yR4_7h.js +0 -1
  200. package/src/assets/web-panel/assets/index-D4xuvo03.js +0 -1
@@ -0,0 +1,500 @@
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 {
15
+ createEvolutionEvalProcessRuntimeBroker,
16
+ isEvolutionEvalProcessSupervisor,
17
+ } from "./evolution-eval-process-supervisor.js";
18
+
19
+ export const PM_EXPLORATION_RUNNER_ISOLATION_SCHEMA =
20
+ "chainlesschain.pm-exploration-runner-isolation/v1";
21
+ export const PM_EXPLORATION_RUNNER_ISOLATION_SCHEMA_V2 =
22
+ "chainlesschain.pm-exploration-runner-isolation/v2";
23
+ export const PM_EXPLORATION_RUNNER_EGRESS_EVIDENCE_SCHEMA =
24
+ "chainlesschain.pm-exploration-runner-egress-evidence/v1";
25
+
26
+ const DIGEST = /^sha256:[a-f0-9]{64}$/u;
27
+ const ID = /^[a-z][a-z0-9]*(?:[._:-][a-z0-9]+)*$/u;
28
+ const EXECUTORS = new WeakMap();
29
+ const SUPERVISION_RECEIPT_KEYS = Object.freeze([
30
+ "schema",
31
+ "requestDigest",
32
+ "invocationNonce",
33
+ "invocationId",
34
+ "capabilityDigest",
35
+ "operation",
36
+ "requestedAt",
37
+ "deadlineAt",
38
+ "payloadDigest",
39
+ "targetDigest",
40
+ "targetHandlerId",
41
+ "targetRevision",
42
+ "targetAuthorityDigest",
43
+ "completedAt",
44
+ "status",
45
+ "isolation",
46
+ "hardDeadlineEnforced",
47
+ "lateSideEffectsPrevented",
48
+ "invocationCount",
49
+ "capabilityRevoked",
50
+ "resultDigest",
51
+ "targetInvocationDigest",
52
+ "revocationDigest",
53
+ "revocationMode",
54
+ "wasActive",
55
+ "activeInvocationTerminated",
56
+ "terminatedAt",
57
+ "supervisorRevision",
58
+ "attestation",
59
+ ]);
60
+
61
+ function canonical(value) {
62
+ if (value === null || typeof value !== "object") return JSON.stringify(value);
63
+ if (Array.isArray(value)) return `[${value.map(canonical).join(",")}]`;
64
+ return `{${Object.keys(value)
65
+ .sort()
66
+ .map((key) => `${JSON.stringify(key)}:${canonical(value[key])}`)
67
+ .join(",")}}`;
68
+ }
69
+
70
+ function hash(domain, value) {
71
+ return `sha256:${createHash("sha256")
72
+ .update(domain)
73
+ .update("\0")
74
+ .update(canonical(value))
75
+ .digest("hex")}`;
76
+ }
77
+
78
+ function exact(value, keys, label) {
79
+ if (
80
+ !value ||
81
+ typeof value !== "object" ||
82
+ Array.isArray(value) ||
83
+ isProxy(value) ||
84
+ Object.getPrototypeOf(value) !== Object.prototype
85
+ ) {
86
+ throw new TypeError(`${label} must be a plain object`);
87
+ }
88
+ const actual = Reflect.ownKeys(value);
89
+ if (
90
+ actual.length !== keys.length ||
91
+ actual.some((key) => {
92
+ const field = Object.getOwnPropertyDescriptor(value, key);
93
+ return (
94
+ typeof key !== "string" ||
95
+ !keys.includes(key) ||
96
+ !field ||
97
+ !field.enumerable ||
98
+ !("value" in field)
99
+ );
100
+ })
101
+ ) {
102
+ throw new TypeError(`${label} has unexpected or accessor fields`);
103
+ }
104
+ }
105
+
106
+ function identifier(value, label) {
107
+ if (typeof value !== "string" || value.length > 256 || !ID.test(value))
108
+ throw new TypeError(`${label} is invalid`);
109
+ return value;
110
+ }
111
+
112
+ function digest(value, label) {
113
+ if (typeof value !== "string" || !DIGEST.test(value))
114
+ throw new TypeError(`${label} must be a sha256 digest`);
115
+ return value;
116
+ }
117
+
118
+ function timestamp(now) {
119
+ const milliseconds = Number(now());
120
+ if (!Number.isSafeInteger(milliseconds) || milliseconds < 0)
121
+ throw new TypeError("process runner clock is invalid");
122
+ return Object.freeze({
123
+ milliseconds,
124
+ iso: new Date(milliseconds).toISOString(),
125
+ });
126
+ }
127
+
128
+ function targetBinding(value) {
129
+ const targetDigest = computeEvolutionEvalIsolatedTargetDigest(value);
130
+ const targetAuthorityDigest =
131
+ computeEvolutionEvalTargetAuthorityDigest(value);
132
+ if (
133
+ value.schema !== EVOLUTION_EVAL_ISOLATED_TARGET_SCHEMA ||
134
+ value.isolation !== "process" ||
135
+ value.operation !== "pm-exploration-run"
136
+ ) {
137
+ throw new TypeError(
138
+ "PM exploration process runner requires a process-isolated run target",
139
+ );
140
+ }
141
+ return Object.freeze({
142
+ target: Object.freeze(structuredClone(value)),
143
+ targetDigest,
144
+ targetAuthorityDigest,
145
+ });
146
+ }
147
+
148
+ function receiptDigest(value) {
149
+ exact(value, SUPERVISION_RECEIPT_KEYS, "PM runner supervision receipt");
150
+ return computeEvolutionEvalSignedEvidenceDigest(
151
+ value,
152
+ EVOLUTION_EVAL_ATTESTATION_PURPOSES.supervisor,
153
+ );
154
+ }
155
+
156
+ function validateReceipt({ receipt, request, binding, value }) {
157
+ const digestValue = receiptDigest(receipt);
158
+ const { attestation, ...core } = receipt;
159
+ const completedAt = Date.parse(receipt.completedAt);
160
+ if (
161
+ receipt.schema !== EVOLUTION_EVAL_SUPERVISION_SCHEMA ||
162
+ receipt.requestDigest !== request.requestDigest ||
163
+ receipt.invocationNonce !== request.invocationNonce ||
164
+ receipt.invocationId !== request.invocationId ||
165
+ receipt.capabilityDigest !== request.capabilityDigest ||
166
+ receipt.operation !== binding.target.operation ||
167
+ receipt.requestedAt !== request.requestedAt ||
168
+ receipt.deadlineAt !== request.deadlineAt ||
169
+ receipt.payloadDigest !== request.payloadDigest ||
170
+ receipt.targetDigest !== binding.targetDigest ||
171
+ receipt.targetHandlerId !== binding.target.handlerId ||
172
+ receipt.targetRevision !== binding.target.handlerRevision ||
173
+ receipt.targetAuthorityDigest !== binding.targetAuthorityDigest ||
174
+ !Number.isFinite(completedAt) ||
175
+ completedAt < Date.parse(request.requestedAt) ||
176
+ completedAt > Date.parse(request.deadlineAt) ||
177
+ receipt.status !== "completed" ||
178
+ receipt.isolation !== "process" ||
179
+ receipt.hardDeadlineEnforced !== true ||
180
+ receipt.lateSideEffectsPrevented !== true ||
181
+ receipt.invocationCount !== 1 ||
182
+ receipt.capabilityRevoked !== true ||
183
+ receipt.resultDigest !==
184
+ computeEvolutionEvalSupervisedResultDigest(value) ||
185
+ !DIGEST.test(receipt.targetInvocationDigest ?? "") ||
186
+ !DIGEST.test(receipt.revocationDigest ?? "") ||
187
+ receipt.revocationMode !== "completed-release" ||
188
+ receipt.wasActive !== false ||
189
+ receipt.activeInvocationTerminated !== false ||
190
+ receipt.terminatedAt !== null ||
191
+ receipt.supervisorRevision !==
192
+ binding.supervisor.authorityDescriptor.handlerRevision
193
+ ) {
194
+ throw new Error("PM runner process supervision receipt is invalid");
195
+ }
196
+ const verified = binding.supervisor.verifyEnforcement({
197
+ purpose: EVOLUTION_EVAL_ATTESTATION_PURPOSES.supervisor,
198
+ payloadDigest: buildEvolutionEvalAttestationDigest(
199
+ core,
200
+ EVOLUTION_EVAL_ATTESTATION_PURPOSES.supervisor,
201
+ ),
202
+ attestation,
203
+ });
204
+ if (verified !== true || (verified && typeof verified.then === "function"))
205
+ throw new Error("PM runner process supervision attestation was rejected");
206
+ return digestValue;
207
+ }
208
+
209
+ function capability(binding, request, invocation, runtimeBroker) {
210
+ let revocation = null;
211
+ return Object.freeze({
212
+ async invoke() {
213
+ const result = await binding.supervisor.invokeTarget(
214
+ invocation,
215
+ runtimeBroker,
216
+ );
217
+ return Object.freeze({
218
+ value: result.value,
219
+ resultDigest: computeEvolutionEvalSupervisedResultDigest(result.value),
220
+ targetInvocationDigest: computeEvolutionEvalSignedEvidenceDigest(
221
+ result.evidence,
222
+ EVOLUTION_EVAL_ATTESTATION_PURPOSES.targetInvocation,
223
+ ),
224
+ });
225
+ },
226
+ async revoke({ mode }) {
227
+ if (revocation !== null) return revocation;
228
+ revocation = binding.supervisor
229
+ .revokeTarget({
230
+ requestDigest: request.requestDigest,
231
+ capabilityDigest: request.capabilityDigest,
232
+ targetDigest: binding.targetDigest,
233
+ invocationId: request.invocationId,
234
+ mode,
235
+ requestedAt:
236
+ mode === "hard-terminate"
237
+ ? request.deadlineAt
238
+ : new Date().toISOString(),
239
+ deadlineAt: request.deadlineAt,
240
+ })
241
+ .then((receipt) =>
242
+ Object.freeze({
243
+ revocationDigest: computeEvolutionEvalSignedEvidenceDigest(
244
+ receipt,
245
+ EVOLUTION_EVAL_ATTESTATION_PURPOSES.targetRevocation,
246
+ ),
247
+ revocationMode: mode,
248
+ wasActive: receipt.wasActive,
249
+ activeInvocationTerminated: receipt.activeInvocationTerminated,
250
+ terminatedAt: receipt.terminatedAt,
251
+ }),
252
+ );
253
+ return revocation;
254
+ },
255
+ });
256
+ }
257
+
258
+ export function createPmExplorationProcessRunnerExecutor(options = {}) {
259
+ if (
260
+ !options ||
261
+ typeof options !== "object" ||
262
+ Array.isArray(options) ||
263
+ isProxy(options) ||
264
+ Object.getPrototypeOf(options) !== Object.prototype
265
+ ) {
266
+ throw new TypeError(
267
+ "PM exploration process runner options must be a plain object",
268
+ );
269
+ }
270
+ const hasNow = Reflect.ownKeys(options).includes("now");
271
+ const hasEgressBrokered = Reflect.ownKeys(options).includes("egressBrokered");
272
+ exact(
273
+ options,
274
+ [
275
+ "supervisor",
276
+ "target",
277
+ "maxWallClockMs",
278
+ ...(hasNow ? ["now"] : []),
279
+ ...(hasEgressBrokered ? ["egressBrokered"] : []),
280
+ ],
281
+ "PM exploration process runner options",
282
+ );
283
+ if (!isEvolutionEvalProcessSupervisor(options.supervisor))
284
+ throw new TypeError("a branded evolution process supervisor is required");
285
+ if (
286
+ !Number.isSafeInteger(options.maxWallClockMs) ||
287
+ options.maxWallClockMs < 1 ||
288
+ options.maxWallClockMs > 600_000
289
+ ) {
290
+ throw new TypeError("process runner maxWallClockMs is out of bounds");
291
+ }
292
+ const now = hasNow ? options.now : Date.now;
293
+ if (typeof now !== "function" || isProxy(now))
294
+ throw new TypeError("process runner clock must be a direct function");
295
+ const supervisorDescriptor = options.supervisor.authorityDescriptor;
296
+ if (!supervisorDescriptor || typeof supervisorDescriptor !== "object")
297
+ throw new TypeError("process supervisor authority descriptor is required");
298
+ const captured = targetBinding(options.target);
299
+ const egressBrokered = hasEgressBrokered ? options.egressBrokered : false;
300
+ if (typeof egressBrokered !== "boolean")
301
+ throw new TypeError("process runner egressBrokered must be a boolean");
302
+ const descriptor = Object.freeze({
303
+ schema: egressBrokered
304
+ ? PM_EXPLORATION_RUNNER_ISOLATION_SCHEMA_V2
305
+ : PM_EXPLORATION_RUNNER_ISOLATION_SCHEMA,
306
+ mode: "process",
307
+ brokerMode: egressBrokered
308
+ ? "parent-budgeted-tools-memory-model"
309
+ : "parent-budgeted-tools",
310
+ targetDigest: captured.targetDigest,
311
+ targetAuthorityDigest: captured.targetAuthorityDigest,
312
+ handlerId: identifier(
313
+ captured.target.handlerId,
314
+ "process runner handlerId",
315
+ ),
316
+ handlerRevision: identifier(
317
+ captured.target.handlerRevision,
318
+ "process runner handlerRevision",
319
+ ),
320
+ operation: captured.target.operation,
321
+ handlerArtifactDigest: digest(
322
+ captured.target.handlerArtifactDigest,
323
+ "process runner handlerArtifactDigest",
324
+ ),
325
+ supervisorAuthorityDigest: hash(
326
+ "chainlesschain.pm-exploration-runner-supervisor-authority/v1",
327
+ {
328
+ authorityDescriptor: supervisorDescriptor,
329
+ childEvidenceStoreDescriptor:
330
+ options.supervisor.childEvidenceStoreDescriptor ?? null,
331
+ },
332
+ ),
333
+ maxWallClockMs: options.maxWallClockMs,
334
+ });
335
+ const executor = Object.freeze({});
336
+ EXECUTORS.set(executor, {
337
+ ...captured,
338
+ descriptor,
339
+ egressBrokered,
340
+ maxWallClockMs: options.maxWallClockMs,
341
+ now,
342
+ supervisor: options.supervisor,
343
+ });
344
+ return executor;
345
+ }
346
+
347
+ export function inspectPmExplorationProcessRunnerExecutor(value) {
348
+ const binding = EXECUTORS.get(value);
349
+ if (!binding)
350
+ throw new TypeError("a branded PM exploration process runner is required");
351
+ return binding.descriptor;
352
+ }
353
+
354
+ export async function invokePmExplorationProcessRunner(
355
+ executorValue,
356
+ request,
357
+ runtime,
358
+ ) {
359
+ const binding = EXECUTORS.get(executorValue);
360
+ if (!binding)
361
+ throw new TypeError("a branded PM exploration process runner is required");
362
+ if (!(runtime?.signal instanceof AbortSignal))
363
+ throw new TypeError("process runner requires a budget abort signal");
364
+ if (runtime.signal.aborted)
365
+ throw runtime.signal.reason ?? new Error("process runner was aborted");
366
+ const current = timestamp(binding.now);
367
+ const deadlineAt = new Date(
368
+ current.milliseconds + binding.maxWallClockMs,
369
+ ).toISOString();
370
+ const payloadDigest = hash(
371
+ "chainlesschain.evolution-eval-supervision-payload/v1",
372
+ request,
373
+ );
374
+ const invocationNonce = `supervision-${randomBytes(16).toString("hex")}`;
375
+ const invocationId = `target-invocation-${randomBytes(16).toString("hex")}`;
376
+ const capabilityNonce = `invocation-capability-${randomBytes(16).toString("hex")}`;
377
+ const capabilityDigest = hash(
378
+ "chainlesschain.evolution-eval-invocation-capability/v1",
379
+ {
380
+ capabilityNonce,
381
+ invocationNonce,
382
+ invocationId,
383
+ payloadDigest,
384
+ targetDigest: binding.targetDigest,
385
+ deadlineAt,
386
+ },
387
+ );
388
+ const requestCore = Object.freeze({
389
+ schema: "chainlesschain.evolution-eval-supervision-request/v3",
390
+ operation: binding.target.operation,
391
+ invocationNonce,
392
+ invocationId,
393
+ capabilityDigest,
394
+ requestedAt: current.iso,
395
+ deadlineAt,
396
+ payloadDigest,
397
+ targetDigest: binding.targetDigest,
398
+ targetHandlerId: binding.target.handlerId,
399
+ targetRevision: binding.target.handlerRevision,
400
+ targetAuthorityDigest: binding.targetAuthorityDigest,
401
+ });
402
+ const supervisionRequest = Object.freeze({
403
+ ...requestCore,
404
+ requestDigest: hash(
405
+ "chainlesschain.evolution-eval-supervision/v3/request",
406
+ requestCore,
407
+ ),
408
+ });
409
+ const invocation = Object.freeze({
410
+ schema: "chainlesschain.evolution-eval-target-invocation-request/v2",
411
+ requestDigest: supervisionRequest.requestDigest,
412
+ capabilityDigest,
413
+ invocationId,
414
+ deadlineAt,
415
+ payload: request,
416
+ payloadDigest,
417
+ target: binding.target,
418
+ targetDigest: binding.targetDigest,
419
+ });
420
+ const egressEvents = [];
421
+ let egressSequence = 0;
422
+ const invokeEgress = async (kind, input, invoke) => {
423
+ egressSequence += 1;
424
+ const sequence = egressSequence;
425
+ const value = await invoke(input);
426
+ egressEvents.push(
427
+ Object.freeze({
428
+ sequence,
429
+ kind,
430
+ requestDigest: hash(
431
+ `${PM_EXPLORATION_RUNNER_EGRESS_EVIDENCE_SCHEMA}/request`,
432
+ input,
433
+ ),
434
+ resultDigest: hash(
435
+ `${PM_EXPLORATION_RUNNER_EGRESS_EVIDENCE_SCHEMA}/result`,
436
+ value,
437
+ ),
438
+ }),
439
+ );
440
+ return value;
441
+ };
442
+ const runtimeBroker = createEvolutionEvalProcessRuntimeBroker({
443
+ recordTokens: async (count) => runtime.recordTokens(count),
444
+ invokeTool: async (toolId, input) => runtime.invokeTool(toolId, input),
445
+ ...(binding.egressBrokered
446
+ ? {
447
+ retrieveMemory: async (input) =>
448
+ invokeEgress("memory-retrieval", input, (request) =>
449
+ runtime.retrieveMemory(request),
450
+ ),
451
+ invokeModel: async (input) =>
452
+ invokeEgress("model-egress", input, (request) =>
453
+ runtime.invokeModel(request),
454
+ ),
455
+ }
456
+ : {}),
457
+ });
458
+ const invocationCapability = capability(
459
+ binding,
460
+ supervisionRequest,
461
+ invocation,
462
+ runtimeBroker,
463
+ );
464
+ let abortRevocation = null;
465
+ const abort = () => {
466
+ abortRevocation ??= invocationCapability.revoke({ mode: "hard-terminate" });
467
+ };
468
+ runtime.signal.addEventListener("abort", abort, { once: true });
469
+ try {
470
+ const response = await binding.supervisor.run(
471
+ supervisionRequest,
472
+ invocationCapability,
473
+ );
474
+ if (runtime.signal.aborted)
475
+ throw runtime.signal.reason ?? new Error("process runner was aborted");
476
+ const supervisionReceiptDigest = validateReceipt({
477
+ receipt: response.receipt,
478
+ request: supervisionRequest,
479
+ binding,
480
+ value: response.value,
481
+ });
482
+ const value = response.value;
483
+ const egressEvidenceDigest = binding.egressBrokered
484
+ ? hash(PM_EXPLORATION_RUNNER_EGRESS_EVIDENCE_SCHEMA, {
485
+ requestDigest: request.requestDigest,
486
+ events: [...egressEvents].sort(
487
+ (left, right) => left.sequence - right.sequence,
488
+ ),
489
+ })
490
+ : null;
491
+ return Object.freeze({
492
+ value,
493
+ supervisionReceiptDigest,
494
+ ...(binding.egressBrokered ? { egressEvidenceDigest } : {}),
495
+ });
496
+ } finally {
497
+ runtime.signal.removeEventListener("abort", abort);
498
+ if (abortRevocation !== null) await abortRevocation.catch(() => {});
499
+ }
500
+ }