chainlesschain 0.166.26 → 0.166.29

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 (177) hide show
  1. package/package.json +1 -1
  2. package/src/assets/web-panel/assets/{AIOps-Z8_dnLd8.js → AIOps-D4Dhiipq.js} +1 -1
  3. package/src/assets/web-panel/assets/{ActionButton-C4bKCISV.js → ActionButton-P6fPjlUB.js} +1 -1
  4. package/src/assets/web-panel/assets/{Analytics-GztAv2jy.js → Analytics-CzeKpXdh.js} +3 -3
  5. package/src/assets/web-panel/assets/{AppLayout-DEqNcuVx.js → AppLayout-Cj8CqntA.js} +4 -4
  6. package/src/assets/web-panel/assets/{Artifacts-D-R4Ehap.js → Artifacts-BOe7lviy.js} +1 -1
  7. package/src/assets/web-panel/assets/{Audit-mzzdTIlM.js → Audit-D6kxPJyo.js} +1 -1
  8. package/src/assets/web-panel/assets/{BackgroundAgents-DS2QupIC.js → BackgroundAgents-OVuYY65D.js} +1 -1
  9. package/src/assets/web-panel/assets/{Backup-CQSirC39.js → Backup-UAlkEXOa.js} +1 -1
  10. package/src/assets/web-panel/assets/{BaseInput-Bhuc-eOV.js → BaseInput-DikQWFIL.js} +1 -1
  11. package/src/assets/web-panel/assets/{Chat-B-RLVGnt.js → Chat-CEpqrZcV.js} +6 -6
  12. package/src/assets/web-panel/assets/ChatBubbleRenderer-BLE9L1yw.js +1 -0
  13. package/src/assets/web-panel/assets/{Checkbox-DxwgBryW.js → Checkbox-D2mdaw7o.js} +1 -1
  14. package/src/assets/web-panel/assets/{Codegen-Cwrm-7nh.js → Codegen-CJ2LEcdr.js} +1 -1
  15. package/src/assets/web-panel/assets/{Col-DrSCT-nF.js → Col-ej56LWvr.js} +1 -1
  16. package/src/assets/web-panel/assets/{Community-DY2D9WNs.js → Community-D9neNmTp.js} +1 -1
  17. package/src/assets/web-panel/assets/{Compact-o-tV0URw.js → Compact-BzWfgovR.js} +1 -1
  18. package/src/assets/web-panel/assets/{Compliance-Bndh6S8f.js → Compliance-dStoa8Mw.js} +1 -1
  19. package/src/assets/web-panel/assets/{Cowork-CSNQODak.js → Cowork-BxYPXbQl.js} +3 -3
  20. package/src/assets/web-panel/assets/{Cron-CTgxRHdy.js → Cron-DxOQIcrL.js} +2 -2
  21. package/src/assets/web-panel/assets/{Crosschain-BJoGQzDI.js → Crosschain-BYyOjqVA.js} +1 -1
  22. package/src/assets/web-panel/assets/{DID-V0Ztm8ne.js → DID-c81gsUZq.js} +2 -2
  23. package/src/assets/web-panel/assets/{Dashboard-B-38THOj.js → Dashboard-CHIjYxb2.js} +2 -2
  24. package/src/assets/web-panel/assets/{Dropdown-B3FdOwMO.js → Dropdown-C7hRZzkL.js} +1 -1
  25. package/src/assets/web-panel/assets/{EmailListRenderer-YQDz4mUF.js → EmailListRenderer--h_ShKAT.js} +1 -1
  26. package/src/assets/web-panel/assets/{FamilyGuardDashboard-DYE45IF9.js → FamilyGuardDashboard-Bq68asD0.js} +1 -1
  27. package/src/assets/web-panel/assets/{Federation-DjBFjdRZ.js → Federation-DGKsWpUO.js} +1 -1
  28. package/src/assets/web-panel/assets/{FormItemContext-CVTXEa0R.js → FormItemContext-1HbCXJAf.js} +1 -1
  29. package/src/assets/web-panel/assets/{GenericCardRenderer-B6Tkke8X.js → GenericCardRenderer-BlKJ93Fy.js} +1 -1
  30. package/src/assets/web-panel/assets/{Git-CD0hyAzT.js → Git-DJA-kxuw.js} +2 -2
  31. package/src/assets/web-panel/assets/{Governance-CWOQQJr8.js → Governance-BWZPtzHj.js} +1 -1
  32. package/src/assets/web-panel/assets/{Inference-lHYwUk-C.js → Inference-D3QXUTYP.js} +1 -1
  33. package/src/assets/web-panel/assets/{KnowledgeGraph-Cledxv7t.js → KnowledgeGraph-BM37hWOP.js} +1 -1
  34. package/src/assets/web-panel/assets/{Logs-D45mt-rM.js → Logs-Bpu4Of_0.js} +2 -2
  35. package/src/assets/web-panel/assets/MarkdownRenderer-DAZcw_ZS.js +1 -0
  36. package/src/assets/web-panel/assets/{Marketplace-Yy30UZPw.js → Marketplace-BZe0jmAU.js} +1 -1
  37. package/src/assets/web-panel/assets/{McpTools-Cil5l-bh.js → McpTools-_q_nfUnU.js} +3 -3
  38. package/src/assets/web-panel/assets/{Memory-DdJcnyqy.js → Memory-CIzcovHt.js} +2 -2
  39. package/src/assets/web-panel/assets/{MobileBridge-IrzFYHEv.js → MobileBridge-DZzo5UjF.js} +1 -1
  40. package/src/assets/web-panel/assets/{MobileProjects-D8q64LMd.js → MobileProjects-DVZr9bVO.js} +1 -1
  41. package/src/assets/web-panel/assets/{Mtc-CpdTJzW7.js → Mtc-pULSsEOx.js} +4 -4
  42. package/src/assets/web-panel/assets/{MtcAudit-C7Tvw2m6.js → MtcAudit-BLz9fiz0.js} +2 -2
  43. package/src/assets/web-panel/assets/{Multisig-Dmj9F5Kr.js → Multisig-B1qxfPkT.js} +3 -3
  44. package/src/assets/web-panel/assets/{NLProgramming-C9Xchob5.js → NLProgramming-Bkb9YB7P.js} +1 -1
  45. package/src/assets/web-panel/assets/{Notes-Bzq6Yry5.js → Notes-N0G87PD1.js} +4 -4
  46. package/src/assets/web-panel/assets/{NotificationSettings-DxG9eKb4.js → NotificationSettings-D0jB-hRv.js} +1 -1
  47. package/src/assets/web-panel/assets/{OrderTableRenderer-BS_IYoCe.js → OrderTableRenderer-soFvgov0.js} +1 -1
  48. package/src/assets/web-panel/assets/{Organization-kazsRvcq.js → Organization-BNBL1-7S.js} +4 -4
  49. package/src/assets/web-panel/assets/{Overflow-i4wP-hwn.js → Overflow-yqaJxwEo.js} +1 -1
  50. package/src/assets/web-panel/assets/{P2P-CfGeU3h-.js → P2P-1JHDOnl3.js} +2 -2
  51. package/src/assets/web-panel/assets/{PdhVaultBrowser-CS-VhVUx.js → PdhVaultBrowser-D1FgaOLV.js} +5 -5
  52. package/src/assets/web-panel/assets/{Permissions-DnEHXs0I.js → Permissions-DOQh1Wzv.js} +4 -4
  53. package/src/assets/web-panel/assets/{PersonalDataHub-DeD82qke.js → PersonalDataHub-SVa21bUw.js} +5 -5
  54. package/src/assets/web-panel/assets/{Pipeline-CMGGLgBY.js → Pipeline-Du3gCATi.js} +1 -1
  55. package/src/assets/web-panel/assets/{Privacy-CvHoFv32.js → Privacy-CPW8EDaC.js} +1 -1
  56. package/src/assets/web-panel/assets/{ProjectInit-DnJapCc1.js → ProjectInit-CAu5N0A_.js} +2 -2
  57. package/src/assets/web-panel/assets/{ProjectSettings-CqVdv3-g.js → ProjectSettings-DVTow6ty.js} +2 -2
  58. package/src/assets/web-panel/assets/{Projects-B_o8vcs_.js → Projects-CBUF9hPa.js} +1 -1
  59. package/src/assets/web-panel/assets/{Providers-CPKseoDW.js → Providers-B7pNEoaY.js} +1 -1
  60. package/src/assets/web-panel/assets/{QrScannerModal-_iBfKbPQ.js → QrScannerModal-BHs1Kx7e.js} +1 -1
  61. package/src/assets/web-panel/assets/{QuickAsk-CMrlZ69a.js → QuickAsk-IBrdC5B5.js} +1 -1
  62. package/src/assets/web-panel/assets/{Recommend-BwDtSZ0l.js → Recommend-BtkLuO-e.js} +1 -1
  63. package/src/assets/web-panel/assets/{RemoteSession-DomUAtn4.js → RemoteSession-Du4_izg3.js} +2 -2
  64. package/src/assets/web-panel/assets/{Reputation-Cuu2GCHr.js → Reputation-IEbMZN6v.js} +1 -1
  65. package/src/assets/web-panel/assets/{Row-C7GVts31.js → Row-D5UM_ivw.js} +1 -1
  66. package/src/assets/web-panel/assets/{RssFeed-DRKvgEog.js → RssFeed-DTTNnkdJ.js} +3 -3
  67. package/src/assets/web-panel/assets/{Search-BGI9wOeA.js → Search-B5f7ggJE.js} +1 -1
  68. package/src/assets/web-panel/assets/{Security-BlLaHy_L.js → Security-CsZp2uGu.js} +3 -3
  69. package/src/assets/web-panel/assets/{Services-DFqZbjmX.js → Services-BJhguqIh.js} +2 -2
  70. package/src/assets/web-panel/assets/{Skeleton-BCGxdooP.js → Skeleton-CAwO2JUK.js} +1 -1
  71. package/src/assets/web-panel/assets/{Skills-CwFKgcmm.js → Skills-hKJcP390.js} +1 -1
  72. package/src/assets/web-panel/assets/{Sla-CiXXh9eS.js → Sla-BCFiB8oS.js} +1 -1
  73. package/src/assets/web-panel/assets/{SpeechSettings-WSx2CLqO.js → SpeechSettings-Bi1Y-Tgf.js} +1 -1
  74. package/src/assets/web-panel/assets/{SyncSettings-BBIqQOtW.js → SyncSettings-ZHYDv46g.js} +2 -2
  75. package/src/assets/web-panel/assets/{Tasks-D1BGLjO1.js → Tasks-BMCSrUy-.js} +1 -1
  76. package/src/assets/web-panel/assets/{Templates-CUIl9axA.js → Templates-DF_FOEH8.js} +1 -1
  77. package/src/assets/web-panel/assets/{Tenant-BFZJ0hNz.js → Tenant-C7Q2LriV.js} +1 -1
  78. package/src/assets/web-panel/assets/{Terminal-Cw-3eYVn.js → Terminal-C59ckWXW.js} +2 -2
  79. package/src/assets/web-panel/assets/{TimelineRenderer-bOVPB56L.js → TimelineRenderer-Biu1m6Uf.js} +1 -1
  80. package/src/assets/web-panel/assets/{Tokens-Czfyq2VY.js → Tokens-CoHYWg3-.js} +1 -1
  81. package/src/assets/web-panel/assets/{Trigger-C-o4uJY0.js → Trigger-DglXXzEp.js} +1 -1
  82. package/src/assets/web-panel/assets/{Trust-BKq_S6iF.js → Trust-CBBLh73r.js} +1 -1
  83. package/src/assets/web-panel/assets/{UkeySign-fKlWUvMx.js → UkeySign-DuNdKeiD.js} +1 -1
  84. package/src/assets/web-panel/assets/{VideoEditing-DB5MLuS7.js → VideoEditing-BizHWVrh.js} +1 -1
  85. package/src/assets/web-panel/assets/{Wallet-WGXBn7IS.js → Wallet-ClUQGSKi.js} +4 -4
  86. package/src/assets/web-panel/assets/{WebAuthn-B8TC4EMF.js → WebAuthn-zyD7K5f5.js} +4 -4
  87. package/src/assets/web-panel/assets/{WorkflowEditor-DLY--KmM.js → WorkflowEditor-qbTI37Fi.js} +1 -1
  88. package/src/assets/web-panel/assets/{chat-Crw3XQaA.js → chat-CHv66tBY.js} +1 -1
  89. package/src/assets/web-panel/assets/{colors-CxhWauPV.js → colors-vBsvcJjY.js} +1 -1
  90. package/src/assets/web-panel/assets/{compact-item-Cp3ojtk5.js → compact-item-CdBQZWFX.js} +1 -1
  91. package/src/assets/web-panel/assets/{createContext-CRuRXjSo.js → createContext-CLE2XsPX.js} +1 -1
  92. package/src/assets/web-panel/assets/devWarning-DRQGMdYB.js +1 -0
  93. package/src/assets/web-panel/assets/{hasIn-XGW474dj.js → hasIn-Du5rnUSg.js} +1 -1
  94. package/src/assets/web-panel/assets/{index-C73pqyDb.js → index-9nDAQkO-.js} +1 -1
  95. package/src/assets/web-panel/assets/{index-DHNixOg_.js → index-B-3GrN7D.js} +1 -1
  96. package/src/assets/web-panel/assets/{index-DUSVsOGS.js → index-BDaW0C3l.js} +1 -1
  97. package/src/assets/web-panel/assets/{index-BXnNbbwa.js → index-BY0Jg8JC.js} +1 -1
  98. package/src/assets/web-panel/assets/{index-Yq3bFbYX.js → index-Bdfg7CY3.js} +1 -1
  99. package/src/assets/web-panel/assets/{index-BW028Pwn.js → index-BnZkmomS.js} +1 -1
  100. package/src/assets/web-panel/assets/{index-DBcBsJYg.js → index-BojUN0eY.js} +1 -1
  101. package/src/assets/web-panel/assets/{index-DoUC5_ry.js → index-BrFwv-2v.js} +1 -1
  102. package/src/assets/web-panel/assets/{index-CPFam-me.js → index-Bu3v3PRU.js} +1 -1
  103. package/src/assets/web-panel/assets/{index-J_08R33H.js → index-BuSZyAD0.js} +1 -1
  104. package/src/assets/web-panel/assets/{index-WvNZXbIO.js → index-Bwqa-FcB.js} +1 -1
  105. package/src/assets/web-panel/assets/{index-rsACoVT9.js → index-ByEfQiLz.js} +1 -1
  106. package/src/assets/web-panel/assets/{index-DhomnuaB.js → index-CKoOU-ne.js} +1 -1
  107. package/src/assets/web-panel/assets/index-CPJgV0Ho.js +1 -0
  108. package/src/assets/web-panel/assets/{index-DfPLIA-f.js → index-CRiOcWZ1.js} +1 -1
  109. package/src/assets/web-panel/assets/{index-BuVA26SD.js → index-Ca0WeKz1.js} +1 -1
  110. package/src/assets/web-panel/assets/{index-E-RSfImO.js → index-Cc53mZoS.js} +1 -1
  111. package/src/assets/web-panel/assets/{index-C8UOVaUH.js → index-CigkcWWh.js} +1 -1
  112. package/src/assets/web-panel/assets/{index-qzmihx1d.js → index-Cuvyt0vv.js} +1 -1
  113. package/src/assets/web-panel/assets/{index-BUWZ57T4.js → index-CvHjeRw2.js} +1 -1
  114. package/src/assets/web-panel/assets/{index-BetOkRLs.js → index-CxmlGwpv.js} +1 -1
  115. package/src/assets/web-panel/assets/{index-B5fJS-kn.js → index-Cz48QuqC.js} +1 -1
  116. package/src/assets/web-panel/assets/{index-nJR64pA_.js → index-D-KoBLmE.js} +1 -1
  117. package/src/assets/web-panel/assets/{index-Dp2nC5On.js → index-D-jjL85C.js} +1 -1
  118. package/src/assets/web-panel/assets/{index-BYkjs7eP.js → index-DADajBnD.js} +1 -1
  119. package/src/assets/web-panel/assets/{index-BElgeKJ0.js → index-DHdrZp_q.js} +3 -3
  120. package/src/assets/web-panel/assets/{index-QqAuH7-S.js → index-DHhNie07.js} +1 -1
  121. package/src/assets/web-panel/assets/{index-jrIcbPUa.js → index-DnB7oqAR.js} +1 -1
  122. package/src/assets/web-panel/assets/{index-Ctu98x57.js → index-DsyYG63S.js} +1 -1
  123. package/src/assets/web-panel/assets/{index-CTE32qol.js → index-Dv9b_iFq.js} +1 -1
  124. package/src/assets/web-panel/assets/{index-CdlfrcC-.js → index-DzYEc47A.js} +1 -1
  125. package/src/assets/web-panel/assets/index-OtXVaszG.js +1 -0
  126. package/src/assets/web-panel/assets/{index-CDIpH_8Q.js → index-aYAtijnz.js} +1 -1
  127. package/src/assets/web-panel/assets/{index-38TRdZb6.js → index-dEhWAtoe.js} +1 -1
  128. package/src/assets/web-panel/assets/{index-DxOtBFVy.js → index-q3sGyZnD.js} +1 -1
  129. package/src/assets/web-panel/assets/{index-B45Vkh3T.js → index-sLcRd9pi.js} +1 -1
  130. package/src/assets/web-panel/assets/{index-BVmSfIkJ.js → index-sz6sGerd.js} +1 -1
  131. package/src/assets/web-panel/assets/{index-De2FN0xN.js → index-uHX8ZrJ9.js} +1 -1
  132. package/src/assets/web-panel/assets/{index-W8_0yAi_.js → index-x_0JRAO3.js} +1 -1
  133. package/src/assets/web-panel/assets/{initDefaultProps-DAu-hgme.js → initDefaultProps-CThtsKhS.js} +1 -1
  134. package/src/assets/web-panel/assets/{motion-Db8yk0Hu.js → motion-BoqT16ZT.js} +1 -1
  135. package/src/assets/web-panel/assets/{move-Cii2jOin.js → move-1Jf6ZXg5.js} +1 -1
  136. package/src/assets/web-panel/assets/{mtc-parser-CnZBDkyZ.js → mtc-parser-DjfCYvnq.js} +1 -1
  137. package/src/assets/web-panel/assets/{omit-Buzt1FTL.js → omit-BaJPeP5Y.js} +1 -1
  138. package/src/assets/web-panel/assets/{pickAttrs-CpZ_NmE6.js → pickAttrs-B7nqrfVR.js} +1 -1
  139. package/src/assets/web-panel/assets/{placementArrow-mBrx3dYm.js → placementArrow-Dmb7i435.js} +1 -1
  140. package/src/assets/web-panel/assets/{responsiveObserve-DC_QzljB.js → responsiveObserve-B0TqfHJR.js} +1 -1
  141. package/src/assets/web-panel/assets/{slide-DT_UVED-.js → slide-C9PINvAM.js} +1 -1
  142. package/src/assets/web-panel/assets/{statusUtils-78t6eNLV.js → statusUtils-DAug5z5S.js} +1 -1
  143. package/src/assets/web-panel/assets/{styleChecker-CV_T1ULL.js → styleChecker-o6QvGnrq.js} +1 -1
  144. package/src/assets/web-panel/assets/{useFlexGapSupport-s8edGuXD.js → useFlexGapSupport-CtZwQFCt.js} +1 -1
  145. package/src/assets/web-panel/assets/{useFs-Pk9dH2HC.js → useFs-B0HVNsmA.js} +1 -1
  146. package/src/assets/web-panel/assets/{usePersonalDataHub-B_GqAm8c.js → usePersonalDataHub-CbLIg5eO.js} +1 -1
  147. package/src/assets/web-panel/assets/{vnode-Cxyss24q.js → vnode-uOK2NMHj.js} +1 -1
  148. package/src/assets/web-panel/assets/{zoom-0UY3cOuc.js → zoom-BhyA2sIv.js} +1 -1
  149. package/src/assets/web-panel/index.html +1 -1
  150. package/src/commands/ask.js +84 -5
  151. package/src/commands/chat.js +67 -1
  152. package/src/commands/compact.js +81 -2
  153. package/src/commands/complete.js +64 -5
  154. package/src/commands/cowork.js +133 -0
  155. package/src/commands/orchestrate.js +18 -7
  156. package/src/data/changelog.json +26 -0
  157. package/src/gateways/ws/action-protocol.js +2 -0
  158. package/src/lib/agent-router.js +116 -36
  159. package/src/lib/cowork-task-runner.js +107 -4
  160. package/src/lib/evolution/agent-evolution-ingress.js +231 -40
  161. package/src/lib/evolution/agent-evolution-runtime-composition.js +85 -5
  162. package/src/lib/evolution/evolution-deployment-loader.js +17 -1
  163. package/src/lib/evolution/evolution-evidence-projector.js +25 -6
  164. package/src/lib/model-failure-policy.js +10 -0
  165. package/src/lib/orchestrator.js +97 -27
  166. package/src/lib/read-file-loop-guard.js +33 -10
  167. package/src/lib/sub-agent-context.js +37 -2
  168. package/src/lib/task-progress-tracker.js +223 -0
  169. package/src/repl/chat-repl.js +60 -10
  170. package/src/runtime/agent-core.js +186 -16
  171. package/src/runtime/agent-runtime.js +20 -1
  172. package/src/runtime/runtime-factory.js +1 -1
  173. package/src/assets/web-panel/assets/ChatBubbleRenderer-CBbMoVuE.js +0 -1
  174. package/src/assets/web-panel/assets/MarkdownRenderer-DJjPaOnM.js +0 -1
  175. package/src/assets/web-panel/assets/devWarning-CKAQY2zn.js +0 -1
  176. package/src/assets/web-panel/assets/index-Cetfwq8j.js +0 -1
  177. package/src/assets/web-panel/assets/index-DOpcRO2-.js +0 -1
@@ -20,6 +20,9 @@
20
20
  */
21
21
 
22
22
  import chalk from "chalk";
23
+ import { randomUUID } from "node:crypto";
24
+ import { types as utilTypes } from "node:util";
25
+ import { captureAgentEvolutionRuntimeComposition } from "../lib/evolution/agent-evolution-runtime-composition-brand.js";
23
26
  import { logger } from "../lib/logger.js";
24
27
  import {
25
28
  appendAuthorityEventIfHead,
@@ -85,7 +88,14 @@ function attachMeteringMetadata(value, { callId, settled }) {
85
88
  }
86
89
  }
87
90
 
88
- function buildSemanticQuery(options, recorded, sessionId, operationId, ledger) {
91
+ function buildSemanticQuery(
92
+ options,
93
+ recorded,
94
+ sessionId,
95
+ operationId,
96
+ ledger,
97
+ evolutionCompositionFactory,
98
+ ) {
89
99
  const provider = options.provider || recorded.provider || undefined;
90
100
  const model = options.model || recorded.model || undefined;
91
101
  // A preview must be both write-free and spend-free. It uses the same
@@ -97,6 +107,44 @@ function buildSemanticQuery(options, recorded, sessionId, operationId, ledger) {
97
107
  return async (prompt) => {
98
108
  let callId = null;
99
109
  try {
110
+ let ingress = null;
111
+ if (evolutionCompositionFactory !== null) {
112
+ try {
113
+ const runId = `compact-run-${randomUUID()}`;
114
+ const composition = captureAgentEvolutionRuntimeComposition(
115
+ await evolutionCompositionFactory(
116
+ Object.freeze({
117
+ mode: "compact",
118
+ runId,
119
+ sessionId,
120
+ operationId,
121
+ cwd: process.cwd(),
122
+ }),
123
+ ),
124
+ );
125
+ ingress = composition.evolutionIngress;
126
+ if (
127
+ composition.runId !== runId ||
128
+ ingress.runId !== runId ||
129
+ composition.tenantId !== ingress.tenantId
130
+ ) {
131
+ throw new Error(
132
+ "Compact evolution composition is not bound to the requested Run",
133
+ );
134
+ }
135
+ await ingress.start();
136
+ await ingress.ingestUserPrompt({
137
+ content: prompt,
138
+ source: "compact",
139
+ });
140
+ } catch (cause) {
141
+ const error = new Error("Compact evolution admission failed", {
142
+ cause,
143
+ });
144
+ error.code = "CC_AGENT_EVOLUTION_INGRESS_FAILED";
145
+ throw error;
146
+ }
147
+ }
100
148
  const response = await runMeteredDirectModelCall({
101
149
  sessionId,
102
150
  provider,
@@ -129,8 +177,16 @@ function buildSemanticQuery(options, recorded, sessionId, operationId, ledger) {
129
177
  hostManagedToolPolicy: null,
130
178
  contextEngine: null,
131
179
  maxOutputTokens: 2048,
180
+ ...(ingress === null ? {} : { evolutionIngress: ingress }),
132
181
  }),
133
182
  });
183
+ if (ingress !== null) {
184
+ await ingress.ingestAgentEvent({
185
+ type: "response-complete",
186
+ content: response?.message?.content || "",
187
+ });
188
+ await ingress.complete();
189
+ }
134
190
  return {
135
191
  summary: response?.message?.content || "",
136
192
  usage: response?.usage || null,
@@ -373,7 +429,29 @@ function readCompactSource(sessionId) {
373
429
  });
374
430
  }
375
431
 
376
- export function registerCompactCommand(program) {
432
+ export function registerCompactCommand(program, dependencies = {}) {
433
+ if (
434
+ !dependencies ||
435
+ typeof dependencies !== "object" ||
436
+ Array.isArray(dependencies) ||
437
+ utilTypes.isProxy(dependencies)
438
+ ) {
439
+ throw new TypeError("Compact command dependencies must be a plain object");
440
+ }
441
+ const descriptor = Object.getOwnPropertyDescriptor(
442
+ dependencies,
443
+ "evolutionCompositionFactory",
444
+ );
445
+ if (
446
+ descriptor &&
447
+ (!Object.hasOwn(descriptor, "value") ||
448
+ typeof descriptor.value !== "function")
449
+ ) {
450
+ throw new TypeError(
451
+ "Compact evolution composition factory must be a function data property",
452
+ );
453
+ }
454
+ const evolutionCompositionFactory = descriptor?.value ?? null;
377
455
  program
378
456
  .command("compact <session-id>")
379
457
  .description(
@@ -430,6 +508,7 @@ export function registerCompactCommand(program) {
430
508
  sessionId,
431
509
  operationId,
432
510
  ledger,
511
+ evolutionCompositionFactory,
433
512
  );
434
513
  const compressor = buildCompressor(options, source.recorded, llmQuery);
435
514
  const memoryRevision =
@@ -13,6 +13,9 @@
13
13
  * makes it snappier.
14
14
  */
15
15
  import { loadConfig } from "../lib/config-manager.js";
16
+ import { randomUUID } from "node:crypto";
17
+ import { types as utilTypes } from "node:util";
18
+ import { captureAgentEvolutionRuntimeComposition } from "../lib/evolution/agent-evolution-runtime-composition-brand.js";
16
19
  import { resolveOllamaBaseUrl, queryLLM } from "./ask.js";
17
20
 
18
21
  /** Hard cap so a runaway model can't flood the editor with a whole file. */
@@ -73,7 +76,29 @@ function readStdin() {
73
76
  });
74
77
  }
75
78
 
76
- export function registerCompleteCommand(program) {
79
+ export function registerCompleteCommand(program, dependencies = {}) {
80
+ if (
81
+ !dependencies ||
82
+ typeof dependencies !== "object" ||
83
+ Array.isArray(dependencies) ||
84
+ utilTypes.isProxy(dependencies)
85
+ ) {
86
+ throw new TypeError("Complete command dependencies must be a plain object");
87
+ }
88
+ const descriptor = Object.getOwnPropertyDescriptor(
89
+ dependencies,
90
+ "evolutionCompositionFactory",
91
+ );
92
+ if (
93
+ descriptor &&
94
+ (!Object.hasOwn(descriptor, "value") ||
95
+ typeof descriptor.value !== "function")
96
+ ) {
97
+ throw new TypeError(
98
+ "Complete evolutionCompositionFactory must be a function data property",
99
+ );
100
+ }
101
+ const evolutionCompositionFactory = descriptor?.value ?? null;
77
102
  program
78
103
  .command("complete")
79
104
  .description(
@@ -125,10 +150,44 @@ export function registerCompleteCommand(program) {
125
150
  : options.baseUrl || config.llm?.baseUrl;
126
151
 
127
152
  try {
128
- const reply = await queryLLM(
129
- buildFimPrompt(prefix, suffix, language),
130
- resolvedOptions,
131
- );
153
+ const prompt = buildFimPrompt(prefix, suffix, language);
154
+ let ingress = null;
155
+ if (evolutionCompositionFactory !== null) {
156
+ const runId = `complete-${randomUUID()}`;
157
+ const composition = captureAgentEvolutionRuntimeComposition(
158
+ await evolutionCompositionFactory(
159
+ Object.freeze({
160
+ mode: "complete",
161
+ runId,
162
+ taskId: runId,
163
+ cwd: process.cwd(),
164
+ }),
165
+ ),
166
+ );
167
+ ingress = composition.evolutionIngress;
168
+ if (
169
+ composition.runId !== runId ||
170
+ ingress.runId !== runId ||
171
+ composition.tenantId !== ingress.tenantId
172
+ ) {
173
+ throw new Error(
174
+ "Complete evolution composition is not bound to the requested Run",
175
+ );
176
+ }
177
+ await ingress.start();
178
+ await ingress.ingestUserPrompt({
179
+ content: prompt,
180
+ source: "complete",
181
+ });
182
+ }
183
+ const reply = await queryLLM(prompt, resolvedOptions, ingress);
184
+ if (ingress !== null) {
185
+ await ingress.ingestAgentEvent({
186
+ type: "response-complete",
187
+ content: reply,
188
+ });
189
+ await ingress.complete();
190
+ }
132
191
  emit(cleanCompletion(reply), {
133
192
  model: resolvedOptions.model,
134
193
  provider,
@@ -7,11 +7,85 @@ import chalk from "chalk";
7
7
  import ora from "ora";
8
8
  import fs from "fs";
9
9
  import path from "path";
10
+ import { randomUUID } from "node:crypto";
11
+ import { types as utilTypes } from "node:util";
10
12
  import { logger } from "../lib/logger.js";
13
+ import { captureAgentEvolutionRuntimeComposition } from "../lib/evolution/agent-evolution-runtime-composition.js";
11
14
 
12
15
  const SESSION_EXECUTION_LOCATION_AUTHORITY_SCHEMA =
13
16
  "cc-session-execution-location-authority/v1";
14
17
 
18
+ function captureCoworkEvolutionCompositionFactory(commandDeps) {
19
+ if (
20
+ commandDeps === null ||
21
+ typeof commandDeps !== "object" ||
22
+ Array.isArray(commandDeps) ||
23
+ utilTypes.isProxy(commandDeps)
24
+ ) {
25
+ throw new TypeError("Cowork command dependencies must be a plain object");
26
+ }
27
+ const descriptor = Object.getOwnPropertyDescriptor(
28
+ commandDeps,
29
+ "evolutionCompositionFactory",
30
+ );
31
+ if (!descriptor) return null;
32
+ if (
33
+ !Object.hasOwn(descriptor, "value") ||
34
+ typeof descriptor.value !== "function"
35
+ ) {
36
+ throw new TypeError(
37
+ "Cowork evolutionCompositionFactory must be a function data property",
38
+ );
39
+ }
40
+ return descriptor.value;
41
+ }
42
+
43
+ async function startCoworkCommandEvolution(
44
+ evolutionCompositionFactory,
45
+ { mode, content, source },
46
+ ) {
47
+ if (evolutionCompositionFactory === null) return null;
48
+ try {
49
+ const runId = `cowork-${mode}-${randomUUID()}`;
50
+ const composition = captureAgentEvolutionRuntimeComposition(
51
+ await evolutionCompositionFactory(
52
+ Object.freeze({
53
+ mode: `cowork-${mode}`,
54
+ runId,
55
+ taskId: runId,
56
+ cwd: process.cwd(),
57
+ }),
58
+ ),
59
+ );
60
+ const ingress = composition.evolutionIngress;
61
+ if (
62
+ composition.runId !== runId ||
63
+ ingress.runId !== runId ||
64
+ composition.tenantId !== ingress.tenantId
65
+ ) {
66
+ throw new Error(
67
+ "Cowork evolution composition is not bound to the requested Run",
68
+ );
69
+ }
70
+ await ingress.start();
71
+ await ingress.ingestUserPrompt({ content, source });
72
+ return Object.freeze({ composition, ingress });
73
+ } catch (cause) {
74
+ const error = new Error("Cowork evolution admission failed", { cause });
75
+ error.code = "CC_AGENT_EVOLUTION_INGRESS_FAILED";
76
+ throw error;
77
+ }
78
+ }
79
+
80
+ async function completeCoworkCommandEvolution(evolution, result) {
81
+ if (evolution === null) return;
82
+ await evolution.ingress.ingestAgentEvent({
83
+ type: "response-complete",
84
+ content: result,
85
+ });
86
+ await evolution.ingress.complete();
87
+ }
88
+
15
89
  function workflowAuthorityError(code, message) {
16
90
  const error = new Error(message);
17
91
  error.code = code;
@@ -114,6 +188,8 @@ function verifyWorkflowRunAuthorities(
114
188
  }
115
189
 
116
190
  export function registerCoworkCommand(program, commandDeps = {}) {
191
+ const evolutionCompositionFactory =
192
+ captureCoworkEvolutionCompositionFactory(commandDeps);
117
193
  const cowork = program
118
194
  .command("cowork")
119
195
  .description(
@@ -164,9 +240,20 @@ export function registerCoworkCommand(program, commandDeps = {}) {
164
240
  ).start();
165
241
 
166
242
  try {
243
+ const evolution = await startCoworkCommandEvolution(
244
+ evolutionCompositionFactory,
245
+ {
246
+ mode: "debate",
247
+ content: code,
248
+ source: "cowork:debate",
249
+ },
250
+ );
167
251
  const llmOptions = {};
168
252
  if (options.provider) llmOptions.provider = options.provider;
169
253
  if (options.model) llmOptions.model = options.model;
254
+ if (evolution !== null) {
255
+ llmOptions.evolutionIngress = evolution.ingress;
256
+ }
170
257
 
171
258
  const result = await startDebate({
172
259
  target: targetLabel,
@@ -174,6 +261,7 @@ export function registerCoworkCommand(program, commandDeps = {}) {
174
261
  perspectives,
175
262
  llmOptions,
176
263
  });
264
+ await completeCoworkCommandEvolution(evolution, result);
177
265
  spinner.stop();
178
266
 
179
267
  if (options.json) {
@@ -257,9 +345,20 @@ export function registerCoworkCommand(program, commandDeps = {}) {
257
345
  ).start();
258
346
 
259
347
  try {
348
+ const evolution = await startCoworkCommandEvolution(
349
+ evolutionCompositionFactory,
350
+ {
351
+ mode: "compare",
352
+ content: prompt,
353
+ source: "cowork:compare",
354
+ },
355
+ );
260
356
  const llmOptions = {};
261
357
  if (options.provider) llmOptions.provider = options.provider;
262
358
  if (options.model) llmOptions.model = options.model;
359
+ if (evolution !== null) {
360
+ llmOptions.evolutionIngress = evolution.ingress;
361
+ }
263
362
 
264
363
  const result = await compare({
265
364
  prompt,
@@ -267,6 +366,7 @@ export function registerCoworkCommand(program, commandDeps = {}) {
267
366
  criteria,
268
367
  llmOptions,
269
368
  });
369
+ await completeCoworkCommandEvolution(evolution, result);
270
370
  spinner.stop();
271
371
 
272
372
  if (options.json) {
@@ -342,6 +442,14 @@ export function registerCoworkCommand(program, commandDeps = {}) {
342
442
 
343
443
  try {
344
444
  let result;
445
+ const usesModel = ["style", "decisions"].includes(options.type);
446
+ const evolution = usesModel
447
+ ? await startCoworkCommandEvolution(evolutionCompositionFactory, {
448
+ mode: `analyze-${options.type}`,
449
+ content: resolved,
450
+ source: `cowork:analyze:${options.type}`,
451
+ })
452
+ : null;
345
453
 
346
454
  if (options.type === "style") {
347
455
  const { analyzeProjectStyle } =
@@ -349,6 +457,9 @@ export function registerCoworkCommand(program, commandDeps = {}) {
349
457
  const llmOptions = {};
350
458
  if (options.provider) llmOptions.provider = options.provider;
351
459
  if (options.model) llmOptions.model = options.model;
460
+ if (evolution !== null) {
461
+ llmOptions.evolutionIngress = evolution.ingress;
462
+ }
352
463
  result = await analyzeProjectStyle({
353
464
  targetPath: resolved,
354
465
  llmOptions,
@@ -363,6 +474,9 @@ export function registerCoworkCommand(program, commandDeps = {}) {
363
474
  const llmOptions = {};
364
475
  if (options.provider) llmOptions.provider = options.provider;
365
476
  if (options.model) llmOptions.model = options.model;
477
+ if (evolution !== null) {
478
+ llmOptions.evolutionIngress = evolution.ingress;
479
+ }
366
480
  result = await extractDecisions({
367
481
  targetPath: resolved,
368
482
  llmOptions,
@@ -372,6 +486,8 @@ export function registerCoworkCommand(program, commandDeps = {}) {
372
486
  process.exit(1);
373
487
  }
374
488
 
489
+ await completeCoworkCommandEvolution(evolution, result);
490
+
375
491
  spinner.stop();
376
492
 
377
493
  if (options.json) {
@@ -875,10 +991,23 @@ export function registerCoworkCommand(program, commandDeps = {}) {
875
991
  .option("--model <name>", "LLM model to use")
876
992
  .action(async (prompt, options) => {
877
993
  try {
994
+ const evolution = await startCoworkCommandEvolution(
995
+ evolutionCompositionFactory,
996
+ {
997
+ mode: "workflow-draft",
998
+ content: prompt,
999
+ source: "cowork:workflow-draft",
1000
+ },
1001
+ );
878
1002
  let chat;
879
1003
  let provider;
880
1004
  let model;
881
1005
  if (Object.hasOwn(commandDeps, "workflowDraftChat")) {
1006
+ if (evolution !== null) {
1007
+ throw new Error(
1008
+ "Cowork workflow draft chat seam cannot replace governed model ingress",
1009
+ );
1010
+ }
882
1011
  const descriptor = Object.getOwnPropertyDescriptor(
883
1012
  commandDeps,
884
1013
  "workflowDraftChat",
@@ -920,6 +1049,9 @@ export function registerCoworkCommand(program, commandDeps = {}) {
920
1049
  chat = createChatFn({
921
1050
  provider,
922
1051
  model,
1052
+ ...(evolution === null
1053
+ ? {}
1054
+ : { evolutionIngress: evolution.ingress }),
923
1055
  ...(config.provider === provider && config.baseUrl
924
1056
  ? { baseUrl: config.baseUrl }
925
1057
  : {}),
@@ -934,6 +1066,7 @@ export function registerCoworkCommand(program, commandDeps = {}) {
934
1066
  { prompt, provider, model },
935
1067
  { chat },
936
1068
  );
1069
+ await completeCoworkCommandEvolution(evolution, draft);
937
1070
  console.log(JSON.stringify(draft, null, 2));
938
1071
  } catch (err) {
939
1072
  logger.error(`WORKFLOW_DRAFT_FAILED: ${err.message}`);
@@ -16,7 +16,9 @@ import fs from "fs";
16
16
  import path from "path";
17
17
  import { logger } from "../lib/logger.js";
18
18
 
19
- export function registerOrchestrateCommand(program) {
19
+ export function registerOrchestrateCommand(program, dependencies = {}) {
20
+ const evolutionCompositionFactory =
21
+ dependencies.evolutionCompositionFactory ?? null;
20
22
  const cmd = program
21
23
  .command("orchestrate [task]")
22
24
  .description(
@@ -122,13 +124,13 @@ export function registerOrchestrateCommand(program) {
122
124
 
123
125
  // --watch mode
124
126
  if (options.watch) {
125
- await _watchMode(cwd, options);
127
+ await _watchMode(cwd, options, evolutionCompositionFactory);
126
128
  return;
127
129
  }
128
130
 
129
131
  // --webhook mode: start HTTP server to receive commands from IM platforms
130
132
  if (options.webhook) {
131
- await _webhookMode(cwd, options);
133
+ await _webhookMode(cwd, options, evolutionCompositionFactory);
132
134
  return;
133
135
  }
134
136
 
@@ -177,6 +179,7 @@ export function registerOrchestrateCommand(program) {
177
179
  ? { provider: options.provider, model: options.model }
178
180
  : {},
179
181
  verbose: options.verbose,
182
+ evolutionCompositionFactory,
180
183
  });
181
184
 
182
185
  if (options.json) {
@@ -520,7 +523,7 @@ async function _showStatus(cwd, options) {
520
523
 
521
524
  // ─── Webhook mode (receive commands from IM platforms) ─────────────
522
525
 
523
- async function _webhookMode(cwd, options) {
526
+ async function _webhookMode(cwd, options, evolutionCompositionFactory = null) {
524
527
  const { createServer } = await import("http");
525
528
  const { parseDingTalkIncoming, parseFeishuIncoming, parseWeComIncoming } =
526
529
  await import("../lib/notifiers/index.js");
@@ -529,7 +532,11 @@ async function _webhookMode(cwd, options) {
529
532
 
530
533
  const port = parseInt(options.webhookPort, 10) || 18820;
531
534
 
532
- const orch = new Orchestrator({ cwd, verbose: options.verbose });
535
+ const orch = new Orchestrator({
536
+ cwd,
537
+ verbose: options.verbose,
538
+ evolutionCompositionFactory,
539
+ });
533
540
  const secretEnvironmentName =
534
541
  options.webhookSecretEnv || "CC_ORCHESTRATE_WEBHOOK_SECRET";
535
542
  if (!/^[A-Z_][A-Z0-9_]{0,127}$/u.test(secretEnvironmentName)) {
@@ -738,11 +745,15 @@ async function _webhookMode(cwd, options) {
738
745
 
739
746
  // ─── Watch mode ──────────────────────────────────────────────────
740
747
 
741
- async function _watchMode(cwd, options) {
748
+ async function _watchMode(cwd, options, evolutionCompositionFactory = null) {
742
749
  const { Orchestrator } = await import("../lib/orchestrator.js");
743
750
  const intervalMs = parseInt(options.interval, 10) * 60_000 || 600_000;
744
751
 
745
- const orch = new Orchestrator({ cwd, verbose: options.verbose });
752
+ const orch = new Orchestrator({
753
+ cwd,
754
+ verbose: options.verbose,
755
+ evolutionCompositionFactory,
756
+ });
746
757
  orch.startCronWatch(intervalMs);
747
758
 
748
759
  orch.on("cron:tick", ({ at }) => {
@@ -1,6 +1,32 @@
1
1
  {
2
2
  "source": "CHANGELOG.md",
3
3
  "releases": [
4
+ {
5
+ "productVersion": null,
6
+ "cliVersion": "0.166.29",
7
+ "cliVersions": ["0.166.26", "0.166.29"],
8
+ "date": "2026-09-06",
9
+ "title": "",
10
+ "sections": [
11
+ {
12
+ "heading": "Fixed - cc CLI 0.166.29: recover long-running agent tasks",
13
+ "body": "> `chainlesschain` **0.166.26 -> 0.166.29** (2026-09-06). VS Code and\n> JetBrains plugin updates will follow after this CLI version is publicly\n> installable and verified.\n\n- Track task progress separately from file coverage. Reading new files, updating\n a TODO plan, or dispatching a sub-agent no longer counts as implementing the\n user's task.\n- Share bounded exploration accounting between the main agent and sub-agents;\n preserve the current plan, observed work, and delivered child findings across\n compaction without widening a child agent's source-data access.\n- Prompt the agent to consolidate findings after sustained exploration, then\n offer a one-turn recovery mode that removes broad-read and re-delegation\n tools while keeping focused search, edits, and validation available.\n- Keep the repeated-read backstop for ignored recovery guidance, including when\n planning calls are interleaved with the same EOF read.\n- Make IDE Stop reliable when chat state drifts: request interruption first,\n terminate an unresponsive process after five seconds, and terminate\n immediately on a second Stop. Late output from the old process is ignored.\n- Validate task recovery, parent/child accounting, compaction, Stop escalation,\n and existing CLI/IDE contracts with 180 focused tests. Publication still\n requires successful exact-commit CLI CI and CLI Strict Sandbox matrices."
14
+ }
15
+ ]
16
+ },
17
+ {
18
+ "productVersion": null,
19
+ "cliVersion": "0.166.28",
20
+ "cliVersions": ["0.166.26", "0.166.28"],
21
+ "date": "2026-09-06",
22
+ "title": "",
23
+ "sections": [
24
+ {
25
+ "heading": "Fixed - cc CLI 0.166.28: reduce repeated long-document output",
26
+ "body": "> `chainlesschain` **0.166.26 -> 0.166.28** (2026-09-06; incorporates the\n> unpublished 0.166.27 candidate), paired with\n> VS Code **0.37.85** and JetBrains **0.4.112**.\n\n- Direct task-count/status questions to current summary sections and local\n aggregation, returning relevant rows, totals and source line numbers.\n- Budget script output after JSON escaping and explicitly report truncation\n with guidance to retrieve missing sections instead of printing the file again.\n- Reference identical large command output while the original remains visible;\n restore content after compaction. Every authorized command still executes.\n- Detect repeated large code/shell dumps across compaction and tool changes,\n retaining recovery guidance and the incomplete-task backstop.\n- Validate with 80 focused regression tests; publication requires successful\n CLI CI and CLI Strict Sandbox matrices for the exact release commit.\n- Regenerate the bundled changelog index so its entries match the canonical\n release notes and package version before CI tests and packaging."
27
+ }
28
+ ]
29
+ },
4
30
  {
5
31
  "productVersion": null,
6
32
  "cliVersion": "0.166.26",
@@ -54,6 +54,7 @@ export async function handleCoworkTask(server, id, ws, message) {
54
54
  files,
55
55
  cwd: server.projectRoot || process.cwd(),
56
56
  llmOptions: {},
57
+ evolutionCompositionFactory: server.evolutionCompositionFactory ?? null,
57
58
  signal: ac.signal,
58
59
  ...(message.mcpSessionId ? { mcpSessionId: message.mcpSessionId } : {}),
59
60
  ...(useParallel
@@ -247,6 +248,7 @@ export async function handleOrchestrate(server, id, ws, message) {
247
248
  maxParallel: Math.min(parseInt(agents, 10) || 3, 10),
248
249
  ciCommand: ci,
249
250
  agents: strategy ? { strategy } : undefined,
251
+ evolutionCompositionFactory: server.evolutionCompositionFactory ?? null,
250
252
  verbose: false,
251
253
  });
252
254