chainlesschain 0.166.21 → 0.166.24
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +67 -9
- package/package.json +4 -3
- package/src/assets/web-panel/assets/{AIOps-BjMnsUci.js → AIOps-DR-MWcZc.js} +1 -1
- package/src/assets/web-panel/assets/{ActionButton-DdYFP03A.js → ActionButton-DT8B7sEb.js} +1 -1
- package/src/assets/web-panel/assets/{Analytics-Bb8TuuK_.js → Analytics-asjh3dQJ.js} +3 -3
- package/src/assets/web-panel/assets/{AppLayout-Kn3TIOtk.js → AppLayout-DivQ491i.js} +5 -5
- package/src/assets/web-panel/assets/{Artifacts-4IxpqI_b.js → Artifacts-DPH2uUmy.js} +1 -1
- package/src/assets/web-panel/assets/{Audit-BOV2caqU.js → Audit-Bp2nLyc-.js} +1 -1
- package/src/assets/web-panel/assets/{BackgroundAgents-B86k-ay4.js → BackgroundAgents-CHS28khl.js} +1 -1
- package/src/assets/web-panel/assets/{Backup-C5_ie1e3.js → Backup-CKeaFSfz.js} +1 -1
- package/src/assets/web-panel/assets/{BaseInput-xpwg6QCW.js → BaseInput-CxwM9BAH.js} +1 -1
- package/src/assets/web-panel/assets/{Chat-CVZOcZau.js → Chat-DYLDwaCv.js} +4 -4
- package/src/assets/web-panel/assets/{ChatBubbleRenderer-D8fPYhUu.js → ChatBubbleRenderer-DdBJDBP0.js} +1 -1
- package/src/assets/web-panel/assets/{Checkbox-MKTq3zdP.js → Checkbox-uYTWOB8j.js} +1 -1
- package/src/assets/web-panel/assets/{Codegen-JUk3wzep.js → Codegen-CvYa_dwT.js} +1 -1
- package/src/assets/web-panel/assets/{Col-JPvTA0kC.js → Col-CanMAX4m.js} +1 -1
- package/src/assets/web-panel/assets/{Community-Tqgl87NQ.js → Community-B4WaDtHw.js} +1 -1
- package/src/assets/web-panel/assets/{Compact-BuAFYBmN.js → Compact-K93Uof_3.js} +1 -1
- package/src/assets/web-panel/assets/{Compliance-CXS9WIPZ.js → Compliance-CKeDLgUW.js} +1 -1
- package/src/assets/web-panel/assets/{Cowork-Ds2bFHrr.js → Cowork-P93grAeB.js} +3 -3
- package/src/assets/web-panel/assets/{Cron-C_dV_OeW.js → Cron-BSHnMtDn.js} +2 -2
- package/src/assets/web-panel/assets/{Crosschain-BsO6tIRo.js → Crosschain-epAOpUVJ.js} +1 -1
- package/src/assets/web-panel/assets/{DID-rNOFqBac.js → DID-ByjXfP7t.js} +2 -2
- package/src/assets/web-panel/assets/{Dashboard-C2fcKKVY.js → Dashboard-QztTU8tb.js} +2 -2
- package/src/assets/web-panel/assets/{Dropdown-Y7Ndr0X_.js → Dropdown-DhUc9yhN.js} +1 -1
- package/src/assets/web-panel/assets/{EmailListRenderer-DcP_uPmL.js → EmailListRenderer-C2sLhJJN.js} +1 -1
- package/src/assets/web-panel/assets/{FamilyGuardDashboard-Cwn3gDzk.js → FamilyGuardDashboard-CdfbWNDn.js} +1 -1
- package/src/assets/web-panel/assets/{Federation-ClQuOsqb.js → Federation-CcF_R7NW.js} +1 -1
- package/src/assets/web-panel/assets/{FormItemContext-DfwtmlcK.js → FormItemContext-Cm_X2IBk.js} +1 -1
- package/src/assets/web-panel/assets/{GenericCardRenderer-zNZhtbC5.js → GenericCardRenderer-DUi4NWlb.js} +1 -1
- package/src/assets/web-panel/assets/{Git-BZmdW-G5.js → Git-4Sq5FjBt.js} +2 -2
- package/src/assets/web-panel/assets/{Governance-CqBk4lEn.js → Governance-Dx2_v4V6.js} +1 -1
- package/src/assets/web-panel/assets/{Inference-Dbmt3ZXk.js → Inference-7Vr1xekR.js} +1 -1
- package/src/assets/web-panel/assets/{KnowledgeGraph-hMTH6qf3.js → KnowledgeGraph-Cnd2XOzf.js} +1 -1
- package/src/assets/web-panel/assets/{Logs-CkiYgiW2.js → Logs-B66QPVf-.js} +2 -2
- package/src/assets/web-panel/assets/{MarkdownRenderer-BL1FElXg.js → MarkdownRenderer-PLsEvhly.js} +1 -1
- package/src/assets/web-panel/assets/{Marketplace-CbB6wfin.js → Marketplace-BMIK9BmC.js} +1 -1
- package/src/assets/web-panel/assets/{McpTools-BSwiFtte.js → McpTools-BDbyp3J_.js} +3 -3
- package/src/assets/web-panel/assets/{Memory-B03PeHrz.js → Memory-CJdzfZGi.js} +2 -2
- package/src/assets/web-panel/assets/{MobileBridge-CRGrnd-X.js → MobileBridge-C2TH5Y3-.js} +1 -1
- package/src/assets/web-panel/assets/{MobileProjects-CE_5v2kO.js → MobileProjects-D1dYXkvV.js} +1 -1
- package/src/assets/web-panel/assets/{Mtc-Dp11QVx1.js → Mtc-B-4A1I1j.js} +4 -4
- package/src/assets/web-panel/assets/{MtcAudit-CYu-3JBu.js → MtcAudit-Bgcc9UOl.js} +5 -5
- package/src/assets/web-panel/assets/{Multisig-CGyJ0Xl3.js → Multisig-DqOe-etP.js} +3 -3
- package/src/assets/web-panel/assets/{NLProgramming-CoWi_ov1.js → NLProgramming-7VnhzE_6.js} +1 -1
- package/src/assets/web-panel/assets/Notes-BxawpeUQ.js +7 -0
- package/src/assets/web-panel/assets/{NotificationSettings-DX4I2b4W.js → NotificationSettings-Cr08G2aE.js} +1 -1
- package/src/assets/web-panel/assets/OrderTableRenderer-Ce8bEGlK.js +1 -0
- package/src/assets/web-panel/assets/{Organization-oopLO_tk.js → Organization-BC7lveGv.js} +4 -4
- package/src/assets/web-panel/assets/{Overflow-BFVvjMyf.js → Overflow-CakOW-G0.js} +1 -1
- package/src/assets/web-panel/assets/{P2P-CBy5t-Tk.js → P2P-Cf8CaOBZ.js} +2 -2
- package/src/assets/web-panel/assets/{PdhVaultBrowser--YWJNsu6.js → PdhVaultBrowser-Dc7b98W9.js} +3 -3
- package/src/assets/web-panel/assets/{Permissions-C2dZ8scb.js → Permissions-DGJyMEfS.js} +4 -4
- package/src/assets/web-panel/assets/{PersonalDataHub-Bs3l7Hlx.js → PersonalDataHub-DNIwSdwu.js} +6 -6
- package/src/assets/web-panel/assets/{Pipeline-DEBWbZuD.js → Pipeline-5B1S12wa.js} +1 -1
- package/src/assets/web-panel/assets/{Privacy-CjHBb6NU.js → Privacy-CMB6Ke5t.js} +1 -1
- package/src/assets/web-panel/assets/{ProjectInit-D2WipUz5.js → ProjectInit-D5PqTFiT.js} +2 -2
- package/src/assets/web-panel/assets/{ProjectSettings-B6WfnrGB.js → ProjectSettings-CbKNdSjV.js} +2 -2
- package/src/assets/web-panel/assets/Projects-ccXaHzYL.js +1 -0
- package/src/assets/web-panel/assets/{Providers-CCv5M_Dv.js → Providers-CJF5_-Gs.js} +1 -1
- package/src/assets/web-panel/assets/{QrScannerModal-CGthxU54.js → QrScannerModal-CT6iEAdi.js} +1 -1
- package/src/assets/web-panel/assets/{QuickAsk-CnPmXPFb.js → QuickAsk-Ci0h9mJ_.js} +1 -1
- package/src/assets/web-panel/assets/{Recommend-Df_tGEa9.js → Recommend-Da5mobZu.js} +1 -1
- package/src/assets/web-panel/assets/{RemoteSession-Z58N0Loe.js → RemoteSession-BaCY8eey.js} +2 -2
- package/src/assets/web-panel/assets/{Reputation-CZTBQ2Vt.js → Reputation-CaITfTsI.js} +1 -1
- package/src/assets/web-panel/assets/{Row-CdK3YpCQ.js → Row-DtUDamyP.js} +1 -1
- package/src/assets/web-panel/assets/{RssFeed-CFMVT5sb.js → RssFeed-DX27gFpg.js} +3 -3
- package/src/assets/web-panel/assets/{Search-DrF8RIvD.js → Search-DFL69osN.js} +1 -1
- package/src/assets/web-panel/assets/{Security-Ddk2f2DM.js → Security-BqGeoWv-.js} +3 -3
- package/src/assets/web-panel/assets/{Services-CCuK-VOo.js → Services-3z1WnEAc.js} +2 -2
- package/src/assets/web-panel/assets/{Skeleton-DxCpHzeM.js → Skeleton-C_OJQQ9Z.js} +1 -1
- package/src/assets/web-panel/assets/{Skills-t2oTDgcv.js → Skills-BY7aT6Mo.js} +1 -1
- package/src/assets/web-panel/assets/{Sla-Df63M9_R.js → Sla-BZv7DSaD.js} +1 -1
- package/src/assets/web-panel/assets/SpeechSettings-6lJKLhCn.js +1 -0
- package/src/assets/web-panel/assets/{SyncSettings-COd_tgPp.js → SyncSettings-B6D7STlI.js} +2 -2
- package/src/assets/web-panel/assets/{Tasks-CzDCcrik.js → Tasks-Co_FCZAO.js} +1 -1
- package/src/assets/web-panel/assets/{Templates-D-vfxTGA.js → Templates-CnY-9fgz.js} +1 -1
- package/src/assets/web-panel/assets/{Tenant-BlpT_Gxc.js → Tenant-B71yXfZ8.js} +1 -1
- package/src/assets/web-panel/assets/{Terminal-D5rq52Hg.js → Terminal-Dd_P7awo.js} +2 -2
- package/src/assets/web-panel/assets/{TimelineRenderer-DdoMndkK.js → TimelineRenderer-CvIEMyli.js} +1 -1
- package/src/assets/web-panel/assets/{Tokens-BhgBsI6g.js → Tokens-DknFBGOi.js} +1 -1
- package/src/assets/web-panel/assets/{Trigger-DwwzoikZ.js → Trigger-D_4nJONB.js} +1 -1
- package/src/assets/web-panel/assets/{Trust-HkTpzXFb.js → Trust-BNl21fa7.js} +1 -1
- package/src/assets/web-panel/assets/{UkeySign-D9nk6Ehe.js → UkeySign-CFrCI7uK.js} +1 -1
- package/src/assets/web-panel/assets/{VideoEditing-BKk0rfoy.js → VideoEditing-BVfY6JLg.js} +1 -1
- package/src/assets/web-panel/assets/{Wallet-IVWIU_Lq.js → Wallet-Cj9CAK0J.js} +4 -4
- package/src/assets/web-panel/assets/{WebAuthn-CFTCpfsG.js → WebAuthn-DcqZlzA3.js} +4 -4
- package/src/assets/web-panel/assets/{WorkflowEditor-Dnf4Obif.js → WorkflowEditor-Dfr_dMld.js} +1 -1
- package/src/assets/web-panel/assets/{chat-D2snERdj.js → chat-Yv6UF0AD.js} +1 -1
- package/src/assets/web-panel/assets/{colors-DKEjK1N1.js → colors-CDW_-1fs.js} +1 -1
- package/src/assets/web-panel/assets/{compact-item-BEDLwQdt.js → compact-item-BYOQvd-6.js} +1 -1
- package/src/assets/web-panel/assets/{createContext-DA9iW1a0.js → createContext-BCGO0BiP.js} +1 -1
- package/src/assets/web-panel/assets/devWarning-H-kXSuf-.js +1 -0
- package/src/assets/web-panel/assets/{hasIn-5l2xEcY9.js → hasIn-DY-70cfQ.js} +1 -1
- package/src/assets/web-panel/assets/{index-B7_W_rYd.js → index-366wfQBU.js} +1 -1
- package/src/assets/web-panel/assets/index-B0o4MeNK.js +1 -0
- package/src/assets/web-panel/assets/{index-CxEtQYdi.js → index-B9ZogJJM.js} +1 -1
- package/src/assets/web-panel/assets/{index-B00GeekA.js → index-B9m5QAMg.js} +1 -1
- package/src/assets/web-panel/assets/{index-C7sKbM5s.js → index-BBs2mv5M.js} +1 -1
- package/src/assets/web-panel/assets/{index-CX1x4AFn.js → index-BFv1hzF6.js} +1 -1
- package/src/assets/web-panel/assets/index-BVafOL_I.js +1 -0
- package/src/assets/web-panel/assets/{index-DU2TXJu-.js → index-BXlEx4UH.js} +1 -1
- package/src/assets/web-panel/assets/{index-e-e40id6.js → index-BayRTE5w.js} +1 -1
- package/src/assets/web-panel/assets/{index-DXet1xol.js → index-Bb9nyts1.js} +1 -1
- package/src/assets/web-panel/assets/{index-D7z4zB_a.js → index-Bf_Va0S-.js} +1 -1
- package/src/assets/web-panel/assets/{index-fccZmC_h.js → index-Br3wQLVY.js} +1 -1
- package/src/assets/web-panel/assets/{index-Bqc8tdIF.js → index-BvK4fjkk.js} +1 -1
- package/src/assets/web-panel/assets/{index-BO9dQjpt.js → index-C40UdtlS.js} +1 -1
- package/src/assets/web-panel/assets/{index-Csfb-7hw.js → index-C4UJA2ju.js} +1 -1
- package/src/assets/web-panel/assets/{index-Td8ZwyoC.js → index-CB_Iw73G.js} +1 -1
- package/src/assets/web-panel/assets/{index-BZ5lY2zx.js → index-CCwWp3mT.js} +1 -1
- package/src/assets/web-panel/assets/{index-DpqtbXdE.js → index-CFa2fPCk.js} +1 -1
- package/src/assets/web-panel/assets/{index-NJieh3T1.js → index-CIyHxV4u.js} +1 -1
- package/src/assets/web-panel/assets/{index-Dbkghqn_.js → index-CUP-A2_h.js} +1 -1
- package/src/assets/web-panel/assets/{index-DqwPFbOb.js → index-CUo27q9J.js} +3 -3
- package/src/assets/web-panel/assets/{index-B4QYBliR.js → index-CaT8trvf.js} +1 -1
- package/src/assets/web-panel/assets/{index-BgfImyZI.js → index-CnZNbcux.js} +1 -1
- package/src/assets/web-panel/assets/{index-Dbd7eEex.js → index-Cy2NE6AO.js} +1 -1
- package/src/assets/web-panel/assets/{index-CbTPvp2_.js → index-CzeEEazr.js} +1 -1
- package/src/assets/web-panel/assets/{index-5pW4t1iD.js → index-D--TEyDj.js} +1 -1
- package/src/assets/web-panel/assets/{index-Dg2a9owQ.js → index-DCtsjhhT.js} +1 -1
- package/src/assets/web-panel/assets/{index-B_eCoZgW.js → index-DLOf7BSz.js} +1 -1
- package/src/assets/web-panel/assets/{index-7P1b8HZo.js → index-DM5c4pc-.js} +1 -1
- package/src/assets/web-panel/assets/{index-CRPrHE7h.js → index-DRFC2Qt0.js} +1 -1
- package/src/assets/web-panel/assets/{index-Bq5P3piS.js → index-DT_qVaaV.js} +1 -1
- package/src/assets/web-panel/assets/{index-CjWltbi_.js → index-DUDoRk9r.js} +1 -1
- package/src/assets/web-panel/assets/{index-CkMKuqUs.js → index-Dg-AQYDf.js} +1 -1
- package/src/assets/web-panel/assets/{index-DLoalqRX.js → index-DuIPq5MX.js} +1 -1
- package/src/assets/web-panel/assets/{index-CGlotREA.js → index-NYVBUAVN.js} +1 -1
- package/src/assets/web-panel/assets/{index-yYEQXYaU.js → index-NaCESahy.js} +1 -1
- package/src/assets/web-panel/assets/{index-CmruhzFi.js → index-RjIMPG0u.js} +1 -1
- package/src/assets/web-panel/assets/{index-fgYk0QXO.js → index-Y9akzgFO.js} +1 -1
- package/src/assets/web-panel/assets/{index-DvV03Ayk.js → index-hZ0Eyrrw.js} +1 -1
- package/src/assets/web-panel/assets/{initDefaultProps-CPrcB1TC.js → initDefaultProps-CG99CcR4.js} +1 -1
- package/src/assets/web-panel/assets/{motion-BQ7mWRh_.js → motion-Z7MH0_0G.js} +1 -1
- package/src/assets/web-panel/assets/{move-CzOEq99p.js → move-BX67lOdq.js} +1 -1
- package/src/assets/web-panel/assets/{mtc-parser-BlQI5jrw.js → mtc-parser-CmAbG1fE.js} +1 -1
- package/src/assets/web-panel/assets/{omit-DlW4gxmv.js → omit-DiU5tI1_.js} +1 -1
- package/src/assets/web-panel/assets/{pickAttrs-BBYms5nP.js → pickAttrs-BGfvLrYL.js} +1 -1
- package/src/assets/web-panel/assets/{placementArrow-az2MPJ_7.js → placementArrow-CggLEgaJ.js} +1 -1
- package/src/assets/web-panel/assets/{responsiveObserve-D1-ibEol.js → responsiveObserve-t3nlghPZ.js} +1 -1
- package/src/assets/web-panel/assets/{slide-DHGqa4GA.js → slide-BkV4dL9s.js} +1 -1
- package/src/assets/web-panel/assets/{statusUtils-CYGDo6lD.js → statusUtils-qec1PUoC.js} +1 -1
- package/src/assets/web-panel/assets/{styleChecker-Cl2EM9K6.js → styleChecker-ChjX6T8D.js} +1 -1
- package/src/assets/web-panel/assets/{useFlexGapSupport-DdYhzuv1.js → useFlexGapSupport-B1jLoZcM.js} +1 -1
- package/src/assets/web-panel/assets/{useFs-DWumPuBW.js → useFs-C3X53s4E.js} +1 -1
- package/src/assets/web-panel/assets/{usePersonalDataHub-DxAO-Aqi.js → usePersonalDataHub-DOvbbnkZ.js} +1 -1
- package/src/assets/web-panel/assets/{vnode-CplsQf_N.js → vnode-Ie0TEVFT.js} +1 -1
- package/src/assets/web-panel/assets/{zoom-Cw5HXNSG.js → zoom-CRUMVS8l.js} +1 -1
- package/src/assets/web-panel/index.html +1 -1
- package/src/command-help-index.json +3 -3
- package/src/commands/agent.js +18 -1
- package/src/commands/evolution-benchmark.js +72 -0
- package/src/commands/evolution.js +2 -0
- package/src/commands/governed-skill-marketplace.js +142 -0
- package/src/commands/marketplace.js +4 -1
- package/src/commands/serve.js +41 -0
- package/src/commands/skill.js +3 -0
- package/src/data/changelog.json +39 -0
- package/src/gateways/ws/ws-agent-handler.js +59 -2
- package/src/gateways/ws/ws-server.js +2 -0
- package/src/harness/golden-transcript.js +1 -0
- package/src/harness/prompt-compressor.js +51 -5
- package/src/harness/provider-backed-compaction.js +28 -1
- package/src/harness/remote-session-registry.js +15 -3
- package/src/index.js +30 -4
- package/src/lazy-dispatch.js +15 -1
- package/src/lib/advisor-runtime.js +55 -2
- package/src/lib/app-server/cli-agent-kernel-adapter.js +4 -0
- package/src/lib/app-server/graph-runtime.js +32 -0
- package/src/lib/app-server/server.js +45 -1
- package/src/lib/app-server/websocket-transport.js +23 -0
- package/src/lib/autonomous-agent.js +63 -13
- package/src/lib/cowork/ab-comparator-cli.js +4 -3
- package/src/lib/cowork/debate-review-cli.js +4 -3
- package/src/lib/cowork/decision-kb-cli.js +5 -0
- package/src/lib/cowork-adapter.js +38 -16
- package/src/lib/evolution/agent-evolution-ingress.js +95 -15
- package/src/lib/evolution/agent-evolution-runtime-composition.js +82 -0
- package/src/lib/evolution/agent-evolution-session-lifecycle.js +46 -0
- package/src/lib/evolution/agent-model-projection.js +217 -0
- package/src/lib/evolution/bounded-descriptor-read.js +29 -0
- package/src/lib/evolution/controlled-skill-pilot-ledger-adapter.js +551 -0
- package/src/lib/evolution/controlled-skill-production-pilot.js +308 -18
- package/src/lib/evolution/evidence-backed-wiki-maintainer.js +10 -1
- package/src/lib/evolution/evidence-json-text.js +236 -0
- package/src/lib/evolution/evolution-artifact-ports.js +202 -21
- package/src/lib/evolution/evolution-deployment-loader.js +369 -0
- package/src/lib/evolution/evolution-eval-child-evidence-ledger-adapter.js +373 -0
- package/src/lib/evolution/evolution-eval-gate.js +14 -1
- package/src/lib/evolution/evolution-eval-process-supervisor-worker.mjs +14 -0
- package/src/lib/evolution/evolution-eval-process-supervisor.js +607 -0
- package/src/lib/evolution/evolution-evidence-artifact-adapter.js +14 -1
- package/src/lib/evolution/evolution-evidence-projector.js +240 -37
- package/src/lib/evolution/evolution-file-witness.js +153 -30
- package/src/lib/evolution/evolution-ledger-ports.js +1027 -66
- package/src/lib/evolution/evolution-ledger.js +66 -2
- package/src/lib/evolution/evolution-raw-crypto-shred.js +29 -15
- package/src/lib/evolution/evolution-raw-deletion-ledger-adapter.js +865 -0
- package/src/lib/evolution/evolution-release-train-domain-stages.js +769 -0
- package/src/lib/evolution/evolution-release-train-ledger-adapter.js +335 -0
- package/src/lib/evolution/evolution-release-train-stage-output-ledger-adapter.js +333 -0
- package/src/lib/evolution/evolution-release-train.js +586 -0
- package/src/lib/evolution/evolution-workbench-batch-executor.js +101 -144
- package/src/lib/evolution/evolution-workbench-control-ports.js +203 -0
- package/src/lib/evolution/evolution-workbench-file-resources.js +403 -0
- package/src/lib/evolution/evolution-workbench-projection.js +152 -25
- package/src/lib/evolution/evolution-workbench-registry-source.js +482 -0
- package/src/lib/evolution/evolution-workbench-review-ledger-adapter.js +823 -0
- package/src/lib/evolution/evolution-workbench-review-protocol.js +157 -0
- package/src/lib/evolution/evolution-workbench-rollback-authorization.js +57 -0
- package/src/lib/evolution/evolution-workbench-rollback-ledger-adapter.js +1016 -0
- package/src/lib/evolution/evolution-workbench-runtime.js +133 -0
- package/src/lib/evolution/evolution-workbench-version-control.js +70 -36
- package/src/lib/evolution/evolvable-artifact-ledger-adapter.js +736 -0
- package/src/lib/evolution/governed-knowledge-artifact-lifecycle.js +364 -0
- package/src/lib/evolution/governed-knowledge-candidate-rejection.js +343 -0
- package/src/lib/evolution/governed-knowledge-dependency-authority.js +227 -44
- package/src/lib/evolution/governed-knowledge-dependency-ledger-executor.js +95 -83
- package/src/lib/evolution/governed-knowledge-merge-ledger-executor.js +29 -2
- package/src/lib/evolution/governed-knowledge-merge-publisher-authority.js +31 -3
- package/src/lib/evolution/governed-knowledge-record.js +148 -0
- package/src/lib/evolution/governed-knowledge-revocation-record.js +135 -0
- package/src/lib/evolution/governed-knowledge-skill-rollback.js +475 -0
- package/src/lib/evolution/governed-knowledge-sync-ledger-adapter.js +92 -6
- package/src/lib/evolution/governed-knowledge-sync-merge-publisher.js +57 -4
- package/src/lib/evolution/governed-knowledge-sync.js +332 -99
- package/src/lib/evolution/governed-knowledge-wiki-tombstone.js +462 -0
- package/src/lib/evolution/governed-skill-marketplace-badge.js +208 -0
- package/src/lib/evolution/governed-skill-marketplace-candidate.js +330 -0
- package/src/lib/evolution/governed-skill-marketplace-cli-host.js +308 -0
- package/src/lib/evolution/governed-skill-marketplace-ledger-adapter.js +420 -0
- package/src/lib/evolution/governed-skill-marketplace.js +288 -5
- package/src/lib/evolution/governed-wiki-pruning-journal.js +302 -0
- package/src/lib/evolution/governed-wiki-pruning-ledger-adapter.js +459 -0
- package/src/lib/evolution/governed-wiki-pruning-maintenance.js +576 -0
- package/src/lib/evolution/governed-wiki-pruning-plan-authority.js +169 -0
- package/src/lib/evolution/governed-wiki-pruning-raw-shred.js +207 -0
- package/src/lib/evolution/governed-wiki-pruning-retrieval.js +587 -0
- package/src/lib/evolution/governed-wiki-pruning-runtime.js +153 -0
- package/src/lib/evolution/governed-wiki-pruning-skill-rollback.js +360 -0
- package/src/lib/evolution/governed-wiki-pruning.js +322 -143
- package/src/lib/evolution/independent-skill-revocation-source.js +231 -0
- package/src/lib/evolution/knowledge-wiki-source-admission.js +124 -0
- package/src/lib/evolution/knowledge-wiki-source-provenance.js +359 -0
- package/src/lib/evolution/progressive-canary-external-watchdog.js +578 -0
- package/src/lib/evolution/progressive-canary-traffic-worker.js +628 -0
- package/src/lib/evolution/progressive-canary-watchdog-file-store.js +285 -0
- package/src/lib/evolution/progressive-canary-watchdog-node-pki.js +265 -0
- package/src/lib/evolution/skill-candidate-registry.js +22 -0
- package/src/lib/evolution/skill-promotion-controller.js +25 -0
- package/src/lib/evolution/skill-promotion-review-ledger-adapter.js +100 -0
- package/src/lib/evolution/skill-registry-transition-ledger-adapter.js +131 -2
- package/src/lib/evolution/skill-release-registry.js +25 -4
- package/src/lib/evolution/skill-retrieval-revocation-authority.js +361 -0
- package/src/lib/evolution/skill-retrieval-revocation-ledger-adapter.js +346 -0
- package/src/lib/evolution/skill-revocation-propagation.js +467 -0
- package/src/lib/evolution/skill-target-matrix-eval.js +162 -11
- package/src/lib/evolution/skill-wiki-reconciliation.js +985 -0
- package/src/lib/evolution/skill-writer-inventory-manifest.js +15 -12
- package/src/lib/evolution/statistical-progressive-canary.js +845 -0
- package/src/lib/evolution/structured-memory-agent-control-plane.js +120 -0
- package/src/lib/evolution/structured-memory-authority-ledger-adapter.js +5 -1
- package/src/lib/evolution/structured-memory-promotion-receipt-writer.js +126 -0
- package/src/lib/evolution/wiki-informed-skill-proposer.js +127 -21
- package/src/lib/evolution/wiki-maintainer-ledger-adapter.js +760 -100
- package/src/lib/evolution/wiki-revision-protocol.js +120 -0
- package/src/lib/evolution/wiki-skill-proposal-ledger-adapter.js +307 -0
- package/src/lib/evolution/wiki-target-tombstone-revision.js +101 -0
- package/src/lib/evolution/wikiskill-benchmark-cli-host.js +178 -0
- package/src/lib/evolution/wikiskill-benchmark-execution-host.js +702 -0
- package/src/lib/evolution/wikiskill-benchmark-ledger-adapter.js +613 -0
- package/src/lib/evolution/wikiskill-benchmark.js +574 -0
- package/src/lib/goal-assess.js +17 -10
- package/src/lib/interactive-planner.js +9 -1
- package/src/lib/iteration-budget.js +16 -2
- package/src/lib/micro-compact.js +4 -1
- package/src/lib/model-failure-policy.js +21 -0
- package/src/lib/process-execution-broker/index.js +1 -0
- package/src/lib/process-execution-broker/windows-sandbox-helper.dll +0 -0
- package/src/lib/process-execution-broker/windows-sandbox-helper.exe +0 -0
- package/src/lib/process-execution-broker/windows-sandbox.cs +33 -15
- package/src/lib/read-file-page.js +191 -0
- package/src/lib/runnable-provider.js +2 -1
- package/src/lib/session-host-lease.js +11 -16
- package/src/lib/skill-retrieval-router.js +22 -1
- package/src/repl/agent-repl.js +127 -33
- package/src/runtime/agent-core.js +224 -80
- package/src/runtime/agent-runtime.js +43 -0
- package/src/runtime/coding-agent-contract-shared.cjs +7 -1
- package/src/runtime/fallback-model.js +143 -62
- package/src/runtime/headless-runner.js +54 -10
- package/src/runtime/headless-stream.js +53 -6
- package/src/runtime/runtime-factory.js +41 -2
- package/src/assets/web-panel/assets/Notes-CgU9DDo9.js +0 -7
- package/src/assets/web-panel/assets/OrderTableRenderer-CwHc15Zs.js +0 -1
- package/src/assets/web-panel/assets/Projects-FF_thRi6.js +0 -1
- package/src/assets/web-panel/assets/SpeechSettings-l7ox6KuX.js +0 -1
- package/src/assets/web-panel/assets/devWarning-DyhgpXPf.js +0 -1
- package/src/assets/web-panel/assets/index-Ck1jhFE0.js +0 -1
- package/src/assets/web-panel/assets/index-c8jJEHVs.js +0 -1
|
@@ -12,6 +12,7 @@ import { CostBudget } from "./cost-budget.js";
|
|
|
12
12
|
import { FREE_PROVIDERS, mergePricing } from "./llm-pricing.js";
|
|
13
13
|
import { redactSecrets } from "./secret-scan.js";
|
|
14
14
|
import { firstBalancedJson } from "./json-schema-output.js";
|
|
15
|
+
import { captureAgentEvolutionIngress } from "./evolution/agent-evolution-ingress.js";
|
|
15
16
|
|
|
16
17
|
export const ADVISOR_TRIGGERS = Object.freeze({
|
|
17
18
|
MANUAL: "manual",
|
|
@@ -609,7 +610,12 @@ export async function invokeToolFreeAdvisor({
|
|
|
609
610
|
apiKey,
|
|
610
611
|
maxTokens = DEFAULT_ADVISOR_MAX_TOKENS,
|
|
611
612
|
signal,
|
|
613
|
+
evolutionIngress = null,
|
|
612
614
|
} = {}) {
|
|
615
|
+
const ingress =
|
|
616
|
+
evolutionIngress == null
|
|
617
|
+
? null
|
|
618
|
+
: captureAgentEvolutionIngress(evolutionIngress);
|
|
613
619
|
const { chatWithTools } = await import("../runtime/agent-core.js");
|
|
614
620
|
let resolvedBaseUrl = baseUrl;
|
|
615
621
|
if (!resolvedBaseUrl) {
|
|
@@ -625,6 +631,7 @@ export async function invokeToolFreeAdvisor({
|
|
|
625
631
|
resolvedBaseUrl = "http://localhost:11434";
|
|
626
632
|
}
|
|
627
633
|
return chatWithTools(messages, {
|
|
634
|
+
...(ingress === null ? {} : { evolutionIngress: ingress }),
|
|
628
635
|
provider,
|
|
629
636
|
model,
|
|
630
637
|
baseUrl: resolvedBaseUrl,
|
|
@@ -640,6 +647,9 @@ export async function invokeToolFreeAdvisor({
|
|
|
640
647
|
}
|
|
641
648
|
|
|
642
649
|
export class AdvisorRuntime {
|
|
650
|
+
#evolutionIngress;
|
|
651
|
+
#callWrapper;
|
|
652
|
+
|
|
643
653
|
constructor({
|
|
644
654
|
config,
|
|
645
655
|
managed,
|
|
@@ -649,11 +659,28 @@ export class AdvisorRuntime {
|
|
|
649
659
|
baseUrl = null,
|
|
650
660
|
apiKey = null,
|
|
651
661
|
invoke = invokeToolFreeAdvisor,
|
|
662
|
+
evolutionIngress = null,
|
|
663
|
+
callWrapper = null,
|
|
652
664
|
onEvent = null,
|
|
653
665
|
priceTable = null,
|
|
654
666
|
now = () => Date.now(),
|
|
655
667
|
id = () => randomUUID(),
|
|
656
668
|
} = {}) {
|
|
669
|
+
this.#evolutionIngress =
|
|
670
|
+
evolutionIngress == null
|
|
671
|
+
? null
|
|
672
|
+
: captureAgentEvolutionIngress(evolutionIngress);
|
|
673
|
+
if (this.#evolutionIngress !== null && invoke !== invokeToolFreeAdvisor) {
|
|
674
|
+
throw Object.assign(
|
|
675
|
+
new TypeError(
|
|
676
|
+
"Evolution Advisor requires the canonical model transport",
|
|
677
|
+
),
|
|
678
|
+
{ code: "CC_AGENT_EVOLUTION_INGRESS_FAILED" },
|
|
679
|
+
);
|
|
680
|
+
}
|
|
681
|
+
if (callWrapper !== null && typeof callWrapper !== "function")
|
|
682
|
+
throw new TypeError("Advisor callWrapper must be a function");
|
|
683
|
+
this.#callWrapper = callWrapper;
|
|
657
684
|
this.config = resolveAdvisorConfig({
|
|
658
685
|
config,
|
|
659
686
|
managed,
|
|
@@ -837,7 +864,7 @@ export class AdvisorRuntime {
|
|
|
837
864
|
toolCount: 0,
|
|
838
865
|
});
|
|
839
866
|
try {
|
|
840
|
-
const
|
|
867
|
+
const request = {
|
|
841
868
|
messages: requestMessages,
|
|
842
869
|
provider: this.config.provider,
|
|
843
870
|
model: this.config.model,
|
|
@@ -846,7 +873,28 @@ export class AdvisorRuntime {
|
|
|
846
873
|
maxTokens: this.config.maxTokens,
|
|
847
874
|
signal,
|
|
848
875
|
enabledToolNames: [],
|
|
849
|
-
|
|
876
|
+
...(this.#evolutionIngress === null
|
|
877
|
+
? {}
|
|
878
|
+
: { evolutionIngress: this.#evolutionIngress }),
|
|
879
|
+
};
|
|
880
|
+
const invoke =
|
|
881
|
+
this.#evolutionIngress === null ? this.invoke : invokeToolFreeAdvisor;
|
|
882
|
+
const invokeCall = ({ signal: hostSignal = signal } = {}) =>
|
|
883
|
+
invoke({
|
|
884
|
+
...request,
|
|
885
|
+
signal:
|
|
886
|
+
hostSignal && signal && hostSignal !== signal
|
|
887
|
+
? AbortSignal.any([signal, hostSignal])
|
|
888
|
+
: hostSignal || signal,
|
|
889
|
+
});
|
|
890
|
+
const rawResult =
|
|
891
|
+
this.#callWrapper === null
|
|
892
|
+
? await invokeCall()
|
|
893
|
+
: await this.#callWrapper({
|
|
894
|
+
call: invokeCall,
|
|
895
|
+
provider: request.provider,
|
|
896
|
+
model: request.model,
|
|
897
|
+
});
|
|
850
898
|
const rawText = resultText(rawResult);
|
|
851
899
|
const advice = parseAdvisorAdvice(rawText);
|
|
852
900
|
const usage = usageFrom(rawResult, requestMessages, rawText);
|
|
@@ -889,6 +937,7 @@ export class AdvisorRuntime {
|
|
|
889
937
|
};
|
|
890
938
|
} catch (error) {
|
|
891
939
|
if (error?.runtimeLedgerPersistence === true) throw error;
|
|
940
|
+
if (error?.code === "CC_AGENT_EVOLUTION_INGRESS_FAILED") throw error;
|
|
892
941
|
const failure = {
|
|
893
942
|
callId,
|
|
894
943
|
trigger,
|
|
@@ -1019,6 +1068,8 @@ export async function createConfiguredAdvisorRuntime({
|
|
|
1019
1068
|
overrides = {},
|
|
1020
1069
|
onEvent = null,
|
|
1021
1070
|
invoke = invokeToolFreeAdvisor,
|
|
1071
|
+
evolutionIngress = null,
|
|
1072
|
+
callWrapper = null,
|
|
1022
1073
|
now,
|
|
1023
1074
|
id,
|
|
1024
1075
|
} = {}) {
|
|
@@ -1037,6 +1088,8 @@ export async function createConfiguredAdvisorRuntime({
|
|
|
1037
1088
|
baseUrl,
|
|
1038
1089
|
apiKey,
|
|
1039
1090
|
invoke,
|
|
1091
|
+
evolutionIngress,
|
|
1092
|
+
callWrapper,
|
|
1040
1093
|
onEvent,
|
|
1041
1094
|
priceTable: mergePricing(config?.llm?.pricing),
|
|
1042
1095
|
now,
|
|
@@ -208,6 +208,10 @@ export class CliAgentKernelAdapter {
|
|
|
208
208
|
turnOptions.skillVectorAuthority ??
|
|
209
209
|
this.sessionOptions.skillVectorAuthority ??
|
|
210
210
|
null,
|
|
211
|
+
skillRetrievalRevocationReader:
|
|
212
|
+
turnOptions.skillRetrievalRevocationReader ??
|
|
213
|
+
this.sessionOptions.skillRetrievalRevocationReader ??
|
|
214
|
+
null,
|
|
211
215
|
},
|
|
212
216
|
{
|
|
213
217
|
...this.dependencies,
|
|
@@ -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,
|
|
@@ -10,6 +10,8 @@ import { WebSocketServer } from "ws";
|
|
|
10
10
|
import { BoundedAsyncQueue, QueueOverloadedError } from "./bounded-queue.js";
|
|
11
11
|
import { CcAppServer } from "./server.js";
|
|
12
12
|
import { JSON_RPC_ERROR, JsonRpcError, rpcError } from "./protocol.js";
|
|
13
|
+
import { isEvolutionWorkbenchCliHost } from "../evolution/evolution-workbench-cli-host.js";
|
|
14
|
+
import { isGovernedKnowledgeReviewHost } from "../evolution/governed-knowledge-review-host.js";
|
|
13
15
|
|
|
14
16
|
export const APP_SERVER_WEBSOCKET_PROTOCOL =
|
|
15
17
|
"chainlesschain.app-server.experimental.v1";
|
|
@@ -250,6 +252,22 @@ export class WebSocketConnectionTransport extends EventEmitter {
|
|
|
250
252
|
export class WebSocketAppServerHost extends EventEmitter {
|
|
251
253
|
constructor(options = {}) {
|
|
252
254
|
super();
|
|
255
|
+
if (
|
|
256
|
+
options.evolutionWorkbenchHost != null &&
|
|
257
|
+
!isEvolutionWorkbenchCliHost(options.evolutionWorkbenchHost)
|
|
258
|
+
) {
|
|
259
|
+
throw new TypeError(
|
|
260
|
+
"WebSocket App Server evolutionWorkbenchHost must be a branded Workbench host",
|
|
261
|
+
);
|
|
262
|
+
}
|
|
263
|
+
if (
|
|
264
|
+
options.governedKnowledgeReviewHost != null &&
|
|
265
|
+
!isGovernedKnowledgeReviewHost(options.governedKnowledgeReviewHost)
|
|
266
|
+
) {
|
|
267
|
+
throw new TypeError(
|
|
268
|
+
"WebSocket App Server governedKnowledgeReviewHost must be a branded review host",
|
|
269
|
+
);
|
|
270
|
+
}
|
|
253
271
|
this.options = options;
|
|
254
272
|
this.binding = validateWebSocketAppServerOptions(options);
|
|
255
273
|
this.port = boundedInteger(options.port, 18800, 0, 65_535);
|
|
@@ -400,6 +418,11 @@ export class WebSocketAppServerHost extends EventEmitter {
|
|
|
400
418
|
this.options.evolutionCompositionFactory ?? null,
|
|
401
419
|
skillOutcomeIndex: this.options.skillOutcomeIndex ?? null,
|
|
402
420
|
skillVectorAuthority: this.options.skillVectorAuthority ?? null,
|
|
421
|
+
skillRetrievalRevocationReader:
|
|
422
|
+
this.options.skillRetrievalRevocationReader ?? null,
|
|
423
|
+
evolutionWorkbenchHost: this.options.evolutionWorkbenchHost ?? null,
|
|
424
|
+
governedKnowledgeReviewHost:
|
|
425
|
+
this.options.governedKnowledgeReviewHost ?? null,
|
|
403
426
|
transport: "websocket",
|
|
404
427
|
maxQueuedRequests: this.options.maxQueuedRequests,
|
|
405
428
|
maxQueuedRequestBytes: this.options.maxQueuedRequestBytes,
|
|
@@ -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}`,
|