chainlesschain 0.166.21 → 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/README.md +67 -9
- package/package.json +4 -3
- package/src/assets/web-panel/assets/{AIOps-BjMnsUci.js → AIOps-DR-MWcZc.js} +1 -1
- package/src/assets/web-panel/assets/{ActionButton-DdYFP03A.js → ActionButton-DT8B7sEb.js} +1 -1
- package/src/assets/web-panel/assets/{Analytics-Bb8TuuK_.js → Analytics-asjh3dQJ.js} +3 -3
- package/src/assets/web-panel/assets/{AppLayout-Kn3TIOtk.js → AppLayout-DivQ491i.js} +5 -5
- package/src/assets/web-panel/assets/{Artifacts-4IxpqI_b.js → Artifacts-DPH2uUmy.js} +1 -1
- package/src/assets/web-panel/assets/{Audit-BOV2caqU.js → Audit-Bp2nLyc-.js} +1 -1
- package/src/assets/web-panel/assets/{BackgroundAgents-B86k-ay4.js → BackgroundAgents-CHS28khl.js} +1 -1
- package/src/assets/web-panel/assets/{Backup-C5_ie1e3.js → Backup-CKeaFSfz.js} +1 -1
- package/src/assets/web-panel/assets/{BaseInput-xpwg6QCW.js → BaseInput-CxwM9BAH.js} +1 -1
- package/src/assets/web-panel/assets/{Chat-CVZOcZau.js → Chat-DYLDwaCv.js} +4 -4
- package/src/assets/web-panel/assets/{ChatBubbleRenderer-D8fPYhUu.js → ChatBubbleRenderer-DdBJDBP0.js} +1 -1
- package/src/assets/web-panel/assets/{Checkbox-MKTq3zdP.js → Checkbox-uYTWOB8j.js} +1 -1
- package/src/assets/web-panel/assets/{Codegen-JUk3wzep.js → Codegen-CvYa_dwT.js} +1 -1
- package/src/assets/web-panel/assets/{Col-JPvTA0kC.js → Col-CanMAX4m.js} +1 -1
- package/src/assets/web-panel/assets/{Community-Tqgl87NQ.js → Community-B4WaDtHw.js} +1 -1
- package/src/assets/web-panel/assets/{Compact-BuAFYBmN.js → Compact-K93Uof_3.js} +1 -1
- package/src/assets/web-panel/assets/{Compliance-CXS9WIPZ.js → Compliance-CKeDLgUW.js} +1 -1
- package/src/assets/web-panel/assets/{Cowork-Ds2bFHrr.js → Cowork-P93grAeB.js} +3 -3
- package/src/assets/web-panel/assets/{Cron-C_dV_OeW.js → Cron-BSHnMtDn.js} +2 -2
- package/src/assets/web-panel/assets/{Crosschain-BsO6tIRo.js → Crosschain-epAOpUVJ.js} +1 -1
- package/src/assets/web-panel/assets/{DID-rNOFqBac.js → DID-ByjXfP7t.js} +2 -2
- package/src/assets/web-panel/assets/{Dashboard-C2fcKKVY.js → Dashboard-QztTU8tb.js} +2 -2
- package/src/assets/web-panel/assets/{Dropdown-Y7Ndr0X_.js → Dropdown-DhUc9yhN.js} +1 -1
- package/src/assets/web-panel/assets/{EmailListRenderer-DcP_uPmL.js → EmailListRenderer-C2sLhJJN.js} +1 -1
- package/src/assets/web-panel/assets/{FamilyGuardDashboard-Cwn3gDzk.js → FamilyGuardDashboard-CdfbWNDn.js} +1 -1
- package/src/assets/web-panel/assets/{Federation-ClQuOsqb.js → Federation-CcF_R7NW.js} +1 -1
- package/src/assets/web-panel/assets/{FormItemContext-DfwtmlcK.js → FormItemContext-Cm_X2IBk.js} +1 -1
- package/src/assets/web-panel/assets/{GenericCardRenderer-zNZhtbC5.js → GenericCardRenderer-DUi4NWlb.js} +1 -1
- package/src/assets/web-panel/assets/{Git-BZmdW-G5.js → Git-4Sq5FjBt.js} +2 -2
- package/src/assets/web-panel/assets/{Governance-CqBk4lEn.js → Governance-Dx2_v4V6.js} +1 -1
- package/src/assets/web-panel/assets/{Inference-Dbmt3ZXk.js → Inference-7Vr1xekR.js} +1 -1
- package/src/assets/web-panel/assets/{KnowledgeGraph-hMTH6qf3.js → KnowledgeGraph-Cnd2XOzf.js} +1 -1
- package/src/assets/web-panel/assets/{Logs-CkiYgiW2.js → Logs-B66QPVf-.js} +2 -2
- package/src/assets/web-panel/assets/{MarkdownRenderer-BL1FElXg.js → MarkdownRenderer-PLsEvhly.js} +1 -1
- package/src/assets/web-panel/assets/{Marketplace-CbB6wfin.js → Marketplace-BMIK9BmC.js} +1 -1
- package/src/assets/web-panel/assets/{McpTools-BSwiFtte.js → McpTools-BDbyp3J_.js} +3 -3
- package/src/assets/web-panel/assets/{Memory-B03PeHrz.js → Memory-CJdzfZGi.js} +2 -2
- package/src/assets/web-panel/assets/{MobileBridge-CRGrnd-X.js → MobileBridge-C2TH5Y3-.js} +1 -1
- package/src/assets/web-panel/assets/{MobileProjects-CE_5v2kO.js → MobileProjects-D1dYXkvV.js} +1 -1
- package/src/assets/web-panel/assets/{Mtc-Dp11QVx1.js → Mtc-B-4A1I1j.js} +4 -4
- package/src/assets/web-panel/assets/{MtcAudit-CYu-3JBu.js → MtcAudit-Bgcc9UOl.js} +5 -5
- package/src/assets/web-panel/assets/{Multisig-CGyJ0Xl3.js → Multisig-DqOe-etP.js} +3 -3
- package/src/assets/web-panel/assets/{NLProgramming-CoWi_ov1.js → NLProgramming-7VnhzE_6.js} +1 -1
- package/src/assets/web-panel/assets/Notes-BxawpeUQ.js +7 -0
- package/src/assets/web-panel/assets/{NotificationSettings-DX4I2b4W.js → NotificationSettings-Cr08G2aE.js} +1 -1
- package/src/assets/web-panel/assets/OrderTableRenderer-Ce8bEGlK.js +1 -0
- package/src/assets/web-panel/assets/{Organization-oopLO_tk.js → Organization-BC7lveGv.js} +4 -4
- package/src/assets/web-panel/assets/{Overflow-BFVvjMyf.js → Overflow-CakOW-G0.js} +1 -1
- package/src/assets/web-panel/assets/{P2P-CBy5t-Tk.js → P2P-Cf8CaOBZ.js} +2 -2
- package/src/assets/web-panel/assets/{PdhVaultBrowser--YWJNsu6.js → PdhVaultBrowser-Dc7b98W9.js} +3 -3
- package/src/assets/web-panel/assets/{Permissions-C2dZ8scb.js → Permissions-DGJyMEfS.js} +4 -4
- package/src/assets/web-panel/assets/{PersonalDataHub-Bs3l7Hlx.js → PersonalDataHub-DNIwSdwu.js} +6 -6
- package/src/assets/web-panel/assets/{Pipeline-DEBWbZuD.js → Pipeline-5B1S12wa.js} +1 -1
- package/src/assets/web-panel/assets/{Privacy-CjHBb6NU.js → Privacy-CMB6Ke5t.js} +1 -1
- package/src/assets/web-panel/assets/{ProjectInit-D2WipUz5.js → ProjectInit-D5PqTFiT.js} +2 -2
- package/src/assets/web-panel/assets/{ProjectSettings-B6WfnrGB.js → ProjectSettings-CbKNdSjV.js} +2 -2
- package/src/assets/web-panel/assets/Projects-ccXaHzYL.js +1 -0
- package/src/assets/web-panel/assets/{Providers-CCv5M_Dv.js → Providers-CJF5_-Gs.js} +1 -1
- package/src/assets/web-panel/assets/{QrScannerModal-CGthxU54.js → QrScannerModal-CT6iEAdi.js} +1 -1
- package/src/assets/web-panel/assets/{QuickAsk-CnPmXPFb.js → QuickAsk-Ci0h9mJ_.js} +1 -1
- package/src/assets/web-panel/assets/{Recommend-Df_tGEa9.js → Recommend-Da5mobZu.js} +1 -1
- package/src/assets/web-panel/assets/{RemoteSession-Z58N0Loe.js → RemoteSession-BaCY8eey.js} +2 -2
- package/src/assets/web-panel/assets/{Reputation-CZTBQ2Vt.js → Reputation-CaITfTsI.js} +1 -1
- package/src/assets/web-panel/assets/{Row-CdK3YpCQ.js → Row-DtUDamyP.js} +1 -1
- package/src/assets/web-panel/assets/{RssFeed-CFMVT5sb.js → RssFeed-DX27gFpg.js} +3 -3
- package/src/assets/web-panel/assets/{Search-DrF8RIvD.js → Search-DFL69osN.js} +1 -1
- package/src/assets/web-panel/assets/{Security-Ddk2f2DM.js → Security-BqGeoWv-.js} +3 -3
- package/src/assets/web-panel/assets/{Services-CCuK-VOo.js → Services-3z1WnEAc.js} +2 -2
- package/src/assets/web-panel/assets/{Skeleton-DxCpHzeM.js → Skeleton-C_OJQQ9Z.js} +1 -1
- package/src/assets/web-panel/assets/{Skills-t2oTDgcv.js → Skills-BY7aT6Mo.js} +1 -1
- package/src/assets/web-panel/assets/{Sla-Df63M9_R.js → Sla-BZv7DSaD.js} +1 -1
- package/src/assets/web-panel/assets/SpeechSettings-6lJKLhCn.js +1 -0
- package/src/assets/web-panel/assets/{SyncSettings-COd_tgPp.js → SyncSettings-B6D7STlI.js} +2 -2
- package/src/assets/web-panel/assets/{Tasks-CzDCcrik.js → Tasks-Co_FCZAO.js} +1 -1
- package/src/assets/web-panel/assets/{Templates-D-vfxTGA.js → Templates-CnY-9fgz.js} +1 -1
- package/src/assets/web-panel/assets/{Tenant-BlpT_Gxc.js → Tenant-B71yXfZ8.js} +1 -1
- package/src/assets/web-panel/assets/{Terminal-D5rq52Hg.js → Terminal-Dd_P7awo.js} +2 -2
- package/src/assets/web-panel/assets/{TimelineRenderer-DdoMndkK.js → TimelineRenderer-CvIEMyli.js} +1 -1
- package/src/assets/web-panel/assets/{Tokens-BhgBsI6g.js → Tokens-DknFBGOi.js} +1 -1
- package/src/assets/web-panel/assets/{Trigger-DwwzoikZ.js → Trigger-D_4nJONB.js} +1 -1
- package/src/assets/web-panel/assets/{Trust-HkTpzXFb.js → Trust-BNl21fa7.js} +1 -1
- package/src/assets/web-panel/assets/{UkeySign-D9nk6Ehe.js → UkeySign-CFrCI7uK.js} +1 -1
- package/src/assets/web-panel/assets/{VideoEditing-BKk0rfoy.js → VideoEditing-BVfY6JLg.js} +1 -1
- package/src/assets/web-panel/assets/{Wallet-IVWIU_Lq.js → Wallet-Cj9CAK0J.js} +4 -4
- package/src/assets/web-panel/assets/{WebAuthn-CFTCpfsG.js → WebAuthn-DcqZlzA3.js} +4 -4
- package/src/assets/web-panel/assets/{WorkflowEditor-Dnf4Obif.js → WorkflowEditor-Dfr_dMld.js} +1 -1
- package/src/assets/web-panel/assets/{chat-D2snERdj.js → chat-Yv6UF0AD.js} +1 -1
- package/src/assets/web-panel/assets/{colors-DKEjK1N1.js → colors-CDW_-1fs.js} +1 -1
- package/src/assets/web-panel/assets/{compact-item-BEDLwQdt.js → compact-item-BYOQvd-6.js} +1 -1
- package/src/assets/web-panel/assets/{createContext-DA9iW1a0.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-5l2xEcY9.js → hasIn-DY-70cfQ.js} +1 -1
- package/src/assets/web-panel/assets/{index-B7_W_rYd.js → index-366wfQBU.js} +1 -1
- package/src/assets/web-panel/assets/index-B0o4MeNK.js +1 -0
- package/src/assets/web-panel/assets/{index-CxEtQYdi.js → index-B9ZogJJM.js} +1 -1
- package/src/assets/web-panel/assets/{index-B00GeekA.js → index-B9m5QAMg.js} +1 -1
- package/src/assets/web-panel/assets/{index-C7sKbM5s.js → index-BBs2mv5M.js} +1 -1
- package/src/assets/web-panel/assets/{index-CX1x4AFn.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-DU2TXJu-.js → index-BXlEx4UH.js} +1 -1
- package/src/assets/web-panel/assets/{index-e-e40id6.js → index-BayRTE5w.js} +1 -1
- package/src/assets/web-panel/assets/{index-DXet1xol.js → index-Bb9nyts1.js} +1 -1
- package/src/assets/web-panel/assets/{index-D7z4zB_a.js → index-Bf_Va0S-.js} +1 -1
- package/src/assets/web-panel/assets/{index-fccZmC_h.js → index-Br3wQLVY.js} +1 -1
- package/src/assets/web-panel/assets/{index-Bqc8tdIF.js → index-BvK4fjkk.js} +1 -1
- package/src/assets/web-panel/assets/{index-BO9dQjpt.js → index-C40UdtlS.js} +1 -1
- package/src/assets/web-panel/assets/{index-Csfb-7hw.js → index-C4UJA2ju.js} +1 -1
- package/src/assets/web-panel/assets/{index-Td8ZwyoC.js → index-CB_Iw73G.js} +1 -1
- package/src/assets/web-panel/assets/{index-BZ5lY2zx.js → index-CCwWp3mT.js} +1 -1
- package/src/assets/web-panel/assets/{index-DpqtbXdE.js → index-CFa2fPCk.js} +1 -1
- package/src/assets/web-panel/assets/{index-NJieh3T1.js → index-CIyHxV4u.js} +1 -1
- package/src/assets/web-panel/assets/{index-Dbkghqn_.js → index-CUP-A2_h.js} +1 -1
- package/src/assets/web-panel/assets/{index-DqwPFbOb.js → index-CUo27q9J.js} +3 -3
- package/src/assets/web-panel/assets/{index-B4QYBliR.js → index-CaT8trvf.js} +1 -1
- package/src/assets/web-panel/assets/{index-BgfImyZI.js → index-CnZNbcux.js} +1 -1
- package/src/assets/web-panel/assets/{index-Dbd7eEex.js → index-Cy2NE6AO.js} +1 -1
- package/src/assets/web-panel/assets/{index-CbTPvp2_.js → index-CzeEEazr.js} +1 -1
- package/src/assets/web-panel/assets/{index-5pW4t1iD.js → index-D--TEyDj.js} +1 -1
- package/src/assets/web-panel/assets/{index-Dg2a9owQ.js → index-DCtsjhhT.js} +1 -1
- package/src/assets/web-panel/assets/{index-B_eCoZgW.js → index-DLOf7BSz.js} +1 -1
- package/src/assets/web-panel/assets/{index-7P1b8HZo.js → index-DM5c4pc-.js} +1 -1
- package/src/assets/web-panel/assets/{index-CRPrHE7h.js → index-DRFC2Qt0.js} +1 -1
- package/src/assets/web-panel/assets/{index-Bq5P3piS.js → index-DT_qVaaV.js} +1 -1
- package/src/assets/web-panel/assets/{index-CjWltbi_.js → index-DUDoRk9r.js} +1 -1
- package/src/assets/web-panel/assets/{index-CkMKuqUs.js → index-Dg-AQYDf.js} +1 -1
- package/src/assets/web-panel/assets/{index-DLoalqRX.js → index-DuIPq5MX.js} +1 -1
- package/src/assets/web-panel/assets/{index-CGlotREA.js → index-NYVBUAVN.js} +1 -1
- package/src/assets/web-panel/assets/{index-yYEQXYaU.js → index-NaCESahy.js} +1 -1
- package/src/assets/web-panel/assets/{index-CmruhzFi.js → index-RjIMPG0u.js} +1 -1
- package/src/assets/web-panel/assets/{index-fgYk0QXO.js → index-Y9akzgFO.js} +1 -1
- package/src/assets/web-panel/assets/{index-DvV03Ayk.js → index-hZ0Eyrrw.js} +1 -1
- package/src/assets/web-panel/assets/{initDefaultProps-CPrcB1TC.js → initDefaultProps-CG99CcR4.js} +1 -1
- package/src/assets/web-panel/assets/{motion-BQ7mWRh_.js → motion-Z7MH0_0G.js} +1 -1
- package/src/assets/web-panel/assets/{move-CzOEq99p.js → move-BX67lOdq.js} +1 -1
- package/src/assets/web-panel/assets/{mtc-parser-BlQI5jrw.js → mtc-parser-CmAbG1fE.js} +1 -1
- package/src/assets/web-panel/assets/{omit-DlW4gxmv.js → omit-DiU5tI1_.js} +1 -1
- package/src/assets/web-panel/assets/{pickAttrs-BBYms5nP.js → pickAttrs-BGfvLrYL.js} +1 -1
- package/src/assets/web-panel/assets/{placementArrow-az2MPJ_7.js → placementArrow-CggLEgaJ.js} +1 -1
- package/src/assets/web-panel/assets/{responsiveObserve-D1-ibEol.js → responsiveObserve-t3nlghPZ.js} +1 -1
- package/src/assets/web-panel/assets/{slide-DHGqa4GA.js → slide-BkV4dL9s.js} +1 -1
- package/src/assets/web-panel/assets/{statusUtils-CYGDo6lD.js → statusUtils-qec1PUoC.js} +1 -1
- package/src/assets/web-panel/assets/{styleChecker-Cl2EM9K6.js → styleChecker-ChjX6T8D.js} +1 -1
- package/src/assets/web-panel/assets/{useFlexGapSupport-DdYhzuv1.js → useFlexGapSupport-B1jLoZcM.js} +1 -1
- package/src/assets/web-panel/assets/{useFs-DWumPuBW.js → useFs-C3X53s4E.js} +1 -1
- package/src/assets/web-panel/assets/{usePersonalDataHub-DxAO-Aqi.js → usePersonalDataHub-DOvbbnkZ.js} +1 -1
- package/src/assets/web-panel/assets/{vnode-CplsQf_N.js → vnode-Ie0TEVFT.js} +1 -1
- package/src/assets/web-panel/assets/{zoom-Cw5HXNSG.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 +41 -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/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 +30 -4
- package/src/lazy-dispatch.js +15 -1
- 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 +23 -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 +202 -21
- package/src/lib/evolution/evolution-deployment-loader.js +369 -0
- 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-ledger-adapter.js +335 -0
- package/src/lib/evolution/evolution-release-train-stage-output-ledger-adapter.js +333 -0
- package/src/lib/evolution/evolution-release-train.js +586 -0
- 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 +152 -25
- 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 +736 -0
- package/src/lib/evolution/governed-knowledge-artifact-lifecycle.js +364 -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-merge-ledger-executor.js +29 -2
- package/src/lib/evolution/governed-knowledge-merge-publisher-authority.js +31 -3
- 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-ledger-adapter.js +92 -6
- package/src/lib/evolution/governed-knowledge-sync-merge-publisher.js +57 -4
- package/src/lib/evolution/governed-knowledge-sync.js +332 -99
- 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 +15 -12
- package/src/lib/evolution/statistical-progressive-canary.js +845 -0
- 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 +574 -0
- 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/session-host-lease.js +11 -16
- package/src/lib/skill-retrieval-router.js +22 -1
- package/src/repl/agent-repl.js +127 -33
- package/src/runtime/agent-core.js +224 -80
- 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 +53 -6
- package/src/runtime/runtime-factory.js +41 -2
- package/src/assets/web-panel/assets/Notes-CgU9DDo9.js +0 -7
- package/src/assets/web-panel/assets/OrderTableRenderer-CwHc15Zs.js +0 -1
- package/src/assets/web-panel/assets/Projects-FF_thRi6.js +0 -1
- package/src/assets/web-panel/assets/SpeechSettings-l7ox6KuX.js +0 -1
- package/src/assets/web-panel/assets/devWarning-DyhgpXPf.js +0 -1
- package/src/assets/web-panel/assets/index-Ck1jhFE0.js +0 -1
- package/src/assets/web-panel/assets/index-c8jJEHVs.js +0 -1
|
@@ -10,6 +10,12 @@
|
|
|
10
10
|
*/
|
|
11
11
|
|
|
12
12
|
import { createHash, randomBytes } from "node:crypto";
|
|
13
|
+
import { snapshotAgentModelRequest } from "./agent-model-projection.js";
|
|
14
|
+
import {
|
|
15
|
+
createEvidenceJsonTextBoundary,
|
|
16
|
+
EVIDENCE_JSON_POLICY,
|
|
17
|
+
isAgentToolArgumentsPath,
|
|
18
|
+
} from "./evidence-json-text.js";
|
|
13
19
|
|
|
14
20
|
export const EVOLUTION_SOURCE_VERIFICATION_SCHEMA =
|
|
15
21
|
"chainlesschain.evolution-source-verification/v1";
|
|
@@ -448,6 +454,54 @@ const RULESET_DIGEST = `sha256:${createHash("sha256")
|
|
|
448
454
|
)
|
|
449
455
|
.digest("hex")}`;
|
|
450
456
|
|
|
457
|
+
// A separate policy keeps existing v2 artifacts readable without changing
|
|
458
|
+
// their meaning/digest. Agent messages are authenticated and scanned as whole
|
|
459
|
+
// fields; the existing total model-content ceiling still applies. Never scan
|
|
460
|
+
// independent 8 KiB slices, which would miss secrets/injections at the seams.
|
|
461
|
+
const PREFIXED_CREDENTIAL_SOURCE =
|
|
462
|
+
"(?:sk|ghp|github_pat|xox[baprs])[-_][A-Za-z0-9_-]{12,}";
|
|
463
|
+
const EMBEDDED_CREDENTIAL_SOURCE =
|
|
464
|
+
"(?:sk-|ghp_|github_pat_|xox[baprs]-)[A-Za-z0-9_-]{12,}";
|
|
465
|
+
const AGENT_MODEL_RULESET_V1 = Object.freeze({
|
|
466
|
+
...RULESET,
|
|
467
|
+
schema: "chainlesschain.evolution-agent-model-projection-rules/v1",
|
|
468
|
+
version: 1,
|
|
469
|
+
maxStringChars: RULESET.maxModelBytes,
|
|
470
|
+
maxInputBytes: 1024 * 1024,
|
|
471
|
+
textPolicy: "whole-field-before-budget-v1",
|
|
472
|
+
overflowPolicy: "reject",
|
|
473
|
+
embeddedCredentialPattern: EMBEDDED_CREDENTIAL_SOURCE,
|
|
474
|
+
});
|
|
475
|
+
const AGENT_MODEL_RULESET_V1_DIGEST = `sha256:${createHash("sha256")
|
|
476
|
+
.update(
|
|
477
|
+
`${AGENT_MODEL_RULESET_V1.schema}\0${JSON.stringify(AGENT_MODEL_RULESET_V1)}`,
|
|
478
|
+
"utf8",
|
|
479
|
+
)
|
|
480
|
+
.digest("hex")}`;
|
|
481
|
+
const AGENT_MODEL_RULESET = Object.freeze({
|
|
482
|
+
...AGENT_MODEL_RULESET_V1,
|
|
483
|
+
schema: "chainlesschain.evolution-agent-model-projection-rules/v2",
|
|
484
|
+
version: 2,
|
|
485
|
+
jsonTextPolicy: EVIDENCE_JSON_POLICY,
|
|
486
|
+
});
|
|
487
|
+
export const EVOLUTION_AGENT_MODEL_PROJECTION_RULESET_DIGEST = `sha256:${createHash(
|
|
488
|
+
"sha256",
|
|
489
|
+
)
|
|
490
|
+
.update(
|
|
491
|
+
`${AGENT_MODEL_RULESET.schema}\0${JSON.stringify(AGENT_MODEL_RULESET)}`,
|
|
492
|
+
"utf8",
|
|
493
|
+
)
|
|
494
|
+
.digest("hex")}`;
|
|
495
|
+
const SUPPORTED_RULESETS = new Map([
|
|
496
|
+
[RULESET_DIGEST, RULESET],
|
|
497
|
+
[AGENT_MODEL_RULESET_V1_DIGEST, AGENT_MODEL_RULESET_V1],
|
|
498
|
+
[EVOLUTION_AGENT_MODEL_PROJECTION_RULESET_DIGEST, AGENT_MODEL_RULESET],
|
|
499
|
+
]);
|
|
500
|
+
|
|
501
|
+
const PREFIXED_CREDENTIAL_PATTERN = Object.freeze({
|
|
502
|
+
type: "credential",
|
|
503
|
+
regex: new RegExp(`\\b${PREFIXED_CREDENTIAL_SOURCE}\\b`, "gu"),
|
|
504
|
+
});
|
|
451
505
|
const VALUE_PATTERNS = Object.freeze([
|
|
452
506
|
Object.freeze({
|
|
453
507
|
type: "private-key",
|
|
@@ -463,10 +517,7 @@ const VALUE_PATTERNS = Object.freeze([
|
|
|
463
517
|
regex:
|
|
464
518
|
/\b(?:api[_-]?key|access[_-]?token|refresh[_-]?token|client[_-]?secret|password|passwd|secret)\s*[:=]\s*["']?[A-Za-z0-9._~+/=-]{8,}["']?/giu,
|
|
465
519
|
}),
|
|
466
|
-
|
|
467
|
-
type: "credential",
|
|
468
|
-
regex: /\b(?:sk|ghp|github_pat|xox[baprs])[-_][A-Za-z0-9_-]{12,}\b/gu,
|
|
469
|
-
}),
|
|
520
|
+
PREFIXED_CREDENTIAL_PATTERN,
|
|
470
521
|
Object.freeze({
|
|
471
522
|
type: "credential",
|
|
472
523
|
regex: /\bAKIA[A-Z0-9]{16}\b/gu,
|
|
@@ -506,6 +557,22 @@ const VALUE_PATTERNS = Object.freeze([
|
|
|
506
557
|
}),
|
|
507
558
|
]);
|
|
508
559
|
|
|
560
|
+
const AGENT_VALUE_PATTERNS = Object.freeze([
|
|
561
|
+
...VALUE_PATTERNS,
|
|
562
|
+
Object.freeze({
|
|
563
|
+
type: "credential",
|
|
564
|
+
// Use each provider's real prefix/delimiter for embedded matches. Treating
|
|
565
|
+
// embedded "sk_" as a key would corrupt identifiers like ask_user_question.
|
|
566
|
+
regex: new RegExp(`${EMBEDDED_CREDENTIAL_SOURCE}\\b`, "gu"),
|
|
567
|
+
}),
|
|
568
|
+
]);
|
|
569
|
+
|
|
570
|
+
function valuePatterns(ruleset) {
|
|
571
|
+
return ruleset === AGENT_MODEL_RULESET || ruleset === AGENT_MODEL_RULESET_V1
|
|
572
|
+
? AGENT_VALUE_PATTERNS
|
|
573
|
+
: VALUE_PATTERNS;
|
|
574
|
+
}
|
|
575
|
+
|
|
509
576
|
const REDACTION_TYPES = new Set([
|
|
510
577
|
...VALUE_PATTERNS.map(({ type }) => type),
|
|
511
578
|
"pii",
|
|
@@ -689,10 +756,10 @@ function deepFreeze(value, seen = new WeakSet()) {
|
|
|
689
756
|
return Object.freeze(value);
|
|
690
757
|
}
|
|
691
758
|
|
|
692
|
-
function assertNoKnownSecrets(content) {
|
|
759
|
+
function assertNoKnownSecrets(content, patterns = VALUE_PATTERNS) {
|
|
693
760
|
const serialized =
|
|
694
761
|
typeof content === "string" ? content : canonicalJson(content);
|
|
695
|
-
for (const pattern of
|
|
762
|
+
for (const pattern of patterns) {
|
|
696
763
|
pattern.regex.lastIndex = 0;
|
|
697
764
|
if (pattern.regex.test(serialized)) {
|
|
698
765
|
throw projectionError(
|
|
@@ -1080,9 +1147,9 @@ function sanitizeKey(key, path, findings, injections) {
|
|
|
1080
1147
|
return safeKey;
|
|
1081
1148
|
}
|
|
1082
1149
|
|
|
1083
|
-
function sanitizeString(value, path, findings, injections) {
|
|
1150
|
+
function sanitizeString(value, path, findings, injections, ruleset, patterns) {
|
|
1084
1151
|
let output = value;
|
|
1085
|
-
for (const pattern of
|
|
1152
|
+
for (const pattern of patterns) {
|
|
1086
1153
|
pattern.regex.lastIndex = 0;
|
|
1087
1154
|
let count = 0;
|
|
1088
1155
|
output = output.replace(pattern.regex, () => {
|
|
@@ -1094,7 +1161,7 @@ function sanitizeString(value, path, findings, injections) {
|
|
|
1094
1161
|
}
|
|
1095
1162
|
const securityNormalized = unicodeSecurityText(output);
|
|
1096
1163
|
if (securityNormalized !== output) {
|
|
1097
|
-
for (const pattern of
|
|
1164
|
+
for (const pattern of patterns) {
|
|
1098
1165
|
pattern.regex.lastIndex = 0;
|
|
1099
1166
|
if (pattern.regex.test(securityNormalized)) {
|
|
1100
1167
|
findings.push({
|
|
@@ -1115,25 +1182,40 @@ function sanitizeString(value, path, findings, injections) {
|
|
|
1115
1182
|
});
|
|
1116
1183
|
output = "[QUARANTINED:POTENTIAL_PROMPT_INJECTION]";
|
|
1117
1184
|
}
|
|
1118
|
-
if (output.length >
|
|
1185
|
+
if (output.length > ruleset.maxStringChars) {
|
|
1186
|
+
if (ruleset.overflowPolicy === "reject") {
|
|
1187
|
+
throw projectionError(
|
|
1188
|
+
EVOLUTION_PROJECTION_INVALID_CODE,
|
|
1189
|
+
"Agent model projection exceeds the text budget",
|
|
1190
|
+
);
|
|
1191
|
+
}
|
|
1119
1192
|
findings.push({
|
|
1120
1193
|
type: "content-truncation",
|
|
1121
1194
|
path: findingPath(path),
|
|
1122
1195
|
count: 1,
|
|
1123
1196
|
});
|
|
1124
|
-
output = `${output.slice(0,
|
|
1197
|
+
output = `${output.slice(0, ruleset.maxStringChars)}[TRUNCATED]`;
|
|
1125
1198
|
}
|
|
1126
1199
|
return output;
|
|
1127
1200
|
}
|
|
1128
1201
|
|
|
1129
|
-
function sanitizePayload(
|
|
1202
|
+
function sanitizePayload(
|
|
1203
|
+
payload,
|
|
1204
|
+
ruleset = RULESET,
|
|
1205
|
+
patterns = valuePatterns(ruleset),
|
|
1206
|
+
) {
|
|
1130
1207
|
const findings = [];
|
|
1131
1208
|
const injections = [];
|
|
1132
1209
|
let nodes = 0;
|
|
1133
1210
|
let truncated = false;
|
|
1134
|
-
const
|
|
1211
|
+
const jsonText = ruleset.jsonTextPolicy
|
|
1212
|
+
? createEvidenceJsonTextBoundary((message) =>
|
|
1213
|
+
projectionError(EVOLUTION_PROJECTION_INVALID_CODE, message),
|
|
1214
|
+
)
|
|
1215
|
+
: null;
|
|
1216
|
+
const visit = (value, path, depth, layer = 0) => {
|
|
1135
1217
|
nodes += 1;
|
|
1136
|
-
if (nodes >
|
|
1218
|
+
if (nodes > ruleset.maxNodes || depth > ruleset.maxDepth) {
|
|
1137
1219
|
truncated = true;
|
|
1138
1220
|
findings.push({
|
|
1139
1221
|
type: "content-truncation",
|
|
@@ -1142,8 +1224,48 @@ function sanitizePayload(payload) {
|
|
|
1142
1224
|
});
|
|
1143
1225
|
return "[TRUNCATED:CONTENT_BUDGET]";
|
|
1144
1226
|
}
|
|
1145
|
-
|
|
1146
|
-
|
|
1227
|
+
const toolArguments = jsonText && isAgentToolArgumentsPath(path);
|
|
1228
|
+
if (toolArguments && typeof value !== "string" && !isPlainRecord(value)) {
|
|
1229
|
+
throw projectionError(
|
|
1230
|
+
EVOLUTION_PROJECTION_INVALID_CODE,
|
|
1231
|
+
"Agent tool arguments require a JSON object",
|
|
1232
|
+
);
|
|
1233
|
+
}
|
|
1234
|
+
if (typeof value === "string") {
|
|
1235
|
+
const plain = (text) =>
|
|
1236
|
+
sanitizeString(text, path, findings, injections, ruleset, patterns);
|
|
1237
|
+
if (!jsonText) return plain(value);
|
|
1238
|
+
const output = jsonText(value, {
|
|
1239
|
+
layer,
|
|
1240
|
+
objectOnly: toolArguments,
|
|
1241
|
+
visit: (decoded, nextLayer) =>
|
|
1242
|
+
visit(decoded, [...path, "$json"], depth + 1, nextLayer),
|
|
1243
|
+
plain,
|
|
1244
|
+
equal: (left, right) => canonicalJson(left) === canonicalJson(right),
|
|
1245
|
+
});
|
|
1246
|
+
if (output.length > ruleset.maxStringChars) {
|
|
1247
|
+
throw projectionError(
|
|
1248
|
+
EVOLUTION_PROJECTION_INVALID_CODE,
|
|
1249
|
+
"Agent model projection exceeds the text budget",
|
|
1250
|
+
);
|
|
1251
|
+
}
|
|
1252
|
+
// Check instruction spans, but never regex-rewrite JSON syntax/numbers
|
|
1253
|
+
// after decoding: numeric PII must become a quoted, valid JSON marker.
|
|
1254
|
+
const matched = injectionMatches(output);
|
|
1255
|
+
if (matched.length) {
|
|
1256
|
+
injections.push({
|
|
1257
|
+
path: findingPath(path),
|
|
1258
|
+
patternIds: matched.map(({ id }) => id),
|
|
1259
|
+
});
|
|
1260
|
+
if (toolArguments)
|
|
1261
|
+
throw projectionError(
|
|
1262
|
+
EVOLUTION_PROJECTION_INVALID_CODE,
|
|
1263
|
+
"Agent tool arguments contain unsafe cross-field text",
|
|
1264
|
+
);
|
|
1265
|
+
return "[QUARANTINED:POTENTIAL_PROMPT_INJECTION]";
|
|
1266
|
+
}
|
|
1267
|
+
return output;
|
|
1268
|
+
}
|
|
1147
1269
|
if (value === null || typeof value === "boolean") return value;
|
|
1148
1270
|
if (typeof value === "number") {
|
|
1149
1271
|
if (!Number.isFinite(value)) {
|
|
@@ -1152,12 +1274,30 @@ function sanitizePayload(payload) {
|
|
|
1152
1274
|
"Raw payload contains a non-finite number",
|
|
1153
1275
|
);
|
|
1154
1276
|
}
|
|
1277
|
+
if (jsonText) {
|
|
1278
|
+
if (Number.isInteger(value) && !Number.isSafeInteger(value)) {
|
|
1279
|
+
throw projectionError(
|
|
1280
|
+
EVOLUTION_PROJECTION_INVALID_CODE,
|
|
1281
|
+
"Agent model JSON number exceeds the safe integer budget",
|
|
1282
|
+
);
|
|
1283
|
+
}
|
|
1284
|
+
const numberText = String(value);
|
|
1285
|
+
const safe = sanitizeString(
|
|
1286
|
+
numberText,
|
|
1287
|
+
path,
|
|
1288
|
+
findings,
|
|
1289
|
+
injections,
|
|
1290
|
+
ruleset,
|
|
1291
|
+
patterns,
|
|
1292
|
+
);
|
|
1293
|
+
if (safe !== numberText) return safe;
|
|
1294
|
+
}
|
|
1155
1295
|
return value;
|
|
1156
1296
|
}
|
|
1157
1297
|
if (Array.isArray(value)) {
|
|
1158
1298
|
const output = [];
|
|
1159
1299
|
for (let index = 0; index < value.length; index += 1) {
|
|
1160
|
-
if (nodes >=
|
|
1300
|
+
if (nodes >= ruleset.maxNodes) {
|
|
1161
1301
|
truncated = true;
|
|
1162
1302
|
findings.push({
|
|
1163
1303
|
type: "content-truncation",
|
|
@@ -1167,7 +1307,9 @@ function sanitizePayload(payload) {
|
|
|
1167
1307
|
output.push("[TRUNCATED:CONTENT_BUDGET]");
|
|
1168
1308
|
break;
|
|
1169
1309
|
}
|
|
1170
|
-
output.push(
|
|
1310
|
+
output.push(
|
|
1311
|
+
visit(value[index], [...path, String(index)], depth + 1, layer),
|
|
1312
|
+
);
|
|
1171
1313
|
}
|
|
1172
1314
|
return output;
|
|
1173
1315
|
}
|
|
@@ -1183,7 +1325,7 @@ function sanitizePayload(payload) {
|
|
|
1183
1325
|
// projected content before the receipt is attested.
|
|
1184
1326
|
const output = Object.create(null);
|
|
1185
1327
|
for (const key of Object.keys(value).sort()) {
|
|
1186
|
-
if (nodes >=
|
|
1328
|
+
if (nodes >= ruleset.maxNodes) {
|
|
1187
1329
|
truncated = true;
|
|
1188
1330
|
findings.push({
|
|
1189
1331
|
type: "content-truncation",
|
|
@@ -1210,7 +1352,12 @@ function sanitizePayload(payload) {
|
|
|
1210
1352
|
count: 1,
|
|
1211
1353
|
});
|
|
1212
1354
|
} else {
|
|
1213
|
-
projectedValue = visit(
|
|
1355
|
+
projectedValue = visit(
|
|
1356
|
+
value[key],
|
|
1357
|
+
[...path, safeKey],
|
|
1358
|
+
depth + 1,
|
|
1359
|
+
layer,
|
|
1360
|
+
);
|
|
1214
1361
|
}
|
|
1215
1362
|
Object.defineProperty(output, safeKey, {
|
|
1216
1363
|
value: projectedValue,
|
|
@@ -1223,7 +1370,7 @@ function sanitizePayload(payload) {
|
|
|
1223
1370
|
};
|
|
1224
1371
|
let content = visit(payload, [], 0);
|
|
1225
1372
|
if (
|
|
1226
|
-
Buffer.byteLength(canonicalJson(content), "utf8") >
|
|
1373
|
+
Buffer.byteLength(canonicalJson(content), "utf8") > ruleset.maxModelBytes
|
|
1227
1374
|
) {
|
|
1228
1375
|
truncated = true;
|
|
1229
1376
|
content = {
|
|
@@ -1241,12 +1388,21 @@ function sanitizePayload(payload) {
|
|
|
1241
1388
|
byType[finding.type] = (byType[finding.type] || 0) + finding.count;
|
|
1242
1389
|
paths.add(finding.path);
|
|
1243
1390
|
}
|
|
1391
|
+
if (
|
|
1392
|
+
ruleset.overflowPolicy === "reject" &&
|
|
1393
|
+
(truncated || (byType["content-truncation"] ?? 0) > 0)
|
|
1394
|
+
) {
|
|
1395
|
+
throw projectionError(
|
|
1396
|
+
EVOLUTION_PROJECTION_INVALID_CODE,
|
|
1397
|
+
"Agent model projection exceeds the content budget",
|
|
1398
|
+
);
|
|
1399
|
+
}
|
|
1244
1400
|
const redactionSummary = {
|
|
1245
1401
|
total: Object.values(byType).reduce((sum, count) => sum + count, 0),
|
|
1246
1402
|
byType,
|
|
1247
1403
|
paths: [...paths].sort(),
|
|
1248
1404
|
};
|
|
1249
|
-
assertNoKnownSecrets(content);
|
|
1405
|
+
assertNoKnownSecrets(content, patterns);
|
|
1250
1406
|
return deepFreeze({
|
|
1251
1407
|
content,
|
|
1252
1408
|
redactionSummary,
|
|
@@ -1936,7 +2092,7 @@ function buildRawRecord(source, commitment, evidenceId, storage) {
|
|
|
1936
2092
|
});
|
|
1937
2093
|
}
|
|
1938
2094
|
|
|
1939
|
-
function buildModelProjection(raw, sanitized) {
|
|
2095
|
+
function buildModelProjection(raw, sanitized, rulesetDigest) {
|
|
1940
2096
|
const opaque = ["confidential", "restricted"].includes(raw.sensitivity);
|
|
1941
2097
|
const core = {
|
|
1942
2098
|
schema: EVOLUTION_MODEL_PROJECTION_SCHEMA,
|
|
@@ -1952,7 +2108,7 @@ function buildModelProjection(raw, sanitized) {
|
|
|
1952
2108
|
: sanitized.redactionSummary,
|
|
1953
2109
|
injectionFindings: opaque ? [] : sanitized.injectionFindings,
|
|
1954
2110
|
truncated: opaque ? false : sanitized.truncated,
|
|
1955
|
-
rulesetDigest
|
|
2111
|
+
rulesetDigest,
|
|
1956
2112
|
};
|
|
1957
2113
|
return deepFreeze({
|
|
1958
2114
|
...core,
|
|
@@ -1990,7 +2146,7 @@ function buildTrustedProjection(
|
|
|
1990
2146
|
status,
|
|
1991
2147
|
reasonCodes,
|
|
1992
2148
|
content: status === "trusted" ? trustedSanitized.content : null,
|
|
1993
|
-
rulesetDigest:
|
|
2149
|
+
rulesetDigest: model.rulesetDigest,
|
|
1994
2150
|
};
|
|
1995
2151
|
return deepFreeze({
|
|
1996
2152
|
...core,
|
|
@@ -2013,7 +2169,7 @@ function buildReceipt(raw, model, trusted, createdAt) {
|
|
|
2013
2169
|
rawRecordDigest: raw.rawRecordDigest,
|
|
2014
2170
|
modelProjectionDigest: model.projectionDigest,
|
|
2015
2171
|
trustedProjectionDigest: trusted.projectionDigest,
|
|
2016
|
-
rulesetDigest:
|
|
2172
|
+
rulesetDigest: model.rulesetDigest,
|
|
2017
2173
|
redactionSummary: model.redactionSummary,
|
|
2018
2174
|
injectionCount: model.injectionFindings.length,
|
|
2019
2175
|
trustedStatus: trusted.status,
|
|
@@ -2767,6 +2923,13 @@ function validateBundleIntegrity(bundle) {
|
|
|
2767
2923
|
"projection receipt",
|
|
2768
2924
|
);
|
|
2769
2925
|
validateRawMetadata(raw, receipt);
|
|
2926
|
+
const ruleset = SUPPORTED_RULESETS.get(model.rulesetDigest);
|
|
2927
|
+
if (!ruleset) {
|
|
2928
|
+
throw projectionError(
|
|
2929
|
+
EVOLUTION_PROJECTION_INVALID_CODE,
|
|
2930
|
+
"unsupported projection ruleset",
|
|
2931
|
+
);
|
|
2932
|
+
}
|
|
2770
2933
|
validateRedactionSummary(model.redactionSummary);
|
|
2771
2934
|
if (
|
|
2772
2935
|
!Array.isArray(model.injectionFindings) ||
|
|
@@ -2864,9 +3027,8 @@ function validateBundleIntegrity(bundle) {
|
|
|
2864
3027
|
canonicalJson(receipt.redactionSummary) !==
|
|
2865
3028
|
canonicalJson(model.redactionSummary) ||
|
|
2866
3029
|
receipt.trustedStatus !== trusted.status ||
|
|
2867
|
-
|
|
2868
|
-
|
|
2869
|
-
receipt.rulesetDigest !== RULESET_DIGEST ||
|
|
3030
|
+
trusted.rulesetDigest !== model.rulesetDigest ||
|
|
3031
|
+
receipt.rulesetDigest !== model.rulesetDigest ||
|
|
2870
3032
|
trusted.status !== expectedStatus ||
|
|
2871
3033
|
canonicalJson(trusted.reasonCodes) !== canonicalJson(expectedReasons) ||
|
|
2872
3034
|
(trusted.status === "quarantined" && trusted.content !== null) ||
|
|
@@ -2891,7 +3053,7 @@ function validateBundleIntegrity(bundle) {
|
|
|
2891
3053
|
!Number.isSafeInteger(receipt.injectionCount) ||
|
|
2892
3054
|
receipt.injectionCount < 0 ||
|
|
2893
3055
|
Buffer.byteLength(canonicalJson(model.content), "utf8") >
|
|
2894
|
-
|
|
3056
|
+
ruleset.maxModelBytes
|
|
2895
3057
|
) {
|
|
2896
3058
|
throw projectionError(
|
|
2897
3059
|
EVOLUTION_PROJECTION_INVALID_CODE,
|
|
@@ -2899,11 +3061,35 @@ function validateBundleIntegrity(bundle) {
|
|
|
2899
3061
|
);
|
|
2900
3062
|
}
|
|
2901
3063
|
if (model.content !== null) {
|
|
2902
|
-
|
|
3064
|
+
if (ruleset === AGENT_MODEL_RULESET || ruleset === AGENT_MODEL_RULESET_V1) {
|
|
3065
|
+
snapshotAgentModelRequest(model.content, {
|
|
3066
|
+
allowStructuredArgumentText: ruleset === AGENT_MODEL_RULESET,
|
|
3067
|
+
});
|
|
3068
|
+
if (
|
|
3069
|
+
model.truncated ||
|
|
3070
|
+
(model.redactionSummary.byType["content-truncation"] ?? 0) > 0
|
|
3071
|
+
) {
|
|
3072
|
+
throw projectionError(
|
|
3073
|
+
EVOLUTION_PROJECTION_INVALID_CODE,
|
|
3074
|
+
"Agent model projection cannot be truncated",
|
|
3075
|
+
);
|
|
3076
|
+
}
|
|
3077
|
+
}
|
|
3078
|
+
if (
|
|
3079
|
+
ruleset.jsonTextPolicy &&
|
|
3080
|
+
canonicalJson(sanitizePayload(model.content, ruleset).content) !==
|
|
3081
|
+
canonicalJson(model.content)
|
|
3082
|
+
) {
|
|
3083
|
+
throw projectionError(
|
|
3084
|
+
EVOLUTION_PROJECTION_INVALID_CODE,
|
|
3085
|
+
"Agent model JSON content is not a safe projection",
|
|
3086
|
+
);
|
|
3087
|
+
}
|
|
3088
|
+
assertNoKnownSecrets(model.content, valuePatterns(ruleset));
|
|
2903
3089
|
assertNoInjectionText(model.content);
|
|
2904
3090
|
}
|
|
2905
3091
|
if (trusted.content !== null) {
|
|
2906
|
-
assertNoKnownSecrets(trusted.content);
|
|
3092
|
+
assertNoKnownSecrets(trusted.content, valuePatterns(ruleset));
|
|
2907
3093
|
assertNoInjectionText(trusted.content);
|
|
2908
3094
|
}
|
|
2909
3095
|
const attestation = validateAttestation(bundle.attestation, receipt);
|
|
@@ -3129,7 +3315,15 @@ export class EvolutionEvidenceProjector {
|
|
|
3129
3315
|
return { iso, milliseconds: new Date(iso).getTime() };
|
|
3130
3316
|
}
|
|
3131
3317
|
|
|
3132
|
-
|
|
3318
|
+
project(input) {
|
|
3319
|
+
return this.#project(input, RULESET);
|
|
3320
|
+
}
|
|
3321
|
+
|
|
3322
|
+
projectAgentModelRequest(input) {
|
|
3323
|
+
return this.#project(input, AGENT_MODEL_RULESET);
|
|
3324
|
+
}
|
|
3325
|
+
|
|
3326
|
+
async #project(input, ruleset) {
|
|
3133
3327
|
assertExactRecord(input, INPUT_KEYS, "evidence projection input");
|
|
3134
3328
|
if (
|
|
3135
3329
|
typeof input.sourceEnvelope !== "string" ||
|
|
@@ -3141,7 +3335,10 @@ export class EvolutionEvidenceProjector {
|
|
|
3141
3335
|
"sourceEnvelope is invalid",
|
|
3142
3336
|
);
|
|
3143
3337
|
}
|
|
3144
|
-
const payload =
|
|
3338
|
+
const payload =
|
|
3339
|
+
ruleset === AGENT_MODEL_RULESET
|
|
3340
|
+
? snapshotAgentModelRequest(input.payload)
|
|
3341
|
+
: cloneCanonical(input.payload);
|
|
3145
3342
|
const sourceInputDigest = digest(
|
|
3146
3343
|
payload,
|
|
3147
3344
|
"chainlesschain.evolution-raw-plaintext/v2",
|
|
@@ -3381,10 +3578,16 @@ export class EvolutionEvidenceProjector {
|
|
|
3381
3578
|
injectionFindings: [],
|
|
3382
3579
|
truncated: false,
|
|
3383
3580
|
})
|
|
3384
|
-
: sanitizePayload(payload);
|
|
3385
|
-
const modelProjection = buildModelProjection(
|
|
3581
|
+
: sanitizePayload(payload, ruleset);
|
|
3582
|
+
const modelProjection = buildModelProjection(
|
|
3583
|
+
rawRecord,
|
|
3584
|
+
sanitized,
|
|
3585
|
+
ruleset === AGENT_MODEL_RULESET
|
|
3586
|
+
? EVOLUTION_AGENT_MODEL_PROJECTION_RULESET_DIGEST
|
|
3587
|
+
: RULESET_DIGEST,
|
|
3588
|
+
);
|
|
3386
3589
|
const trustedSanitized = source.compilable
|
|
3387
|
-
? sanitizePayload(source.trustedPayload)
|
|
3590
|
+
? sanitizePayload(source.trustedPayload, RULESET, valuePatterns(ruleset))
|
|
3388
3591
|
: null;
|
|
3389
3592
|
const trustedInputStructured =
|
|
3390
3593
|
source.compilable && isStructuredTrustedPayload(source.trustedPayload);
|