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
|
@@ -10,6 +10,15 @@
|
|
|
10
10
|
*/
|
|
11
11
|
|
|
12
12
|
import { createHash, randomBytes } from "node:crypto";
|
|
13
|
+
import {
|
|
14
|
+
projectAgentOpaqueTransportBlock,
|
|
15
|
+
snapshotAgentModelRequest,
|
|
16
|
+
} from "./agent-model-projection.js";
|
|
17
|
+
import {
|
|
18
|
+
createEvidenceJsonTextBoundary,
|
|
19
|
+
EVIDENCE_JSON_POLICY,
|
|
20
|
+
isAgentToolArgumentsPath,
|
|
21
|
+
} from "./evidence-json-text.js";
|
|
13
22
|
|
|
14
23
|
export const EVOLUTION_SOURCE_VERIFICATION_SCHEMA =
|
|
15
24
|
"chainlesschain.evolution-source-verification/v1";
|
|
@@ -448,6 +457,70 @@ const RULESET_DIGEST = `sha256:${createHash("sha256")
|
|
|
448
457
|
)
|
|
449
458
|
.digest("hex")}`;
|
|
450
459
|
|
|
460
|
+
// A separate policy keeps existing v2 artifacts readable without changing
|
|
461
|
+
// their meaning/digest. Agent messages are authenticated and scanned as whole
|
|
462
|
+
// fields; the existing total model-content ceiling still applies. Never scan
|
|
463
|
+
// independent 8 KiB slices, which would miss secrets/injections at the seams.
|
|
464
|
+
const PREFIXED_CREDENTIAL_SOURCE =
|
|
465
|
+
"(?:sk|ghp|github_pat|xox[baprs])[-_][A-Za-z0-9_-]{12,}";
|
|
466
|
+
const EMBEDDED_CREDENTIAL_SOURCE =
|
|
467
|
+
"(?:sk-|ghp_|github_pat_|xox[baprs]-)[A-Za-z0-9_-]{12,}";
|
|
468
|
+
const AGENT_MODEL_RULESET_V1 = Object.freeze({
|
|
469
|
+
...RULESET,
|
|
470
|
+
schema: "chainlesschain.evolution-agent-model-projection-rules/v1",
|
|
471
|
+
version: 1,
|
|
472
|
+
maxStringChars: RULESET.maxModelBytes,
|
|
473
|
+
maxInputBytes: 1024 * 1024,
|
|
474
|
+
textPolicy: "whole-field-before-budget-v1",
|
|
475
|
+
overflowPolicy: "reject",
|
|
476
|
+
embeddedCredentialPattern: EMBEDDED_CREDENTIAL_SOURCE,
|
|
477
|
+
});
|
|
478
|
+
const AGENT_MODEL_RULESET_V1_DIGEST = `sha256:${createHash("sha256")
|
|
479
|
+
.update(
|
|
480
|
+
`${AGENT_MODEL_RULESET_V1.schema}\0${JSON.stringify(AGENT_MODEL_RULESET_V1)}`,
|
|
481
|
+
"utf8",
|
|
482
|
+
)
|
|
483
|
+
.digest("hex")}`;
|
|
484
|
+
const AGENT_MODEL_RULESET_V2 = Object.freeze({
|
|
485
|
+
...AGENT_MODEL_RULESET_V1,
|
|
486
|
+
schema: "chainlesschain.evolution-agent-model-projection-rules/v2",
|
|
487
|
+
version: 2,
|
|
488
|
+
jsonTextPolicy: EVIDENCE_JSON_POLICY,
|
|
489
|
+
});
|
|
490
|
+
export const EVOLUTION_AGENT_MODEL_PROJECTION_RULESET_V2_DIGEST = `sha256:${createHash(
|
|
491
|
+
"sha256",
|
|
492
|
+
)
|
|
493
|
+
.update(
|
|
494
|
+
`${AGENT_MODEL_RULESET_V2.schema}\0${JSON.stringify(AGENT_MODEL_RULESET_V2)}`,
|
|
495
|
+
"utf8",
|
|
496
|
+
)
|
|
497
|
+
.digest("hex")}`;
|
|
498
|
+
const AGENT_MODEL_RULESET = Object.freeze({
|
|
499
|
+
...AGENT_MODEL_RULESET_V2,
|
|
500
|
+
schema: "chainlesschain.evolution-agent-model-projection-rules/v3",
|
|
501
|
+
version: 3,
|
|
502
|
+
opaqueTransportPolicy:
|
|
503
|
+
"digest-bound-base64-image-and-signed-thinking-no-plaintext-projection-v1",
|
|
504
|
+
});
|
|
505
|
+
export const EVOLUTION_AGENT_MODEL_PROJECTION_RULESET_DIGEST = `sha256:${createHash(
|
|
506
|
+
"sha256",
|
|
507
|
+
)
|
|
508
|
+
.update(
|
|
509
|
+
`${AGENT_MODEL_RULESET.schema}\0${JSON.stringify(AGENT_MODEL_RULESET)}`,
|
|
510
|
+
"utf8",
|
|
511
|
+
)
|
|
512
|
+
.digest("hex")}`;
|
|
513
|
+
const SUPPORTED_RULESETS = new Map([
|
|
514
|
+
[RULESET_DIGEST, RULESET],
|
|
515
|
+
[AGENT_MODEL_RULESET_V1_DIGEST, AGENT_MODEL_RULESET_V1],
|
|
516
|
+
[EVOLUTION_AGENT_MODEL_PROJECTION_RULESET_V2_DIGEST, AGENT_MODEL_RULESET_V2],
|
|
517
|
+
[EVOLUTION_AGENT_MODEL_PROJECTION_RULESET_DIGEST, AGENT_MODEL_RULESET],
|
|
518
|
+
]);
|
|
519
|
+
|
|
520
|
+
const PREFIXED_CREDENTIAL_PATTERN = Object.freeze({
|
|
521
|
+
type: "credential",
|
|
522
|
+
regex: new RegExp(`\\b${PREFIXED_CREDENTIAL_SOURCE}\\b`, "gu"),
|
|
523
|
+
});
|
|
451
524
|
const VALUE_PATTERNS = Object.freeze([
|
|
452
525
|
Object.freeze({
|
|
453
526
|
type: "private-key",
|
|
@@ -463,10 +536,7 @@ const VALUE_PATTERNS = Object.freeze([
|
|
|
463
536
|
regex:
|
|
464
537
|
/\b(?:api[_-]?key|access[_-]?token|refresh[_-]?token|client[_-]?secret|password|passwd|secret)\s*[:=]\s*["']?[A-Za-z0-9._~+/=-]{8,}["']?/giu,
|
|
465
538
|
}),
|
|
466
|
-
|
|
467
|
-
type: "credential",
|
|
468
|
-
regex: /\b(?:sk|ghp|github_pat|xox[baprs])[-_][A-Za-z0-9_-]{12,}\b/gu,
|
|
469
|
-
}),
|
|
539
|
+
PREFIXED_CREDENTIAL_PATTERN,
|
|
470
540
|
Object.freeze({
|
|
471
541
|
type: "credential",
|
|
472
542
|
regex: /\bAKIA[A-Z0-9]{16}\b/gu,
|
|
@@ -506,6 +576,24 @@ const VALUE_PATTERNS = Object.freeze([
|
|
|
506
576
|
}),
|
|
507
577
|
]);
|
|
508
578
|
|
|
579
|
+
const AGENT_VALUE_PATTERNS = Object.freeze([
|
|
580
|
+
...VALUE_PATTERNS,
|
|
581
|
+
Object.freeze({
|
|
582
|
+
type: "credential",
|
|
583
|
+
// Use each provider's real prefix/delimiter for embedded matches. Treating
|
|
584
|
+
// embedded "sk_" as a key would corrupt identifiers like ask_user_question.
|
|
585
|
+
regex: new RegExp(`${EMBEDDED_CREDENTIAL_SOURCE}\\b`, "gu"),
|
|
586
|
+
}),
|
|
587
|
+
]);
|
|
588
|
+
|
|
589
|
+
function valuePatterns(ruleset) {
|
|
590
|
+
return ruleset === AGENT_MODEL_RULESET ||
|
|
591
|
+
ruleset === AGENT_MODEL_RULESET_V2 ||
|
|
592
|
+
ruleset === AGENT_MODEL_RULESET_V1
|
|
593
|
+
? AGENT_VALUE_PATTERNS
|
|
594
|
+
: VALUE_PATTERNS;
|
|
595
|
+
}
|
|
596
|
+
|
|
509
597
|
const REDACTION_TYPES = new Set([
|
|
510
598
|
...VALUE_PATTERNS.map(({ type }) => type),
|
|
511
599
|
"pii",
|
|
@@ -689,10 +777,10 @@ function deepFreeze(value, seen = new WeakSet()) {
|
|
|
689
777
|
return Object.freeze(value);
|
|
690
778
|
}
|
|
691
779
|
|
|
692
|
-
function assertNoKnownSecrets(content) {
|
|
780
|
+
function assertNoKnownSecrets(content, patterns = VALUE_PATTERNS) {
|
|
693
781
|
const serialized =
|
|
694
782
|
typeof content === "string" ? content : canonicalJson(content);
|
|
695
|
-
for (const pattern of
|
|
783
|
+
for (const pattern of patterns) {
|
|
696
784
|
pattern.regex.lastIndex = 0;
|
|
697
785
|
if (pattern.regex.test(serialized)) {
|
|
698
786
|
throw projectionError(
|
|
@@ -1080,9 +1168,9 @@ function sanitizeKey(key, path, findings, injections) {
|
|
|
1080
1168
|
return safeKey;
|
|
1081
1169
|
}
|
|
1082
1170
|
|
|
1083
|
-
function sanitizeString(value, path, findings, injections) {
|
|
1171
|
+
function sanitizeString(value, path, findings, injections, ruleset, patterns) {
|
|
1084
1172
|
let output = value;
|
|
1085
|
-
for (const pattern of
|
|
1173
|
+
for (const pattern of patterns) {
|
|
1086
1174
|
pattern.regex.lastIndex = 0;
|
|
1087
1175
|
let count = 0;
|
|
1088
1176
|
output = output.replace(pattern.regex, () => {
|
|
@@ -1094,7 +1182,7 @@ function sanitizeString(value, path, findings, injections) {
|
|
|
1094
1182
|
}
|
|
1095
1183
|
const securityNormalized = unicodeSecurityText(output);
|
|
1096
1184
|
if (securityNormalized !== output) {
|
|
1097
|
-
for (const pattern of
|
|
1185
|
+
for (const pattern of patterns) {
|
|
1098
1186
|
pattern.regex.lastIndex = 0;
|
|
1099
1187
|
if (pattern.regex.test(securityNormalized)) {
|
|
1100
1188
|
findings.push({
|
|
@@ -1115,25 +1203,40 @@ function sanitizeString(value, path, findings, injections) {
|
|
|
1115
1203
|
});
|
|
1116
1204
|
output = "[QUARANTINED:POTENTIAL_PROMPT_INJECTION]";
|
|
1117
1205
|
}
|
|
1118
|
-
if (output.length >
|
|
1206
|
+
if (output.length > ruleset.maxStringChars) {
|
|
1207
|
+
if (ruleset.overflowPolicy === "reject") {
|
|
1208
|
+
throw projectionError(
|
|
1209
|
+
EVOLUTION_PROJECTION_INVALID_CODE,
|
|
1210
|
+
"Agent model projection exceeds the text budget",
|
|
1211
|
+
);
|
|
1212
|
+
}
|
|
1119
1213
|
findings.push({
|
|
1120
1214
|
type: "content-truncation",
|
|
1121
1215
|
path: findingPath(path),
|
|
1122
1216
|
count: 1,
|
|
1123
1217
|
});
|
|
1124
|
-
output = `${output.slice(0,
|
|
1218
|
+
output = `${output.slice(0, ruleset.maxStringChars)}[TRUNCATED]`;
|
|
1125
1219
|
}
|
|
1126
1220
|
return output;
|
|
1127
1221
|
}
|
|
1128
1222
|
|
|
1129
|
-
function sanitizePayload(
|
|
1223
|
+
function sanitizePayload(
|
|
1224
|
+
payload,
|
|
1225
|
+
ruleset = RULESET,
|
|
1226
|
+
patterns = valuePatterns(ruleset),
|
|
1227
|
+
) {
|
|
1130
1228
|
const findings = [];
|
|
1131
1229
|
const injections = [];
|
|
1132
1230
|
let nodes = 0;
|
|
1133
1231
|
let truncated = false;
|
|
1134
|
-
const
|
|
1232
|
+
const jsonText = ruleset.jsonTextPolicy
|
|
1233
|
+
? createEvidenceJsonTextBoundary((message) =>
|
|
1234
|
+
projectionError(EVOLUTION_PROJECTION_INVALID_CODE, message),
|
|
1235
|
+
)
|
|
1236
|
+
: null;
|
|
1237
|
+
const visit = (value, path, depth, layer = 0) => {
|
|
1135
1238
|
nodes += 1;
|
|
1136
|
-
if (nodes >
|
|
1239
|
+
if (nodes > ruleset.maxNodes || depth > ruleset.maxDepth) {
|
|
1137
1240
|
truncated = true;
|
|
1138
1241
|
findings.push({
|
|
1139
1242
|
type: "content-truncation",
|
|
@@ -1142,8 +1245,53 @@ function sanitizePayload(payload) {
|
|
|
1142
1245
|
});
|
|
1143
1246
|
return "[TRUNCATED:CONTENT_BUDGET]";
|
|
1144
1247
|
}
|
|
1145
|
-
|
|
1146
|
-
|
|
1248
|
+
const toolArguments = jsonText && isAgentToolArgumentsPath(path);
|
|
1249
|
+
const opaqueTransportBlock =
|
|
1250
|
+
ruleset === AGENT_MODEL_RULESET
|
|
1251
|
+
? projectAgentOpaqueTransportBlock(value, path.join("."))
|
|
1252
|
+
: null;
|
|
1253
|
+
if (opaqueTransportBlock !== null) return opaqueTransportBlock;
|
|
1254
|
+
if (toolArguments && typeof value !== "string" && !isPlainRecord(value)) {
|
|
1255
|
+
throw projectionError(
|
|
1256
|
+
EVOLUTION_PROJECTION_INVALID_CODE,
|
|
1257
|
+
"Agent tool arguments require a JSON object",
|
|
1258
|
+
);
|
|
1259
|
+
}
|
|
1260
|
+
if (typeof value === "string") {
|
|
1261
|
+
const plain = (text) =>
|
|
1262
|
+
sanitizeString(text, path, findings, injections, ruleset, patterns);
|
|
1263
|
+
if (!jsonText) return plain(value);
|
|
1264
|
+
const output = jsonText(value, {
|
|
1265
|
+
layer,
|
|
1266
|
+
objectOnly: toolArguments,
|
|
1267
|
+
visit: (decoded, nextLayer) =>
|
|
1268
|
+
visit(decoded, [...path, "$json"], depth + 1, nextLayer),
|
|
1269
|
+
plain,
|
|
1270
|
+
equal: (left, right) => canonicalJson(left) === canonicalJson(right),
|
|
1271
|
+
});
|
|
1272
|
+
if (output.length > ruleset.maxStringChars) {
|
|
1273
|
+
throw projectionError(
|
|
1274
|
+
EVOLUTION_PROJECTION_INVALID_CODE,
|
|
1275
|
+
"Agent model projection exceeds the text budget",
|
|
1276
|
+
);
|
|
1277
|
+
}
|
|
1278
|
+
// Check instruction spans, but never regex-rewrite JSON syntax/numbers
|
|
1279
|
+
// after decoding: numeric PII must become a quoted, valid JSON marker.
|
|
1280
|
+
const matched = injectionMatches(output);
|
|
1281
|
+
if (matched.length) {
|
|
1282
|
+
injections.push({
|
|
1283
|
+
path: findingPath(path),
|
|
1284
|
+
patternIds: matched.map(({ id }) => id),
|
|
1285
|
+
});
|
|
1286
|
+
if (toolArguments)
|
|
1287
|
+
throw projectionError(
|
|
1288
|
+
EVOLUTION_PROJECTION_INVALID_CODE,
|
|
1289
|
+
"Agent tool arguments contain unsafe cross-field text",
|
|
1290
|
+
);
|
|
1291
|
+
return "[QUARANTINED:POTENTIAL_PROMPT_INJECTION]";
|
|
1292
|
+
}
|
|
1293
|
+
return output;
|
|
1294
|
+
}
|
|
1147
1295
|
if (value === null || typeof value === "boolean") return value;
|
|
1148
1296
|
if (typeof value === "number") {
|
|
1149
1297
|
if (!Number.isFinite(value)) {
|
|
@@ -1152,12 +1300,30 @@ function sanitizePayload(payload) {
|
|
|
1152
1300
|
"Raw payload contains a non-finite number",
|
|
1153
1301
|
);
|
|
1154
1302
|
}
|
|
1303
|
+
if (jsonText) {
|
|
1304
|
+
if (Number.isInteger(value) && !Number.isSafeInteger(value)) {
|
|
1305
|
+
throw projectionError(
|
|
1306
|
+
EVOLUTION_PROJECTION_INVALID_CODE,
|
|
1307
|
+
"Agent model JSON number exceeds the safe integer budget",
|
|
1308
|
+
);
|
|
1309
|
+
}
|
|
1310
|
+
const numberText = String(value);
|
|
1311
|
+
const safe = sanitizeString(
|
|
1312
|
+
numberText,
|
|
1313
|
+
path,
|
|
1314
|
+
findings,
|
|
1315
|
+
injections,
|
|
1316
|
+
ruleset,
|
|
1317
|
+
patterns,
|
|
1318
|
+
);
|
|
1319
|
+
if (safe !== numberText) return safe;
|
|
1320
|
+
}
|
|
1155
1321
|
return value;
|
|
1156
1322
|
}
|
|
1157
1323
|
if (Array.isArray(value)) {
|
|
1158
1324
|
const output = [];
|
|
1159
1325
|
for (let index = 0; index < value.length; index += 1) {
|
|
1160
|
-
if (nodes >=
|
|
1326
|
+
if (nodes >= ruleset.maxNodes) {
|
|
1161
1327
|
truncated = true;
|
|
1162
1328
|
findings.push({
|
|
1163
1329
|
type: "content-truncation",
|
|
@@ -1167,7 +1333,9 @@ function sanitizePayload(payload) {
|
|
|
1167
1333
|
output.push("[TRUNCATED:CONTENT_BUDGET]");
|
|
1168
1334
|
break;
|
|
1169
1335
|
}
|
|
1170
|
-
output.push(
|
|
1336
|
+
output.push(
|
|
1337
|
+
visit(value[index], [...path, String(index)], depth + 1, layer),
|
|
1338
|
+
);
|
|
1171
1339
|
}
|
|
1172
1340
|
return output;
|
|
1173
1341
|
}
|
|
@@ -1183,7 +1351,7 @@ function sanitizePayload(payload) {
|
|
|
1183
1351
|
// projected content before the receipt is attested.
|
|
1184
1352
|
const output = Object.create(null);
|
|
1185
1353
|
for (const key of Object.keys(value).sort()) {
|
|
1186
|
-
if (nodes >=
|
|
1354
|
+
if (nodes >= ruleset.maxNodes) {
|
|
1187
1355
|
truncated = true;
|
|
1188
1356
|
findings.push({
|
|
1189
1357
|
type: "content-truncation",
|
|
@@ -1210,7 +1378,12 @@ function sanitizePayload(payload) {
|
|
|
1210
1378
|
count: 1,
|
|
1211
1379
|
});
|
|
1212
1380
|
} else {
|
|
1213
|
-
projectedValue = visit(
|
|
1381
|
+
projectedValue = visit(
|
|
1382
|
+
value[key],
|
|
1383
|
+
[...path, safeKey],
|
|
1384
|
+
depth + 1,
|
|
1385
|
+
layer,
|
|
1386
|
+
);
|
|
1214
1387
|
}
|
|
1215
1388
|
Object.defineProperty(output, safeKey, {
|
|
1216
1389
|
value: projectedValue,
|
|
@@ -1223,7 +1396,7 @@ function sanitizePayload(payload) {
|
|
|
1223
1396
|
};
|
|
1224
1397
|
let content = visit(payload, [], 0);
|
|
1225
1398
|
if (
|
|
1226
|
-
Buffer.byteLength(canonicalJson(content), "utf8") >
|
|
1399
|
+
Buffer.byteLength(canonicalJson(content), "utf8") > ruleset.maxModelBytes
|
|
1227
1400
|
) {
|
|
1228
1401
|
truncated = true;
|
|
1229
1402
|
content = {
|
|
@@ -1241,12 +1414,21 @@ function sanitizePayload(payload) {
|
|
|
1241
1414
|
byType[finding.type] = (byType[finding.type] || 0) + finding.count;
|
|
1242
1415
|
paths.add(finding.path);
|
|
1243
1416
|
}
|
|
1417
|
+
if (
|
|
1418
|
+
ruleset.overflowPolicy === "reject" &&
|
|
1419
|
+
(truncated || (byType["content-truncation"] ?? 0) > 0)
|
|
1420
|
+
) {
|
|
1421
|
+
throw projectionError(
|
|
1422
|
+
EVOLUTION_PROJECTION_INVALID_CODE,
|
|
1423
|
+
"Agent model projection exceeds the content budget",
|
|
1424
|
+
);
|
|
1425
|
+
}
|
|
1244
1426
|
const redactionSummary = {
|
|
1245
1427
|
total: Object.values(byType).reduce((sum, count) => sum + count, 0),
|
|
1246
1428
|
byType,
|
|
1247
1429
|
paths: [...paths].sort(),
|
|
1248
1430
|
};
|
|
1249
|
-
assertNoKnownSecrets(content);
|
|
1431
|
+
assertNoKnownSecrets(content, patterns);
|
|
1250
1432
|
return deepFreeze({
|
|
1251
1433
|
content,
|
|
1252
1434
|
redactionSummary,
|
|
@@ -1936,7 +2118,7 @@ function buildRawRecord(source, commitment, evidenceId, storage) {
|
|
|
1936
2118
|
});
|
|
1937
2119
|
}
|
|
1938
2120
|
|
|
1939
|
-
function buildModelProjection(raw, sanitized) {
|
|
2121
|
+
function buildModelProjection(raw, sanitized, rulesetDigest) {
|
|
1940
2122
|
const opaque = ["confidential", "restricted"].includes(raw.sensitivity);
|
|
1941
2123
|
const core = {
|
|
1942
2124
|
schema: EVOLUTION_MODEL_PROJECTION_SCHEMA,
|
|
@@ -1952,7 +2134,7 @@ function buildModelProjection(raw, sanitized) {
|
|
|
1952
2134
|
: sanitized.redactionSummary,
|
|
1953
2135
|
injectionFindings: opaque ? [] : sanitized.injectionFindings,
|
|
1954
2136
|
truncated: opaque ? false : sanitized.truncated,
|
|
1955
|
-
rulesetDigest
|
|
2137
|
+
rulesetDigest,
|
|
1956
2138
|
};
|
|
1957
2139
|
return deepFreeze({
|
|
1958
2140
|
...core,
|
|
@@ -1990,7 +2172,7 @@ function buildTrustedProjection(
|
|
|
1990
2172
|
status,
|
|
1991
2173
|
reasonCodes,
|
|
1992
2174
|
content: status === "trusted" ? trustedSanitized.content : null,
|
|
1993
|
-
rulesetDigest:
|
|
2175
|
+
rulesetDigest: model.rulesetDigest,
|
|
1994
2176
|
};
|
|
1995
2177
|
return deepFreeze({
|
|
1996
2178
|
...core,
|
|
@@ -2013,7 +2195,7 @@ function buildReceipt(raw, model, trusted, createdAt) {
|
|
|
2013
2195
|
rawRecordDigest: raw.rawRecordDigest,
|
|
2014
2196
|
modelProjectionDigest: model.projectionDigest,
|
|
2015
2197
|
trustedProjectionDigest: trusted.projectionDigest,
|
|
2016
|
-
rulesetDigest:
|
|
2198
|
+
rulesetDigest: model.rulesetDigest,
|
|
2017
2199
|
redactionSummary: model.redactionSummary,
|
|
2018
2200
|
injectionCount: model.injectionFindings.length,
|
|
2019
2201
|
trustedStatus: trusted.status,
|
|
@@ -2767,6 +2949,13 @@ function validateBundleIntegrity(bundle) {
|
|
|
2767
2949
|
"projection receipt",
|
|
2768
2950
|
);
|
|
2769
2951
|
validateRawMetadata(raw, receipt);
|
|
2952
|
+
const ruleset = SUPPORTED_RULESETS.get(model.rulesetDigest);
|
|
2953
|
+
if (!ruleset) {
|
|
2954
|
+
throw projectionError(
|
|
2955
|
+
EVOLUTION_PROJECTION_INVALID_CODE,
|
|
2956
|
+
"unsupported projection ruleset",
|
|
2957
|
+
);
|
|
2958
|
+
}
|
|
2770
2959
|
validateRedactionSummary(model.redactionSummary);
|
|
2771
2960
|
if (
|
|
2772
2961
|
!Array.isArray(model.injectionFindings) ||
|
|
@@ -2864,9 +3053,8 @@ function validateBundleIntegrity(bundle) {
|
|
|
2864
3053
|
canonicalJson(receipt.redactionSummary) !==
|
|
2865
3054
|
canonicalJson(model.redactionSummary) ||
|
|
2866
3055
|
receipt.trustedStatus !== trusted.status ||
|
|
2867
|
-
|
|
2868
|
-
|
|
2869
|
-
receipt.rulesetDigest !== RULESET_DIGEST ||
|
|
3056
|
+
trusted.rulesetDigest !== model.rulesetDigest ||
|
|
3057
|
+
receipt.rulesetDigest !== model.rulesetDigest ||
|
|
2870
3058
|
trusted.status !== expectedStatus ||
|
|
2871
3059
|
canonicalJson(trusted.reasonCodes) !== canonicalJson(expectedReasons) ||
|
|
2872
3060
|
(trusted.status === "quarantined" && trusted.content !== null) ||
|
|
@@ -2891,7 +3079,7 @@ function validateBundleIntegrity(bundle) {
|
|
|
2891
3079
|
!Number.isSafeInteger(receipt.injectionCount) ||
|
|
2892
3080
|
receipt.injectionCount < 0 ||
|
|
2893
3081
|
Buffer.byteLength(canonicalJson(model.content), "utf8") >
|
|
2894
|
-
|
|
3082
|
+
ruleset.maxModelBytes
|
|
2895
3083
|
) {
|
|
2896
3084
|
throw projectionError(
|
|
2897
3085
|
EVOLUTION_PROJECTION_INVALID_CODE,
|
|
@@ -2899,11 +3087,40 @@ function validateBundleIntegrity(bundle) {
|
|
|
2899
3087
|
);
|
|
2900
3088
|
}
|
|
2901
3089
|
if (model.content !== null) {
|
|
2902
|
-
|
|
3090
|
+
if (
|
|
3091
|
+
ruleset === AGENT_MODEL_RULESET ||
|
|
3092
|
+
ruleset === AGENT_MODEL_RULESET_V2 ||
|
|
3093
|
+
ruleset === AGENT_MODEL_RULESET_V1
|
|
3094
|
+
) {
|
|
3095
|
+
snapshotAgentModelRequest(model.content, {
|
|
3096
|
+
allowStructuredArgumentText: ruleset !== AGENT_MODEL_RULESET_V1,
|
|
3097
|
+
allowOpaqueTransportBlocks: ruleset === AGENT_MODEL_RULESET,
|
|
3098
|
+
});
|
|
3099
|
+
if (
|
|
3100
|
+
model.truncated ||
|
|
3101
|
+
(model.redactionSummary.byType["content-truncation"] ?? 0) > 0
|
|
3102
|
+
) {
|
|
3103
|
+
throw projectionError(
|
|
3104
|
+
EVOLUTION_PROJECTION_INVALID_CODE,
|
|
3105
|
+
"Agent model projection cannot be truncated",
|
|
3106
|
+
);
|
|
3107
|
+
}
|
|
3108
|
+
}
|
|
3109
|
+
if (
|
|
3110
|
+
ruleset.jsonTextPolicy &&
|
|
3111
|
+
canonicalJson(sanitizePayload(model.content, ruleset).content) !==
|
|
3112
|
+
canonicalJson(model.content)
|
|
3113
|
+
) {
|
|
3114
|
+
throw projectionError(
|
|
3115
|
+
EVOLUTION_PROJECTION_INVALID_CODE,
|
|
3116
|
+
"Agent model JSON content is not a safe projection",
|
|
3117
|
+
);
|
|
3118
|
+
}
|
|
3119
|
+
assertNoKnownSecrets(model.content, valuePatterns(ruleset));
|
|
2903
3120
|
assertNoInjectionText(model.content);
|
|
2904
3121
|
}
|
|
2905
3122
|
if (trusted.content !== null) {
|
|
2906
|
-
assertNoKnownSecrets(trusted.content);
|
|
3123
|
+
assertNoKnownSecrets(trusted.content, valuePatterns(ruleset));
|
|
2907
3124
|
assertNoInjectionText(trusted.content);
|
|
2908
3125
|
}
|
|
2909
3126
|
const attestation = validateAttestation(bundle.attestation, receipt);
|
|
@@ -3129,7 +3346,15 @@ export class EvolutionEvidenceProjector {
|
|
|
3129
3346
|
return { iso, milliseconds: new Date(iso).getTime() };
|
|
3130
3347
|
}
|
|
3131
3348
|
|
|
3132
|
-
|
|
3349
|
+
project(input) {
|
|
3350
|
+
return this.#project(input, RULESET);
|
|
3351
|
+
}
|
|
3352
|
+
|
|
3353
|
+
projectAgentModelRequest(input) {
|
|
3354
|
+
return this.#project(input, AGENT_MODEL_RULESET);
|
|
3355
|
+
}
|
|
3356
|
+
|
|
3357
|
+
async #project(input, ruleset) {
|
|
3133
3358
|
assertExactRecord(input, INPUT_KEYS, "evidence projection input");
|
|
3134
3359
|
if (
|
|
3135
3360
|
typeof input.sourceEnvelope !== "string" ||
|
|
@@ -3141,7 +3366,10 @@ export class EvolutionEvidenceProjector {
|
|
|
3141
3366
|
"sourceEnvelope is invalid",
|
|
3142
3367
|
);
|
|
3143
3368
|
}
|
|
3144
|
-
const payload =
|
|
3369
|
+
const payload =
|
|
3370
|
+
ruleset === AGENT_MODEL_RULESET
|
|
3371
|
+
? snapshotAgentModelRequest(input.payload)
|
|
3372
|
+
: cloneCanonical(input.payload);
|
|
3145
3373
|
const sourceInputDigest = digest(
|
|
3146
3374
|
payload,
|
|
3147
3375
|
"chainlesschain.evolution-raw-plaintext/v2",
|
|
@@ -3381,10 +3609,16 @@ export class EvolutionEvidenceProjector {
|
|
|
3381
3609
|
injectionFindings: [],
|
|
3382
3610
|
truncated: false,
|
|
3383
3611
|
})
|
|
3384
|
-
: sanitizePayload(payload);
|
|
3385
|
-
const modelProjection = buildModelProjection(
|
|
3612
|
+
: sanitizePayload(payload, ruleset);
|
|
3613
|
+
const modelProjection = buildModelProjection(
|
|
3614
|
+
rawRecord,
|
|
3615
|
+
sanitized,
|
|
3616
|
+
ruleset === AGENT_MODEL_RULESET
|
|
3617
|
+
? EVOLUTION_AGENT_MODEL_PROJECTION_RULESET_DIGEST
|
|
3618
|
+
: RULESET_DIGEST,
|
|
3619
|
+
);
|
|
3386
3620
|
const trustedSanitized = source.compilable
|
|
3387
|
-
? sanitizePayload(source.trustedPayload)
|
|
3621
|
+
? sanitizePayload(source.trustedPayload, RULESET, valuePatterns(ruleset))
|
|
3388
3622
|
: null;
|
|
3389
3623
|
const trustedInputStructured =
|
|
3390
3624
|
source.compilable && isStructuredTrustedPayload(source.trustedPayload);
|