chainlesschain 0.166.22 → 0.166.24
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/package.json +4 -3
- package/src/assets/web-panel/assets/{AIOps-oJ7USzMC.js → AIOps-DR-MWcZc.js} +1 -1
- package/src/assets/web-panel/assets/{ActionButton-BlgnZe_C.js → ActionButton-DT8B7sEb.js} +1 -1
- package/src/assets/web-panel/assets/{Analytics-D2rRbTLu.js → Analytics-asjh3dQJ.js} +3 -3
- package/src/assets/web-panel/assets/{AppLayout-FwS3f0B2.js → AppLayout-DivQ491i.js} +5 -5
- package/src/assets/web-panel/assets/{Artifacts-iF-_08Hi.js → Artifacts-DPH2uUmy.js} +1 -1
- package/src/assets/web-panel/assets/{Audit-D24p0zQw.js → Audit-Bp2nLyc-.js} +1 -1
- package/src/assets/web-panel/assets/{BackgroundAgents-Cg3mRVi9.js → BackgroundAgents-CHS28khl.js} +1 -1
- package/src/assets/web-panel/assets/{Backup-EOqht3H-.js → Backup-CKeaFSfz.js} +1 -1
- package/src/assets/web-panel/assets/{BaseInput-9XWYq2hj.js → BaseInput-CxwM9BAH.js} +1 -1
- package/src/assets/web-panel/assets/{Chat-Dq5yardA.js → Chat-DYLDwaCv.js} +4 -4
- package/src/assets/web-panel/assets/{ChatBubbleRenderer-Ds3pA-ET.js → ChatBubbleRenderer-DdBJDBP0.js} +1 -1
- package/src/assets/web-panel/assets/{Checkbox-CuyCBoBf.js → Checkbox-uYTWOB8j.js} +1 -1
- package/src/assets/web-panel/assets/{Codegen-DjWtYHNe.js → Codegen-CvYa_dwT.js} +1 -1
- package/src/assets/web-panel/assets/{Col-CrVr_iuG.js → Col-CanMAX4m.js} +1 -1
- package/src/assets/web-panel/assets/{Community-C6QxpfGc.js → Community-B4WaDtHw.js} +1 -1
- package/src/assets/web-panel/assets/{Compact-B-v5r6Pa.js → Compact-K93Uof_3.js} +1 -1
- package/src/assets/web-panel/assets/{Compliance-zNiLiFgD.js → Compliance-CKeDLgUW.js} +1 -1
- package/src/assets/web-panel/assets/{Cowork-D9K7lMOu.js → Cowork-P93grAeB.js} +3 -3
- package/src/assets/web-panel/assets/{Cron-DAjO36z4.js → Cron-BSHnMtDn.js} +2 -2
- package/src/assets/web-panel/assets/{Crosschain-Bxqn0aqB.js → Crosschain-epAOpUVJ.js} +1 -1
- package/src/assets/web-panel/assets/{DID-DfRmLUe-.js → DID-ByjXfP7t.js} +2 -2
- package/src/assets/web-panel/assets/{Dashboard-Cz8KF3fr.js → Dashboard-QztTU8tb.js} +2 -2
- package/src/assets/web-panel/assets/{Dropdown-C4oVfkP0.js → Dropdown-DhUc9yhN.js} +1 -1
- package/src/assets/web-panel/assets/{EmailListRenderer-ivyZKN8k.js → EmailListRenderer-C2sLhJJN.js} +1 -1
- package/src/assets/web-panel/assets/{FamilyGuardDashboard-DoxY1CPW.js → FamilyGuardDashboard-CdfbWNDn.js} +1 -1
- package/src/assets/web-panel/assets/{Federation-C93gZxnb.js → Federation-CcF_R7NW.js} +1 -1
- package/src/assets/web-panel/assets/{FormItemContext-D_lEjYJE.js → FormItemContext-Cm_X2IBk.js} +1 -1
- package/src/assets/web-panel/assets/{GenericCardRenderer-BNFN9YjN.js → GenericCardRenderer-DUi4NWlb.js} +1 -1
- package/src/assets/web-panel/assets/{Git-mUu2HcLI.js → Git-4Sq5FjBt.js} +2 -2
- package/src/assets/web-panel/assets/{Governance-CNuosrge.js → Governance-Dx2_v4V6.js} +1 -1
- package/src/assets/web-panel/assets/{Inference-DwY5pbCB.js → Inference-7Vr1xekR.js} +1 -1
- package/src/assets/web-panel/assets/{KnowledgeGraph-aRUxhACD.js → KnowledgeGraph-Cnd2XOzf.js} +1 -1
- package/src/assets/web-panel/assets/{Logs-DFfsWYy_.js → Logs-B66QPVf-.js} +2 -2
- package/src/assets/web-panel/assets/{MarkdownRenderer-DqTx7_u1.js → MarkdownRenderer-PLsEvhly.js} +1 -1
- package/src/assets/web-panel/assets/{Marketplace-COI-ciM-.js → Marketplace-BMIK9BmC.js} +1 -1
- package/src/assets/web-panel/assets/{McpTools-BJJwaIpe.js → McpTools-BDbyp3J_.js} +3 -3
- package/src/assets/web-panel/assets/{Memory-CDO6SGDZ.js → Memory-CJdzfZGi.js} +2 -2
- package/src/assets/web-panel/assets/{MobileBridge-BlZ5tFf4.js → MobileBridge-C2TH5Y3-.js} +1 -1
- package/src/assets/web-panel/assets/{MobileProjects-DuoxbgWz.js → MobileProjects-D1dYXkvV.js} +1 -1
- package/src/assets/web-panel/assets/{Mtc-6ec9j70b.js → Mtc-B-4A1I1j.js} +4 -4
- package/src/assets/web-panel/assets/{MtcAudit-BuL7HkC7.js → MtcAudit-Bgcc9UOl.js} +5 -5
- package/src/assets/web-panel/assets/{Multisig-CJxR85lk.js → Multisig-DqOe-etP.js} +3 -3
- package/src/assets/web-panel/assets/{NLProgramming-B71O1S4l.js → NLProgramming-7VnhzE_6.js} +1 -1
- package/src/assets/web-panel/assets/{Notes-Bsw5zbpV.js → Notes-BxawpeUQ.js} +3 -3
- package/src/assets/web-panel/assets/{NotificationSettings-BnAhXuK_.js → NotificationSettings-Cr08G2aE.js} +1 -1
- package/src/assets/web-panel/assets/{OrderTableRenderer-BJ0R5GGz.js → OrderTableRenderer-Ce8bEGlK.js} +1 -1
- package/src/assets/web-panel/assets/{Organization-B7wwNxoP.js → Organization-BC7lveGv.js} +4 -4
- package/src/assets/web-panel/assets/{Overflow-CfAGr0gM.js → Overflow-CakOW-G0.js} +1 -1
- package/src/assets/web-panel/assets/{P2P-KhMg22Fz.js → P2P-Cf8CaOBZ.js} +2 -2
- package/src/assets/web-panel/assets/{PdhVaultBrowser-NdAXI9ft.js → PdhVaultBrowser-Dc7b98W9.js} +3 -3
- package/src/assets/web-panel/assets/{Permissions-CIYjqyT7.js → Permissions-DGJyMEfS.js} +4 -4
- package/src/assets/web-panel/assets/{PersonalDataHub-D2ht3P_R.js → PersonalDataHub-DNIwSdwu.js} +6 -6
- package/src/assets/web-panel/assets/{Pipeline-i6flZW1m.js → Pipeline-5B1S12wa.js} +1 -1
- package/src/assets/web-panel/assets/{Privacy-DE0lhYVc.js → Privacy-CMB6Ke5t.js} +1 -1
- package/src/assets/web-panel/assets/{ProjectInit-BL3YbyxS.js → ProjectInit-D5PqTFiT.js} +2 -2
- package/src/assets/web-panel/assets/{ProjectSettings-CEtdg7ni.js → ProjectSettings-CbKNdSjV.js} +2 -2
- package/src/assets/web-panel/assets/Projects-ccXaHzYL.js +1 -0
- package/src/assets/web-panel/assets/{Providers-DKt_Cg-j.js → Providers-CJF5_-Gs.js} +1 -1
- package/src/assets/web-panel/assets/{QrScannerModal-DA61jNSx.js → QrScannerModal-CT6iEAdi.js} +1 -1
- package/src/assets/web-panel/assets/{QuickAsk-fS9ryUmq.js → QuickAsk-Ci0h9mJ_.js} +1 -1
- package/src/assets/web-panel/assets/{Recommend-CR9dZU5Y.js → Recommend-Da5mobZu.js} +1 -1
- package/src/assets/web-panel/assets/{RemoteSession-BV0BR2Dz.js → RemoteSession-BaCY8eey.js} +2 -2
- package/src/assets/web-panel/assets/{Reputation-BIeGUvYD.js → Reputation-CaITfTsI.js} +1 -1
- package/src/assets/web-panel/assets/{Row-DHDT1aro.js → Row-DtUDamyP.js} +1 -1
- package/src/assets/web-panel/assets/{RssFeed-Cq6YKb1h.js → RssFeed-DX27gFpg.js} +3 -3
- package/src/assets/web-panel/assets/{Search-DEF6vsy6.js → Search-DFL69osN.js} +1 -1
- package/src/assets/web-panel/assets/{Security-CHtYiKY9.js → Security-BqGeoWv-.js} +4 -4
- package/src/assets/web-panel/assets/{Services-u16lvBJN.js → Services-3z1WnEAc.js} +2 -2
- package/src/assets/web-panel/assets/{Skeleton-CGbizyDj.js → Skeleton-C_OJQQ9Z.js} +1 -1
- package/src/assets/web-panel/assets/{Skills-BZMQcAa7.js → Skills-BY7aT6Mo.js} +1 -1
- package/src/assets/web-panel/assets/{Sla-Bm-CycVi.js → Sla-BZv7DSaD.js} +1 -1
- package/src/assets/web-panel/assets/SpeechSettings-6lJKLhCn.js +1 -0
- package/src/assets/web-panel/assets/{SyncSettings-B8q1C1eC.js → SyncSettings-B6D7STlI.js} +2 -2
- package/src/assets/web-panel/assets/{Tasks-SU1pBWc-.js → Tasks-Co_FCZAO.js} +1 -1
- package/src/assets/web-panel/assets/{Templates-CyOfJzmt.js → Templates-CnY-9fgz.js} +1 -1
- package/src/assets/web-panel/assets/{Tenant-xqWSm2GP.js → Tenant-B71yXfZ8.js} +1 -1
- package/src/assets/web-panel/assets/{Terminal-D1Ttgjsi.js → Terminal-Dd_P7awo.js} +2 -2
- package/src/assets/web-panel/assets/{TimelineRenderer-Da2lYs5D.js → TimelineRenderer-CvIEMyli.js} +1 -1
- package/src/assets/web-panel/assets/{Tokens-B34-SduO.js → Tokens-DknFBGOi.js} +1 -1
- package/src/assets/web-panel/assets/{Trigger-C8zyYm4R.js → Trigger-D_4nJONB.js} +1 -1
- package/src/assets/web-panel/assets/{Trust-D1Pvqems.js → Trust-BNl21fa7.js} +1 -1
- package/src/assets/web-panel/assets/{UkeySign-Do3VVnAy.js → UkeySign-CFrCI7uK.js} +1 -1
- package/src/assets/web-panel/assets/{VideoEditing-Dz7egVIA.js → VideoEditing-BVfY6JLg.js} +1 -1
- package/src/assets/web-panel/assets/{Wallet-Dcuw-OxR.js → Wallet-Cj9CAK0J.js} +3 -3
- package/src/assets/web-panel/assets/{WebAuthn-DPlw-QsB.js → WebAuthn-DcqZlzA3.js} +3 -3
- package/src/assets/web-panel/assets/{WorkflowEditor-h4OsnU5q.js → WorkflowEditor-Dfr_dMld.js} +1 -1
- package/src/assets/web-panel/assets/{chat-eO9wEwrW.js → chat-Yv6UF0AD.js} +1 -1
- package/src/assets/web-panel/assets/{colors-34lSmOXw.js → colors-CDW_-1fs.js} +1 -1
- package/src/assets/web-panel/assets/{compact-item-CK4kEWJ4.js → compact-item-BYOQvd-6.js} +1 -1
- package/src/assets/web-panel/assets/{createContext-E0A57xed.js → createContext-BCGO0BiP.js} +1 -1
- package/src/assets/web-panel/assets/devWarning-H-kXSuf-.js +1 -0
- package/src/assets/web-panel/assets/{hasIn-BD9ZMGAl.js → hasIn-DY-70cfQ.js} +1 -1
- package/src/assets/web-panel/assets/{index-B_G_ElKO.js → index-366wfQBU.js} +1 -1
- package/src/assets/web-panel/assets/index-B0o4MeNK.js +1 -0
- package/src/assets/web-panel/assets/{index-B0rkHxKK.js → index-B9ZogJJM.js} +1 -1
- package/src/assets/web-panel/assets/{index-DrsDA_md.js → index-B9m5QAMg.js} +1 -1
- package/src/assets/web-panel/assets/{index--N0u6kTG.js → index-BBs2mv5M.js} +1 -1
- package/src/assets/web-panel/assets/{index-DiT_REby.js → index-BFv1hzF6.js} +1 -1
- package/src/assets/web-panel/assets/index-BVafOL_I.js +1 -0
- package/src/assets/web-panel/assets/{index-8qMA1DWQ.js → index-BXlEx4UH.js} +1 -1
- package/src/assets/web-panel/assets/{index-CsrKJJcX.js → index-BayRTE5w.js} +1 -1
- package/src/assets/web-panel/assets/{index-DcbgVLOH.js → index-Bb9nyts1.js} +1 -1
- package/src/assets/web-panel/assets/{index-CZkFMeWL.js → index-Bf_Va0S-.js} +1 -1
- package/src/assets/web-panel/assets/{index-Cz3unNfL.js → index-Br3wQLVY.js} +1 -1
- package/src/assets/web-panel/assets/{index-DcE1BspQ.js → index-BvK4fjkk.js} +1 -1
- package/src/assets/web-panel/assets/{index-DeXNCyQJ.js → index-C40UdtlS.js} +1 -1
- package/src/assets/web-panel/assets/{index-DrOalGut.js → index-C4UJA2ju.js} +1 -1
- package/src/assets/web-panel/assets/{index-MIg5Z8qe.js → index-CB_Iw73G.js} +1 -1
- package/src/assets/web-panel/assets/{index-DFLE2qO9.js → index-CCwWp3mT.js} +1 -1
- package/src/assets/web-panel/assets/{index-DrSAAuJj.js → index-CFa2fPCk.js} +1 -1
- package/src/assets/web-panel/assets/{index-D4bB_x_v.js → index-CIyHxV4u.js} +1 -1
- package/src/assets/web-panel/assets/{index-BmNbU2Z6.js → index-CUP-A2_h.js} +1 -1
- package/src/assets/web-panel/assets/{index-o8pYehRq.js → index-CUo27q9J.js} +3 -3
- package/src/assets/web-panel/assets/{index-BbX_Dted.js → index-CaT8trvf.js} +1 -1
- package/src/assets/web-panel/assets/{index-Brqc9Emx.js → index-CnZNbcux.js} +1 -1
- package/src/assets/web-panel/assets/{index-Da5fmOHB.js → index-Cy2NE6AO.js} +1 -1
- package/src/assets/web-panel/assets/{index-yAGBu2E0.js → index-CzeEEazr.js} +1 -1
- package/src/assets/web-panel/assets/{index-BsGmo6v1.js → index-D--TEyDj.js} +1 -1
- package/src/assets/web-panel/assets/{index-DvKcroix.js → index-DCtsjhhT.js} +1 -1
- package/src/assets/web-panel/assets/{index-DGRxt5wj.js → index-DLOf7BSz.js} +1 -1
- package/src/assets/web-panel/assets/{index-DONOUtlz.js → index-DM5c4pc-.js} +1 -1
- package/src/assets/web-panel/assets/{index-CT1_eRL-.js → index-DRFC2Qt0.js} +1 -1
- package/src/assets/web-panel/assets/{index-DpfisY1g.js → index-DT_qVaaV.js} +1 -1
- package/src/assets/web-panel/assets/{index-Cx3Jn1r0.js → index-DUDoRk9r.js} +1 -1
- package/src/assets/web-panel/assets/{index-DCn-ECvK.js → index-Dg-AQYDf.js} +1 -1
- package/src/assets/web-panel/assets/{index-Bjs90Eh9.js → index-DuIPq5MX.js} +1 -1
- package/src/assets/web-panel/assets/{index-CuSau5ya.js → index-NYVBUAVN.js} +1 -1
- package/src/assets/web-panel/assets/{index-DP-UZAQN.js → index-NaCESahy.js} +1 -1
- package/src/assets/web-panel/assets/{index-Ch175NUw.js → index-RjIMPG0u.js} +1 -1
- package/src/assets/web-panel/assets/{index-DzXjP44T.js → index-Y9akzgFO.js} +1 -1
- package/src/assets/web-panel/assets/{index-CZBaqe3d.js → index-hZ0Eyrrw.js} +1 -1
- package/src/assets/web-panel/assets/{initDefaultProps-DMTkAomF.js → initDefaultProps-CG99CcR4.js} +1 -1
- package/src/assets/web-panel/assets/{motion-Cnti1F5g.js → motion-Z7MH0_0G.js} +1 -1
- package/src/assets/web-panel/assets/{move-CGxmHUga.js → move-BX67lOdq.js} +1 -1
- package/src/assets/web-panel/assets/{mtc-parser-CuwwLoq7.js → mtc-parser-CmAbG1fE.js} +1 -1
- package/src/assets/web-panel/assets/{omit-BpdlTkPM.js → omit-DiU5tI1_.js} +1 -1
- package/src/assets/web-panel/assets/{pickAttrs-D7nWrThp.js → pickAttrs-BGfvLrYL.js} +1 -1
- package/src/assets/web-panel/assets/{placementArrow-Bhx0TV8F.js → placementArrow-CggLEgaJ.js} +1 -1
- package/src/assets/web-panel/assets/{responsiveObserve-CZ1KesZh.js → responsiveObserve-t3nlghPZ.js} +1 -1
- package/src/assets/web-panel/assets/{slide-CnldF8J6.js → slide-BkV4dL9s.js} +1 -1
- package/src/assets/web-panel/assets/{statusUtils-CZfo_GOA.js → statusUtils-qec1PUoC.js} +1 -1
- package/src/assets/web-panel/assets/{styleChecker-B2QCcAv5.js → styleChecker-ChjX6T8D.js} +1 -1
- package/src/assets/web-panel/assets/{useFlexGapSupport-DzzjIS4J.js → useFlexGapSupport-B1jLoZcM.js} +1 -1
- package/src/assets/web-panel/assets/{useFs-B_atg9M0.js → useFs-C3X53s4E.js} +1 -1
- package/src/assets/web-panel/assets/{usePersonalDataHub-DhZs3QYN.js → usePersonalDataHub-DOvbbnkZ.js} +1 -1
- package/src/assets/web-panel/assets/{vnode-DcePTYAm.js → vnode-Ie0TEVFT.js} +1 -1
- package/src/assets/web-panel/assets/{zoom-BYmlnjRk.js → zoom-CRUMVS8l.js} +1 -1
- package/src/assets/web-panel/index.html +1 -1
- package/src/command-help-index.json +3 -3
- package/src/commands/agent.js +18 -1
- package/src/commands/evolution-benchmark.js +72 -0
- package/src/commands/evolution.js +2 -0
- package/src/commands/governed-skill-marketplace.js +142 -0
- package/src/commands/marketplace.js +4 -1
- package/src/commands/serve.js +10 -0
- package/src/commands/skill.js +3 -0
- package/src/data/changelog.json +26 -0
- package/src/gateways/ws/ws-agent-handler.js +59 -2
- package/src/gateways/ws/ws-server.js +2 -0
- package/src/harness/golden-transcript.js +1 -0
- package/src/harness/prompt-compressor.js +51 -5
- package/src/harness/provider-backed-compaction.js +28 -1
- package/src/harness/remote-session-registry.js +15 -3
- package/src/index.js +20 -2
- package/src/lazy-dispatch.js +6 -0
- package/src/lib/advisor-runtime.js +55 -2
- package/src/lib/app-server/cli-agent-kernel-adapter.js +4 -0
- package/src/lib/app-server/graph-runtime.js +32 -0
- package/src/lib/app-server/server.js +45 -1
- package/src/lib/app-server/websocket-transport.js +2 -0
- package/src/lib/autonomous-agent.js +63 -13
- package/src/lib/cowork/ab-comparator-cli.js +4 -3
- package/src/lib/cowork/debate-review-cli.js +4 -3
- package/src/lib/cowork/decision-kb-cli.js +5 -0
- package/src/lib/cowork-adapter.js +38 -16
- package/src/lib/evolution/agent-evolution-ingress.js +95 -15
- package/src/lib/evolution/agent-evolution-runtime-composition.js +82 -0
- package/src/lib/evolution/agent-evolution-session-lifecycle.js +46 -0
- package/src/lib/evolution/agent-model-projection.js +217 -0
- package/src/lib/evolution/bounded-descriptor-read.js +29 -0
- package/src/lib/evolution/controlled-skill-pilot-ledger-adapter.js +551 -0
- package/src/lib/evolution/controlled-skill-production-pilot.js +308 -18
- package/src/lib/evolution/evidence-backed-wiki-maintainer.js +10 -1
- package/src/lib/evolution/evidence-json-text.js +236 -0
- package/src/lib/evolution/evolution-artifact-ports.js +193 -21
- package/src/lib/evolution/evolution-deployment-loader.js +163 -2
- package/src/lib/evolution/evolution-eval-child-evidence-ledger-adapter.js +373 -0
- package/src/lib/evolution/evolution-eval-gate.js +14 -1
- package/src/lib/evolution/evolution-eval-process-supervisor-worker.mjs +14 -0
- package/src/lib/evolution/evolution-eval-process-supervisor.js +607 -0
- package/src/lib/evolution/evolution-evidence-artifact-adapter.js +14 -1
- package/src/lib/evolution/evolution-evidence-projector.js +240 -37
- package/src/lib/evolution/evolution-file-witness.js +153 -30
- package/src/lib/evolution/evolution-ledger-ports.js +1027 -66
- package/src/lib/evolution/evolution-ledger.js +66 -2
- package/src/lib/evolution/evolution-raw-crypto-shred.js +29 -15
- package/src/lib/evolution/evolution-raw-deletion-ledger-adapter.js +865 -0
- package/src/lib/evolution/evolution-release-train-domain-stages.js +769 -0
- package/src/lib/evolution/evolution-release-train-stage-output-ledger-adapter.js +333 -0
- package/src/lib/evolution/evolution-release-train.js +54 -6
- package/src/lib/evolution/evolution-workbench-batch-executor.js +101 -144
- package/src/lib/evolution/evolution-workbench-control-ports.js +203 -0
- package/src/lib/evolution/evolution-workbench-file-resources.js +403 -0
- package/src/lib/evolution/evolution-workbench-projection.js +134 -26
- package/src/lib/evolution/evolution-workbench-registry-source.js +482 -0
- package/src/lib/evolution/evolution-workbench-review-ledger-adapter.js +823 -0
- package/src/lib/evolution/evolution-workbench-review-protocol.js +157 -0
- package/src/lib/evolution/evolution-workbench-rollback-authorization.js +57 -0
- package/src/lib/evolution/evolution-workbench-rollback-ledger-adapter.js +1016 -0
- package/src/lib/evolution/evolution-workbench-runtime.js +133 -0
- package/src/lib/evolution/evolution-workbench-version-control.js +70 -36
- package/src/lib/evolution/evolvable-artifact-ledger-adapter.js +48 -0
- package/src/lib/evolution/governed-knowledge-candidate-rejection.js +343 -0
- package/src/lib/evolution/governed-knowledge-dependency-authority.js +227 -44
- package/src/lib/evolution/governed-knowledge-dependency-ledger-executor.js +95 -83
- package/src/lib/evolution/governed-knowledge-record.js +148 -0
- package/src/lib/evolution/governed-knowledge-revocation-record.js +135 -0
- package/src/lib/evolution/governed-knowledge-skill-rollback.js +475 -0
- package/src/lib/evolution/governed-knowledge-sync.js +17 -94
- package/src/lib/evolution/governed-knowledge-wiki-tombstone.js +462 -0
- package/src/lib/evolution/governed-skill-marketplace-badge.js +208 -0
- package/src/lib/evolution/governed-skill-marketplace-candidate.js +330 -0
- package/src/lib/evolution/governed-skill-marketplace-cli-host.js +308 -0
- package/src/lib/evolution/governed-skill-marketplace-ledger-adapter.js +420 -0
- package/src/lib/evolution/governed-skill-marketplace.js +288 -5
- package/src/lib/evolution/governed-wiki-pruning-journal.js +302 -0
- package/src/lib/evolution/governed-wiki-pruning-ledger-adapter.js +459 -0
- package/src/lib/evolution/governed-wiki-pruning-maintenance.js +576 -0
- package/src/lib/evolution/governed-wiki-pruning-plan-authority.js +169 -0
- package/src/lib/evolution/governed-wiki-pruning-raw-shred.js +207 -0
- package/src/lib/evolution/governed-wiki-pruning-retrieval.js +587 -0
- package/src/lib/evolution/governed-wiki-pruning-runtime.js +153 -0
- package/src/lib/evolution/governed-wiki-pruning-skill-rollback.js +360 -0
- package/src/lib/evolution/governed-wiki-pruning.js +322 -143
- package/src/lib/evolution/independent-skill-revocation-source.js +231 -0
- package/src/lib/evolution/knowledge-wiki-source-admission.js +124 -0
- package/src/lib/evolution/knowledge-wiki-source-provenance.js +359 -0
- package/src/lib/evolution/progressive-canary-external-watchdog.js +578 -0
- package/src/lib/evolution/progressive-canary-traffic-worker.js +628 -0
- package/src/lib/evolution/progressive-canary-watchdog-file-store.js +285 -0
- package/src/lib/evolution/progressive-canary-watchdog-node-pki.js +265 -0
- package/src/lib/evolution/skill-candidate-registry.js +22 -0
- package/src/lib/evolution/skill-promotion-controller.js +25 -0
- package/src/lib/evolution/skill-promotion-review-ledger-adapter.js +100 -0
- package/src/lib/evolution/skill-registry-transition-ledger-adapter.js +131 -2
- package/src/lib/evolution/skill-release-registry.js +25 -4
- package/src/lib/evolution/skill-retrieval-revocation-authority.js +361 -0
- package/src/lib/evolution/skill-retrieval-revocation-ledger-adapter.js +346 -0
- package/src/lib/evolution/skill-revocation-propagation.js +467 -0
- package/src/lib/evolution/skill-target-matrix-eval.js +162 -11
- package/src/lib/evolution/skill-wiki-reconciliation.js +985 -0
- package/src/lib/evolution/skill-writer-inventory-manifest.js +8 -6
- package/src/lib/evolution/statistical-progressive-canary.js +165 -3
- package/src/lib/evolution/structured-memory-agent-control-plane.js +120 -0
- package/src/lib/evolution/structured-memory-authority-ledger-adapter.js +5 -1
- package/src/lib/evolution/structured-memory-promotion-receipt-writer.js +126 -0
- package/src/lib/evolution/wiki-informed-skill-proposer.js +127 -21
- package/src/lib/evolution/wiki-maintainer-ledger-adapter.js +760 -100
- package/src/lib/evolution/wiki-revision-protocol.js +120 -0
- package/src/lib/evolution/wiki-skill-proposal-ledger-adapter.js +307 -0
- package/src/lib/evolution/wiki-target-tombstone-revision.js +101 -0
- package/src/lib/evolution/wikiskill-benchmark-cli-host.js +178 -0
- package/src/lib/evolution/wikiskill-benchmark-execution-host.js +702 -0
- package/src/lib/evolution/wikiskill-benchmark-ledger-adapter.js +613 -0
- package/src/lib/evolution/wikiskill-benchmark.js +80 -16
- package/src/lib/goal-assess.js +17 -10
- package/src/lib/interactive-planner.js +9 -1
- package/src/lib/iteration-budget.js +16 -2
- package/src/lib/micro-compact.js +4 -1
- package/src/lib/model-failure-policy.js +21 -0
- package/src/lib/process-execution-broker/index.js +1 -0
- package/src/lib/process-execution-broker/windows-sandbox-helper.dll +0 -0
- package/src/lib/process-execution-broker/windows-sandbox-helper.exe +0 -0
- package/src/lib/process-execution-broker/windows-sandbox.cs +33 -15
- package/src/lib/read-file-page.js +191 -0
- package/src/lib/runnable-provider.js +2 -1
- package/src/lib/skill-retrieval-router.js +22 -1
- package/src/repl/agent-repl.js +127 -33
- package/src/runtime/agent-core.js +163 -73
- package/src/runtime/agent-runtime.js +43 -0
- package/src/runtime/coding-agent-contract-shared.cjs +7 -1
- package/src/runtime/fallback-model.js +143 -62
- package/src/runtime/headless-runner.js +54 -10
- package/src/runtime/headless-stream.js +50 -6
- package/src/runtime/runtime-factory.js +41 -2
- package/src/assets/web-panel/assets/Projects-CvtU5peJ.js +0 -1
- package/src/assets/web-panel/assets/SpeechSettings-BudpA5kr.js +0 -1
- package/src/assets/web-panel/assets/devWarning-CF3xafX2.js +0 -1
- package/src/assets/web-panel/assets/index-C907rPwd.js +0 -1
- package/src/assets/web-panel/assets/index-wueRSK2d.js +0 -1
|
@@ -7,7 +7,13 @@ export const EVOLUTION_DEPLOYMENT_DESCRIPTOR_SCHEMA =
|
|
|
7
7
|
"chainlesschain.evolution-deployment-descriptor/v1";
|
|
8
8
|
|
|
9
9
|
const DIGEST = /^sha256:[a-f0-9]{64}$/u;
|
|
10
|
-
const SUPPORTED_COMMANDS = new Set([
|
|
10
|
+
const SUPPORTED_COMMANDS = new Set([
|
|
11
|
+
"agent",
|
|
12
|
+
"desktop",
|
|
13
|
+
"evolution",
|
|
14
|
+
"marketplace",
|
|
15
|
+
"serve",
|
|
16
|
+
]);
|
|
11
17
|
|
|
12
18
|
function canonical(value) {
|
|
13
19
|
if (value === null || typeof value !== "object") return JSON.stringify(value);
|
|
@@ -111,17 +117,84 @@ function dependencies(value, commandName) {
|
|
|
111
117
|
|
|
112
118
|
async function loadBuiltInFactories(commandName) {
|
|
113
119
|
const factories = {};
|
|
120
|
+
if (commandName === "marketplace" || commandName === "desktop") {
|
|
121
|
+
const [
|
|
122
|
+
{ createGovernedSkillMarketplaceCliHost },
|
|
123
|
+
{ createGovernedSkillMarketplaceLedgerAdapter },
|
|
124
|
+
{ createGovernedSkillMarketplaceCandidateInstaller },
|
|
125
|
+
] = await Promise.all([
|
|
126
|
+
import("./governed-skill-marketplace-cli-host.js"),
|
|
127
|
+
import("./governed-skill-marketplace-ledger-adapter.js"),
|
|
128
|
+
import("./governed-skill-marketplace-candidate.js"),
|
|
129
|
+
]);
|
|
130
|
+
factories.createGovernedSkillMarketplaceCliHost =
|
|
131
|
+
createGovernedSkillMarketplaceCliHost;
|
|
132
|
+
factories.createGovernedSkillMarketplaceLedgerAdapter =
|
|
133
|
+
createGovernedSkillMarketplaceLedgerAdapter;
|
|
134
|
+
factories.createGovernedSkillMarketplaceCandidateInstaller =
|
|
135
|
+
createGovernedSkillMarketplaceCandidateInstaller;
|
|
136
|
+
}
|
|
114
137
|
if (commandName === "evolution" || commandName === "serve") {
|
|
115
138
|
const [
|
|
116
139
|
{ createEvolutionWorkbenchCliHost },
|
|
140
|
+
{ createEvolutionWorkbenchReviewRuntime },
|
|
141
|
+
{ createEvolutionWorkbenchRollbackRuntime },
|
|
142
|
+
{ createEvolutionWorkbenchRegistrySource },
|
|
143
|
+
{ createEvolutionWorkbenchRuntime },
|
|
144
|
+
{ openEvolutionWorkbenchFileResources },
|
|
145
|
+
{ createEvolutionWorkbenchControlPorts },
|
|
117
146
|
{ createGovernedKnowledgeReviewHost },
|
|
147
|
+
{ createWikiSkillBenchmarkCliHost },
|
|
148
|
+
{
|
|
149
|
+
createWikiSkillBenchmarkDatasetProvider,
|
|
150
|
+
createWikiSkillBenchmarkExecutionManifest,
|
|
151
|
+
createWikiSkillBenchmarkGrader,
|
|
152
|
+
createWikiSkillBenchmarkReportAttestor,
|
|
153
|
+
createWikiSkillBenchmarkRunner,
|
|
154
|
+
},
|
|
155
|
+
{ createWikiSkillBenchmarkLedgerAdapter },
|
|
156
|
+
{ createEvolutionEvalProcessSupervisor },
|
|
118
157
|
] = await Promise.all([
|
|
119
158
|
import("./evolution-workbench-cli-host.js"),
|
|
159
|
+
import("./evolution-workbench-review-ledger-adapter.js"),
|
|
160
|
+
import("./evolution-workbench-rollback-ledger-adapter.js"),
|
|
161
|
+
import("./evolution-workbench-registry-source.js"),
|
|
162
|
+
import("./evolution-workbench-runtime.js"),
|
|
163
|
+
import("./evolution-workbench-file-resources.js"),
|
|
164
|
+
import("./evolution-workbench-control-ports.js"),
|
|
120
165
|
import("./governed-knowledge-review-host.js"),
|
|
166
|
+
import("./wikiskill-benchmark-cli-host.js"),
|
|
167
|
+
import("./wikiskill-benchmark-execution-host.js"),
|
|
168
|
+
import("./wikiskill-benchmark-ledger-adapter.js"),
|
|
169
|
+
import("./evolution-eval-process-supervisor.js"),
|
|
121
170
|
]);
|
|
122
171
|
factories.createEvolutionWorkbenchCliHost = createEvolutionWorkbenchCliHost;
|
|
172
|
+
factories.createEvolutionWorkbenchReviewRuntime =
|
|
173
|
+
createEvolutionWorkbenchReviewRuntime;
|
|
174
|
+
factories.createEvolutionWorkbenchRollbackRuntime =
|
|
175
|
+
createEvolutionWorkbenchRollbackRuntime;
|
|
176
|
+
factories.createEvolutionWorkbenchRegistrySource =
|
|
177
|
+
createEvolutionWorkbenchRegistrySource;
|
|
178
|
+
factories.createEvolutionWorkbenchRuntime = createEvolutionWorkbenchRuntime;
|
|
179
|
+
factories.openEvolutionWorkbenchFileResources =
|
|
180
|
+
openEvolutionWorkbenchFileResources;
|
|
181
|
+
factories.createEvolutionWorkbenchControlPorts =
|
|
182
|
+
createEvolutionWorkbenchControlPorts;
|
|
123
183
|
factories.createGovernedKnowledgeReviewHost =
|
|
124
184
|
createGovernedKnowledgeReviewHost;
|
|
185
|
+
factories.createWikiSkillBenchmarkCliHost = createWikiSkillBenchmarkCliHost;
|
|
186
|
+
factories.createWikiSkillBenchmarkDatasetProvider =
|
|
187
|
+
createWikiSkillBenchmarkDatasetProvider;
|
|
188
|
+
factories.createWikiSkillBenchmarkExecutionManifest =
|
|
189
|
+
createWikiSkillBenchmarkExecutionManifest;
|
|
190
|
+
factories.createWikiSkillBenchmarkGrader = createWikiSkillBenchmarkGrader;
|
|
191
|
+
factories.createWikiSkillBenchmarkReportAttestor =
|
|
192
|
+
createWikiSkillBenchmarkReportAttestor;
|
|
193
|
+
factories.createWikiSkillBenchmarkRunner = createWikiSkillBenchmarkRunner;
|
|
194
|
+
factories.createWikiSkillBenchmarkLedgerAdapter =
|
|
195
|
+
createWikiSkillBenchmarkLedgerAdapter;
|
|
196
|
+
factories.createEvolutionEvalProcessSupervisor =
|
|
197
|
+
createEvolutionEvalProcessSupervisor;
|
|
125
198
|
}
|
|
126
199
|
if (commandName === "agent" || commandName === "serve") {
|
|
127
200
|
const { createAgentEvolutionRuntimeComposition } =
|
|
@@ -132,6 +205,60 @@ async function loadBuiltInFactories(commandName) {
|
|
|
132
205
|
return Object.freeze(factories);
|
|
133
206
|
}
|
|
134
207
|
|
|
208
|
+
function bindFactoriesToModule(factories, moduleDigest) {
|
|
209
|
+
const result = { ...factories };
|
|
210
|
+
const providerFactories = [
|
|
211
|
+
"createEvolutionWorkbenchReviewRuntime",
|
|
212
|
+
"createEvolutionWorkbenchRollbackRuntime",
|
|
213
|
+
"createEvolutionWorkbenchRegistrySource",
|
|
214
|
+
"createEvolutionWorkbenchRuntime",
|
|
215
|
+
"openEvolutionWorkbenchFileResources",
|
|
216
|
+
"createEvolutionWorkbenchControlPorts",
|
|
217
|
+
"createWikiSkillBenchmarkDatasetProvider",
|
|
218
|
+
"createWikiSkillBenchmarkGrader",
|
|
219
|
+
"createWikiSkillBenchmarkReportAttestor",
|
|
220
|
+
"createWikiSkillBenchmarkRunner",
|
|
221
|
+
];
|
|
222
|
+
for (const name of providerFactories) {
|
|
223
|
+
if (typeof factories[name] !== "function") continue;
|
|
224
|
+
result[name] = (options = {}) => {
|
|
225
|
+
if (options?.descriptor?.handlerArtifactDigest !== moduleDigest)
|
|
226
|
+
throw new Error(
|
|
227
|
+
`${name} handlerArtifactDigest must equal the authenticated deployment module digest`,
|
|
228
|
+
);
|
|
229
|
+
return factories[name](options);
|
|
230
|
+
};
|
|
231
|
+
}
|
|
232
|
+
if (
|
|
233
|
+
typeof factories.createWikiSkillBenchmarkExecutionManifest === "function"
|
|
234
|
+
) {
|
|
235
|
+
result.createWikiSkillBenchmarkExecutionManifest = (input = {}) => {
|
|
236
|
+
for (const authority of [
|
|
237
|
+
"datasetProvider",
|
|
238
|
+
"runner",
|
|
239
|
+
"grader",
|
|
240
|
+
"reportAttestor",
|
|
241
|
+
]) {
|
|
242
|
+
if (input?.[authority]?.handlerArtifactDigest !== moduleDigest)
|
|
243
|
+
throw new Error(
|
|
244
|
+
`benchmark ${authority} handlerArtifactDigest must equal the authenticated deployment module digest`,
|
|
245
|
+
);
|
|
246
|
+
}
|
|
247
|
+
return factories.createWikiSkillBenchmarkExecutionManifest(input);
|
|
248
|
+
};
|
|
249
|
+
}
|
|
250
|
+
if (typeof factories.createEvolutionEvalProcessSupervisor === "function") {
|
|
251
|
+
result.createEvolutionEvalProcessSupervisor = (options = {}) => {
|
|
252
|
+
if (options?.authorityDescriptor?.handlerArtifactDigest !== moduleDigest)
|
|
253
|
+
throw new Error(
|
|
254
|
+
"process Eval supervisor handlerArtifactDigest must equal the authenticated deployment module digest",
|
|
255
|
+
);
|
|
256
|
+
return factories.createEvolutionEvalProcessSupervisor(options);
|
|
257
|
+
};
|
|
258
|
+
}
|
|
259
|
+
return Object.freeze(result);
|
|
260
|
+
}
|
|
261
|
+
|
|
135
262
|
export async function loadEvolutionDeploymentCommandDependencies(
|
|
136
263
|
commandName,
|
|
137
264
|
{
|
|
@@ -139,6 +266,7 @@ export async function loadEvolutionDeploymentCommandDependencies(
|
|
|
139
266
|
read = readFile,
|
|
140
267
|
resolveRealPath = realpath,
|
|
141
268
|
importModule = (url) => import(url),
|
|
269
|
+
additionalFactories = {},
|
|
142
270
|
} = {},
|
|
143
271
|
) {
|
|
144
272
|
if (!SUPPORTED_COMMANDS.has(commandName)) return null;
|
|
@@ -195,12 +323,45 @@ export async function loadEvolutionDeploymentCommandDependencies(
|
|
|
195
323
|
throw new Error(
|
|
196
324
|
"evolution deployment module must export createChainlessChainCommandDependencies",
|
|
197
325
|
);
|
|
326
|
+
const builtInFactories = bindFactoriesToModule(
|
|
327
|
+
await loadBuiltInFactories(commandName),
|
|
328
|
+
descriptor.moduleDigest,
|
|
329
|
+
);
|
|
330
|
+
if (
|
|
331
|
+
!additionalFactories ||
|
|
332
|
+
typeof additionalFactories !== "object" ||
|
|
333
|
+
Array.isArray(additionalFactories) ||
|
|
334
|
+
utilTypes.isProxy(additionalFactories)
|
|
335
|
+
) {
|
|
336
|
+
throw new TypeError(
|
|
337
|
+
"additional evolution deployment factories are invalid",
|
|
338
|
+
);
|
|
339
|
+
}
|
|
340
|
+
const additionalFactoryEntries = Object.entries(additionalFactories);
|
|
341
|
+
if (additionalFactoryEntries.length > 0 && commandName !== "desktop") {
|
|
342
|
+
throw new Error(
|
|
343
|
+
"additional evolution deployment factories are reserved for desktop",
|
|
344
|
+
);
|
|
345
|
+
}
|
|
346
|
+
if (
|
|
347
|
+
additionalFactoryEntries.some(
|
|
348
|
+
([name, factory]) =>
|
|
349
|
+
Object.hasOwn(builtInFactories, name) || typeof factory !== "function",
|
|
350
|
+
)
|
|
351
|
+
) {
|
|
352
|
+
throw new TypeError(
|
|
353
|
+
"additional evolution deployment factories are invalid",
|
|
354
|
+
);
|
|
355
|
+
}
|
|
198
356
|
return dependencies(
|
|
199
357
|
await loaded.createChainlessChainCommandDependencies(
|
|
200
358
|
Object.freeze({
|
|
201
359
|
commandName,
|
|
202
360
|
descriptor: Object.freeze({ ...descriptor }),
|
|
203
|
-
factories:
|
|
361
|
+
factories: Object.freeze({
|
|
362
|
+
...builtInFactories,
|
|
363
|
+
...additionalFactories,
|
|
364
|
+
}),
|
|
204
365
|
}),
|
|
205
366
|
),
|
|
206
367
|
commandName,
|
|
@@ -0,0 +1,373 @@
|
|
|
1
|
+
import {
|
|
2
|
+
EVOLUTION_DURABLE_ARTIFACT_RECORD_SCHEMA,
|
|
3
|
+
isEvolutionLedgerArtifactResolver,
|
|
4
|
+
} from "./evolution-artifact-ports.js";
|
|
5
|
+
import {
|
|
6
|
+
EVOLUTION_EVAL_ATTESTATION_PURPOSES,
|
|
7
|
+
EVOLUTION_EVAL_RECEIPT_SCHEMA,
|
|
8
|
+
EVOLUTION_EVAL_TARGET_INVOCATION_SCHEMA,
|
|
9
|
+
EVOLUTION_EVAL_TARGET_REVOCATION_SCHEMA,
|
|
10
|
+
computeEvolutionEvalReceiptDigest,
|
|
11
|
+
computeEvolutionEvalSignedEvidenceDigest,
|
|
12
|
+
} from "./evolution-eval-gate.js";
|
|
13
|
+
import {
|
|
14
|
+
EVOLUTION_ARTIFACT_RESOLUTION_SCHEMA,
|
|
15
|
+
EVOLUTION_LEDGER_DOMAIN_EVENT_SCHEMA,
|
|
16
|
+
} from "./evolution-ledger.js";
|
|
17
|
+
|
|
18
|
+
export const EVOLUTION_EVAL_CHILD_EVIDENCE_RECORD_SCHEMA =
|
|
19
|
+
"chainlesschain.evolution-eval-child-evidence-record/v1";
|
|
20
|
+
export const EVOLUTION_EVAL_CHILD_EVIDENCE_RESOLUTION_SCHEMA =
|
|
21
|
+
"chainlesschain.evolution-eval-child-evidence-resolution/v1";
|
|
22
|
+
export const EVOLUTION_EVAL_CHILD_EVIDENCE_EVENT_TYPE =
|
|
23
|
+
"evolution.eval-child-evidence.retained";
|
|
24
|
+
export const EVOLUTION_EVAL_CHILD_EVIDENCE_CORRUPT_CODE =
|
|
25
|
+
"CC_EVOLUTION_EVAL_CHILD_EVIDENCE_CORRUPT";
|
|
26
|
+
|
|
27
|
+
const ARTIFACT_TYPE = "evolution-eval-child-evidence";
|
|
28
|
+
const DIGEST = /^sha256:[a-f0-9]{64}$/u;
|
|
29
|
+
const CHILD_EVIDENCE_STORES = new WeakSet();
|
|
30
|
+
const KINDS = Object.freeze({
|
|
31
|
+
"gate-receipt": Object.freeze({
|
|
32
|
+
purpose: null,
|
|
33
|
+
schema: EVOLUTION_EVAL_RECEIPT_SCHEMA,
|
|
34
|
+
}),
|
|
35
|
+
invocation: Object.freeze({
|
|
36
|
+
purpose: EVOLUTION_EVAL_ATTESTATION_PURPOSES.targetInvocation,
|
|
37
|
+
schema: EVOLUTION_EVAL_TARGET_INVOCATION_SCHEMA,
|
|
38
|
+
}),
|
|
39
|
+
revocation: Object.freeze({
|
|
40
|
+
purpose: EVOLUTION_EVAL_ATTESTATION_PURPOSES.targetRevocation,
|
|
41
|
+
schema: EVOLUTION_EVAL_TARGET_REVOCATION_SCHEMA,
|
|
42
|
+
}),
|
|
43
|
+
});
|
|
44
|
+
|
|
45
|
+
function requiredString(value, label) {
|
|
46
|
+
if (typeof value !== "string" || value.trim() === "")
|
|
47
|
+
throw new TypeError(`${label} is required`);
|
|
48
|
+
return value;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
function capture(owner, method, label = method) {
|
|
52
|
+
if (typeof owner?.[method] !== "function")
|
|
53
|
+
throw new TypeError(`${label} port is required`);
|
|
54
|
+
return (...args) => Reflect.apply(owner[method], owner, args);
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
function canonical(value) {
|
|
58
|
+
if (value === null || typeof value !== "object") return JSON.stringify(value);
|
|
59
|
+
if (Array.isArray(value)) return `[${value.map(canonical).join(",")}]`;
|
|
60
|
+
return `{${Object.keys(value)
|
|
61
|
+
.sort()
|
|
62
|
+
.map((key) => `${JSON.stringify(key)}:${canonical(value[key])}`)
|
|
63
|
+
.join(",")}}`;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
function corrupt(message) {
|
|
67
|
+
const error = new Error(message);
|
|
68
|
+
error.code = EVOLUTION_EVAL_CHILD_EVIDENCE_CORRUPT_CODE;
|
|
69
|
+
throw error;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
function descriptor(input) {
|
|
73
|
+
if (!Number.isSafeInteger(input?.revision) || input.revision < 1)
|
|
74
|
+
throw new TypeError("revision must be a positive integer");
|
|
75
|
+
if (!DIGEST.test(input?.handlerArtifactDigest || ""))
|
|
76
|
+
throw new TypeError("handlerArtifactDigest must be sha256-bound");
|
|
77
|
+
return Object.freeze({
|
|
78
|
+
tenantId: requiredString(input.tenantId, "tenantId"),
|
|
79
|
+
artifactTenantId: requiredString(
|
|
80
|
+
input.artifactTenantId,
|
|
81
|
+
"artifactTenantId",
|
|
82
|
+
),
|
|
83
|
+
streamId: requiredString(input.streamId, "streamId"),
|
|
84
|
+
audience: requiredString(input.audience, "audience"),
|
|
85
|
+
purpose: requiredString(input.purpose, "purpose"),
|
|
86
|
+
authorityId: requiredString(input.authorityId, "authorityId"),
|
|
87
|
+
revision: input.revision,
|
|
88
|
+
handlerArtifactDigest: input.handlerArtifactDigest,
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
function storeDescriptor(input) {
|
|
93
|
+
if (!Number.isSafeInteger(input?.revision) || input.revision < 1)
|
|
94
|
+
throw new TypeError("child evidence store revision must be positive");
|
|
95
|
+
if (!DIGEST.test(input?.handlerArtifactDigest || ""))
|
|
96
|
+
throw new TypeError("child evidence store handler digest is invalid");
|
|
97
|
+
return Object.freeze({
|
|
98
|
+
tenantId: requiredString(input.tenantId, "child evidence store tenantId"),
|
|
99
|
+
streamId: requiredString(input.streamId, "child evidence store streamId"),
|
|
100
|
+
authorityId: requiredString(
|
|
101
|
+
input.authorityId,
|
|
102
|
+
"child evidence store authorityId",
|
|
103
|
+
),
|
|
104
|
+
revision: input.revision,
|
|
105
|
+
handlerArtifactDigest: input.handlerArtifactDigest,
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
function captureEvidence(kind, evidence, expectedDigest) {
|
|
110
|
+
const policy = KINDS[kind];
|
|
111
|
+
if (!policy) throw new TypeError("child evidence kind is invalid");
|
|
112
|
+
if (!evidence || typeof evidence !== "object" || Array.isArray(evidence))
|
|
113
|
+
throw new TypeError("child evidence must be a record");
|
|
114
|
+
const captured = Object.freeze(structuredClone(evidence));
|
|
115
|
+
if (captured.schema !== policy.schema)
|
|
116
|
+
throw new TypeError("child evidence schema does not match its kind");
|
|
117
|
+
const receiptDigest =
|
|
118
|
+
kind === "gate-receipt"
|
|
119
|
+
? computeEvolutionEvalReceiptDigest(captured)
|
|
120
|
+
: computeEvolutionEvalSignedEvidenceDigest(captured, policy.purpose);
|
|
121
|
+
if (kind === "gate-receipt" && captured.receiptDigest !== receiptDigest)
|
|
122
|
+
throw new TypeError("Gate child receipt digest is invalid");
|
|
123
|
+
if (expectedDigest !== undefined && receiptDigest !== expectedDigest)
|
|
124
|
+
throw new TypeError("child evidence digest does not match its bytes");
|
|
125
|
+
return Object.freeze({ captured, receiptDigest });
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
export class EvolutionEvalChildEvidenceLedgerAdapter {
|
|
129
|
+
constructor({
|
|
130
|
+
descriptor: input,
|
|
131
|
+
artifactPorts,
|
|
132
|
+
ledger,
|
|
133
|
+
ledgerArtifactResolver,
|
|
134
|
+
now = Date.now,
|
|
135
|
+
} = {}) {
|
|
136
|
+
this.descriptor = descriptor(input);
|
|
137
|
+
this._put = capture(artifactPorts, "putCanonical");
|
|
138
|
+
this._read = capture(ledger, "read");
|
|
139
|
+
this._verifyLedger = capture(ledger, "verify");
|
|
140
|
+
this._append = capture(ledger, "appendDomainEvent");
|
|
141
|
+
if (!isEvolutionLedgerArtifactResolver(ledgerArtifactResolver))
|
|
142
|
+
throw new TypeError(
|
|
143
|
+
"a branded EvolutionArtifactPorts ledger resolver is required",
|
|
144
|
+
);
|
|
145
|
+
if (typeof now !== "function")
|
|
146
|
+
throw new TypeError("now must be a function");
|
|
147
|
+
this._resolveArtifact = ledgerArtifactResolver;
|
|
148
|
+
this._now = now;
|
|
149
|
+
CHILD_EVIDENCE_STORES.add(this);
|
|
150
|
+
Object.freeze(this);
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
_events() {
|
|
154
|
+
const events = this._read();
|
|
155
|
+
if (!Array.isArray(events))
|
|
156
|
+
corrupt("EvolutionLedger did not return events");
|
|
157
|
+
return events.filter(
|
|
158
|
+
(event) =>
|
|
159
|
+
event.schema === EVOLUTION_LEDGER_DOMAIN_EVENT_SCHEMA &&
|
|
160
|
+
event.type === EVOLUTION_EVAL_CHILD_EVIDENCE_EVENT_TYPE &&
|
|
161
|
+
event.tenantId === this.descriptor.tenantId &&
|
|
162
|
+
event.correlationId === this.descriptor.streamId,
|
|
163
|
+
);
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
_resolveEvent(event) {
|
|
167
|
+
if (
|
|
168
|
+
event.artifactTenantId !== this.descriptor.artifactTenantId ||
|
|
169
|
+
event.decision !== "accepted" ||
|
|
170
|
+
event.skillName !== "evolution-eval" ||
|
|
171
|
+
!Array.isArray(event.sourceRefs) ||
|
|
172
|
+
event.sourceRefs.length !== 0
|
|
173
|
+
) {
|
|
174
|
+
corrupt("child evidence ledger event binding is invalid");
|
|
175
|
+
}
|
|
176
|
+
const identity = this._verifyLedger();
|
|
177
|
+
const resolution = this._resolveArtifact({
|
|
178
|
+
epoch: identity.epoch,
|
|
179
|
+
ledgerId: identity.ledgerId,
|
|
180
|
+
ref: event.subjectRef,
|
|
181
|
+
tenantId: this.descriptor.artifactTenantId,
|
|
182
|
+
});
|
|
183
|
+
if (
|
|
184
|
+
resolution?.schema !== EVOLUTION_ARTIFACT_RESOLUTION_SCHEMA ||
|
|
185
|
+
resolution.authenticated !== true ||
|
|
186
|
+
resolution.found !== true ||
|
|
187
|
+
resolution.ref !== event.subjectRef.ref ||
|
|
188
|
+
resolution.digest !== event.subjectRef.digest ||
|
|
189
|
+
!Buffer.isBuffer(resolution.bytes)
|
|
190
|
+
) {
|
|
191
|
+
corrupt("child evidence artifact resolution is invalid");
|
|
192
|
+
}
|
|
193
|
+
let durableRecord;
|
|
194
|
+
try {
|
|
195
|
+
durableRecord = JSON.parse(resolution.bytes.toString("utf8"));
|
|
196
|
+
} catch {
|
|
197
|
+
corrupt("child evidence artifact is not JSON");
|
|
198
|
+
}
|
|
199
|
+
if (
|
|
200
|
+
durableRecord?.schema !== EVOLUTION_DURABLE_ARTIFACT_RECORD_SCHEMA ||
|
|
201
|
+
durableRecord.tenantId !== this.descriptor.artifactTenantId ||
|
|
202
|
+
durableRecord.audience !== this.descriptor.audience ||
|
|
203
|
+
durableRecord.purpose !== this.descriptor.purpose ||
|
|
204
|
+
durableRecord.retention !== "ledger" ||
|
|
205
|
+
durableRecord.type !== ARTIFACT_TYPE
|
|
206
|
+
) {
|
|
207
|
+
corrupt("child evidence durable record binding is invalid");
|
|
208
|
+
}
|
|
209
|
+
const value = durableRecord.value;
|
|
210
|
+
if (
|
|
211
|
+
value?.schema !== EVOLUTION_EVAL_CHILD_EVIDENCE_RECORD_SCHEMA ||
|
|
212
|
+
value.tenantId !== this.descriptor.tenantId ||
|
|
213
|
+
value.streamId !== this.descriptor.streamId
|
|
214
|
+
) {
|
|
215
|
+
corrupt("child evidence record scope is invalid");
|
|
216
|
+
}
|
|
217
|
+
const verified = captureEvidence(
|
|
218
|
+
value.kind,
|
|
219
|
+
value.evidence,
|
|
220
|
+
value.receiptDigest,
|
|
221
|
+
);
|
|
222
|
+
if (
|
|
223
|
+
event.eventId !==
|
|
224
|
+
`${EVOLUTION_EVAL_CHILD_EVIDENCE_EVENT_TYPE}.${verified.receiptDigest.slice(7)}`
|
|
225
|
+
) {
|
|
226
|
+
corrupt("child evidence event identity is invalid");
|
|
227
|
+
}
|
|
228
|
+
return Object.freeze({
|
|
229
|
+
kind: value.kind,
|
|
230
|
+
evidence: verified.captured,
|
|
231
|
+
receiptDigest: verified.receiptDigest,
|
|
232
|
+
event,
|
|
233
|
+
});
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
async retain({ kind, evidence, receiptDigest } = {}) {
|
|
237
|
+
const verified = captureEvidence(kind, evidence, receiptDigest);
|
|
238
|
+
const eventId = `${EVOLUTION_EVAL_CHILD_EVIDENCE_EVENT_TYPE}.${verified.receiptDigest.slice(7)}`;
|
|
239
|
+
const existing = this._events().filter(
|
|
240
|
+
(event) => event.eventId === eventId,
|
|
241
|
+
);
|
|
242
|
+
if (existing.length > 1) corrupt("child evidence event is ambiguous");
|
|
243
|
+
if (existing.length === 1) {
|
|
244
|
+
const recovered = this._resolveEvent(existing[0]);
|
|
245
|
+
if (
|
|
246
|
+
recovered.kind !== kind ||
|
|
247
|
+
canonical(recovered.evidence) !== canonical(verified.captured)
|
|
248
|
+
) {
|
|
249
|
+
corrupt("child evidence event resolved substituted bytes");
|
|
250
|
+
}
|
|
251
|
+
return Object.freeze({
|
|
252
|
+
authenticated: true,
|
|
253
|
+
durable: true,
|
|
254
|
+
recovered: true,
|
|
255
|
+
kind,
|
|
256
|
+
receiptDigest: verified.receiptDigest,
|
|
257
|
+
});
|
|
258
|
+
}
|
|
259
|
+
const head = this._verifyLedger();
|
|
260
|
+
const nowMs = Number(this._now());
|
|
261
|
+
if (!Number.isFinite(nowMs))
|
|
262
|
+
throw new TypeError("child evidence clock is invalid");
|
|
263
|
+
const record = Object.freeze({
|
|
264
|
+
schema: EVOLUTION_EVAL_CHILD_EVIDENCE_RECORD_SCHEMA,
|
|
265
|
+
tenantId: this.descriptor.tenantId,
|
|
266
|
+
streamId: this.descriptor.streamId,
|
|
267
|
+
kind,
|
|
268
|
+
receiptDigest: verified.receiptDigest,
|
|
269
|
+
evidence: verified.captured,
|
|
270
|
+
});
|
|
271
|
+
const published = this._put(ARTIFACT_TYPE, record, {
|
|
272
|
+
audience: this.descriptor.audience,
|
|
273
|
+
purpose: this.descriptor.purpose,
|
|
274
|
+
retention: "ledger",
|
|
275
|
+
});
|
|
276
|
+
if (
|
|
277
|
+
published?.receipt?.persisted !== true ||
|
|
278
|
+
published.receipt.readbackVerified !== true ||
|
|
279
|
+
published.receipt.integrityVerified !== true ||
|
|
280
|
+
published.receipt.retention !== "ledger"
|
|
281
|
+
) {
|
|
282
|
+
corrupt("child evidence persistence was not durably confirmed");
|
|
283
|
+
}
|
|
284
|
+
const receipt = this._append(
|
|
285
|
+
{
|
|
286
|
+
artifactTenantId: this.descriptor.artifactTenantId,
|
|
287
|
+
correlationId: this.descriptor.streamId,
|
|
288
|
+
decision: "accepted",
|
|
289
|
+
eventId,
|
|
290
|
+
reason: `durable ${kind} child evidence`,
|
|
291
|
+
skillName: "evolution-eval",
|
|
292
|
+
sourceRefs: [],
|
|
293
|
+
subjectRef: published.ref,
|
|
294
|
+
tenantId: this.descriptor.tenantId,
|
|
295
|
+
timestamp: new Date(nowMs).toISOString(),
|
|
296
|
+
type: EVOLUTION_EVAL_CHILD_EVIDENCE_EVENT_TYPE,
|
|
297
|
+
},
|
|
298
|
+
{ expectedHeadDigest: head.headDigest, expectedSequence: head.sequence },
|
|
299
|
+
);
|
|
300
|
+
if (receipt?.authenticated !== true || receipt.durable !== true)
|
|
301
|
+
corrupt("child evidence ledger append was not durable");
|
|
302
|
+
return Object.freeze({
|
|
303
|
+
authenticated: true,
|
|
304
|
+
durable: true,
|
|
305
|
+
recovered: false,
|
|
306
|
+
kind,
|
|
307
|
+
receiptDigest: verified.receiptDigest,
|
|
308
|
+
ledgerReceiptDigest: receipt.receiptDigest,
|
|
309
|
+
});
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
async resolve({ tenantId, kind, receiptDigest } = {}) {
|
|
313
|
+
if (
|
|
314
|
+
tenantId !== this.descriptor.tenantId ||
|
|
315
|
+
!KINDS[kind] ||
|
|
316
|
+
!DIGEST.test(receiptDigest || "")
|
|
317
|
+
) {
|
|
318
|
+
throw new TypeError("child evidence resolution request is invalid");
|
|
319
|
+
}
|
|
320
|
+
const matches = this._events()
|
|
321
|
+
.filter(
|
|
322
|
+
(event) =>
|
|
323
|
+
event.eventId ===
|
|
324
|
+
`${EVOLUTION_EVAL_CHILD_EVIDENCE_EVENT_TYPE}.${receiptDigest.slice(7)}`,
|
|
325
|
+
)
|
|
326
|
+
.map((event) => this._resolveEvent(event))
|
|
327
|
+
.filter(
|
|
328
|
+
(entry) => entry.kind === kind && entry.receiptDigest === receiptDigest,
|
|
329
|
+
);
|
|
330
|
+
if (matches.length !== 1) corrupt("child evidence is missing or ambiguous");
|
|
331
|
+
const resolvedAtMs = Number(this._now());
|
|
332
|
+
if (!Number.isFinite(resolvedAtMs))
|
|
333
|
+
throw new TypeError("child evidence clock is invalid");
|
|
334
|
+
return Object.freeze({
|
|
335
|
+
schema: EVOLUTION_EVAL_CHILD_EVIDENCE_RESOLUTION_SCHEMA,
|
|
336
|
+
authenticated: true,
|
|
337
|
+
durable: true,
|
|
338
|
+
authorityId: this.descriptor.authorityId,
|
|
339
|
+
revision: this.descriptor.revision,
|
|
340
|
+
handlerArtifactDigest: this.descriptor.handlerArtifactDigest,
|
|
341
|
+
tenantId,
|
|
342
|
+
streamId: this.descriptor.streamId,
|
|
343
|
+
kind,
|
|
344
|
+
receiptDigest,
|
|
345
|
+
evidence: matches[0].evidence,
|
|
346
|
+
resolvedAt: new Date(resolvedAtMs).toISOString(),
|
|
347
|
+
});
|
|
348
|
+
}
|
|
349
|
+
}
|
|
350
|
+
|
|
351
|
+
export function createEvolutionEvalChildEvidenceLedgerAdapter(options) {
|
|
352
|
+
return new EvolutionEvalChildEvidenceLedgerAdapter(options);
|
|
353
|
+
}
|
|
354
|
+
|
|
355
|
+
export function createEvolutionEvalChildEvidenceStorePort({
|
|
356
|
+
descriptor: input,
|
|
357
|
+
retain,
|
|
358
|
+
resolve,
|
|
359
|
+
} = {}) {
|
|
360
|
+
if (typeof retain !== "function" || typeof resolve !== "function")
|
|
361
|
+
throw new TypeError("child evidence store ports are required");
|
|
362
|
+
const port = Object.freeze({
|
|
363
|
+
descriptor: storeDescriptor(input),
|
|
364
|
+
retain: (...args) => Reflect.apply(retain, undefined, args),
|
|
365
|
+
resolve: (...args) => Reflect.apply(resolve, undefined, args),
|
|
366
|
+
});
|
|
367
|
+
CHILD_EVIDENCE_STORES.add(port);
|
|
368
|
+
return port;
|
|
369
|
+
}
|
|
370
|
+
|
|
371
|
+
export function isEvolutionEvalChildEvidenceStore(value) {
|
|
372
|
+
return CHILD_EVIDENCE_STORES.has(value);
|
|
373
|
+
}
|
|
@@ -1055,6 +1055,19 @@ export function buildEvolutionEvalAttestationDigest(value, purpose) {
|
|
|
1055
1055
|
return digest(value, `chainlesschain.evolution-eval-attestation/${purpose}`);
|
|
1056
1056
|
}
|
|
1057
1057
|
|
|
1058
|
+
export function computeEvolutionEvalSignedEvidenceDigest(record, purpose) {
|
|
1059
|
+
if (
|
|
1060
|
+
purpose !== EVOLUTION_EVAL_ATTESTATION_PURPOSES.targetInvocation &&
|
|
1061
|
+
purpose !== EVOLUTION_EVAL_ATTESTATION_PURPOSES.targetRevocation
|
|
1062
|
+
) {
|
|
1063
|
+
throw evalError(
|
|
1064
|
+
EVOLUTION_EVAL_INVALID_CODE,
|
|
1065
|
+
"signed evidence purpose is invalid",
|
|
1066
|
+
);
|
|
1067
|
+
}
|
|
1068
|
+
return digest(cloneCanonical(record), `${purpose}/signed-record`);
|
|
1069
|
+
}
|
|
1070
|
+
|
|
1058
1071
|
export function computeEvolutionEvalEnvironmentDigest(environment) {
|
|
1059
1072
|
return digest(
|
|
1060
1073
|
cloneCanonical(environment),
|
|
@@ -2345,7 +2358,7 @@ function verifySynchronousEvidence({
|
|
|
2345
2358
|
}
|
|
2346
2359
|
return deepFreeze({
|
|
2347
2360
|
core,
|
|
2348
|
-
recordDigest:
|
|
2361
|
+
recordDigest: computeEvolutionEvalSignedEvidenceDigest(record, purpose),
|
|
2349
2362
|
});
|
|
2350
2363
|
}
|
|
2351
2364
|
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
let input = "";
|
|
2
|
+
for await (const chunk of process.stdin) {
|
|
3
|
+
input += chunk.toString("utf8");
|
|
4
|
+
if (Buffer.byteLength(input) > 1024 * 1024)
|
|
5
|
+
throw new Error("evaluation process input exceeds 1 MiB");
|
|
6
|
+
}
|
|
7
|
+
const request = JSON.parse(input);
|
|
8
|
+
const moduleUrl = new URL(request.moduleUrl);
|
|
9
|
+
const implementation = await import(moduleUrl.href);
|
|
10
|
+
const handler = implementation[request.exportName];
|
|
11
|
+
if (typeof handler !== "function")
|
|
12
|
+
throw new Error("evaluation process export is unavailable");
|
|
13
|
+
const value = await handler(request.payload);
|
|
14
|
+
process.stdout.write(`${JSON.stringify({ ok: true, value })}\n`);
|