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
@@ -7,22 +7,33 @@ import {
7
7
  } from "node:crypto";
8
8
  import { isKeyObject, isProxy } from "node:util/types";
9
9
 
10
- export const PM_EXPLORATION_EXECUTION_RECEIPT_SCHEMA =
10
+ export const PM_EXPLORATION_EXECUTION_RECEIPT_SCHEMA_V1 =
11
11
  "chainlesschain.pm-exploration-execution-receipt/v1";
12
+ export const PM_EXPLORATION_EXECUTION_RECEIPT_SCHEMA_V2 =
13
+ "chainlesschain.pm-exploration-execution-receipt/v2";
14
+ export const PM_EXPLORATION_EXECUTION_RECEIPT_SCHEMA =
15
+ "chainlesschain.pm-exploration-execution-receipt/v3";
12
16
  export const PM_EXPLORATION_GRADER_RECEIPT_SCHEMA =
13
17
  "chainlesschain.pm-exploration-grader-receipt/v1";
14
- export const PM_EXPLORATION_MERGE_RECEIPT_SCHEMA =
18
+ export const PM_EXPLORATION_MERGE_RECEIPT_SCHEMA_V1 =
15
19
  "chainlesschain.pm-exploration-merge-receipt/v1";
16
- export const PM_EXPLORATION_EVALUATOR_RECEIPT_SCHEMA =
20
+ export const PM_EXPLORATION_MERGE_RECEIPT_SCHEMA =
21
+ "chainlesschain.pm-exploration-merge-receipt/v2";
22
+ export const PM_EXPLORATION_EVALUATOR_RECEIPT_SCHEMA_V1 =
17
23
  "chainlesschain.pm-exploration-evaluator-receipt/v1";
24
+ export const PM_EXPLORATION_EVALUATOR_RECEIPT_SCHEMA =
25
+ "chainlesschain.pm-exploration-evaluator-receipt/v2";
26
+ export const PM_EXPLORATION_CURRICULUM_RECEIPT_SCHEMA =
27
+ "chainlesschain.pm-exploration-curriculum-receipt/v1";
18
28
 
19
29
  const DIGEST = /^sha256:[a-f0-9]{64}$/u;
20
30
  const ID = /^[a-z][a-z0-9]*(?:[._:@/-][a-z0-9]+)*$/u;
21
31
  const ROLES = Object.freeze({
22
- execution: PM_EXPLORATION_EXECUTION_RECEIPT_SCHEMA,
32
+ execution: PM_EXPLORATION_EXECUTION_RECEIPT_SCHEMA_V1,
23
33
  grader: PM_EXPLORATION_GRADER_RECEIPT_SCHEMA,
24
- merge: PM_EXPLORATION_MERGE_RECEIPT_SCHEMA,
25
- evaluator: PM_EXPLORATION_EVALUATOR_RECEIPT_SCHEMA,
34
+ merge: PM_EXPLORATION_MERGE_RECEIPT_SCHEMA_V1,
35
+ evaluator: PM_EXPLORATION_EVALUATOR_RECEIPT_SCHEMA_V1,
36
+ curriculum: PM_EXPLORATION_CURRICULUM_RECEIPT_SCHEMA,
26
37
  });
27
38
  const AUTHORITIES = new WeakMap();
28
39
  const SIGNERS = new WeakMap();
@@ -164,6 +175,20 @@ function branchCheckpoints(value) {
164
175
  }
165
176
 
166
177
  function normalizeExecutionPayload(value) {
178
+ const hasIsolationEvidence =
179
+ value &&
180
+ typeof value === "object" &&
181
+ !isProxy(value) &&
182
+ Object.hasOwn(value, "runnerIsolationEvidenceDigest");
183
+ const hasEgressEvidence =
184
+ value &&
185
+ typeof value === "object" &&
186
+ !isProxy(value) &&
187
+ Object.hasOwn(value, "egressEvidenceDigest");
188
+ if (hasEgressEvidence && !hasIsolationEvidence)
189
+ throw new TypeError(
190
+ "execution egress evidence requires isolation evidence",
191
+ );
167
192
  exact(
168
193
  value,
169
194
  [
@@ -179,6 +204,8 @@ function normalizeExecutionPayload(value) {
179
204
  "traceDigest",
180
205
  "status",
181
206
  "failureClass",
207
+ ...(hasIsolationEvidence ? ["runnerIsolationEvidenceDigest"] : []),
208
+ ...(hasEgressEvidence ? ["egressEvidenceDigest"] : []),
182
209
  "metrics",
183
210
  "issuedAt",
184
211
  ],
@@ -206,12 +233,33 @@ function normalizeExecutionPayload(value) {
206
233
  ) {
207
234
  throw new TypeError("execution receipt failureClass is invalid");
208
235
  }
236
+ if (
237
+ hasEgressEvidence &&
238
+ ((value.status === "succeeded" &&
239
+ !DIGEST.test(value.egressEvidenceDigest ?? "")) ||
240
+ (value.status !== "succeeded" && value.egressEvidenceDigest !== null))
241
+ ) {
242
+ throw new TypeError(
243
+ "execution receipt egress evidence disagrees with its status",
244
+ );
245
+ }
209
246
  if (
210
247
  (value.status === "succeeded" && value.failureClass !== "none") ||
211
248
  (value.status !== "succeeded" && value.failureClass === "none")
212
249
  ) {
213
250
  throw new TypeError("execution receipt status and failureClass disagree");
214
251
  }
252
+ if (
253
+ hasIsolationEvidence &&
254
+ ((value.status === "succeeded" &&
255
+ !DIGEST.test(value.runnerIsolationEvidenceDigest ?? "")) ||
256
+ (value.status !== "succeeded" &&
257
+ value.runnerIsolationEvidenceDigest !== null))
258
+ ) {
259
+ throw new TypeError(
260
+ "execution receipt isolation evidence disagrees with its status",
261
+ );
262
+ }
215
263
  return deepFreeze({
216
264
  planDigest: digest(value.planDigest, "planDigest"),
217
265
  environmentDigest: digest(value.environmentDigest, "environmentDigest"),
@@ -225,6 +273,14 @@ function normalizeExecutionPayload(value) {
225
273
  traceDigest: digest(value.traceDigest, "traceDigest"),
226
274
  status: value.status,
227
275
  failureClass: value.failureClass,
276
+ ...(hasIsolationEvidence
277
+ ? {
278
+ runnerIsolationEvidenceDigest: value.runnerIsolationEvidenceDigest,
279
+ }
280
+ : {}),
281
+ ...(hasEgressEvidence
282
+ ? { egressEvidenceDigest: value.egressEvidenceDigest }
283
+ : {}),
228
284
  metrics: metrics(value.metrics, "execution metrics"),
229
285
  issuedAt: issuedAt(value.issuedAt),
230
286
  });
@@ -274,6 +330,11 @@ function normalizeGraderPayload(value) {
274
330
  }
275
331
 
276
332
  function normalizeMergePayload(value) {
333
+ const hasIsolationEvidence =
334
+ value &&
335
+ typeof value === "object" &&
336
+ !isProxy(value) &&
337
+ Object.hasOwn(value, "mergerIsolationEvidenceDigest");
277
338
  exact(
278
339
  value,
279
340
  [
@@ -286,6 +347,7 @@ function normalizeMergePayload(value) {
286
347
  "conflictResolutionDigest",
287
348
  "status",
288
349
  "failureClass",
350
+ ...(hasIsolationEvidence ? ["mergerIsolationEvidenceDigest"] : []),
289
351
  "metrics",
290
352
  "issuedAt",
291
353
  ],
@@ -306,6 +368,17 @@ function normalizeMergePayload(value) {
306
368
  ) {
307
369
  throw new TypeError("merge receipt status and failureClass disagree");
308
370
  }
371
+ if (
372
+ hasIsolationEvidence &&
373
+ ((value.status === "succeeded" &&
374
+ !DIGEST.test(value.mergerIsolationEvidenceDigest ?? "")) ||
375
+ (value.status !== "succeeded" &&
376
+ value.mergerIsolationEvidenceDigest !== null))
377
+ ) {
378
+ throw new TypeError(
379
+ "merge receipt isolation evidence disagrees with its status",
380
+ );
381
+ }
309
382
  return deepFreeze({
310
383
  planDigest: digest(value.planDigest, "planDigest"),
311
384
  environmentDigest: digest(value.environmentDigest, "environmentDigest"),
@@ -319,12 +392,22 @@ function normalizeMergePayload(value) {
319
392
  ),
320
393
  status: value.status,
321
394
  failureClass: value.failureClass,
395
+ ...(hasIsolationEvidence
396
+ ? {
397
+ mergerIsolationEvidenceDigest: value.mergerIsolationEvidenceDigest,
398
+ }
399
+ : {}),
322
400
  metrics: metrics(value.metrics, "merge metrics"),
323
401
  issuedAt: issuedAt(value.issuedAt),
324
402
  });
325
403
  }
326
404
 
327
405
  function normalizeEvaluatorPayload(value) {
406
+ const hasIsolationEvidence =
407
+ value &&
408
+ typeof value === "object" &&
409
+ !isProxy(value) &&
410
+ Object.hasOwn(value, "evaluatorIsolationEvidenceDigest");
328
411
  exact(
329
412
  value,
330
413
  [
@@ -337,6 +420,7 @@ function normalizeEvaluatorPayload(value) {
337
420
  "decision",
338
421
  "scoreBasisPoints",
339
422
  "evaluationDigest",
423
+ ...(hasIsolationEvidence ? ["evaluatorIsolationEvidenceDigest"] : []),
340
424
  "metrics",
341
425
  "issuedAt",
342
426
  ],
@@ -344,6 +428,13 @@ function normalizeEvaluatorPayload(value) {
344
428
  );
345
429
  if (!["accept", "reject", "unsafe"].includes(value.decision))
346
430
  throw new TypeError("evaluator receipt decision is invalid");
431
+ if (
432
+ hasIsolationEvidence &&
433
+ value.evaluatorIsolationEvidenceDigest !== null &&
434
+ !DIGEST.test(value.evaluatorIsolationEvidenceDigest ?? "")
435
+ ) {
436
+ throw new TypeError("evaluator receipt isolation evidence is invalid");
437
+ }
347
438
  return deepFreeze({
348
439
  planDigest: digest(value.planDigest, "planDigest"),
349
440
  environmentDigest: digest(value.environmentDigest, "environmentDigest"),
@@ -362,18 +453,125 @@ function normalizeEvaluatorPayload(value) {
362
453
  10_000,
363
454
  ),
364
455
  evaluationDigest: digest(value.evaluationDigest, "evaluationDigest"),
456
+ ...(hasIsolationEvidence
457
+ ? {
458
+ evaluatorIsolationEvidenceDigest:
459
+ value.evaluatorIsolationEvidenceDigest,
460
+ }
461
+ : {}),
365
462
  metrics: metrics(value.metrics, "evaluator metrics"),
366
463
  issuedAt: issuedAt(value.issuedAt),
367
464
  });
368
465
  }
369
466
 
467
+ function normalizeCurriculumPayload(value) {
468
+ exact(
469
+ value,
470
+ [
471
+ "planDigest",
472
+ "environmentDigest",
473
+ "executionManifestDigest",
474
+ "requestDigest",
475
+ "selectionId",
476
+ "roundId",
477
+ "stage",
478
+ "branchId",
479
+ "inputMemoryDigest",
480
+ "taskId",
481
+ "rationaleDigest",
482
+ "status",
483
+ "failureClass",
484
+ "curriculumIsolationEvidenceDigest",
485
+ "metrics",
486
+ "issuedAt",
487
+ ],
488
+ "curriculum receipt payload",
489
+ );
490
+ if (!["broad", "deep"].includes(value.stage))
491
+ throw new TypeError("curriculum receipt stage is invalid");
492
+ if (value.stage === "broad") identifier(value.branchId, "branchId");
493
+ else if (value.branchId !== null)
494
+ throw new TypeError("Deep curriculum receipts cannot name a branch");
495
+ if (!["succeeded", "failed", "aborted"].includes(value.status))
496
+ throw new TypeError("curriculum receipt status is invalid");
497
+ if (
498
+ !["none", "budget", "infrastructure", "unknown"].includes(
499
+ value.failureClass,
500
+ )
501
+ )
502
+ throw new TypeError("curriculum receipt failureClass is invalid");
503
+ if (
504
+ (value.status === "succeeded" && value.failureClass !== "none") ||
505
+ (value.status !== "succeeded" && value.failureClass === "none") ||
506
+ (value.status === "succeeded" &&
507
+ (typeof value.taskId !== "string" ||
508
+ !DIGEST.test(value.curriculumIsolationEvidenceDigest ?? ""))) ||
509
+ (value.status !== "succeeded" &&
510
+ (value.taskId !== null ||
511
+ value.curriculumIsolationEvidenceDigest !== null))
512
+ ) {
513
+ throw new TypeError("curriculum receipt status fields disagree");
514
+ }
515
+ return deepFreeze({
516
+ planDigest: digest(value.planDigest, "planDigest"),
517
+ environmentDigest: digest(value.environmentDigest, "environmentDigest"),
518
+ executionManifestDigest: digest(
519
+ value.executionManifestDigest,
520
+ "executionManifestDigest",
521
+ ),
522
+ requestDigest: digest(value.requestDigest, "requestDigest"),
523
+ selectionId: identifier(value.selectionId, "selectionId"),
524
+ roundId: identifier(value.roundId, "roundId"),
525
+ stage: value.stage,
526
+ branchId: value.branchId,
527
+ inputMemoryDigest: digest(value.inputMemoryDigest, "inputMemoryDigest"),
528
+ taskId:
529
+ value.status === "succeeded" ? identifier(value.taskId, "taskId") : null,
530
+ rationaleDigest: digest(value.rationaleDigest, "rationaleDigest"),
531
+ status: value.status,
532
+ failureClass: value.failureClass,
533
+ curriculumIsolationEvidenceDigest: value.curriculumIsolationEvidenceDigest,
534
+ metrics: metrics(value.metrics, "curriculum metrics"),
535
+ issuedAt: issuedAt(value.issuedAt),
536
+ });
537
+ }
538
+
370
539
  function normalizePayload(receiptRole, value) {
371
540
  if (receiptRole === "execution") return normalizeExecutionPayload(value);
372
541
  if (receiptRole === "grader") return normalizeGraderPayload(value);
373
542
  if (receiptRole === "merge") return normalizeMergePayload(value);
543
+ if (receiptRole === "curriculum") return normalizeCurriculumPayload(value);
374
544
  return normalizeEvaluatorPayload(value);
375
545
  }
376
546
 
547
+ function receiptSchema(receiptRole, payload) {
548
+ if (
549
+ receiptRole === "execution" &&
550
+ Object.hasOwn(payload, "egressEvidenceDigest")
551
+ ) {
552
+ return PM_EXPLORATION_EXECUTION_RECEIPT_SCHEMA;
553
+ }
554
+ if (
555
+ receiptRole === "execution" &&
556
+ Object.hasOwn(payload, "runnerIsolationEvidenceDigest")
557
+ ) {
558
+ return PM_EXPLORATION_EXECUTION_RECEIPT_SCHEMA_V2;
559
+ }
560
+ if (
561
+ receiptRole === "merge" &&
562
+ Object.hasOwn(payload, "mergerIsolationEvidenceDigest")
563
+ ) {
564
+ return PM_EXPLORATION_MERGE_RECEIPT_SCHEMA;
565
+ }
566
+ if (
567
+ receiptRole === "evaluator" &&
568
+ Object.hasOwn(payload, "evaluatorIsolationEvidenceDigest")
569
+ ) {
570
+ return PM_EXPLORATION_EVALUATOR_RECEIPT_SCHEMA;
571
+ }
572
+ return ROLES[receiptRole];
573
+ }
574
+
377
575
  function publicKey(value) {
378
576
  let key;
379
577
  try {
@@ -504,17 +702,18 @@ export function issuePmExplorationReceipt(signer, payloadInput) {
504
702
  const authority = AUTHORITIES.get(signing.authority);
505
703
  const receiptRole = authority.descriptor.role;
506
704
  const payload = normalizePayload(receiptRole, payloadInput);
705
+ const schema = receiptSchema(receiptRole, payload);
507
706
  const core = deepFreeze({
508
- schema: ROLES[receiptRole],
707
+ schema,
509
708
  role: receiptRole,
510
709
  authenticated: true,
511
710
  authority: authority.descriptor,
512
711
  payload,
513
712
  });
514
- const receiptDigest = hash(ROLES[receiptRole], core);
713
+ const receiptDigest = hash(schema, core);
515
714
  const signature = sign(
516
715
  null,
517
- Buffer.from(`${ROLES[receiptRole]}\0${receiptDigest}`, "utf8"),
716
+ Buffer.from(`${schema}\0${receiptDigest}`, "utf8"),
518
717
  signing.privateKey,
519
718
  ).toString("base64url");
520
719
  return deepFreeze({ ...core, receiptDigest, signature });
@@ -578,15 +777,16 @@ export function verifyPmExplorationReceipt(
578
777
  "PM exploration receipt",
579
778
  );
580
779
  const receiptRole = authority.descriptor.role;
780
+ const payload = normalizePayload(receiptRole, value.payload);
781
+ const schema = receiptSchema(receiptRole, payload);
581
782
  if (
582
- value.schema !== ROLES[receiptRole] ||
783
+ value.schema !== schema ||
583
784
  value.role !== receiptRole ||
584
785
  value.authenticated !== true ||
585
786
  canonical(value.authority) !== canonical(authority.descriptor)
586
787
  ) {
587
788
  throw new Error("PM exploration receipt authority binding mismatch");
588
789
  }
589
- const payload = normalizePayload(receiptRole, value.payload);
590
790
  const core = deepFreeze({
591
791
  schema: value.schema,
592
792
  role: value.role,