chainlesschain 0.166.22 → 0.166.25

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (298) hide show
  1. package/README.md +46 -3
  2. package/package.json +4 -3
  3. package/src/assets/web-panel/assets/{AIOps-oJ7USzMC.js → AIOps-RaxL_QQD.js} +1 -1
  4. package/src/assets/web-panel/assets/{ActionButton-BlgnZe_C.js → ActionButton-DD3ieFO-.js} +1 -1
  5. package/src/assets/web-panel/assets/{Analytics-D2rRbTLu.js → Analytics-CATDJukS.js} +3 -3
  6. package/src/assets/web-panel/assets/{AppLayout-FwS3f0B2.js → AppLayout-BHGsnRDS.js} +5 -5
  7. package/src/assets/web-panel/assets/{Artifacts-iF-_08Hi.js → Artifacts-BL6NunjN.js} +1 -1
  8. package/src/assets/web-panel/assets/{Audit-D24p0zQw.js → Audit-D0nEWfbA.js} +1 -1
  9. package/src/assets/web-panel/assets/{BackgroundAgents-Cg3mRVi9.js → BackgroundAgents-BAP1MUol.js} +1 -1
  10. package/src/assets/web-panel/assets/{Backup-EOqht3H-.js → Backup-R4y2OeSi.js} +1 -1
  11. package/src/assets/web-panel/assets/{BaseInput-9XWYq2hj.js → BaseInput-ByQZ2z6S.js} +1 -1
  12. package/src/assets/web-panel/assets/{Chat-Dq5yardA.js → Chat-32uV--xF.js} +4 -4
  13. package/src/assets/web-panel/assets/ChatBubbleRenderer-t1enanwz.js +1 -0
  14. package/src/assets/web-panel/assets/{Checkbox-CuyCBoBf.js → Checkbox-D1CB-7bq.js} +1 -1
  15. package/src/assets/web-panel/assets/{Codegen-DjWtYHNe.js → Codegen-BPx3dQ2q.js} +1 -1
  16. package/src/assets/web-panel/assets/{Col-CrVr_iuG.js → Col-DkPTQ2Gl.js} +1 -1
  17. package/src/assets/web-panel/assets/{Community-C6QxpfGc.js → Community-ZriaxRlr.js} +1 -1
  18. package/src/assets/web-panel/assets/{Compact-B-v5r6Pa.js → Compact-C_qJ0P7F.js} +1 -1
  19. package/src/assets/web-panel/assets/{Compliance-zNiLiFgD.js → Compliance-Bgoy-saS.js} +1 -1
  20. package/src/assets/web-panel/assets/{Cowork-D9K7lMOu.js → Cowork-B5i9y6XK.js} +2 -2
  21. package/src/assets/web-panel/assets/{Cron-DAjO36z4.js → Cron-D7vBJ5-J.js} +2 -2
  22. package/src/assets/web-panel/assets/{Crosschain-Bxqn0aqB.js → Crosschain-D4kvoGI_.js} +1 -1
  23. package/src/assets/web-panel/assets/{DID-DfRmLUe-.js → DID-BLOeBd-r.js} +2 -2
  24. package/src/assets/web-panel/assets/{Dashboard-Cz8KF3fr.js → Dashboard-mecJaonC.js} +2 -2
  25. package/src/assets/web-panel/assets/{Dropdown-C4oVfkP0.js → Dropdown-GPKwaFer.js} +1 -1
  26. package/src/assets/web-panel/assets/{EmailListRenderer-ivyZKN8k.js → EmailListRenderer-BML9m7Dd.js} +1 -1
  27. package/src/assets/web-panel/assets/{FamilyGuardDashboard-DoxY1CPW.js → FamilyGuardDashboard-DN5bAtJC.js} +1 -1
  28. package/src/assets/web-panel/assets/{Federation-C93gZxnb.js → Federation-DmD6Gecd.js} +1 -1
  29. package/src/assets/web-panel/assets/{FormItemContext-D_lEjYJE.js → FormItemContext-6wwplN_K.js} +1 -1
  30. package/src/assets/web-panel/assets/{GenericCardRenderer-BNFN9YjN.js → GenericCardRenderer-DUhpLkDL.js} +1 -1
  31. package/src/assets/web-panel/assets/{Git-mUu2HcLI.js → Git-eJfyXkwf.js} +2 -2
  32. package/src/assets/web-panel/assets/{Governance-CNuosrge.js → Governance-swAUW59x.js} +1 -1
  33. package/src/assets/web-panel/assets/{Inference-DwY5pbCB.js → Inference-CbdwJPDJ.js} +1 -1
  34. package/src/assets/web-panel/assets/{KnowledgeGraph-aRUxhACD.js → KnowledgeGraph-UuYpg1nm.js} +1 -1
  35. package/src/assets/web-panel/assets/{Logs-DFfsWYy_.js → Logs-CS0G057y.js} +2 -2
  36. package/src/assets/web-panel/assets/MarkdownRenderer-BxIIB4k3.js +1 -0
  37. package/src/assets/web-panel/assets/{Marketplace-COI-ciM-.js → Marketplace-CZRjuvvI.js} +1 -1
  38. package/src/assets/web-panel/assets/{McpTools-BJJwaIpe.js → McpTools-BOJ9A_Rf.js} +3 -3
  39. package/src/assets/web-panel/assets/{Memory-CDO6SGDZ.js → Memory-BnkrR-Ok.js} +2 -2
  40. package/src/assets/web-panel/assets/{MobileBridge-BlZ5tFf4.js → MobileBridge-Do4mPi13.js} +1 -1
  41. package/src/assets/web-panel/assets/{MobileProjects-DuoxbgWz.js → MobileProjects-2JxWa6-p.js} +1 -1
  42. package/src/assets/web-panel/assets/{Mtc-6ec9j70b.js → Mtc-CS_mnpGd.js} +2 -2
  43. package/src/assets/web-panel/assets/{MtcAudit-BuL7HkC7.js → MtcAudit-DZ4J_351.js} +5 -5
  44. package/src/assets/web-panel/assets/{Multisig-CJxR85lk.js → Multisig-Jh74zKXu.js} +3 -3
  45. package/src/assets/web-panel/assets/{NLProgramming-B71O1S4l.js → NLProgramming-_4n2BfnS.js} +1 -1
  46. package/src/assets/web-panel/assets/{Notes-Bsw5zbpV.js → Notes-CtENcKHv.js} +3 -3
  47. package/src/assets/web-panel/assets/{NotificationSettings-BnAhXuK_.js → NotificationSettings-dgDCvpK9.js} +1 -1
  48. package/src/assets/web-panel/assets/{OrderTableRenderer-BJ0R5GGz.js → OrderTableRenderer-D5VxCrmG.js} +1 -1
  49. package/src/assets/web-panel/assets/{Organization-B7wwNxoP.js → Organization-CpIF8Xkd.js} +2 -2
  50. package/src/assets/web-panel/assets/{Overflow-CfAGr0gM.js → Overflow-aHnBZaez.js} +1 -1
  51. package/src/assets/web-panel/assets/{P2P-KhMg22Fz.js → P2P-8ppzog2V.js} +2 -2
  52. package/src/assets/web-panel/assets/{PdhVaultBrowser-NdAXI9ft.js → PdhVaultBrowser-D3p1BXkp.js} +3 -3
  53. package/src/assets/web-panel/assets/{Permissions-CIYjqyT7.js → Permissions-D7vflD5q.js} +4 -4
  54. package/src/assets/web-panel/assets/{PersonalDataHub-D2ht3P_R.js → PersonalDataHub-D2hY-Ek2.js} +4 -4
  55. package/src/assets/web-panel/assets/{Pipeline-i6flZW1m.js → Pipeline-qK2VqhJC.js} +1 -1
  56. package/src/assets/web-panel/assets/{Privacy-DE0lhYVc.js → Privacy-DHJr4uu0.js} +1 -1
  57. package/src/assets/web-panel/assets/{ProjectInit-BL3YbyxS.js → ProjectInit-DMBS6trm.js} +2 -2
  58. package/src/assets/web-panel/assets/{ProjectSettings-CEtdg7ni.js → ProjectSettings-D3Ng74BT.js} +2 -2
  59. package/src/assets/web-panel/assets/{Projects-CvtU5peJ.js → Projects-BfJFZiIW.js} +1 -1
  60. package/src/assets/web-panel/assets/{Providers-DKt_Cg-j.js → Providers-DlNA95G0.js} +1 -1
  61. package/src/assets/web-panel/assets/{QrScannerModal-DA61jNSx.js → QrScannerModal-CMOIYxIm.js} +1 -1
  62. package/src/assets/web-panel/assets/{QuickAsk-fS9ryUmq.js → QuickAsk-D6MyGp5I.js} +1 -1
  63. package/src/assets/web-panel/assets/{Recommend-CR9dZU5Y.js → Recommend-W6WcShtf.js} +1 -1
  64. package/src/assets/web-panel/assets/{RemoteSession-BV0BR2Dz.js → RemoteSession-Dm_MjlV_.js} +2 -2
  65. package/src/assets/web-panel/assets/{Reputation-BIeGUvYD.js → Reputation-Ctvij6eX.js} +1 -1
  66. package/src/assets/web-panel/assets/{Row-DHDT1aro.js → Row-DivbeDE-.js} +1 -1
  67. package/src/assets/web-panel/assets/{RssFeed-Cq6YKb1h.js → RssFeed-D4famoAw.js} +3 -3
  68. package/src/assets/web-panel/assets/{Search-DEF6vsy6.js → Search-6gOAh3zG.js} +1 -1
  69. package/src/assets/web-panel/assets/{Security-CHtYiKY9.js → Security-DApb9kK8.js} +4 -4
  70. package/src/assets/web-panel/assets/{Services-u16lvBJN.js → Services-B8OomyE2.js} +2 -2
  71. package/src/assets/web-panel/assets/{Skeleton-CGbizyDj.js → Skeleton-BTJ2g2E3.js} +1 -1
  72. package/src/assets/web-panel/assets/{Skills-BZMQcAa7.js → Skills-NIRr4DD1.js} +1 -1
  73. package/src/assets/web-panel/assets/{Sla-Bm-CycVi.js → Sla-BQHP_6px.js} +1 -1
  74. package/src/assets/web-panel/assets/{SpeechSettings-BudpA5kr.js → SpeechSettings-BVQTDSVS.js} +1 -1
  75. package/src/assets/web-panel/assets/{SyncSettings-B8q1C1eC.js → SyncSettings-BOD4Mar6.js} +2 -2
  76. package/src/assets/web-panel/assets/{Tasks-SU1pBWc-.js → Tasks-Ciu7H2-y.js} +1 -1
  77. package/src/assets/web-panel/assets/{Templates-CyOfJzmt.js → Templates-CtlwavRU.js} +1 -1
  78. package/src/assets/web-panel/assets/{Tenant-xqWSm2GP.js → Tenant-QLWYJdL6.js} +1 -1
  79. package/src/assets/web-panel/assets/{Terminal-D1Ttgjsi.js → Terminal-B3q10mjm.js} +2 -2
  80. package/src/assets/web-panel/assets/{TimelineRenderer-Da2lYs5D.js → TimelineRenderer-CqltBA_8.js} +1 -1
  81. package/src/assets/web-panel/assets/{Tokens-B34-SduO.js → Tokens-CJOKrj4y.js} +1 -1
  82. package/src/assets/web-panel/assets/{Trigger-C8zyYm4R.js → Trigger-CPMGgfdM.js} +1 -1
  83. package/src/assets/web-panel/assets/{Trust-D1Pvqems.js → Trust-DiJms7Bl.js} +1 -1
  84. package/src/assets/web-panel/assets/{UkeySign-Do3VVnAy.js → UkeySign-rakR8eel.js} +1 -1
  85. package/src/assets/web-panel/assets/{VideoEditing-Dz7egVIA.js → VideoEditing-DAWZUM5o.js} +1 -1
  86. package/src/assets/web-panel/assets/{Wallet-Dcuw-OxR.js → Wallet-DqUPnl7K.js} +3 -3
  87. package/src/assets/web-panel/assets/{WebAuthn-DPlw-QsB.js → WebAuthn-BnVUwvMm.js} +3 -3
  88. package/src/assets/web-panel/assets/{WorkflowEditor-h4OsnU5q.js → WorkflowEditor-B1CAwxgs.js} +1 -1
  89. package/src/assets/web-panel/assets/{chat-eO9wEwrW.js → chat-k2-0Jzfy.js} +1 -1
  90. package/src/assets/web-panel/assets/{colors-34lSmOXw.js → colors-BAu8xBmW.js} +1 -1
  91. package/src/assets/web-panel/assets/{compact-item-CK4kEWJ4.js → compact-item-DMlqcdfI.js} +1 -1
  92. package/src/assets/web-panel/assets/{createContext-E0A57xed.js → createContext-BU9kfiSw.js} +1 -1
  93. package/src/assets/web-panel/assets/devWarning-DuGrUMAS.js +1 -0
  94. package/src/assets/web-panel/assets/{hasIn-BD9ZMGAl.js → hasIn-2vacgdcl.js} +1 -1
  95. package/src/assets/web-panel/assets/{index--N0u6kTG.js → index-B-C-Ruft.js} +1 -1
  96. package/src/assets/web-panel/assets/{index-DzXjP44T.js → index-B7wDjYUd.js} +1 -1
  97. package/src/assets/web-panel/assets/{index-CZBaqe3d.js → index-BMq0frKK.js} +1 -1
  98. package/src/assets/web-panel/assets/{index-DrOalGut.js → index-BUX4W-2v.js} +1 -1
  99. package/src/assets/web-panel/assets/{index-CT1_eRL-.js → index-BZz2eB33.js} +1 -1
  100. package/src/assets/web-panel/assets/{index-DrsDA_md.js → index-BblNQlaA.js} +1 -1
  101. package/src/assets/web-panel/assets/{index-DP-UZAQN.js → index-BdfKoqsK.js} +1 -1
  102. package/src/assets/web-panel/assets/{index-DiT_REby.js → index-Bf8YofPE.js} +1 -1
  103. package/src/assets/web-panel/assets/{index-Cx3Jn1r0.js → index-Bn8tARil.js} +1 -1
  104. package/src/assets/web-panel/assets/{index-B0rkHxKK.js → index-Bpe2CJd-.js} +1 -1
  105. package/src/assets/web-panel/assets/{index-B_G_ElKO.js → index-BxctzdYQ.js} +1 -1
  106. package/src/assets/web-panel/assets/{index-MIg5Z8qe.js → index-C24NoPpy.js} +1 -1
  107. package/src/assets/web-panel/assets/{index-BmNbU2Z6.js → index-C5C4kSi8.js} +1 -1
  108. package/src/assets/web-panel/assets/{index-BsGmo6v1.js → index-C6ICn9Y6.js} +1 -1
  109. package/src/assets/web-panel/assets/{index-CsrKJJcX.js → index-C8ldqZi6.js} +1 -1
  110. package/src/assets/web-panel/assets/{index-BbX_Dted.js → index-C9WsM29I.js} +1 -1
  111. package/src/assets/web-panel/assets/{index-Ch175NUw.js → index-CONPVaxw.js} +1 -1
  112. package/src/assets/web-panel/assets/{index-DONOUtlz.js → index-CPyYXKFB.js} +1 -1
  113. package/src/assets/web-panel/assets/{index-DFLE2qO9.js → index-CSvSf9px.js} +1 -1
  114. package/src/assets/web-panel/assets/{index-o8pYehRq.js → index-CXmpR6N3.js} +3 -3
  115. package/src/assets/web-panel/assets/{index-Cz3unNfL.js → index-Chybe7Ge.js} +1 -1
  116. package/src/assets/web-panel/assets/{index-yAGBu2E0.js → index-CyXmP3PW.js} +1 -1
  117. package/src/assets/web-panel/assets/{index-CuSau5ya.js → index-DCusBOqR.js} +1 -1
  118. package/src/assets/web-panel/assets/{index-DcE1BspQ.js → index-DH01oIaj.js} +1 -1
  119. package/src/assets/web-panel/assets/{index-DrSAAuJj.js → index-DHg3LMNP.js} +1 -1
  120. package/src/assets/web-panel/assets/{index-CZkFMeWL.js → index-DWLTSIka.js} +1 -1
  121. package/src/assets/web-panel/assets/{index-DvKcroix.js → index-DaUGdvtU.js} +1 -1
  122. package/src/assets/web-panel/assets/{index-Bjs90Eh9.js → index-DcA-tEQd.js} +1 -1
  123. package/src/assets/web-panel/assets/{index-DGRxt5wj.js → index-DfWvcu4p.js} +1 -1
  124. package/src/assets/web-panel/assets/{index-DCn-ECvK.js → index-DmZNnZz7.js} +1 -1
  125. package/src/assets/web-panel/assets/index-DvFfMAux.js +1 -0
  126. package/src/assets/web-panel/assets/{index-8qMA1DWQ.js → index-JsyGqKmD.js} +1 -1
  127. package/src/assets/web-panel/assets/{index-D4bB_x_v.js → index-TtrpHmYx.js} +1 -1
  128. package/src/assets/web-panel/assets/{index-Brqc9Emx.js → index-Ygh0wmKz.js} +1 -1
  129. package/src/assets/web-panel/assets/{index-Da5fmOHB.js → index-dIYqw3f0.js} +1 -1
  130. package/src/assets/web-panel/assets/{index-DpfisY1g.js → index-hDHHJYno.js} +1 -1
  131. package/src/assets/web-panel/assets/index-n6p-1A77.js +1 -0
  132. package/src/assets/web-panel/assets/{index-DeXNCyQJ.js → index-oElehY4F.js} +1 -1
  133. package/src/assets/web-panel/assets/{index-DcbgVLOH.js → index-z4_YwZDW.js} +1 -1
  134. package/src/assets/web-panel/assets/{initDefaultProps-DMTkAomF.js → initDefaultProps-B9OXWu2e.js} +1 -1
  135. package/src/assets/web-panel/assets/{motion-Cnti1F5g.js → motion-IQ47MCDQ.js} +1 -1
  136. package/src/assets/web-panel/assets/{move-CGxmHUga.js → move-CLCU4kjV.js} +1 -1
  137. package/src/assets/web-panel/assets/{mtc-parser-CuwwLoq7.js → mtc-parser-CXnVlSPq.js} +1 -1
  138. package/src/assets/web-panel/assets/{omit-BpdlTkPM.js → omit-BJjLXB0f.js} +1 -1
  139. package/src/assets/web-panel/assets/{pickAttrs-D7nWrThp.js → pickAttrs-BHdtvdy6.js} +1 -1
  140. package/src/assets/web-panel/assets/{placementArrow-Bhx0TV8F.js → placementArrow-oq8X_Bwc.js} +1 -1
  141. package/src/assets/web-panel/assets/{responsiveObserve-CZ1KesZh.js → responsiveObserve-DTD02LAO.js} +1 -1
  142. package/src/assets/web-panel/assets/{slide-CnldF8J6.js → slide-DbEeq8to.js} +1 -1
  143. package/src/assets/web-panel/assets/{statusUtils-CZfo_GOA.js → statusUtils-Do2fy1CJ.js} +1 -1
  144. package/src/assets/web-panel/assets/{styleChecker-B2QCcAv5.js → styleChecker-CFWD63T-.js} +1 -1
  145. package/src/assets/web-panel/assets/{useFlexGapSupport-DzzjIS4J.js → useFlexGapSupport-BeozAWOo.js} +1 -1
  146. package/src/assets/web-panel/assets/{useFs-B_atg9M0.js → useFs-0-rIgnBL.js} +1 -1
  147. package/src/assets/web-panel/assets/{usePersonalDataHub-DhZs3QYN.js → usePersonalDataHub-CeiNoI31.js} +1 -1
  148. package/src/assets/web-panel/assets/{vnode-DcePTYAm.js → vnode-Dj0ReRNg.js} +1 -1
  149. package/src/assets/web-panel/assets/{zoom-BYmlnjRk.js → zoom-DD7MC4Dy.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-knowledge.js +40 -1
  155. package/src/commands/evolution.js +2 -0
  156. package/src/commands/governed-skill-marketplace.js +142 -0
  157. package/src/commands/marketplace.js +4 -1
  158. package/src/commands/serve.js +21 -0
  159. package/src/commands/skill.js +3 -0
  160. package/src/data/changelog.json +39 -0
  161. package/src/gateways/ws/ws-agent-handler.js +59 -2
  162. package/src/gateways/ws/ws-server.js +2 -0
  163. package/src/generated/cc-agent-protocol.schema.json +3 -1
  164. package/src/harness/golden-transcript.js +1 -0
  165. package/src/harness/prompt-compressor.js +51 -5
  166. package/src/harness/provider-backed-compaction.js +28 -1
  167. package/src/harness/remote-session-registry.js +15 -3
  168. package/src/index.js +20 -2
  169. package/src/lazy-dispatch.js +6 -0
  170. package/src/lib/advisor-runtime.js +55 -2
  171. package/src/lib/app-server/cli-agent-kernel-adapter.js +4 -0
  172. package/src/lib/app-server/graph-runtime.js +32 -0
  173. package/src/lib/app-server/server.js +94 -1
  174. package/src/lib/app-server/websocket-transport.js +15 -0
  175. package/src/lib/autonomous-agent.js +63 -13
  176. package/src/lib/cowork/ab-comparator-cli.js +4 -3
  177. package/src/lib/cowork/debate-review-cli.js +4 -3
  178. package/src/lib/cowork/decision-kb-cli.js +5 -0
  179. package/src/lib/cowork-adapter.js +38 -16
  180. package/src/lib/evolution/agent-evolution-ingress.js +95 -15
  181. package/src/lib/evolution/agent-evolution-runtime-composition.js +82 -0
  182. package/src/lib/evolution/agent-evolution-session-lifecycle.js +46 -0
  183. package/src/lib/evolution/agent-model-projection.js +437 -0
  184. package/src/lib/evolution/bounded-descriptor-read.js +29 -0
  185. package/src/lib/evolution/controlled-skill-pilot-ledger-adapter.js +551 -0
  186. package/src/lib/evolution/controlled-skill-production-pilot.js +308 -18
  187. package/src/lib/evolution/evidence-backed-wiki-maintainer.js +32 -10
  188. package/src/lib/evolution/evidence-json-text.js +236 -0
  189. package/src/lib/evolution/evolution-artifact-ports.js +196 -21
  190. package/src/lib/evolution/evolution-deployment-loader.js +240 -2
  191. package/src/lib/evolution/evolution-eval-child-evidence-ledger-adapter.js +373 -0
  192. package/src/lib/evolution/evolution-eval-gate.js +14 -1
  193. package/src/lib/evolution/evolution-eval-process-supervisor-worker.mjs +14 -0
  194. package/src/lib/evolution/evolution-eval-process-supervisor.js +607 -0
  195. package/src/lib/evolution/evolution-evidence-artifact-adapter.js +14 -1
  196. package/src/lib/evolution/evolution-evidence-projector.js +271 -37
  197. package/src/lib/evolution/evolution-file-witness.js +153 -30
  198. package/src/lib/evolution/evolution-ledger-ports.js +1219 -66
  199. package/src/lib/evolution/evolution-ledger.js +66 -2
  200. package/src/lib/evolution/evolution-raw-crypto-shred.js +29 -15
  201. package/src/lib/evolution/evolution-raw-deletion-ledger-adapter.js +865 -0
  202. package/src/lib/evolution/evolution-release-train-domain-stages.js +769 -0
  203. package/src/lib/evolution/evolution-release-train-stage-output-ledger-adapter.js +333 -0
  204. package/src/lib/evolution/evolution-release-train.js +54 -6
  205. package/src/lib/evolution/evolution-workbench-batch-executor.js +101 -144
  206. package/src/lib/evolution/evolution-workbench-control-ports.js +203 -0
  207. package/src/lib/evolution/evolution-workbench-file-resources.js +403 -0
  208. package/src/lib/evolution/evolution-workbench-projection.js +134 -26
  209. package/src/lib/evolution/evolution-workbench-registry-source.js +482 -0
  210. package/src/lib/evolution/evolution-workbench-review-ledger-adapter.js +823 -0
  211. package/src/lib/evolution/evolution-workbench-review-protocol.js +157 -0
  212. package/src/lib/evolution/evolution-workbench-rollback-authorization.js +57 -0
  213. package/src/lib/evolution/evolution-workbench-rollback-ledger-adapter.js +1016 -0
  214. package/src/lib/evolution/evolution-workbench-runtime.js +133 -0
  215. package/src/lib/evolution/evolution-workbench-version-control.js +70 -36
  216. package/src/lib/evolution/evolvable-artifact-ledger-adapter.js +48 -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-inventory.js +392 -0
  220. package/src/lib/evolution/governed-knowledge-dependency-ledger-executor.js +217 -82
  221. package/src/lib/evolution/governed-knowledge-quarantine-release.js +1013 -0
  222. package/src/lib/evolution/governed-knowledge-record.js +148 -0
  223. package/src/lib/evolution/governed-knowledge-revocation-host.js +59 -0
  224. package/src/lib/evolution/governed-knowledge-revocation-record.js +135 -0
  225. package/src/lib/evolution/governed-knowledge-skill-rollback.js +510 -0
  226. package/src/lib/evolution/governed-knowledge-sync.js +181 -95
  227. package/src/lib/evolution/governed-knowledge-wiki-tombstone.js +516 -0
  228. package/src/lib/evolution/governed-skill-marketplace-badge.js +208 -0
  229. package/src/lib/evolution/governed-skill-marketplace-candidate.js +330 -0
  230. package/src/lib/evolution/governed-skill-marketplace-cli-host.js +308 -0
  231. package/src/lib/evolution/governed-skill-marketplace-ledger-adapter.js +420 -0
  232. package/src/lib/evolution/governed-skill-marketplace.js +288 -5
  233. package/src/lib/evolution/governed-wiki-pruning-journal.js +302 -0
  234. package/src/lib/evolution/governed-wiki-pruning-ledger-adapter.js +459 -0
  235. package/src/lib/evolution/governed-wiki-pruning-maintenance.js +576 -0
  236. package/src/lib/evolution/governed-wiki-pruning-plan-authority.js +169 -0
  237. package/src/lib/evolution/governed-wiki-pruning-raw-shred.js +207 -0
  238. package/src/lib/evolution/governed-wiki-pruning-retrieval.js +587 -0
  239. package/src/lib/evolution/governed-wiki-pruning-runtime.js +153 -0
  240. package/src/lib/evolution/governed-wiki-pruning-skill-rollback.js +360 -0
  241. package/src/lib/evolution/governed-wiki-pruning.js +322 -143
  242. package/src/lib/evolution/independent-skill-revocation-source.js +231 -0
  243. package/src/lib/evolution/knowledge-wiki-source-admission.js +283 -0
  244. package/src/lib/evolution/knowledge-wiki-source-provenance.js +360 -0
  245. package/src/lib/evolution/progressive-canary-external-watchdog.js +578 -0
  246. package/src/lib/evolution/progressive-canary-traffic-worker.js +628 -0
  247. package/src/lib/evolution/progressive-canary-watchdog-file-store.js +285 -0
  248. package/src/lib/evolution/progressive-canary-watchdog-node-pki.js +265 -0
  249. package/src/lib/evolution/skill-candidate-registry.js +43 -3
  250. package/src/lib/evolution/skill-promotion-controller.js +25 -0
  251. package/src/lib/evolution/skill-promotion-review-ledger-adapter.js +100 -0
  252. package/src/lib/evolution/skill-registry-transition-ledger-adapter.js +131 -2
  253. package/src/lib/evolution/skill-release-registry.js +168 -4
  254. package/src/lib/evolution/skill-retrieval-revocation-authority.js +361 -0
  255. package/src/lib/evolution/skill-retrieval-revocation-ledger-adapter.js +346 -0
  256. package/src/lib/evolution/skill-revocation-propagation.js +467 -0
  257. package/src/lib/evolution/skill-target-matrix-eval.js +162 -11
  258. package/src/lib/evolution/skill-wiki-reconciliation.js +985 -0
  259. package/src/lib/evolution/skill-writer-inventory-manifest.js +8 -6
  260. package/src/lib/evolution/statistical-progressive-canary.js +165 -3
  261. package/src/lib/evolution/structured-memory-agent-control-plane.js +120 -0
  262. package/src/lib/evolution/structured-memory-authority-ledger-adapter.js +5 -1
  263. package/src/lib/evolution/structured-memory-promotion-receipt-writer.js +126 -0
  264. package/src/lib/evolution/wiki-informed-skill-proposer.js +127 -21
  265. package/src/lib/evolution/wiki-maintainer-ledger-adapter.js +822 -101
  266. package/src/lib/evolution/wiki-revision-protocol.js +120 -0
  267. package/src/lib/evolution/wiki-skill-proposal-ledger-adapter.js +307 -0
  268. package/src/lib/evolution/wiki-target-tombstone-revision.js +109 -0
  269. package/src/lib/evolution/wikiskill-benchmark-cli-host.js +178 -0
  270. package/src/lib/evolution/wikiskill-benchmark-execution-host.js +702 -0
  271. package/src/lib/evolution/wikiskill-benchmark-ledger-adapter.js +613 -0
  272. package/src/lib/evolution/wikiskill-benchmark.js +80 -16
  273. package/src/lib/goal-assess.js +17 -10
  274. package/src/lib/interactive-planner.js +9 -1
  275. package/src/lib/iteration-budget.js +16 -2
  276. package/src/lib/micro-compact.js +4 -1
  277. package/src/lib/model-failure-policy.js +21 -0
  278. package/src/lib/process-execution-broker/index.js +1 -0
  279. package/src/lib/process-execution-broker/windows-sandbox-helper.dll +0 -0
  280. package/src/lib/process-execution-broker/windows-sandbox-helper.exe +0 -0
  281. package/src/lib/process-execution-broker/windows-sandbox.cs +33 -15
  282. package/src/lib/read-file-loop-guard.js +113 -0
  283. package/src/lib/read-file-page.js +191 -0
  284. package/src/lib/runnable-provider.js +2 -1
  285. package/src/lib/skill-retrieval-router.js +22 -1
  286. package/src/repl/agent-repl.js +133 -34
  287. package/src/runtime/agent-core.js +196 -74
  288. package/src/runtime/agent-runtime.js +43 -0
  289. package/src/runtime/coding-agent-contract-shared.cjs +7 -1
  290. package/src/runtime/fallback-model.js +143 -62
  291. package/src/runtime/headless-runner.js +54 -10
  292. package/src/runtime/headless-stream.js +50 -6
  293. package/src/runtime/runtime-factory.js +41 -2
  294. package/src/assets/web-panel/assets/ChatBubbleRenderer-Ds3pA-ET.js +0 -1
  295. package/src/assets/web-panel/assets/MarkdownRenderer-DqTx7_u1.js +0 -1
  296. package/src/assets/web-panel/assets/devWarning-CF3xafX2.js +0 -1
  297. package/src/assets/web-panel/assets/index-C907rPwd.js +0 -1
  298. package/src/assets/web-panel/assets/index-wueRSK2d.js +0 -1
@@ -1,4 +1,5 @@
1
1
  import { BM25Search } from "./bm25-search.js";
2
+ import { captureSkillRetrievalRevocationReader } from "./evolution/skill-retrieval-revocation-authority.js";
2
3
 
3
4
  export const SKILL_RETRIEVAL_RESULT_SCHEMA =
4
5
  "chainlesschain.skill-retrieval-result/v1";
@@ -82,6 +83,7 @@ export function routeSkillDescriptors({
82
83
  target = null,
83
84
  vectorScores = null,
84
85
  outcomeMetrics = null,
86
+ revocationReader = null,
85
87
  topK = 5,
86
88
  ambiguityMargin = 0.02,
87
89
  } = {}) {
@@ -104,6 +106,10 @@ export function routeSkillDescriptors({
104
106
  const requiredTags = new Set(
105
107
  tags.map((value) => String(value).toLowerCase()),
106
108
  );
109
+ const revocations =
110
+ revocationReader === null
111
+ ? null
112
+ : captureSkillRetrievalRevocationReader(revocationReader);
107
113
  const rejected = [];
108
114
  const admitted = [];
109
115
  for (const skill of skills) {
@@ -116,6 +122,11 @@ export function routeSkillDescriptors({
116
122
  const mismatch = compatible(skill, target);
117
123
  const reasons = [];
118
124
  if (!digest) reasons.push("missing-content-digest");
125
+ const revocation =
126
+ digest === null
127
+ ? null
128
+ : revocations?.inspect({ skillName: skill.id, contentDigest: digest });
129
+ if (revocation?.invalidated) reasons.push("revoked-by-evolution");
119
130
  if (namespace !== null && skill.source !== namespace)
120
131
  reasons.push("namespace-mismatch");
121
132
  if ([...requiredTags].some((value) => !skillTags.has(value)))
@@ -123,7 +134,17 @@ export function routeSkillDescriptors({
123
134
  if (!containsPath(skill, targetPath)) reasons.push("path-mismatch");
124
135
  reasons.push(...mismatch.reasons);
125
136
  if (reasons.length > 0) {
126
- rejected.push({ id: skill.id, digest, reasons });
137
+ rejected.push({
138
+ id: skill.id,
139
+ digest,
140
+ reasons,
141
+ ...(revocation?.invalidated
142
+ ? {
143
+ revocationStateDigest: revocation.stateDigest,
144
+ revocationReceiptDigest: revocation.receiptDigest,
145
+ }
146
+ : {}),
147
+ });
127
148
  continue;
128
149
  }
129
150
  admitted.push({ skill, digest });
@@ -173,6 +173,7 @@ import { newCostStore, addUsage } from "./session-cost.js";
173
173
  import { extractPluginUsageAttribution } from "../lib/plugin-usage-attribution.js";
174
174
  import { captureStructuredMemoryAgentControlPlane } from "../lib/evolution/structured-memory-agent-control-plane.js";
175
175
  import { captureAgentEvolutionIngress } from "../lib/evolution/agent-evolution-ingress.js";
176
+ import { createAgentEvolutionSessionLifecycle } from "../lib/evolution/agent-evolution-session-lifecycle.js";
176
177
  import { formatManagedCheckpointEvent } from "../lib/managed-checkpoint-render.js";
177
178
  import { parseThinkCommand, parseEffortCommand } from "./think-command.js";
178
179
  import {
@@ -451,7 +452,6 @@ export async function runReplDirectToolWithLedger({
451
452
  * Reference to the runtime DB for hook execution (set during startAgentRepl)
452
453
  */
453
454
  let _hookDb = null;
454
- let _compressor = null;
455
455
  let _approvalGate = null;
456
456
  // Static + CLI-owned scoped permission rules (deny > ask > allow) and an
457
457
  // interactive confirmer for `ask` matches. Scoped rules are refreshed at each
@@ -3044,6 +3044,13 @@ async function startAgentReplInWorkspaceOwned(
3044
3044
  startupAdmission,
3045
3045
  outputScope,
3046
3046
  ) {
3047
+ // The compressor captures this session's ingress and metering callbacks.
3048
+ // A later REPL instance must not replace another session's authority.
3049
+ let _compressor = null;
3050
+ const evolutionIngress =
3051
+ options.evolutionIngress == null
3052
+ ? null
3053
+ : captureAgentEvolutionIngress(options.evolutionIngress);
3047
3054
  // EPIPE guard: if the REPL's stdout is piped and the consumer closes (e.g.
3048
3055
  // `cc agent | head`), the async stream `error` would otherwise crash the
3049
3056
  // process. Route a broken pipe into the REPL's own graceful shutdown (the
@@ -3052,6 +3059,10 @@ async function startAgentReplInWorkspaceOwned(
3052
3059
  // a cleanup write that also EPIPEs can't loop. An early EPIPE remains pending
3053
3060
  // until the close handler is attached; it never skips directly to exit.
3054
3061
  let _replRl = null;
3062
+ const _evolutionSession =
3063
+ evolutionIngress === null
3064
+ ? null
3065
+ : createAgentEvolutionSessionLifecycle(evolutionIngress);
3055
3066
  let _replClosing = false;
3056
3067
  let _replCloseReady = false;
3057
3068
  let _replCleanupStarted = false;
@@ -3165,6 +3176,8 @@ async function startAgentReplInWorkspaceOwned(
3165
3176
  // above every direct-model surface (Advisor, /btw, /auto, /plan, /goal), and
3166
3177
  // clear steering immediately so queued work cannot start another paid call.
3167
3178
  let _processingLine = false;
3179
+ let _lineSettled = null;
3180
+ const _activeBtwCalls = new Set();
3168
3181
  const _pendingLines = [];
3169
3182
  const _runtimeLedgerTerminalLatch = createReplRuntimeLedgerTerminalLatch({
3170
3183
  onTrip: (terminalError) => {
@@ -3223,7 +3236,7 @@ async function startAgentReplInWorkspaceOwned(
3223
3236
  callModel,
3224
3237
  source: "model",
3225
3238
  });
3226
- const _runReplDirectTool = async (tool, args) => {
3239
+ const _runReplDirectTool = async (tool, args, { signal = null } = {}) => {
3227
3240
  _runtimeLedgerTerminalLatch.assertOpen();
3228
3241
  try {
3229
3242
  const durableSessionId = resolveReplMeteredSessionId(useJsonl, sessionId);
@@ -3235,7 +3248,7 @@ async function startAgentReplInWorkspaceOwned(
3235
3248
  executeTool(name, toolArgs, {
3236
3249
  sessionId: durableSessionId,
3237
3250
  sessionBudget: _sessionBudget,
3238
- signal: options.signal || null,
3251
+ signal: combineReplSignals(signal, options.signal),
3239
3252
  }),
3240
3253
  now: options.now || Date.now,
3241
3254
  terminalLatch: _runtimeLedgerTerminalLatch,
@@ -3396,7 +3409,11 @@ async function startAgentReplInWorkspaceOwned(
3396
3409
  let _compactionUsageBlock = null;
3397
3410
 
3398
3411
  try {
3399
- const ctx = await bootstrap({ verbose: false });
3412
+ const ctx = await bootstrap({
3413
+ verbose: false,
3414
+ ...(options.skipDb === true ? { skipDb: true } : {}),
3415
+ ...(options.dbPath == null ? {} : { dbPath: options.dbPath }),
3416
+ });
3400
3417
  db = ctx.db || null;
3401
3418
  } catch (_err) {
3402
3419
  // Continue without DB — static prompt fallback
@@ -3427,6 +3444,7 @@ async function startAgentReplInWorkspaceOwned(
3427
3444
  includeLedgerMetadata: true,
3428
3445
  call: ({ signal }) =>
3429
3446
  chatWithTools([{ role: "user", content: prompt }], {
3447
+ ...(evolutionIngress === null ? {} : { evolutionIngress }),
3430
3448
  provider,
3431
3449
  model,
3432
3450
  baseUrl,
@@ -4826,7 +4844,7 @@ async function startAgentReplInWorkspaceOwned(
4826
4844
  // transcript snapshot and ZERO tools. Compact call/outcome metadata shares
4827
4845
  // the session hash chain, while advice text itself is never persisted.
4828
4846
  try {
4829
- const { createConfiguredAdvisorRuntime, invokeToolFreeAdvisor } =
4847
+ const { createConfiguredAdvisorRuntime } =
4830
4848
  await import("../lib/advisor-runtime.js");
4831
4849
  const advisorOverrides = {};
4832
4850
  if (options.advisorEnabled !== undefined) {
@@ -4841,17 +4859,8 @@ async function startAgentReplInWorkspaceOwned(
4841
4859
  baseUrl,
4842
4860
  apiKey,
4843
4861
  overrides: advisorOverrides,
4844
- invoke: (request) =>
4845
- _runReplMeteredModelCall({
4846
- callProvider: request?.provider,
4847
- callModel: request?.model,
4848
- source: "model",
4849
- call: ({ signal }) =>
4850
- invokeToolFreeAdvisor({
4851
- ...request,
4852
- signal: combineReplSignals(request?.signal, signal),
4853
- }),
4854
- }),
4862
+ ...(evolutionIngress === null ? {} : { evolutionIngress }),
4863
+ callWrapper: _directChatCallWrapper,
4855
4864
  onEvent: (event) => {
4856
4865
  if (!useJsonl || !sessionId) return;
4857
4866
  try {
@@ -5639,6 +5648,7 @@ async function startAgentReplInWorkspaceOwned(
5639
5648
  }
5640
5649
  try {
5641
5650
  const chatFn = createChatFn({
5651
+ ...(evolutionIngress === null ? {} : { evolutionIngress }),
5642
5652
  provider,
5643
5653
  model,
5644
5654
  baseUrl,
@@ -8012,7 +8022,7 @@ async function startAgentReplInWorkspaceOwned(
8012
8022
  ` ${chalk.cyan("/cowork graph <path>")} Code knowledge graph (ASCII)`,
8013
8023
  );
8014
8024
  logger.log(
8015
- ` ${chalk.cyan("/cowork decision <topic>")} Architecture decision tracking`,
8025
+ ` ${chalk.cyan("/cowork decision <path>")} Extract architecture decisions`,
8016
8026
  );
8017
8027
  logger.log("");
8018
8028
  } else if (subCmd === "debate" && coworkInput) {
@@ -8034,6 +8044,7 @@ async function startAgentReplInWorkspaceOwned(
8034
8044
  target: targetLabel,
8035
8045
  code,
8036
8046
  llmOptions: {
8047
+ ...(evolutionIngress === null ? {} : { evolutionIngress }),
8037
8048
  provider,
8038
8049
  model,
8039
8050
  baseUrl,
@@ -8073,6 +8084,7 @@ async function startAgentReplInWorkspaceOwned(
8073
8084
  const result = await compare({
8074
8085
  prompt: coworkInput,
8075
8086
  llmOptions: {
8087
+ ...(evolutionIngress === null ? {} : { evolutionIngress }),
8076
8088
  provider,
8077
8089
  model,
8078
8090
  baseUrl,
@@ -8099,12 +8111,11 @@ async function startAgentReplInWorkspaceOwned(
8099
8111
  }
8100
8112
  } else if (subCmd === "graph" && coworkInput) {
8101
8113
  try {
8102
- const { analyzeCodeKnowledgeGraph } =
8114
+ const { buildKnowledgeGraph } =
8103
8115
  await import("../lib/cowork/code-knowledge-graph-cli.js");
8104
8116
  process.stdout.write(chalk.gray("\n Analyzing code graph...\n"));
8105
- const result = await analyzeCodeKnowledgeGraph({
8106
- target: coworkInput,
8107
- llmOptions: { provider, model, baseUrl, apiKey },
8117
+ const result = await buildKnowledgeGraph({
8118
+ targetPath: path.resolve(coworkInput),
8108
8119
  });
8109
8120
  // ASCII dependency graph
8110
8121
  if (result.entities && result.entities.length > 0) {
@@ -8119,7 +8130,7 @@ async function startAgentReplInWorkspaceOwned(
8119
8130
  process.stdout.write(chalk.bold("\n Relationships:\n"));
8120
8131
  for (const rel of result.relationships.slice(0, 10)) {
8121
8132
  process.stdout.write(
8122
- ` ${rel.source} ${chalk.gray(`—${rel.type}→`)} ${rel.target}\n`,
8133
+ ` ${rel.from} ${chalk.gray(`—${rel.type}→`)} ${rel.to}\n`,
8123
8134
  );
8124
8135
  }
8125
8136
  }
@@ -8138,12 +8149,19 @@ async function startAgentReplInWorkspaceOwned(
8138
8149
  }
8139
8150
  } else if (subCmd === "decision" && coworkInput) {
8140
8151
  try {
8141
- const { analyzeDecisions } =
8152
+ const { extractDecisions } =
8142
8153
  await import("../lib/cowork/decision-kb-cli.js");
8143
8154
  process.stdout.write(chalk.gray("\n Analyzing decisions...\n"));
8144
- const result = await analyzeDecisions({
8145
- target: coworkInput,
8146
- llmOptions: { provider, model, baseUrl, apiKey },
8155
+ const result = await extractDecisions({
8156
+ targetPath: path.resolve(coworkInput),
8157
+ llmOptions: {
8158
+ ...(evolutionIngress === null ? {} : { evolutionIngress }),
8159
+ provider,
8160
+ model,
8161
+ baseUrl,
8162
+ apiKey,
8163
+ callWrapper: _directChatCallWrapper,
8164
+ },
8147
8165
  });
8148
8166
  if (result.decisions && result.decisions.length > 0) {
8149
8167
  process.stdout.write(chalk.bold(" Architecture Decisions:\n"));
@@ -8178,7 +8196,7 @@ async function startAgentReplInWorkspaceOwned(
8178
8196
  }
8179
8197
  } else {
8180
8198
  logger.info(
8181
- "Usage: /cowork debate <file> | compare <prompt> | graph <path> | decision <topic>",
8199
+ "Usage: /cowork debate <file> | compare <prompt> | graph <path> | decision <path>",
8182
8200
  );
8183
8201
  }
8184
8202
 
@@ -8281,6 +8299,7 @@ async function startAgentReplInWorkspaceOwned(
8281
8299
  // Lazy-init autonomous agent with LLM chat function
8282
8300
  if (!autonomousAgent._initialized) {
8283
8301
  const chatFn = createChatFn({
8302
+ ...(evolutionIngress === null ? {} : { evolutionIngress }),
8284
8303
  provider,
8285
8304
  model,
8286
8305
  baseUrl,
@@ -8289,7 +8308,10 @@ async function startAgentReplInWorkspaceOwned(
8289
8308
  });
8290
8309
  autonomousAgent.initialize({
8291
8310
  llmChat: chatFn,
8292
- toolExecutor: _runReplDirectTool,
8311
+ toolExecutor: (tool, args) =>
8312
+ _runReplDirectTool(tool, args, {
8313
+ signal: autonomousAgent.signal,
8314
+ }),
8293
8315
  });
8294
8316
  }
8295
8317
 
@@ -8401,6 +8423,16 @@ async function startAgentReplInWorkspaceOwned(
8401
8423
  logger.warn(result.error);
8402
8424
  }
8403
8425
  } catch (error) {
8426
+ if (
8427
+ error?.runtimeLedgerPersistence === true ||
8428
+ error?.code === "CC_AGENT_EVOLUTION_INGRESS_FAILED"
8429
+ ) {
8430
+ logger.error(
8431
+ "Plan approval stopped because Advisor admission or settlement failed.",
8432
+ );
8433
+ prompt();
8434
+ return;
8435
+ }
8404
8436
  logger.warn(`Advisor plan review skipped: ${error.message}`);
8405
8437
  }
8406
8438
  }
@@ -8492,6 +8524,7 @@ async function startAgentReplInWorkspaceOwned(
8492
8524
  const { TerminalInteractionAdapter } =
8493
8525
  await import("../lib/interaction-adapter.js");
8494
8526
  const chatFn = createChatFn({
8527
+ ...(evolutionIngress === null ? {} : { evolutionIngress }),
8495
8528
  provider,
8496
8529
  model,
8497
8530
  baseUrl,
@@ -9641,6 +9674,7 @@ async function startAgentReplInWorkspaceOwned(
9641
9674
  contextEngine,
9642
9675
  iterationBudget,
9643
9676
  sessionId,
9677
+ ...(evolutionIngress === null ? {} : { evolutionIngress }),
9644
9678
  persistUsageTelemetry: useJsonl,
9645
9679
  skillLoader: _replSkillLoader,
9646
9680
  skillOutcomeIndex: options.skillOutcomeIndex,
@@ -9748,6 +9782,7 @@ async function startAgentReplInWorkspaceOwned(
9748
9782
  source: "model",
9749
9783
  call: ({ signal }) =>
9750
9784
  chatWithTools([{ role: "user", content: p }], {
9785
+ ...(evolutionIngress === null ? {} : { evolutionIngress }),
9751
9786
  model: activeModel,
9752
9787
  provider,
9753
9788
  baseUrl,
@@ -9789,6 +9824,7 @@ async function startAgentReplInWorkspaceOwned(
9789
9824
  logger.log(chalk.cyan(l));
9790
9825
  if (done) _sessionGoal = null; // completed or exhausted → drop
9791
9826
  } catch (err) {
9827
+ if (err?.code === "CC_AGENT_EVOLUTION_INGRESS_FAILED") throw err;
9792
9828
  const terminalError = _runtimeLedgerTerminalLatch.trip(err);
9793
9829
  if (terminalError) _reportRuntimeLedgerTerminal();
9794
9830
  else logger.verbose(`/goal eval skipped: ${err.message}`);
@@ -9973,6 +10009,7 @@ async function startAgentReplInWorkspaceOwned(
9973
10009
  throw error;
9974
10010
  }
9975
10011
  if (error?.runtimeLedgerPersistence === true) throw error;
10012
+ if (error?.code === "CC_AGENT_EVOLUTION_INGRESS_FAILED") throw error;
9976
10013
  logger.warn(`Auto-compaction failed: ${error.message}`);
9977
10014
  }
9978
10015
  }
@@ -10060,6 +10097,7 @@ async function startAgentReplInWorkspaceOwned(
10060
10097
 
10061
10098
  rl.on("line", async (input) => {
10062
10099
  if (!(await _waitForReplOutput())) return;
10100
+ if (_replClosing) return;
10063
10101
  if (_runtimeLedgerTerminalLatch.isTripped()) {
10064
10102
  const terminalInput = input.trim();
10065
10103
  if (terminalInput === "/exit" || terminalInput === "/quit") {
@@ -10077,7 +10115,14 @@ async function startAgentReplInWorkspaceOwned(
10077
10115
  if (concurrentBtw) {
10078
10116
  // Intentionally do not await: the main turn keeps streaming while this
10079
10117
  // independent, tool-free snapshot call runs alongside it.
10080
- void runBtwSideQuestion(concurrentBtw, { concurrent: true });
10118
+ const sideCall = runBtwSideQuestion(concurrentBtw, {
10119
+ concurrent: true,
10120
+ });
10121
+ _activeBtwCalls.add(sideCall);
10122
+ void sideCall.then(
10123
+ () => _activeBtwCalls.delete(sideCall),
10124
+ () => _activeBtwCalls.delete(sideCall),
10125
+ );
10081
10126
  return;
10082
10127
  }
10083
10128
  if (input.trim()) {
@@ -10091,10 +10136,18 @@ async function startAgentReplInWorkspaceOwned(
10091
10136
  return;
10092
10137
  }
10093
10138
  _processingLine = true;
10139
+ let settleLine;
10140
+ _lineSettled = new Promise((resolve) => {
10141
+ settleLine = resolve;
10142
+ });
10094
10143
  try {
10095
10144
  await handleLine(input);
10096
10145
  if (!(await _waitForReplOutput())) return;
10097
- while (_pendingLines.length && !_runtimeLedgerTerminalLatch.isTripped()) {
10146
+ while (
10147
+ _pendingLines.length &&
10148
+ !_replClosing &&
10149
+ !_runtimeLedgerTerminalLatch.isTripped()
10150
+ ) {
10098
10151
  const next = _pendingLines.shift();
10099
10152
  logger.log(chalk.cyan(`▶ running queued input: ${next}`));
10100
10153
  await handleLine(next);
@@ -10102,6 +10155,8 @@ async function startAgentReplInWorkspaceOwned(
10102
10155
  }
10103
10156
  } finally {
10104
10157
  _processingLine = false;
10158
+ settleLine();
10159
+ _lineSettled = null;
10105
10160
  }
10106
10161
  });
10107
10162
 
@@ -10109,7 +10164,37 @@ async function startAgentReplInWorkspaceOwned(
10109
10164
  if (_replCleanupStarted) return;
10110
10165
  _replCleanupStarted = true;
10111
10166
  _replClosing = true;
10167
+ _pendingLines.length = 0;
10168
+ // Do not certify a Run while its model/tool or auxiliary usage settlement
10169
+ // is still in flight. EOF during a main turn cancels and leaves it incomplete.
10170
+ if (_turnAbort !== null) {
10171
+ const error = Object.assign(
10172
+ new Error("REPL closed during an active turn"),
10173
+ {
10174
+ code: "CC_AGENT_EVOLUTION_SESSION_INTERRUPTED",
10175
+ },
10176
+ );
10177
+ if (_evolutionSession !== null) _replOutputFailure ||= error;
10178
+ _turnAbort.abort(error);
10179
+ }
10112
10180
  _promptInteractions.dispose();
10181
+ // Autonomous goals outlive the input line that submitted them. Cancel
10182
+ // their next-step execution and wait for any current call to settle too.
10183
+ const autonomousShutdown = autonomousAgent.shutdown();
10184
+ void autonomousShutdown.catch(() => {});
10185
+ await _lineSettled;
10186
+ await Promise.allSettled([..._activeBtwCalls]);
10187
+ try {
10188
+ const { interrupted } = await autonomousShutdown;
10189
+ if (interrupted > 0 && _evolutionSession !== null) {
10190
+ _replOutputFailure ||= Object.assign(
10191
+ new Error("REPL closed during an autonomous goal"),
10192
+ { code: "CC_AGENT_EVOLUTION_SESSION_INTERRUPTED" },
10193
+ );
10194
+ }
10195
+ } catch (error) {
10196
+ _replOutputFailure ||= error;
10197
+ }
10113
10198
  if (process.stdin.isTTY) {
10114
10199
  if (_replKeypressHandler) {
10115
10200
  process.stdin.removeListener("keypress", _replKeypressHandler);
@@ -10194,10 +10279,14 @@ async function startAgentReplInWorkspaceOwned(
10194
10279
  }
10195
10280
  }
10196
10281
  // Fire SessionEnd hook before shutdown (fire-and-forget)
10197
- await fireSessionHook(_hookDb, HookEvents.SessionEnd, {
10198
- sessionId,
10199
- messageCount: messages.length,
10200
- });
10282
+ try {
10283
+ await fireSessionHook(_hookDb, HookEvents.SessionEnd, {
10284
+ sessionId,
10285
+ messageCount: messages.length,
10286
+ });
10287
+ } catch (error) {
10288
+ _replOutputFailure ||= error;
10289
+ }
10201
10290
 
10202
10291
  // Phase H — park the SessionManager handle on clean exit so the session
10203
10292
  // can be resumed later via `cc session unpark <id>`. `--no-park-on-exit`
@@ -10323,6 +10412,15 @@ async function startAgentReplInWorkspaceOwned(
10323
10412
  _replOutputFailure ||= error;
10324
10413
  }
10325
10414
  }
10415
+ if (_evolutionSession !== null) {
10416
+ try {
10417
+ await _evolutionSession.close(
10418
+ _replOutputFailure || _runtimeLedgerTerminalLatch.error() || null,
10419
+ );
10420
+ } catch (error) {
10421
+ _replOutputFailure ||= error;
10422
+ }
10423
+ }
10326
10424
  const outputExitCode = _replOutputFailure
10327
10425
  ? _replOutputFailure.code === "EPIPE"
10328
10426
  ? 0
@@ -10343,4 +10441,5 @@ async function startAgentReplInWorkspaceOwned(
10343
10441
  }
10344
10442
  });
10345
10443
  }
10444
+ return _evolutionSession?.handle;
10346
10445
  }