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.
Files changed (301) hide show
  1. package/README.md +67 -9
  2. package/package.json +4 -3
  3. package/src/assets/web-panel/assets/{AIOps-BjMnsUci.js → AIOps-DR-MWcZc.js} +1 -1
  4. package/src/assets/web-panel/assets/{ActionButton-DdYFP03A.js → ActionButton-DT8B7sEb.js} +1 -1
  5. package/src/assets/web-panel/assets/{Analytics-Bb8TuuK_.js → Analytics-asjh3dQJ.js} +3 -3
  6. package/src/assets/web-panel/assets/{AppLayout-Kn3TIOtk.js → AppLayout-DivQ491i.js} +5 -5
  7. package/src/assets/web-panel/assets/{Artifacts-4IxpqI_b.js → Artifacts-DPH2uUmy.js} +1 -1
  8. package/src/assets/web-panel/assets/{Audit-BOV2caqU.js → Audit-Bp2nLyc-.js} +1 -1
  9. package/src/assets/web-panel/assets/{BackgroundAgents-B86k-ay4.js → BackgroundAgents-CHS28khl.js} +1 -1
  10. package/src/assets/web-panel/assets/{Backup-C5_ie1e3.js → Backup-CKeaFSfz.js} +1 -1
  11. package/src/assets/web-panel/assets/{BaseInput-xpwg6QCW.js → BaseInput-CxwM9BAH.js} +1 -1
  12. package/src/assets/web-panel/assets/{Chat-CVZOcZau.js → Chat-DYLDwaCv.js} +4 -4
  13. package/src/assets/web-panel/assets/{ChatBubbleRenderer-D8fPYhUu.js → ChatBubbleRenderer-DdBJDBP0.js} +1 -1
  14. package/src/assets/web-panel/assets/{Checkbox-MKTq3zdP.js → Checkbox-uYTWOB8j.js} +1 -1
  15. package/src/assets/web-panel/assets/{Codegen-JUk3wzep.js → Codegen-CvYa_dwT.js} +1 -1
  16. package/src/assets/web-panel/assets/{Col-JPvTA0kC.js → Col-CanMAX4m.js} +1 -1
  17. package/src/assets/web-panel/assets/{Community-Tqgl87NQ.js → Community-B4WaDtHw.js} +1 -1
  18. package/src/assets/web-panel/assets/{Compact-BuAFYBmN.js → Compact-K93Uof_3.js} +1 -1
  19. package/src/assets/web-panel/assets/{Compliance-CXS9WIPZ.js → Compliance-CKeDLgUW.js} +1 -1
  20. package/src/assets/web-panel/assets/{Cowork-Ds2bFHrr.js → Cowork-P93grAeB.js} +3 -3
  21. package/src/assets/web-panel/assets/{Cron-C_dV_OeW.js → Cron-BSHnMtDn.js} +2 -2
  22. package/src/assets/web-panel/assets/{Crosschain-BsO6tIRo.js → Crosschain-epAOpUVJ.js} +1 -1
  23. package/src/assets/web-panel/assets/{DID-rNOFqBac.js → DID-ByjXfP7t.js} +2 -2
  24. package/src/assets/web-panel/assets/{Dashboard-C2fcKKVY.js → Dashboard-QztTU8tb.js} +2 -2
  25. package/src/assets/web-panel/assets/{Dropdown-Y7Ndr0X_.js → Dropdown-DhUc9yhN.js} +1 -1
  26. package/src/assets/web-panel/assets/{EmailListRenderer-DcP_uPmL.js → EmailListRenderer-C2sLhJJN.js} +1 -1
  27. package/src/assets/web-panel/assets/{FamilyGuardDashboard-Cwn3gDzk.js → FamilyGuardDashboard-CdfbWNDn.js} +1 -1
  28. package/src/assets/web-panel/assets/{Federation-ClQuOsqb.js → Federation-CcF_R7NW.js} +1 -1
  29. package/src/assets/web-panel/assets/{FormItemContext-DfwtmlcK.js → FormItemContext-Cm_X2IBk.js} +1 -1
  30. package/src/assets/web-panel/assets/{GenericCardRenderer-zNZhtbC5.js → GenericCardRenderer-DUi4NWlb.js} +1 -1
  31. package/src/assets/web-panel/assets/{Git-BZmdW-G5.js → Git-4Sq5FjBt.js} +2 -2
  32. package/src/assets/web-panel/assets/{Governance-CqBk4lEn.js → Governance-Dx2_v4V6.js} +1 -1
  33. package/src/assets/web-panel/assets/{Inference-Dbmt3ZXk.js → Inference-7Vr1xekR.js} +1 -1
  34. package/src/assets/web-panel/assets/{KnowledgeGraph-hMTH6qf3.js → KnowledgeGraph-Cnd2XOzf.js} +1 -1
  35. package/src/assets/web-panel/assets/{Logs-CkiYgiW2.js → Logs-B66QPVf-.js} +2 -2
  36. package/src/assets/web-panel/assets/{MarkdownRenderer-BL1FElXg.js → MarkdownRenderer-PLsEvhly.js} +1 -1
  37. package/src/assets/web-panel/assets/{Marketplace-CbB6wfin.js → Marketplace-BMIK9BmC.js} +1 -1
  38. package/src/assets/web-panel/assets/{McpTools-BSwiFtte.js → McpTools-BDbyp3J_.js} +3 -3
  39. package/src/assets/web-panel/assets/{Memory-B03PeHrz.js → Memory-CJdzfZGi.js} +2 -2
  40. package/src/assets/web-panel/assets/{MobileBridge-CRGrnd-X.js → MobileBridge-C2TH5Y3-.js} +1 -1
  41. package/src/assets/web-panel/assets/{MobileProjects-CE_5v2kO.js → MobileProjects-D1dYXkvV.js} +1 -1
  42. package/src/assets/web-panel/assets/{Mtc-Dp11QVx1.js → Mtc-B-4A1I1j.js} +4 -4
  43. package/src/assets/web-panel/assets/{MtcAudit-CYu-3JBu.js → MtcAudit-Bgcc9UOl.js} +5 -5
  44. package/src/assets/web-panel/assets/{Multisig-CGyJ0Xl3.js → Multisig-DqOe-etP.js} +3 -3
  45. package/src/assets/web-panel/assets/{NLProgramming-CoWi_ov1.js → NLProgramming-7VnhzE_6.js} +1 -1
  46. package/src/assets/web-panel/assets/Notes-BxawpeUQ.js +7 -0
  47. package/src/assets/web-panel/assets/{NotificationSettings-DX4I2b4W.js → NotificationSettings-Cr08G2aE.js} +1 -1
  48. package/src/assets/web-panel/assets/OrderTableRenderer-Ce8bEGlK.js +1 -0
  49. package/src/assets/web-panel/assets/{Organization-oopLO_tk.js → Organization-BC7lveGv.js} +4 -4
  50. package/src/assets/web-panel/assets/{Overflow-BFVvjMyf.js → Overflow-CakOW-G0.js} +1 -1
  51. package/src/assets/web-panel/assets/{P2P-CBy5t-Tk.js → P2P-Cf8CaOBZ.js} +2 -2
  52. package/src/assets/web-panel/assets/{PdhVaultBrowser--YWJNsu6.js → PdhVaultBrowser-Dc7b98W9.js} +3 -3
  53. package/src/assets/web-panel/assets/{Permissions-C2dZ8scb.js → Permissions-DGJyMEfS.js} +4 -4
  54. package/src/assets/web-panel/assets/{PersonalDataHub-Bs3l7Hlx.js → PersonalDataHub-DNIwSdwu.js} +6 -6
  55. package/src/assets/web-panel/assets/{Pipeline-DEBWbZuD.js → Pipeline-5B1S12wa.js} +1 -1
  56. package/src/assets/web-panel/assets/{Privacy-CjHBb6NU.js → Privacy-CMB6Ke5t.js} +1 -1
  57. package/src/assets/web-panel/assets/{ProjectInit-D2WipUz5.js → ProjectInit-D5PqTFiT.js} +2 -2
  58. package/src/assets/web-panel/assets/{ProjectSettings-B6WfnrGB.js → ProjectSettings-CbKNdSjV.js} +2 -2
  59. package/src/assets/web-panel/assets/Projects-ccXaHzYL.js +1 -0
  60. package/src/assets/web-panel/assets/{Providers-CCv5M_Dv.js → Providers-CJF5_-Gs.js} +1 -1
  61. package/src/assets/web-panel/assets/{QrScannerModal-CGthxU54.js → QrScannerModal-CT6iEAdi.js} +1 -1
  62. package/src/assets/web-panel/assets/{QuickAsk-CnPmXPFb.js → QuickAsk-Ci0h9mJ_.js} +1 -1
  63. package/src/assets/web-panel/assets/{Recommend-Df_tGEa9.js → Recommend-Da5mobZu.js} +1 -1
  64. package/src/assets/web-panel/assets/{RemoteSession-Z58N0Loe.js → RemoteSession-BaCY8eey.js} +2 -2
  65. package/src/assets/web-panel/assets/{Reputation-CZTBQ2Vt.js → Reputation-CaITfTsI.js} +1 -1
  66. package/src/assets/web-panel/assets/{Row-CdK3YpCQ.js → Row-DtUDamyP.js} +1 -1
  67. package/src/assets/web-panel/assets/{RssFeed-CFMVT5sb.js → RssFeed-DX27gFpg.js} +3 -3
  68. package/src/assets/web-panel/assets/{Search-DrF8RIvD.js → Search-DFL69osN.js} +1 -1
  69. package/src/assets/web-panel/assets/{Security-Ddk2f2DM.js → Security-BqGeoWv-.js} +3 -3
  70. package/src/assets/web-panel/assets/{Services-CCuK-VOo.js → Services-3z1WnEAc.js} +2 -2
  71. package/src/assets/web-panel/assets/{Skeleton-DxCpHzeM.js → Skeleton-C_OJQQ9Z.js} +1 -1
  72. package/src/assets/web-panel/assets/{Skills-t2oTDgcv.js → Skills-BY7aT6Mo.js} +1 -1
  73. package/src/assets/web-panel/assets/{Sla-Df63M9_R.js → Sla-BZv7DSaD.js} +1 -1
  74. package/src/assets/web-panel/assets/SpeechSettings-6lJKLhCn.js +1 -0
  75. package/src/assets/web-panel/assets/{SyncSettings-COd_tgPp.js → SyncSettings-B6D7STlI.js} +2 -2
  76. package/src/assets/web-panel/assets/{Tasks-CzDCcrik.js → Tasks-Co_FCZAO.js} +1 -1
  77. package/src/assets/web-panel/assets/{Templates-D-vfxTGA.js → Templates-CnY-9fgz.js} +1 -1
  78. package/src/assets/web-panel/assets/{Tenant-BlpT_Gxc.js → Tenant-B71yXfZ8.js} +1 -1
  79. package/src/assets/web-panel/assets/{Terminal-D5rq52Hg.js → Terminal-Dd_P7awo.js} +2 -2
  80. package/src/assets/web-panel/assets/{TimelineRenderer-DdoMndkK.js → TimelineRenderer-CvIEMyli.js} +1 -1
  81. package/src/assets/web-panel/assets/{Tokens-BhgBsI6g.js → Tokens-DknFBGOi.js} +1 -1
  82. package/src/assets/web-panel/assets/{Trigger-DwwzoikZ.js → Trigger-D_4nJONB.js} +1 -1
  83. package/src/assets/web-panel/assets/{Trust-HkTpzXFb.js → Trust-BNl21fa7.js} +1 -1
  84. package/src/assets/web-panel/assets/{UkeySign-D9nk6Ehe.js → UkeySign-CFrCI7uK.js} +1 -1
  85. package/src/assets/web-panel/assets/{VideoEditing-BKk0rfoy.js → VideoEditing-BVfY6JLg.js} +1 -1
  86. package/src/assets/web-panel/assets/{Wallet-IVWIU_Lq.js → Wallet-Cj9CAK0J.js} +4 -4
  87. package/src/assets/web-panel/assets/{WebAuthn-CFTCpfsG.js → WebAuthn-DcqZlzA3.js} +4 -4
  88. package/src/assets/web-panel/assets/{WorkflowEditor-Dnf4Obif.js → WorkflowEditor-Dfr_dMld.js} +1 -1
  89. package/src/assets/web-panel/assets/{chat-D2snERdj.js → chat-Yv6UF0AD.js} +1 -1
  90. package/src/assets/web-panel/assets/{colors-DKEjK1N1.js → colors-CDW_-1fs.js} +1 -1
  91. package/src/assets/web-panel/assets/{compact-item-BEDLwQdt.js → compact-item-BYOQvd-6.js} +1 -1
  92. package/src/assets/web-panel/assets/{createContext-DA9iW1a0.js → createContext-BCGO0BiP.js} +1 -1
  93. package/src/assets/web-panel/assets/devWarning-H-kXSuf-.js +1 -0
  94. package/src/assets/web-panel/assets/{hasIn-5l2xEcY9.js → hasIn-DY-70cfQ.js} +1 -1
  95. package/src/assets/web-panel/assets/{index-B7_W_rYd.js → index-366wfQBU.js} +1 -1
  96. package/src/assets/web-panel/assets/index-B0o4MeNK.js +1 -0
  97. package/src/assets/web-panel/assets/{index-CxEtQYdi.js → index-B9ZogJJM.js} +1 -1
  98. package/src/assets/web-panel/assets/{index-B00GeekA.js → index-B9m5QAMg.js} +1 -1
  99. package/src/assets/web-panel/assets/{index-C7sKbM5s.js → index-BBs2mv5M.js} +1 -1
  100. package/src/assets/web-panel/assets/{index-CX1x4AFn.js → index-BFv1hzF6.js} +1 -1
  101. package/src/assets/web-panel/assets/index-BVafOL_I.js +1 -0
  102. package/src/assets/web-panel/assets/{index-DU2TXJu-.js → index-BXlEx4UH.js} +1 -1
  103. package/src/assets/web-panel/assets/{index-e-e40id6.js → index-BayRTE5w.js} +1 -1
  104. package/src/assets/web-panel/assets/{index-DXet1xol.js → index-Bb9nyts1.js} +1 -1
  105. package/src/assets/web-panel/assets/{index-D7z4zB_a.js → index-Bf_Va0S-.js} +1 -1
  106. package/src/assets/web-panel/assets/{index-fccZmC_h.js → index-Br3wQLVY.js} +1 -1
  107. package/src/assets/web-panel/assets/{index-Bqc8tdIF.js → index-BvK4fjkk.js} +1 -1
  108. package/src/assets/web-panel/assets/{index-BO9dQjpt.js → index-C40UdtlS.js} +1 -1
  109. package/src/assets/web-panel/assets/{index-Csfb-7hw.js → index-C4UJA2ju.js} +1 -1
  110. package/src/assets/web-panel/assets/{index-Td8ZwyoC.js → index-CB_Iw73G.js} +1 -1
  111. package/src/assets/web-panel/assets/{index-BZ5lY2zx.js → index-CCwWp3mT.js} +1 -1
  112. package/src/assets/web-panel/assets/{index-DpqtbXdE.js → index-CFa2fPCk.js} +1 -1
  113. package/src/assets/web-panel/assets/{index-NJieh3T1.js → index-CIyHxV4u.js} +1 -1
  114. package/src/assets/web-panel/assets/{index-Dbkghqn_.js → index-CUP-A2_h.js} +1 -1
  115. package/src/assets/web-panel/assets/{index-DqwPFbOb.js → index-CUo27q9J.js} +3 -3
  116. package/src/assets/web-panel/assets/{index-B4QYBliR.js → index-CaT8trvf.js} +1 -1
  117. package/src/assets/web-panel/assets/{index-BgfImyZI.js → index-CnZNbcux.js} +1 -1
  118. package/src/assets/web-panel/assets/{index-Dbd7eEex.js → index-Cy2NE6AO.js} +1 -1
  119. package/src/assets/web-panel/assets/{index-CbTPvp2_.js → index-CzeEEazr.js} +1 -1
  120. package/src/assets/web-panel/assets/{index-5pW4t1iD.js → index-D--TEyDj.js} +1 -1
  121. package/src/assets/web-panel/assets/{index-Dg2a9owQ.js → index-DCtsjhhT.js} +1 -1
  122. package/src/assets/web-panel/assets/{index-B_eCoZgW.js → index-DLOf7BSz.js} +1 -1
  123. package/src/assets/web-panel/assets/{index-7P1b8HZo.js → index-DM5c4pc-.js} +1 -1
  124. package/src/assets/web-panel/assets/{index-CRPrHE7h.js → index-DRFC2Qt0.js} +1 -1
  125. package/src/assets/web-panel/assets/{index-Bq5P3piS.js → index-DT_qVaaV.js} +1 -1
  126. package/src/assets/web-panel/assets/{index-CjWltbi_.js → index-DUDoRk9r.js} +1 -1
  127. package/src/assets/web-panel/assets/{index-CkMKuqUs.js → index-Dg-AQYDf.js} +1 -1
  128. package/src/assets/web-panel/assets/{index-DLoalqRX.js → index-DuIPq5MX.js} +1 -1
  129. package/src/assets/web-panel/assets/{index-CGlotREA.js → index-NYVBUAVN.js} +1 -1
  130. package/src/assets/web-panel/assets/{index-yYEQXYaU.js → index-NaCESahy.js} +1 -1
  131. package/src/assets/web-panel/assets/{index-CmruhzFi.js → index-RjIMPG0u.js} +1 -1
  132. package/src/assets/web-panel/assets/{index-fgYk0QXO.js → index-Y9akzgFO.js} +1 -1
  133. package/src/assets/web-panel/assets/{index-DvV03Ayk.js → index-hZ0Eyrrw.js} +1 -1
  134. package/src/assets/web-panel/assets/{initDefaultProps-CPrcB1TC.js → initDefaultProps-CG99CcR4.js} +1 -1
  135. package/src/assets/web-panel/assets/{motion-BQ7mWRh_.js → motion-Z7MH0_0G.js} +1 -1
  136. package/src/assets/web-panel/assets/{move-CzOEq99p.js → move-BX67lOdq.js} +1 -1
  137. package/src/assets/web-panel/assets/{mtc-parser-BlQI5jrw.js → mtc-parser-CmAbG1fE.js} +1 -1
  138. package/src/assets/web-panel/assets/{omit-DlW4gxmv.js → omit-DiU5tI1_.js} +1 -1
  139. package/src/assets/web-panel/assets/{pickAttrs-BBYms5nP.js → pickAttrs-BGfvLrYL.js} +1 -1
  140. package/src/assets/web-panel/assets/{placementArrow-az2MPJ_7.js → placementArrow-CggLEgaJ.js} +1 -1
  141. package/src/assets/web-panel/assets/{responsiveObserve-D1-ibEol.js → responsiveObserve-t3nlghPZ.js} +1 -1
  142. package/src/assets/web-panel/assets/{slide-DHGqa4GA.js → slide-BkV4dL9s.js} +1 -1
  143. package/src/assets/web-panel/assets/{statusUtils-CYGDo6lD.js → statusUtils-qec1PUoC.js} +1 -1
  144. package/src/assets/web-panel/assets/{styleChecker-Cl2EM9K6.js → styleChecker-ChjX6T8D.js} +1 -1
  145. package/src/assets/web-panel/assets/{useFlexGapSupport-DdYhzuv1.js → useFlexGapSupport-B1jLoZcM.js} +1 -1
  146. package/src/assets/web-panel/assets/{useFs-DWumPuBW.js → useFs-C3X53s4E.js} +1 -1
  147. package/src/assets/web-panel/assets/{usePersonalDataHub-DxAO-Aqi.js → usePersonalDataHub-DOvbbnkZ.js} +1 -1
  148. package/src/assets/web-panel/assets/{vnode-CplsQf_N.js → vnode-Ie0TEVFT.js} +1 -1
  149. package/src/assets/web-panel/assets/{zoom-Cw5HXNSG.js → zoom-CRUMVS8l.js} +1 -1
  150. package/src/assets/web-panel/index.html +1 -1
  151. package/src/command-help-index.json +3 -3
  152. package/src/commands/agent.js +18 -1
  153. package/src/commands/evolution-benchmark.js +72 -0
  154. package/src/commands/evolution.js +2 -0
  155. package/src/commands/governed-skill-marketplace.js +142 -0
  156. package/src/commands/marketplace.js +4 -1
  157. package/src/commands/serve.js +41 -0
  158. package/src/commands/skill.js +3 -0
  159. package/src/data/changelog.json +39 -0
  160. package/src/gateways/ws/ws-agent-handler.js +59 -2
  161. package/src/gateways/ws/ws-server.js +2 -0
  162. package/src/harness/golden-transcript.js +1 -0
  163. package/src/harness/prompt-compressor.js +51 -5
  164. package/src/harness/provider-backed-compaction.js +28 -1
  165. package/src/harness/remote-session-registry.js +15 -3
  166. package/src/index.js +30 -4
  167. package/src/lazy-dispatch.js +15 -1
  168. package/src/lib/advisor-runtime.js +55 -2
  169. package/src/lib/app-server/cli-agent-kernel-adapter.js +4 -0
  170. package/src/lib/app-server/graph-runtime.js +32 -0
  171. package/src/lib/app-server/server.js +45 -1
  172. package/src/lib/app-server/websocket-transport.js +23 -0
  173. package/src/lib/autonomous-agent.js +63 -13
  174. package/src/lib/cowork/ab-comparator-cli.js +4 -3
  175. package/src/lib/cowork/debate-review-cli.js +4 -3
  176. package/src/lib/cowork/decision-kb-cli.js +5 -0
  177. package/src/lib/cowork-adapter.js +38 -16
  178. package/src/lib/evolution/agent-evolution-ingress.js +95 -15
  179. package/src/lib/evolution/agent-evolution-runtime-composition.js +82 -0
  180. package/src/lib/evolution/agent-evolution-session-lifecycle.js +46 -0
  181. package/src/lib/evolution/agent-model-projection.js +217 -0
  182. package/src/lib/evolution/bounded-descriptor-read.js +29 -0
  183. package/src/lib/evolution/controlled-skill-pilot-ledger-adapter.js +551 -0
  184. package/src/lib/evolution/controlled-skill-production-pilot.js +308 -18
  185. package/src/lib/evolution/evidence-backed-wiki-maintainer.js +10 -1
  186. package/src/lib/evolution/evidence-json-text.js +236 -0
  187. package/src/lib/evolution/evolution-artifact-ports.js +202 -21
  188. package/src/lib/evolution/evolution-deployment-loader.js +369 -0
  189. package/src/lib/evolution/evolution-eval-child-evidence-ledger-adapter.js +373 -0
  190. package/src/lib/evolution/evolution-eval-gate.js +14 -1
  191. package/src/lib/evolution/evolution-eval-process-supervisor-worker.mjs +14 -0
  192. package/src/lib/evolution/evolution-eval-process-supervisor.js +607 -0
  193. package/src/lib/evolution/evolution-evidence-artifact-adapter.js +14 -1
  194. package/src/lib/evolution/evolution-evidence-projector.js +240 -37
  195. package/src/lib/evolution/evolution-file-witness.js +153 -30
  196. package/src/lib/evolution/evolution-ledger-ports.js +1027 -66
  197. package/src/lib/evolution/evolution-ledger.js +66 -2
  198. package/src/lib/evolution/evolution-raw-crypto-shred.js +29 -15
  199. package/src/lib/evolution/evolution-raw-deletion-ledger-adapter.js +865 -0
  200. package/src/lib/evolution/evolution-release-train-domain-stages.js +769 -0
  201. package/src/lib/evolution/evolution-release-train-ledger-adapter.js +335 -0
  202. package/src/lib/evolution/evolution-release-train-stage-output-ledger-adapter.js +333 -0
  203. package/src/lib/evolution/evolution-release-train.js +586 -0
  204. package/src/lib/evolution/evolution-workbench-batch-executor.js +101 -144
  205. package/src/lib/evolution/evolution-workbench-control-ports.js +203 -0
  206. package/src/lib/evolution/evolution-workbench-file-resources.js +403 -0
  207. package/src/lib/evolution/evolution-workbench-projection.js +152 -25
  208. package/src/lib/evolution/evolution-workbench-registry-source.js +482 -0
  209. package/src/lib/evolution/evolution-workbench-review-ledger-adapter.js +823 -0
  210. package/src/lib/evolution/evolution-workbench-review-protocol.js +157 -0
  211. package/src/lib/evolution/evolution-workbench-rollback-authorization.js +57 -0
  212. package/src/lib/evolution/evolution-workbench-rollback-ledger-adapter.js +1016 -0
  213. package/src/lib/evolution/evolution-workbench-runtime.js +133 -0
  214. package/src/lib/evolution/evolution-workbench-version-control.js +70 -36
  215. package/src/lib/evolution/evolvable-artifact-ledger-adapter.js +736 -0
  216. package/src/lib/evolution/governed-knowledge-artifact-lifecycle.js +364 -0
  217. package/src/lib/evolution/governed-knowledge-candidate-rejection.js +343 -0
  218. package/src/lib/evolution/governed-knowledge-dependency-authority.js +227 -44
  219. package/src/lib/evolution/governed-knowledge-dependency-ledger-executor.js +95 -83
  220. package/src/lib/evolution/governed-knowledge-merge-ledger-executor.js +29 -2
  221. package/src/lib/evolution/governed-knowledge-merge-publisher-authority.js +31 -3
  222. package/src/lib/evolution/governed-knowledge-record.js +148 -0
  223. package/src/lib/evolution/governed-knowledge-revocation-record.js +135 -0
  224. package/src/lib/evolution/governed-knowledge-skill-rollback.js +475 -0
  225. package/src/lib/evolution/governed-knowledge-sync-ledger-adapter.js +92 -6
  226. package/src/lib/evolution/governed-knowledge-sync-merge-publisher.js +57 -4
  227. package/src/lib/evolution/governed-knowledge-sync.js +332 -99
  228. package/src/lib/evolution/governed-knowledge-wiki-tombstone.js +462 -0
  229. package/src/lib/evolution/governed-skill-marketplace-badge.js +208 -0
  230. package/src/lib/evolution/governed-skill-marketplace-candidate.js +330 -0
  231. package/src/lib/evolution/governed-skill-marketplace-cli-host.js +308 -0
  232. package/src/lib/evolution/governed-skill-marketplace-ledger-adapter.js +420 -0
  233. package/src/lib/evolution/governed-skill-marketplace.js +288 -5
  234. package/src/lib/evolution/governed-wiki-pruning-journal.js +302 -0
  235. package/src/lib/evolution/governed-wiki-pruning-ledger-adapter.js +459 -0
  236. package/src/lib/evolution/governed-wiki-pruning-maintenance.js +576 -0
  237. package/src/lib/evolution/governed-wiki-pruning-plan-authority.js +169 -0
  238. package/src/lib/evolution/governed-wiki-pruning-raw-shred.js +207 -0
  239. package/src/lib/evolution/governed-wiki-pruning-retrieval.js +587 -0
  240. package/src/lib/evolution/governed-wiki-pruning-runtime.js +153 -0
  241. package/src/lib/evolution/governed-wiki-pruning-skill-rollback.js +360 -0
  242. package/src/lib/evolution/governed-wiki-pruning.js +322 -143
  243. package/src/lib/evolution/independent-skill-revocation-source.js +231 -0
  244. package/src/lib/evolution/knowledge-wiki-source-admission.js +124 -0
  245. package/src/lib/evolution/knowledge-wiki-source-provenance.js +359 -0
  246. package/src/lib/evolution/progressive-canary-external-watchdog.js +578 -0
  247. package/src/lib/evolution/progressive-canary-traffic-worker.js +628 -0
  248. package/src/lib/evolution/progressive-canary-watchdog-file-store.js +285 -0
  249. package/src/lib/evolution/progressive-canary-watchdog-node-pki.js +265 -0
  250. package/src/lib/evolution/skill-candidate-registry.js +22 -0
  251. package/src/lib/evolution/skill-promotion-controller.js +25 -0
  252. package/src/lib/evolution/skill-promotion-review-ledger-adapter.js +100 -0
  253. package/src/lib/evolution/skill-registry-transition-ledger-adapter.js +131 -2
  254. package/src/lib/evolution/skill-release-registry.js +25 -4
  255. package/src/lib/evolution/skill-retrieval-revocation-authority.js +361 -0
  256. package/src/lib/evolution/skill-retrieval-revocation-ledger-adapter.js +346 -0
  257. package/src/lib/evolution/skill-revocation-propagation.js +467 -0
  258. package/src/lib/evolution/skill-target-matrix-eval.js +162 -11
  259. package/src/lib/evolution/skill-wiki-reconciliation.js +985 -0
  260. package/src/lib/evolution/skill-writer-inventory-manifest.js +15 -12
  261. package/src/lib/evolution/statistical-progressive-canary.js +845 -0
  262. package/src/lib/evolution/structured-memory-agent-control-plane.js +120 -0
  263. package/src/lib/evolution/structured-memory-authority-ledger-adapter.js +5 -1
  264. package/src/lib/evolution/structured-memory-promotion-receipt-writer.js +126 -0
  265. package/src/lib/evolution/wiki-informed-skill-proposer.js +127 -21
  266. package/src/lib/evolution/wiki-maintainer-ledger-adapter.js +760 -100
  267. package/src/lib/evolution/wiki-revision-protocol.js +120 -0
  268. package/src/lib/evolution/wiki-skill-proposal-ledger-adapter.js +307 -0
  269. package/src/lib/evolution/wiki-target-tombstone-revision.js +101 -0
  270. package/src/lib/evolution/wikiskill-benchmark-cli-host.js +178 -0
  271. package/src/lib/evolution/wikiskill-benchmark-execution-host.js +702 -0
  272. package/src/lib/evolution/wikiskill-benchmark-ledger-adapter.js +613 -0
  273. package/src/lib/evolution/wikiskill-benchmark.js +574 -0
  274. package/src/lib/goal-assess.js +17 -10
  275. package/src/lib/interactive-planner.js +9 -1
  276. package/src/lib/iteration-budget.js +16 -2
  277. package/src/lib/micro-compact.js +4 -1
  278. package/src/lib/model-failure-policy.js +21 -0
  279. package/src/lib/process-execution-broker/index.js +1 -0
  280. package/src/lib/process-execution-broker/windows-sandbox-helper.dll +0 -0
  281. package/src/lib/process-execution-broker/windows-sandbox-helper.exe +0 -0
  282. package/src/lib/process-execution-broker/windows-sandbox.cs +33 -15
  283. package/src/lib/read-file-page.js +191 -0
  284. package/src/lib/runnable-provider.js +2 -1
  285. package/src/lib/session-host-lease.js +11 -16
  286. package/src/lib/skill-retrieval-router.js +22 -1
  287. package/src/repl/agent-repl.js +127 -33
  288. package/src/runtime/agent-core.js +224 -80
  289. package/src/runtime/agent-runtime.js +43 -0
  290. package/src/runtime/coding-agent-contract-shared.cjs +7 -1
  291. package/src/runtime/fallback-model.js +143 -62
  292. package/src/runtime/headless-runner.js +54 -10
  293. package/src/runtime/headless-stream.js +53 -6
  294. package/src/runtime/runtime-factory.js +41 -2
  295. package/src/assets/web-panel/assets/Notes-CgU9DDo9.js +0 -7
  296. package/src/assets/web-panel/assets/OrderTableRenderer-CwHc15Zs.js +0 -1
  297. package/src/assets/web-panel/assets/Projects-FF_thRi6.js +0 -1
  298. package/src/assets/web-panel/assets/SpeechSettings-l7ox6KuX.js +0 -1
  299. package/src/assets/web-panel/assets/devWarning-DyhgpXPf.js +0 -1
  300. package/src/assets/web-panel/assets/index-Ck1jhFE0.js +0 -1
  301. 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 rawResult = await this.invoke({
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 || skillOutcomeIndex || skillVectorAuthority)
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._runReActLoop(goal).catch((err) => {
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._runReActLoop(goal).catch((err) => {
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, each with: { "description": "...", "tool": "tool_name", "params": {...} }
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|add_step|skip", "newParams": {...}, "newStep": {...} }`;
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 throwRuntimeLedgerFailure(error) {
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
- throwRuntimeLedgerFailure(outcome.error);
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
- throwRuntimeLedgerFailure(err);
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 throwRuntimeLedgerFailure(error) {
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
- throwRuntimeLedgerFailure(outcome.error);
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
- throwRuntimeLedgerFailure(err);
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}`,