chainlesschain 0.166.22 → 0.166.24
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +4 -3
- package/src/assets/web-panel/assets/{AIOps-oJ7USzMC.js → AIOps-DR-MWcZc.js} +1 -1
- package/src/assets/web-panel/assets/{ActionButton-BlgnZe_C.js → ActionButton-DT8B7sEb.js} +1 -1
- package/src/assets/web-panel/assets/{Analytics-D2rRbTLu.js → Analytics-asjh3dQJ.js} +3 -3
- package/src/assets/web-panel/assets/{AppLayout-FwS3f0B2.js → AppLayout-DivQ491i.js} +5 -5
- package/src/assets/web-panel/assets/{Artifacts-iF-_08Hi.js → Artifacts-DPH2uUmy.js} +1 -1
- package/src/assets/web-panel/assets/{Audit-D24p0zQw.js → Audit-Bp2nLyc-.js} +1 -1
- package/src/assets/web-panel/assets/{BackgroundAgents-Cg3mRVi9.js → BackgroundAgents-CHS28khl.js} +1 -1
- package/src/assets/web-panel/assets/{Backup-EOqht3H-.js → Backup-CKeaFSfz.js} +1 -1
- package/src/assets/web-panel/assets/{BaseInput-9XWYq2hj.js → BaseInput-CxwM9BAH.js} +1 -1
- package/src/assets/web-panel/assets/{Chat-Dq5yardA.js → Chat-DYLDwaCv.js} +4 -4
- package/src/assets/web-panel/assets/{ChatBubbleRenderer-Ds3pA-ET.js → ChatBubbleRenderer-DdBJDBP0.js} +1 -1
- package/src/assets/web-panel/assets/{Checkbox-CuyCBoBf.js → Checkbox-uYTWOB8j.js} +1 -1
- package/src/assets/web-panel/assets/{Codegen-DjWtYHNe.js → Codegen-CvYa_dwT.js} +1 -1
- package/src/assets/web-panel/assets/{Col-CrVr_iuG.js → Col-CanMAX4m.js} +1 -1
- package/src/assets/web-panel/assets/{Community-C6QxpfGc.js → Community-B4WaDtHw.js} +1 -1
- package/src/assets/web-panel/assets/{Compact-B-v5r6Pa.js → Compact-K93Uof_3.js} +1 -1
- package/src/assets/web-panel/assets/{Compliance-zNiLiFgD.js → Compliance-CKeDLgUW.js} +1 -1
- package/src/assets/web-panel/assets/{Cowork-D9K7lMOu.js → Cowork-P93grAeB.js} +3 -3
- package/src/assets/web-panel/assets/{Cron-DAjO36z4.js → Cron-BSHnMtDn.js} +2 -2
- package/src/assets/web-panel/assets/{Crosschain-Bxqn0aqB.js → Crosschain-epAOpUVJ.js} +1 -1
- package/src/assets/web-panel/assets/{DID-DfRmLUe-.js → DID-ByjXfP7t.js} +2 -2
- package/src/assets/web-panel/assets/{Dashboard-Cz8KF3fr.js → Dashboard-QztTU8tb.js} +2 -2
- package/src/assets/web-panel/assets/{Dropdown-C4oVfkP0.js → Dropdown-DhUc9yhN.js} +1 -1
- package/src/assets/web-panel/assets/{EmailListRenderer-ivyZKN8k.js → EmailListRenderer-C2sLhJJN.js} +1 -1
- package/src/assets/web-panel/assets/{FamilyGuardDashboard-DoxY1CPW.js → FamilyGuardDashboard-CdfbWNDn.js} +1 -1
- package/src/assets/web-panel/assets/{Federation-C93gZxnb.js → Federation-CcF_R7NW.js} +1 -1
- package/src/assets/web-panel/assets/{FormItemContext-D_lEjYJE.js → FormItemContext-Cm_X2IBk.js} +1 -1
- package/src/assets/web-panel/assets/{GenericCardRenderer-BNFN9YjN.js → GenericCardRenderer-DUi4NWlb.js} +1 -1
- package/src/assets/web-panel/assets/{Git-mUu2HcLI.js → Git-4Sq5FjBt.js} +2 -2
- package/src/assets/web-panel/assets/{Governance-CNuosrge.js → Governance-Dx2_v4V6.js} +1 -1
- package/src/assets/web-panel/assets/{Inference-DwY5pbCB.js → Inference-7Vr1xekR.js} +1 -1
- package/src/assets/web-panel/assets/{KnowledgeGraph-aRUxhACD.js → KnowledgeGraph-Cnd2XOzf.js} +1 -1
- package/src/assets/web-panel/assets/{Logs-DFfsWYy_.js → Logs-B66QPVf-.js} +2 -2
- package/src/assets/web-panel/assets/{MarkdownRenderer-DqTx7_u1.js → MarkdownRenderer-PLsEvhly.js} +1 -1
- package/src/assets/web-panel/assets/{Marketplace-COI-ciM-.js → Marketplace-BMIK9BmC.js} +1 -1
- package/src/assets/web-panel/assets/{McpTools-BJJwaIpe.js → McpTools-BDbyp3J_.js} +3 -3
- package/src/assets/web-panel/assets/{Memory-CDO6SGDZ.js → Memory-CJdzfZGi.js} +2 -2
- package/src/assets/web-panel/assets/{MobileBridge-BlZ5tFf4.js → MobileBridge-C2TH5Y3-.js} +1 -1
- package/src/assets/web-panel/assets/{MobileProjects-DuoxbgWz.js → MobileProjects-D1dYXkvV.js} +1 -1
- package/src/assets/web-panel/assets/{Mtc-6ec9j70b.js → Mtc-B-4A1I1j.js} +4 -4
- package/src/assets/web-panel/assets/{MtcAudit-BuL7HkC7.js → MtcAudit-Bgcc9UOl.js} +5 -5
- package/src/assets/web-panel/assets/{Multisig-CJxR85lk.js → Multisig-DqOe-etP.js} +3 -3
- package/src/assets/web-panel/assets/{NLProgramming-B71O1S4l.js → NLProgramming-7VnhzE_6.js} +1 -1
- package/src/assets/web-panel/assets/{Notes-Bsw5zbpV.js → Notes-BxawpeUQ.js} +3 -3
- package/src/assets/web-panel/assets/{NotificationSettings-BnAhXuK_.js → NotificationSettings-Cr08G2aE.js} +1 -1
- package/src/assets/web-panel/assets/{OrderTableRenderer-BJ0R5GGz.js → OrderTableRenderer-Ce8bEGlK.js} +1 -1
- package/src/assets/web-panel/assets/{Organization-B7wwNxoP.js → Organization-BC7lveGv.js} +4 -4
- package/src/assets/web-panel/assets/{Overflow-CfAGr0gM.js → Overflow-CakOW-G0.js} +1 -1
- package/src/assets/web-panel/assets/{P2P-KhMg22Fz.js → P2P-Cf8CaOBZ.js} +2 -2
- package/src/assets/web-panel/assets/{PdhVaultBrowser-NdAXI9ft.js → PdhVaultBrowser-Dc7b98W9.js} +3 -3
- package/src/assets/web-panel/assets/{Permissions-CIYjqyT7.js → Permissions-DGJyMEfS.js} +4 -4
- package/src/assets/web-panel/assets/{PersonalDataHub-D2ht3P_R.js → PersonalDataHub-DNIwSdwu.js} +6 -6
- package/src/assets/web-panel/assets/{Pipeline-i6flZW1m.js → Pipeline-5B1S12wa.js} +1 -1
- package/src/assets/web-panel/assets/{Privacy-DE0lhYVc.js → Privacy-CMB6Ke5t.js} +1 -1
- package/src/assets/web-panel/assets/{ProjectInit-BL3YbyxS.js → ProjectInit-D5PqTFiT.js} +2 -2
- package/src/assets/web-panel/assets/{ProjectSettings-CEtdg7ni.js → ProjectSettings-CbKNdSjV.js} +2 -2
- package/src/assets/web-panel/assets/Projects-ccXaHzYL.js +1 -0
- package/src/assets/web-panel/assets/{Providers-DKt_Cg-j.js → Providers-CJF5_-Gs.js} +1 -1
- package/src/assets/web-panel/assets/{QrScannerModal-DA61jNSx.js → QrScannerModal-CT6iEAdi.js} +1 -1
- package/src/assets/web-panel/assets/{QuickAsk-fS9ryUmq.js → QuickAsk-Ci0h9mJ_.js} +1 -1
- package/src/assets/web-panel/assets/{Recommend-CR9dZU5Y.js → Recommend-Da5mobZu.js} +1 -1
- package/src/assets/web-panel/assets/{RemoteSession-BV0BR2Dz.js → RemoteSession-BaCY8eey.js} +2 -2
- package/src/assets/web-panel/assets/{Reputation-BIeGUvYD.js → Reputation-CaITfTsI.js} +1 -1
- package/src/assets/web-panel/assets/{Row-DHDT1aro.js → Row-DtUDamyP.js} +1 -1
- package/src/assets/web-panel/assets/{RssFeed-Cq6YKb1h.js → RssFeed-DX27gFpg.js} +3 -3
- package/src/assets/web-panel/assets/{Search-DEF6vsy6.js → Search-DFL69osN.js} +1 -1
- package/src/assets/web-panel/assets/{Security-CHtYiKY9.js → Security-BqGeoWv-.js} +4 -4
- package/src/assets/web-panel/assets/{Services-u16lvBJN.js → Services-3z1WnEAc.js} +2 -2
- package/src/assets/web-panel/assets/{Skeleton-CGbizyDj.js → Skeleton-C_OJQQ9Z.js} +1 -1
- package/src/assets/web-panel/assets/{Skills-BZMQcAa7.js → Skills-BY7aT6Mo.js} +1 -1
- package/src/assets/web-panel/assets/{Sla-Bm-CycVi.js → Sla-BZv7DSaD.js} +1 -1
- package/src/assets/web-panel/assets/SpeechSettings-6lJKLhCn.js +1 -0
- package/src/assets/web-panel/assets/{SyncSettings-B8q1C1eC.js → SyncSettings-B6D7STlI.js} +2 -2
- package/src/assets/web-panel/assets/{Tasks-SU1pBWc-.js → Tasks-Co_FCZAO.js} +1 -1
- package/src/assets/web-panel/assets/{Templates-CyOfJzmt.js → Templates-CnY-9fgz.js} +1 -1
- package/src/assets/web-panel/assets/{Tenant-xqWSm2GP.js → Tenant-B71yXfZ8.js} +1 -1
- package/src/assets/web-panel/assets/{Terminal-D1Ttgjsi.js → Terminal-Dd_P7awo.js} +2 -2
- package/src/assets/web-panel/assets/{TimelineRenderer-Da2lYs5D.js → TimelineRenderer-CvIEMyli.js} +1 -1
- package/src/assets/web-panel/assets/{Tokens-B34-SduO.js → Tokens-DknFBGOi.js} +1 -1
- package/src/assets/web-panel/assets/{Trigger-C8zyYm4R.js → Trigger-D_4nJONB.js} +1 -1
- package/src/assets/web-panel/assets/{Trust-D1Pvqems.js → Trust-BNl21fa7.js} +1 -1
- package/src/assets/web-panel/assets/{UkeySign-Do3VVnAy.js → UkeySign-CFrCI7uK.js} +1 -1
- package/src/assets/web-panel/assets/{VideoEditing-Dz7egVIA.js → VideoEditing-BVfY6JLg.js} +1 -1
- package/src/assets/web-panel/assets/{Wallet-Dcuw-OxR.js → Wallet-Cj9CAK0J.js} +3 -3
- package/src/assets/web-panel/assets/{WebAuthn-DPlw-QsB.js → WebAuthn-DcqZlzA3.js} +3 -3
- package/src/assets/web-panel/assets/{WorkflowEditor-h4OsnU5q.js → WorkflowEditor-Dfr_dMld.js} +1 -1
- package/src/assets/web-panel/assets/{chat-eO9wEwrW.js → chat-Yv6UF0AD.js} +1 -1
- package/src/assets/web-panel/assets/{colors-34lSmOXw.js → colors-CDW_-1fs.js} +1 -1
- package/src/assets/web-panel/assets/{compact-item-CK4kEWJ4.js → compact-item-BYOQvd-6.js} +1 -1
- package/src/assets/web-panel/assets/{createContext-E0A57xed.js → createContext-BCGO0BiP.js} +1 -1
- package/src/assets/web-panel/assets/devWarning-H-kXSuf-.js +1 -0
- package/src/assets/web-panel/assets/{hasIn-BD9ZMGAl.js → hasIn-DY-70cfQ.js} +1 -1
- package/src/assets/web-panel/assets/{index-B_G_ElKO.js → index-366wfQBU.js} +1 -1
- package/src/assets/web-panel/assets/index-B0o4MeNK.js +1 -0
- package/src/assets/web-panel/assets/{index-B0rkHxKK.js → index-B9ZogJJM.js} +1 -1
- package/src/assets/web-panel/assets/{index-DrsDA_md.js → index-B9m5QAMg.js} +1 -1
- package/src/assets/web-panel/assets/{index--N0u6kTG.js → index-BBs2mv5M.js} +1 -1
- package/src/assets/web-panel/assets/{index-DiT_REby.js → index-BFv1hzF6.js} +1 -1
- package/src/assets/web-panel/assets/index-BVafOL_I.js +1 -0
- package/src/assets/web-panel/assets/{index-8qMA1DWQ.js → index-BXlEx4UH.js} +1 -1
- package/src/assets/web-panel/assets/{index-CsrKJJcX.js → index-BayRTE5w.js} +1 -1
- package/src/assets/web-panel/assets/{index-DcbgVLOH.js → index-Bb9nyts1.js} +1 -1
- package/src/assets/web-panel/assets/{index-CZkFMeWL.js → index-Bf_Va0S-.js} +1 -1
- package/src/assets/web-panel/assets/{index-Cz3unNfL.js → index-Br3wQLVY.js} +1 -1
- package/src/assets/web-panel/assets/{index-DcE1BspQ.js → index-BvK4fjkk.js} +1 -1
- package/src/assets/web-panel/assets/{index-DeXNCyQJ.js → index-C40UdtlS.js} +1 -1
- package/src/assets/web-panel/assets/{index-DrOalGut.js → index-C4UJA2ju.js} +1 -1
- package/src/assets/web-panel/assets/{index-MIg5Z8qe.js → index-CB_Iw73G.js} +1 -1
- package/src/assets/web-panel/assets/{index-DFLE2qO9.js → index-CCwWp3mT.js} +1 -1
- package/src/assets/web-panel/assets/{index-DrSAAuJj.js → index-CFa2fPCk.js} +1 -1
- package/src/assets/web-panel/assets/{index-D4bB_x_v.js → index-CIyHxV4u.js} +1 -1
- package/src/assets/web-panel/assets/{index-BmNbU2Z6.js → index-CUP-A2_h.js} +1 -1
- package/src/assets/web-panel/assets/{index-o8pYehRq.js → index-CUo27q9J.js} +3 -3
- package/src/assets/web-panel/assets/{index-BbX_Dted.js → index-CaT8trvf.js} +1 -1
- package/src/assets/web-panel/assets/{index-Brqc9Emx.js → index-CnZNbcux.js} +1 -1
- package/src/assets/web-panel/assets/{index-Da5fmOHB.js → index-Cy2NE6AO.js} +1 -1
- package/src/assets/web-panel/assets/{index-yAGBu2E0.js → index-CzeEEazr.js} +1 -1
- package/src/assets/web-panel/assets/{index-BsGmo6v1.js → index-D--TEyDj.js} +1 -1
- package/src/assets/web-panel/assets/{index-DvKcroix.js → index-DCtsjhhT.js} +1 -1
- package/src/assets/web-panel/assets/{index-DGRxt5wj.js → index-DLOf7BSz.js} +1 -1
- package/src/assets/web-panel/assets/{index-DONOUtlz.js → index-DM5c4pc-.js} +1 -1
- package/src/assets/web-panel/assets/{index-CT1_eRL-.js → index-DRFC2Qt0.js} +1 -1
- package/src/assets/web-panel/assets/{index-DpfisY1g.js → index-DT_qVaaV.js} +1 -1
- package/src/assets/web-panel/assets/{index-Cx3Jn1r0.js → index-DUDoRk9r.js} +1 -1
- package/src/assets/web-panel/assets/{index-DCn-ECvK.js → index-Dg-AQYDf.js} +1 -1
- package/src/assets/web-panel/assets/{index-Bjs90Eh9.js → index-DuIPq5MX.js} +1 -1
- package/src/assets/web-panel/assets/{index-CuSau5ya.js → index-NYVBUAVN.js} +1 -1
- package/src/assets/web-panel/assets/{index-DP-UZAQN.js → index-NaCESahy.js} +1 -1
- package/src/assets/web-panel/assets/{index-Ch175NUw.js → index-RjIMPG0u.js} +1 -1
- package/src/assets/web-panel/assets/{index-DzXjP44T.js → index-Y9akzgFO.js} +1 -1
- package/src/assets/web-panel/assets/{index-CZBaqe3d.js → index-hZ0Eyrrw.js} +1 -1
- package/src/assets/web-panel/assets/{initDefaultProps-DMTkAomF.js → initDefaultProps-CG99CcR4.js} +1 -1
- package/src/assets/web-panel/assets/{motion-Cnti1F5g.js → motion-Z7MH0_0G.js} +1 -1
- package/src/assets/web-panel/assets/{move-CGxmHUga.js → move-BX67lOdq.js} +1 -1
- package/src/assets/web-panel/assets/{mtc-parser-CuwwLoq7.js → mtc-parser-CmAbG1fE.js} +1 -1
- package/src/assets/web-panel/assets/{omit-BpdlTkPM.js → omit-DiU5tI1_.js} +1 -1
- package/src/assets/web-panel/assets/{pickAttrs-D7nWrThp.js → pickAttrs-BGfvLrYL.js} +1 -1
- package/src/assets/web-panel/assets/{placementArrow-Bhx0TV8F.js → placementArrow-CggLEgaJ.js} +1 -1
- package/src/assets/web-panel/assets/{responsiveObserve-CZ1KesZh.js → responsiveObserve-t3nlghPZ.js} +1 -1
- package/src/assets/web-panel/assets/{slide-CnldF8J6.js → slide-BkV4dL9s.js} +1 -1
- package/src/assets/web-panel/assets/{statusUtils-CZfo_GOA.js → statusUtils-qec1PUoC.js} +1 -1
- package/src/assets/web-panel/assets/{styleChecker-B2QCcAv5.js → styleChecker-ChjX6T8D.js} +1 -1
- package/src/assets/web-panel/assets/{useFlexGapSupport-DzzjIS4J.js → useFlexGapSupport-B1jLoZcM.js} +1 -1
- package/src/assets/web-panel/assets/{useFs-B_atg9M0.js → useFs-C3X53s4E.js} +1 -1
- package/src/assets/web-panel/assets/{usePersonalDataHub-DhZs3QYN.js → usePersonalDataHub-DOvbbnkZ.js} +1 -1
- package/src/assets/web-panel/assets/{vnode-DcePTYAm.js → vnode-Ie0TEVFT.js} +1 -1
- package/src/assets/web-panel/assets/{zoom-BYmlnjRk.js → zoom-CRUMVS8l.js} +1 -1
- package/src/assets/web-panel/index.html +1 -1
- package/src/command-help-index.json +3 -3
- package/src/commands/agent.js +18 -1
- package/src/commands/evolution-benchmark.js +72 -0
- package/src/commands/evolution.js +2 -0
- package/src/commands/governed-skill-marketplace.js +142 -0
- package/src/commands/marketplace.js +4 -1
- package/src/commands/serve.js +10 -0
- package/src/commands/skill.js +3 -0
- package/src/data/changelog.json +26 -0
- package/src/gateways/ws/ws-agent-handler.js +59 -2
- package/src/gateways/ws/ws-server.js +2 -0
- package/src/harness/golden-transcript.js +1 -0
- package/src/harness/prompt-compressor.js +51 -5
- package/src/harness/provider-backed-compaction.js +28 -1
- package/src/harness/remote-session-registry.js +15 -3
- package/src/index.js +20 -2
- package/src/lazy-dispatch.js +6 -0
- package/src/lib/advisor-runtime.js +55 -2
- package/src/lib/app-server/cli-agent-kernel-adapter.js +4 -0
- package/src/lib/app-server/graph-runtime.js +32 -0
- package/src/lib/app-server/server.js +45 -1
- package/src/lib/app-server/websocket-transport.js +2 -0
- package/src/lib/autonomous-agent.js +63 -13
- package/src/lib/cowork/ab-comparator-cli.js +4 -3
- package/src/lib/cowork/debate-review-cli.js +4 -3
- package/src/lib/cowork/decision-kb-cli.js +5 -0
- package/src/lib/cowork-adapter.js +38 -16
- package/src/lib/evolution/agent-evolution-ingress.js +95 -15
- package/src/lib/evolution/agent-evolution-runtime-composition.js +82 -0
- package/src/lib/evolution/agent-evolution-session-lifecycle.js +46 -0
- package/src/lib/evolution/agent-model-projection.js +217 -0
- package/src/lib/evolution/bounded-descriptor-read.js +29 -0
- package/src/lib/evolution/controlled-skill-pilot-ledger-adapter.js +551 -0
- package/src/lib/evolution/controlled-skill-production-pilot.js +308 -18
- package/src/lib/evolution/evidence-backed-wiki-maintainer.js +10 -1
- package/src/lib/evolution/evidence-json-text.js +236 -0
- package/src/lib/evolution/evolution-artifact-ports.js +193 -21
- package/src/lib/evolution/evolution-deployment-loader.js +163 -2
- package/src/lib/evolution/evolution-eval-child-evidence-ledger-adapter.js +373 -0
- package/src/lib/evolution/evolution-eval-gate.js +14 -1
- package/src/lib/evolution/evolution-eval-process-supervisor-worker.mjs +14 -0
- package/src/lib/evolution/evolution-eval-process-supervisor.js +607 -0
- package/src/lib/evolution/evolution-evidence-artifact-adapter.js +14 -1
- package/src/lib/evolution/evolution-evidence-projector.js +240 -37
- package/src/lib/evolution/evolution-file-witness.js +153 -30
- package/src/lib/evolution/evolution-ledger-ports.js +1027 -66
- package/src/lib/evolution/evolution-ledger.js +66 -2
- package/src/lib/evolution/evolution-raw-crypto-shred.js +29 -15
- package/src/lib/evolution/evolution-raw-deletion-ledger-adapter.js +865 -0
- package/src/lib/evolution/evolution-release-train-domain-stages.js +769 -0
- package/src/lib/evolution/evolution-release-train-stage-output-ledger-adapter.js +333 -0
- package/src/lib/evolution/evolution-release-train.js +54 -6
- package/src/lib/evolution/evolution-workbench-batch-executor.js +101 -144
- package/src/lib/evolution/evolution-workbench-control-ports.js +203 -0
- package/src/lib/evolution/evolution-workbench-file-resources.js +403 -0
- package/src/lib/evolution/evolution-workbench-projection.js +134 -26
- package/src/lib/evolution/evolution-workbench-registry-source.js +482 -0
- package/src/lib/evolution/evolution-workbench-review-ledger-adapter.js +823 -0
- package/src/lib/evolution/evolution-workbench-review-protocol.js +157 -0
- package/src/lib/evolution/evolution-workbench-rollback-authorization.js +57 -0
- package/src/lib/evolution/evolution-workbench-rollback-ledger-adapter.js +1016 -0
- package/src/lib/evolution/evolution-workbench-runtime.js +133 -0
- package/src/lib/evolution/evolution-workbench-version-control.js +70 -36
- package/src/lib/evolution/evolvable-artifact-ledger-adapter.js +48 -0
- package/src/lib/evolution/governed-knowledge-candidate-rejection.js +343 -0
- package/src/lib/evolution/governed-knowledge-dependency-authority.js +227 -44
- package/src/lib/evolution/governed-knowledge-dependency-ledger-executor.js +95 -83
- package/src/lib/evolution/governed-knowledge-record.js +148 -0
- package/src/lib/evolution/governed-knowledge-revocation-record.js +135 -0
- package/src/lib/evolution/governed-knowledge-skill-rollback.js +475 -0
- package/src/lib/evolution/governed-knowledge-sync.js +17 -94
- package/src/lib/evolution/governed-knowledge-wiki-tombstone.js +462 -0
- package/src/lib/evolution/governed-skill-marketplace-badge.js +208 -0
- package/src/lib/evolution/governed-skill-marketplace-candidate.js +330 -0
- package/src/lib/evolution/governed-skill-marketplace-cli-host.js +308 -0
- package/src/lib/evolution/governed-skill-marketplace-ledger-adapter.js +420 -0
- package/src/lib/evolution/governed-skill-marketplace.js +288 -5
- package/src/lib/evolution/governed-wiki-pruning-journal.js +302 -0
- package/src/lib/evolution/governed-wiki-pruning-ledger-adapter.js +459 -0
- package/src/lib/evolution/governed-wiki-pruning-maintenance.js +576 -0
- package/src/lib/evolution/governed-wiki-pruning-plan-authority.js +169 -0
- package/src/lib/evolution/governed-wiki-pruning-raw-shred.js +207 -0
- package/src/lib/evolution/governed-wiki-pruning-retrieval.js +587 -0
- package/src/lib/evolution/governed-wiki-pruning-runtime.js +153 -0
- package/src/lib/evolution/governed-wiki-pruning-skill-rollback.js +360 -0
- package/src/lib/evolution/governed-wiki-pruning.js +322 -143
- package/src/lib/evolution/independent-skill-revocation-source.js +231 -0
- package/src/lib/evolution/knowledge-wiki-source-admission.js +124 -0
- package/src/lib/evolution/knowledge-wiki-source-provenance.js +359 -0
- package/src/lib/evolution/progressive-canary-external-watchdog.js +578 -0
- package/src/lib/evolution/progressive-canary-traffic-worker.js +628 -0
- package/src/lib/evolution/progressive-canary-watchdog-file-store.js +285 -0
- package/src/lib/evolution/progressive-canary-watchdog-node-pki.js +265 -0
- package/src/lib/evolution/skill-candidate-registry.js +22 -0
- package/src/lib/evolution/skill-promotion-controller.js +25 -0
- package/src/lib/evolution/skill-promotion-review-ledger-adapter.js +100 -0
- package/src/lib/evolution/skill-registry-transition-ledger-adapter.js +131 -2
- package/src/lib/evolution/skill-release-registry.js +25 -4
- package/src/lib/evolution/skill-retrieval-revocation-authority.js +361 -0
- package/src/lib/evolution/skill-retrieval-revocation-ledger-adapter.js +346 -0
- package/src/lib/evolution/skill-revocation-propagation.js +467 -0
- package/src/lib/evolution/skill-target-matrix-eval.js +162 -11
- package/src/lib/evolution/skill-wiki-reconciliation.js +985 -0
- package/src/lib/evolution/skill-writer-inventory-manifest.js +8 -6
- package/src/lib/evolution/statistical-progressive-canary.js +165 -3
- package/src/lib/evolution/structured-memory-agent-control-plane.js +120 -0
- package/src/lib/evolution/structured-memory-authority-ledger-adapter.js +5 -1
- package/src/lib/evolution/structured-memory-promotion-receipt-writer.js +126 -0
- package/src/lib/evolution/wiki-informed-skill-proposer.js +127 -21
- package/src/lib/evolution/wiki-maintainer-ledger-adapter.js +760 -100
- package/src/lib/evolution/wiki-revision-protocol.js +120 -0
- package/src/lib/evolution/wiki-skill-proposal-ledger-adapter.js +307 -0
- package/src/lib/evolution/wiki-target-tombstone-revision.js +101 -0
- package/src/lib/evolution/wikiskill-benchmark-cli-host.js +178 -0
- package/src/lib/evolution/wikiskill-benchmark-execution-host.js +702 -0
- package/src/lib/evolution/wikiskill-benchmark-ledger-adapter.js +613 -0
- package/src/lib/evolution/wikiskill-benchmark.js +80 -16
- package/src/lib/goal-assess.js +17 -10
- package/src/lib/interactive-planner.js +9 -1
- package/src/lib/iteration-budget.js +16 -2
- package/src/lib/micro-compact.js +4 -1
- package/src/lib/model-failure-policy.js +21 -0
- package/src/lib/process-execution-broker/index.js +1 -0
- package/src/lib/process-execution-broker/windows-sandbox-helper.dll +0 -0
- package/src/lib/process-execution-broker/windows-sandbox-helper.exe +0 -0
- package/src/lib/process-execution-broker/windows-sandbox.cs +33 -15
- package/src/lib/read-file-page.js +191 -0
- package/src/lib/runnable-provider.js +2 -1
- package/src/lib/skill-retrieval-router.js +22 -1
- package/src/repl/agent-repl.js +127 -33
- package/src/runtime/agent-core.js +163 -73
- package/src/runtime/agent-runtime.js +43 -0
- package/src/runtime/coding-agent-contract-shared.cjs +7 -1
- package/src/runtime/fallback-model.js +143 -62
- package/src/runtime/headless-runner.js +54 -10
- package/src/runtime/headless-stream.js +50 -6
- package/src/runtime/runtime-factory.js +41 -2
- package/src/assets/web-panel/assets/Projects-CvtU5peJ.js +0 -1
- package/src/assets/web-panel/assets/SpeechSettings-BudpA5kr.js +0 -1
- package/src/assets/web-panel/assets/devWarning-CF3xafX2.js +0 -1
- package/src/assets/web-panel/assets/index-C907rPwd.js +0 -1
- package/src/assets/web-panel/assets/index-wueRSK2d.js +0 -1
|
@@ -11,6 +11,7 @@ import {
|
|
|
11
11
|
captureAgentSkillOutcomeIndex,
|
|
12
12
|
} from "../evolution/agent-evolution-runtime-composition-brand.js";
|
|
13
13
|
import { captureSkillVectorAuthority } from "../skill-vector-authority.js";
|
|
14
|
+
import { captureSkillRetrievalRevocationReader } from "../evolution/skill-retrieval-revocation-authority.js";
|
|
14
15
|
import {
|
|
15
16
|
diffGraphTrace,
|
|
16
17
|
locateBlockedRoot,
|
|
@@ -151,6 +152,7 @@ export class AppServerGraphRuntime {
|
|
|
151
152
|
evolutionCompositionFactory = null,
|
|
152
153
|
skillOutcomeIndex = null,
|
|
153
154
|
skillVectorAuthority = null,
|
|
155
|
+
skillRetrievalRevocationReader = null,
|
|
154
156
|
writerLeaseTtlMs = 24 * 60 * 60 * 1000,
|
|
155
157
|
} = {}) {
|
|
156
158
|
if (typeof executeNode !== "function") {
|
|
@@ -179,6 +181,10 @@ export class AppServerGraphRuntime {
|
|
|
179
181
|
skillVectorAuthority === null
|
|
180
182
|
? null
|
|
181
183
|
: captureSkillVectorAuthority(skillVectorAuthority);
|
|
184
|
+
this.skillRetrievalRevocationReader =
|
|
185
|
+
skillRetrievalRevocationReader === null
|
|
186
|
+
? null
|
|
187
|
+
: captureSkillRetrievalRevocationReader(skillRetrievalRevocationReader);
|
|
182
188
|
if (
|
|
183
189
|
this.skillOutcomeIndex !== null &&
|
|
184
190
|
this.skillVectorAuthority !== null &&
|
|
@@ -186,6 +192,22 @@ export class AppServerGraphRuntime {
|
|
|
186
192
|
) {
|
|
187
193
|
throw new TypeError("Graph retrieval authorities must share one tenant");
|
|
188
194
|
}
|
|
195
|
+
if (
|
|
196
|
+
this.skillVectorAuthority !== null &&
|
|
197
|
+
this.skillRetrievalRevocationReader !== null &&
|
|
198
|
+
this.skillVectorAuthority.tenantId !==
|
|
199
|
+
this.skillRetrievalRevocationReader.tenantId
|
|
200
|
+
) {
|
|
201
|
+
throw new TypeError("Graph retrieval authorities must share one tenant");
|
|
202
|
+
}
|
|
203
|
+
if (
|
|
204
|
+
this.skillOutcomeIndex !== null &&
|
|
205
|
+
this.skillRetrievalRevocationReader !== null &&
|
|
206
|
+
this.skillOutcomeIndex.tenantId !==
|
|
207
|
+
this.skillRetrievalRevocationReader.tenantId
|
|
208
|
+
) {
|
|
209
|
+
throw new TypeError("Graph retrieval authorities must share one tenant");
|
|
210
|
+
}
|
|
189
211
|
this.writerLeaseTtlMs = writerLeaseTtlMs;
|
|
190
212
|
this.runs = new Map();
|
|
191
213
|
this.drives = new Map();
|
|
@@ -227,6 +249,15 @@ export class AppServerGraphRuntime {
|
|
|
227
249
|
"Graph evolution composition and Skill vector authority must share one tenant",
|
|
228
250
|
);
|
|
229
251
|
}
|
|
252
|
+
if (
|
|
253
|
+
this.skillRetrievalRevocationReader !== null &&
|
|
254
|
+
composition.tenantId !==
|
|
255
|
+
this.skillRetrievalRevocationReader.tenantId
|
|
256
|
+
) {
|
|
257
|
+
throw new TypeError(
|
|
258
|
+
"Graph evolution composition and Skill revocation authority must share one tenant",
|
|
259
|
+
);
|
|
260
|
+
}
|
|
230
261
|
if (
|
|
231
262
|
typeof composition.evolutionIngress?.start !== "function" ||
|
|
232
263
|
typeof composition.evolutionIngress?.complete !== "function"
|
|
@@ -732,6 +763,7 @@ export class AppServerGraphRuntime {
|
|
|
732
763
|
evolutionIngress: evolutionComposition?.evolutionIngress || null,
|
|
733
764
|
skillOutcomeIndex: this.skillOutcomeIndex,
|
|
734
765
|
skillVectorAuthority: this.skillVectorAuthority,
|
|
766
|
+
skillRetrievalRevocationReader: this.skillRetrievalRevocationReader,
|
|
735
767
|
});
|
|
736
768
|
if (!result || !["succeeded", "completed"].includes(result.status)) {
|
|
737
769
|
const error = runtimeError(
|
|
@@ -9,6 +9,7 @@ import {
|
|
|
9
9
|
import { AppServerGraphRuntime } from "./graph-runtime.js";
|
|
10
10
|
import { captureAgentSkillOutcomeIndex } from "../evolution/agent-evolution-runtime-composition-brand.js";
|
|
11
11
|
import { captureSkillVectorAuthority } from "../skill-vector-authority.js";
|
|
12
|
+
import { captureSkillRetrievalRevocationReader } from "../evolution/skill-retrieval-revocation-authority.js";
|
|
12
13
|
import { compileGraphDefinition } from "../graph-kernel/compiler.js";
|
|
13
14
|
import { createCliContextMemoryRuntime } from "../context-memory-kernel/runtime.js";
|
|
14
15
|
import { isEvolutionWorkbenchCliHost } from "../evolution/evolution-workbench-cli-host.js";
|
|
@@ -151,6 +152,7 @@ export class CcAppServer {
|
|
|
151
152
|
evolutionCompositionFactory = null,
|
|
152
153
|
skillOutcomeIndex = null,
|
|
153
154
|
skillVectorAuthority = null,
|
|
155
|
+
skillRetrievalRevocationReader = null,
|
|
154
156
|
evolutionWorkbenchHost = null,
|
|
155
157
|
governedKnowledgeReviewHost = null,
|
|
156
158
|
contextMemoryRuntimeFactory = createCliContextMemoryRuntime,
|
|
@@ -200,6 +202,10 @@ export class CcAppServer {
|
|
|
200
202
|
skillVectorAuthority === null
|
|
201
203
|
? null
|
|
202
204
|
: captureSkillVectorAuthority(skillVectorAuthority);
|
|
205
|
+
this.skillRetrievalRevocationReader =
|
|
206
|
+
skillRetrievalRevocationReader === null
|
|
207
|
+
? null
|
|
208
|
+
: captureSkillRetrievalRevocationReader(skillRetrievalRevocationReader);
|
|
203
209
|
if (
|
|
204
210
|
this.skillOutcomeIndex !== null &&
|
|
205
211
|
this.skillVectorAuthority !== null &&
|
|
@@ -209,9 +215,32 @@ export class CcAppServer {
|
|
|
209
215
|
"App Server retrieval authorities must share one tenant",
|
|
210
216
|
);
|
|
211
217
|
}
|
|
218
|
+
if (
|
|
219
|
+
this.skillVectorAuthority !== null &&
|
|
220
|
+
this.skillRetrievalRevocationReader !== null &&
|
|
221
|
+
this.skillVectorAuthority.tenantId !==
|
|
222
|
+
this.skillRetrievalRevocationReader.tenantId
|
|
223
|
+
) {
|
|
224
|
+
throw new TypeError(
|
|
225
|
+
"App Server retrieval authorities must share one tenant",
|
|
226
|
+
);
|
|
227
|
+
}
|
|
228
|
+
if (
|
|
229
|
+
this.skillOutcomeIndex !== null &&
|
|
230
|
+
this.skillRetrievalRevocationReader !== null &&
|
|
231
|
+
this.skillOutcomeIndex.tenantId !==
|
|
232
|
+
this.skillRetrievalRevocationReader.tenantId
|
|
233
|
+
) {
|
|
234
|
+
throw new TypeError(
|
|
235
|
+
"App Server retrieval authorities must share one tenant",
|
|
236
|
+
);
|
|
237
|
+
}
|
|
212
238
|
if (
|
|
213
239
|
graphRuntime &&
|
|
214
|
-
(evolutionCompositionFactory ||
|
|
240
|
+
(evolutionCompositionFactory ||
|
|
241
|
+
skillOutcomeIndex ||
|
|
242
|
+
skillVectorAuthority ||
|
|
243
|
+
skillRetrievalRevocationReader)
|
|
215
244
|
) {
|
|
216
245
|
throw new TypeError(
|
|
217
246
|
"graphRuntime and host-owned Graph authorities cannot both be provided",
|
|
@@ -226,6 +255,7 @@ export class CcAppServer {
|
|
|
226
255
|
evolutionCompositionFactory,
|
|
227
256
|
skillOutcomeIndex: this.skillOutcomeIndex,
|
|
228
257
|
skillVectorAuthority: this.skillVectorAuthority,
|
|
258
|
+
skillRetrievalRevocationReader: this.skillRetrievalRevocationReader,
|
|
229
259
|
executeNode: (context) => this._executeGraphNode(context),
|
|
230
260
|
requestHumanTask: (context) => this._requestHumanTask(context),
|
|
231
261
|
onEvent: (event) => {
|
|
@@ -773,6 +803,7 @@ export class CcAppServer {
|
|
|
773
803
|
evolutionIngress,
|
|
774
804
|
skillOutcomeIndex,
|
|
775
805
|
skillVectorAuthority,
|
|
806
|
+
skillRetrievalRevocationReader,
|
|
776
807
|
}) {
|
|
777
808
|
const threadId = `graph-agent:${runId}:${nodeId}`;
|
|
778
809
|
const turn = { id: attempt.id, threadId };
|
|
@@ -785,6 +816,7 @@ export class CcAppServer {
|
|
|
785
816
|
delete turnOptions.evolutionIngress;
|
|
786
817
|
delete turnOptions.skillOutcomeIndex;
|
|
787
818
|
delete turnOptions.skillVectorAuthority;
|
|
819
|
+
delete turnOptions.skillRetrievalRevocationReader;
|
|
788
820
|
if (evolutionIngress !== null && evolutionIngress !== undefined) {
|
|
789
821
|
turnOptions.evolutionIngress = evolutionIngress;
|
|
790
822
|
}
|
|
@@ -794,6 +826,13 @@ export class CcAppServer {
|
|
|
794
826
|
if (skillVectorAuthority !== null && skillVectorAuthority !== undefined) {
|
|
795
827
|
turnOptions.skillVectorAuthority = skillVectorAuthority;
|
|
796
828
|
}
|
|
829
|
+
if (
|
|
830
|
+
skillRetrievalRevocationReader !== null &&
|
|
831
|
+
skillRetrievalRevocationReader !== undefined
|
|
832
|
+
) {
|
|
833
|
+
turnOptions.skillRetrievalRevocationReader =
|
|
834
|
+
skillRetrievalRevocationReader;
|
|
835
|
+
}
|
|
797
836
|
const result = await this.kernel.startTurn({
|
|
798
837
|
threadId,
|
|
799
838
|
turnId: attempt.id,
|
|
@@ -1038,12 +1077,17 @@ export class CcAppServer {
|
|
|
1038
1077
|
const turnOptions = { ...options };
|
|
1039
1078
|
delete turnOptions.skillOutcomeIndex;
|
|
1040
1079
|
delete turnOptions.skillVectorAuthority;
|
|
1080
|
+
delete turnOptions.skillRetrievalRevocationReader;
|
|
1041
1081
|
if (this.skillOutcomeIndex !== null) {
|
|
1042
1082
|
turnOptions.skillOutcomeIndex = this.skillOutcomeIndex;
|
|
1043
1083
|
}
|
|
1044
1084
|
if (this.skillVectorAuthority !== null) {
|
|
1045
1085
|
turnOptions.skillVectorAuthority = this.skillVectorAuthority;
|
|
1046
1086
|
}
|
|
1087
|
+
if (this.skillRetrievalRevocationReader !== null) {
|
|
1088
|
+
turnOptions.skillRetrievalRevocationReader =
|
|
1089
|
+
this.skillRetrievalRevocationReader;
|
|
1090
|
+
}
|
|
1047
1091
|
const result = await this.kernel.startTurn({
|
|
1048
1092
|
threadId: turn.threadId,
|
|
1049
1093
|
turnId: turn.id,
|
|
@@ -418,6 +418,8 @@ export class WebSocketAppServerHost extends EventEmitter {
|
|
|
418
418
|
this.options.evolutionCompositionFactory ?? null,
|
|
419
419
|
skillOutcomeIndex: this.options.skillOutcomeIndex ?? null,
|
|
420
420
|
skillVectorAuthority: this.options.skillVectorAuthority ?? null,
|
|
421
|
+
skillRetrievalRevocationReader:
|
|
422
|
+
this.options.skillRetrievalRevocationReader ?? null,
|
|
421
423
|
evolutionWorkbenchHost: this.options.evolutionWorkbenchHost ?? null,
|
|
422
424
|
governedKnowledgeReviewHost:
|
|
423
425
|
this.options.governedKnowledgeReviewHost ?? null,
|
|
@@ -43,6 +43,9 @@ export class CLIAutonomousAgent extends EventEmitter {
|
|
|
43
43
|
constructor() {
|
|
44
44
|
super();
|
|
45
45
|
this._goals = new Map();
|
|
46
|
+
this._runningLoops = new Map();
|
|
47
|
+
this._closing = false;
|
|
48
|
+
this._shutdownAbort = new AbortController();
|
|
46
49
|
this._llmChat = null;
|
|
47
50
|
this._toolExecutor = null;
|
|
48
51
|
this._hookManager = null;
|
|
@@ -88,6 +91,7 @@ export class CLIAutonomousAgent extends EventEmitter {
|
|
|
88
91
|
async submitGoal(description, { tokenBudget = 50000 } = {}) {
|
|
89
92
|
assertCLILegacyMutationAllowed("CLIAutonomousAgent.submitGoal");
|
|
90
93
|
if (!this._initialized) throw new Error("Agent not initialized");
|
|
94
|
+
if (this._closing) throw new Error("Agent session is closing");
|
|
91
95
|
if (!description) throw new Error("Goal description required");
|
|
92
96
|
|
|
93
97
|
const goalId = `goal-${_deps.Date.now()}-${Math.random().toString(36).slice(2, 6)}`;
|
|
@@ -111,11 +115,7 @@ export class CLIAutonomousAgent extends EventEmitter {
|
|
|
111
115
|
this.emit("goal:submitted", { goalId, description });
|
|
112
116
|
|
|
113
117
|
// Start the ReAct loop asynchronously
|
|
114
|
-
this.
|
|
115
|
-
goal.status = GoalStatus.FAILED;
|
|
116
|
-
goal.errors.push(err.message);
|
|
117
|
-
this.emit("goal:failed", { goalId, error: err.message });
|
|
118
|
-
});
|
|
118
|
+
this._launchGoalLoop(goal);
|
|
119
119
|
|
|
120
120
|
return { goalId };
|
|
121
121
|
}
|
|
@@ -162,6 +162,7 @@ export class CLIAutonomousAgent extends EventEmitter {
|
|
|
162
162
|
*/
|
|
163
163
|
resumeGoal(goalId) {
|
|
164
164
|
assertCLILegacyMutationAllowed("CLIAutonomousAgent.resumeGoal");
|
|
165
|
+
if (this._closing) return { error: "Agent session is closing" };
|
|
165
166
|
const goal = this._goals.get(goalId);
|
|
166
167
|
if (!goal) return { error: "Goal not found" };
|
|
167
168
|
if (goal.status !== GoalStatus.PAUSED)
|
|
@@ -172,14 +173,51 @@ export class CLIAutonomousAgent extends EventEmitter {
|
|
|
172
173
|
this.emit("goal:resumed", { goalId });
|
|
173
174
|
|
|
174
175
|
// Continue the loop
|
|
175
|
-
this.
|
|
176
|
-
goal.status = GoalStatus.FAILED;
|
|
177
|
-
goal.errors.push(err.message);
|
|
178
|
-
});
|
|
176
|
+
this._launchGoalLoop(goal);
|
|
179
177
|
|
|
180
178
|
return { success: true };
|
|
181
179
|
}
|
|
182
180
|
|
|
181
|
+
_launchGoalLoop(goal) {
|
|
182
|
+
// Resume during an in-flight model/tool call reuses that loop, rather than
|
|
183
|
+
// launching a second execution of the same goal.
|
|
184
|
+
if (this._runningLoops.has(goal.id)) return this._runningLoops.get(goal.id);
|
|
185
|
+
const running = this._runReActLoop(goal)
|
|
186
|
+
.catch((err) => {
|
|
187
|
+
if (goal.status === GoalStatus.CANCELLED) return;
|
|
188
|
+
goal.status = GoalStatus.FAILED;
|
|
189
|
+
goal.errors.push(err.message);
|
|
190
|
+
this.emit("goal:failed", { goalId: goal.id, error: err.message });
|
|
191
|
+
})
|
|
192
|
+
.finally(() => this._runningLoops.delete(goal.id));
|
|
193
|
+
this._runningLoops.set(goal.id, running);
|
|
194
|
+
return running;
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
get signal() {
|
|
198
|
+
return this._shutdownAbort.signal;
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
async shutdown() {
|
|
202
|
+
this._closing = true;
|
|
203
|
+
let interrupted = 0;
|
|
204
|
+
for (const goal of this._goals.values()) {
|
|
205
|
+
if (
|
|
206
|
+
![GoalStatus.PENDING, GoalStatus.RUNNING, GoalStatus.PAUSED].includes(
|
|
207
|
+
goal.status,
|
|
208
|
+
)
|
|
209
|
+
)
|
|
210
|
+
continue;
|
|
211
|
+
interrupted++;
|
|
212
|
+
goal.status = GoalStatus.CANCELLED;
|
|
213
|
+
goal.updatedAt = new Date().toISOString();
|
|
214
|
+
this.emit("goal:cancelled", { goalId: goal.id });
|
|
215
|
+
}
|
|
216
|
+
this._shutdownAbort.abort(new Error("Agent session is closing"));
|
|
217
|
+
await Promise.allSettled([...this._runningLoops.values()]);
|
|
218
|
+
return { interrupted };
|
|
219
|
+
}
|
|
220
|
+
|
|
183
221
|
/**
|
|
184
222
|
* Cancel a goal.
|
|
185
223
|
*/
|
|
@@ -374,12 +412,13 @@ Goal: ${goal.description}
|
|
|
374
412
|
|
|
375
413
|
Available tools: read_file, write_file, edit_file, run_shell, search_files, list_dir, run_skill
|
|
376
414
|
|
|
377
|
-
Return a JSON array of steps,
|
|
415
|
+
Return a JSON array of steps, for example: [{ "description": "Describe the step", "tool": "tool_name", "params": {} }]
|
|
416
|
+
Populate params with the selected tool's actual arguments.
|
|
378
417
|
Only return the JSON array, no other text.`;
|
|
379
418
|
|
|
380
419
|
const response = await this._llmChat(
|
|
381
420
|
[{ role: "user", content: prompt }],
|
|
382
|
-
{ maxTokens: 1024 },
|
|
421
|
+
{ maxTokens: 1024, signal: this.signal },
|
|
383
422
|
);
|
|
384
423
|
|
|
385
424
|
// Parse steps from LLM response
|
|
@@ -396,6 +435,11 @@ Only return the JSON array, no other text.`;
|
|
|
396
435
|
}));
|
|
397
436
|
} catch (_err) {
|
|
398
437
|
// Fallback: single step
|
|
438
|
+
if (
|
|
439
|
+
_err?.runtimeLedgerPersistence === true ||
|
|
440
|
+
_err?.code === "CC_AGENT_EVOLUTION_INGRESS_FAILED"
|
|
441
|
+
)
|
|
442
|
+
throw _err;
|
|
399
443
|
return [
|
|
400
444
|
{
|
|
401
445
|
description: goal.description,
|
|
@@ -450,11 +494,12 @@ Should I:
|
|
|
450
494
|
2. Add a new prerequisite step
|
|
451
495
|
3. Skip this step and continue
|
|
452
496
|
|
|
453
|
-
Reply with a JSON object: { "action": "retry
|
|
497
|
+
Reply with a JSON object, for example: { "action": "retry", "newParams": {}, "newStep": { "description": "Corrective step", "tool": "tool_name", "params": {} } }
|
|
498
|
+
Set action to retry, add_step, or skip. Supply newParams for retry and newStep for add_step.`;
|
|
454
499
|
|
|
455
500
|
const response = await this._llmChat(
|
|
456
501
|
[{ role: "user", content: prompt }],
|
|
457
|
-
{ maxTokens: 512 },
|
|
502
|
+
{ maxTokens: 512, signal: this.signal },
|
|
458
503
|
);
|
|
459
504
|
|
|
460
505
|
const correction = this._parseJSON(response);
|
|
@@ -499,6 +544,11 @@ Reply with a JSON object: { "action": "retry|add_step|skip", "newParams": {...},
|
|
|
499
544
|
|
|
500
545
|
return false;
|
|
501
546
|
} catch (_err) {
|
|
547
|
+
if (
|
|
548
|
+
_err?.runtimeLedgerPersistence === true ||
|
|
549
|
+
_err?.code === "CC_AGENT_EVOLUTION_INGRESS_FAILED"
|
|
550
|
+
)
|
|
551
|
+
throw _err;
|
|
502
552
|
return false;
|
|
503
553
|
}
|
|
504
554
|
}
|
|
@@ -10,8 +10,9 @@ import { runPeerGroup } from "./agent-group-runner.js";
|
|
|
10
10
|
|
|
11
11
|
const DEFAULT_CRITERIA = ["quality", "performance", "readability"];
|
|
12
12
|
|
|
13
|
-
function
|
|
13
|
+
function throwTerminalModelFailure(error) {
|
|
14
14
|
if (error?.runtimeLedgerPersistence === true) throw error;
|
|
15
|
+
if (error?.code === "CC_AGENT_EVOLUTION_INGRESS_FAILED") throw error;
|
|
15
16
|
}
|
|
16
17
|
|
|
17
18
|
const VARIANT_PROFILES = [
|
|
@@ -91,7 +92,7 @@ export async function compare({
|
|
|
91
92
|
// Ordinary variant failures remain comparable, but a host ledger failure
|
|
92
93
|
// must escape before judging can spend again or a partial result is emitted.
|
|
93
94
|
for (const outcome of runResult.results) {
|
|
94
|
-
|
|
95
|
+
throwTerminalModelFailure(outcome.error);
|
|
95
96
|
}
|
|
96
97
|
|
|
97
98
|
const generatedVariants = runResult.results.map((r) => {
|
|
@@ -145,7 +146,7 @@ REASON: (1-2 sentence justification)`;
|
|
|
145
146
|
winner = parseWinner(judgement) || generatedVariants[0]?.name || "unknown";
|
|
146
147
|
reason = parseReason(judgement) || "See detailed scores above.";
|
|
147
148
|
} catch (err) {
|
|
148
|
-
|
|
149
|
+
throwTerminalModelFailure(err);
|
|
149
150
|
reason = `Scoring error: ${err.message}`;
|
|
150
151
|
}
|
|
151
152
|
|
|
@@ -10,8 +10,9 @@ import { runPeerGroup } from "./agent-group-runner.js";
|
|
|
10
10
|
|
|
11
11
|
const DEFAULT_PERSPECTIVES = ["performance", "security", "maintainability"];
|
|
12
12
|
|
|
13
|
-
function
|
|
13
|
+
function throwTerminalModelFailure(error) {
|
|
14
14
|
if (error?.runtimeLedgerPersistence === true) throw error;
|
|
15
|
+
if (error?.code === "CC_AGENT_EVOLUTION_INGRESS_FAILED") throw error;
|
|
15
16
|
}
|
|
16
17
|
|
|
17
18
|
const PERSPECTIVE_PROMPTS = {
|
|
@@ -104,7 +105,7 @@ export async function startDebate({
|
|
|
104
105
|
// rows. A durable usage-ledger failure is host-terminal, not review content:
|
|
105
106
|
// let the REPL latch stop this and every later paid call.
|
|
106
107
|
for (const outcome of runResult.results) {
|
|
107
|
-
|
|
108
|
+
throwTerminalModelFailure(outcome.error);
|
|
108
109
|
}
|
|
109
110
|
|
|
110
111
|
const reviews = runResult.results.map((r) => {
|
|
@@ -153,7 +154,7 @@ export async function startDebate({
|
|
|
153
154
|
finalVerdict = extractVerdict(summary);
|
|
154
155
|
consensusScore = extractConsensusScore(summary);
|
|
155
156
|
} catch (err) {
|
|
156
|
-
|
|
157
|
+
throwTerminalModelFailure(err);
|
|
157
158
|
summary = `Moderator error: ${err.message}`;
|
|
158
159
|
}
|
|
159
160
|
|
|
@@ -119,6 +119,11 @@ List all decisions you can find. If no explicit decisions are documented, infer
|
|
|
119
119
|
summary: `Found ${decisions.length} architectural decisions in ${targetPath}\n\n${decisions.map((d) => ` - ${d.title} (${d.status})`).join("\n")}`,
|
|
120
120
|
};
|
|
121
121
|
} catch (err) {
|
|
122
|
+
if (
|
|
123
|
+
err?.runtimeLedgerPersistence === true ||
|
|
124
|
+
err?.code === "CC_AGENT_EVOLUTION_INGRESS_FAILED"
|
|
125
|
+
)
|
|
126
|
+
throw err;
|
|
122
127
|
return {
|
|
123
128
|
decisions: [],
|
|
124
129
|
summary: `Decision extraction failed: ${err.message}`,
|
|
@@ -10,6 +10,7 @@
|
|
|
10
10
|
import { LLMProviderRegistry, BUILT_IN_PROVIDERS } from "./llm-providers.js";
|
|
11
11
|
import { loadConfig } from "./config-manager.js";
|
|
12
12
|
import { applyConfigLlmDefaults } from "./llm-config-defaults.js";
|
|
13
|
+
import { captureAgentEvolutionIngress } from "./evolution/agent-evolution-ingress.js";
|
|
13
14
|
|
|
14
15
|
function plainUsage(value) {
|
|
15
16
|
return value && typeof value === "object" && !Array.isArray(value)
|
|
@@ -106,6 +107,8 @@ async function invokeChatCall(callWrapper, provider, model, call) {
|
|
|
106
107
|
* @param {string} [options.model] - Model name override
|
|
107
108
|
* @param {string} [options.baseUrl] - Base URL override
|
|
108
109
|
* @param {string} [options.apiKey] - API key override
|
|
110
|
+
* @param {object} [options.evolutionIngress] - Branded session ingress captured
|
|
111
|
+
* by the adapter; per-call options cannot remove or replace it.
|
|
109
112
|
* @param {(request: {call: function, provider: string, model: string}) => Promise<object>} [options.callWrapper]
|
|
110
113
|
* Optional host boundary around each real provider call. The callback
|
|
111
114
|
* may invoke `call({ signal })` to bind cancellation and resolves to a
|
|
@@ -114,6 +117,10 @@ async function invokeChatCall(callWrapper, provider, model, call) {
|
|
|
114
117
|
* @returns {(messages: object[], opts?: object) => Promise<string>}
|
|
115
118
|
*/
|
|
116
119
|
export function createChatFn(options = {}) {
|
|
120
|
+
const evolutionIngress =
|
|
121
|
+
options.evolutionIngress == null
|
|
122
|
+
? null
|
|
123
|
+
: captureAgentEvolutionIngress(options.evolutionIngress);
|
|
117
124
|
// Fill provider/model/baseUrl/apiKey from config.llm only when the caller
|
|
118
125
|
// gave no explicit provider AND no LLM_PROVIDER env override (both still win).
|
|
119
126
|
// Fail-open: a config read must never break chat construction.
|
|
@@ -140,6 +147,20 @@ export function createChatFn(options = {}) {
|
|
|
140
147
|
return async function chat(messages, opts = {}) {
|
|
141
148
|
const currentModel = opts.model || model;
|
|
142
149
|
const maxTokens = opts.maxTokens || 2048;
|
|
150
|
+
const requestSignal = (hostSignal) => {
|
|
151
|
+
const signals = [
|
|
152
|
+
...new Set([hostSignal, opts.signal, resolved.signal].filter(Boolean)),
|
|
153
|
+
];
|
|
154
|
+
return signals.length > 1 ? AbortSignal.any(signals) : signals[0];
|
|
155
|
+
};
|
|
156
|
+
// Run inside the host's per-call meter, immediately before provider encoding.
|
|
157
|
+
// Every invocation (including concurrent reviewers) gets fresh durable
|
|
158
|
+
// admission; the original conversation is never replaced in place.
|
|
159
|
+
const prepareMessages = async () =>
|
|
160
|
+
evolutionIngress === null
|
|
161
|
+
? messages
|
|
162
|
+
: (await evolutionIngress.prepareModelRequest({ messages, tools: [] }))
|
|
163
|
+
.messages;
|
|
143
164
|
|
|
144
165
|
if (provider === "ollama") {
|
|
145
166
|
const envelope = await invokeChatCall(
|
|
@@ -147,13 +168,14 @@ export function createChatFn(options = {}) {
|
|
|
147
168
|
provider,
|
|
148
169
|
currentModel,
|
|
149
170
|
async ({ signal = opts.signal || resolved.signal } = {}) => {
|
|
171
|
+
const modelMessages = await prepareMessages();
|
|
150
172
|
const res = await fetch(`${baseUrl}/api/chat`, {
|
|
151
173
|
method: "POST",
|
|
152
|
-
signal,
|
|
174
|
+
signal: requestSignal(signal),
|
|
153
175
|
headers: { "Content-Type": "application/json" },
|
|
154
176
|
body: JSON.stringify({
|
|
155
177
|
model: currentModel,
|
|
156
|
-
messages,
|
|
178
|
+
messages: modelMessages,
|
|
157
179
|
stream: false,
|
|
158
180
|
options: { num_predict: maxTokens },
|
|
159
181
|
}),
|
|
@@ -172,25 +194,24 @@ export function createChatFn(options = {}) {
|
|
|
172
194
|
if (provider === "anthropic") {
|
|
173
195
|
const key = resolved.apiKey || process.env[providerDef.apiKeyEnv];
|
|
174
196
|
if (!key) throw new Error("ANTHROPIC_API_KEY not set");
|
|
175
|
-
// Extract system message if present
|
|
176
|
-
const systemMsgs = messages.filter((m) => m.role === "system");
|
|
177
|
-
const otherMsgs = messages.filter((m) => m.role !== "system");
|
|
178
|
-
const body = {
|
|
179
|
-
model: currentModel,
|
|
180
|
-
max_tokens: maxTokens,
|
|
181
|
-
messages: otherMsgs,
|
|
182
|
-
};
|
|
183
|
-
if (systemMsgs.length > 0) {
|
|
184
|
-
body.system = systemMsgs.map((m) => m.content).join("\n");
|
|
185
|
-
}
|
|
186
197
|
const envelope = await invokeChatCall(
|
|
187
198
|
callWrapper,
|
|
188
199
|
provider,
|
|
189
200
|
currentModel,
|
|
190
201
|
async ({ signal = opts.signal || resolved.signal } = {}) => {
|
|
202
|
+
const modelMessages = await prepareMessages();
|
|
203
|
+
const systemMsgs = modelMessages.filter((m) => m.role === "system");
|
|
204
|
+
const body = {
|
|
205
|
+
model: currentModel,
|
|
206
|
+
max_tokens: maxTokens,
|
|
207
|
+
messages: modelMessages.filter((m) => m.role !== "system"),
|
|
208
|
+
...(systemMsgs.length
|
|
209
|
+
? { system: systemMsgs.map((m) => m.content).join("\n") }
|
|
210
|
+
: {}),
|
|
211
|
+
};
|
|
191
212
|
const res = await fetch(`${baseUrl}/messages`, {
|
|
192
213
|
method: "POST",
|
|
193
|
-
signal,
|
|
214
|
+
signal: requestSignal(signal),
|
|
194
215
|
headers: {
|
|
195
216
|
"Content-Type": "application/json",
|
|
196
217
|
"x-api-key": key,
|
|
@@ -218,16 +239,17 @@ export function createChatFn(options = {}) {
|
|
|
218
239
|
provider,
|
|
219
240
|
currentModel,
|
|
220
241
|
async ({ signal = opts.signal || resolved.signal } = {}) => {
|
|
242
|
+
const modelMessages = await prepareMessages();
|
|
221
243
|
const res = await fetch(`${baseUrl}/chat/completions`, {
|
|
222
244
|
method: "POST",
|
|
223
|
-
signal,
|
|
245
|
+
signal: requestSignal(signal),
|
|
224
246
|
headers: {
|
|
225
247
|
"Content-Type": "application/json",
|
|
226
248
|
Authorization: `Bearer ${key}`,
|
|
227
249
|
},
|
|
228
250
|
body: JSON.stringify({
|
|
229
251
|
model: currentModel,
|
|
230
|
-
messages,
|
|
252
|
+
messages: modelMessages,
|
|
231
253
|
max_tokens: maxTokens,
|
|
232
254
|
}),
|
|
233
255
|
});
|