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,142 @@
|
|
|
1
|
+
import { isGovernedSkillMarketplaceCliHost } from "../lib/evolution/governed-skill-marketplace-cli-host.js";
|
|
2
|
+
import { startGovernedSkillMarketplaceBadgeServer } from "../lib/evolution/governed-skill-marketplace-badge.js";
|
|
3
|
+
import { intArg } from "../lib/cli-arg.js";
|
|
4
|
+
|
|
5
|
+
function host(value) {
|
|
6
|
+
if (!isGovernedSkillMarketplaceCliHost(value))
|
|
7
|
+
throw new Error(
|
|
8
|
+
"Governed Skill marketplace is unavailable: a trusted deployment host is required",
|
|
9
|
+
);
|
|
10
|
+
return value;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
function output(value) {
|
|
14
|
+
console.log(JSON.stringify(value, null, 2));
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export function registerGovernedSkillMarketplaceCommands(
|
|
18
|
+
marketplace,
|
|
19
|
+
{ marketplaceHost = null } = {},
|
|
20
|
+
) {
|
|
21
|
+
marketplace
|
|
22
|
+
.command("serve-badge <skill-name>")
|
|
23
|
+
.description(
|
|
24
|
+
"Serve a read-only public Eval badge for one explicitly pinned listing",
|
|
25
|
+
)
|
|
26
|
+
.requiredOption("--skill-version <version>", "Exact public catalog version")
|
|
27
|
+
.requiredOption(
|
|
28
|
+
"--manifest <digest>",
|
|
29
|
+
"Explicitly approved manifest digest",
|
|
30
|
+
)
|
|
31
|
+
.option(
|
|
32
|
+
"--listen <ip>",
|
|
33
|
+
"Bind IP; non-loopback explicitly publishes the badge",
|
|
34
|
+
"127.0.0.1",
|
|
35
|
+
)
|
|
36
|
+
.option(
|
|
37
|
+
"--port <port>",
|
|
38
|
+
"HTTP port (0 selects an available port)",
|
|
39
|
+
intArg("--port", { min: 0, max: 65535 }),
|
|
40
|
+
8321,
|
|
41
|
+
)
|
|
42
|
+
.option(
|
|
43
|
+
"--snapshot-seconds <seconds>",
|
|
44
|
+
"Snapshot lifetime; expiration requires explicit restart",
|
|
45
|
+
intArg("--snapshot-seconds", { min: 1, max: 3600 }),
|
|
46
|
+
600,
|
|
47
|
+
)
|
|
48
|
+
.action(async (skillName, options) => {
|
|
49
|
+
const service = await startGovernedSkillMarketplaceBadgeServer({
|
|
50
|
+
marketplaceHost: host(marketplaceHost),
|
|
51
|
+
skillName,
|
|
52
|
+
version: options.skillVersion,
|
|
53
|
+
manifestDigest: options.manifest,
|
|
54
|
+
listen: options.listen,
|
|
55
|
+
port: options.port,
|
|
56
|
+
snapshotTtlMs: options.snapshotSeconds * 1000,
|
|
57
|
+
});
|
|
58
|
+
const close = () => {
|
|
59
|
+
service.close().catch(() => {
|
|
60
|
+
process.exitCode = 1;
|
|
61
|
+
});
|
|
62
|
+
};
|
|
63
|
+
process.once("SIGINT", close);
|
|
64
|
+
process.once("SIGTERM", close);
|
|
65
|
+
service.server.once("close", () => {
|
|
66
|
+
process.removeListener("SIGINT", close);
|
|
67
|
+
process.removeListener("SIGTERM", close);
|
|
68
|
+
});
|
|
69
|
+
console.log(`Public Eval badge: ${service.url}`);
|
|
70
|
+
});
|
|
71
|
+
|
|
72
|
+
marketplace
|
|
73
|
+
.command("inspect <skill-name>")
|
|
74
|
+
.description(
|
|
75
|
+
"Verify a signed Skill listing for the deployment's fixed target",
|
|
76
|
+
)
|
|
77
|
+
.option("--skill-version <version>", "Exact catalog version")
|
|
78
|
+
.action(async (skillName, options) =>
|
|
79
|
+
output(
|
|
80
|
+
await host(marketplaceHost).inspect({
|
|
81
|
+
skillName,
|
|
82
|
+
version: options.skillVersion ?? null,
|
|
83
|
+
}),
|
|
84
|
+
),
|
|
85
|
+
);
|
|
86
|
+
|
|
87
|
+
marketplace
|
|
88
|
+
.command("install <skill-name>")
|
|
89
|
+
.description(
|
|
90
|
+
"Persist verified candidate files and governance state; does not activate the Skill",
|
|
91
|
+
)
|
|
92
|
+
.option("--skill-version <version>", "Exact catalog version")
|
|
93
|
+
.requiredOption(
|
|
94
|
+
"--manifest <digest>",
|
|
95
|
+
"Manifest digest returned by inspect",
|
|
96
|
+
)
|
|
97
|
+
.option(
|
|
98
|
+
"--expected-state <digest>",
|
|
99
|
+
"Current state digest for an update; omitted for first stage",
|
|
100
|
+
)
|
|
101
|
+
.action(async (skillName, options) =>
|
|
102
|
+
output(
|
|
103
|
+
await host(marketplaceHost).install({
|
|
104
|
+
skillName,
|
|
105
|
+
version: options.skillVersion ?? null,
|
|
106
|
+
manifestDigest: options.manifest,
|
|
107
|
+
expectedStateDigest: options.expectedState ?? null,
|
|
108
|
+
}),
|
|
109
|
+
),
|
|
110
|
+
);
|
|
111
|
+
|
|
112
|
+
marketplace
|
|
113
|
+
.command("state <skill-name>")
|
|
114
|
+
.description("Read the verified durable governed Skill state")
|
|
115
|
+
.action(async (skillName) =>
|
|
116
|
+
output(await host(marketplaceHost).state({ skillName })),
|
|
117
|
+
);
|
|
118
|
+
|
|
119
|
+
for (const operation of ["rollout", "revoke"]) {
|
|
120
|
+
marketplace
|
|
121
|
+
.command(`${operation} <skill-name>`)
|
|
122
|
+
.description(
|
|
123
|
+
operation === "rollout"
|
|
124
|
+
? "Advance exactly one stage using a verified Pilot receipt"
|
|
125
|
+
: "Roll back using a verified revocation receipt",
|
|
126
|
+
)
|
|
127
|
+
.requiredOption("--expected-state <digest>", "Exact current state digest")
|
|
128
|
+
.requiredOption(
|
|
129
|
+
"--receipt <reference>",
|
|
130
|
+
"Reference resolved and verified by deployment authority",
|
|
131
|
+
)
|
|
132
|
+
.action(async (skillName, options) =>
|
|
133
|
+
output(
|
|
134
|
+
await host(marketplaceHost)[operation]({
|
|
135
|
+
skillName,
|
|
136
|
+
expectedStateDigest: options.expectedState,
|
|
137
|
+
receiptRef: options.receipt,
|
|
138
|
+
}),
|
|
139
|
+
),
|
|
140
|
+
);
|
|
141
|
+
}
|
|
142
|
+
}
|
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
7
|
import chalk from "chalk";
|
|
8
|
+
import { registerGovernedSkillMarketplaceCommands } from "./governed-skill-marketplace.js";
|
|
8
9
|
import { intArg, floatArg } from "../lib/cli-arg.js";
|
|
9
10
|
import { logger } from "../lib/logger.js";
|
|
10
11
|
import { parseJsonOption } from "../lib/parse-json-option.js";
|
|
@@ -82,13 +83,15 @@ function _printService(s) {
|
|
|
82
83
|
logger.log(` ${chalk.bold("Invocations:")} ${s.invocationCount}`);
|
|
83
84
|
}
|
|
84
85
|
|
|
85
|
-
export function registerMarketplaceCommand(program) {
|
|
86
|
+
export function registerMarketplaceCommand(program, dependencies = {}) {
|
|
86
87
|
const mp = program
|
|
87
88
|
.command("marketplace")
|
|
88
89
|
.description(
|
|
89
90
|
"Skill marketplace — publish skill services, record invocations, view stats",
|
|
90
91
|
);
|
|
91
92
|
|
|
93
|
+
registerGovernedSkillMarketplaceCommands(mp, dependencies);
|
|
94
|
+
|
|
92
95
|
mp.command("status-types")
|
|
93
96
|
.description("List known service statuses")
|
|
94
97
|
.option("--json", "Output as JSON")
|
package/src/commands/serve.js
CHANGED
|
@@ -7,13 +7,16 @@ import { logger } from "../lib/logger.js";
|
|
|
7
7
|
import { createAgentRuntimeFactory } from "../runtime/runtime-factory.js";
|
|
8
8
|
import { captureAgentSkillOutcomeIndex } from "../lib/evolution/agent-evolution-runtime-composition-brand.js";
|
|
9
9
|
import { captureSkillVectorAuthority } from "../lib/skill-vector-authority.js";
|
|
10
|
+
import { captureSkillRetrievalRevocationReader } from "../lib/evolution/skill-retrieval-revocation-authority.js";
|
|
10
11
|
import { isEvolutionWorkbenchCliHost } from "../lib/evolution/evolution-workbench-cli-host.js";
|
|
11
12
|
import { isGovernedKnowledgeReviewHost } from "../lib/evolution/governed-knowledge-review-host.js";
|
|
13
|
+
import { isGovernedKnowledgeRevocationHost } from "../lib/evolution/governed-knowledge-revocation-host.js";
|
|
12
14
|
import path from "node:path";
|
|
13
15
|
|
|
14
16
|
export function captureServeGovernanceHosts({
|
|
15
17
|
evolutionWorkbenchHost = null,
|
|
16
18
|
governedKnowledgeReviewHost = null,
|
|
19
|
+
governedKnowledgeRevocationHost = null,
|
|
17
20
|
} = {}) {
|
|
18
21
|
if (
|
|
19
22
|
evolutionWorkbenchHost !== null &&
|
|
@@ -31,9 +34,18 @@ export function captureServeGovernanceHosts({
|
|
|
31
34
|
"serve governedKnowledgeReviewHost must be a branded review host",
|
|
32
35
|
);
|
|
33
36
|
}
|
|
37
|
+
if (
|
|
38
|
+
governedKnowledgeRevocationHost !== null &&
|
|
39
|
+
!isGovernedKnowledgeRevocationHost(governedKnowledgeRevocationHost)
|
|
40
|
+
) {
|
|
41
|
+
throw new TypeError(
|
|
42
|
+
"serve governedKnowledgeRevocationHost must be a branded revocation host",
|
|
43
|
+
);
|
|
44
|
+
}
|
|
34
45
|
return Object.freeze({
|
|
35
46
|
evolutionWorkbenchHost,
|
|
36
47
|
governedKnowledgeReviewHost,
|
|
48
|
+
governedKnowledgeRevocationHost,
|
|
37
49
|
});
|
|
38
50
|
}
|
|
39
51
|
|
|
@@ -48,6 +60,12 @@ export function registerServeCommand(program, dependencies = {}) {
|
|
|
48
60
|
dependencies.skillVectorAuthority == null
|
|
49
61
|
? null
|
|
50
62
|
: captureSkillVectorAuthority(dependencies.skillVectorAuthority);
|
|
63
|
+
const skillRetrievalRevocationReader =
|
|
64
|
+
dependencies.skillRetrievalRevocationReader == null
|
|
65
|
+
? null
|
|
66
|
+
: captureSkillRetrievalRevocationReader(
|
|
67
|
+
dependencies.skillRetrievalRevocationReader,
|
|
68
|
+
);
|
|
51
69
|
const governanceHosts = captureServeGovernanceHosts(dependencies);
|
|
52
70
|
const serve = program
|
|
53
71
|
.command("serve")
|
|
@@ -170,6 +188,7 @@ export function registerServeCommand(program, dependencies = {}) {
|
|
|
170
188
|
evolutionCompositionFactory,
|
|
171
189
|
skillOutcomeIndex,
|
|
172
190
|
skillVectorAuthority,
|
|
191
|
+
skillRetrievalRevocationReader,
|
|
173
192
|
...governanceHosts,
|
|
174
193
|
maxQueuedRequests,
|
|
175
194
|
});
|
|
@@ -203,6 +222,7 @@ export function registerServeCommand(program, dependencies = {}) {
|
|
|
203
222
|
evolutionCompositionFactory,
|
|
204
223
|
skillOutcomeIndex,
|
|
205
224
|
skillVectorAuthority,
|
|
225
|
+
skillRetrievalRevocationReader,
|
|
206
226
|
...governanceHosts,
|
|
207
227
|
maxQueuedRequests,
|
|
208
228
|
});
|
|
@@ -218,6 +238,7 @@ export function registerServeCommand(program, dependencies = {}) {
|
|
|
218
238
|
: { evolutionCompositionFactory },
|
|
219
239
|
skillOutcomeIndex,
|
|
220
240
|
skillVectorAuthority,
|
|
241
|
+
skillRetrievalRevocationReader,
|
|
221
242
|
}).createServerRuntime({
|
|
222
243
|
port: parseInt(opts.port, 10),
|
|
223
244
|
host: opts.host,
|
package/src/commands/skill.js
CHANGED
|
@@ -131,6 +131,7 @@ export function routeSkillSearch(skills, query, options = {}) {
|
|
|
131
131
|
tags: options.tag ? [options.tag] : [],
|
|
132
132
|
target: { os: options.os || process.platform },
|
|
133
133
|
outcomeMetrics: options.outcomeMetrics ?? null,
|
|
134
|
+
revocationReader: options.revocationReader ?? null,
|
|
134
135
|
vectorScores: options.vectorScores ?? null,
|
|
135
136
|
topK: limit,
|
|
136
137
|
});
|
|
@@ -575,6 +576,8 @@ export function registerSkillCommand(program, dependencies = {}) {
|
|
|
575
576
|
{
|
|
576
577
|
...options,
|
|
577
578
|
outcomeMetrics: outcomeAuthority.metrics,
|
|
579
|
+
revocationReader:
|
|
580
|
+
dependencies.skillRetrievalRevocationReader ?? null,
|
|
578
581
|
},
|
|
579
582
|
skillVectorAuthority,
|
|
580
583
|
);
|
package/src/data/changelog.json
CHANGED
|
@@ -1,6 +1,45 @@
|
|
|
1
1
|
{
|
|
2
2
|
"source": "CHANGELOG.md",
|
|
3
3
|
"releases": [
|
|
4
|
+
{
|
|
5
|
+
"productVersion": null,
|
|
6
|
+
"cliVersion": "0.166.25",
|
|
7
|
+
"cliVersions": ["0.166.24", "0.166.25"],
|
|
8
|
+
"date": "2026-09-06",
|
|
9
|
+
"title": "",
|
|
10
|
+
"sections": [
|
|
11
|
+
{
|
|
12
|
+
"heading": "Fixed - cc CLI 0.166.25: preserve large-file reading progress",
|
|
13
|
+
"body": "> `chainlesschain` **0.166.24 -> 0.166.25** (2026-09-06).\n\n- **Forward progress after compaction**: keep bounded, version-aware file cursors\n outside the message history and include them in each model request. Reading an\n older page cannot move the cursor backwards; changes on disk reset it.\n- **Repeated-read recovery**: detect unchanged pages across sequential and parallel\n tool batches, including after context compaction. Give the model a recovery\n opportunity, then fail explicitly after three batches with no new reading\n progress instead of consuming tokens indefinitely or claiming completion.\n- **Normal reading remains available**: new pages, changed files, different\n rendering modes and other tool work clear the repeated-read streak. New runs\n can intentionally revisit a file.\n- **Validation**: cover a large document traversed to EOF through repeated\n compaction, exact-page loops, parallel reads, changed-file reads and cursor\n preservation. CLI publication requires the complete exact-commit operating\n system matrices in `CLI CI` and `CLI Strict Sandbox`."
|
|
14
|
+
}
|
|
15
|
+
]
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
"productVersion": null,
|
|
19
|
+
"cliVersion": "0.166.24",
|
|
20
|
+
"cliVersions": ["0.166.22", "0.166.24"],
|
|
21
|
+
"date": "2026-09-06",
|
|
22
|
+
"title": "",
|
|
23
|
+
"sections": [
|
|
24
|
+
{
|
|
25
|
+
"heading": "Fixed - cc CLI 0.166.24: durable long-running IDE tasks",
|
|
26
|
+
"body": "> `chainlesschain` **0.166.22 -> 0.166.24** (published 2026-09-06;\n> incorporates the unpublished 0.166.23 candidate).\n> Immutable tag `v-npm-0-166-24` resolves to\n> `9cf9c7bfd70ddb8b12b0d157dd6faa1ceb152436`: the complete\n> [CLI CI](https://github.com/chainlesschain/chainlesschain/actions/runs/34006348566)\n> and [CLI Strict Sandbox](https://github.com/chainlesschain/chainlesschain/actions/runs/34006348459)\n> matrices passed, followed by\n> [npm publishing and public-install verification](https://github.com/chainlesschain/chainlesschain/actions/runs/34007761162).\n> npm latest, Session Core `0.3.12` and Core DB `0.1.5` were read back on 2026-09-06.\n\n- **Long-running interactive turns**: remove the implicit 50-model-call ceiling\n from interactive streamed Agent sessions. Explicit `--max-turns`, environment,\n cost, and session budgets remain authoritative, while unattended runs retain\n the conservative default ceiling.\n- **Bounded large-file traversal**: page reads by exact byte and line cursors,\n including oversized Unicode and escaped single lines, and return an explicit\n continuation cursor without claiming unread ranges.\n- **No redundant file reinjection**: cache a bounded set of unchanged read\n pages per Agent loop, invalidate entries when the file version changes, and\n reference an already-visible page instead of injecting the same content into\n the model again.\n- **Compaction-safe progress**: retain the newest file-read cursor through both\n micro-compaction and full context compression so a long task resumes from the\n correct page rather than restarting a large file.\n- **Regression coverage**: exercise an 80-page task using more than 50 model\n calls with repeated shadow and canonical compactions, proving completion with\n every page read exactly once.\n- **Release-runtime compatibility**: invoke the isolated evolution evaluator\n with the permission-system flag supported by the Node 22.12 release baseline,\n preventing the publish gate from failing before child-package publication.\n- **Release boundary**: no child npm package version changes are required. This\n exact commit must pass every configured Linux, Windows, and macOS job in\n `CLI CI` and `CLI Strict Sandbox` before the immutable npm tag is created."
|
|
27
|
+
}
|
|
28
|
+
]
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
"productVersion": null,
|
|
32
|
+
"cliVersion": "0.166.23",
|
|
33
|
+
"cliVersions": ["0.1.5", "0.3.12", "0.166.22", "0.166.23"],
|
|
34
|
+
"date": "2026-09-06",
|
|
35
|
+
"title": "",
|
|
36
|
+
"sections": [
|
|
37
|
+
{
|
|
38
|
+
"heading": "Added - cc CLI 0.166.23: durable governed evolution and Workbench controls",
|
|
39
|
+
"body": "> `chainlesschain` **0.166.22 -> 0.166.23**,\n> `@chainlesschain/core-db` **0.1.4 -> 0.1.5**, and\n> `@chainlesschain/session-core` **0.3.11 -> 0.3.12** (release candidates,\n> 2026-09-06; CLI 0.166.23 was not published separately and is superseded by\n> 0.166.24. The two child packages were published before 0.166.24).\n\n- **Public-install dependency closure**: ship Session Core's missing\n `./evolvable-artifact` export and structured evolution memory updates, plus\n Core DB's unprefixed named-parameter normalization. Publish these two child\n packages before the exactly pinned CLI; the other 11 audited related package\n payloads match their existing public releases and do not need a version bump.\n- **Governed knowledge rollback**: persist real Skill rollback, candidate\n rejection, revocation admission fences, and targeted Wiki tombstones;\n authenticate multi-hop Wiki provenance and recover interrupted settlement\n without duplicate effects or reactivation of revoked sources.\n- **Durable Wiki and model boundaries**: authenticate pruning checkpoints and\n retrieval projections, recover maintenance effects, and enforce bounded,\n redacted durable projections at the model ingress boundary.\n- **Trusted Workbench assembly**: provide authenticated current-state\n projections, durable review/rollback adapters, file-backed resources, and\n one-use-bound control ports for signed CLI/App Server deployment modules.\n Review batch completion uses the v2 receipt contract supported by the updated\n JetBrains source; installed IDE extensions do not update automatically.\n- **Atomic watchdog reservations**: serialize first acquisition and expired\n takeover across processes, publish only fully written records, and preserve\n prior reservations when staging fails.\n- **Windows sandbox identity publication**: flush and close the helper's\n identity record before a non-overwriting atomic move exposes it to the\n broker. Late helper errors cannot overwrite an already-published identity;\n post-spawn failures retain their original cause and remain fail-closed.\n- **Release and deployment boundary**: require the exact candidate SHA to pass\n both complete three-platform CLI gates, including independent Core DB and\n Session Core tests. Workbench remains unavailable without a real trusted\n deployment, identity, and policy configuration; this release does not enable\n unattended promotion or claim that the entire evolution roadmap is complete."
|
|
40
|
+
}
|
|
41
|
+
]
|
|
42
|
+
},
|
|
4
43
|
{
|
|
5
44
|
"productVersion": null,
|
|
6
45
|
"cliVersion": "0.166.22",
|
|
@@ -274,6 +274,7 @@ export class WSAgentHandler {
|
|
|
274
274
|
);
|
|
275
275
|
}
|
|
276
276
|
this._compactionLlmQuery = compactionLlmQuery || null;
|
|
277
|
+
this._customCompactionChatFn = typeof compactionChatFn === "function";
|
|
277
278
|
this._compactionSettlementBlock = null;
|
|
278
279
|
this._compactionChatFn =
|
|
279
280
|
compactionChatFn ||
|
|
@@ -836,7 +837,11 @@ export class WSAgentHandler {
|
|
|
836
837
|
return null;
|
|
837
838
|
}
|
|
838
839
|
|
|
839
|
-
async _compactCanonicalHistoryBeforeClaim(
|
|
840
|
+
async _compactCanonicalHistoryBeforeClaim(
|
|
841
|
+
requestId,
|
|
842
|
+
signal = null,
|
|
843
|
+
evolutionComposition = null,
|
|
844
|
+
) {
|
|
840
845
|
const { session } = this;
|
|
841
846
|
if (
|
|
842
847
|
session.autoCompact === false ||
|
|
@@ -873,6 +878,14 @@ export class WSAgentHandler {
|
|
|
873
878
|
preserveCompletedExchange: true,
|
|
874
879
|
llmQuery: this._compactionLlmQuery,
|
|
875
880
|
chatFn: this._compactionChatFn,
|
|
881
|
+
...(evolutionComposition === null
|
|
882
|
+
? {}
|
|
883
|
+
: {
|
|
884
|
+
evolutionIngress: evolutionComposition.evolutionIngress,
|
|
885
|
+
chatFn: this._customCompactionChatFn
|
|
886
|
+
? this._compactionChatFn
|
|
887
|
+
: undefined,
|
|
888
|
+
}),
|
|
876
889
|
chatOptions: {
|
|
877
890
|
cwd: session.projectRoot,
|
|
878
891
|
sessionId: session.id,
|
|
@@ -1395,9 +1408,13 @@ export class WSAgentHandler {
|
|
|
1395
1408
|
strictUsageTelemetry =
|
|
1396
1409
|
this._resolveCanonicalUsageProtocol() === "call-ledger";
|
|
1397
1410
|
if (strictUsageTelemetry) this._assertUsageLedgerWritable();
|
|
1411
|
+
if (this._evolutionCompositionFactory !== null) {
|
|
1412
|
+
evolutionComposition = await this._prepareEvolutionTurn(requestId);
|
|
1413
|
+
}
|
|
1398
1414
|
const compacted = await this._compactCanonicalHistoryBeforeClaim(
|
|
1399
1415
|
requestId,
|
|
1400
1416
|
turnSignal,
|
|
1417
|
+
evolutionComposition,
|
|
1401
1418
|
);
|
|
1402
1419
|
if (!compacted) return;
|
|
1403
1420
|
}
|
|
@@ -1429,7 +1446,10 @@ export class WSAgentHandler {
|
|
|
1429
1446
|
return;
|
|
1430
1447
|
}
|
|
1431
1448
|
}
|
|
1432
|
-
if (
|
|
1449
|
+
if (
|
|
1450
|
+
this._evolutionCompositionFactory !== null &&
|
|
1451
|
+
evolutionComposition === null
|
|
1452
|
+
) {
|
|
1433
1453
|
evolutionComposition = await this._prepareEvolutionTurn(requestId);
|
|
1434
1454
|
}
|
|
1435
1455
|
if (evolutionComposition !== null) {
|
|
@@ -1489,6 +1509,11 @@ export class WSAgentHandler {
|
|
|
1489
1509
|
const approvalGate = await this._ensureApprovalGate();
|
|
1490
1510
|
approvalGate?.beginTurn?.(requestId || `turn-${Date.now()}`);
|
|
1491
1511
|
const loopOptions = {
|
|
1512
|
+
...(evolutionComposition === null
|
|
1513
|
+
? {}
|
|
1514
|
+
: {
|
|
1515
|
+
evolutionIngress: evolutionComposition.evolutionIngress,
|
|
1516
|
+
}),
|
|
1492
1517
|
provider: session.provider,
|
|
1493
1518
|
model: activeModel,
|
|
1494
1519
|
baseUrl: session.baseUrl || "http://localhost:11434",
|
|
@@ -2228,11 +2253,15 @@ export class WSAgentHandler {
|
|
|
2228
2253
|
const expectedMessages = [...session.messages];
|
|
2229
2254
|
let result = null;
|
|
2230
2255
|
let commandError = null;
|
|
2256
|
+
let compactionEvolution = null;
|
|
2231
2257
|
let compactionUsageCall = null;
|
|
2232
2258
|
let compactionUsageSettled = false;
|
|
2233
2259
|
try {
|
|
2234
2260
|
this.assertSessionBudgetAdmission("WebSocket compaction");
|
|
2235
2261
|
this._sessionHostLease?.assert?.();
|
|
2262
|
+
compactionEvolution = await this._prepareEvolutionTurn(
|
|
2263
|
+
`compact:${requestId || randomUUID()}`,
|
|
2264
|
+
);
|
|
2236
2265
|
result = await this._compactContextMemory(
|
|
2237
2266
|
session.messages,
|
|
2238
2267
|
{
|
|
@@ -2246,6 +2275,14 @@ export class WSAgentHandler {
|
|
|
2246
2275
|
preserveCompletedExchange: true,
|
|
2247
2276
|
llmQuery: this._compactionLlmQuery,
|
|
2248
2277
|
chatFn: this._compactionChatFn,
|
|
2278
|
+
...(compactionEvolution === null
|
|
2279
|
+
? {}
|
|
2280
|
+
: {
|
|
2281
|
+
evolutionIngress: compactionEvolution.evolutionIngress,
|
|
2282
|
+
chatFn: this._customCompactionChatFn
|
|
2283
|
+
? this._compactionChatFn
|
|
2284
|
+
: undefined,
|
|
2285
|
+
}),
|
|
2249
2286
|
chatOptions: {
|
|
2250
2287
|
cwd: session.projectRoot,
|
|
2251
2288
|
sessionId: session.id,
|
|
@@ -2428,6 +2465,26 @@ export class WSAgentHandler {
|
|
|
2428
2465
|
// never retried by this command.
|
|
2429
2466
|
this._emitCompactionUsage(requestId, usageEvent);
|
|
2430
2467
|
}
|
|
2468
|
+
if (
|
|
2469
|
+
compactionEvolution !== null &&
|
|
2470
|
+
result !== null &&
|
|
2471
|
+
commandError === null
|
|
2472
|
+
) {
|
|
2473
|
+
try {
|
|
2474
|
+
await compactionEvolution.evolutionIngress.complete();
|
|
2475
|
+
} catch {
|
|
2476
|
+
commandError = this._latchCompactionSettlement({
|
|
2477
|
+
code: "CC_AGENT_EVOLUTION_INGRESS_FAILED",
|
|
2478
|
+
reason: "compaction_evolution_completion_failed",
|
|
2479
|
+
commitState: "evolution-unconfirmed",
|
|
2480
|
+
});
|
|
2481
|
+
this.interaction.emit("compaction-degraded", {
|
|
2482
|
+
requestId,
|
|
2483
|
+
...commandError,
|
|
2484
|
+
summaryMode: "none",
|
|
2485
|
+
});
|
|
2486
|
+
}
|
|
2487
|
+
}
|
|
2431
2488
|
this.interaction.emit("command-response", {
|
|
2432
2489
|
requestId,
|
|
2433
2490
|
command: cmd,
|
|
@@ -392,6 +392,8 @@ export class ChainlessChainWSServer extends EventEmitter {
|
|
|
392
392
|
options.remoteMembershipCoordinator === null
|
|
393
393
|
? null
|
|
394
394
|
: () => this._requireRemoteMembershipCoordinator(),
|
|
395
|
+
refreshCoordinatorOnEnumeration:
|
|
396
|
+
options.remoteMembershipCoordinator != null,
|
|
395
397
|
membershipAuthority:
|
|
396
398
|
options.remoteMembershipAuthority === null
|
|
397
399
|
? null
|
|
@@ -3655,7 +3655,9 @@
|
|
|
3655
3655
|
"evolution/workbench/review",
|
|
3656
3656
|
"evolution/workbench/rollback",
|
|
3657
3657
|
"evolution/knowledge/conflicts",
|
|
3658
|
-
"evolution/knowledge/merge"
|
|
3658
|
+
"evolution/knowledge/merge",
|
|
3659
|
+
"evolution/knowledge/revocation/prepare",
|
|
3660
|
+
"evolution/knowledge/revocation/publish"
|
|
3659
3661
|
]
|
|
3660
3662
|
}
|
|
3661
3663
|
}
|
|
@@ -10,13 +10,21 @@
|
|
|
10
10
|
*/
|
|
11
11
|
|
|
12
12
|
import { createHash } from "node:crypto";
|
|
13
|
+
import {
|
|
14
|
+
collectFileReadProgress,
|
|
15
|
+
FILE_READ_PROGRESS_PREFIX,
|
|
16
|
+
fileReadProgressBody,
|
|
17
|
+
} from "../lib/read-file-page.js";
|
|
13
18
|
import { feature, featureVariant } from "../lib/feature-flags.js";
|
|
14
19
|
import { isAbortError } from "../lib/abort-utils.js";
|
|
15
20
|
import {
|
|
16
21
|
CONTEXT_WINDOWS,
|
|
17
22
|
getContextWindow,
|
|
18
23
|
} from "../lib/model-context-window.js";
|
|
19
|
-
export {
|
|
24
|
+
export {
|
|
25
|
+
CONTEXT_WINDOWS,
|
|
26
|
+
getContextWindow,
|
|
27
|
+
} from "../lib/model-context-window.js";
|
|
20
28
|
import {
|
|
21
29
|
DURABLE_SYSTEM_MESSAGE_KINDS,
|
|
22
30
|
getDurableSystemMessageProvenance,
|
|
@@ -107,7 +115,14 @@ function buildBoundedHistory(messages, maxChars) {
|
|
|
107
115
|
}
|
|
108
116
|
|
|
109
117
|
function summaryPrompt(messages, maxChars) {
|
|
110
|
-
const schema =
|
|
118
|
+
const schema = JSON.stringify(
|
|
119
|
+
Object.fromEntries(
|
|
120
|
+
STRUCTURED_HANDOFF_FIELDS.map((field) => [
|
|
121
|
+
field,
|
|
122
|
+
field === "objective" ? "" : [],
|
|
123
|
+
]),
|
|
124
|
+
),
|
|
125
|
+
);
|
|
111
126
|
const instructions = [
|
|
112
127
|
"Create a durable conversation handoff from the history below.",
|
|
113
128
|
`Return exactly one strict JSON object with all keys in this order: ${schema}.`,
|
|
@@ -356,6 +371,7 @@ export class PromptCompressor {
|
|
|
356
371
|
? messages.filter((m) => !isPinned(m))
|
|
357
372
|
: messages;
|
|
358
373
|
|
|
374
|
+
const readProgress = collectFileReadProgress(messages);
|
|
359
375
|
const originalTokens = estimateMessagesTokens(messages);
|
|
360
376
|
let result = [...working];
|
|
361
377
|
const applied = [];
|
|
@@ -397,7 +413,10 @@ export class PromptCompressor {
|
|
|
397
413
|
}
|
|
398
414
|
|
|
399
415
|
if (result.length > this.maxMessages) {
|
|
400
|
-
result = this._truncate(
|
|
416
|
+
result = this._truncate(
|
|
417
|
+
result,
|
|
418
|
+
this.maxMessages - (readProgress.length ? 1 : 0),
|
|
419
|
+
);
|
|
401
420
|
applied.push("truncate");
|
|
402
421
|
}
|
|
403
422
|
|
|
@@ -417,6 +436,32 @@ export class PromptCompressor {
|
|
|
417
436
|
result = sanitizeToolPairs(result);
|
|
418
437
|
}
|
|
419
438
|
|
|
439
|
+
// The LLM summary may omit paging state. Preserve bounded cursors from the
|
|
440
|
+
// actual read results even when old tool pairs are removed completely.
|
|
441
|
+
if (applied.length && readProgress.length) {
|
|
442
|
+
result = result.filter(
|
|
443
|
+
(message) => fileReadProgressBody(message) === null,
|
|
444
|
+
);
|
|
445
|
+
const insertion = result.findIndex(
|
|
446
|
+
(message) => message.role !== "system",
|
|
447
|
+
);
|
|
448
|
+
result.splice(
|
|
449
|
+
insertion < 0 ? result.length : insertion,
|
|
450
|
+
0,
|
|
451
|
+
markDurableSystemMessage(
|
|
452
|
+
{
|
|
453
|
+
role: "system",
|
|
454
|
+
content:
|
|
455
|
+
FILE_READ_PROGRESS_PREFIX +
|
|
456
|
+
JSON.stringify(readProgress) +
|
|
457
|
+
"\nHistorical read positions, not retained file contents. Continue with nextRead when relevant; if the file changed or an earlier section is needed, read that specific section.",
|
|
458
|
+
},
|
|
459
|
+
DURABLE_SYSTEM_MESSAGE_KINDS.COMPACT_SUMMARY,
|
|
460
|
+
),
|
|
461
|
+
);
|
|
462
|
+
applied.push("file-read-progress");
|
|
463
|
+
}
|
|
464
|
+
|
|
420
465
|
const compressedTokens = estimateMessagesTokens(result);
|
|
421
466
|
const stats = {
|
|
422
467
|
strategy: applied.join("+") || "none",
|
|
@@ -493,7 +538,7 @@ export class PromptCompressor {
|
|
|
493
538
|
return result;
|
|
494
539
|
}
|
|
495
540
|
|
|
496
|
-
_truncate(messages) {
|
|
541
|
+
_truncate(messages, maxMessages = this.maxMessages) {
|
|
497
542
|
const system = messages.filter(
|
|
498
543
|
(m) => m.role === "system" && !isCompactionArtifact(m),
|
|
499
544
|
);
|
|
@@ -502,7 +547,7 @@ export class PromptCompressor {
|
|
|
502
547
|
(m) => (m.role !== "system" || isCompactionArtifact(m)) && m !== last,
|
|
503
548
|
);
|
|
504
549
|
|
|
505
|
-
let slots =
|
|
550
|
+
let slots = maxMessages - system.length;
|
|
506
551
|
if (last) slots -= 1;
|
|
507
552
|
|
|
508
553
|
const recent = rest.slice(-Math.max(slots, 1));
|
|
@@ -627,6 +672,7 @@ export class PromptCompressor {
|
|
|
627
672
|
// A durable-ledger write failure is authoritative too. Falling back here
|
|
628
673
|
// would let the host continue after losing the model-call boundary.
|
|
629
674
|
if (error?.runtimeLedgerPersistence === true) throw error;
|
|
675
|
+
if (error?.code === "CC_AGENT_EVOLUTION_INGRESS_FAILED") throw error;
|
|
630
676
|
// A workflow-bound query may already have reached the provider. An
|
|
631
677
|
// extractive fallback would make the outer durable effect look completed
|
|
632
678
|
// and authorize a replay of that physically unknown request.
|
|
@@ -3,6 +3,7 @@ import {
|
|
|
3
3
|
PromptCompressor,
|
|
4
4
|
sanitizeToolPairs,
|
|
5
5
|
} from "./prompt-compressor.js";
|
|
6
|
+
import { captureAgentEvolutionIngress } from "../lib/evolution/agent-evolution-ingress.js";
|
|
6
7
|
|
|
7
8
|
const DEFAULT_MAX_OUTPUT_TOKENS = 2048;
|
|
8
9
|
const MIN_MAX_OUTPUT_TOKENS = 256;
|
|
@@ -121,11 +122,35 @@ export function compactionTokenUsage(stats) {
|
|
|
121
122
|
* contract instead of falling back to positional truncation.
|
|
122
123
|
*/
|
|
123
124
|
export async function compactConversationWithProvider(messages, options = {}) {
|
|
125
|
+
const configuredIngress =
|
|
126
|
+
options.evolutionIngress ?? options.chatOptions?.evolutionIngress ?? null;
|
|
127
|
+
const evolutionIngress =
|
|
128
|
+
configuredIngress === null
|
|
129
|
+
? null
|
|
130
|
+
: captureAgentEvolutionIngress(configuredIngress);
|
|
124
131
|
const originalMessages = Array.isArray(messages) ? [...messages] : [];
|
|
125
132
|
const provider = options.provider || null;
|
|
126
133
|
const model = options.model || null;
|
|
127
134
|
const maxOutputTokens = boundedMaxOutputTokens(options.maxOutputTokens);
|
|
128
|
-
|
|
135
|
+
let chatFn = options.chatFn;
|
|
136
|
+
if (evolutionIngress !== null) {
|
|
137
|
+
const { chatWithTools } = await import("../runtime/agent-core.js");
|
|
138
|
+
if (
|
|
139
|
+
(chatFn != null && chatFn !== chatWithTools) ||
|
|
140
|
+
options.llmQuery != null ||
|
|
141
|
+
options.compressor != null ||
|
|
142
|
+
(options.evolutionIngress != null &&
|
|
143
|
+
options.chatOptions?.evolutionIngress != null &&
|
|
144
|
+
options.evolutionIngress !== options.chatOptions.evolutionIngress)
|
|
145
|
+
) {
|
|
146
|
+
const error = new TypeError(
|
|
147
|
+
"Evolution compaction requires the canonical model transport and compressor",
|
|
148
|
+
);
|
|
149
|
+
error.code = "CC_AGENT_EVOLUTION_INGRESS_FAILED";
|
|
150
|
+
throw error;
|
|
151
|
+
}
|
|
152
|
+
chatFn = chatWithTools;
|
|
153
|
+
}
|
|
129
154
|
const invokeProviderCall = async (call) => {
|
|
130
155
|
const callId = safeUsageCallId(await options.onProviderCallStart?.());
|
|
131
156
|
try {
|
|
@@ -145,12 +170,14 @@ export async function compactConversationWithProvider(messages, options = {}) {
|
|
|
145
170
|
return invokeProviderCall(async () => {
|
|
146
171
|
const response = await chatFn([{ role: "user", content: prompt }], {
|
|
147
172
|
...(options.chatOptions || {}),
|
|
173
|
+
...(evolutionIngress === null ? {} : { evolutionIngress }),
|
|
148
174
|
provider,
|
|
149
175
|
model,
|
|
150
176
|
baseUrl: options.baseUrl,
|
|
151
177
|
apiKey: options.apiKey,
|
|
152
178
|
signal: options.signal,
|
|
153
179
|
contextEngine: null,
|
|
180
|
+
contextMemorySkipPlanning: true,
|
|
154
181
|
enabledToolNames: [],
|
|
155
182
|
extraToolDefinitions: [],
|
|
156
183
|
hostManagedToolPolicy: null,
|