chainlesschain 0.166.125 → 0.166.127
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +33 -5
- package/package.json +1 -1
- package/src/assets/linux-subreaper/linux-arm64/manifest.json +1 -1
- package/src/assets/linux-subreaper/linux-x64/manifest.json +1 -1
- package/src/assets/web-panel/.build-hash +1 -1
- package/src/assets/web-panel/assets/{AIOps-BP7bvhgw.js → AIOps-DkSOwKNn.js} +1 -1
- package/src/assets/web-panel/assets/{ActionButton-CRSlqvUW.js → ActionButton-CaYSnkeR.js} +1 -1
- package/src/assets/web-panel/assets/{Analytics-Uh-IHXPq.js → Analytics-D8kEgXLP.js} +3 -3
- package/src/assets/web-panel/assets/{AppLayout-BV2iUfEI.js → AppLayout-D43FaO4a.js} +4 -4
- package/src/assets/web-panel/assets/Artifacts-DfxY2Gqs.js +1 -0
- package/src/assets/web-panel/assets/{Audit-CYX8n3_m.js → Audit-0ogv1Zu5.js} +1 -1
- package/src/assets/web-panel/assets/{BackgroundAgents-BqmXROox.js → BackgroundAgents-BhLnn-Gw.js} +1 -1
- package/src/assets/web-panel/assets/{Backup-BnVDRZIg.js → Backup-D4591rlk.js} +1 -1
- package/src/assets/web-panel/assets/{BaseInput-Bb6UmdRt.js → BaseInput-gK1PjPDZ.js} +1 -1
- package/src/assets/web-panel/assets/{Chat-hz3OIIbK.js → Chat-CCDmOYwg.js} +5 -5
- package/src/assets/web-panel/assets/{ChatBubbleRenderer-DGNJTSsQ.js → ChatBubbleRenderer-CnpWe3dp.js} +1 -1
- package/src/assets/web-panel/assets/{Checkbox-CQikB2We.js → Checkbox-DG4PRH9M.js} +1 -1
- package/src/assets/web-panel/assets/{Codegen-B2nJ-skp.js → Codegen-DtJxGiSg.js} +1 -1
- package/src/assets/web-panel/assets/{Col-klIv1AGo.js → Col-4wGBC25p.js} +1 -1
- package/src/assets/web-panel/assets/{Community-Di-kPX__.js → Community-dOCSc8t-.js} +1 -1
- package/src/assets/web-panel/assets/{Compact-BxqPTGPL.js → Compact-Du4kXsyN.js} +1 -1
- package/src/assets/web-panel/assets/{Compliance-BGMFZVuF.js → Compliance-BbI5XMcz.js} +1 -1
- package/src/assets/web-panel/assets/{Cowork-mqWGIwSR.js → Cowork-CbQRpyiK.js} +3 -3
- package/src/assets/web-panel/assets/{Cron-DR5O38TG.js → Cron-CtWy2bMC.js} +2 -2
- package/src/assets/web-panel/assets/{Crosschain-D6hPm17z.js → Crosschain-CzdM5hF6.js} +1 -1
- package/src/assets/web-panel/assets/{DID-DoWPTVwK.js → DID-CcBboBJN.js} +2 -2
- package/src/assets/web-panel/assets/{Dashboard-BPL8xNW_.js → Dashboard-I7m0oCeC.js} +2 -2
- package/src/assets/web-panel/assets/{Dropdown-CiSVSWe5.js → Dropdown-CKIy2Ikn.js} +1 -1
- package/src/assets/web-panel/assets/{EmailListRenderer-xx2j4JdY.js → EmailListRenderer-BNuxCq89.js} +1 -1
- package/src/assets/web-panel/assets/EvolutionSettings-BeBovLZs.js +1 -0
- package/src/assets/web-panel/assets/{FamilyGuardDashboard-DyXIXJ_A.js → FamilyGuardDashboard-QThmET-n.js} +1 -1
- package/src/assets/web-panel/assets/{Federation-Byr6DvRk.js → Federation-Bqf7YYlV.js} +1 -1
- package/src/assets/web-panel/assets/{FormItemContext-CQGnmQJv.js → FormItemContext-DZAM28ve.js} +1 -1
- package/src/assets/web-panel/assets/{GenericCardRenderer-hQguQVZ3.js → GenericCardRenderer-DunXFYML.js} +1 -1
- package/src/assets/web-panel/assets/{Git-BecJOnx6.js → Git-BgwOjaMf.js} +2 -2
- package/src/assets/web-panel/assets/{Governance-BJddTPXq.js → Governance-B1za4wCP.js} +1 -1
- package/src/assets/web-panel/assets/{Inference-D24icM6B.js → Inference-DMPqX1oN.js} +1 -1
- package/src/assets/web-panel/assets/{KnowledgeGraph-Do22sAeu.js → KnowledgeGraph-ChDn3okr.js} +1 -1
- package/src/assets/web-panel/assets/{Logs-hUuWosrZ.js → Logs-BQoPB6-O.js} +2 -2
- package/src/assets/web-panel/assets/MarkdownRenderer-uS1yHX12.js +1 -0
- package/src/assets/web-panel/assets/{Marketplace-Dp5LwB9H.js → Marketplace-DZXEaPpe.js} +1 -1
- package/src/assets/web-panel/assets/{McpTools-BiVU1FMc.js → McpTools-CZbVOFaG.js} +3 -3
- package/src/assets/web-panel/assets/{Memory-CIxR4kQp.js → Memory-Cl3T8asu.js} +2 -2
- package/src/assets/web-panel/assets/{MobileBridge-BfuDQmNF.js → MobileBridge-DK_ayU9I.js} +1 -1
- package/src/assets/web-panel/assets/MobileProjects-DEWAA2gT.js +1 -0
- package/src/assets/web-panel/assets/{Mtc-CTvkHtBz.js → Mtc-z-XAWzMh.js} +5 -5
- package/src/assets/web-panel/assets/{MtcAudit-DkF8di0r.js → MtcAudit-CX7qJvQS.js} +4 -4
- package/src/assets/web-panel/assets/{Multisig-BsI3rR_s.js → Multisig-DiQlKgxx.js} +3 -3
- package/src/assets/web-panel/assets/{NLProgramming-DUE2RUBH.js → NLProgramming-Ciuxcu00.js} +1 -1
- package/src/assets/web-panel/assets/{Notes-CZH-8mLz.js → Notes-BAvqNw_6.js} +4 -4
- package/src/assets/web-panel/assets/{NotificationSettings-BWrE5Fdu.js → NotificationSettings-DkHDTslA.js} +1 -1
- package/src/assets/web-panel/assets/OrderTableRenderer--WZdD2oV.js +1 -0
- package/src/assets/web-panel/assets/{Organization-GfJxDuZd.js → Organization-Bv6bMLCe.js} +4 -4
- package/src/assets/web-panel/assets/{Overflow-DVpJGkTd.js → Overflow-Bwoz_oq1.js} +1 -1
- package/src/assets/web-panel/assets/{P2P-DLWmK0no.js → P2P-De7T0ZeB.js} +2 -2
- package/src/assets/web-panel/assets/{PdhVaultBrowser-CgJZVTlX.js → PdhVaultBrowser-Dblr2x25.js} +5 -5
- package/src/assets/web-panel/assets/{Permissions-CutFqMXH.js → Permissions-C-jAt-cg.js} +4 -4
- package/src/assets/web-panel/assets/{PersonalDataHub-CfqM7ZpK.js → PersonalDataHub-yXeXDMgf.js} +3 -3
- package/src/assets/web-panel/assets/{Pipeline-ie5hQZ0r.js → Pipeline-C8CYoLOa.js} +1 -1
- package/src/assets/web-panel/assets/{Privacy-B1KdLF7O.js → Privacy-B-gwnOGT.js} +1 -1
- package/src/assets/web-panel/assets/{ProjectInit-CRPPcQzY.js → ProjectInit-CbNjHiBV.js} +2 -2
- package/src/assets/web-panel/assets/{ProjectSettings-Do6fMBWF.js → ProjectSettings-BMUY0GCP.js} +2 -2
- package/src/assets/web-panel/assets/Projects-DpCaWXv6.js +1 -0
- package/src/assets/web-panel/assets/{Providers-CgZd2eBh.js → Providers-K_tlWkON.js} +1 -1
- package/src/assets/web-panel/assets/{QrScannerModal-DrPG8IxK.js → QrScannerModal-2RSZDzJI.js} +1 -1
- package/src/assets/web-panel/assets/{QuickAsk-D_uU-5Ph.js → QuickAsk-mhbcQRMI.js} +1 -1
- package/src/assets/web-panel/assets/{Recommend-DDId0K_9.js → Recommend-BXm0uG0q.js} +1 -1
- package/src/assets/web-panel/assets/{RemoteSession-BnJcoKDQ.js → RemoteSession-xhOpmNZG.js} +2 -2
- package/src/assets/web-panel/assets/{Reputation-BnnmzZb0.js → Reputation-CwbCWB-3.js} +1 -1
- package/src/assets/web-panel/assets/{Row-ChHU3TqH.js → Row-BdAjmDBO.js} +1 -1
- package/src/assets/web-panel/assets/{RssFeed-DeiKl8k2.js → RssFeed-Cq4LZ9WU.js} +3 -3
- package/src/assets/web-panel/assets/{Search-Cd0Byr5Y.js → Search-C_I6B-4l.js} +1 -1
- package/src/assets/web-panel/assets/{Security-CHqAAtUE.js → Security-CdH6mzL-.js} +4 -4
- package/src/assets/web-panel/assets/{Services-CaC6ZaY3.js → Services-CWu1wqtS.js} +2 -2
- package/src/assets/web-panel/assets/{Skeleton-Do4HAN0a.js → Skeleton-daw9DiVM.js} +1 -1
- package/src/assets/web-panel/assets/{Skills-CoElvXB8.js → Skills-CmurIxkM.js} +1 -1
- package/src/assets/web-panel/assets/{Sla-jJiTPvtG.js → Sla-cETA5aPO.js} +1 -1
- package/src/assets/web-panel/assets/{SpeechSettings-OXfemdVC.js → SpeechSettings-B1llZgu3.js} +1 -1
- package/src/assets/web-panel/assets/{SyncSettings-JPkmyUwi.js → SyncSettings-DufZ-B2q.js} +2 -2
- package/src/assets/web-panel/assets/{Tasks-BGG7ffmW.js → Tasks-PfRLKTFY.js} +1 -1
- package/src/assets/web-panel/assets/{Templates-DeK9-2LY.js → Templates-DGtz-vT8.js} +1 -1
- package/src/assets/web-panel/assets/{Tenant-BTQSUiAe.js → Tenant-JeKYLN0b.js} +1 -1
- package/src/assets/web-panel/assets/{Terminal-nSeD_GjQ.js → Terminal-BiMsF2Y0.js} +2 -2
- package/src/assets/web-panel/assets/{TimelineRenderer-DWj9DOd9.js → TimelineRenderer-DhcBAGPg.js} +1 -1
- package/src/assets/web-panel/assets/{Tokens-CNi7fvHT.js → Tokens-DpIg-0ju.js} +1 -1
- package/src/assets/web-panel/assets/{Trigger-qXYBuAUZ.js → Trigger-DreKHxyb.js} +1 -1
- package/src/assets/web-panel/assets/{Trust-UMIDxWBQ.js → Trust-D7ByQvBQ.js} +1 -1
- package/src/assets/web-panel/assets/{UkeySign-VWmZ_L_a.js → UkeySign-OudyQByy.js} +1 -1
- package/src/assets/web-panel/assets/{VideoEditing-Dwlrr7Ju.js → VideoEditing-BhU6nzCF.js} +1 -1
- package/src/assets/web-panel/assets/{Wallet-DY25E1_s.js → Wallet-BCEpB6E0.js} +4 -4
- package/src/assets/web-panel/assets/{WebAuthn-Cg4ZH9YH.js → WebAuthn-DwjAM5Mr.js} +2 -2
- package/src/assets/web-panel/assets/{WorkflowEditor-LB5NqSGq.js → WorkflowEditor-ChQqlAmY.js} +1 -1
- package/src/assets/web-panel/assets/{chat-CaCuVsD2.js → chat-CzUKWqTy.js} +1 -1
- package/src/assets/web-panel/assets/{colors-BG2JI5F8.js → colors-D3Y_Pvu4.js} +1 -1
- package/src/assets/web-panel/assets/{compact-item-CdTkLvXf.js → compact-item-ByyPRfkA.js} +1 -1
- package/src/assets/web-panel/assets/{createContext-Wv41oeUq.js → createContext-Dt5PF6VI.js} +1 -1
- package/src/assets/web-panel/assets/devWarning-BgSxkkQ3.js +1 -0
- package/src/assets/web-panel/assets/{hasIn-B7Uw6Y5_.js → hasIn-BuIaEKuC.js} +1 -1
- package/src/assets/web-panel/assets/{index-BfpOUAjn.js → index-1YgdY0Vq.js} +1 -1
- package/src/assets/web-panel/assets/{index-BLLVYN1S.js → index-B600riYP.js} +1 -1
- package/src/assets/web-panel/assets/{index-XVz1pdi4.js → index-BFQGN97S.js} +1 -1
- package/src/assets/web-panel/assets/{index-tyw6dj9r.js → index-BO29sPX8.js} +1 -1
- package/src/assets/web-panel/assets/{index-oICFzKT6.js → index-BSWTyRhI.js} +1 -1
- package/src/assets/web-panel/assets/{index-xZOajA5D.js → index-BcqZAAr5.js} +1 -1
- package/src/assets/web-panel/assets/{index-98U0Akgy.js → index-BdvZNMNm.js} +1 -1
- package/src/assets/web-panel/assets/{index-CDuOf0Sk.js → index-BmVY2f7I.js} +1 -1
- package/src/assets/web-panel/assets/{index-Cnkd1twb.js → index-BwlY7Yap.js} +1 -1
- package/src/assets/web-panel/assets/{index-B68Kr1A0.js → index-BztqxXMP.js} +1 -1
- package/src/assets/web-panel/assets/{index-zEDHN35C.js → index-CAfX0VyL.js} +1 -1
- package/src/assets/web-panel/assets/{index--q3_jHhu.js → index-CByWkXdO.js} +1 -1
- package/src/assets/web-panel/assets/{index-CZCE6USm.js → index-CCBm8_o4.js} +1 -1
- package/src/assets/web-panel/assets/{index-a811Rdaf.js → index-CDTS4qJm.js} +1 -1
- package/src/assets/web-panel/assets/{index-Cd9QfEPf.js → index-CFXZ9lbO.js} +1 -1
- package/src/assets/web-panel/assets/{index-FYb9E4P0.js → index-COsjgjvP.js} +1 -1
- package/src/assets/web-panel/assets/{index-BN8FIy9Z.js → index-CZX4_hGp.js} +1 -1
- package/src/assets/web-panel/assets/{index-BONqMz21.js → index-Cb7MzML-.js} +1 -1
- package/src/assets/web-panel/assets/{index-ByGwOQL-.js → index-CgPKUSe4.js} +1 -1
- package/src/assets/web-panel/assets/{index-DTWvW7Q9.js → index-CmrfHS36.js} +1 -1
- package/src/assets/web-panel/assets/{index-BWuKDmL6.js → index-D51wU4q-.js} +1 -1
- package/src/assets/web-panel/assets/index-D5v6roiB.js +1 -0
- package/src/assets/web-panel/assets/{index-ChJPZoiz.js → index-D7QSTEjb.js} +1 -1
- package/src/assets/web-panel/assets/{index-Hcx0wbx7.js → index-DHzVIQLX.js} +1 -1
- package/src/assets/web-panel/assets/{index-CeBODQXm.js → index-DSXjiZAV.js} +1 -1
- package/src/assets/web-panel/assets/{index-C58rpLKM.js → index-DSgroT-P.js} +3 -3
- package/src/assets/web-panel/assets/{index-0DcGfrpr.js → index-DWW5svXU.js} +1 -1
- package/src/assets/web-panel/assets/index-DgXZCvH5.js +1 -0
- package/src/assets/web-panel/assets/{index-DyBgFbOX.js → index-Di78LDr8.js} +1 -1
- package/src/assets/web-panel/assets/{index-m9IlVQwa.js → index-Dlec7Sr4.js} +1 -1
- package/src/assets/web-panel/assets/{index-BzQ1hohb.js → index-DpAqy6Co.js} +1 -1
- package/src/assets/web-panel/assets/{index-CAG1C05A.js → index-DxVLI-Iu.js} +1 -1
- package/src/assets/web-panel/assets/{index-CCVpB1HT.js → index-EtrWRKu2.js} +1 -1
- package/src/assets/web-panel/assets/{index-D6wz6Lj3.js → index-F-T8AHeo.js} +1 -1
- package/src/assets/web-panel/assets/{index-6TrZH59x.js → index-GyTOYTFg.js} +1 -1
- package/src/assets/web-panel/assets/{index-CDA9_4jw.js → index-NFqKQquS.js} +1 -1
- package/src/assets/web-panel/assets/{index-X3kmZCFh.js → index-_oJnnOnZ.js} +1 -1
- package/src/assets/web-panel/assets/{index-27hwVsUl.js → index-gg5zO3aD.js} +1 -1
- package/src/assets/web-panel/assets/{index-DyddYZY6.js → index-huWw0XBb.js} +1 -1
- package/src/assets/web-panel/assets/{initDefaultProps-rhNcfOEv.js → initDefaultProps-Bny6G13G.js} +1 -1
- package/src/assets/web-panel/assets/{motion-C3Ot7PRG.js → motion-DRhRj_uM.js} +1 -1
- package/src/assets/web-panel/assets/{move-BSbZkByI.js → move-D0wKnhYr.js} +1 -1
- package/src/assets/web-panel/assets/{mtc-parser-BHcarv2m.js → mtc-parser-BXXSTJBk.js} +1 -1
- package/src/assets/web-panel/assets/{omit-CH8lRpcG.js → omit-d8t9Yze4.js} +1 -1
- package/src/assets/web-panel/assets/{pickAttrs-DiLvg1NK.js → pickAttrs-nyB6BMe6.js} +1 -1
- package/src/assets/web-panel/assets/{placementArrow-DXqb9Lm6.js → placementArrow-CSFyBNA2.js} +1 -1
- package/src/assets/web-panel/assets/{responsiveObserve-qhZCsCCH.js → responsiveObserve-DYmiKhJa.js} +1 -1
- package/src/assets/web-panel/assets/{slide-amPl47DO.js → slide-D4KZSRmt.js} +1 -1
- package/src/assets/web-panel/assets/{statusUtils-BIM6xD4_.js → statusUtils-BcrcPeFm.js} +1 -1
- package/src/assets/web-panel/assets/{styleChecker-BQM4w1nF.js → styleChecker-BFgOb1vz.js} +1 -1
- package/src/assets/web-panel/assets/{useFlexGapSupport-CQLRdXAd.js → useFlexGapSupport-DQ5qSQlN.js} +1 -1
- package/src/assets/web-panel/assets/{useFs-CjgDjsYN.js → useFs-Cafq069l.js} +1 -1
- package/src/assets/web-panel/assets/{usePersonalDataHub-BNs5KK4A.js → usePersonalDataHub-DTma9Ary.js} +1 -1
- package/src/assets/web-panel/assets/{vnode-CEORzacS.js → vnode-HvC2-bE9.js} +1 -1
- package/src/assets/web-panel/assets/{zoom-CJco15He.js → zoom-AZxADWXu.js} +1 -1
- package/src/assets/web-panel/index.html +1 -1
- package/src/commands/ask.js +23 -23
- package/src/commands/chat.js +1 -5
- package/src/commands/session.js +92 -61
- package/src/commands/ui.js +18 -5
- package/src/constants.js +3 -0
- package/src/data/changelog.json +26 -0
- package/src/gateways/ws/action-protocol.js +22 -14
- package/src/gateways/ws/chat-intent-protocol.js +7 -3
- package/src/gateways/ws/llm-chat-protocol.js +9 -2
- package/src/gateways/ws/ws-server.js +24 -12
- package/src/lib/chat-intent-service.js +28 -4
- package/src/lib/config-manager.js +49 -16
- package/src/lib/config-schema.js +5 -0
- package/src/lib/context-memory-kernel/task-worklog-port.js +24 -8
- package/src/lib/evolution/evolution-deployment-config.js +48 -5
- package/src/lib/evolution/evolution-deployment-loader.js +26 -11
- package/src/lib/evolution/evolution-enabled.js +27 -0
- package/src/lib/evolution/governed-model-turn.js +4 -1
- package/src/lib/evolution/optional-ui-model-turn.js +26 -0
- package/src/lib/paths.js +2 -2
- package/src/lib/read-file-loop-guard.js +4 -3
- package/src/lib/remote-read-loop-guard.js +2 -1
- package/src/lib/retained-context-preview.js +95 -0
- package/src/lib/task-progress-tracker.js +2 -1
- package/src/repl/chat-repl.js +15 -9
- package/src/runtime/agent-runtime.js +18 -6
- package/src/runtime/headless-stream.js +4 -2
- package/src/assets/web-panel/assets/Artifacts-INNQe4tS.js +0 -1
- package/src/assets/web-panel/assets/EvolutionSettings-C8hEbz_k.js +0 -1
- package/src/assets/web-panel/assets/MarkdownRenderer-Bjl9v5wW.js +0 -1
- package/src/assets/web-panel/assets/MobileProjects-DjmNE-wQ.js +0 -1
- package/src/assets/web-panel/assets/OrderTableRenderer-DBkeHV6o.js +0 -1
- package/src/assets/web-panel/assets/Projects-BOB6rWxT.js +0 -1
- package/src/assets/web-panel/assets/devWarning-CgQHHMHl.js +0 -1
- package/src/assets/web-panel/assets/index-B5iepofq.js +0 -1
- package/src/assets/web-panel/assets/index-C_pAjUXd.js +0 -1
package/src/commands/session.js
CHANGED
|
@@ -106,8 +106,9 @@ function _sessionEpoch(ts) {
|
|
|
106
106
|
* @returns {{statusBar:string, autoMerge:{allow:boolean,reason:string,unmet:string[]}, lines:string[]}}
|
|
107
107
|
*/
|
|
108
108
|
export async function renderPrStatus(signals = {}, opts = {}) {
|
|
109
|
-
const { strictAutoMergeDecision, describePrStatusBar } =
|
|
110
|
-
|
|
109
|
+
const { strictAutoMergeDecision, describePrStatusBar } = await import(
|
|
110
|
+
"../lib/pr-automation-policy.js"
|
|
111
|
+
);
|
|
111
112
|
const autoMerge = strictAutoMergeDecision({
|
|
112
113
|
enabled: opts.enabled === true,
|
|
113
114
|
hasOpenPr: signals.hasOpenPr,
|
|
@@ -356,22 +357,25 @@ export function registerSessionCommand(program, dependencies = {}) {
|
|
|
356
357
|
sourceErrors.local = error?.message || String(error);
|
|
357
358
|
}
|
|
358
359
|
try {
|
|
359
|
-
const { listBackgroundAgents } =
|
|
360
|
-
|
|
360
|
+
const { listBackgroundAgents } = await import(
|
|
361
|
+
"../lib/background-agent-supervisor.js"
|
|
362
|
+
);
|
|
361
363
|
background = listBackgroundAgents({ all: true });
|
|
362
364
|
} catch (error) {
|
|
363
365
|
sourceErrors.background = error?.message || String(error);
|
|
364
366
|
}
|
|
365
367
|
try {
|
|
366
|
-
const { readRemoteControlStates } =
|
|
367
|
-
|
|
368
|
+
const { readRemoteControlStates } = await import(
|
|
369
|
+
"../lib/remote-control.js"
|
|
370
|
+
);
|
|
368
371
|
remote = readRemoteControlStates();
|
|
369
372
|
} catch (error) {
|
|
370
373
|
sourceErrors.remote = error?.message || String(error);
|
|
371
374
|
}
|
|
372
375
|
try {
|
|
373
|
-
const { listCollaborationRuns } =
|
|
374
|
-
|
|
376
|
+
const { listCollaborationRuns } = await import(
|
|
377
|
+
"../lib/collaboration-run-store.js"
|
|
378
|
+
);
|
|
375
379
|
team = listCollaborationRuns({ limit }).filter(
|
|
376
380
|
(run) => run?.kind === "team",
|
|
377
381
|
);
|
|
@@ -392,8 +396,9 @@ export function registerSessionCommand(program, dependencies = {}) {
|
|
|
392
396
|
sourceErrors.workflow = error?.message || String(error);
|
|
393
397
|
}
|
|
394
398
|
try {
|
|
395
|
-
const { listDynamicWorkflowWorkbenchStates } =
|
|
396
|
-
|
|
399
|
+
const { listDynamicWorkflowWorkbenchStates } = await import(
|
|
400
|
+
"../lib/dynamic-workflow-runtime.js"
|
|
401
|
+
);
|
|
397
402
|
const discovered = listDynamicWorkflowWorkbenchStates(projectRoot, {
|
|
398
403
|
limit,
|
|
399
404
|
});
|
|
@@ -412,8 +417,9 @@ export function registerSessionCommand(program, dependencies = {}) {
|
|
|
412
417
|
// engine proves that the exact worktree is supported. Copy-mode
|
|
413
418
|
// checkpoints need explicit paths and therefore cannot truthfully be
|
|
414
419
|
// offered as a one-click session action.
|
|
415
|
-
const { isCheckpointAvailable } =
|
|
416
|
-
|
|
420
|
+
const { isCheckpointAvailable } = await import(
|
|
421
|
+
"../lib/checkpoint-store.js"
|
|
422
|
+
);
|
|
417
423
|
const capability = new Map();
|
|
418
424
|
const decorate = (items, pathFor, sessionFor) =>
|
|
419
425
|
items.map((item) => {
|
|
@@ -456,8 +462,9 @@ export function registerSessionCommand(program, dependencies = {}) {
|
|
|
456
462
|
// checkpoint action unavailable with its explicit reason.
|
|
457
463
|
}
|
|
458
464
|
try {
|
|
459
|
-
const { ArtifactStore, publicArtifactMetadata } =
|
|
460
|
-
|
|
465
|
+
const { ArtifactStore, publicArtifactMetadata } = await import(
|
|
466
|
+
"../lib/artifact-store.js"
|
|
467
|
+
);
|
|
461
468
|
artifacts = new ArtifactStore().list().map(publicArtifactMetadata);
|
|
462
469
|
} catch {
|
|
463
470
|
// Summaries are optional; absence never removes a session.
|
|
@@ -469,22 +476,25 @@ export function registerSessionCommand(program, dependencies = {}) {
|
|
|
469
476
|
// Summaries are optional; absence never removes a session.
|
|
470
477
|
}
|
|
471
478
|
try {
|
|
472
|
-
const { SessionMessageFabric } =
|
|
473
|
-
|
|
479
|
+
const { SessionMessageFabric } = await import(
|
|
480
|
+
"../lib/session-message-fabric.js"
|
|
481
|
+
);
|
|
474
482
|
sessionMessageFabric = new SessionMessageFabric().projection();
|
|
475
483
|
} catch (error) {
|
|
476
484
|
sourceErrors.sessionMessageFabric = error?.message || String(error);
|
|
477
485
|
}
|
|
478
486
|
try {
|
|
479
|
-
const { SessionWorkbenchStore } =
|
|
480
|
-
|
|
487
|
+
const { SessionWorkbenchStore } = await import(
|
|
488
|
+
"../lib/session-workbench-store.js"
|
|
489
|
+
);
|
|
481
490
|
sessionWorkbench = new SessionWorkbenchStore().projection();
|
|
482
491
|
} catch (error) {
|
|
483
492
|
sourceErrors.sessionWorkbench = error?.message || String(error);
|
|
484
493
|
}
|
|
485
494
|
|
|
486
|
-
const { buildSessionProjection } =
|
|
487
|
-
|
|
495
|
+
const { buildSessionProjection } = await import(
|
|
496
|
+
"../lib/session-projection.js"
|
|
497
|
+
);
|
|
488
498
|
const projection = buildSessionProjection({
|
|
489
499
|
local,
|
|
490
500
|
background,
|
|
@@ -511,8 +521,9 @@ export function registerSessionCommand(program, dependencies = {}) {
|
|
|
511
521
|
}
|
|
512
522
|
}
|
|
513
523
|
} catch (error) {
|
|
514
|
-
const { disconnectedSessionProjection } =
|
|
515
|
-
|
|
524
|
+
const { disconnectedSessionProjection } = await import(
|
|
525
|
+
"../lib/session-projection.js"
|
|
526
|
+
);
|
|
516
527
|
if (options.json) {
|
|
517
528
|
jsonPayload = JSON.stringify(
|
|
518
529
|
disconnectedSessionProjection(error?.message || String(error)),
|
|
@@ -562,8 +573,9 @@ export function registerSessionCommand(program, dependencies = {}) {
|
|
|
562
573
|
} else {
|
|
563
574
|
// Live path: resolve the session's linked PR and fetch via gh.
|
|
564
575
|
const { getPrLinks } = await import("../lib/pr-link-ledger.js");
|
|
565
|
-
const { getLastSessionId } =
|
|
566
|
-
|
|
576
|
+
const { getLastSessionId } = await import(
|
|
577
|
+
"../harness/jsonl-session-store.js"
|
|
578
|
+
);
|
|
567
579
|
const sid = !id || id === "last" ? getLastSessionId() : id;
|
|
568
580
|
const links = sid ? getPrLinks(sid) : [];
|
|
569
581
|
if (links.length === 0) {
|
|
@@ -641,8 +653,9 @@ export function registerSessionCommand(program, dependencies = {}) {
|
|
|
641
653
|
// (single / non-TTY / Ctrl-C). Same helper as `cc agent --resume`.
|
|
642
654
|
if (!id) {
|
|
643
655
|
ctx = await bootstrap({ verbose: program.opts().verbose });
|
|
644
|
-
const { pickRecentSession } =
|
|
645
|
-
|
|
656
|
+
const { pickRecentSession } = await import(
|
|
657
|
+
"../lib/session-picker.js"
|
|
658
|
+
);
|
|
646
659
|
const picked = await pickRecentSession(ctx);
|
|
647
660
|
if (!picked.id) {
|
|
648
661
|
logger.error(
|
|
@@ -672,8 +685,9 @@ export function registerSessionCommand(program, dependencies = {}) {
|
|
|
672
685
|
if (jsonlId) {
|
|
673
686
|
// Tamper gate: a broken hash chain means the transcript was edited
|
|
674
687
|
// outside the store — never silently rebuild it as trusted context.
|
|
675
|
-
const { verifySession } =
|
|
676
|
-
|
|
688
|
+
const { verifySession } = await import(
|
|
689
|
+
"../harness/jsonl-session-store.js"
|
|
690
|
+
);
|
|
677
691
|
const trust = verifySession(jsonlId);
|
|
678
692
|
if (["missing", "conflict"].includes(trust.status)) {
|
|
679
693
|
logger.error(
|
|
@@ -741,12 +755,15 @@ export function registerSessionCommand(program, dependencies = {}) {
|
|
|
741
755
|
resolveChatCommandEvolutionComposition,
|
|
742
756
|
assertChatSessionUsageAdmission,
|
|
743
757
|
} = await import("./chat.js");
|
|
744
|
-
const { readEvolutionCompositionFactory } =
|
|
745
|
-
|
|
746
|
-
|
|
747
|
-
|
|
748
|
-
|
|
749
|
-
|
|
758
|
+
const { readEvolutionCompositionFactory } = await import(
|
|
759
|
+
"../lib/evolution/governed-model-turn.js"
|
|
760
|
+
);
|
|
761
|
+
const { loadEvolutionDeploymentCommandDependencies } = await import(
|
|
762
|
+
"../lib/evolution/evolution-deployment-loader.js"
|
|
763
|
+
);
|
|
764
|
+
const { waitForAgentEvolutionSession } = await import(
|
|
765
|
+
"../lib/evolution/agent-evolution-session-lifecycle.js"
|
|
766
|
+
);
|
|
750
767
|
assertChatSessionUsageAdmission(sess.id);
|
|
751
768
|
// Resume is a chat entrypoint. Use the target's authenticated chat
|
|
752
769
|
// deployment, loaded only here so read-only session commands need none.
|
|
@@ -757,8 +774,8 @@ export function registerSessionCommand(program, dependencies = {}) {
|
|
|
757
774
|
);
|
|
758
775
|
const composition =
|
|
759
776
|
await resolveChatCommandEvolutionComposition(factory);
|
|
760
|
-
const ingress = composition
|
|
761
|
-
await ingress.start();
|
|
777
|
+
const ingress = composition?.evolutionIngress ?? null;
|
|
778
|
+
if (ingress !== null) await ingress.start();
|
|
762
779
|
const lifecycle = await startChatRepl({
|
|
763
780
|
model: options.model || sess.model,
|
|
764
781
|
provider: options.provider || sess.provider || "ollama",
|
|
@@ -767,7 +784,9 @@ export function registerSessionCommand(program, dependencies = {}) {
|
|
|
767
784
|
sessionId: sess.id,
|
|
768
785
|
evolutionIngress: ingress,
|
|
769
786
|
});
|
|
770
|
-
|
|
787
|
+
if (ingress !== null)
|
|
788
|
+
await waitForAgentEvolutionSession(lifecycle, ingress);
|
|
789
|
+
else await lifecycle.finished;
|
|
771
790
|
} catch (err) {
|
|
772
791
|
logger.error(`Failed: ${err.message}`);
|
|
773
792
|
process.exitCode = 1;
|
|
@@ -810,8 +829,9 @@ export function registerSessionCommand(program, dependencies = {}) {
|
|
|
810
829
|
);
|
|
811
830
|
}
|
|
812
831
|
if (sid) {
|
|
813
|
-
const { renderAgentSessionMarkdown } =
|
|
814
|
-
|
|
832
|
+
const { renderAgentSessionMarkdown } = await import(
|
|
833
|
+
"../lib/agent-session-export.js"
|
|
834
|
+
);
|
|
815
835
|
markdown = renderAgentSessionMarkdown(sid, store.readEvents(sid), {
|
|
816
836
|
exportedAt: new Date().toISOString(),
|
|
817
837
|
});
|
|
@@ -1064,8 +1084,9 @@ export function registerSessionCommand(program, dependencies = {}) {
|
|
|
1064
1084
|
}
|
|
1065
1085
|
let result;
|
|
1066
1086
|
if (jsonlId) {
|
|
1067
|
-
const { renameSession } =
|
|
1068
|
-
|
|
1087
|
+
const { renameSession } = await import(
|
|
1088
|
+
"../harness/jsonl-session-store.js"
|
|
1089
|
+
);
|
|
1069
1090
|
result = renameSession(jsonlId, normalized);
|
|
1070
1091
|
} else {
|
|
1071
1092
|
ctx = await bootstrap({ verbose: program.opts().verbose });
|
|
@@ -1104,8 +1125,9 @@ export function registerSessionCommand(program, dependencies = {}) {
|
|
|
1104
1125
|
.option("--json", "Output as JSON")
|
|
1105
1126
|
.action(async (options) => {
|
|
1106
1127
|
try {
|
|
1107
|
-
const { pruneJsonlSessions } =
|
|
1108
|
-
|
|
1128
|
+
const { pruneJsonlSessions } = await import(
|
|
1129
|
+
"../harness/jsonl-session-store.js"
|
|
1130
|
+
);
|
|
1109
1131
|
const result = pruneJsonlSessions({
|
|
1110
1132
|
olderThanDays: Number(options.olderThan),
|
|
1111
1133
|
keep: options.keep != null ? Number(options.keep) : undefined,
|
|
@@ -1483,8 +1505,9 @@ export function registerSessionCommand(program, dependencies = {}) {
|
|
|
1483
1505
|
.option("--json", "Output as JSON")
|
|
1484
1506
|
.action(async (id, options) => {
|
|
1485
1507
|
try {
|
|
1486
|
-
const { getApprovalGate } =
|
|
1487
|
-
|
|
1508
|
+
const { getApprovalGate } = await import(
|
|
1509
|
+
"../lib/session-core-singletons.js"
|
|
1510
|
+
);
|
|
1488
1511
|
const gate = await getApprovalGate();
|
|
1489
1512
|
if (options.set) {
|
|
1490
1513
|
await gate.setSessionPolicy(id, options.set);
|
|
@@ -1519,8 +1542,9 @@ export function registerSessionCommand(program, dependencies = {}) {
|
|
|
1519
1542
|
.option("--json", "Output as JSON")
|
|
1520
1543
|
.action(async (options) => {
|
|
1521
1544
|
try {
|
|
1522
|
-
const { getSessionManager } =
|
|
1523
|
-
|
|
1545
|
+
const { getSessionManager } = await import(
|
|
1546
|
+
"../lib/session-core-singletons.js"
|
|
1547
|
+
);
|
|
1524
1548
|
const mgr = getSessionManager();
|
|
1525
1549
|
const live = mgr.list({
|
|
1526
1550
|
agentId: options.agent,
|
|
@@ -1564,8 +1588,9 @@ export function registerSessionCommand(program, dependencies = {}) {
|
|
|
1564
1588
|
.argument("<id>", "Session ID")
|
|
1565
1589
|
.action(async (id) => {
|
|
1566
1590
|
try {
|
|
1567
|
-
const { getSessionManager } =
|
|
1568
|
-
|
|
1591
|
+
const { getSessionManager } = await import(
|
|
1592
|
+
"../lib/session-core-singletons.js"
|
|
1593
|
+
);
|
|
1569
1594
|
const mgr = getSessionManager();
|
|
1570
1595
|
if (!mgr.has(id)) {
|
|
1571
1596
|
logger.error(`Session ${id} is not active in this process`);
|
|
@@ -1590,8 +1615,9 @@ export function registerSessionCommand(program, dependencies = {}) {
|
|
|
1590
1615
|
.argument("<id>", "Session ID")
|
|
1591
1616
|
.action(async (id) => {
|
|
1592
1617
|
try {
|
|
1593
|
-
const { getSessionManager } =
|
|
1594
|
-
|
|
1618
|
+
const { getSessionManager } = await import(
|
|
1619
|
+
"../lib/session-core-singletons.js"
|
|
1620
|
+
);
|
|
1595
1621
|
const mgr = getSessionManager();
|
|
1596
1622
|
const ok = await mgr.resume(id);
|
|
1597
1623
|
if (!ok) {
|
|
@@ -1620,12 +1646,14 @@ export function registerSessionCommand(program, dependencies = {}) {
|
|
|
1620
1646
|
.option("--agent-id <id>", "Agent id for scope=agent")
|
|
1621
1647
|
.action(async (id, options) => {
|
|
1622
1648
|
try {
|
|
1623
|
-
const { getSessionManager } =
|
|
1624
|
-
|
|
1649
|
+
const { getSessionManager } = await import(
|
|
1650
|
+
"../lib/session-core-singletons.js"
|
|
1651
|
+
);
|
|
1625
1652
|
if (options.consolidate) {
|
|
1626
1653
|
try {
|
|
1627
|
-
const { consolidateJsonlSession } =
|
|
1628
|
-
|
|
1654
|
+
const { consolidateJsonlSession } = await import(
|
|
1655
|
+
"../lib/session-consolidator.js"
|
|
1656
|
+
);
|
|
1629
1657
|
const res = await consolidateJsonlSession(id, {
|
|
1630
1658
|
scope: options.scope,
|
|
1631
1659
|
scopeId: options.scopeId || null,
|
|
@@ -1844,8 +1872,9 @@ export function registerSessionCommand(program, dependencies = {}) {
|
|
|
1844
1872
|
);
|
|
1845
1873
|
process.exit(1);
|
|
1846
1874
|
}
|
|
1847
|
-
const { sessionUsage, allSessionsUsage } =
|
|
1848
|
-
|
|
1875
|
+
const { sessionUsage, allSessionsUsage } = await import(
|
|
1876
|
+
"../lib/session-usage.js"
|
|
1877
|
+
);
|
|
1849
1878
|
const result = id
|
|
1850
1879
|
? sessionUsage(id)
|
|
1851
1880
|
: allSessionsUsage({ limit: parseInt(options.limit, 10) || 1000 });
|
|
@@ -1918,8 +1947,9 @@ export function registerSessionCommand(program, dependencies = {}) {
|
|
|
1918
1947
|
.option("--json", "Machine-readable JSON output")
|
|
1919
1948
|
.action(async (id) => {
|
|
1920
1949
|
try {
|
|
1921
|
-
const { getVerifiedSessionObservabilityAuthority } =
|
|
1922
|
-
|
|
1950
|
+
const { getVerifiedSessionObservabilityAuthority } = await import(
|
|
1951
|
+
"../harness/jsonl-session-store.js"
|
|
1952
|
+
);
|
|
1923
1953
|
const authority = getVerifiedSessionObservabilityAuthority(id);
|
|
1924
1954
|
console.log(
|
|
1925
1955
|
JSON.stringify(
|
|
@@ -2357,8 +2387,9 @@ async function mirrorPruneSessions() {
|
|
|
2357
2387
|
* (`session.mirror.encryption`). Requires both to be configured.
|
|
2358
2388
|
*/
|
|
2359
2389
|
async function mirrorRotateKey() {
|
|
2360
|
-
const { createMirror, createMirrorCipher, rotateMirrorKey } =
|
|
2361
|
-
|
|
2390
|
+
const { createMirror, createMirrorCipher, rotateMirrorKey } = await import(
|
|
2391
|
+
"../harness/session-mirror.js"
|
|
2392
|
+
);
|
|
2362
2393
|
const { cfg } = await loadConfiguredMirror();
|
|
2363
2394
|
if (!cfg || !cfg.kind || cfg.kind === "none") {
|
|
2364
2395
|
return { target: null };
|
package/src/commands/ui.js
CHANGED
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
import { logger } from "../lib/logger.js";
|
|
2
2
|
import { createAgentRuntimeFactory } from "../runtime/runtime-factory.js";
|
|
3
3
|
import { readEvolutionCompositionFactory } from "../lib/evolution/governed-model-turn.js";
|
|
4
|
+
import {
|
|
5
|
+
prepareConfiguredUiModelTurn,
|
|
6
|
+
loadConfiguredUiEvolutionFactory,
|
|
7
|
+
} from "../lib/evolution/optional-ui-model-turn.js";
|
|
4
8
|
import { loadEvolutionDeploymentCommandDependencies } from "../lib/evolution/evolution-deployment-loader.js";
|
|
5
9
|
import { getEvolutionDeploymentStatus } from "../lib/evolution/evolution-deployment-config.js";
|
|
6
10
|
|
|
@@ -36,7 +40,7 @@ export function registerUiCommand(program, dependencies = {}) {
|
|
|
36
40
|
try {
|
|
37
41
|
deploymentDependencies =
|
|
38
42
|
await loadEvolutionDeploymentCommandDependencies("ui", {
|
|
39
|
-
initializeDefaultLocalUi:
|
|
43
|
+
initializeDefaultLocalUi: false,
|
|
40
44
|
});
|
|
41
45
|
} catch (error) {
|
|
42
46
|
localTrustSetupError = error;
|
|
@@ -44,7 +48,10 @@ export function registerUiCommand(program, dependencies = {}) {
|
|
|
44
48
|
activeEvolutionCompositionFactory = readEvolutionCompositionFactory(
|
|
45
49
|
deploymentDependencies || {},
|
|
46
50
|
);
|
|
47
|
-
if (
|
|
51
|
+
if (
|
|
52
|
+
activeEvolutionCompositionFactory === null &&
|
|
53
|
+
localTrustSetupError
|
|
54
|
+
) {
|
|
48
55
|
const status = await getEvolutionDeploymentStatus();
|
|
49
56
|
const readiness = status.readiness.ui;
|
|
50
57
|
logger.warn(
|
|
@@ -71,13 +78,19 @@ export function registerUiCommand(program, dependencies = {}) {
|
|
|
71
78
|
10,
|
|
72
79
|
);
|
|
73
80
|
const runtime = createAgentRuntimeFactory({
|
|
74
|
-
deps:
|
|
75
|
-
activeEvolutionCompositionFactory === null
|
|
81
|
+
deps: {
|
|
82
|
+
...(activeEvolutionCompositionFactory === null
|
|
76
83
|
? {}
|
|
77
84
|
: {
|
|
78
85
|
evolutionCompositionFactory:
|
|
79
86
|
activeEvolutionCompositionFactory,
|
|
80
|
-
},
|
|
87
|
+
}),
|
|
88
|
+
// Re-read the shared setting at each new Quick Ask request so the
|
|
89
|
+
// GUI and config-file switches also work in an already running UI.
|
|
90
|
+
prepareUiModelTurn: prepareConfiguredUiModelTurn,
|
|
91
|
+
resolveEvolutionCompositionFactory:
|
|
92
|
+
loadConfiguredUiEvolutionFactory,
|
|
93
|
+
},
|
|
81
94
|
}).createUiRuntime({
|
|
82
95
|
port,
|
|
83
96
|
wsPort: parseInt(opts.wsPort, 10),
|
package/src/constants.js
CHANGED
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.127",
|
|
7
|
+
"cliVersions": ["0.166.127"],
|
|
8
|
+
"date": "2026-10-27",
|
|
9
|
+
"title": "",
|
|
10
|
+
"sections": [
|
|
11
|
+
{
|
|
12
|
+
"heading": "Added - cc CLI 0.166.127: optional self-evolution controls (2026-10-27)",
|
|
13
|
+
"body": "- Default fresh installations and older automatically generated local deployments to self-evolution off. Share the boolean `evolution.enabled` setting across CLI, cc ui, VS Code and JetBrains; explicit false overrides inherited deployment environment variables, while absent settings preserve manually selected deployments.\n- Enable and disable through configuration or deployment commands, initialize the local signed runtime on explicit enable, and retain deployment and trust history when disabled. Require a restart for running Agent sessions and reread the setting for new UI model requests.\n- Keep ordinary Agent, ask, chat, session resume and UI intent confirmation available while off. Retain strict signature and evidence checks for enabled deployments and prevent unrelated configuration writes from changing an absent Evolution choice.\n- Add shared configuration documentation and regression coverage. Pair IDE candidates VS Code 0.37.164 and JetBrains 0.4.180 with CLI 0.166.127; publish them only after verified public CLI availability. Child dependency pins are unchanged.\n- Require exact-source Linux, Windows and macOS CLI CI and Strict Sandbox before GitHub Actions OIDC publication and public package readback. Automatic candidate promotion remains HOLD; this switch does not start a full RRSI campaign or claim new live model-task acceptance."
|
|
14
|
+
}
|
|
15
|
+
]
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
"productVersion": null,
|
|
19
|
+
"cliVersion": "0.166.126",
|
|
20
|
+
"cliVersions": ["0.166.126"],
|
|
21
|
+
"date": "2026-10-26",
|
|
22
|
+
"title": "",
|
|
23
|
+
"sections": [
|
|
24
|
+
{
|
|
25
|
+
"heading": "Fixed - cc CLI 0.166.126: retained recovery context JSON boundaries (2026-10-26)",
|
|
26
|
+
"body": "- Prevent host-created file excerpts, task checkpoints, remote-read summaries and worklog context from injecting truncated JSON into the next model request. Reduce complete JSON structurally and explicitly omit excerpts that cannot be safely represented within the existing decoding budgets.\n- Project legacy checkpoints and regenerated WORKLOG.md views without rewriting canonical session history. Omitted file excerpts retain their location and version but do not count as visible source for subsequent reads.\n- Preserve strict validation of original tool evidence, credential/PII redaction and historical projection rules. Add continuation, restart, handoff, Unicode, budget and real projection verification regressions.\n- Keep all child dependency pins and the public Open VSX 0.37.162 / JetBrains 0.4.179 pairing unchanged. Require exact-source Linux, Windows and macOS CLI CI and CLI Strict Sandbox, publish through GitHub Actions OIDC, verify public archive bytes and provenance, then merge the release PR."
|
|
27
|
+
}
|
|
28
|
+
]
|
|
29
|
+
},
|
|
4
30
|
{
|
|
5
31
|
"productVersion": null,
|
|
6
32
|
"cliVersion": "0.166.125",
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { resolveServerEvolutionFactory } from "../../lib/evolution/optional-ui-model-turn.js";
|
|
2
|
+
|
|
1
3
|
// Track running cowork tasks for cancellation
|
|
2
4
|
const _runningTasks = new Map();
|
|
3
5
|
|
|
@@ -54,7 +56,7 @@ export async function handleCoworkTask(server, id, ws, message) {
|
|
|
54
56
|
files,
|
|
55
57
|
cwd: server.projectRoot || process.cwd(),
|
|
56
58
|
llmOptions: {},
|
|
57
|
-
evolutionCompositionFactory: server
|
|
59
|
+
evolutionCompositionFactory: await resolveServerEvolutionFactory(server),
|
|
58
60
|
signal: ac.signal,
|
|
59
61
|
...(message.mcpSessionId ? { mcpSessionId: message.mcpSessionId } : {}),
|
|
60
62
|
...(useParallel
|
|
@@ -205,8 +207,9 @@ export async function handleCoworkHistory(server, id, ws, message) {
|
|
|
205
207
|
|
|
206
208
|
export async function handleCoworkTemplates(server, id, ws) {
|
|
207
209
|
try {
|
|
208
|
-
const { getTemplatesForUI } =
|
|
209
|
-
|
|
210
|
+
const { getTemplatesForUI } = await import(
|
|
211
|
+
"../../lib/cowork-task-templates.js"
|
|
212
|
+
);
|
|
210
213
|
const templates = getTemplatesForUI();
|
|
211
214
|
server._send(ws, { id, type: "cowork:templates", templates });
|
|
212
215
|
} catch (err) {
|
|
@@ -240,15 +243,16 @@ export async function handleOrchestrate(server, id, ws, message) {
|
|
|
240
243
|
}
|
|
241
244
|
|
|
242
245
|
try {
|
|
243
|
-
const { Orchestrator, TASK_SOURCE } =
|
|
244
|
-
|
|
246
|
+
const { Orchestrator, TASK_SOURCE } = await import(
|
|
247
|
+
"../../lib/orchestrator.js"
|
|
248
|
+
);
|
|
245
249
|
|
|
246
250
|
const orch = new Orchestrator({
|
|
247
251
|
cwd: cwd || server.projectRoot || process.cwd(),
|
|
248
252
|
maxParallel: Math.min(parseInt(agents, 10) || 3, 10),
|
|
249
253
|
ciCommand: ci,
|
|
250
254
|
agents: strategy ? { strategy } : undefined,
|
|
251
|
-
evolutionCompositionFactory: server
|
|
255
|
+
evolutionCompositionFactory: await resolveServerEvolutionFactory(server),
|
|
252
256
|
verbose: false,
|
|
253
257
|
});
|
|
254
258
|
|
|
@@ -389,8 +393,9 @@ async function _resolveWorkflowExecutionAuthority(server, sessionId) {
|
|
|
389
393
|
}
|
|
390
394
|
provider = descriptor.value;
|
|
391
395
|
} else {
|
|
392
|
-
({ getVerifiedSessionExecutionLocationAuthority: provider } =
|
|
393
|
-
|
|
396
|
+
({ getVerifiedSessionExecutionLocationAuthority: provider } = await import(
|
|
397
|
+
"../../harness/jsonl-session-store.js"
|
|
398
|
+
));
|
|
394
399
|
}
|
|
395
400
|
if (typeof provider !== "function") {
|
|
396
401
|
const error = new Error(
|
|
@@ -507,8 +512,9 @@ export async function handleWorkflowSave(server, id, ws, message) {
|
|
|
507
512
|
);
|
|
508
513
|
}
|
|
509
514
|
try {
|
|
510
|
-
const { getWorkflowRecord, validateWorkflow, saveWorkflow } =
|
|
511
|
-
|
|
515
|
+
const { getWorkflowRecord, validateWorkflow, saveWorkflow } = await import(
|
|
516
|
+
"../../lib/cowork-workflow.js"
|
|
517
|
+
);
|
|
512
518
|
const result = validateWorkflow(workflow);
|
|
513
519
|
if (!result.valid) {
|
|
514
520
|
return _sendError(
|
|
@@ -595,8 +601,9 @@ export async function handleWorkflowRun(server, id, ws, message) {
|
|
|
595
601
|
try {
|
|
596
602
|
const { getWorkflowRecord, getWorkflowVersion, executeWorkflow } =
|
|
597
603
|
await import("../../lib/cowork-workflow.js");
|
|
598
|
-
const { executeDynamicWorkflowWithAdmission } =
|
|
599
|
-
|
|
604
|
+
const { executeDynamicWorkflowWithAdmission } = await import(
|
|
605
|
+
"../../lib/dynamic-workflow-facade.js"
|
|
606
|
+
);
|
|
600
607
|
let workflowRunTask;
|
|
601
608
|
if (Object.hasOwn(server, "workflowRunTask")) {
|
|
602
609
|
const descriptor = Object.getOwnPropertyDescriptor(
|
|
@@ -608,8 +615,9 @@ export async function handleWorkflowRun(server, id, ws, message) {
|
|
|
608
615
|
}
|
|
609
616
|
workflowRunTask = descriptor.value;
|
|
610
617
|
} else {
|
|
611
|
-
({ runCoworkTask: workflowRunTask } =
|
|
612
|
-
|
|
618
|
+
({ runCoworkTask: workflowRunTask } = await import(
|
|
619
|
+
"../../lib/cowork-task-runner.js"
|
|
620
|
+
));
|
|
613
621
|
}
|
|
614
622
|
if (typeof workflowRunTask !== "function") {
|
|
615
623
|
throw new Error("Workflow task runner is unavailable");
|
|
@@ -17,6 +17,7 @@ import {
|
|
|
17
17
|
classifyFollowupIntent,
|
|
18
18
|
} from "../../lib/chat-intent-service.js";
|
|
19
19
|
import { resolveLlmCreds } from "./llm-creds.js";
|
|
20
|
+
import { resolveServerEvolutionFactory } from "../../lib/evolution/optional-ui-model-turn.js";
|
|
20
21
|
|
|
21
22
|
/**
|
|
22
23
|
* Look up LLM creds for the intent flow.
|
|
@@ -60,7 +61,8 @@ export async function handleChatIntentUnderstand(server, id, ws, message) {
|
|
|
60
61
|
contextMode: message.contextMode || "global",
|
|
61
62
|
history,
|
|
62
63
|
llmOptions,
|
|
63
|
-
evolutionCompositionFactory: server
|
|
64
|
+
evolutionCompositionFactory: await resolveServerEvolutionFactory(server),
|
|
65
|
+
prepareModelTurn: server.prepareUiModelTurn,
|
|
64
66
|
});
|
|
65
67
|
server._send(ws, {
|
|
66
68
|
id,
|
|
@@ -118,7 +120,8 @@ export async function handleChatIntentUnderstandStream(
|
|
|
118
120
|
contextMode: message.contextMode || "global",
|
|
119
121
|
history,
|
|
120
122
|
llmOptions,
|
|
121
|
-
evolutionCompositionFactory: server
|
|
123
|
+
evolutionCompositionFactory: await resolveServerEvolutionFactory(server),
|
|
124
|
+
prepareModelTurn: server.prepareUiModelTurn,
|
|
122
125
|
})) {
|
|
123
126
|
if (event.type === "token") {
|
|
124
127
|
server._send(ws, {
|
|
@@ -171,7 +174,8 @@ export async function handleChatIntentClassifyFollowup(
|
|
|
171
174
|
input,
|
|
172
175
|
context: message.context || {},
|
|
173
176
|
llmOptions,
|
|
174
|
-
evolutionCompositionFactory: server
|
|
177
|
+
evolutionCompositionFactory: await resolveServerEvolutionFactory(server),
|
|
178
|
+
prepareModelTurn: server.prepareUiModelTurn,
|
|
175
179
|
});
|
|
176
180
|
server._send(ws, {
|
|
177
181
|
id,
|
|
@@ -180,7 +180,14 @@ export async function handleLlmChat(server, id, ws, message) {
|
|
|
180
180
|
ws?.once?.("close", disconnect);
|
|
181
181
|
try {
|
|
182
182
|
const turn = await waitForChatPhase(
|
|
183
|
-
|
|
183
|
+
(
|
|
184
|
+
server.prepareUiModelTurn ||
|
|
185
|
+
((context) =>
|
|
186
|
+
prepareGovernedModelTurn(
|
|
187
|
+
server.evolutionCompositionFactory ?? null,
|
|
188
|
+
context,
|
|
189
|
+
))
|
|
190
|
+
)({
|
|
184
191
|
mode: "ws-llm-chat",
|
|
185
192
|
messages: message.messages,
|
|
186
193
|
signal: controller.signal,
|
|
@@ -189,7 +196,7 @@ export async function handleLlmChat(server, id, ws, message) {
|
|
|
189
196
|
"initialization",
|
|
190
197
|
);
|
|
191
198
|
const streamOptions = {
|
|
192
|
-
requireCompletion:
|
|
199
|
+
requireCompletion: true,
|
|
193
200
|
signal: controller.signal,
|
|
194
201
|
};
|
|
195
202
|
// Tell the browser the configured deadline even when waiting hints are
|
|
@@ -124,10 +124,7 @@ import {
|
|
|
124
124
|
} from "./artifact-protocol.js";
|
|
125
125
|
import { executionBroker } from "../../lib/process-execution-broker/index.js";
|
|
126
126
|
import { collectWorkspacePluginBinSandboxPolicy } from "../../lib/plugin-runtime/bin.js";
|
|
127
|
-
import {
|
|
128
|
-
loadConfig,
|
|
129
|
-
loadUserConfig,
|
|
130
|
-
} from "../../lib/config-manager.js";
|
|
127
|
+
import { loadConfig, loadUserConfig } from "../../lib/config-manager.js";
|
|
131
128
|
|
|
132
129
|
export const _deps = {
|
|
133
130
|
spawn: (...args) => executionBroker.spawn(...args),
|
|
@@ -200,11 +197,9 @@ function boundedInteger(value, fallback, maximum = Number.MAX_SAFE_INTEGER) {
|
|
|
200
197
|
}
|
|
201
198
|
|
|
202
199
|
function loadCurrentLlmConfig() {
|
|
203
|
-
const savedLlm =
|
|
204
|
-
loadUserConfig({ failIfUnavailable: true }).llm || {};
|
|
200
|
+
const savedLlm = loadUserConfig({ failIfUnavailable: true }).llm || {};
|
|
205
201
|
const resolvedLlm = loadConfig({ failIfUnavailable: true }).llm || {};
|
|
206
|
-
const confirmedLlm =
|
|
207
|
-
loadUserConfig({ failIfUnavailable: true }).llm || {};
|
|
202
|
+
const confirmedLlm = loadUserConfig({ failIfUnavailable: true }).llm || {};
|
|
208
203
|
const provider =
|
|
209
204
|
typeof savedLlm.provider === "string" && savedLlm.provider.trim()
|
|
210
205
|
? savedLlm.provider.trim()
|
|
@@ -378,6 +373,21 @@ export class ChainlessChainWSServer extends EventEmitter {
|
|
|
378
373
|
}
|
|
379
374
|
this.evolutionCompositionFactory =
|
|
380
375
|
options.evolutionCompositionFactory || null;
|
|
376
|
+
if (
|
|
377
|
+
options.prepareUiModelTurn != null &&
|
|
378
|
+
typeof options.prepareUiModelTurn !== "function"
|
|
379
|
+
)
|
|
380
|
+
throw new TypeError("prepareUiModelTurn must be a function");
|
|
381
|
+
this.prepareUiModelTurn = options.prepareUiModelTurn || null;
|
|
382
|
+
if (
|
|
383
|
+
options.resolveEvolutionCompositionFactory != null &&
|
|
384
|
+
typeof options.resolveEvolutionCompositionFactory !== "function"
|
|
385
|
+
)
|
|
386
|
+
throw new TypeError(
|
|
387
|
+
"resolveEvolutionCompositionFactory must be a function",
|
|
388
|
+
);
|
|
389
|
+
this.resolveEvolutionCompositionFactory =
|
|
390
|
+
options.resolveEvolutionCompositionFactory || null;
|
|
381
391
|
this.runtimeAdmissionDependencies =
|
|
382
392
|
captureSkillRuntimeDependencies(options);
|
|
383
393
|
this.skillOutcomeIndex =
|
|
@@ -827,8 +837,9 @@ export class ChainlessChainWSServer extends EventEmitter {
|
|
|
827
837
|
/** Read the same static + scoped authority used by the Agent Core. */
|
|
828
838
|
async _handlePermissionRulesGet(id, ws) {
|
|
829
839
|
try {
|
|
830
|
-
const { loadPermissionAuthority } =
|
|
831
|
-
|
|
840
|
+
const { loadPermissionAuthority } = await import(
|
|
841
|
+
"../../lib/permission-authority.js"
|
|
842
|
+
);
|
|
832
843
|
const loaded = loadPermissionAuthority({ cwd: this.projectRoot });
|
|
833
844
|
this._send(ws, {
|
|
834
845
|
id,
|
|
@@ -1588,8 +1599,9 @@ export class ChainlessChainWSServer extends EventEmitter {
|
|
|
1588
1599
|
/** @private — ping/pong heartbeat to detect dead connections */
|
|
1589
1600
|
async _ensureTaskManager() {
|
|
1590
1601
|
if (this._taskManager) return this._taskManager;
|
|
1591
|
-
const { BackgroundTaskManager } =
|
|
1592
|
-
|
|
1602
|
+
const { BackgroundTaskManager } = await import(
|
|
1603
|
+
"../../harness/background-task-manager.js"
|
|
1604
|
+
);
|
|
1593
1605
|
this._taskManager = new BackgroundTaskManager({
|
|
1594
1606
|
recoverOnStart: true,
|
|
1595
1607
|
policyCwd: this.projectRoot,
|