chainlesschain 0.166.65 → 0.166.68
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +20 -12
- package/package.json +4 -4
- package/src/assets/web-panel/assets/{AIOps-Byz17CTN.js → AIOps-CXkSNOGY.js} +1 -1
- package/src/assets/web-panel/assets/{ActionButton-C5LiW2-J.js → ActionButton-ysMR6gTs.js} +1 -1
- package/src/assets/web-panel/assets/{Analytics-D1INcvZF.js → Analytics-WGZ0sWuw.js} +3 -3
- package/src/assets/web-panel/assets/{AppLayout-DZzHO1VV.js → AppLayout-Cs2iRlQG.js} +4 -4
- package/src/assets/web-panel/assets/{Artifacts-WfYQL6Ia.js → Artifacts-5IdfxWz0.js} +1 -1
- package/src/assets/web-panel/assets/{Audit-DohBoGWO.js → Audit-U9V434QX.js} +1 -1
- package/src/assets/web-panel/assets/{BackgroundAgents-Chtk-Hde.js → BackgroundAgents-BvFwxPlC.js} +1 -1
- package/src/assets/web-panel/assets/{Backup-B813PuMz.js → Backup-C9yTr9hO.js} +1 -1
- package/src/assets/web-panel/assets/{BaseInput-DaDdWWgK.js → BaseInput-BdsSwUgE.js} +1 -1
- package/src/assets/web-panel/assets/{Chat-D4pJ6oZ7.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-Clo9TvO6.js → Checkbox-v6M5m7dK.js} +1 -1
- package/src/assets/web-panel/assets/{Codegen-uejLg8Ih.js → Codegen-CtouWSIz.js} +1 -1
- package/src/assets/web-panel/assets/{Col-B7nbx-iJ.js → Col-CqQJ4ORW.js} +1 -1
- package/src/assets/web-panel/assets/{Community-FEyjPK1j.js → Community-BO__QCOy.js} +1 -1
- package/src/assets/web-panel/assets/{Compact-B6Fk0Kn6.js → Compact-D0Kq4xlH.js} +1 -1
- package/src/assets/web-panel/assets/{Compliance-BQG8goUl.js → Compliance-BSLKKBjA.js} +1 -1
- package/src/assets/web-panel/assets/{Cowork-CbBeEfHp.js → Cowork-VsujXW5o.js} +3 -3
- package/src/assets/web-panel/assets/{Cron-DPzlFcEZ.js → Cron-j8DbLGi5.js} +2 -2
- package/src/assets/web-panel/assets/{Crosschain-B8pWJrbg.js → Crosschain-DWpYH1yN.js} +1 -1
- package/src/assets/web-panel/assets/{DID-gGQHUlFN.js → DID-mLaRxLQh.js} +2 -2
- package/src/assets/web-panel/assets/{Dashboard-C2TMFHrn.js → Dashboard-Cff033Jr.js} +2 -2
- package/src/assets/web-panel/assets/{Dropdown-BVPxGbll.js → Dropdown-B1Upt6fP.js} +1 -1
- package/src/assets/web-panel/assets/{EmailListRenderer-CNPxs0hd.js → EmailListRenderer-CPtb8joV.js} +1 -1
- package/src/assets/web-panel/assets/{EvolutionSettings-_XTiB7q1.js → EvolutionSettings-CVh4Uv4g.js} +1 -1
- package/src/assets/web-panel/assets/{FamilyGuardDashboard-UyE3VWtI.js → FamilyGuardDashboard-CrD1PhbF.js} +1 -1
- package/src/assets/web-panel/assets/{Federation-CLt6FHK-.js → Federation-ftxrvqW5.js} +1 -1
- package/src/assets/web-panel/assets/{FormItemContext-CdNQPRPw.js → FormItemContext-9O80slC1.js} +1 -1
- package/src/assets/web-panel/assets/{GenericCardRenderer-BJ0AMhrh.js → GenericCardRenderer-DaYvYIj9.js} +1 -1
- package/src/assets/web-panel/assets/{Git-CQnvMfOM.js → Git-BKZh0YE5.js} +2 -2
- package/src/assets/web-panel/assets/{Governance-deYsHC-o.js → Governance-vWbN873j.js} +1 -1
- package/src/assets/web-panel/assets/{Inference-qaSck43z.js → Inference-BN6RR-l8.js} +1 -1
- package/src/assets/web-panel/assets/{KnowledgeGraph-De0aJ3Ls.js → KnowledgeGraph-x49x9m7Q.js} +1 -1
- package/src/assets/web-panel/assets/Logs-Co2EPLsJ.js +2 -0
- package/src/assets/web-panel/assets/MarkdownRenderer-D7wIB-c7.js +1 -0
- package/src/assets/web-panel/assets/{Marketplace-Byz3xCBN.js → Marketplace-DpPu6XQp.js} +1 -1
- package/src/assets/web-panel/assets/{McpTools-DOZUUW6z.js → McpTools-BR0ksiax.js} +3 -3
- package/src/assets/web-panel/assets/{Memory-C33wC2hA.js → Memory-BXznJ5-C.js} +2 -2
- package/src/assets/web-panel/assets/{MobileBridge-zZe-T_6M.js → MobileBridge-BHSOpfv7.js} +1 -1
- package/src/assets/web-panel/assets/{MobileProjects-CRnUIume.js → MobileProjects-DdWmgIup.js} +1 -1
- package/src/assets/web-panel/assets/{Mtc-C1xlRVAN.js → Mtc-D9Rk_IGT.js} +5 -5
- package/src/assets/web-panel/assets/{MtcAudit-D0U07bIi.js → MtcAudit--i8q1lKc.js} +2 -2
- package/src/assets/web-panel/assets/{Multisig-DF8uvV3h.js → Multisig-BHnNG7R9.js} +3 -3
- package/src/assets/web-panel/assets/{NLProgramming-bBPGAFlt.js → NLProgramming-Duo1ij2_.js} +1 -1
- package/src/assets/web-panel/assets/{Notes-BHAaOsgg.js → Notes-B44Le73p.js} +3 -3
- package/src/assets/web-panel/assets/{NotificationSettings-Cl0fG_rA.js → NotificationSettings-C3oy_7Gf.js} +1 -1
- package/src/assets/web-panel/assets/{OrderTableRenderer-BEPAs8Zv.js → OrderTableRenderer-Da_73SI5.js} +1 -1
- package/src/assets/web-panel/assets/{Organization-BAxSwgk5.js → Organization-ChsSwKxT.js} +4 -4
- package/src/assets/web-panel/assets/{Overflow-D68KubAu.js → Overflow-DR5G_cCn.js} +1 -1
- package/src/assets/web-panel/assets/{P2P-bhdT17zk.js → P2P-yfaobqow.js} +2 -2
- package/src/assets/web-panel/assets/PdhVaultBrowser-DgimH6Jp.js +7 -0
- package/src/assets/web-panel/assets/{Permissions-Bq8fvkak.js → Permissions-DhinFvtE.js} +4 -4
- package/src/assets/web-panel/assets/{PersonalDataHub-BYd2JEic.js → PersonalDataHub-CfeNVic1.js} +5 -5
- package/src/assets/web-panel/assets/{Pipeline-Csg_ja69.js → Pipeline-CGKO26Nk.js} +1 -1
- package/src/assets/web-panel/assets/{Privacy-lwxwLj4M.js → Privacy-CxxfYEJh.js} +1 -1
- package/src/assets/web-panel/assets/{ProjectInit-BdBZkH8z.js → ProjectInit-CZsaAab9.js} +2 -2
- package/src/assets/web-panel/assets/{ProjectSettings-ClWgFy-K.js → ProjectSettings-BUm_6clQ.js} +2 -2
- package/src/assets/web-panel/assets/{Projects-Bu-qj8N1.js → Projects-Capr8bVq.js} +1 -1
- package/src/assets/web-panel/assets/{Providers-DEjxrxw3.js → Providers-D28VqPja.js} +1 -1
- package/src/assets/web-panel/assets/{QrScannerModal-eccy-8Vi.js → QrScannerModal-Cj200vUb.js} +1 -1
- package/src/assets/web-panel/assets/{QuickAsk-Vx3uDvFg.js → QuickAsk-BGpnEiam.js} +1 -1
- package/src/assets/web-panel/assets/{Recommend-CfUivNps.js → Recommend-Ix79Tpni.js} +1 -1
- package/src/assets/web-panel/assets/{RemoteSession-BU4gk7GI.js → RemoteSession-BdGAFbIk.js} +3 -3
- package/src/assets/web-panel/assets/{Reputation-CbPzdZ0C.js → Reputation-B1Lis0Wk.js} +1 -1
- package/src/assets/web-panel/assets/{Row-CYLrgfKA.js → Row-Ba_okwOW.js} +1 -1
- package/src/assets/web-panel/assets/{RssFeed-DbY1oyuv.js → RssFeed-DDbEuI-m.js} +3 -3
- package/src/assets/web-panel/assets/{Search-QeW41K5r.js → Search-D89wAkMy.js} +1 -1
- package/src/assets/web-panel/assets/{Security-CJxf1kLZ.js → Security-CJKCKAU-.js} +3 -3
- package/src/assets/web-panel/assets/{Services-CFO9ySZc.js → Services-mitEc1XV.js} +2 -2
- package/src/assets/web-panel/assets/{Skeleton-CQFjeQN0.js → Skeleton-CnBjLDfX.js} +1 -1
- package/src/assets/web-panel/assets/{Skills-CLLB4INW.js → Skills-DSzDYvH3.js} +1 -1
- package/src/assets/web-panel/assets/{Sla-DxeLIJk0.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-C6NOkcQK.js → SyncSettings-Cq7o6fmr.js} +2 -2
- package/src/assets/web-panel/assets/{Tasks-LmVPWDfQ.js → Tasks-DOxFOBpU.js} +1 -1
- package/src/assets/web-panel/assets/{Templates-BdEfUoVB.js → Templates-bY0wSbQM.js} +1 -1
- package/src/assets/web-panel/assets/{Tenant-IUlESacN.js → Tenant-BAyyl0qX.js} +1 -1
- package/src/assets/web-panel/assets/{Terminal-B9pDe7sn.js → Terminal-BGBhSpqc.js} +2 -2
- package/src/assets/web-panel/assets/{TimelineRenderer-ZCwB-Pki.js → TimelineRenderer-BvW5lXYz.js} +1 -1
- package/src/assets/web-panel/assets/{Tokens-4qk16LX1.js → Tokens-Ua_LIx8-.js} +1 -1
- package/src/assets/web-panel/assets/{Trigger-jXNyargn.js → Trigger-BGwb2KL1.js} +1 -1
- package/src/assets/web-panel/assets/{Trust-D13PydtT.js → Trust-CD2IEHvj.js} +1 -1
- package/src/assets/web-panel/assets/{UkeySign-yPgws6mS.js → UkeySign-D5LetK6P.js} +1 -1
- package/src/assets/web-panel/assets/{VideoEditing-B329WjpG.js → VideoEditing-oP7ehFgR.js} +1 -1
- package/src/assets/web-panel/assets/{Wallet-T8VM-Ttm.js → Wallet-BBtu4-xa.js} +4 -4
- package/src/assets/web-panel/assets/{WebAuthn-XuRibrpP.js → WebAuthn-iSPRU4Ht.js} +5 -5
- package/src/assets/web-panel/assets/{WorkflowEditor-D1Gwz3YR.js → WorkflowEditor-DuEDhQmB.js} +1 -1
- package/src/assets/web-panel/assets/{chat-DjydtnT-.js → chat-DGDgqvvm.js} +1 -1
- package/src/assets/web-panel/assets/{colors-gFtBvPrr.js → colors-DGQMWa1-.js} +1 -1
- package/src/assets/web-panel/assets/{compact-item-CndxhGfx.js → compact-item-COVznBL4.js} +1 -1
- package/src/assets/web-panel/assets/{createContext-DnfGpd0L.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-CmT5hRVW.js → hasIn-DkxZO3E9.js} +1 -1
- package/src/assets/web-panel/assets/{index-BGlmPbl_.js → index-0ToBFsvW.js} +1 -1
- package/src/assets/web-panel/assets/{index-BsRKmb6k.js → index-2JZizEPc.js} +1 -1
- package/src/assets/web-panel/assets/{index-C14jryXi.js → index-BAL2p7YC.js} +1 -1
- package/src/assets/web-panel/assets/{index-B0WFjxWs.js → index-BAlrovUm.js} +1 -1
- package/src/assets/web-panel/assets/{index-BlTcxT_L.js → index-BBw2MLIe.js} +1 -1
- package/src/assets/web-panel/assets/{index-DjcR-CwS.js → index-BHH95jcm.js} +1 -1
- package/src/assets/web-panel/assets/{index-DreYqebI.js → index-BOTshZNx.js} +1 -1
- package/src/assets/web-panel/assets/{index-DaEPE2DC.js → index-BQm7ntcn.js} +1 -1
- package/src/assets/web-panel/assets/{index-BNHdO6Jr.js → index-BUqwlzc8.js} +1 -1
- package/src/assets/web-panel/assets/{index-C3HvYeA3.js → index-BY6MSbWT.js} +1 -1
- package/src/assets/web-panel/assets/{index-DUlubR4l.js → index-BY9Ossof.js} +1 -1
- package/src/assets/web-panel/assets/{index-Dbpk75MO.js → index-BgM-3a1w.js} +1 -1
- package/src/assets/web-panel/assets/{index-CqpR0Des.js → index-Bv0_u0ze.js} +1 -1
- package/src/assets/web-panel/assets/{index-DjY-3sMA.js → index-C3XeNS82.js} +3 -3
- package/src/assets/web-panel/assets/{index-DV6NrfJx.js → index-C3bN6751.js} +1 -1
- package/src/assets/web-panel/assets/{index-DuAvYTmY.js → index-CNRRrP3-.js} +1 -1
- package/src/assets/web-panel/assets/{index-BW3nWiu0.js → index-CV0KnNqR.js} +1 -1
- package/src/assets/web-panel/assets/{index-CZLDbPTa.js → index-CcNGQWum.js} +1 -1
- package/src/assets/web-panel/assets/{index-D5na0B7G.js → index-Ci34vbh0.js} +1 -1
- package/src/assets/web-panel/assets/{index-DoBKSzqu.js → index-ClQVcrFt.js} +1 -1
- package/src/assets/web-panel/assets/{index-CuOx4Pbe.js → index-Cligb-Dl.js} +1 -1
- package/src/assets/web-panel/assets/{index-CgMKElUh.js → index-CokrhbY2.js} +1 -1
- package/src/assets/web-panel/assets/{index-BFif4Cev.js → index-CpZxDiVK.js} +1 -1
- package/src/assets/web-panel/assets/{index-HHP1zzo7.js → index-CyMHF2Bi.js} +1 -1
- package/src/assets/web-panel/assets/{index-_-wGLtAg.js → index-DDwPBGdA.js} +1 -1
- package/src/assets/web-panel/assets/{index-ktN-K1Tf.js → index-DU1ArKl5.js} +1 -1
- package/src/assets/web-panel/assets/{index-C4Mqhmas.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-BXNUTiW8.js → index-DaWQSp5a.js} +1 -1
- package/src/assets/web-panel/assets/{index-DKyuE_Y2.js → index-DmduvOYT.js} +1 -1
- package/src/assets/web-panel/assets/{index-DV2PR3Fa.js → index-ECoDhyH3.js} +1 -1
- package/src/assets/web-panel/assets/{index-BVM_w30N.js → index-ZcqTvPnt.js} +1 -1
- package/src/assets/web-panel/assets/{index-CRqz8TtI.js → index-b2_M6o20.js} +1 -1
- package/src/assets/web-panel/assets/{index-CB27echm.js → index-b_0qTo8O.js} +1 -1
- package/src/assets/web-panel/assets/{index-D88-8bsB.js → index-dfYkGovV.js} +1 -1
- package/src/assets/web-panel/assets/{index-DGbKeg8G.js → index-jo7DbU0w.js} +1 -1
- package/src/assets/web-panel/assets/{index-D2d7358Y.js → index-usmG13jq.js} +1 -1
- package/src/assets/web-panel/assets/{index-zQf599Uq.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-KV3V-PNH.js → initDefaultProps-CkSeiBwL.js} +1 -1
- package/src/assets/web-panel/assets/{motion-PFGQg7_X.js → motion-CSzhDP0s.js} +1 -1
- package/src/assets/web-panel/assets/{move-Dnl79wq4.js → move-mgCt4iC6.js} +1 -1
- package/src/assets/web-panel/assets/{mtc-parser-Bwl5JH9V.js → mtc-parser-BEZBLcKt.js} +1 -1
- package/src/assets/web-panel/assets/{omit-DCcTtM1l.js → omit-BsHctMEr.js} +1 -1
- package/src/assets/web-panel/assets/{pickAttrs-Cl6BjjDf.js → pickAttrs-1BHamnGW.js} +1 -1
- package/src/assets/web-panel/assets/{placementArrow-fdqhyo42.js → placementArrow--Vb4Bd7l.js} +1 -1
- package/src/assets/web-panel/assets/{responsiveObserve-DYQpmcDW.js → responsiveObserve-DD33SqCm.js} +1 -1
- package/src/assets/web-panel/assets/{slide-C4l-VfO4.js → slide-DfrLtxgK.js} +1 -1
- package/src/assets/web-panel/assets/{statusUtils-DYDw_dyZ.js → statusUtils-D9Pe_gXW.js} +1 -1
- package/src/assets/web-panel/assets/{styleChecker-BEsubSMu.js → styleChecker-0NY5iMun.js} +1 -1
- package/src/assets/web-panel/assets/{useFlexGapSupport-Cj82ggQ_.js → useFlexGapSupport-DSsZstwg.js} +1 -1
- package/src/assets/web-panel/assets/{useFs-B7L1eJ0V.js → useFs-BU8HyH59.js} +1 -1
- package/src/assets/web-panel/assets/{usePersonalDataHub-DVlJVD4d.js → usePersonalDataHub-D_xttink.js} +1 -1
- package/src/assets/web-panel/assets/{vnode-BBAbRN_Y.js → vnode-39VhX2lM.js} +1 -1
- package/src/assets/web-panel/assets/{zoom-BYn48q-I.js → zoom-D5KQ8Pks.js} +1 -1
- package/src/assets/web-panel/index.html +1 -1
- package/src/data/changelog.json +20 -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/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/Logs-ZtS98jCm.js +0 -2
- package/src/assets/web-panel/assets/MarkdownRenderer-CTsYo9NN.js +0 -1
- package/src/assets/web-panel/assets/PdhVaultBrowser-DqaO6wgH.js +0 -7
- package/src/assets/web-panel/assets/SpeechSettings-D4FA9KYI.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
|
@@ -0,0 +1,304 @@
|
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
2
|
+
import { types } from "node:util";
|
|
3
|
+
|
|
4
|
+
export const BROWSER_VISION_OBSERVATION_AUTHORITY_DESCRIPTOR_SCHEMA =
|
|
5
|
+
"chainlesschain.browser-vision-observation-authority-descriptor/v1";
|
|
6
|
+
export const BROWSER_VISION_OBSERVATION_REQUEST_SCHEMA =
|
|
7
|
+
"chainlesschain.browser-vision-observation-request/v1";
|
|
8
|
+
export const BROWSER_VISION_OBSERVATION_RECEIPT_SCHEMA =
|
|
9
|
+
"chainlesschain.browser-vision-observation-receipt/v1";
|
|
10
|
+
|
|
11
|
+
const DIGEST = /^sha256:[a-f0-9]{64}$/u;
|
|
12
|
+
const ID = /^[A-Za-z0-9._:-]{1,128}$/u;
|
|
13
|
+
const OPERATIONS = new Set(["analyze", "locate", "compare", "describe", "ocr"]);
|
|
14
|
+
const authorities = new WeakMap();
|
|
15
|
+
|
|
16
|
+
function canonical(value) {
|
|
17
|
+
if (value === null || typeof value === "boolean")
|
|
18
|
+
return JSON.stringify(value);
|
|
19
|
+
if (typeof value === "number" && Number.isFinite(value))
|
|
20
|
+
return JSON.stringify(value);
|
|
21
|
+
if (typeof value === "string") return JSON.stringify(value);
|
|
22
|
+
if (Array.isArray(value)) return `[${value.map(canonical).join(",")}]`;
|
|
23
|
+
return `{${Object.keys(value)
|
|
24
|
+
.sort()
|
|
25
|
+
.map((key) => `${JSON.stringify(key)}:${canonical(value[key])}`)
|
|
26
|
+
.join(",")}}`;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
function digest(domain, value) {
|
|
30
|
+
return `sha256:${createHash("sha256")
|
|
31
|
+
.update(`${domain}\0`)
|
|
32
|
+
.update(canonical(value))
|
|
33
|
+
.digest("hex")}`;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
function exactObject(value, keys, label) {
|
|
37
|
+
if (
|
|
38
|
+
!value ||
|
|
39
|
+
typeof value !== "object" ||
|
|
40
|
+
Array.isArray(value) ||
|
|
41
|
+
types.isProxy(value) ||
|
|
42
|
+
![Object.prototype, null].includes(Object.getPrototypeOf(value)) ||
|
|
43
|
+
Object.keys(value).sort().join("\0") !== [...keys].sort().join("\0")
|
|
44
|
+
) {
|
|
45
|
+
throw new TypeError(`${label} has an invalid shape`);
|
|
46
|
+
}
|
|
47
|
+
for (const key of keys) {
|
|
48
|
+
const descriptor = Object.getOwnPropertyDescriptor(value, key);
|
|
49
|
+
if (!descriptor?.enumerable || !("value" in descriptor))
|
|
50
|
+
throw new TypeError(`${label} must contain plain data`);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
function snapshotJson(value, label) {
|
|
55
|
+
let nodes = 0;
|
|
56
|
+
const visit = (entry, depth) => {
|
|
57
|
+
if (++nodes > 2048 || depth > 12)
|
|
58
|
+
throw new TypeError(`${label} exceeds its structure budget`);
|
|
59
|
+
if (
|
|
60
|
+
entry === null ||
|
|
61
|
+
typeof entry === "boolean" ||
|
|
62
|
+
(typeof entry === "number" && Number.isFinite(entry)) ||
|
|
63
|
+
typeof entry === "string"
|
|
64
|
+
) {
|
|
65
|
+
return entry;
|
|
66
|
+
}
|
|
67
|
+
if (
|
|
68
|
+
!entry ||
|
|
69
|
+
typeof entry !== "object" ||
|
|
70
|
+
types.isProxy(entry) ||
|
|
71
|
+
![Object.prototype, null, Array.prototype].includes(
|
|
72
|
+
Object.getPrototypeOf(entry),
|
|
73
|
+
)
|
|
74
|
+
) {
|
|
75
|
+
throw new TypeError(`${label} must be finite plain JSON data`);
|
|
76
|
+
}
|
|
77
|
+
if (Array.isArray(entry))
|
|
78
|
+
return Object.freeze(entry.map((v) => visit(v, depth + 1)));
|
|
79
|
+
const output = {};
|
|
80
|
+
for (const key of Object.keys(entry)) {
|
|
81
|
+
const descriptor = Object.getOwnPropertyDescriptor(entry, key);
|
|
82
|
+
if (!descriptor?.enumerable || !("value" in descriptor))
|
|
83
|
+
throw new TypeError(`${label} must contain plain data`);
|
|
84
|
+
output[key] = visit(descriptor.value, depth + 1);
|
|
85
|
+
}
|
|
86
|
+
return Object.freeze(output);
|
|
87
|
+
};
|
|
88
|
+
const snapshot = visit(value, 0);
|
|
89
|
+
if (Buffer.byteLength(canonical(snapshot), "utf8") > 16 * 1024)
|
|
90
|
+
throw new TypeError(`${label} exceeds its byte budget`);
|
|
91
|
+
return snapshot;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
function normalizeDescriptor(value) {
|
|
95
|
+
const keys = [
|
|
96
|
+
"schema",
|
|
97
|
+
"authorityId",
|
|
98
|
+
"tenantId",
|
|
99
|
+
"handlerArtifactDigest",
|
|
100
|
+
"policyRevision",
|
|
101
|
+
"maxGrantTtlMs",
|
|
102
|
+
];
|
|
103
|
+
exactObject(value, keys, "browser vision authority descriptor");
|
|
104
|
+
if (
|
|
105
|
+
value.schema !== BROWSER_VISION_OBSERVATION_AUTHORITY_DESCRIPTOR_SCHEMA ||
|
|
106
|
+
!ID.test(value.authorityId) ||
|
|
107
|
+
!ID.test(value.tenantId) ||
|
|
108
|
+
!DIGEST.test(value.handlerArtifactDigest) ||
|
|
109
|
+
!ID.test(value.policyRevision) ||
|
|
110
|
+
!Number.isSafeInteger(value.maxGrantTtlMs) ||
|
|
111
|
+
value.maxGrantTtlMs < 1 ||
|
|
112
|
+
value.maxGrantTtlMs > 60_000
|
|
113
|
+
) {
|
|
114
|
+
throw new TypeError("browser vision authority descriptor is invalid");
|
|
115
|
+
}
|
|
116
|
+
return Object.freeze({ ...value });
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
function normalizeRequest(value) {
|
|
120
|
+
const keys = [
|
|
121
|
+
"schema",
|
|
122
|
+
"requestId",
|
|
123
|
+
"targetId",
|
|
124
|
+
"operation",
|
|
125
|
+
"senderId",
|
|
126
|
+
"frameUrlDigest",
|
|
127
|
+
"inputDigest",
|
|
128
|
+
"authorization",
|
|
129
|
+
"requestedAt",
|
|
130
|
+
];
|
|
131
|
+
exactObject(value, keys, "browser vision observation request");
|
|
132
|
+
const requestedAtMs = Date.parse(value.requestedAt);
|
|
133
|
+
if (
|
|
134
|
+
value.schema !== BROWSER_VISION_OBSERVATION_REQUEST_SCHEMA ||
|
|
135
|
+
!ID.test(value.requestId) ||
|
|
136
|
+
typeof value.targetId !== "string" ||
|
|
137
|
+
value.targetId.length < 1 ||
|
|
138
|
+
value.targetId.length > 512 ||
|
|
139
|
+
!OPERATIONS.has(value.operation) ||
|
|
140
|
+
!Number.isSafeInteger(value.senderId) ||
|
|
141
|
+
value.senderId < 1 ||
|
|
142
|
+
!DIGEST.test(value.frameUrlDigest) ||
|
|
143
|
+
!DIGEST.test(value.inputDigest) ||
|
|
144
|
+
!Number.isFinite(requestedAtMs)
|
|
145
|
+
) {
|
|
146
|
+
throw new TypeError("browser vision observation request is invalid");
|
|
147
|
+
}
|
|
148
|
+
const authorization = snapshotJson(
|
|
149
|
+
value.authorization,
|
|
150
|
+
"browser vision observation authorization",
|
|
151
|
+
);
|
|
152
|
+
return Object.freeze({ ...value, authorization, requestedAtMs });
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
function requestEvidence(request) {
|
|
156
|
+
const authorizationDigest = digest(
|
|
157
|
+
"chainlesschain.browser-vision-observation-authorization/v1",
|
|
158
|
+
request.authorization,
|
|
159
|
+
);
|
|
160
|
+
const core = {
|
|
161
|
+
schema: request.schema,
|
|
162
|
+
requestId: request.requestId,
|
|
163
|
+
targetId: request.targetId,
|
|
164
|
+
operation: request.operation,
|
|
165
|
+
senderId: request.senderId,
|
|
166
|
+
frameUrlDigest: request.frameUrlDigest,
|
|
167
|
+
inputDigest: request.inputDigest,
|
|
168
|
+
authorizationDigest,
|
|
169
|
+
requestedAt: request.requestedAt,
|
|
170
|
+
};
|
|
171
|
+
return Object.freeze({
|
|
172
|
+
...core,
|
|
173
|
+
requestDigest: digest(
|
|
174
|
+
"chainlesschain.browser-vision-observation-request/v1",
|
|
175
|
+
core,
|
|
176
|
+
),
|
|
177
|
+
});
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
function normalizeDecision(value) {
|
|
181
|
+
if (
|
|
182
|
+
!value ||
|
|
183
|
+
typeof value !== "object" ||
|
|
184
|
+
Array.isArray(value) ||
|
|
185
|
+
types.isProxy(value) ||
|
|
186
|
+
![Object.prototype, null].includes(Object.getPrototypeOf(value))
|
|
187
|
+
) {
|
|
188
|
+
throw new TypeError("browser vision observation decision is invalid");
|
|
189
|
+
}
|
|
190
|
+
const decisionDescriptor = Object.getOwnPropertyDescriptor(value, "decision");
|
|
191
|
+
if (!decisionDescriptor?.enumerable || !("value" in decisionDescriptor))
|
|
192
|
+
throw new TypeError(
|
|
193
|
+
"browser vision observation decision must be plain data",
|
|
194
|
+
);
|
|
195
|
+
if (decisionDescriptor.value === "deny") {
|
|
196
|
+
const keys = Object.hasOwn(value, "reason")
|
|
197
|
+
? ["decision", "reason"]
|
|
198
|
+
: ["decision"];
|
|
199
|
+
exactObject(value, keys, "browser vision observation decision");
|
|
200
|
+
const reason = Object.hasOwn(value, "reason") ? value.reason : null;
|
|
201
|
+
if (reason !== null && (typeof reason !== "string" || reason.length > 512))
|
|
202
|
+
throw new TypeError(
|
|
203
|
+
"browser vision observation denial reason is invalid",
|
|
204
|
+
);
|
|
205
|
+
return Object.freeze({ decision: "deny", reason });
|
|
206
|
+
}
|
|
207
|
+
exactObject(
|
|
208
|
+
value,
|
|
209
|
+
["decision", "authorizationEvidenceRef", "validUntil"],
|
|
210
|
+
"browser vision observation decision",
|
|
211
|
+
);
|
|
212
|
+
if (decisionDescriptor.value !== "allow")
|
|
213
|
+
throw new TypeError("browser vision observation decision is invalid");
|
|
214
|
+
return Object.freeze({
|
|
215
|
+
decision: "allow",
|
|
216
|
+
authorizationEvidenceRef: value.authorizationEvidenceRef,
|
|
217
|
+
validUntil: value.validUntil,
|
|
218
|
+
});
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
export function createBrowserVisionObservationAuthority({
|
|
222
|
+
descriptor,
|
|
223
|
+
authorize,
|
|
224
|
+
now = () => Date.now(),
|
|
225
|
+
} = {}) {
|
|
226
|
+
const normalizedDescriptor = normalizeDescriptor(descriptor);
|
|
227
|
+
if (typeof authorize !== "function" || types.isProxy(authorize))
|
|
228
|
+
throw new TypeError("browser vision observation authorize port is invalid");
|
|
229
|
+
if (typeof now !== "function" || types.isProxy(now))
|
|
230
|
+
throw new TypeError("browser vision observation clock is invalid");
|
|
231
|
+
const authority = Object.freeze({});
|
|
232
|
+
authorities.set(authority, {
|
|
233
|
+
descriptor: normalizedDescriptor,
|
|
234
|
+
authorize,
|
|
235
|
+
now,
|
|
236
|
+
});
|
|
237
|
+
return authority;
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
export function captureBrowserVisionObservationAuthority(value) {
|
|
241
|
+
const captured = authorities.get(value);
|
|
242
|
+
if (!captured)
|
|
243
|
+
throw new TypeError(
|
|
244
|
+
"A branded browser vision observation authority is required",
|
|
245
|
+
);
|
|
246
|
+
return Object.freeze({
|
|
247
|
+
descriptor: captured.descriptor,
|
|
248
|
+
authorizeObservation: async (value) => {
|
|
249
|
+
const request = normalizeRequest(value);
|
|
250
|
+
const evidence = requestEvidence(request);
|
|
251
|
+
const decision = normalizeDecision(
|
|
252
|
+
await captured.authorize(
|
|
253
|
+
Object.freeze({ ...request, requestDigest: evidence.requestDigest }),
|
|
254
|
+
),
|
|
255
|
+
);
|
|
256
|
+
if (decision.decision !== "allow") {
|
|
257
|
+
const error = new Error(
|
|
258
|
+
decision.reason ?? "Browser vision observation was denied",
|
|
259
|
+
);
|
|
260
|
+
error.code = "BROWSER_VISION_OBSERVATION_DENIED";
|
|
261
|
+
throw error;
|
|
262
|
+
}
|
|
263
|
+
const nowMs = captured.now();
|
|
264
|
+
const validUntilMs = Date.parse(decision.validUntil);
|
|
265
|
+
if (
|
|
266
|
+
typeof decision.authorizationEvidenceRef !== "string" ||
|
|
267
|
+
decision.authorizationEvidenceRef.length < 1 ||
|
|
268
|
+
decision.authorizationEvidenceRef.length > 512 ||
|
|
269
|
+
!Number.isFinite(nowMs) ||
|
|
270
|
+
!Number.isFinite(validUntilMs) ||
|
|
271
|
+
validUntilMs <= nowMs ||
|
|
272
|
+
validUntilMs > nowMs + captured.descriptor.maxGrantTtlMs
|
|
273
|
+
) {
|
|
274
|
+
throw new Error("Browser vision observation decision is invalid");
|
|
275
|
+
}
|
|
276
|
+
const authorizedAt = new Date(nowMs).toISOString();
|
|
277
|
+
const core = {
|
|
278
|
+
schema: BROWSER_VISION_OBSERVATION_RECEIPT_SCHEMA,
|
|
279
|
+
authorityId: captured.descriptor.authorityId,
|
|
280
|
+
tenantId: captured.descriptor.tenantId,
|
|
281
|
+
policyRevision: captured.descriptor.policyRevision,
|
|
282
|
+
handlerArtifactDigest: captured.descriptor.handlerArtifactDigest,
|
|
283
|
+
requestId: request.requestId,
|
|
284
|
+
targetId: request.targetId,
|
|
285
|
+
operation: request.operation,
|
|
286
|
+
senderId: request.senderId,
|
|
287
|
+
frameUrlDigest: request.frameUrlDigest,
|
|
288
|
+
inputDigest: request.inputDigest,
|
|
289
|
+
authorizationDigest: evidence.authorizationDigest,
|
|
290
|
+
requestDigest: evidence.requestDigest,
|
|
291
|
+
authorizationEvidenceRef: decision.authorizationEvidenceRef,
|
|
292
|
+
authorizedAt,
|
|
293
|
+
validUntil: new Date(validUntilMs).toISOString(),
|
|
294
|
+
};
|
|
295
|
+
return Object.freeze({
|
|
296
|
+
...core,
|
|
297
|
+
receiptDigest: digest(
|
|
298
|
+
"chainlesschain.browser-vision-observation-receipt/v1",
|
|
299
|
+
core,
|
|
300
|
+
),
|
|
301
|
+
});
|
|
302
|
+
},
|
|
303
|
+
});
|
|
304
|
+
}
|
|
@@ -264,6 +264,23 @@ async function loadBuiltInFactories(commandName) {
|
|
|
264
264
|
provider,
|
|
265
265
|
settlementAdapter,
|
|
266
266
|
businessGrader,
|
|
267
|
+
egressAuthority,
|
|
268
|
+
processSupervisor,
|
|
269
|
+
childEvidenceStore,
|
|
270
|
+
browserVisionObservation,
|
|
271
|
+
browserVisionAction,
|
|
272
|
+
browserNavigationAction,
|
|
273
|
+
browserKeyboardAction,
|
|
274
|
+
browserTabOpenAction,
|
|
275
|
+
browserDownloadAction,
|
|
276
|
+
browserQuarantinedDownloadExecutor,
|
|
277
|
+
browserFilesystemQuarantineCustody,
|
|
278
|
+
browserFilesystemQuarantineDisposal,
|
|
279
|
+
browserQuarantineRetention,
|
|
280
|
+
browserQuarantineRetentionScheduler,
|
|
281
|
+
browserQuarantineOperatorRevocation,
|
|
282
|
+
browserQuarantineLockMaintenance,
|
|
283
|
+
browserDownloadArtifactDisposal,
|
|
267
284
|
ledgerPorts,
|
|
268
285
|
artifactPorts,
|
|
269
286
|
ledgerBackend,
|
|
@@ -279,6 +296,23 @@ async function loadBuiltInFactories(commandName) {
|
|
|
279
296
|
import("./pm-exploration-volcengine-provider.js"),
|
|
280
297
|
import("./pm-exploration-provider-settlement-adapter.js"),
|
|
281
298
|
import("./pm-exploration-business-grader.js"),
|
|
299
|
+
import("./pm-exploration-egress-authority.js"),
|
|
300
|
+
import("./evolution-eval-process-supervisor.js"),
|
|
301
|
+
import("./evolution-eval-child-evidence-ledger-adapter.js"),
|
|
302
|
+
import("./browser-vision-observation-authority.js"),
|
|
303
|
+
import("./browser-vision-action-authority.js"),
|
|
304
|
+
import("./browser-navigation-action-authority.js"),
|
|
305
|
+
import("./browser-keyboard-action-authority.js"),
|
|
306
|
+
import("./browser-tab-open-action-authority.js"),
|
|
307
|
+
import("./browser-download-action-authority.js"),
|
|
308
|
+
import("./browser-quarantined-download-executor.js"),
|
|
309
|
+
import("./browser-filesystem-quarantine-custody.js"),
|
|
310
|
+
import("./browser-filesystem-quarantine-disposal.js"),
|
|
311
|
+
import("./browser-quarantine-retention-authority.js"),
|
|
312
|
+
import("./browser-quarantine-retention-scheduler.js"),
|
|
313
|
+
import("./browser-quarantine-operator-revocation-authority.js"),
|
|
314
|
+
import("./browser-quarantine-lock-maintenance-authority.js"),
|
|
315
|
+
import("./browser-download-artifact-disposal-authority.js"),
|
|
282
316
|
import("./evolution-ledger-ports.js"),
|
|
283
317
|
import("./evolution-artifact-ports.js"),
|
|
284
318
|
import("./evolution-ledger-file-backend.js"),
|
|
@@ -303,15 +337,39 @@ async function loadBuiltInFactories(commandName) {
|
|
|
303
337
|
receipts.inspectPmExplorationReceiptAuthority,
|
|
304
338
|
createPmExplorationExecutionManifest:
|
|
305
339
|
execution.createPmExplorationExecutionManifest,
|
|
340
|
+
createPmExplorationProcessCurriculum:
|
|
341
|
+
execution.createPmExplorationProcessCurriculum,
|
|
342
|
+
inspectPmExplorationCurriculumIsolation:
|
|
343
|
+
execution.inspectPmExplorationCurriculumIsolation,
|
|
306
344
|
createPmExplorationRunner: execution.createPmExplorationRunner,
|
|
345
|
+
createPmExplorationProcessRunner:
|
|
346
|
+
execution.createPmExplorationProcessRunner,
|
|
347
|
+
inspectPmExplorationRunnerIsolation:
|
|
348
|
+
execution.inspectPmExplorationRunnerIsolation,
|
|
307
349
|
createPmExplorationGrader: execution.createPmExplorationGrader,
|
|
350
|
+
createPmExplorationProcessGrader:
|
|
351
|
+
execution.createPmExplorationProcessGrader,
|
|
352
|
+
inspectPmExplorationGraderIsolation:
|
|
353
|
+
execution.inspectPmExplorationGraderIsolation,
|
|
308
354
|
createPmExplorationMerger: execution.createPmExplorationMerger,
|
|
355
|
+
createPmExplorationProcessMerger:
|
|
356
|
+
execution.createPmExplorationProcessMerger,
|
|
357
|
+
inspectPmExplorationMergerIsolation:
|
|
358
|
+
execution.inspectPmExplorationMergerIsolation,
|
|
309
359
|
createPmExplorationEvaluator: execution.createPmExplorationEvaluator,
|
|
360
|
+
createPmExplorationProcessEvaluator:
|
|
361
|
+
execution.createPmExplorationProcessEvaluator,
|
|
362
|
+
inspectPmExplorationEvaluatorIsolation:
|
|
363
|
+
execution.inspectPmExplorationEvaluatorIsolation,
|
|
310
364
|
createPmExplorationExecutionHost:
|
|
311
365
|
execution.createPmExplorationExecutionHost,
|
|
312
366
|
isPmExplorationExecutionHost: execution.isPmExplorationExecutionHost,
|
|
313
367
|
inspectPmExplorationExecutionHost:
|
|
314
368
|
execution.inspectPmExplorationExecutionHost,
|
|
369
|
+
createEvolutionEvalProcessSupervisor:
|
|
370
|
+
processSupervisor.createEvolutionEvalProcessSupervisor,
|
|
371
|
+
createEvolutionEvalChildEvidenceLedgerAdapter:
|
|
372
|
+
childEvidenceStore.createEvolutionEvalChildEvidenceLedgerAdapter,
|
|
315
373
|
createPmExplorationTransitionCommitter:
|
|
316
374
|
transitionCommitter.createPmExplorationTransitionCommitter,
|
|
317
375
|
capturePmExplorationTransitionCommitter:
|
|
@@ -325,6 +383,7 @@ async function loadBuiltInFactories(commandName) {
|
|
|
325
383
|
verifyPmExplorationRecoverySnapshotAck:
|
|
326
384
|
recoverySnapshotStore.verifyPmExplorationRecoverySnapshotAck,
|
|
327
385
|
executePmExplorationRound: execution.executePmExplorationRound,
|
|
386
|
+
selectPmExplorationTask: execution.selectPmExplorationTask,
|
|
328
387
|
mergePmExplorationBranches: execution.mergePmExplorationBranches,
|
|
329
388
|
evaluatePmExplorationMemory: execution.evaluatePmExplorationMemory,
|
|
330
389
|
createPmExplorationEvidenceBundle:
|
|
@@ -350,6 +409,40 @@ async function loadBuiltInFactories(commandName) {
|
|
|
350
409
|
businessGrader.inspectPmExplorationReadOnlyOutcomeSource,
|
|
351
410
|
createPmExplorationBusinessGrader:
|
|
352
411
|
businessGrader.createPmExplorationBusinessGrader,
|
|
412
|
+
createPmExplorationMemoryRetrievalAuthority:
|
|
413
|
+
egressAuthority.createPmExplorationMemoryRetrievalAuthority,
|
|
414
|
+
createPmExplorationModelEgressAuthority:
|
|
415
|
+
egressAuthority.createPmExplorationModelEgressAuthority,
|
|
416
|
+
inspectPmExplorationEgressAuthority:
|
|
417
|
+
egressAuthority.inspectPmExplorationEgressAuthority,
|
|
418
|
+
createBrowserVisionObservationAuthority:
|
|
419
|
+
browserVisionObservation.createBrowserVisionObservationAuthority,
|
|
420
|
+
createBrowserVisionActionAuthority:
|
|
421
|
+
browserVisionAction.createBrowserVisionActionAuthority,
|
|
422
|
+
createBrowserNavigationActionAuthority:
|
|
423
|
+
browserNavigationAction.createBrowserNavigationActionAuthority,
|
|
424
|
+
createBrowserKeyboardActionAuthority:
|
|
425
|
+
browserKeyboardAction.createBrowserKeyboardActionAuthority,
|
|
426
|
+
createBrowserTabOpenActionAuthority:
|
|
427
|
+
browserTabOpenAction.createBrowserTabOpenActionAuthority,
|
|
428
|
+
createBrowserDownloadActionAuthority:
|
|
429
|
+
browserDownloadAction.createBrowserDownloadActionAuthority,
|
|
430
|
+
createBrowserQuarantinedDownloadExecutor:
|
|
431
|
+
browserQuarantinedDownloadExecutor.createBrowserQuarantinedDownloadExecutor,
|
|
432
|
+
createBrowserFilesystemQuarantineCustody:
|
|
433
|
+
browserFilesystemQuarantineCustody.createBrowserFilesystemQuarantineCustody,
|
|
434
|
+
createBrowserFilesystemQuarantineDisposalAuthority:
|
|
435
|
+
browserFilesystemQuarantineDisposal.createBrowserFilesystemQuarantineDisposalAuthority,
|
|
436
|
+
createBrowserQuarantineRetentionAuthority:
|
|
437
|
+
browserQuarantineRetention.createBrowserQuarantineRetentionAuthority,
|
|
438
|
+
createBrowserQuarantineRetentionScheduler:
|
|
439
|
+
browserQuarantineRetentionScheduler.createBrowserQuarantineRetentionScheduler,
|
|
440
|
+
createBrowserQuarantineOperatorRevocationAuthority:
|
|
441
|
+
browserQuarantineOperatorRevocation.createBrowserQuarantineOperatorRevocationAuthority,
|
|
442
|
+
createBrowserQuarantineLockMaintenanceAuthority:
|
|
443
|
+
browserQuarantineLockMaintenance.createBrowserQuarantineLockMaintenanceAuthority,
|
|
444
|
+
createBrowserDownloadArtifactDisposalAuthority:
|
|
445
|
+
browserDownloadArtifactDisposal.createBrowserDownloadArtifactDisposalAuthority,
|
|
353
446
|
createEvolutionLedgerDurableArtifactResolver:
|
|
354
447
|
ledgerPorts.createEvolutionLedgerDurableArtifactResolver,
|
|
355
448
|
createEvolutionArtifactPorts: (options) =>
|
|
@@ -417,6 +510,56 @@ async function loadBuiltInFactories(commandName) {
|
|
|
417
510
|
factories.createGovernedSkillMarketplaceCandidateInstaller =
|
|
418
511
|
createGovernedSkillMarketplaceCandidateInstaller;
|
|
419
512
|
}
|
|
513
|
+
if (commandName === "evolution" || commandName === "serve") {
|
|
514
|
+
const [
|
|
515
|
+
{ SkillCandidateRegistry },
|
|
516
|
+
{ createSkillEvaluatedPromotionProvider },
|
|
517
|
+
{ createSkillPromotionReviewProvider },
|
|
518
|
+
{ createSkillEvaluatedPromotionControlPlane },
|
|
519
|
+
{ createSkillEvaluatedPromotionDurabilityAdapter },
|
|
520
|
+
{ createSkillPromotionReviewLedgerAdapter },
|
|
521
|
+
{ createStructuredMemoryLedgerAdapter },
|
|
522
|
+
{ createStructuredMemoryAuthorityLedgerAdapter },
|
|
523
|
+
{ createStructuredMemoryPromotionReceiptWriter },
|
|
524
|
+
{ createStructuredMemoryPolicyReceiptWriter },
|
|
525
|
+
{ createStructuredMemoryAgentControlPlane },
|
|
526
|
+
{ createSkillRevocationPropagation },
|
|
527
|
+
{ openSkillRetrievalRevocationAuthority },
|
|
528
|
+
{ createSkillRetrievalRevocationLedgerAdapter },
|
|
529
|
+
] = await Promise.all([
|
|
530
|
+
import("./skill-candidate-registry.js"),
|
|
531
|
+
import("./skill-evaluated-promotion.js"),
|
|
532
|
+
import("./skill-promotion-review.js"),
|
|
533
|
+
import("./skill-promotion-controller.js"),
|
|
534
|
+
import("./skill-evaluated-promotion-durability.js"),
|
|
535
|
+
import("./skill-promotion-review-ledger-adapter.js"),
|
|
536
|
+
import("./structured-memory-ledger-adapter.js"),
|
|
537
|
+
import("./structured-memory-authority-ledger-adapter.js"),
|
|
538
|
+
import("./structured-memory-promotion-receipt-writer.js"),
|
|
539
|
+
import("./structured-memory-policy-receipt-writer.js"),
|
|
540
|
+
import("./structured-memory-agent-control-plane.js"),
|
|
541
|
+
import("./skill-revocation-propagation.js"),
|
|
542
|
+
import("./skill-retrieval-revocation-authority.js"),
|
|
543
|
+
import("./skill-retrieval-revocation-ledger-adapter.js"),
|
|
544
|
+
]);
|
|
545
|
+
Object.assign(factories, {
|
|
546
|
+
createSkillCandidateRegistry: (options) =>
|
|
547
|
+
new SkillCandidateRegistry(options),
|
|
548
|
+
createSkillEvaluatedPromotionProvider,
|
|
549
|
+
createSkillPromotionReviewProvider,
|
|
550
|
+
createSkillEvaluatedPromotionControlPlane,
|
|
551
|
+
createSkillEvaluatedPromotionDurabilityAdapter,
|
|
552
|
+
createSkillPromotionReviewLedgerAdapter,
|
|
553
|
+
createStructuredMemoryLedgerAdapter,
|
|
554
|
+
createStructuredMemoryAuthorityLedgerAdapter,
|
|
555
|
+
createStructuredMemoryPromotionReceiptWriter,
|
|
556
|
+
createStructuredMemoryPolicyReceiptWriter,
|
|
557
|
+
createStructuredMemoryAgentControlPlane,
|
|
558
|
+
createSkillRevocationPropagation,
|
|
559
|
+
openSkillRetrievalRevocationAuthority,
|
|
560
|
+
createSkillRetrievalRevocationLedgerAdapter,
|
|
561
|
+
});
|
|
562
|
+
}
|
|
420
563
|
if (commandName === "evolution" || commandName === "serve") {
|
|
421
564
|
const [
|
|
422
565
|
{ createEvolutionWorkbenchCliHost },
|
|
@@ -641,6 +784,21 @@ function bindFactoriesToModule(factories, moduleDigest) {
|
|
|
641
784
|
"createWikiSkillBenchmarkReportAttestor",
|
|
642
785
|
"createWikiSkillBenchmarkRunner",
|
|
643
786
|
"createEvolutionEvalRuntimeComposition",
|
|
787
|
+
"createEvolutionEvalChildEvidenceLedgerAdapter",
|
|
788
|
+
"createBrowserVisionObservationAuthority",
|
|
789
|
+
"createBrowserVisionActionAuthority",
|
|
790
|
+
"createBrowserNavigationActionAuthority",
|
|
791
|
+
"createBrowserKeyboardActionAuthority",
|
|
792
|
+
"createBrowserTabOpenActionAuthority",
|
|
793
|
+
"createBrowserDownloadActionAuthority",
|
|
794
|
+
"createBrowserQuarantinedDownloadExecutor",
|
|
795
|
+
"createBrowserFilesystemQuarantineCustody",
|
|
796
|
+
"createBrowserFilesystemQuarantineDisposalAuthority",
|
|
797
|
+
"createBrowserQuarantineRetentionAuthority",
|
|
798
|
+
"createBrowserQuarantineRetentionScheduler",
|
|
799
|
+
"createBrowserQuarantineOperatorRevocationAuthority",
|
|
800
|
+
"createBrowserQuarantineLockMaintenanceAuthority",
|
|
801
|
+
"createBrowserDownloadArtifactDisposalAuthority",
|
|
644
802
|
];
|
|
645
803
|
for (const name of providerFactories) {
|
|
646
804
|
if (typeof factories[name] !== "function") continue;
|
|
@@ -652,11 +810,49 @@ function bindFactoriesToModule(factories, moduleDigest) {
|
|
|
652
810
|
return factories[name](options);
|
|
653
811
|
};
|
|
654
812
|
}
|
|
813
|
+
for (const name of [
|
|
814
|
+
"createSkillEvaluatedPromotionProvider",
|
|
815
|
+
"createSkillPromotionReviewProvider",
|
|
816
|
+
]) {
|
|
817
|
+
if (typeof factories[name] !== "function") continue;
|
|
818
|
+
result[name] = (options = {}) => {
|
|
819
|
+
if (options?.handlerArtifactDigest !== moduleDigest)
|
|
820
|
+
throw new Error(
|
|
821
|
+
`${name} handlerArtifactDigest must equal the authenticated deployment module digest`,
|
|
822
|
+
);
|
|
823
|
+
return factories[name](options);
|
|
824
|
+
};
|
|
825
|
+
}
|
|
826
|
+
for (const name of ["createSkillPromotionReviewLedgerAdapter"]) {
|
|
827
|
+
if (typeof factories[name] !== "function") continue;
|
|
828
|
+
result[name] = (options = {}) => {
|
|
829
|
+
if (options?.descriptor?.handlerArtifactDigest !== moduleDigest)
|
|
830
|
+
throw new Error(
|
|
831
|
+
`${name} handlerArtifactDigest must equal the authenticated deployment module digest`,
|
|
832
|
+
);
|
|
833
|
+
return factories[name](options);
|
|
834
|
+
};
|
|
835
|
+
}
|
|
836
|
+
for (const name of [
|
|
837
|
+
"createStructuredMemoryPromotionReceiptWriter",
|
|
838
|
+
"createStructuredMemoryPolicyReceiptWriter",
|
|
839
|
+
]) {
|
|
840
|
+
if (typeof factories[name] !== "function") continue;
|
|
841
|
+
result[name] = (options = {}) => {
|
|
842
|
+
if (options?.descriptor?.issuerHandlerDigest !== moduleDigest)
|
|
843
|
+
throw new Error(
|
|
844
|
+
`${name} issuerHandlerDigest must equal the authenticated deployment module digest`,
|
|
845
|
+
);
|
|
846
|
+
return factories[name](options);
|
|
847
|
+
};
|
|
848
|
+
}
|
|
655
849
|
for (const name of [
|
|
656
850
|
"createPmExplorationReceiptAuthority",
|
|
657
851
|
"createPmExplorationReceiptSigner",
|
|
658
852
|
"createPmExplorationProviderSettlementAdapter",
|
|
659
853
|
"createPmExplorationReadOnlyOutcomeSource",
|
|
854
|
+
"createPmExplorationMemoryRetrievalAuthority",
|
|
855
|
+
"createPmExplorationModelEgressAuthority",
|
|
660
856
|
]) {
|
|
661
857
|
if (typeof factories[name] !== "function") continue;
|
|
662
858
|
result[name] = (options = {}) => {
|
|
@@ -675,7 +871,12 @@ function bindFactoriesToModule(factories, moduleDigest) {
|
|
|
675
871
|
}
|
|
676
872
|
if (typeof factories.createPmExplorationExecutionManifest === "function") {
|
|
677
873
|
result.createPmExplorationExecutionManifest = (input = {}) => {
|
|
678
|
-
|
|
874
|
+
const authorities = ["runner", "grader", "merger", "evaluator"];
|
|
875
|
+
if (Object.hasOwn(input, "curriculum")) authorities.unshift("curriculum");
|
|
876
|
+
if (Object.hasOwn(input, "memoryRetrieval")) {
|
|
877
|
+
authorities.push("memoryRetrieval", "modelEgress");
|
|
878
|
+
}
|
|
879
|
+
for (const authority of authorities) {
|
|
679
880
|
if (input?.[authority]?.handlerArtifactDigest !== moduleDigest)
|
|
680
881
|
throw new Error(
|
|
681
882
|
`PM exploration ${authority} handlerArtifactDigest must equal the authenticated deployment module digest`,
|
|
@@ -5,6 +5,7 @@ import {
|
|
|
5
5
|
import {
|
|
6
6
|
EVOLUTION_EVAL_ATTESTATION_PURPOSES,
|
|
7
7
|
EVOLUTION_EVAL_RECEIPT_SCHEMA,
|
|
8
|
+
EVOLUTION_EVAL_SUPERVISION_SCHEMA,
|
|
8
9
|
EVOLUTION_EVAL_TARGET_INVOCATION_SCHEMA,
|
|
9
10
|
EVOLUTION_EVAL_TARGET_REVOCATION_SCHEMA,
|
|
10
11
|
computeEvolutionEvalReceiptDigest,
|
|
@@ -40,6 +41,10 @@ const KINDS = Object.freeze({
|
|
|
40
41
|
purpose: EVOLUTION_EVAL_ATTESTATION_PURPOSES.targetRevocation,
|
|
41
42
|
schema: EVOLUTION_EVAL_TARGET_REVOCATION_SCHEMA,
|
|
42
43
|
}),
|
|
44
|
+
supervision: Object.freeze({
|
|
45
|
+
purpose: EVOLUTION_EVAL_ATTESTATION_PURPOSES.supervisor,
|
|
46
|
+
schema: EVOLUTION_EVAL_SUPERVISION_SCHEMA,
|
|
47
|
+
}),
|
|
43
48
|
});
|
|
44
49
|
|
|
45
50
|
function requiredString(value, label) {
|
|
@@ -1058,7 +1058,8 @@ export function buildEvolutionEvalAttestationDigest(value, purpose) {
|
|
|
1058
1058
|
export function computeEvolutionEvalSignedEvidenceDigest(record, purpose) {
|
|
1059
1059
|
if (
|
|
1060
1060
|
purpose !== EVOLUTION_EVAL_ATTESTATION_PURPOSES.targetInvocation &&
|
|
1061
|
-
purpose !== EVOLUTION_EVAL_ATTESTATION_PURPOSES.targetRevocation
|
|
1061
|
+
purpose !== EVOLUTION_EVAL_ATTESTATION_PURPOSES.targetRevocation &&
|
|
1062
|
+
purpose !== EVOLUTION_EVAL_ATTESTATION_PURPOSES.supervisor
|
|
1062
1063
|
) {
|
|
1063
1064
|
throw evalError(
|
|
1064
1065
|
EVOLUTION_EVAL_INVALID_CODE,
|