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.
- package/README.md +20 -12
- package/package.json +4 -4
- package/src/assets/web-panel/assets/{AIOps-Byz17CTN.js → AIOps-FhevRfL6.js} +1 -1
- package/src/assets/web-panel/assets/{ActionButton-C5LiW2-J.js → ActionButton-rOeOykx5.js} +1 -1
- package/src/assets/web-panel/assets/{Analytics-D1INcvZF.js → Analytics-BK_wYlfz.js} +3 -3
- package/src/assets/web-panel/assets/{AppLayout-DZzHO1VV.js → AppLayout-_2cCtZKV.js} +5 -5
- package/src/assets/web-panel/assets/{Artifacts-WfYQL6Ia.js → Artifacts-D5MSvVzk.js} +1 -1
- package/src/assets/web-panel/assets/{Audit-DohBoGWO.js → Audit-yd-Ah-A3.js} +1 -1
- package/src/assets/web-panel/assets/{BackgroundAgents-Chtk-Hde.js → BackgroundAgents-yCaw_Gu_.js} +1 -1
- package/src/assets/web-panel/assets/{Backup-B813PuMz.js → Backup-G3ADD4N-.js} +1 -1
- package/src/assets/web-panel/assets/{BaseInput-DaDdWWgK.js → BaseInput-ByDhkLbF.js} +1 -1
- package/src/assets/web-panel/assets/{Chat-D4pJ6oZ7.js → Chat-BMrc7qjz.js} +4 -4
- package/src/assets/web-panel/assets/ChatBubbleRenderer-nA7n0I6S.js +1 -0
- package/src/assets/web-panel/assets/{Checkbox-Clo9TvO6.js → Checkbox-BHYgyZWA.js} +1 -1
- package/src/assets/web-panel/assets/{Codegen-uejLg8Ih.js → Codegen-DJfcy0jC.js} +1 -1
- package/src/assets/web-panel/assets/{Col-B7nbx-iJ.js → Col-C27zROxc.js} +1 -1
- package/src/assets/web-panel/assets/{Community-FEyjPK1j.js → Community-CuS5tq_1.js} +1 -1
- package/src/assets/web-panel/assets/{Compact-B6Fk0Kn6.js → Compact-BrYJNe7Q.js} +1 -1
- package/src/assets/web-panel/assets/{Compliance-BQG8goUl.js → Compliance-8hfahYHT.js} +1 -1
- package/src/assets/web-panel/assets/{Cowork-CbBeEfHp.js → Cowork-DdE0n2lp.js} +2 -2
- package/src/assets/web-panel/assets/{Cron-DPzlFcEZ.js → Cron-CUq3aSiX.js} +2 -2
- package/src/assets/web-panel/assets/{Crosschain-B8pWJrbg.js → Crosschain-BM4XSPWG.js} +1 -1
- package/src/assets/web-panel/assets/{DID-gGQHUlFN.js → DID-CdaBY57N.js} +2 -2
- package/src/assets/web-panel/assets/{Dashboard-C2TMFHrn.js → Dashboard-Cwtd52So.js} +2 -2
- package/src/assets/web-panel/assets/{Dropdown-BVPxGbll.js → Dropdown-BvlObh6U.js} +1 -1
- package/src/assets/web-panel/assets/{EmailListRenderer-CNPxs0hd.js → EmailListRenderer-e3fLhjnX.js} +1 -1
- package/src/assets/web-panel/assets/{EvolutionSettings-_XTiB7q1.js → EvolutionSettings-CTtk1Zo8.js} +1 -1
- package/src/assets/web-panel/assets/{FamilyGuardDashboard-UyE3VWtI.js → FamilyGuardDashboard-BpPJUnCU.js} +1 -1
- package/src/assets/web-panel/assets/{Federation-CLt6FHK-.js → Federation-vzjZ6_nQ.js} +1 -1
- package/src/assets/web-panel/assets/{FormItemContext-CdNQPRPw.js → FormItemContext-DEDNLhkE.js} +1 -1
- package/src/assets/web-panel/assets/{GenericCardRenderer-BJ0AMhrh.js → GenericCardRenderer-DEl2Te5f.js} +1 -1
- package/src/assets/web-panel/assets/{Git-CQnvMfOM.js → Git-BzsYQnCq.js} +2 -2
- package/src/assets/web-panel/assets/{Governance-deYsHC-o.js → Governance-zxJs6Y8s.js} +1 -1
- package/src/assets/web-panel/assets/{Inference-qaSck43z.js → Inference-5JUsrmF1.js} +1 -1
- package/src/assets/web-panel/assets/{KnowledgeGraph-De0aJ3Ls.js → KnowledgeGraph-Br8b5Htz.js} +1 -1
- package/src/assets/web-panel/assets/{Logs-ZtS98jCm.js → Logs-D-tubDMJ.js} +2 -2
- package/src/assets/web-panel/assets/MarkdownRenderer-In4itZX2.js +1 -0
- package/src/assets/web-panel/assets/{Marketplace-Byz3xCBN.js → Marketplace-s8MmWkS9.js} +1 -1
- package/src/assets/web-panel/assets/{McpTools-DOZUUW6z.js → McpTools-Wu-WRg4M.js} +3 -3
- package/src/assets/web-panel/assets/{Memory-C33wC2hA.js → Memory-B_i-eX9w.js} +2 -2
- package/src/assets/web-panel/assets/{MobileBridge-zZe-T_6M.js → MobileBridge-Ca64kjVx.js} +1 -1
- package/src/assets/web-panel/assets/{MobileProjects-CRnUIume.js → MobileProjects-Cq9AFiO4.js} +1 -1
- package/src/assets/web-panel/assets/{Mtc-C1xlRVAN.js → Mtc-DKvGmG3y.js} +4 -4
- package/src/assets/web-panel/assets/{MtcAudit-D0U07bIi.js → MtcAudit-BVvWx8pF.js} +2 -2
- package/src/assets/web-panel/assets/{Multisig-DF8uvV3h.js → Multisig-wqeJ2O9x.js} +3 -3
- package/src/assets/web-panel/assets/{NLProgramming-bBPGAFlt.js → NLProgramming-DX87ysYu.js} +1 -1
- package/src/assets/web-panel/assets/{Notes-BHAaOsgg.js → Notes-ChenGdu0.js} +3 -3
- package/src/assets/web-panel/assets/{NotificationSettings-Cl0fG_rA.js → NotificationSettings-BZRa68-x.js} +1 -1
- package/src/assets/web-panel/assets/{OrderTableRenderer-BEPAs8Zv.js → OrderTableRenderer-DZ6xG1M6.js} +1 -1
- package/src/assets/web-panel/assets/{Organization-BAxSwgk5.js → Organization-BWJp4VPX.js} +4 -4
- package/src/assets/web-panel/assets/{Overflow-D68KubAu.js → Overflow-BoM4bYt5.js} +1 -1
- package/src/assets/web-panel/assets/{P2P-bhdT17zk.js → P2P-Cvi8YV09.js} +2 -2
- package/src/assets/web-panel/assets/{PdhVaultBrowser-DqaO6wgH.js → PdhVaultBrowser-CNVC1NIj.js} +3 -3
- package/src/assets/web-panel/assets/{Permissions-Bq8fvkak.js → Permissions-DNd1MRjW.js} +4 -4
- package/src/assets/web-panel/assets/{PersonalDataHub-BYd2JEic.js → PersonalDataHub-DGSBYZ5-.js} +5 -5
- package/src/assets/web-panel/assets/{Pipeline-Csg_ja69.js → Pipeline-DkcoGMBo.js} +1 -1
- package/src/assets/web-panel/assets/{Privacy-lwxwLj4M.js → Privacy-DltwvMAW.js} +1 -1
- package/src/assets/web-panel/assets/{ProjectInit-BdBZkH8z.js → ProjectInit-ChYbpHg8.js} +2 -2
- package/src/assets/web-panel/assets/{ProjectSettings-ClWgFy-K.js → ProjectSettings-B8FWiHTJ.js} +2 -2
- package/src/assets/web-panel/assets/{Projects-Bu-qj8N1.js → Projects-DuyhtSm4.js} +1 -1
- package/src/assets/web-panel/assets/{Providers-DEjxrxw3.js → Providers-Bo18Tx_6.js} +1 -1
- package/src/assets/web-panel/assets/{QrScannerModal-eccy-8Vi.js → QrScannerModal-6W85KlsG.js} +1 -1
- package/src/assets/web-panel/assets/{QuickAsk-Vx3uDvFg.js → QuickAsk-DznRUedP.js} +1 -1
- package/src/assets/web-panel/assets/{Recommend-CfUivNps.js → Recommend-CQDN3_p-.js} +1 -1
- package/src/assets/web-panel/assets/{RemoteSession-BU4gk7GI.js → RemoteSession-CiJgokEj.js} +3 -3
- package/src/assets/web-panel/assets/{Reputation-CbPzdZ0C.js → Reputation-DexzGH7E.js} +1 -1
- package/src/assets/web-panel/assets/{Row-CYLrgfKA.js → Row-BgZOIvSi.js} +1 -1
- package/src/assets/web-panel/assets/{RssFeed-DbY1oyuv.js → RssFeed-BWIZJ_Jr.js} +3 -3
- package/src/assets/web-panel/assets/{Search-QeW41K5r.js → Search-B376EwWJ.js} +1 -1
- package/src/assets/web-panel/assets/{Security-CJxf1kLZ.js → Security-92mUR5OD.js} +4 -4
- package/src/assets/web-panel/assets/{Services-CFO9ySZc.js → Services-ClSEAOHk.js} +2 -2
- package/src/assets/web-panel/assets/{Skeleton-CQFjeQN0.js → Skeleton-DVhLbv99.js} +1 -1
- package/src/assets/web-panel/assets/{Skills-CLLB4INW.js → Skills-JTcXs_xI.js} +1 -1
- package/src/assets/web-panel/assets/{Sla-DxeLIJk0.js → Sla-DnKY9zy9.js} +1 -1
- package/src/assets/web-panel/assets/{SpeechSettings-D4FA9KYI.js → SpeechSettings-GO1JefAH.js} +1 -1
- package/src/assets/web-panel/assets/{SyncSettings-C6NOkcQK.js → SyncSettings-jX5tB2St.js} +2 -2
- package/src/assets/web-panel/assets/{Tasks-LmVPWDfQ.js → Tasks-BxRBzhUc.js} +1 -1
- package/src/assets/web-panel/assets/{Templates-BdEfUoVB.js → Templates-CAVkbTG1.js} +1 -1
- package/src/assets/web-panel/assets/{Tenant-IUlESacN.js → Tenant-5Y7sHBkz.js} +1 -1
- package/src/assets/web-panel/assets/{Terminal-B9pDe7sn.js → Terminal-CbbLShYb.js} +2 -2
- package/src/assets/web-panel/assets/{TimelineRenderer-ZCwB-Pki.js → TimelineRenderer-2HptWihL.js} +1 -1
- package/src/assets/web-panel/assets/{Tokens-4qk16LX1.js → Tokens-B-jGxzHl.js} +1 -1
- package/src/assets/web-panel/assets/{Trigger-jXNyargn.js → Trigger-9DGa90DT.js} +1 -1
- package/src/assets/web-panel/assets/{Trust-D13PydtT.js → Trust-BSJEkEOO.js} +1 -1
- package/src/assets/web-panel/assets/{UkeySign-yPgws6mS.js → UkeySign-C807So5R.js} +1 -1
- package/src/assets/web-panel/assets/{VideoEditing-B329WjpG.js → VideoEditing-ByiieAv-.js} +1 -1
- package/src/assets/web-panel/assets/{Wallet-T8VM-Ttm.js → Wallet-BixbIOUv.js} +4 -4
- package/src/assets/web-panel/assets/{WebAuthn-XuRibrpP.js → WebAuthn-z7akhor4.js} +5 -5
- package/src/assets/web-panel/assets/{WorkflowEditor-D1Gwz3YR.js → WorkflowEditor-KvijuUuR.js} +1 -1
- package/src/assets/web-panel/assets/{chat-DjydtnT-.js → chat-BYKoh0YG.js} +1 -1
- package/src/assets/web-panel/assets/{colors-gFtBvPrr.js → colors-CLT8IYBt.js} +1 -1
- package/src/assets/web-panel/assets/{compact-item-CndxhGfx.js → compact-item-DlBIyYHF.js} +1 -1
- package/src/assets/web-panel/assets/{createContext-DnfGpd0L.js → createContext-5XmAnNLr.js} +1 -1
- package/src/assets/web-panel/assets/devWarning-BmcCIHwY.js +1 -0
- package/src/assets/web-panel/assets/{hasIn-CmT5hRVW.js → hasIn-rPdRhm7K.js} +1 -1
- package/src/assets/web-panel/assets/{index-DoBKSzqu.js → index-8un-eUDI.js} +1 -1
- package/src/assets/web-panel/assets/{index-DGbKeg8G.js → index-B-0nAxf5.js} +1 -1
- package/src/assets/web-panel/assets/{index-DreYqebI.js → index-B1VfBUPB.js} +1 -1
- package/src/assets/web-panel/assets/{index-zQf599Uq.js → index-BBt2CSAx.js} +1 -1
- package/src/assets/web-panel/assets/{index-BlTcxT_L.js → index-BDtlwjSr.js} +1 -1
- package/src/assets/web-panel/assets/{index-CqpR0Des.js → index-BIRl2Ii5.js} +1 -1
- package/src/assets/web-panel/assets/{index-C3HvYeA3.js → index-BgevTkUv.js} +1 -1
- package/src/assets/web-panel/assets/{index-B0WFjxWs.js → index-Bve7Wsgf.js} +1 -1
- package/src/assets/web-panel/assets/{index-BNHdO6Jr.js → index-Bzd0sFkp.js} +1 -1
- package/src/assets/web-panel/assets/{index-DV2PR3Fa.js → index-C2sFDVb_.js} +1 -1
- package/src/assets/web-panel/assets/{index-D2d7358Y.js → index-CErvHCDe.js} +1 -1
- package/src/assets/web-panel/assets/{index-DaEPE2DC.js → index-CM_a9spK.js} +1 -1
- package/src/assets/web-panel/assets/{index-DKyuE_Y2.js → index-CY6TMc2m.js} +1 -1
- package/src/assets/web-panel/assets/{index-BVM_w30N.js → index-ChlzaTV3.js} +1 -1
- package/src/assets/web-panel/assets/{index-CZLDbPTa.js → index-CsnbOKdI.js} +1 -1
- package/src/assets/web-panel/assets/{index-HHP1zzo7.js → index-D3-NL-x-.js} +1 -1
- package/src/assets/web-panel/assets/{index-BFif4Cev.js → index-D3f9Jzx2.js} +1 -1
- package/src/assets/web-panel/assets/{index-C14jryXi.js → index-DCDSycWo.js} +1 -1
- package/src/assets/web-panel/assets/{index-CB27echm.js → index-DIVrVGvf.js} +1 -1
- package/src/assets/web-panel/assets/{index-BGlmPbl_.js → index-DI_tYFBe.js} +1 -1
- package/src/assets/web-panel/assets/{index-BsRKmb6k.js → index-DPS4mWnI.js} +1 -1
- package/src/assets/web-panel/assets/{index-BXNUTiW8.js → index-DTslLzPJ.js} +1 -1
- package/src/assets/web-panel/assets/{index-Dbpk75MO.js → index-DW8vozBS.js} +1 -1
- package/src/assets/web-panel/assets/index-DY8rmd6x.js +1 -0
- package/src/assets/web-panel/assets/{index-DjY-3sMA.js → index-DZiSMYoD.js} +3 -3
- package/src/assets/web-panel/assets/{index-DV6NrfJx.js → index-DZjGcIGU.js} +1 -1
- package/src/assets/web-panel/assets/{index-ktN-K1Tf.js → index-Dea32nOK.js} +1 -1
- package/src/assets/web-panel/assets/{index-DjcR-CwS.js → index-Djd7uqwM.js} +1 -1
- package/src/assets/web-panel/assets/{index-CuOx4Pbe.js → index-Dntid6oj.js} +1 -1
- package/src/assets/web-panel/assets/{index-BW3nWiu0.js → index-DqZU4_7J.js} +1 -1
- package/src/assets/web-panel/assets/{index-C4Mqhmas.js → index-DuvweiCz.js} +1 -1
- package/src/assets/web-panel/assets/{index-CRqz8TtI.js → index-DzExCCLS.js} +1 -1
- package/src/assets/web-panel/assets/{index-D5na0B7G.js → index-LKT-Ol0A.js} +1 -1
- package/src/assets/web-panel/assets/{index-_-wGLtAg.js → index-akwXS-FF.js} +1 -1
- package/src/assets/web-panel/assets/{index-CgMKElUh.js → index-b-rQCMkx.js} +1 -1
- package/src/assets/web-panel/assets/{index-DUlubR4l.js → index-eHbr3f5I.js} +1 -1
- package/src/assets/web-panel/assets/{index-D88-8bsB.js → index-kx6zDWew.js} +1 -1
- package/src/assets/web-panel/assets/{index-DuAvYTmY.js → index-rRuCGdKW.js} +1 -1
- package/src/assets/web-panel/assets/index-sbwcUeRS.js +1 -0
- package/src/assets/web-panel/assets/{initDefaultProps-KV3V-PNH.js → initDefaultProps-a8411LiK.js} +1 -1
- package/src/assets/web-panel/assets/{motion-PFGQg7_X.js → motion-oVcQdpCm.js} +1 -1
- package/src/assets/web-panel/assets/{move-Dnl79wq4.js → move-B-eyzzzL.js} +1 -1
- package/src/assets/web-panel/assets/{mtc-parser-Bwl5JH9V.js → mtc-parser-BCYIxuG7.js} +1 -1
- package/src/assets/web-panel/assets/{omit-DCcTtM1l.js → omit-DuFtWiYh.js} +1 -1
- package/src/assets/web-panel/assets/{pickAttrs-Cl6BjjDf.js → pickAttrs-CVAoJhGu.js} +1 -1
- package/src/assets/web-panel/assets/{placementArrow-fdqhyo42.js → placementArrow-Y2iub2bO.js} +1 -1
- package/src/assets/web-panel/assets/{responsiveObserve-DYQpmcDW.js → responsiveObserve-BHenWIVD.js} +1 -1
- package/src/assets/web-panel/assets/{slide-C4l-VfO4.js → slide-CKrMaL29.js} +1 -1
- package/src/assets/web-panel/assets/{statusUtils-DYDw_dyZ.js → statusUtils-w8eb_1da.js} +1 -1
- package/src/assets/web-panel/assets/{styleChecker-BEsubSMu.js → styleChecker-CCVi_Ww3.js} +1 -1
- package/src/assets/web-panel/assets/{useFlexGapSupport-Cj82ggQ_.js → useFlexGapSupport-BsmR_q0r.js} +1 -1
- package/src/assets/web-panel/assets/{useFs-B7L1eJ0V.js → useFs-a8GMBjnc.js} +1 -1
- package/src/assets/web-panel/assets/{usePersonalDataHub-DVlJVD4d.js → usePersonalDataHub-BMUYSPn-.js} +1 -1
- package/src/assets/web-panel/assets/{vnode-BBAbRN_Y.js → vnode-DL2pI31V.js} +1 -1
- package/src/assets/web-panel/assets/{zoom-BYn48q-I.js → zoom-Cbi8fISi.js} +1 -1
- package/src/assets/web-panel/index.html +1 -1
- package/src/data/changelog.json +33 -7
- package/src/lib/dependency-install-policy.js +1 -1
- package/src/lib/evolution/browser-download-action-authority.js +747 -0
- package/src/lib/evolution/browser-download-artifact-disposal-authority.js +436 -0
- package/src/lib/evolution/browser-filesystem-quarantine-custody.js +2453 -0
- package/src/lib/evolution/browser-filesystem-quarantine-disposal.js +36 -0
- package/src/lib/evolution/browser-keyboard-action-authority.js +560 -0
- package/src/lib/evolution/browser-navigation-action-authority.js +546 -0
- package/src/lib/evolution/browser-quarantine-lock-maintenance-authority.js +573 -0
- package/src/lib/evolution/browser-quarantine-operator-revocation-authority.js +442 -0
- package/src/lib/evolution/browser-quarantine-retention-authority.js +503 -0
- package/src/lib/evolution/browser-quarantine-retention-scheduler.js +207 -0
- package/src/lib/evolution/browser-quarantined-download-executor.js +525 -0
- package/src/lib/evolution/browser-tab-open-action-authority.js +491 -0
- package/src/lib/evolution/browser-vision-action-authority.js +444 -0
- package/src/lib/evolution/browser-vision-observation-authority.js +304 -0
- package/src/lib/evolution/evolution-deployment-loader.js +241 -1
- package/src/lib/evolution/evolution-eval-child-evidence-ledger-adapter.js +5 -0
- package/src/lib/evolution/evolution-eval-gate.js +2 -1
- package/src/lib/evolution/evolution-eval-process-supervisor-worker.mjs +71 -9
- package/src/lib/evolution/evolution-eval-process-supervisor.js +276 -9
- package/src/lib/evolution/evolution-workbench-metrics.js +81 -21
- package/src/lib/evolution/pm-exploration-benchmark.js +747 -0
- package/src/lib/evolution/pm-exploration-budget-executor.js +106 -9
- package/src/lib/evolution/pm-exploration-egress-authority.js +382 -0
- package/src/lib/evolution/pm-exploration-evidence-bundle.js +149 -44
- package/src/lib/evolution/pm-exploration-execution-host.js +1254 -8
- package/src/lib/evolution/pm-exploration-process-grader.js +458 -0
- package/src/lib/evolution/pm-exploration-process-reviewer.js +456 -0
- package/src/lib/evolution/pm-exploration-process-runner.js +500 -0
- package/src/lib/evolution/pm-exploration-receipts.js +211 -11
- package/src/lib/evolution/pm-exploration-recovery-snapshot-store.js +465 -46
- package/src/lib/evolution/pm-exploration-transition-committer.js +185 -34
- package/src/lib/evolution/skill-outcome-index-authority.js +7 -3
- package/src/lib/evolution/skill-writer-inventory-manifest.js +0 -39
- package/src/lib/evolution/volcengine-function-execution-authority.js +2949 -0
- package/src/lib/evolution/volcengine-function-process-executor.js +615 -0
- package/src/lib/evolution/volcengine-function-replay-store.js +836 -0
- package/src/lib/evolution/volcengine-function-revocation-status-floor-store.js +480 -0
- package/src/lib/governance-coverage.js +1 -1
- package/src/lib/headless-manifest.js +1 -1
- package/src/lib/protocol-replay.js +1 -1
- package/src/lib/skill-outcome-transcript-authority.js +45 -5
- package/src/runtime/agent-core.js +17 -0
- package/src/assets/web-panel/assets/ChatBubbleRenderer-Cf3LLgDc.js +0 -1
- package/src/assets/web-panel/assets/MarkdownRenderer-CTsYo9NN.js +0 -1
- package/src/assets/web-panel/assets/devWarning-D60SbiD-.js +0 -1
- package/src/assets/web-panel/assets/index-C0yR4_7h.js +0 -1
- 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
|
|
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
|
|
18
|
+
export const PM_EXPLORATION_MERGE_RECEIPT_SCHEMA_V1 =
|
|
15
19
|
"chainlesschain.pm-exploration-merge-receipt/v1";
|
|
16
|
-
export const
|
|
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:
|
|
32
|
+
execution: PM_EXPLORATION_EXECUTION_RECEIPT_SCHEMA_V1,
|
|
23
33
|
grader: PM_EXPLORATION_GRADER_RECEIPT_SCHEMA,
|
|
24
|
-
merge:
|
|
25
|
-
evaluator:
|
|
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
|
|
707
|
+
schema,
|
|
509
708
|
role: receiptRole,
|
|
510
709
|
authenticated: true,
|
|
511
710
|
authority: authority.descriptor,
|
|
512
711
|
payload,
|
|
513
712
|
});
|
|
514
|
-
const receiptDigest = hash(
|
|
713
|
+
const receiptDigest = hash(schema, core);
|
|
515
714
|
const signature = sign(
|
|
516
715
|
null,
|
|
517
|
-
Buffer.from(`${
|
|
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 !==
|
|
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,
|