chainlesschain 0.166.64 → 0.166.68
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +29 -12
- package/package.json +4 -4
- package/src/assets/web-panel/assets/{AIOps-BFbLDWTF.js → AIOps-CXkSNOGY.js} +1 -1
- package/src/assets/web-panel/assets/{ActionButton-CAHMtgNB.js → ActionButton-ysMR6gTs.js} +1 -1
- package/src/assets/web-panel/assets/{Analytics-CkrSj0oR.js → Analytics-WGZ0sWuw.js} +3 -3
- package/src/assets/web-panel/assets/{AppLayout-BTb0Ws1l.js → AppLayout-Cs2iRlQG.js} +4 -4
- package/src/assets/web-panel/assets/{Artifacts-C2Pgepj-.js → Artifacts-5IdfxWz0.js} +1 -1
- package/src/assets/web-panel/assets/{Audit-ZweyxXW8.js → Audit-U9V434QX.js} +1 -1
- package/src/assets/web-panel/assets/{BackgroundAgents-BS8tAnzP.js → BackgroundAgents-BvFwxPlC.js} +1 -1
- package/src/assets/web-panel/assets/{Backup-CLkG_74M.js → Backup-C9yTr9hO.js} +1 -1
- package/src/assets/web-panel/assets/{BaseInput-MIfNcdUZ.js → BaseInput-BdsSwUgE.js} +1 -1
- package/src/assets/web-panel/assets/{Chat-DBwqlWWr.js → Chat-BB_2oBgH.js} +5 -5
- package/src/assets/web-panel/assets/ChatBubbleRenderer-Bpf1hDUl.js +1 -0
- package/src/assets/web-panel/assets/{Checkbox-DdBYhlVX.js → Checkbox-v6M5m7dK.js} +1 -1
- package/src/assets/web-panel/assets/{Codegen-BR6MhiDo.js → Codegen-CtouWSIz.js} +1 -1
- package/src/assets/web-panel/assets/{Col-yO-5EbbM.js → Col-CqQJ4ORW.js} +1 -1
- package/src/assets/web-panel/assets/{Community-B608q_m7.js → Community-BO__QCOy.js} +1 -1
- package/src/assets/web-panel/assets/{Compact-BmVHi7Z7.js → Compact-D0Kq4xlH.js} +1 -1
- package/src/assets/web-panel/assets/{Compliance-BQ-DzutA.js → Compliance-BSLKKBjA.js} +1 -1
- package/src/assets/web-panel/assets/{Cowork-BEfLyXvi.js → Cowork-VsujXW5o.js} +3 -3
- package/src/assets/web-panel/assets/{Cron-Cld6NX-_.js → Cron-j8DbLGi5.js} +2 -2
- package/src/assets/web-panel/assets/{Crosschain-CUA3nDId.js → Crosschain-DWpYH1yN.js} +1 -1
- package/src/assets/web-panel/assets/{DID-DSI3E9zv.js → DID-mLaRxLQh.js} +2 -2
- package/src/assets/web-panel/assets/{Dashboard-CoWtEdhO.js → Dashboard-Cff033Jr.js} +2 -2
- package/src/assets/web-panel/assets/{Dropdown-CGhZ1Dyy.js → Dropdown-B1Upt6fP.js} +1 -1
- package/src/assets/web-panel/assets/{EmailListRenderer-BHZe2K5q.js → EmailListRenderer-CPtb8joV.js} +1 -1
- package/src/assets/web-panel/assets/{EvolutionSettings-Corjo98k.js → EvolutionSettings-CVh4Uv4g.js} +1 -1
- package/src/assets/web-panel/assets/{FamilyGuardDashboard-dPSWF3Pt.js → FamilyGuardDashboard-CrD1PhbF.js} +1 -1
- package/src/assets/web-panel/assets/{Federation-DT-Zr78c.js → Federation-ftxrvqW5.js} +1 -1
- package/src/assets/web-panel/assets/{FormItemContext-CzKq63B0.js → FormItemContext-9O80slC1.js} +1 -1
- package/src/assets/web-panel/assets/{GenericCardRenderer-CDkKrmu0.js → GenericCardRenderer-DaYvYIj9.js} +1 -1
- package/src/assets/web-panel/assets/{Git-BrwRnLOv.js → Git-BKZh0YE5.js} +2 -2
- package/src/assets/web-panel/assets/{Governance-C4PtCzod.js → Governance-vWbN873j.js} +1 -1
- package/src/assets/web-panel/assets/{Inference-CVPv5nwa.js → Inference-BN6RR-l8.js} +1 -1
- package/src/assets/web-panel/assets/{KnowledgeGraph-CmT9lvED.js → KnowledgeGraph-x49x9m7Q.js} +1 -1
- package/src/assets/web-panel/assets/{Logs-DaRgv7pL.js → Logs-Co2EPLsJ.js} +2 -2
- package/src/assets/web-panel/assets/{MarkdownRenderer-B3zZwlSz.js → MarkdownRenderer-D7wIB-c7.js} +1 -1
- package/src/assets/web-panel/assets/{Marketplace-Bm0GGEaL.js → Marketplace-DpPu6XQp.js} +1 -1
- package/src/assets/web-panel/assets/{McpTools-71L5h0en.js → McpTools-BR0ksiax.js} +3 -3
- package/src/assets/web-panel/assets/{Memory-BoWrfASi.js → Memory-BXznJ5-C.js} +2 -2
- package/src/assets/web-panel/assets/{MobileBridge-Dp4FcX_-.js → MobileBridge-BHSOpfv7.js} +1 -1
- package/src/assets/web-panel/assets/{MobileProjects-00ja0Z7O.js → MobileProjects-DdWmgIup.js} +1 -1
- package/src/assets/web-panel/assets/{Mtc-BZF6YNYp.js → Mtc-D9Rk_IGT.js} +4 -4
- package/src/assets/web-panel/assets/{MtcAudit-Bp_vcI6H.js → MtcAudit--i8q1lKc.js} +2 -2
- package/src/assets/web-panel/assets/{Multisig-CnCo56CS.js → Multisig-BHnNG7R9.js} +3 -3
- package/src/assets/web-panel/assets/{NLProgramming-BCSzNHpv.js → NLProgramming-Duo1ij2_.js} +1 -1
- package/src/assets/web-panel/assets/{Notes-kXoQk8B7.js → Notes-B44Le73p.js} +3 -3
- package/src/assets/web-panel/assets/{NotificationSettings-oN-1fkcy.js → NotificationSettings-C3oy_7Gf.js} +1 -1
- package/src/assets/web-panel/assets/{OrderTableRenderer-5ZVHrVZ9.js → OrderTableRenderer-Da_73SI5.js} +1 -1
- package/src/assets/web-panel/assets/{Organization-D4_T9Tdc.js → Organization-ChsSwKxT.js} +4 -4
- package/src/assets/web-panel/assets/{Overflow-d8vZwo9w.js → Overflow-DR5G_cCn.js} +1 -1
- package/src/assets/web-panel/assets/{P2P-0HGUdmTv.js → P2P-yfaobqow.js} +2 -2
- package/src/assets/web-panel/assets/PdhVaultBrowser-DgimH6Jp.js +7 -0
- package/src/assets/web-panel/assets/{Permissions-XHd6pVQB.js → Permissions-DhinFvtE.js} +4 -4
- package/src/assets/web-panel/assets/{PersonalDataHub-CB5bZU9T.js → PersonalDataHub-CfeNVic1.js} +3 -3
- package/src/assets/web-panel/assets/{Pipeline-Dy_qx4-0.js → Pipeline-CGKO26Nk.js} +1 -1
- package/src/assets/web-panel/assets/{Privacy-BgR0-uEu.js → Privacy-CxxfYEJh.js} +1 -1
- package/src/assets/web-panel/assets/{ProjectInit-DAcRi1Nx.js → ProjectInit-CZsaAab9.js} +2 -2
- package/src/assets/web-panel/assets/{ProjectSettings-Bd1Q0rK_.js → ProjectSettings-BUm_6clQ.js} +2 -2
- package/src/assets/web-panel/assets/{Projects-DVc9DcbM.js → Projects-Capr8bVq.js} +1 -1
- package/src/assets/web-panel/assets/{Providers-C3c4QfUT.js → Providers-D28VqPja.js} +1 -1
- package/src/assets/web-panel/assets/{QrScannerModal-Ba_GbitW.js → QrScannerModal-Cj200vUb.js} +1 -1
- package/src/assets/web-panel/assets/{QuickAsk-CSn5tIkO.js → QuickAsk-BGpnEiam.js} +1 -1
- package/src/assets/web-panel/assets/{Recommend-B3-8PLX0.js → Recommend-Ix79Tpni.js} +1 -1
- package/src/assets/web-panel/assets/{RemoteSession-Bd_7Zmi-.js → RemoteSession-BdGAFbIk.js} +2 -2
- package/src/assets/web-panel/assets/{Reputation-BU2A_wy5.js → Reputation-B1Lis0Wk.js} +1 -1
- package/src/assets/web-panel/assets/{Row-I0JFMjCz.js → Row-Ba_okwOW.js} +1 -1
- package/src/assets/web-panel/assets/{RssFeed-CNc4Dgfz.js → RssFeed-DDbEuI-m.js} +3 -3
- package/src/assets/web-panel/assets/{Search-uAA6ceLl.js → Search-D89wAkMy.js} +1 -1
- package/src/assets/web-panel/assets/{Security-U1SWj5nP.js → Security-CJKCKAU-.js} +3 -3
- package/src/assets/web-panel/assets/{Services-BFjZ5ASY.js → Services-mitEc1XV.js} +2 -2
- package/src/assets/web-panel/assets/{Skeleton-B8InBvQf.js → Skeleton-CnBjLDfX.js} +1 -1
- package/src/assets/web-panel/assets/{Skills-BDYwf3QV.js → Skills-DSzDYvH3.js} +1 -1
- package/src/assets/web-panel/assets/{Sla-Dcc6iq3q.js → Sla-CglJ_4p3.js} +1 -1
- package/src/assets/web-panel/assets/SpeechSettings-BicWJS7f.js +1 -0
- package/src/assets/web-panel/assets/{SyncSettings-BNHEYO95.js → SyncSettings-Cq7o6fmr.js} +2 -2
- package/src/assets/web-panel/assets/{Tasks-JbV6L1FX.js → Tasks-DOxFOBpU.js} +1 -1
- package/src/assets/web-panel/assets/{Templates-Yp0CUTBz.js → Templates-bY0wSbQM.js} +1 -1
- package/src/assets/web-panel/assets/{Tenant-CToNYxCo.js → Tenant-BAyyl0qX.js} +1 -1
- package/src/assets/web-panel/assets/{Terminal-D7W9UqSD.js → Terminal-BGBhSpqc.js} +2 -2
- package/src/assets/web-panel/assets/{TimelineRenderer-B7rqc1kE.js → TimelineRenderer-BvW5lXYz.js} +1 -1
- package/src/assets/web-panel/assets/{Tokens-QP7K4ppA.js → Tokens-Ua_LIx8-.js} +1 -1
- package/src/assets/web-panel/assets/{Trigger-CAWowQCR.js → Trigger-BGwb2KL1.js} +1 -1
- package/src/assets/web-panel/assets/{Trust-B-0XOP97.js → Trust-CD2IEHvj.js} +1 -1
- package/src/assets/web-panel/assets/{UkeySign-BtiZbiuj.js → UkeySign-D5LetK6P.js} +1 -1
- package/src/assets/web-panel/assets/{VideoEditing-Dee11JI0.js → VideoEditing-oP7ehFgR.js} +1 -1
- package/src/assets/web-panel/assets/{Wallet-y7qOmaWY.js → Wallet-BBtu4-xa.js} +4 -4
- package/src/assets/web-panel/assets/{WebAuthn-CjyRRWGK.js → WebAuthn-iSPRU4Ht.js} +3 -3
- package/src/assets/web-panel/assets/{WorkflowEditor-D7Kiz25Q.js → WorkflowEditor-DuEDhQmB.js} +1 -1
- package/src/assets/web-panel/assets/{chat-4F_yB-Gw.js → chat-DGDgqvvm.js} +1 -1
- package/src/assets/web-panel/assets/{colors-CrczPd-t.js → colors-DGQMWa1-.js} +1 -1
- package/src/assets/web-panel/assets/{compact-item-AenPL6fz.js → compact-item-COVznBL4.js} +1 -1
- package/src/assets/web-panel/assets/{createContext-BcwoqPgi.js → createContext-DIxVeHXI.js} +1 -1
- package/src/assets/web-panel/assets/devWarning-CjR9h-Z_.js +1 -0
- package/src/assets/web-panel/assets/{hasIn-YouHmap8.js → hasIn-DkxZO3E9.js} +1 -1
- package/src/assets/web-panel/assets/{index-fCuM1NPH.js → index-0ToBFsvW.js} +1 -1
- package/src/assets/web-panel/assets/{index-D0dXNgvi.js → index-2JZizEPc.js} +1 -1
- package/src/assets/web-panel/assets/{index-BHA5Fyjc.js → index-BAL2p7YC.js} +1 -1
- package/src/assets/web-panel/assets/{index-CedvtJA_.js → index-BAlrovUm.js} +1 -1
- package/src/assets/web-panel/assets/{index-5GHNjmnt.js → index-BBw2MLIe.js} +1 -1
- package/src/assets/web-panel/assets/{index-C5hpEYbx.js → index-BHH95jcm.js} +1 -1
- package/src/assets/web-panel/assets/{index-D8a1AEVK.js → index-BOTshZNx.js} +1 -1
- package/src/assets/web-panel/assets/{index-D7m5Z4We.js → index-BQm7ntcn.js} +1 -1
- package/src/assets/web-panel/assets/{index-D_4VsL-L.js → index-BUqwlzc8.js} +1 -1
- package/src/assets/web-panel/assets/{index-GP5u18DV.js → index-BY6MSbWT.js} +1 -1
- package/src/assets/web-panel/assets/{index-CHNKoexH.js → index-BY9Ossof.js} +1 -1
- package/src/assets/web-panel/assets/{index-DNHmbdGm.js → index-BgM-3a1w.js} +1 -1
- package/src/assets/web-panel/assets/{index-YX4dcbgh.js → index-Bv0_u0ze.js} +1 -1
- package/src/assets/web-panel/assets/{index-D5Rvq67L.js → index-C3XeNS82.js} +3 -3
- package/src/assets/web-panel/assets/{index-DAGfuEUu.js → index-C3bN6751.js} +1 -1
- package/src/assets/web-panel/assets/{index-CZT-LLGS.js → index-CNRRrP3-.js} +1 -1
- package/src/assets/web-panel/assets/{index-4r7B8sTx.js → index-CV0KnNqR.js} +1 -1
- package/src/assets/web-panel/assets/{index-B5Vmr0CM.js → index-CcNGQWum.js} +1 -1
- package/src/assets/web-panel/assets/{index-DE3qPp9l.js → index-Ci34vbh0.js} +1 -1
- package/src/assets/web-panel/assets/{index-CWgIKCVS.js → index-ClQVcrFt.js} +1 -1
- package/src/assets/web-panel/assets/{index-31dhJpt3.js → index-Cligb-Dl.js} +1 -1
- package/src/assets/web-panel/assets/{index-BsGhFk79.js → index-CokrhbY2.js} +1 -1
- package/src/assets/web-panel/assets/{index-B_I1INkw.js → index-CpZxDiVK.js} +1 -1
- package/src/assets/web-panel/assets/{index-BaguGDJP.js → index-CyMHF2Bi.js} +1 -1
- package/src/assets/web-panel/assets/{index-DPrzFdCg.js → index-DDwPBGdA.js} +1 -1
- package/src/assets/web-panel/assets/{index-gy1H_PJk.js → index-DU1ArKl5.js} +1 -1
- package/src/assets/web-panel/assets/{index-DAh5KwVL.js → index-DV0H83eS.js} +1 -1
- package/src/assets/web-panel/assets/index-D_nxBMX5.js +1 -0
- package/src/assets/web-panel/assets/{index-q_9aqSgF.js → index-DaWQSp5a.js} +1 -1
- package/src/assets/web-panel/assets/{index-B8EXHVmM.js → index-DmduvOYT.js} +1 -1
- package/src/assets/web-panel/assets/{index-DVrgnhfu.js → index-ECoDhyH3.js} +1 -1
- package/src/assets/web-panel/assets/{index-BwUqDg9_.js → index-ZcqTvPnt.js} +1 -1
- package/src/assets/web-panel/assets/{index--xwN0ZvG.js → index-b2_M6o20.js} +1 -1
- package/src/assets/web-panel/assets/{index-CZ9Ikuo6.js → index-b_0qTo8O.js} +1 -1
- package/src/assets/web-panel/assets/{index-BoVeUGhC.js → index-dfYkGovV.js} +1 -1
- package/src/assets/web-panel/assets/{index-COgeZETv.js → index-jo7DbU0w.js} +1 -1
- package/src/assets/web-panel/assets/{index-Dfw3WyZU.js → index-usmG13jq.js} +1 -1
- package/src/assets/web-panel/assets/{index-BzyDSW_e.js → index-vXrktF3e.js} +1 -1
- package/src/assets/web-panel/assets/index-z_cTUMX-.js +1 -0
- package/src/assets/web-panel/assets/{initDefaultProps-Ci6zc6ZA.js → initDefaultProps-CkSeiBwL.js} +1 -1
- package/src/assets/web-panel/assets/{motion-DS3kjIxw.js → motion-CSzhDP0s.js} +1 -1
- package/src/assets/web-panel/assets/{move-DCdWAKk4.js → move-mgCt4iC6.js} +1 -1
- package/src/assets/web-panel/assets/{mtc-parser-B0Wfce9U.js → mtc-parser-BEZBLcKt.js} +1 -1
- package/src/assets/web-panel/assets/{omit-Clx9TR6z.js → omit-BsHctMEr.js} +1 -1
- package/src/assets/web-panel/assets/{pickAttrs-CqSiqUvN.js → pickAttrs-1BHamnGW.js} +1 -1
- package/src/assets/web-panel/assets/{placementArrow-BWe_v-40.js → placementArrow--Vb4Bd7l.js} +1 -1
- package/src/assets/web-panel/assets/{responsiveObserve-BSJ68bw6.js → responsiveObserve-DD33SqCm.js} +1 -1
- package/src/assets/web-panel/assets/{slide-VRPlLxZB.js → slide-DfrLtxgK.js} +1 -1
- package/src/assets/web-panel/assets/{statusUtils-BFBVDPdB.js → statusUtils-D9Pe_gXW.js} +1 -1
- package/src/assets/web-panel/assets/{styleChecker-CehOXy1f.js → styleChecker-0NY5iMun.js} +1 -1
- package/src/assets/web-panel/assets/{useFlexGapSupport-BCOdfK18.js → useFlexGapSupport-DSsZstwg.js} +1 -1
- package/src/assets/web-panel/assets/{useFs-BMKrjfJQ.js → useFs-BU8HyH59.js} +1 -1
- package/src/assets/web-panel/assets/{usePersonalDataHub-BIjZ7IgI.js → usePersonalDataHub-D_xttink.js} +1 -1
- package/src/assets/web-panel/assets/{vnode-oD0MXddQ.js → vnode-39VhX2lM.js} +1 -1
- package/src/assets/web-panel/assets/{zoom-D7WqH2Ai.js → zoom-D5KQ8Pks.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 +202 -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/governance-coverage.js +1 -1
- package/src/lib/headless-manifest.js +1 -1
- package/src/lib/protocol-replay.js +1 -1
- package/src/lib/read-file-loop-guard.js +5 -8
- package/src/lib/remote-read-loop-guard.js +25 -18
- package/src/lib/skill-outcome-transcript-authority.js +45 -5
- package/src/lib/tool-recovery-result.js +11 -0
- package/src/runtime/agent-core.js +26 -3
- package/src/assets/web-panel/assets/ChatBubbleRenderer-6T0uoJuS.js +0 -1
- package/src/assets/web-panel/assets/PdhVaultBrowser-Cx8vp92z.js +0 -7
- package/src/assets/web-panel/assets/SpeechSettings-C3Ta-mC9.js +0 -1
- package/src/assets/web-panel/assets/devWarning-C4qWsAvh.js +0 -1
- package/src/assets/web-panel/assets/index-C-ltOW-O.js +0 -1
- package/src/assets/web-panel/assets/index-D7Ir0TiS.js +0 -1
|
@@ -0,0 +1,456 @@
|
|
|
1
|
+
import { createHash, randomBytes } from "node:crypto";
|
|
2
|
+
import { isProxy } from "node:util/types";
|
|
3
|
+
|
|
4
|
+
import {
|
|
5
|
+
buildEvolutionEvalAttestationDigest,
|
|
6
|
+
computeEvolutionEvalIsolatedTargetDigest,
|
|
7
|
+
computeEvolutionEvalSignedEvidenceDigest,
|
|
8
|
+
computeEvolutionEvalSupervisedResultDigest,
|
|
9
|
+
computeEvolutionEvalTargetAuthorityDigest,
|
|
10
|
+
EVOLUTION_EVAL_ATTESTATION_PURPOSES,
|
|
11
|
+
EVOLUTION_EVAL_ISOLATED_TARGET_SCHEMA,
|
|
12
|
+
EVOLUTION_EVAL_SUPERVISION_SCHEMA,
|
|
13
|
+
} from "./evolution-eval-gate.js";
|
|
14
|
+
import { isEvolutionEvalProcessSupervisor } from "./evolution-eval-process-supervisor.js";
|
|
15
|
+
|
|
16
|
+
export const PM_EXPLORATION_MERGER_ISOLATION_SCHEMA =
|
|
17
|
+
"chainlesschain.pm-exploration-merger-isolation/v1";
|
|
18
|
+
export const PM_EXPLORATION_EVALUATOR_ISOLATION_SCHEMA =
|
|
19
|
+
"chainlesschain.pm-exploration-evaluator-isolation/v1";
|
|
20
|
+
export const PM_EXPLORATION_CURRICULUM_ISOLATION_SCHEMA =
|
|
21
|
+
"chainlesschain.pm-exploration-curriculum-isolation/v1";
|
|
22
|
+
|
|
23
|
+
const DIGEST = /^sha256:[a-f0-9]{64}$/u;
|
|
24
|
+
const ID = /^[a-z][a-z0-9]*(?:[._:-][a-z0-9]+)*$/u;
|
|
25
|
+
const EXECUTORS = new WeakMap();
|
|
26
|
+
const CONFIG = Object.freeze({
|
|
27
|
+
merge: Object.freeze({
|
|
28
|
+
operation: "pm-exploration-merge",
|
|
29
|
+
schema: PM_EXPLORATION_MERGER_ISOLATION_SCHEMA,
|
|
30
|
+
}),
|
|
31
|
+
evaluate: Object.freeze({
|
|
32
|
+
operation: "pm-exploration-evaluate",
|
|
33
|
+
schema: PM_EXPLORATION_EVALUATOR_ISOLATION_SCHEMA,
|
|
34
|
+
}),
|
|
35
|
+
curriculum: Object.freeze({
|
|
36
|
+
operation: "pm-exploration-select-task",
|
|
37
|
+
schema: PM_EXPLORATION_CURRICULUM_ISOLATION_SCHEMA,
|
|
38
|
+
}),
|
|
39
|
+
});
|
|
40
|
+
const SUPERVISION_RECEIPT_KEYS = Object.freeze([
|
|
41
|
+
"schema",
|
|
42
|
+
"requestDigest",
|
|
43
|
+
"invocationNonce",
|
|
44
|
+
"invocationId",
|
|
45
|
+
"capabilityDigest",
|
|
46
|
+
"operation",
|
|
47
|
+
"requestedAt",
|
|
48
|
+
"deadlineAt",
|
|
49
|
+
"payloadDigest",
|
|
50
|
+
"targetDigest",
|
|
51
|
+
"targetHandlerId",
|
|
52
|
+
"targetRevision",
|
|
53
|
+
"targetAuthorityDigest",
|
|
54
|
+
"completedAt",
|
|
55
|
+
"status",
|
|
56
|
+
"isolation",
|
|
57
|
+
"hardDeadlineEnforced",
|
|
58
|
+
"lateSideEffectsPrevented",
|
|
59
|
+
"invocationCount",
|
|
60
|
+
"capabilityRevoked",
|
|
61
|
+
"resultDigest",
|
|
62
|
+
"targetInvocationDigest",
|
|
63
|
+
"revocationDigest",
|
|
64
|
+
"revocationMode",
|
|
65
|
+
"wasActive",
|
|
66
|
+
"activeInvocationTerminated",
|
|
67
|
+
"terminatedAt",
|
|
68
|
+
"supervisorRevision",
|
|
69
|
+
"attestation",
|
|
70
|
+
]);
|
|
71
|
+
|
|
72
|
+
function canonical(value) {
|
|
73
|
+
if (value === null || typeof value !== "object") return JSON.stringify(value);
|
|
74
|
+
if (Array.isArray(value)) return `[${value.map(canonical).join(",")}]`;
|
|
75
|
+
return `{${Object.keys(value)
|
|
76
|
+
.sort()
|
|
77
|
+
.map((key) => `${JSON.stringify(key)}:${canonical(value[key])}`)
|
|
78
|
+
.join(",")}}`;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
function hash(domain, value) {
|
|
82
|
+
return `sha256:${createHash("sha256")
|
|
83
|
+
.update(domain)
|
|
84
|
+
.update("\0")
|
|
85
|
+
.update(canonical(value))
|
|
86
|
+
.digest("hex")}`;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
function exact(value, keys, label) {
|
|
90
|
+
if (
|
|
91
|
+
!value ||
|
|
92
|
+
typeof value !== "object" ||
|
|
93
|
+
Array.isArray(value) ||
|
|
94
|
+
isProxy(value) ||
|
|
95
|
+
Object.getPrototypeOf(value) !== Object.prototype
|
|
96
|
+
) {
|
|
97
|
+
throw new TypeError(`${label} must be a plain object`);
|
|
98
|
+
}
|
|
99
|
+
const actual = Reflect.ownKeys(value);
|
|
100
|
+
if (
|
|
101
|
+
actual.length !== keys.length ||
|
|
102
|
+
actual.some((key) => {
|
|
103
|
+
const field = Object.getOwnPropertyDescriptor(value, key);
|
|
104
|
+
return (
|
|
105
|
+
typeof key !== "string" ||
|
|
106
|
+
!keys.includes(key) ||
|
|
107
|
+
!field ||
|
|
108
|
+
!field.enumerable ||
|
|
109
|
+
!("value" in field)
|
|
110
|
+
);
|
|
111
|
+
})
|
|
112
|
+
) {
|
|
113
|
+
throw new TypeError(`${label} has unexpected or accessor fields`);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
function identifier(value, label) {
|
|
118
|
+
if (typeof value !== "string" || value.length > 256 || !ID.test(value))
|
|
119
|
+
throw new TypeError(`${label} is invalid`);
|
|
120
|
+
return value;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
function digest(value, label) {
|
|
124
|
+
if (typeof value !== "string" || !DIGEST.test(value))
|
|
125
|
+
throw new TypeError(`${label} must be a sha256 digest`);
|
|
126
|
+
return value;
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
function timestamp(now) {
|
|
130
|
+
const milliseconds = Number(now());
|
|
131
|
+
if (!Number.isSafeInteger(milliseconds) || milliseconds < 0)
|
|
132
|
+
throw new TypeError("process reviewer clock is invalid");
|
|
133
|
+
return Object.freeze({
|
|
134
|
+
milliseconds,
|
|
135
|
+
iso: new Date(milliseconds).toISOString(),
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
function targetBinding(value, config) {
|
|
140
|
+
const targetDigest = computeEvolutionEvalIsolatedTargetDigest(value);
|
|
141
|
+
const targetAuthorityDigest =
|
|
142
|
+
computeEvolutionEvalTargetAuthorityDigest(value);
|
|
143
|
+
if (
|
|
144
|
+
value.schema !== EVOLUTION_EVAL_ISOLATED_TARGET_SCHEMA ||
|
|
145
|
+
value.isolation !== "process" ||
|
|
146
|
+
value.operation !== config.operation
|
|
147
|
+
) {
|
|
148
|
+
throw new TypeError(
|
|
149
|
+
`PM exploration process reviewer requires a ${config.operation} target`,
|
|
150
|
+
);
|
|
151
|
+
}
|
|
152
|
+
return Object.freeze({
|
|
153
|
+
target: Object.freeze(structuredClone(value)),
|
|
154
|
+
targetDigest,
|
|
155
|
+
targetAuthorityDigest,
|
|
156
|
+
});
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
function supervisionReceiptDigest(value, kind) {
|
|
160
|
+
exact(value, SUPERVISION_RECEIPT_KEYS, `PM ${kind} supervision receipt`);
|
|
161
|
+
return computeEvolutionEvalSignedEvidenceDigest(
|
|
162
|
+
value,
|
|
163
|
+
EVOLUTION_EVAL_ATTESTATION_PURPOSES.supervisor,
|
|
164
|
+
);
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
function validateReceipt({ receipt, request, binding, value }) {
|
|
168
|
+
const evidenceDigest = supervisionReceiptDigest(receipt, binding.kind);
|
|
169
|
+
const { attestation, ...core } = receipt;
|
|
170
|
+
const completedAt = Date.parse(receipt.completedAt);
|
|
171
|
+
if (
|
|
172
|
+
receipt.schema !== EVOLUTION_EVAL_SUPERVISION_SCHEMA ||
|
|
173
|
+
receipt.requestDigest !== request.requestDigest ||
|
|
174
|
+
receipt.invocationNonce !== request.invocationNonce ||
|
|
175
|
+
receipt.invocationId !== request.invocationId ||
|
|
176
|
+
receipt.capabilityDigest !== request.capabilityDigest ||
|
|
177
|
+
receipt.operation !== binding.target.operation ||
|
|
178
|
+
receipt.requestedAt !== request.requestedAt ||
|
|
179
|
+
receipt.deadlineAt !== request.deadlineAt ||
|
|
180
|
+
receipt.payloadDigest !== request.payloadDigest ||
|
|
181
|
+
receipt.targetDigest !== binding.targetDigest ||
|
|
182
|
+
receipt.targetHandlerId !== binding.target.handlerId ||
|
|
183
|
+
receipt.targetRevision !== binding.target.handlerRevision ||
|
|
184
|
+
receipt.targetAuthorityDigest !== binding.targetAuthorityDigest ||
|
|
185
|
+
!Number.isFinite(completedAt) ||
|
|
186
|
+
completedAt < Date.parse(request.requestedAt) ||
|
|
187
|
+
completedAt > Date.parse(request.deadlineAt) ||
|
|
188
|
+
receipt.status !== "completed" ||
|
|
189
|
+
receipt.isolation !== "process" ||
|
|
190
|
+
receipt.hardDeadlineEnforced !== true ||
|
|
191
|
+
receipt.lateSideEffectsPrevented !== true ||
|
|
192
|
+
receipt.invocationCount !== 1 ||
|
|
193
|
+
receipt.capabilityRevoked !== true ||
|
|
194
|
+
receipt.resultDigest !==
|
|
195
|
+
computeEvolutionEvalSupervisedResultDigest(value) ||
|
|
196
|
+
!DIGEST.test(receipt.targetInvocationDigest ?? "") ||
|
|
197
|
+
!DIGEST.test(receipt.revocationDigest ?? "") ||
|
|
198
|
+
receipt.revocationMode !== "completed-release" ||
|
|
199
|
+
receipt.wasActive !== false ||
|
|
200
|
+
receipt.activeInvocationTerminated !== false ||
|
|
201
|
+
receipt.terminatedAt !== null ||
|
|
202
|
+
receipt.supervisorRevision !==
|
|
203
|
+
binding.supervisor.authorityDescriptor.handlerRevision
|
|
204
|
+
) {
|
|
205
|
+
throw new Error(
|
|
206
|
+
`PM ${binding.kind} process supervision receipt is invalid`,
|
|
207
|
+
);
|
|
208
|
+
}
|
|
209
|
+
const verified = binding.supervisor.verifyEnforcement({
|
|
210
|
+
purpose: EVOLUTION_EVAL_ATTESTATION_PURPOSES.supervisor,
|
|
211
|
+
payloadDigest: buildEvolutionEvalAttestationDigest(
|
|
212
|
+
core,
|
|
213
|
+
EVOLUTION_EVAL_ATTESTATION_PURPOSES.supervisor,
|
|
214
|
+
),
|
|
215
|
+
attestation,
|
|
216
|
+
});
|
|
217
|
+
if (verified !== true || (verified && typeof verified.then === "function"))
|
|
218
|
+
throw new Error(`PM ${binding.kind} supervision attestation was rejected`);
|
|
219
|
+
return evidenceDigest;
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
function capability(binding, request, invocation) {
|
|
223
|
+
let revocation = null;
|
|
224
|
+
return Object.freeze({
|
|
225
|
+
async invoke() {
|
|
226
|
+
const result = await binding.supervisor.invokeTarget(invocation);
|
|
227
|
+
return Object.freeze({
|
|
228
|
+
value: result.value,
|
|
229
|
+
resultDigest: computeEvolutionEvalSupervisedResultDigest(result.value),
|
|
230
|
+
targetInvocationDigest: computeEvolutionEvalSignedEvidenceDigest(
|
|
231
|
+
result.evidence,
|
|
232
|
+
EVOLUTION_EVAL_ATTESTATION_PURPOSES.targetInvocation,
|
|
233
|
+
),
|
|
234
|
+
});
|
|
235
|
+
},
|
|
236
|
+
async revoke({ mode }) {
|
|
237
|
+
if (revocation !== null) return revocation;
|
|
238
|
+
revocation = binding.supervisor
|
|
239
|
+
.revokeTarget({
|
|
240
|
+
requestDigest: request.requestDigest,
|
|
241
|
+
capabilityDigest: request.capabilityDigest,
|
|
242
|
+
targetDigest: binding.targetDigest,
|
|
243
|
+
invocationId: request.invocationId,
|
|
244
|
+
mode,
|
|
245
|
+
requestedAt:
|
|
246
|
+
mode === "hard-terminate"
|
|
247
|
+
? request.deadlineAt
|
|
248
|
+
: new Date().toISOString(),
|
|
249
|
+
deadlineAt: request.deadlineAt,
|
|
250
|
+
})
|
|
251
|
+
.then((receipt) =>
|
|
252
|
+
Object.freeze({
|
|
253
|
+
revocationDigest: computeEvolutionEvalSignedEvidenceDigest(
|
|
254
|
+
receipt,
|
|
255
|
+
EVOLUTION_EVAL_ATTESTATION_PURPOSES.targetRevocation,
|
|
256
|
+
),
|
|
257
|
+
revocationMode: mode,
|
|
258
|
+
wasActive: receipt.wasActive,
|
|
259
|
+
activeInvocationTerminated: receipt.activeInvocationTerminated,
|
|
260
|
+
terminatedAt: receipt.terminatedAt,
|
|
261
|
+
}),
|
|
262
|
+
);
|
|
263
|
+
return revocation;
|
|
264
|
+
},
|
|
265
|
+
});
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
export function createPmExplorationProcessReviewerExecutor(options = {}) {
|
|
269
|
+
if (
|
|
270
|
+
!options ||
|
|
271
|
+
typeof options !== "object" ||
|
|
272
|
+
Array.isArray(options) ||
|
|
273
|
+
isProxy(options) ||
|
|
274
|
+
Object.getPrototypeOf(options) !== Object.prototype
|
|
275
|
+
) {
|
|
276
|
+
throw new TypeError(
|
|
277
|
+
"PM exploration process reviewer options must be a plain object",
|
|
278
|
+
);
|
|
279
|
+
}
|
|
280
|
+
const hasNow = Reflect.ownKeys(options).includes("now");
|
|
281
|
+
exact(
|
|
282
|
+
options,
|
|
283
|
+
hasNow
|
|
284
|
+
? ["kind", "supervisor", "target", "maxWallClockMs", "now"]
|
|
285
|
+
: ["kind", "supervisor", "target", "maxWallClockMs"],
|
|
286
|
+
"PM exploration process reviewer options",
|
|
287
|
+
);
|
|
288
|
+
const config = CONFIG[options.kind];
|
|
289
|
+
if (!config)
|
|
290
|
+
throw new TypeError(
|
|
291
|
+
"process reviewer kind must be merge, evaluate, or curriculum",
|
|
292
|
+
);
|
|
293
|
+
if (!isEvolutionEvalProcessSupervisor(options.supervisor))
|
|
294
|
+
throw new TypeError("a branded evolution process supervisor is required");
|
|
295
|
+
if (
|
|
296
|
+
!Number.isSafeInteger(options.maxWallClockMs) ||
|
|
297
|
+
options.maxWallClockMs < 1 ||
|
|
298
|
+
options.maxWallClockMs > 600_000
|
|
299
|
+
) {
|
|
300
|
+
throw new TypeError("process reviewer maxWallClockMs is out of bounds");
|
|
301
|
+
}
|
|
302
|
+
const now = hasNow ? options.now : Date.now;
|
|
303
|
+
if (typeof now !== "function" || isProxy(now))
|
|
304
|
+
throw new TypeError("process reviewer clock must be a direct function");
|
|
305
|
+
const supervisorDescriptor = options.supervisor.authorityDescriptor;
|
|
306
|
+
if (!supervisorDescriptor || typeof supervisorDescriptor !== "object")
|
|
307
|
+
throw new TypeError("process supervisor authority descriptor is required");
|
|
308
|
+
const captured = targetBinding(options.target, config);
|
|
309
|
+
const descriptor = Object.freeze({
|
|
310
|
+
schema: config.schema,
|
|
311
|
+
mode: "process",
|
|
312
|
+
targetDigest: captured.targetDigest,
|
|
313
|
+
targetAuthorityDigest: captured.targetAuthorityDigest,
|
|
314
|
+
handlerId: identifier(
|
|
315
|
+
captured.target.handlerId,
|
|
316
|
+
`process ${options.kind} handlerId`,
|
|
317
|
+
),
|
|
318
|
+
handlerRevision: identifier(
|
|
319
|
+
captured.target.handlerRevision,
|
|
320
|
+
`process ${options.kind} handlerRevision`,
|
|
321
|
+
),
|
|
322
|
+
operation: captured.target.operation,
|
|
323
|
+
handlerArtifactDigest: digest(
|
|
324
|
+
captured.target.handlerArtifactDigest,
|
|
325
|
+
`process ${options.kind} handlerArtifactDigest`,
|
|
326
|
+
),
|
|
327
|
+
supervisorAuthorityDigest: hash(
|
|
328
|
+
`chainlesschain.pm-exploration-${options.kind}-supervisor-authority/v1`,
|
|
329
|
+
{
|
|
330
|
+
authorityDescriptor: supervisorDescriptor,
|
|
331
|
+
childEvidenceStoreDescriptor:
|
|
332
|
+
options.supervisor.childEvidenceStoreDescriptor ?? null,
|
|
333
|
+
},
|
|
334
|
+
),
|
|
335
|
+
maxWallClockMs: options.maxWallClockMs,
|
|
336
|
+
});
|
|
337
|
+
const executor = Object.freeze({});
|
|
338
|
+
EXECUTORS.set(executor, {
|
|
339
|
+
...captured,
|
|
340
|
+
descriptor,
|
|
341
|
+
kind: options.kind,
|
|
342
|
+
maxWallClockMs: options.maxWallClockMs,
|
|
343
|
+
now,
|
|
344
|
+
supervisor: options.supervisor,
|
|
345
|
+
});
|
|
346
|
+
return executor;
|
|
347
|
+
}
|
|
348
|
+
|
|
349
|
+
export function inspectPmExplorationProcessReviewerExecutor(value) {
|
|
350
|
+
const binding = EXECUTORS.get(value);
|
|
351
|
+
if (!binding)
|
|
352
|
+
throw new TypeError(
|
|
353
|
+
"a branded PM exploration process reviewer is required",
|
|
354
|
+
);
|
|
355
|
+
return binding.descriptor;
|
|
356
|
+
}
|
|
357
|
+
|
|
358
|
+
export async function invokePmExplorationProcessReviewer(
|
|
359
|
+
executorValue,
|
|
360
|
+
request,
|
|
361
|
+
runtime,
|
|
362
|
+
) {
|
|
363
|
+
const binding = EXECUTORS.get(executorValue);
|
|
364
|
+
if (!binding)
|
|
365
|
+
throw new TypeError(
|
|
366
|
+
"a branded PM exploration process reviewer is required",
|
|
367
|
+
);
|
|
368
|
+
if (!(runtime?.signal instanceof AbortSignal))
|
|
369
|
+
throw new TypeError("process reviewer requires a budget abort signal");
|
|
370
|
+
if (runtime.signal.aborted)
|
|
371
|
+
throw runtime.signal.reason ?? new Error("process reviewer was aborted");
|
|
372
|
+
const current = timestamp(binding.now);
|
|
373
|
+
const deadlineAt = new Date(
|
|
374
|
+
current.milliseconds + binding.maxWallClockMs,
|
|
375
|
+
).toISOString();
|
|
376
|
+
const payloadDigest = hash(
|
|
377
|
+
"chainlesschain.evolution-eval-supervision-payload/v1",
|
|
378
|
+
request,
|
|
379
|
+
);
|
|
380
|
+
const invocationNonce = `supervision-${randomBytes(16).toString("hex")}`;
|
|
381
|
+
const invocationId = `target-invocation-${randomBytes(16).toString("hex")}`;
|
|
382
|
+
const capabilityNonce = `invocation-capability-${randomBytes(16).toString("hex")}`;
|
|
383
|
+
const capabilityDigest = hash(
|
|
384
|
+
"chainlesschain.evolution-eval-invocation-capability/v1",
|
|
385
|
+
{
|
|
386
|
+
capabilityNonce,
|
|
387
|
+
invocationNonce,
|
|
388
|
+
invocationId,
|
|
389
|
+
payloadDigest,
|
|
390
|
+
targetDigest: binding.targetDigest,
|
|
391
|
+
deadlineAt,
|
|
392
|
+
},
|
|
393
|
+
);
|
|
394
|
+
const requestCore = Object.freeze({
|
|
395
|
+
schema: "chainlesschain.evolution-eval-supervision-request/v3",
|
|
396
|
+
operation: binding.target.operation,
|
|
397
|
+
invocationNonce,
|
|
398
|
+
invocationId,
|
|
399
|
+
capabilityDigest,
|
|
400
|
+
requestedAt: current.iso,
|
|
401
|
+
deadlineAt,
|
|
402
|
+
payloadDigest,
|
|
403
|
+
targetDigest: binding.targetDigest,
|
|
404
|
+
targetHandlerId: binding.target.handlerId,
|
|
405
|
+
targetRevision: binding.target.handlerRevision,
|
|
406
|
+
targetAuthorityDigest: binding.targetAuthorityDigest,
|
|
407
|
+
});
|
|
408
|
+
const supervisionRequest = Object.freeze({
|
|
409
|
+
...requestCore,
|
|
410
|
+
requestDigest: hash(
|
|
411
|
+
"chainlesschain.evolution-eval-supervision/v3/request",
|
|
412
|
+
requestCore,
|
|
413
|
+
),
|
|
414
|
+
});
|
|
415
|
+
const invocation = Object.freeze({
|
|
416
|
+
schema: "chainlesschain.evolution-eval-target-invocation-request/v2",
|
|
417
|
+
requestDigest: supervisionRequest.requestDigest,
|
|
418
|
+
capabilityDigest,
|
|
419
|
+
invocationId,
|
|
420
|
+
deadlineAt,
|
|
421
|
+
payload: request,
|
|
422
|
+
payloadDigest,
|
|
423
|
+
target: binding.target,
|
|
424
|
+
targetDigest: binding.targetDigest,
|
|
425
|
+
});
|
|
426
|
+
const invocationCapability = capability(
|
|
427
|
+
binding,
|
|
428
|
+
supervisionRequest,
|
|
429
|
+
invocation,
|
|
430
|
+
);
|
|
431
|
+
let abortRevocation = null;
|
|
432
|
+
const abort = () => {
|
|
433
|
+
abortRevocation ??= invocationCapability.revoke({ mode: "hard-terminate" });
|
|
434
|
+
};
|
|
435
|
+
runtime.signal.addEventListener("abort", abort, { once: true });
|
|
436
|
+
try {
|
|
437
|
+
const response = await binding.supervisor.run(
|
|
438
|
+
supervisionRequest,
|
|
439
|
+
invocationCapability,
|
|
440
|
+
);
|
|
441
|
+
if (runtime.signal.aborted)
|
|
442
|
+
throw runtime.signal.reason ?? new Error("process reviewer was aborted");
|
|
443
|
+
return Object.freeze({
|
|
444
|
+
value: response.value,
|
|
445
|
+
supervisionReceiptDigest: validateReceipt({
|
|
446
|
+
receipt: response.receipt,
|
|
447
|
+
request: supervisionRequest,
|
|
448
|
+
binding,
|
|
449
|
+
value: response.value,
|
|
450
|
+
}),
|
|
451
|
+
});
|
|
452
|
+
} finally {
|
|
453
|
+
runtime.signal.removeEventListener("abort", abort);
|
|
454
|
+
if (abortRevocation !== null) await abortRevocation.catch(() => {});
|
|
455
|
+
}
|
|
456
|
+
}
|