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.
- package/package.json +1 -1
- package/src/assets/web-panel/assets/{AIOps-Z8_dnLd8.js → AIOps-D4Dhiipq.js} +1 -1
- package/src/assets/web-panel/assets/{ActionButton-C4bKCISV.js → ActionButton-P6fPjlUB.js} +1 -1
- package/src/assets/web-panel/assets/{Analytics-GztAv2jy.js → Analytics-CzeKpXdh.js} +3 -3
- package/src/assets/web-panel/assets/{AppLayout-DEqNcuVx.js → AppLayout-Cj8CqntA.js} +4 -4
- package/src/assets/web-panel/assets/{Artifacts-D-R4Ehap.js → Artifacts-BOe7lviy.js} +1 -1
- package/src/assets/web-panel/assets/{Audit-mzzdTIlM.js → Audit-D6kxPJyo.js} +1 -1
- package/src/assets/web-panel/assets/{BackgroundAgents-DS2QupIC.js → BackgroundAgents-OVuYY65D.js} +1 -1
- package/src/assets/web-panel/assets/{Backup-CQSirC39.js → Backup-UAlkEXOa.js} +1 -1
- package/src/assets/web-panel/assets/{BaseInput-Bhuc-eOV.js → BaseInput-DikQWFIL.js} +1 -1
- package/src/assets/web-panel/assets/{Chat-B-RLVGnt.js → Chat-CEpqrZcV.js} +6 -6
- package/src/assets/web-panel/assets/ChatBubbleRenderer-BLE9L1yw.js +1 -0
- package/src/assets/web-panel/assets/{Checkbox-DxwgBryW.js → Checkbox-D2mdaw7o.js} +1 -1
- package/src/assets/web-panel/assets/{Codegen-Cwrm-7nh.js → Codegen-CJ2LEcdr.js} +1 -1
- package/src/assets/web-panel/assets/{Col-DrSCT-nF.js → Col-ej56LWvr.js} +1 -1
- package/src/assets/web-panel/assets/{Community-DY2D9WNs.js → Community-D9neNmTp.js} +1 -1
- package/src/assets/web-panel/assets/{Compact-o-tV0URw.js → Compact-BzWfgovR.js} +1 -1
- package/src/assets/web-panel/assets/{Compliance-Bndh6S8f.js → Compliance-dStoa8Mw.js} +1 -1
- package/src/assets/web-panel/assets/{Cowork-CSNQODak.js → Cowork-BxYPXbQl.js} +3 -3
- package/src/assets/web-panel/assets/{Cron-CTgxRHdy.js → Cron-DxOQIcrL.js} +2 -2
- package/src/assets/web-panel/assets/{Crosschain-BJoGQzDI.js → Crosschain-BYyOjqVA.js} +1 -1
- package/src/assets/web-panel/assets/{DID-V0Ztm8ne.js → DID-c81gsUZq.js} +2 -2
- package/src/assets/web-panel/assets/{Dashboard-B-38THOj.js → Dashboard-CHIjYxb2.js} +2 -2
- package/src/assets/web-panel/assets/{Dropdown-B3FdOwMO.js → Dropdown-C7hRZzkL.js} +1 -1
- package/src/assets/web-panel/assets/{EmailListRenderer-YQDz4mUF.js → EmailListRenderer--h_ShKAT.js} +1 -1
- package/src/assets/web-panel/assets/{FamilyGuardDashboard-DYE45IF9.js → FamilyGuardDashboard-Bq68asD0.js} +1 -1
- package/src/assets/web-panel/assets/{Federation-DjBFjdRZ.js → Federation-DGKsWpUO.js} +1 -1
- package/src/assets/web-panel/assets/{FormItemContext-CVTXEa0R.js → FormItemContext-1HbCXJAf.js} +1 -1
- package/src/assets/web-panel/assets/{GenericCardRenderer-B6Tkke8X.js → GenericCardRenderer-BlKJ93Fy.js} +1 -1
- package/src/assets/web-panel/assets/{Git-CD0hyAzT.js → Git-DJA-kxuw.js} +2 -2
- package/src/assets/web-panel/assets/{Governance-CWOQQJr8.js → Governance-BWZPtzHj.js} +1 -1
- package/src/assets/web-panel/assets/{Inference-lHYwUk-C.js → Inference-D3QXUTYP.js} +1 -1
- package/src/assets/web-panel/assets/{KnowledgeGraph-Cledxv7t.js → KnowledgeGraph-BM37hWOP.js} +1 -1
- package/src/assets/web-panel/assets/{Logs-D45mt-rM.js → Logs-Bpu4Of_0.js} +2 -2
- package/src/assets/web-panel/assets/MarkdownRenderer-DAZcw_ZS.js +1 -0
- package/src/assets/web-panel/assets/{Marketplace-Yy30UZPw.js → Marketplace-BZe0jmAU.js} +1 -1
- package/src/assets/web-panel/assets/{McpTools-Cil5l-bh.js → McpTools-_q_nfUnU.js} +3 -3
- package/src/assets/web-panel/assets/{Memory-DdJcnyqy.js → Memory-CIzcovHt.js} +2 -2
- package/src/assets/web-panel/assets/{MobileBridge-IrzFYHEv.js → MobileBridge-DZzo5UjF.js} +1 -1
- package/src/assets/web-panel/assets/{MobileProjects-D8q64LMd.js → MobileProjects-DVZr9bVO.js} +1 -1
- package/src/assets/web-panel/assets/{Mtc-CpdTJzW7.js → Mtc-pULSsEOx.js} +4 -4
- package/src/assets/web-panel/assets/{MtcAudit-C7Tvw2m6.js → MtcAudit-BLz9fiz0.js} +2 -2
- package/src/assets/web-panel/assets/{Multisig-Dmj9F5Kr.js → Multisig-B1qxfPkT.js} +3 -3
- package/src/assets/web-panel/assets/{NLProgramming-C9Xchob5.js → NLProgramming-Bkb9YB7P.js} +1 -1
- package/src/assets/web-panel/assets/{Notes-Bzq6Yry5.js → Notes-N0G87PD1.js} +4 -4
- package/src/assets/web-panel/assets/{NotificationSettings-DxG9eKb4.js → NotificationSettings-D0jB-hRv.js} +1 -1
- package/src/assets/web-panel/assets/{OrderTableRenderer-BS_IYoCe.js → OrderTableRenderer-soFvgov0.js} +1 -1
- package/src/assets/web-panel/assets/{Organization-kazsRvcq.js → Organization-BNBL1-7S.js} +4 -4
- package/src/assets/web-panel/assets/{Overflow-i4wP-hwn.js → Overflow-yqaJxwEo.js} +1 -1
- package/src/assets/web-panel/assets/{P2P-CfGeU3h-.js → P2P-1JHDOnl3.js} +2 -2
- package/src/assets/web-panel/assets/{PdhVaultBrowser-CS-VhVUx.js → PdhVaultBrowser-D1FgaOLV.js} +5 -5
- package/src/assets/web-panel/assets/{Permissions-DnEHXs0I.js → Permissions-DOQh1Wzv.js} +4 -4
- package/src/assets/web-panel/assets/{PersonalDataHub-DeD82qke.js → PersonalDataHub-SVa21bUw.js} +5 -5
- package/src/assets/web-panel/assets/{Pipeline-CMGGLgBY.js → Pipeline-Du3gCATi.js} +1 -1
- package/src/assets/web-panel/assets/{Privacy-CvHoFv32.js → Privacy-CPW8EDaC.js} +1 -1
- package/src/assets/web-panel/assets/{ProjectInit-DnJapCc1.js → ProjectInit-CAu5N0A_.js} +2 -2
- package/src/assets/web-panel/assets/{ProjectSettings-CqVdv3-g.js → ProjectSettings-DVTow6ty.js} +2 -2
- package/src/assets/web-panel/assets/{Projects-B_o8vcs_.js → Projects-CBUF9hPa.js} +1 -1
- package/src/assets/web-panel/assets/{Providers-CPKseoDW.js → Providers-B7pNEoaY.js} +1 -1
- package/src/assets/web-panel/assets/{QrScannerModal-_iBfKbPQ.js → QrScannerModal-BHs1Kx7e.js} +1 -1
- package/src/assets/web-panel/assets/{QuickAsk-CMrlZ69a.js → QuickAsk-IBrdC5B5.js} +1 -1
- package/src/assets/web-panel/assets/{Recommend-BwDtSZ0l.js → Recommend-BtkLuO-e.js} +1 -1
- package/src/assets/web-panel/assets/{RemoteSession-DomUAtn4.js → RemoteSession-Du4_izg3.js} +2 -2
- package/src/assets/web-panel/assets/{Reputation-Cuu2GCHr.js → Reputation-IEbMZN6v.js} +1 -1
- package/src/assets/web-panel/assets/{Row-C7GVts31.js → Row-D5UM_ivw.js} +1 -1
- package/src/assets/web-panel/assets/{RssFeed-DRKvgEog.js → RssFeed-DTTNnkdJ.js} +3 -3
- package/src/assets/web-panel/assets/{Search-BGI9wOeA.js → Search-B5f7ggJE.js} +1 -1
- package/src/assets/web-panel/assets/{Security-BlLaHy_L.js → Security-CsZp2uGu.js} +3 -3
- package/src/assets/web-panel/assets/{Services-DFqZbjmX.js → Services-BJhguqIh.js} +2 -2
- package/src/assets/web-panel/assets/{Skeleton-BCGxdooP.js → Skeleton-CAwO2JUK.js} +1 -1
- package/src/assets/web-panel/assets/{Skills-CwFKgcmm.js → Skills-hKJcP390.js} +1 -1
- package/src/assets/web-panel/assets/{Sla-CiXXh9eS.js → Sla-BCFiB8oS.js} +1 -1
- package/src/assets/web-panel/assets/{SpeechSettings-WSx2CLqO.js → SpeechSettings-Bi1Y-Tgf.js} +1 -1
- package/src/assets/web-panel/assets/{SyncSettings-BBIqQOtW.js → SyncSettings-ZHYDv46g.js} +2 -2
- package/src/assets/web-panel/assets/{Tasks-D1BGLjO1.js → Tasks-BMCSrUy-.js} +1 -1
- package/src/assets/web-panel/assets/{Templates-CUIl9axA.js → Templates-DF_FOEH8.js} +1 -1
- package/src/assets/web-panel/assets/{Tenant-BFZJ0hNz.js → Tenant-C7Q2LriV.js} +1 -1
- package/src/assets/web-panel/assets/{Terminal-Cw-3eYVn.js → Terminal-C59ckWXW.js} +2 -2
- package/src/assets/web-panel/assets/{TimelineRenderer-bOVPB56L.js → TimelineRenderer-Biu1m6Uf.js} +1 -1
- package/src/assets/web-panel/assets/{Tokens-Czfyq2VY.js → Tokens-CoHYWg3-.js} +1 -1
- package/src/assets/web-panel/assets/{Trigger-C-o4uJY0.js → Trigger-DglXXzEp.js} +1 -1
- package/src/assets/web-panel/assets/{Trust-BKq_S6iF.js → Trust-CBBLh73r.js} +1 -1
- package/src/assets/web-panel/assets/{UkeySign-fKlWUvMx.js → UkeySign-DuNdKeiD.js} +1 -1
- package/src/assets/web-panel/assets/{VideoEditing-DB5MLuS7.js → VideoEditing-BizHWVrh.js} +1 -1
- package/src/assets/web-panel/assets/{Wallet-WGXBn7IS.js → Wallet-ClUQGSKi.js} +4 -4
- package/src/assets/web-panel/assets/{WebAuthn-B8TC4EMF.js → WebAuthn-zyD7K5f5.js} +4 -4
- package/src/assets/web-panel/assets/{WorkflowEditor-DLY--KmM.js → WorkflowEditor-qbTI37Fi.js} +1 -1
- package/src/assets/web-panel/assets/{chat-Crw3XQaA.js → chat-CHv66tBY.js} +1 -1
- package/src/assets/web-panel/assets/{colors-CxhWauPV.js → colors-vBsvcJjY.js} +1 -1
- package/src/assets/web-panel/assets/{compact-item-Cp3ojtk5.js → compact-item-CdBQZWFX.js} +1 -1
- package/src/assets/web-panel/assets/{createContext-CRuRXjSo.js → createContext-CLE2XsPX.js} +1 -1
- package/src/assets/web-panel/assets/devWarning-DRQGMdYB.js +1 -0
- package/src/assets/web-panel/assets/{hasIn-XGW474dj.js → hasIn-Du5rnUSg.js} +1 -1
- package/src/assets/web-panel/assets/{index-C73pqyDb.js → index-9nDAQkO-.js} +1 -1
- package/src/assets/web-panel/assets/{index-DHNixOg_.js → index-B-3GrN7D.js} +1 -1
- package/src/assets/web-panel/assets/{index-DUSVsOGS.js → index-BDaW0C3l.js} +1 -1
- package/src/assets/web-panel/assets/{index-BXnNbbwa.js → index-BY0Jg8JC.js} +1 -1
- package/src/assets/web-panel/assets/{index-Yq3bFbYX.js → index-Bdfg7CY3.js} +1 -1
- package/src/assets/web-panel/assets/{index-BW028Pwn.js → index-BnZkmomS.js} +1 -1
- package/src/assets/web-panel/assets/{index-DBcBsJYg.js → index-BojUN0eY.js} +1 -1
- package/src/assets/web-panel/assets/{index-DoUC5_ry.js → index-BrFwv-2v.js} +1 -1
- package/src/assets/web-panel/assets/{index-CPFam-me.js → index-Bu3v3PRU.js} +1 -1
- package/src/assets/web-panel/assets/{index-J_08R33H.js → index-BuSZyAD0.js} +1 -1
- package/src/assets/web-panel/assets/{index-WvNZXbIO.js → index-Bwqa-FcB.js} +1 -1
- package/src/assets/web-panel/assets/{index-rsACoVT9.js → index-ByEfQiLz.js} +1 -1
- package/src/assets/web-panel/assets/{index-DhomnuaB.js → index-CKoOU-ne.js} +1 -1
- package/src/assets/web-panel/assets/index-CPJgV0Ho.js +1 -0
- package/src/assets/web-panel/assets/{index-DfPLIA-f.js → index-CRiOcWZ1.js} +1 -1
- package/src/assets/web-panel/assets/{index-BuVA26SD.js → index-Ca0WeKz1.js} +1 -1
- package/src/assets/web-panel/assets/{index-E-RSfImO.js → index-Cc53mZoS.js} +1 -1
- package/src/assets/web-panel/assets/{index-C8UOVaUH.js → index-CigkcWWh.js} +1 -1
- package/src/assets/web-panel/assets/{index-qzmihx1d.js → index-Cuvyt0vv.js} +1 -1
- package/src/assets/web-panel/assets/{index-BUWZ57T4.js → index-CvHjeRw2.js} +1 -1
- package/src/assets/web-panel/assets/{index-BetOkRLs.js → index-CxmlGwpv.js} +1 -1
- package/src/assets/web-panel/assets/{index-B5fJS-kn.js → index-Cz48QuqC.js} +1 -1
- package/src/assets/web-panel/assets/{index-nJR64pA_.js → index-D-KoBLmE.js} +1 -1
- package/src/assets/web-panel/assets/{index-Dp2nC5On.js → index-D-jjL85C.js} +1 -1
- package/src/assets/web-panel/assets/{index-BYkjs7eP.js → index-DADajBnD.js} +1 -1
- package/src/assets/web-panel/assets/{index-BElgeKJ0.js → index-DHdrZp_q.js} +3 -3
- package/src/assets/web-panel/assets/{index-QqAuH7-S.js → index-DHhNie07.js} +1 -1
- package/src/assets/web-panel/assets/{index-jrIcbPUa.js → index-DnB7oqAR.js} +1 -1
- package/src/assets/web-panel/assets/{index-Ctu98x57.js → index-DsyYG63S.js} +1 -1
- package/src/assets/web-panel/assets/{index-CTE32qol.js → index-Dv9b_iFq.js} +1 -1
- package/src/assets/web-panel/assets/{index-CdlfrcC-.js → index-DzYEc47A.js} +1 -1
- package/src/assets/web-panel/assets/index-OtXVaszG.js +1 -0
- package/src/assets/web-panel/assets/{index-CDIpH_8Q.js → index-aYAtijnz.js} +1 -1
- package/src/assets/web-panel/assets/{index-38TRdZb6.js → index-dEhWAtoe.js} +1 -1
- package/src/assets/web-panel/assets/{index-DxOtBFVy.js → index-q3sGyZnD.js} +1 -1
- package/src/assets/web-panel/assets/{index-B45Vkh3T.js → index-sLcRd9pi.js} +1 -1
- package/src/assets/web-panel/assets/{index-BVmSfIkJ.js → index-sz6sGerd.js} +1 -1
- package/src/assets/web-panel/assets/{index-De2FN0xN.js → index-uHX8ZrJ9.js} +1 -1
- package/src/assets/web-panel/assets/{index-W8_0yAi_.js → index-x_0JRAO3.js} +1 -1
- package/src/assets/web-panel/assets/{initDefaultProps-DAu-hgme.js → initDefaultProps-CThtsKhS.js} +1 -1
- package/src/assets/web-panel/assets/{motion-Db8yk0Hu.js → motion-BoqT16ZT.js} +1 -1
- package/src/assets/web-panel/assets/{move-Cii2jOin.js → move-1Jf6ZXg5.js} +1 -1
- package/src/assets/web-panel/assets/{mtc-parser-CnZBDkyZ.js → mtc-parser-DjfCYvnq.js} +1 -1
- package/src/assets/web-panel/assets/{omit-Buzt1FTL.js → omit-BaJPeP5Y.js} +1 -1
- package/src/assets/web-panel/assets/{pickAttrs-CpZ_NmE6.js → pickAttrs-B7nqrfVR.js} +1 -1
- package/src/assets/web-panel/assets/{placementArrow-mBrx3dYm.js → placementArrow-Dmb7i435.js} +1 -1
- package/src/assets/web-panel/assets/{responsiveObserve-DC_QzljB.js → responsiveObserve-B0TqfHJR.js} +1 -1
- package/src/assets/web-panel/assets/{slide-DT_UVED-.js → slide-C9PINvAM.js} +1 -1
- package/src/assets/web-panel/assets/{statusUtils-78t6eNLV.js → statusUtils-DAug5z5S.js} +1 -1
- package/src/assets/web-panel/assets/{styleChecker-CV_T1ULL.js → styleChecker-o6QvGnrq.js} +1 -1
- package/src/assets/web-panel/assets/{useFlexGapSupport-s8edGuXD.js → useFlexGapSupport-CtZwQFCt.js} +1 -1
- package/src/assets/web-panel/assets/{useFs-Pk9dH2HC.js → useFs-B0HVNsmA.js} +1 -1
- package/src/assets/web-panel/assets/{usePersonalDataHub-B_GqAm8c.js → usePersonalDataHub-CbLIg5eO.js} +1 -1
- package/src/assets/web-panel/assets/{vnode-Cxyss24q.js → vnode-uOK2NMHj.js} +1 -1
- package/src/assets/web-panel/assets/{zoom-0UY3cOuc.js → zoom-BhyA2sIv.js} +1 -1
- package/src/assets/web-panel/index.html +1 -1
- package/src/commands/ask.js +84 -5
- package/src/commands/chat.js +67 -1
- package/src/commands/compact.js +81 -2
- package/src/commands/complete.js +64 -5
- package/src/commands/cowork.js +133 -0
- package/src/commands/orchestrate.js +18 -7
- package/src/data/changelog.json +26 -0
- package/src/gateways/ws/action-protocol.js +2 -0
- package/src/lib/agent-router.js +116 -36
- package/src/lib/cowork-task-runner.js +107 -4
- package/src/lib/evolution/agent-evolution-ingress.js +231 -40
- package/src/lib/evolution/agent-evolution-runtime-composition.js +85 -5
- package/src/lib/evolution/evolution-deployment-loader.js +17 -1
- package/src/lib/evolution/evolution-evidence-projector.js +25 -6
- package/src/lib/model-failure-policy.js +10 -0
- package/src/lib/orchestrator.js +97 -27
- package/src/lib/read-file-loop-guard.js +33 -10
- package/src/lib/sub-agent-context.js +37 -2
- package/src/lib/task-progress-tracker.js +223 -0
- package/src/repl/chat-repl.js +60 -10
- package/src/runtime/agent-core.js +186 -16
- package/src/runtime/agent-runtime.js +20 -1
- package/src/runtime/runtime-factory.js +1 -1
- package/src/assets/web-panel/assets/ChatBubbleRenderer-CBbMoVuE.js +0 -1
- package/src/assets/web-panel/assets/MarkdownRenderer-DJjPaOnM.js +0 -1
- package/src/assets/web-panel/assets/devWarning-CKAQY2zn.js +0 -1
- package/src/assets/web-panel/assets/index-Cetfwq8j.js +0 -1
- package/src/assets/web-panel/assets/index-DOpcRO2-.js +0 -1
package/src/commands/compact.js
CHANGED
|
@@ -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(
|
|
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 =
|
package/src/commands/complete.js
CHANGED
|
@@ -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
|
|
129
|
-
|
|
130
|
-
|
|
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,
|
package/src/commands/cowork.js
CHANGED
|
@@ -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({
|
|
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({
|
|
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 }) => {
|
package/src/data/changelog.json
CHANGED
|
@@ -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
|
|