chainlesschain 0.166.22 → 0.166.25
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 +46 -3
- package/package.json +4 -3
- package/src/assets/web-panel/assets/{AIOps-oJ7USzMC.js → AIOps-RaxL_QQD.js} +1 -1
- package/src/assets/web-panel/assets/{ActionButton-BlgnZe_C.js → ActionButton-DD3ieFO-.js} +1 -1
- package/src/assets/web-panel/assets/{Analytics-D2rRbTLu.js → Analytics-CATDJukS.js} +3 -3
- package/src/assets/web-panel/assets/{AppLayout-FwS3f0B2.js → AppLayout-BHGsnRDS.js} +5 -5
- package/src/assets/web-panel/assets/{Artifacts-iF-_08Hi.js → Artifacts-BL6NunjN.js} +1 -1
- package/src/assets/web-panel/assets/{Audit-D24p0zQw.js → Audit-D0nEWfbA.js} +1 -1
- package/src/assets/web-panel/assets/{BackgroundAgents-Cg3mRVi9.js → BackgroundAgents-BAP1MUol.js} +1 -1
- package/src/assets/web-panel/assets/{Backup-EOqht3H-.js → Backup-R4y2OeSi.js} +1 -1
- package/src/assets/web-panel/assets/{BaseInput-9XWYq2hj.js → BaseInput-ByQZ2z6S.js} +1 -1
- package/src/assets/web-panel/assets/{Chat-Dq5yardA.js → Chat-32uV--xF.js} +4 -4
- package/src/assets/web-panel/assets/ChatBubbleRenderer-t1enanwz.js +1 -0
- package/src/assets/web-panel/assets/{Checkbox-CuyCBoBf.js → Checkbox-D1CB-7bq.js} +1 -1
- package/src/assets/web-panel/assets/{Codegen-DjWtYHNe.js → Codegen-BPx3dQ2q.js} +1 -1
- package/src/assets/web-panel/assets/{Col-CrVr_iuG.js → Col-DkPTQ2Gl.js} +1 -1
- package/src/assets/web-panel/assets/{Community-C6QxpfGc.js → Community-ZriaxRlr.js} +1 -1
- package/src/assets/web-panel/assets/{Compact-B-v5r6Pa.js → Compact-C_qJ0P7F.js} +1 -1
- package/src/assets/web-panel/assets/{Compliance-zNiLiFgD.js → Compliance-Bgoy-saS.js} +1 -1
- package/src/assets/web-panel/assets/{Cowork-D9K7lMOu.js → Cowork-B5i9y6XK.js} +2 -2
- package/src/assets/web-panel/assets/{Cron-DAjO36z4.js → Cron-D7vBJ5-J.js} +2 -2
- package/src/assets/web-panel/assets/{Crosschain-Bxqn0aqB.js → Crosschain-D4kvoGI_.js} +1 -1
- package/src/assets/web-panel/assets/{DID-DfRmLUe-.js → DID-BLOeBd-r.js} +2 -2
- package/src/assets/web-panel/assets/{Dashboard-Cz8KF3fr.js → Dashboard-mecJaonC.js} +2 -2
- package/src/assets/web-panel/assets/{Dropdown-C4oVfkP0.js → Dropdown-GPKwaFer.js} +1 -1
- package/src/assets/web-panel/assets/{EmailListRenderer-ivyZKN8k.js → EmailListRenderer-BML9m7Dd.js} +1 -1
- package/src/assets/web-panel/assets/{FamilyGuardDashboard-DoxY1CPW.js → FamilyGuardDashboard-DN5bAtJC.js} +1 -1
- package/src/assets/web-panel/assets/{Federation-C93gZxnb.js → Federation-DmD6Gecd.js} +1 -1
- package/src/assets/web-panel/assets/{FormItemContext-D_lEjYJE.js → FormItemContext-6wwplN_K.js} +1 -1
- package/src/assets/web-panel/assets/{GenericCardRenderer-BNFN9YjN.js → GenericCardRenderer-DUhpLkDL.js} +1 -1
- package/src/assets/web-panel/assets/{Git-mUu2HcLI.js → Git-eJfyXkwf.js} +2 -2
- package/src/assets/web-panel/assets/{Governance-CNuosrge.js → Governance-swAUW59x.js} +1 -1
- package/src/assets/web-panel/assets/{Inference-DwY5pbCB.js → Inference-CbdwJPDJ.js} +1 -1
- package/src/assets/web-panel/assets/{KnowledgeGraph-aRUxhACD.js → KnowledgeGraph-UuYpg1nm.js} +1 -1
- package/src/assets/web-panel/assets/{Logs-DFfsWYy_.js → Logs-CS0G057y.js} +2 -2
- package/src/assets/web-panel/assets/MarkdownRenderer-BxIIB4k3.js +1 -0
- package/src/assets/web-panel/assets/{Marketplace-COI-ciM-.js → Marketplace-CZRjuvvI.js} +1 -1
- package/src/assets/web-panel/assets/{McpTools-BJJwaIpe.js → McpTools-BOJ9A_Rf.js} +3 -3
- package/src/assets/web-panel/assets/{Memory-CDO6SGDZ.js → Memory-BnkrR-Ok.js} +2 -2
- package/src/assets/web-panel/assets/{MobileBridge-BlZ5tFf4.js → MobileBridge-Do4mPi13.js} +1 -1
- package/src/assets/web-panel/assets/{MobileProjects-DuoxbgWz.js → MobileProjects-2JxWa6-p.js} +1 -1
- package/src/assets/web-panel/assets/{Mtc-6ec9j70b.js → Mtc-CS_mnpGd.js} +2 -2
- package/src/assets/web-panel/assets/{MtcAudit-BuL7HkC7.js → MtcAudit-DZ4J_351.js} +5 -5
- package/src/assets/web-panel/assets/{Multisig-CJxR85lk.js → Multisig-Jh74zKXu.js} +3 -3
- package/src/assets/web-panel/assets/{NLProgramming-B71O1S4l.js → NLProgramming-_4n2BfnS.js} +1 -1
- package/src/assets/web-panel/assets/{Notes-Bsw5zbpV.js → Notes-CtENcKHv.js} +3 -3
- package/src/assets/web-panel/assets/{NotificationSettings-BnAhXuK_.js → NotificationSettings-dgDCvpK9.js} +1 -1
- package/src/assets/web-panel/assets/{OrderTableRenderer-BJ0R5GGz.js → OrderTableRenderer-D5VxCrmG.js} +1 -1
- package/src/assets/web-panel/assets/{Organization-B7wwNxoP.js → Organization-CpIF8Xkd.js} +2 -2
- package/src/assets/web-panel/assets/{Overflow-CfAGr0gM.js → Overflow-aHnBZaez.js} +1 -1
- package/src/assets/web-panel/assets/{P2P-KhMg22Fz.js → P2P-8ppzog2V.js} +2 -2
- package/src/assets/web-panel/assets/{PdhVaultBrowser-NdAXI9ft.js → PdhVaultBrowser-D3p1BXkp.js} +3 -3
- package/src/assets/web-panel/assets/{Permissions-CIYjqyT7.js → Permissions-D7vflD5q.js} +4 -4
- package/src/assets/web-panel/assets/{PersonalDataHub-D2ht3P_R.js → PersonalDataHub-D2hY-Ek2.js} +4 -4
- package/src/assets/web-panel/assets/{Pipeline-i6flZW1m.js → Pipeline-qK2VqhJC.js} +1 -1
- package/src/assets/web-panel/assets/{Privacy-DE0lhYVc.js → Privacy-DHJr4uu0.js} +1 -1
- package/src/assets/web-panel/assets/{ProjectInit-BL3YbyxS.js → ProjectInit-DMBS6trm.js} +2 -2
- package/src/assets/web-panel/assets/{ProjectSettings-CEtdg7ni.js → ProjectSettings-D3Ng74BT.js} +2 -2
- package/src/assets/web-panel/assets/{Projects-CvtU5peJ.js → Projects-BfJFZiIW.js} +1 -1
- package/src/assets/web-panel/assets/{Providers-DKt_Cg-j.js → Providers-DlNA95G0.js} +1 -1
- package/src/assets/web-panel/assets/{QrScannerModal-DA61jNSx.js → QrScannerModal-CMOIYxIm.js} +1 -1
- package/src/assets/web-panel/assets/{QuickAsk-fS9ryUmq.js → QuickAsk-D6MyGp5I.js} +1 -1
- package/src/assets/web-panel/assets/{Recommend-CR9dZU5Y.js → Recommend-W6WcShtf.js} +1 -1
- package/src/assets/web-panel/assets/{RemoteSession-BV0BR2Dz.js → RemoteSession-Dm_MjlV_.js} +2 -2
- package/src/assets/web-panel/assets/{Reputation-BIeGUvYD.js → Reputation-Ctvij6eX.js} +1 -1
- package/src/assets/web-panel/assets/{Row-DHDT1aro.js → Row-DivbeDE-.js} +1 -1
- package/src/assets/web-panel/assets/{RssFeed-Cq6YKb1h.js → RssFeed-D4famoAw.js} +3 -3
- package/src/assets/web-panel/assets/{Search-DEF6vsy6.js → Search-6gOAh3zG.js} +1 -1
- package/src/assets/web-panel/assets/{Security-CHtYiKY9.js → Security-DApb9kK8.js} +4 -4
- package/src/assets/web-panel/assets/{Services-u16lvBJN.js → Services-B8OomyE2.js} +2 -2
- package/src/assets/web-panel/assets/{Skeleton-CGbizyDj.js → Skeleton-BTJ2g2E3.js} +1 -1
- package/src/assets/web-panel/assets/{Skills-BZMQcAa7.js → Skills-NIRr4DD1.js} +1 -1
- package/src/assets/web-panel/assets/{Sla-Bm-CycVi.js → Sla-BQHP_6px.js} +1 -1
- package/src/assets/web-panel/assets/{SpeechSettings-BudpA5kr.js → SpeechSettings-BVQTDSVS.js} +1 -1
- package/src/assets/web-panel/assets/{SyncSettings-B8q1C1eC.js → SyncSettings-BOD4Mar6.js} +2 -2
- package/src/assets/web-panel/assets/{Tasks-SU1pBWc-.js → Tasks-Ciu7H2-y.js} +1 -1
- package/src/assets/web-panel/assets/{Templates-CyOfJzmt.js → Templates-CtlwavRU.js} +1 -1
- package/src/assets/web-panel/assets/{Tenant-xqWSm2GP.js → Tenant-QLWYJdL6.js} +1 -1
- package/src/assets/web-panel/assets/{Terminal-D1Ttgjsi.js → Terminal-B3q10mjm.js} +2 -2
- package/src/assets/web-panel/assets/{TimelineRenderer-Da2lYs5D.js → TimelineRenderer-CqltBA_8.js} +1 -1
- package/src/assets/web-panel/assets/{Tokens-B34-SduO.js → Tokens-CJOKrj4y.js} +1 -1
- package/src/assets/web-panel/assets/{Trigger-C8zyYm4R.js → Trigger-CPMGgfdM.js} +1 -1
- package/src/assets/web-panel/assets/{Trust-D1Pvqems.js → Trust-DiJms7Bl.js} +1 -1
- package/src/assets/web-panel/assets/{UkeySign-Do3VVnAy.js → UkeySign-rakR8eel.js} +1 -1
- package/src/assets/web-panel/assets/{VideoEditing-Dz7egVIA.js → VideoEditing-DAWZUM5o.js} +1 -1
- package/src/assets/web-panel/assets/{Wallet-Dcuw-OxR.js → Wallet-DqUPnl7K.js} +3 -3
- package/src/assets/web-panel/assets/{WebAuthn-DPlw-QsB.js → WebAuthn-BnVUwvMm.js} +3 -3
- package/src/assets/web-panel/assets/{WorkflowEditor-h4OsnU5q.js → WorkflowEditor-B1CAwxgs.js} +1 -1
- package/src/assets/web-panel/assets/{chat-eO9wEwrW.js → chat-k2-0Jzfy.js} +1 -1
- package/src/assets/web-panel/assets/{colors-34lSmOXw.js → colors-BAu8xBmW.js} +1 -1
- package/src/assets/web-panel/assets/{compact-item-CK4kEWJ4.js → compact-item-DMlqcdfI.js} +1 -1
- package/src/assets/web-panel/assets/{createContext-E0A57xed.js → createContext-BU9kfiSw.js} +1 -1
- package/src/assets/web-panel/assets/devWarning-DuGrUMAS.js +1 -0
- package/src/assets/web-panel/assets/{hasIn-BD9ZMGAl.js → hasIn-2vacgdcl.js} +1 -1
- package/src/assets/web-panel/assets/{index--N0u6kTG.js → index-B-C-Ruft.js} +1 -1
- package/src/assets/web-panel/assets/{index-DzXjP44T.js → index-B7wDjYUd.js} +1 -1
- package/src/assets/web-panel/assets/{index-CZBaqe3d.js → index-BMq0frKK.js} +1 -1
- package/src/assets/web-panel/assets/{index-DrOalGut.js → index-BUX4W-2v.js} +1 -1
- package/src/assets/web-panel/assets/{index-CT1_eRL-.js → index-BZz2eB33.js} +1 -1
- package/src/assets/web-panel/assets/{index-DrsDA_md.js → index-BblNQlaA.js} +1 -1
- package/src/assets/web-panel/assets/{index-DP-UZAQN.js → index-BdfKoqsK.js} +1 -1
- package/src/assets/web-panel/assets/{index-DiT_REby.js → index-Bf8YofPE.js} +1 -1
- package/src/assets/web-panel/assets/{index-Cx3Jn1r0.js → index-Bn8tARil.js} +1 -1
- package/src/assets/web-panel/assets/{index-B0rkHxKK.js → index-Bpe2CJd-.js} +1 -1
- package/src/assets/web-panel/assets/{index-B_G_ElKO.js → index-BxctzdYQ.js} +1 -1
- package/src/assets/web-panel/assets/{index-MIg5Z8qe.js → index-C24NoPpy.js} +1 -1
- package/src/assets/web-panel/assets/{index-BmNbU2Z6.js → index-C5C4kSi8.js} +1 -1
- package/src/assets/web-panel/assets/{index-BsGmo6v1.js → index-C6ICn9Y6.js} +1 -1
- package/src/assets/web-panel/assets/{index-CsrKJJcX.js → index-C8ldqZi6.js} +1 -1
- package/src/assets/web-panel/assets/{index-BbX_Dted.js → index-C9WsM29I.js} +1 -1
- package/src/assets/web-panel/assets/{index-Ch175NUw.js → index-CONPVaxw.js} +1 -1
- package/src/assets/web-panel/assets/{index-DONOUtlz.js → index-CPyYXKFB.js} +1 -1
- package/src/assets/web-panel/assets/{index-DFLE2qO9.js → index-CSvSf9px.js} +1 -1
- package/src/assets/web-panel/assets/{index-o8pYehRq.js → index-CXmpR6N3.js} +3 -3
- package/src/assets/web-panel/assets/{index-Cz3unNfL.js → index-Chybe7Ge.js} +1 -1
- package/src/assets/web-panel/assets/{index-yAGBu2E0.js → index-CyXmP3PW.js} +1 -1
- package/src/assets/web-panel/assets/{index-CuSau5ya.js → index-DCusBOqR.js} +1 -1
- package/src/assets/web-panel/assets/{index-DcE1BspQ.js → index-DH01oIaj.js} +1 -1
- package/src/assets/web-panel/assets/{index-DrSAAuJj.js → index-DHg3LMNP.js} +1 -1
- package/src/assets/web-panel/assets/{index-CZkFMeWL.js → index-DWLTSIka.js} +1 -1
- package/src/assets/web-panel/assets/{index-DvKcroix.js → index-DaUGdvtU.js} +1 -1
- package/src/assets/web-panel/assets/{index-Bjs90Eh9.js → index-DcA-tEQd.js} +1 -1
- package/src/assets/web-panel/assets/{index-DGRxt5wj.js → index-DfWvcu4p.js} +1 -1
- package/src/assets/web-panel/assets/{index-DCn-ECvK.js → index-DmZNnZz7.js} +1 -1
- package/src/assets/web-panel/assets/index-DvFfMAux.js +1 -0
- package/src/assets/web-panel/assets/{index-8qMA1DWQ.js → index-JsyGqKmD.js} +1 -1
- package/src/assets/web-panel/assets/{index-D4bB_x_v.js → index-TtrpHmYx.js} +1 -1
- package/src/assets/web-panel/assets/{index-Brqc9Emx.js → index-Ygh0wmKz.js} +1 -1
- package/src/assets/web-panel/assets/{index-Da5fmOHB.js → index-dIYqw3f0.js} +1 -1
- package/src/assets/web-panel/assets/{index-DpfisY1g.js → index-hDHHJYno.js} +1 -1
- package/src/assets/web-panel/assets/index-n6p-1A77.js +1 -0
- package/src/assets/web-panel/assets/{index-DeXNCyQJ.js → index-oElehY4F.js} +1 -1
- package/src/assets/web-panel/assets/{index-DcbgVLOH.js → index-z4_YwZDW.js} +1 -1
- package/src/assets/web-panel/assets/{initDefaultProps-DMTkAomF.js → initDefaultProps-B9OXWu2e.js} +1 -1
- package/src/assets/web-panel/assets/{motion-Cnti1F5g.js → motion-IQ47MCDQ.js} +1 -1
- package/src/assets/web-panel/assets/{move-CGxmHUga.js → move-CLCU4kjV.js} +1 -1
- package/src/assets/web-panel/assets/{mtc-parser-CuwwLoq7.js → mtc-parser-CXnVlSPq.js} +1 -1
- package/src/assets/web-panel/assets/{omit-BpdlTkPM.js → omit-BJjLXB0f.js} +1 -1
- package/src/assets/web-panel/assets/{pickAttrs-D7nWrThp.js → pickAttrs-BHdtvdy6.js} +1 -1
- package/src/assets/web-panel/assets/{placementArrow-Bhx0TV8F.js → placementArrow-oq8X_Bwc.js} +1 -1
- package/src/assets/web-panel/assets/{responsiveObserve-CZ1KesZh.js → responsiveObserve-DTD02LAO.js} +1 -1
- package/src/assets/web-panel/assets/{slide-CnldF8J6.js → slide-DbEeq8to.js} +1 -1
- package/src/assets/web-panel/assets/{statusUtils-CZfo_GOA.js → statusUtils-Do2fy1CJ.js} +1 -1
- package/src/assets/web-panel/assets/{styleChecker-B2QCcAv5.js → styleChecker-CFWD63T-.js} +1 -1
- package/src/assets/web-panel/assets/{useFlexGapSupport-DzzjIS4J.js → useFlexGapSupport-BeozAWOo.js} +1 -1
- package/src/assets/web-panel/assets/{useFs-B_atg9M0.js → useFs-0-rIgnBL.js} +1 -1
- package/src/assets/web-panel/assets/{usePersonalDataHub-DhZs3QYN.js → usePersonalDataHub-CeiNoI31.js} +1 -1
- package/src/assets/web-panel/assets/{vnode-DcePTYAm.js → vnode-Dj0ReRNg.js} +1 -1
- package/src/assets/web-panel/assets/{zoom-BYmlnjRk.js → zoom-DD7MC4Dy.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-knowledge.js +40 -1
- 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 +21 -0
- package/src/commands/skill.js +3 -0
- package/src/data/changelog.json +39 -0
- package/src/gateways/ws/ws-agent-handler.js +59 -2
- package/src/gateways/ws/ws-server.js +2 -0
- package/src/generated/cc-agent-protocol.schema.json +3 -1
- 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 +94 -1
- package/src/lib/app-server/websocket-transport.js +15 -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 +437 -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 +32 -10
- package/src/lib/evolution/evidence-json-text.js +236 -0
- package/src/lib/evolution/evolution-artifact-ports.js +196 -21
- package/src/lib/evolution/evolution-deployment-loader.js +240 -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 +271 -37
- package/src/lib/evolution/evolution-file-witness.js +153 -30
- package/src/lib/evolution/evolution-ledger-ports.js +1219 -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-inventory.js +392 -0
- package/src/lib/evolution/governed-knowledge-dependency-ledger-executor.js +217 -82
- package/src/lib/evolution/governed-knowledge-quarantine-release.js +1013 -0
- package/src/lib/evolution/governed-knowledge-record.js +148 -0
- package/src/lib/evolution/governed-knowledge-revocation-host.js +59 -0
- package/src/lib/evolution/governed-knowledge-revocation-record.js +135 -0
- package/src/lib/evolution/governed-knowledge-skill-rollback.js +510 -0
- package/src/lib/evolution/governed-knowledge-sync.js +181 -95
- package/src/lib/evolution/governed-knowledge-wiki-tombstone.js +516 -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 +283 -0
- package/src/lib/evolution/knowledge-wiki-source-provenance.js +360 -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 +43 -3
- 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 +168 -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 +822 -101
- 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 +109 -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-loop-guard.js +113 -0
- 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 +133 -34
- package/src/runtime/agent-core.js +196 -74
- 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/ChatBubbleRenderer-Ds3pA-ET.js +0 -1
- package/src/assets/web-panel/assets/MarkdownRenderer-DqTx7_u1.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
|
@@ -0,0 +1,516 @@
|
|
|
1
|
+
import { types } from "node:util";
|
|
2
|
+
import { captureWikiRevisionReader } from "./wiki-maintainer-ledger-adapter.js";
|
|
3
|
+
import { captureSkillReleaseOperationReader } from "./evolution-ledger-ports.js";
|
|
4
|
+
import { governedKnowledgeSourceRef } from "./governed-knowledge-skill-rollback.js";
|
|
5
|
+
import { deriveWikiTargetDispositionRevision } from "./wiki-target-tombstone-revision.js";
|
|
6
|
+
import {
|
|
7
|
+
createGovernedKnowledgeDependencyAuthority,
|
|
8
|
+
GOVERNED_KNOWLEDGE_DEPENDENCY_RESULT_SCHEMA,
|
|
9
|
+
digestGovernedKnowledgeDependencyResult,
|
|
10
|
+
} from "./governed-knowledge-dependency-authority.js";
|
|
11
|
+
import {
|
|
12
|
+
capturePruningData as captureData,
|
|
13
|
+
pruningCanonical as canonical,
|
|
14
|
+
pruningDigest as digest,
|
|
15
|
+
} from "./governed-wiki-pruning-journal.js";
|
|
16
|
+
|
|
17
|
+
const SCHEMA = "chainlesschain.knowledge-wiki-tombstone/v1";
|
|
18
|
+
const HEAD_KEYS = [
|
|
19
|
+
"epoch",
|
|
20
|
+
"ledgerId",
|
|
21
|
+
"identityDigest",
|
|
22
|
+
"sequence",
|
|
23
|
+
"headDigest",
|
|
24
|
+
];
|
|
25
|
+
const RULES = Object.freeze({
|
|
26
|
+
schema: SCHEMA,
|
|
27
|
+
batchSize: 128,
|
|
28
|
+
source: "exact-Knowledge-URI-and-content-digest",
|
|
29
|
+
effect: "target-only-tombstone",
|
|
30
|
+
unrelatedFacts: "preserve-verbatim",
|
|
31
|
+
minCorroboratingSources: 2,
|
|
32
|
+
decayHalfLifeDays: 30,
|
|
33
|
+
staleConfidenceFloor: 0.2,
|
|
34
|
+
});
|
|
35
|
+
const RULES_DIGEST = digest(SCHEMA, RULES);
|
|
36
|
+
const MULTIHOP_SCHEMA = "chainlesschain.knowledge-wiki-tombstone/v2";
|
|
37
|
+
const MULTIHOP_RULES_DIGEST = digest(MULTIHOP_SCHEMA, {
|
|
38
|
+
...RULES,
|
|
39
|
+
schema: MULTIHOP_SCHEMA,
|
|
40
|
+
source: "authenticated-pinned-Wiki-exact-Knowledge-ancestry",
|
|
41
|
+
});
|
|
42
|
+
const QUARANTINE_SCHEMA = "chainlesschain.knowledge-wiki-quarantine/v1";
|
|
43
|
+
const QUARANTINE_RULES = Object.freeze({
|
|
44
|
+
...RULES,
|
|
45
|
+
schema: QUARANTINE_SCHEMA,
|
|
46
|
+
effect: "target-only-quarantine",
|
|
47
|
+
});
|
|
48
|
+
const QUARANTINE_RULES_DIGEST = digest(QUARANTINE_SCHEMA, QUARANTINE_RULES);
|
|
49
|
+
const QUARANTINE_MULTIHOP_SCHEMA =
|
|
50
|
+
"chainlesschain.knowledge-wiki-quarantine/v2";
|
|
51
|
+
const QUARANTINE_MULTIHOP_RULES_DIGEST = digest(QUARANTINE_MULTIHOP_SCHEMA, {
|
|
52
|
+
...QUARANTINE_RULES,
|
|
53
|
+
schema: QUARANTINE_MULTIHOP_SCHEMA,
|
|
54
|
+
source: "authenticated-pinned-Wiki-exact-Knowledge-ancestry",
|
|
55
|
+
});
|
|
56
|
+
const TOMBSTONE = Object.freeze({
|
|
57
|
+
disposition: "tombstone",
|
|
58
|
+
schema: SCHEMA,
|
|
59
|
+
rulesDigest: RULES_DIGEST,
|
|
60
|
+
multihopSchema: MULTIHOP_SCHEMA,
|
|
61
|
+
multihopRulesDigest: MULTIHOP_RULES_DIGEST,
|
|
62
|
+
model: "deterministic:knowledge-wiki-tombstone",
|
|
63
|
+
});
|
|
64
|
+
const QUARANTINE = Object.freeze({
|
|
65
|
+
disposition: "quarantine",
|
|
66
|
+
schema: QUARANTINE_SCHEMA,
|
|
67
|
+
rulesDigest: QUARANTINE_RULES_DIGEST,
|
|
68
|
+
multihopSchema: QUARANTINE_MULTIHOP_SCHEMA,
|
|
69
|
+
multihopRulesDigest: QUARANTINE_MULTIHOP_RULES_DIGEST,
|
|
70
|
+
model: "deterministic:knowledge-wiki-quarantine",
|
|
71
|
+
});
|
|
72
|
+
function fail(message) {
|
|
73
|
+
throw new Error(`Knowledge Wiki tombstone: ${message}`);
|
|
74
|
+
}
|
|
75
|
+
const same = (left, right) => canonical(left) === canonical(right);
|
|
76
|
+
function matchHead(checkpoint, head) {
|
|
77
|
+
return HEAD_KEYS.every((key) => checkpoint[key] === head[key]);
|
|
78
|
+
}
|
|
79
|
+
function bind(wikiAdapter, transactionLedger, tenantId) {
|
|
80
|
+
const wiki = captureWikiRevisionReader(wikiAdapter);
|
|
81
|
+
if (wiki.descriptor.tenantId !== tenantId)
|
|
82
|
+
throw new TypeError("Knowledge Wiki tenant differs");
|
|
83
|
+
const operations = captureSkillReleaseOperationReader(transactionLedger);
|
|
84
|
+
if (!operations.matchesWikiAdapter(wikiAdapter))
|
|
85
|
+
throw new TypeError(
|
|
86
|
+
"Wiki disposition requires the same genuine ledger, not matching caller-supplied head metadata",
|
|
87
|
+
);
|
|
88
|
+
return Object.freeze({ wiki, operations });
|
|
89
|
+
}
|
|
90
|
+
function partsFor(source, request, provenance, configuration) {
|
|
91
|
+
const sourceRef = governedKnowledgeSourceRef(request);
|
|
92
|
+
const refs = new Set(
|
|
93
|
+
Object.values(source.state.evidence)
|
|
94
|
+
.filter(
|
|
95
|
+
(entry) =>
|
|
96
|
+
(entry.ref === sourceRef || entry.artifactRef === sourceRef) &&
|
|
97
|
+
entry.sourceDigest === request.contentDigest,
|
|
98
|
+
)
|
|
99
|
+
.map((entry) => entry.ref),
|
|
100
|
+
);
|
|
101
|
+
const directIds = Object.values(source.state.patterns)
|
|
102
|
+
.filter((pattern) => {
|
|
103
|
+
const evidence = [
|
|
104
|
+
...pattern.positiveEvidence,
|
|
105
|
+
...pattern.negativeEvidence,
|
|
106
|
+
];
|
|
107
|
+
if (evidence.some((ref) => !source.state.evidence[ref]))
|
|
108
|
+
fail("pattern has unresolved source evidence");
|
|
109
|
+
return evidence.some((ref) => refs.has(ref));
|
|
110
|
+
})
|
|
111
|
+
.map((pattern) => pattern.patternId)
|
|
112
|
+
.sort();
|
|
113
|
+
const targetIds = provenance.affectedPatternIds;
|
|
114
|
+
const operations = targetIds.map((patternId) => ({
|
|
115
|
+
type: configuration.disposition,
|
|
116
|
+
patternId,
|
|
117
|
+
reason: "governed-knowledge-revocation",
|
|
118
|
+
}));
|
|
119
|
+
if (!operations.length)
|
|
120
|
+
fail("Wiki source does not identify the revoked Knowledge");
|
|
121
|
+
// Existing direct-only preparations retain their exact v1 batch identity and
|
|
122
|
+
// deterministic revision bytes. Newly discovered ancestry gets a distinct
|
|
123
|
+
// v2 contract, pinned to the original revision rather than today's head.
|
|
124
|
+
const sourceProofDigest = same(directIds, targetIds)
|
|
125
|
+
? null
|
|
126
|
+
: digest(`${configuration.multihopSchema}/source`, {
|
|
127
|
+
revisionId: provenance.revisionId,
|
|
128
|
+
stateDigest: provenance.stateDigest,
|
|
129
|
+
checkpoint: provenance.checkpoint,
|
|
130
|
+
affectedPatternIds: targetIds,
|
|
131
|
+
});
|
|
132
|
+
const count = Math.ceil(operations.length / RULES.batchSize);
|
|
133
|
+
if (count > 128)
|
|
134
|
+
fail("Wiki disposition exceeds the authenticated history bound");
|
|
135
|
+
return Array.from({ length: count }, (_, index) => {
|
|
136
|
+
const batch = operations.slice(
|
|
137
|
+
index * RULES.batchSize,
|
|
138
|
+
(index + 1) * RULES.batchSize,
|
|
139
|
+
);
|
|
140
|
+
return {
|
|
141
|
+
operations: batch,
|
|
142
|
+
...(sourceProofDigest ? { sourceProofDigest } : {}),
|
|
143
|
+
requestDigest: digest(
|
|
144
|
+
`${sourceProofDigest ? configuration.multihopSchema : configuration.schema}/batch`,
|
|
145
|
+
{
|
|
146
|
+
requestDigest: request.requestDigest,
|
|
147
|
+
index,
|
|
148
|
+
count,
|
|
149
|
+
operations: batch,
|
|
150
|
+
...(sourceProofDigest ? { sourceProofDigest } : {}),
|
|
151
|
+
},
|
|
152
|
+
),
|
|
153
|
+
};
|
|
154
|
+
});
|
|
155
|
+
}
|
|
156
|
+
function derive(reader, source, part, fence, configuration) {
|
|
157
|
+
return deriveWikiTargetDispositionRevision({
|
|
158
|
+
source,
|
|
159
|
+
operations: part.operations,
|
|
160
|
+
requestDigest: part.requestDigest,
|
|
161
|
+
effectiveAt: fence.evidence.timestamp,
|
|
162
|
+
descriptor: {
|
|
163
|
+
tenantId: reader.wiki.descriptor.tenantId,
|
|
164
|
+
evolutionRunId: reader.wiki.descriptor.evolutionRunId,
|
|
165
|
+
maintainerModel: `${configuration.model}/${part.sourceProofDigest ? "v2" : "v1"}`,
|
|
166
|
+
rulesDigest: part.sourceProofDigest
|
|
167
|
+
? configuration.multihopRulesDigest
|
|
168
|
+
: configuration.rulesDigest,
|
|
169
|
+
minCorroboratingSources: RULES.minCorroboratingSources,
|
|
170
|
+
decayHalfLifeDays: RULES.decayHalfLifeDays,
|
|
171
|
+
staleConfidenceFloor: RULES.staleConfidenceFloor,
|
|
172
|
+
},
|
|
173
|
+
});
|
|
174
|
+
}
|
|
175
|
+
async function prove(reader, request, context, original, configuration) {
|
|
176
|
+
if (
|
|
177
|
+
request.dependency.kind !== "wiki" ||
|
|
178
|
+
request.dependency.disposition !== configuration.disposition
|
|
179
|
+
)
|
|
180
|
+
fail(
|
|
181
|
+
`only an exact wiki / ${configuration.disposition} dependency is supported`,
|
|
182
|
+
);
|
|
183
|
+
const admission = reader.operations.resolveKnowledgeRevocation({
|
|
184
|
+
tenantId: request.tenantId,
|
|
185
|
+
operationDigest: request.operationDigest,
|
|
186
|
+
context,
|
|
187
|
+
});
|
|
188
|
+
const fence = admission.fence;
|
|
189
|
+
if (!fence || fence.record.deviceId !== request.deviceId)
|
|
190
|
+
fail("missing exact prepared revocation");
|
|
191
|
+
const knowledge = fence.record.knowledge;
|
|
192
|
+
for (const key of [
|
|
193
|
+
"tenantId",
|
|
194
|
+
"knowledgeId",
|
|
195
|
+
"action",
|
|
196
|
+
"contentDigest",
|
|
197
|
+
"revocationReceiptDigest",
|
|
198
|
+
])
|
|
199
|
+
if (knowledge[key] !== request[key])
|
|
200
|
+
fail("prepared Knowledge binding differs");
|
|
201
|
+
if (!knowledge.dependencies.some((entry) => same(entry, request.dependency)))
|
|
202
|
+
fail("Wiki dependency is not in the prepared operation");
|
|
203
|
+
// The dependency digest binds the original complete Wiki STATE, not just a
|
|
204
|
+
// pattern ID, caller-selected evidence subset or latest mutable Wiki label.
|
|
205
|
+
if (
|
|
206
|
+
!matchHead(context.checkpoint, original.ledgerHead) ||
|
|
207
|
+
original.checkpoint.sequence >= fence.sequence
|
|
208
|
+
)
|
|
209
|
+
fail("Wiki source must precede preparation on this same current ledger");
|
|
210
|
+
const provenance = reader.wiki.readKnowledgeProvenance({
|
|
211
|
+
tenantId: request.tenantId,
|
|
212
|
+
revisionId: original.revisionId,
|
|
213
|
+
knowledgeId: request.knowledgeId,
|
|
214
|
+
contentDigest: request.contentDigest,
|
|
215
|
+
});
|
|
216
|
+
if (
|
|
217
|
+
provenance.stateDigest !== original.stateDigest ||
|
|
218
|
+
!same(provenance.checkpoint, original.checkpoint) ||
|
|
219
|
+
!matchHead(context.checkpoint, provenance.ledgerHead)
|
|
220
|
+
)
|
|
221
|
+
fail("Wiki ancestry does not bind the original state and current ledger");
|
|
222
|
+
const parts = partsFor(original, request, provenance, configuration);
|
|
223
|
+
const history = reader.wiki.resolveHistory({
|
|
224
|
+
tenantId: request.tenantId,
|
|
225
|
+
stateDigest: request.dependency.digest,
|
|
226
|
+
allowedMaintenanceRequestDigests: parts.map((part) => part.requestDigest),
|
|
227
|
+
});
|
|
228
|
+
if (
|
|
229
|
+
!matchHead(context.checkpoint, history.ledgerHead) ||
|
|
230
|
+
history.successors.length > parts.length
|
|
231
|
+
)
|
|
232
|
+
fail("Wiki disposition history differs from its current authorization");
|
|
233
|
+
let source = history.source;
|
|
234
|
+
for (const [index, entry] of history.successors.entries()) {
|
|
235
|
+
if (entry.predecessorHead.sequence < fence.sequence)
|
|
236
|
+
fail("Wiki effect predates its prepared Knowledge authorization");
|
|
237
|
+
const expected = await derive(
|
|
238
|
+
reader,
|
|
239
|
+
source,
|
|
240
|
+
parts[index],
|
|
241
|
+
fence,
|
|
242
|
+
configuration,
|
|
243
|
+
);
|
|
244
|
+
if (!same(expected, entry.revision))
|
|
245
|
+
fail("Wiki successor does not match the exact target-only tombstones");
|
|
246
|
+
source = {
|
|
247
|
+
trusted: true,
|
|
248
|
+
state: expected.state,
|
|
249
|
+
stateDigest: expected.stateDigest,
|
|
250
|
+
};
|
|
251
|
+
}
|
|
252
|
+
if (
|
|
253
|
+
!same(source, history.current) ||
|
|
254
|
+
!same(reader.operations.currentContext(), context)
|
|
255
|
+
)
|
|
256
|
+
fail("Wiki or ledger changed during effect verification");
|
|
257
|
+
return Object.freeze({
|
|
258
|
+
fence,
|
|
259
|
+
parts,
|
|
260
|
+
history,
|
|
261
|
+
current: source,
|
|
262
|
+
complete: history.successors.length === parts.length,
|
|
263
|
+
checkpoint: context.checkpoint,
|
|
264
|
+
});
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
function createWikiDispositionAuthority(options = {}, configuration) {
|
|
268
|
+
const {
|
|
269
|
+
tenantId,
|
|
270
|
+
deviceId,
|
|
271
|
+
wikiLedgerAdapter,
|
|
272
|
+
transactionLedger,
|
|
273
|
+
verifierWikiLedgerAdapter,
|
|
274
|
+
verifierTransactionLedger,
|
|
275
|
+
providerDescriptor,
|
|
276
|
+
verifierDescriptor,
|
|
277
|
+
additionalWikiTargets = [],
|
|
278
|
+
} = options;
|
|
279
|
+
if (
|
|
280
|
+
wikiLedgerAdapter === verifierWikiLedgerAdapter ||
|
|
281
|
+
transactionLedger === verifierTransactionLedger
|
|
282
|
+
)
|
|
283
|
+
throw new TypeError(
|
|
284
|
+
"Wiki disposition requires independent genuine readers",
|
|
285
|
+
);
|
|
286
|
+
if (
|
|
287
|
+
types.isProxy(additionalWikiTargets) ||
|
|
288
|
+
!Array.isArray(additionalWikiTargets) ||
|
|
289
|
+
Object.getPrototypeOf(additionalWikiTargets) !== Array.prototype ||
|
|
290
|
+
additionalWikiTargets.length > 63 ||
|
|
291
|
+
Reflect.ownKeys(additionalWikiTargets).length !==
|
|
292
|
+
additionalWikiTargets.length + 1
|
|
293
|
+
)
|
|
294
|
+
throw new TypeError(
|
|
295
|
+
"Wiki disposition targets must be a bounded dense array",
|
|
296
|
+
);
|
|
297
|
+
const targets = [{ wikiLedgerAdapter, verifierWikiLedgerAdapter }];
|
|
298
|
+
for (let index = 0; index < additionalWikiTargets.length; index += 1) {
|
|
299
|
+
const property = Object.getOwnPropertyDescriptor(
|
|
300
|
+
additionalWikiTargets,
|
|
301
|
+
String(index),
|
|
302
|
+
);
|
|
303
|
+
const target = property?.value;
|
|
304
|
+
if (
|
|
305
|
+
!target ||
|
|
306
|
+
types.isProxy(target) ||
|
|
307
|
+
![Object.prototype, null].includes(Object.getPrototypeOf(target)) ||
|
|
308
|
+
Reflect.ownKeys(target).length !== 2
|
|
309
|
+
)
|
|
310
|
+
throw new TypeError(
|
|
311
|
+
"Wiki disposition target must contain two fixed readers",
|
|
312
|
+
);
|
|
313
|
+
const left = Object.getOwnPropertyDescriptor(target, "wikiLedgerAdapter");
|
|
314
|
+
const right = Object.getOwnPropertyDescriptor(
|
|
315
|
+
target,
|
|
316
|
+
"verifierWikiLedgerAdapter",
|
|
317
|
+
);
|
|
318
|
+
if (!left || !right || !("value" in left) || !("value" in right))
|
|
319
|
+
throw new TypeError("Wiki disposition target must not use accessors");
|
|
320
|
+
targets.push({
|
|
321
|
+
wikiLedgerAdapter: left.value,
|
|
322
|
+
verifierWikiLedgerAdapter: right.value,
|
|
323
|
+
});
|
|
324
|
+
}
|
|
325
|
+
const runs = new Set();
|
|
326
|
+
const bindings = targets.map((target) => {
|
|
327
|
+
if (target.wikiLedgerAdapter === target.verifierWikiLedgerAdapter)
|
|
328
|
+
throw new TypeError(
|
|
329
|
+
"Wiki disposition requires independent genuine readers",
|
|
330
|
+
);
|
|
331
|
+
const provider = bind(
|
|
332
|
+
target.wikiLedgerAdapter,
|
|
333
|
+
transactionLedger,
|
|
334
|
+
tenantId,
|
|
335
|
+
);
|
|
336
|
+
const verifier = bind(
|
|
337
|
+
target.verifierWikiLedgerAdapter,
|
|
338
|
+
verifierTransactionLedger,
|
|
339
|
+
tenantId,
|
|
340
|
+
);
|
|
341
|
+
if (!same(provider.wiki.descriptor, verifier.wiki.descriptor))
|
|
342
|
+
throw new TypeError("Wiki disposition reader scopes differ");
|
|
343
|
+
const run = provider.wiki.descriptor.evolutionRunId;
|
|
344
|
+
if (runs.has(run))
|
|
345
|
+
throw new TypeError(
|
|
346
|
+
"Wiki disposition runs must be unique, not duplicate",
|
|
347
|
+
);
|
|
348
|
+
runs.add(run);
|
|
349
|
+
return Object.freeze({
|
|
350
|
+
provider,
|
|
351
|
+
verifier,
|
|
352
|
+
commit: target.wikiLedgerAdapter.commitRevision,
|
|
353
|
+
});
|
|
354
|
+
});
|
|
355
|
+
const { provider, verifier } = bindings[0];
|
|
356
|
+
const left = provider.operations.currentContext().checkpoint;
|
|
357
|
+
const right = verifier.operations.currentContext().checkpoint;
|
|
358
|
+
if (
|
|
359
|
+
["epoch", "ledgerId", "identityDigest"].some(
|
|
360
|
+
(key) => left[key] !== right[key],
|
|
361
|
+
)
|
|
362
|
+
)
|
|
363
|
+
throw new TypeError("Wiki disposition readers belong to different ledgers");
|
|
364
|
+
const providerIdentity = captureData(providerDescriptor);
|
|
365
|
+
const verifierIdentity = captureData(verifierDescriptor);
|
|
366
|
+
async function proofPair(request) {
|
|
367
|
+
const context = provider.operations.currentContext();
|
|
368
|
+
if (!same(context, verifier.operations.currentContext()))
|
|
369
|
+
fail("independent ledger heads differ");
|
|
370
|
+
let selected = null;
|
|
371
|
+
for (const binding of bindings) {
|
|
372
|
+
const query = {
|
|
373
|
+
tenantId: request.tenantId,
|
|
374
|
+
stateDigest: request.dependency.digest,
|
|
375
|
+
};
|
|
376
|
+
const original = binding.provider.wiki.findStateRevision(query);
|
|
377
|
+
const independentOriginal =
|
|
378
|
+
binding.verifier.wiki.findStateRevision(query);
|
|
379
|
+
if (!same(original, independentOriginal))
|
|
380
|
+
fail("independent Wiki target lookup differs");
|
|
381
|
+
if (original) {
|
|
382
|
+
if (selected)
|
|
383
|
+
fail("Wiki target resolves to more than one configured run");
|
|
384
|
+
selected = { binding, original, independentOriginal };
|
|
385
|
+
}
|
|
386
|
+
}
|
|
387
|
+
if (!selected)
|
|
388
|
+
fail("Wiki target is absent from the configured authenticated runs");
|
|
389
|
+
const primary = await prove(
|
|
390
|
+
selected.binding.provider,
|
|
391
|
+
request,
|
|
392
|
+
context,
|
|
393
|
+
selected.original,
|
|
394
|
+
configuration,
|
|
395
|
+
);
|
|
396
|
+
const independent = await prove(
|
|
397
|
+
selected.binding.verifier,
|
|
398
|
+
request,
|
|
399
|
+
context,
|
|
400
|
+
selected.independentOriginal,
|
|
401
|
+
configuration,
|
|
402
|
+
);
|
|
403
|
+
if (!same(primary, independent))
|
|
404
|
+
fail("independent Wiki effect proof differs");
|
|
405
|
+
return { proof: primary, binding: selected.binding };
|
|
406
|
+
}
|
|
407
|
+
function resultFor(request, proof) {
|
|
408
|
+
const core = {
|
|
409
|
+
schema: GOVERNED_KNOWLEDGE_DEPENDENCY_RESULT_SCHEMA,
|
|
410
|
+
tenantId,
|
|
411
|
+
deviceId,
|
|
412
|
+
operationId: request.operationId,
|
|
413
|
+
requestDigest: request.requestDigest,
|
|
414
|
+
knowledgeId: request.knowledgeId,
|
|
415
|
+
revocationReceiptDigest: request.revocationReceiptDigest,
|
|
416
|
+
dependencyKind: request.dependency.kind,
|
|
417
|
+
dependencyDigest: request.dependency.digest,
|
|
418
|
+
dependencyDisposition: request.dependency.disposition,
|
|
419
|
+
authorityId: providerIdentity.authorityId,
|
|
420
|
+
authorityRevision: providerIdentity.revision,
|
|
421
|
+
handlerArtifactDigest: providerIdentity.handlerArtifactDigest,
|
|
422
|
+
applied: true,
|
|
423
|
+
durable: true,
|
|
424
|
+
idempotent: true,
|
|
425
|
+
appliedAt: proof.fence.evidence.timestamp,
|
|
426
|
+
};
|
|
427
|
+
const { algorithm, keyId, value } = proof.fence.evidence.signature;
|
|
428
|
+
return captureData({
|
|
429
|
+
...core,
|
|
430
|
+
resultDigest: digestGovernedKnowledgeDependencyResult(core),
|
|
431
|
+
attestation: { algorithm, keyId, value },
|
|
432
|
+
});
|
|
433
|
+
}
|
|
434
|
+
return createGovernedKnowledgeDependencyAuthority({
|
|
435
|
+
tenantId,
|
|
436
|
+
deviceId,
|
|
437
|
+
providerDescriptor: providerIdentity,
|
|
438
|
+
verifierDescriptor: verifierIdentity,
|
|
439
|
+
provider: Object.freeze({
|
|
440
|
+
async apply(request) {
|
|
441
|
+
let { proof, binding } = await proofPair(request);
|
|
442
|
+
while (!proof.complete) {
|
|
443
|
+
const done = proof.history.successors.length;
|
|
444
|
+
const revision = await derive(
|
|
445
|
+
binding.provider,
|
|
446
|
+
proof.current,
|
|
447
|
+
proof.parts[done],
|
|
448
|
+
proof.fence,
|
|
449
|
+
configuration,
|
|
450
|
+
);
|
|
451
|
+
let commitError = null;
|
|
452
|
+
try {
|
|
453
|
+
binding.commit({
|
|
454
|
+
expectedStateDigest: proof.current.stateDigest,
|
|
455
|
+
expectedLedgerHead: proof.checkpoint,
|
|
456
|
+
revision,
|
|
457
|
+
});
|
|
458
|
+
} catch (error) {
|
|
459
|
+
commitError = error;
|
|
460
|
+
}
|
|
461
|
+
// Lost acknowledgements are resolved from independently replayed
|
|
462
|
+
// actual history, never from a provider's success flag.
|
|
463
|
+
const next = (await proofPair(request)).proof;
|
|
464
|
+
if (next.history.successors.length !== done + 1) {
|
|
465
|
+
if (commitError) throw commitError;
|
|
466
|
+
fail("Wiki commit did not durably advance the authorized sequence");
|
|
467
|
+
}
|
|
468
|
+
proof = next;
|
|
469
|
+
}
|
|
470
|
+
return resultFor(request, proof);
|
|
471
|
+
},
|
|
472
|
+
}),
|
|
473
|
+
verifier: Object.freeze({
|
|
474
|
+
async verify({ request, result }) {
|
|
475
|
+
const { proof } = await proofPair(request);
|
|
476
|
+
if (!proof.complete || !same(result, resultFor(request, proof)))
|
|
477
|
+
fail(
|
|
478
|
+
"Wiki disposition is not completely and independently confirmed",
|
|
479
|
+
);
|
|
480
|
+
return captureData({
|
|
481
|
+
authenticated: true,
|
|
482
|
+
durable: true,
|
|
483
|
+
tenantId,
|
|
484
|
+
deviceId,
|
|
485
|
+
operationId: request.operationId,
|
|
486
|
+
requestDigest: request.requestDigest,
|
|
487
|
+
resultDigest: result.resultDigest,
|
|
488
|
+
providerAuthorityId: providerIdentity.authorityId,
|
|
489
|
+
providerRevision: providerIdentity.revision,
|
|
490
|
+
verifierAuthorityId: verifierIdentity.authorityId,
|
|
491
|
+
verifierRevision: verifierIdentity.revision,
|
|
492
|
+
verificationReceiptDigest: digest(
|
|
493
|
+
`${configuration.schema}/verification`,
|
|
494
|
+
{
|
|
495
|
+
requestDigest: request.requestDigest,
|
|
496
|
+
resultDigest: result.resultDigest,
|
|
497
|
+
proof,
|
|
498
|
+
verifierIdentity,
|
|
499
|
+
},
|
|
500
|
+
),
|
|
501
|
+
});
|
|
502
|
+
},
|
|
503
|
+
}),
|
|
504
|
+
});
|
|
505
|
+
}
|
|
506
|
+
|
|
507
|
+
export function createGovernedKnowledgeWikiTombstoneAuthority(options = {}) {
|
|
508
|
+
return createWikiDispositionAuthority(options, TOMBSTONE);
|
|
509
|
+
}
|
|
510
|
+
|
|
511
|
+
// Quarantine is a distinct non-deletion state. The generic Wiki maintainer
|
|
512
|
+
// refuses to rewrite quarantined patterns, so only a future separately governed
|
|
513
|
+
// release authority can make them actionable again.
|
|
514
|
+
export function createGovernedKnowledgeWikiQuarantineAuthority(options = {}) {
|
|
515
|
+
return createWikiDispositionAuthority(options, QUARANTINE);
|
|
516
|
+
}
|