chainlesschain 0.166.25 → 0.166.28
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 +16 -10
- package/package.json +1 -1
- package/src/assets/web-panel/assets/{AIOps-RaxL_QQD.js → AIOps-TeJoc3XQ.js} +1 -1
- package/src/assets/web-panel/assets/{ActionButton-DD3ieFO-.js → ActionButton-SZ9klC71.js} +1 -1
- package/src/assets/web-panel/assets/{Analytics-CATDJukS.js → Analytics-BvxMGhXs.js} +3 -3
- package/src/assets/web-panel/assets/{AppLayout-BHGsnRDS.js → AppLayout-5zUWvYnk.js} +4 -4
- package/src/assets/web-panel/assets/{Artifacts-BL6NunjN.js → Artifacts-0BfSQj3N.js} +1 -1
- package/src/assets/web-panel/assets/{Audit-D0nEWfbA.js → Audit-cScBdt3p.js} +1 -1
- package/src/assets/web-panel/assets/{BackgroundAgents-BAP1MUol.js → BackgroundAgents-022mS_uG.js} +1 -1
- package/src/assets/web-panel/assets/{Backup-R4y2OeSi.js → Backup-CWnqpCpj.js} +1 -1
- package/src/assets/web-panel/assets/{BaseInput-ByQZ2z6S.js → BaseInput-BCp80_Kc.js} +1 -1
- package/src/assets/web-panel/assets/{Chat-32uV--xF.js → Chat-B2rj5NdZ.js} +3 -3
- package/src/assets/web-panel/assets/{ChatBubbleRenderer-t1enanwz.js → ChatBubbleRenderer-2Lw_8bkr.js} +1 -1
- package/src/assets/web-panel/assets/{Checkbox-D1CB-7bq.js → Checkbox-BTHrb0x7.js} +1 -1
- package/src/assets/web-panel/assets/{Codegen-BPx3dQ2q.js → Codegen-Y17WGsCF.js} +1 -1
- package/src/assets/web-panel/assets/{Col-DkPTQ2Gl.js → Col-BBBucqHI.js} +1 -1
- package/src/assets/web-panel/assets/{Community-ZriaxRlr.js → Community-B2qcNGY4.js} +1 -1
- package/src/assets/web-panel/assets/{Compact-C_qJ0P7F.js → Compact-BhDyZd93.js} +1 -1
- package/src/assets/web-panel/assets/{Compliance-Bgoy-saS.js → Compliance-BUEgTVrI.js} +1 -1
- package/src/assets/web-panel/assets/{Cowork-B5i9y6XK.js → Cowork-_wey4IKY.js} +2 -2
- package/src/assets/web-panel/assets/{Cron-D7vBJ5-J.js → Cron-BSO7RSdx.js} +2 -2
- package/src/assets/web-panel/assets/{Crosschain-D4kvoGI_.js → Crosschain-DawYCk-u.js} +1 -1
- package/src/assets/web-panel/assets/{DID-BLOeBd-r.js → DID-DvtgImFY.js} +2 -2
- package/src/assets/web-panel/assets/{Dashboard-mecJaonC.js → Dashboard-DYAyw4yL.js} +2 -2
- package/src/assets/web-panel/assets/{Dropdown-GPKwaFer.js → Dropdown-CIaenBpM.js} +1 -1
- package/src/assets/web-panel/assets/{EmailListRenderer-BML9m7Dd.js → EmailListRenderer-jKv7wz64.js} +1 -1
- package/src/assets/web-panel/assets/{FamilyGuardDashboard-DN5bAtJC.js → FamilyGuardDashboard-BxQggJuN.js} +1 -1
- package/src/assets/web-panel/assets/{Federation-DmD6Gecd.js → Federation-CDi_BOHj.js} +1 -1
- package/src/assets/web-panel/assets/{FormItemContext-6wwplN_K.js → FormItemContext-C-7XWf-w.js} +1 -1
- package/src/assets/web-panel/assets/{GenericCardRenderer-DUhpLkDL.js → GenericCardRenderer-D8PAhWue.js} +1 -1
- package/src/assets/web-panel/assets/{Git-eJfyXkwf.js → Git-yhajzO5I.js} +2 -2
- package/src/assets/web-panel/assets/{Governance-swAUW59x.js → Governance-DjM6hZK3.js} +1 -1
- package/src/assets/web-panel/assets/{Inference-CbdwJPDJ.js → Inference-C-gVn1ci.js} +1 -1
- package/src/assets/web-panel/assets/{KnowledgeGraph-UuYpg1nm.js → KnowledgeGraph-CyG5TgH-.js} +1 -1
- package/src/assets/web-panel/assets/{Logs-CS0G057y.js → Logs-CnIbZJc3.js} +2 -2
- package/src/assets/web-panel/assets/MarkdownRenderer-BDfOgqr1.js +1 -0
- package/src/assets/web-panel/assets/{Marketplace-CZRjuvvI.js → Marketplace-BQry6ziq.js} +1 -1
- package/src/assets/web-panel/assets/{McpTools-BOJ9A_Rf.js → McpTools-7MBu8YsX.js} +3 -3
- package/src/assets/web-panel/assets/{Memory-BnkrR-Ok.js → Memory-BlaZL_vM.js} +2 -2
- package/src/assets/web-panel/assets/{MobileBridge-Do4mPi13.js → MobileBridge-iUYdZA22.js} +1 -1
- package/src/assets/web-panel/assets/{MobileProjects-2JxWa6-p.js → MobileProjects-CUO-OpoO.js} +1 -1
- package/src/assets/web-panel/assets/{Mtc-CS_mnpGd.js → Mtc-6sD7414H.js} +2 -2
- package/src/assets/web-panel/assets/{MtcAudit-DZ4J_351.js → MtcAudit-BW8hjlD8.js} +4 -4
- package/src/assets/web-panel/assets/{Multisig-Jh74zKXu.js → Multisig-BA7_DWLu.js} +3 -3
- package/src/assets/web-panel/assets/{NLProgramming-_4n2BfnS.js → NLProgramming-7P7H52-B.js} +1 -1
- package/src/assets/web-panel/assets/{Notes-CtENcKHv.js → Notes-D2O2aG0R.js} +3 -3
- package/src/assets/web-panel/assets/{NotificationSettings-dgDCvpK9.js → NotificationSettings-SD4fdxcr.js} +1 -1
- package/src/assets/web-panel/assets/{OrderTableRenderer-D5VxCrmG.js → OrderTableRenderer-BbXM4Ueq.js} +1 -1
- package/src/assets/web-panel/assets/{Organization-CpIF8Xkd.js → Organization-DNabgtKX.js} +4 -4
- package/src/assets/web-panel/assets/{Overflow-aHnBZaez.js → Overflow-B7Bqrhq0.js} +1 -1
- package/src/assets/web-panel/assets/{P2P-8ppzog2V.js → P2P-Dh0Df0zq.js} +2 -2
- package/src/assets/web-panel/assets/{PdhVaultBrowser-D3p1BXkp.js → PdhVaultBrowser-DHfJarF9.js} +3 -3
- package/src/assets/web-panel/assets/{Permissions-D7vflD5q.js → Permissions-Bz3ddnZ9.js} +4 -4
- package/src/assets/web-panel/assets/{PersonalDataHub-D2hY-Ek2.js → PersonalDataHub-Dfe0X6p8.js} +3 -3
- package/src/assets/web-panel/assets/{Pipeline-qK2VqhJC.js → Pipeline-kCnDqnwc.js} +1 -1
- package/src/assets/web-panel/assets/{Privacy-DHJr4uu0.js → Privacy-CPveUX9G.js} +1 -1
- package/src/assets/web-panel/assets/{ProjectInit-DMBS6trm.js → ProjectInit-ddXd7WTL.js} +2 -2
- package/src/assets/web-panel/assets/{ProjectSettings-D3Ng74BT.js → ProjectSettings-DnXcEjyu.js} +2 -2
- package/src/assets/web-panel/assets/{Projects-BfJFZiIW.js → Projects-O2yaPDuU.js} +1 -1
- package/src/assets/web-panel/assets/{Providers-DlNA95G0.js → Providers-hJpcyGxR.js} +1 -1
- package/src/assets/web-panel/assets/{QrScannerModal-CMOIYxIm.js → QrScannerModal-CkbMoodn.js} +1 -1
- package/src/assets/web-panel/assets/{QuickAsk-D6MyGp5I.js → QuickAsk-CyFailNZ.js} +1 -1
- package/src/assets/web-panel/assets/{Recommend-W6WcShtf.js → Recommend-jpIDoqHs.js} +1 -1
- package/src/assets/web-panel/assets/{RemoteSession-Dm_MjlV_.js → RemoteSession-CieiVXM-.js} +2 -2
- package/src/assets/web-panel/assets/{Reputation-Ctvij6eX.js → Reputation-DHtgC0AY.js} +1 -1
- package/src/assets/web-panel/assets/{Row-DivbeDE-.js → Row-CSUyTUkR.js} +1 -1
- package/src/assets/web-panel/assets/{RssFeed-D4famoAw.js → RssFeed-CkHylSMs.js} +2 -2
- package/src/assets/web-panel/assets/{Search-6gOAh3zG.js → Search-ykyn3OaJ.js} +1 -1
- package/src/assets/web-panel/assets/{Security-DApb9kK8.js → Security-DjM95Eyb.js} +3 -3
- package/src/assets/web-panel/assets/{Services-B8OomyE2.js → Services-Cf4UMvka.js} +2 -2
- package/src/assets/web-panel/assets/{Skeleton-BTJ2g2E3.js → Skeleton-BnR-ZNiM.js} +1 -1
- package/src/assets/web-panel/assets/{Skills-NIRr4DD1.js → Skills-oC5jYJgK.js} +1 -1
- package/src/assets/web-panel/assets/{Sla-BQHP_6px.js → Sla-CTc_YFxW.js} +1 -1
- package/src/assets/web-panel/assets/{SpeechSettings-BVQTDSVS.js → SpeechSettings-31rddoaP.js} +1 -1
- package/src/assets/web-panel/assets/{SyncSettings-BOD4Mar6.js → SyncSettings-C-h00U59.js} +2 -2
- package/src/assets/web-panel/assets/{Tasks-Ciu7H2-y.js → Tasks-CGn_IiAO.js} +1 -1
- package/src/assets/web-panel/assets/{Templates-CtlwavRU.js → Templates-B9Hz_RuF.js} +1 -1
- package/src/assets/web-panel/assets/{Tenant-QLWYJdL6.js → Tenant-CJnIeKrI.js} +1 -1
- package/src/assets/web-panel/assets/{Terminal-B3q10mjm.js → Terminal-DfGtwDMA.js} +2 -2
- package/src/assets/web-panel/assets/{TimelineRenderer-CqltBA_8.js → TimelineRenderer-CISmCIFj.js} +1 -1
- package/src/assets/web-panel/assets/{Tokens-CJOKrj4y.js → Tokens-DNr-VU6W.js} +1 -1
- package/src/assets/web-panel/assets/{Trigger-CPMGgfdM.js → Trigger-CCYolBXm.js} +1 -1
- package/src/assets/web-panel/assets/{Trust-DiJms7Bl.js → Trust-DD75_Hjo.js} +1 -1
- package/src/assets/web-panel/assets/{UkeySign-rakR8eel.js → UkeySign-BXulgGCu.js} +1 -1
- package/src/assets/web-panel/assets/{VideoEditing-DAWZUM5o.js → VideoEditing-B0DgHQiZ.js} +1 -1
- package/src/assets/web-panel/assets/{Wallet-DqUPnl7K.js → Wallet-BV3CEPVS.js} +4 -4
- package/src/assets/web-panel/assets/{WebAuthn-BnVUwvMm.js → WebAuthn-CI9bXloP.js} +2 -2
- package/src/assets/web-panel/assets/{WorkflowEditor-B1CAwxgs.js → WorkflowEditor-B4z18zZp.js} +1 -1
- package/src/assets/web-panel/assets/{chat-k2-0Jzfy.js → chat-BsQ4S4Nh.js} +1 -1
- package/src/assets/web-panel/assets/{colors-BAu8xBmW.js → colors-C0Jsl3u8.js} +1 -1
- package/src/assets/web-panel/assets/{compact-item-DMlqcdfI.js → compact-item-CMZ_5Gdj.js} +1 -1
- package/src/assets/web-panel/assets/{createContext-BU9kfiSw.js → createContext-VeTZ9pjJ.js} +1 -1
- package/src/assets/web-panel/assets/devWarning-ChXQhXs6.js +1 -0
- package/src/assets/web-panel/assets/{hasIn-2vacgdcl.js → hasIn-R2ip_4t-.js} +1 -1
- package/src/assets/web-panel/assets/{index-Bpe2CJd-.js → index-02inSVeg.js} +1 -1
- package/src/assets/web-panel/assets/{index-BUX4W-2v.js → index-0LEUdXks.js} +1 -1
- package/src/assets/web-panel/assets/{index-CSvSf9px.js → index-4i3UILe7.js} +1 -1
- package/src/assets/web-panel/assets/{index-BxctzdYQ.js → index-6vvyh4N2.js} +1 -1
- package/src/assets/web-panel/assets/{index-JsyGqKmD.js → index-B53MC1iz.js} +1 -1
- package/src/assets/web-panel/assets/{index-BMq0frKK.js → index-BDl3jun-.js} +1 -1
- package/src/assets/web-panel/assets/{index-Bn8tARil.js → index-BGFKUUsv.js} +1 -1
- package/src/assets/web-panel/assets/{index-TtrpHmYx.js → index-BGKhfuHU.js} +1 -1
- package/src/assets/web-panel/assets/{index-C9WsM29I.js → index-BJvl_XUa.js} +1 -1
- package/src/assets/web-panel/assets/{index-DWLTSIka.js → index-BPTTGRU9.js} +1 -1
- package/src/assets/web-panel/assets/{index-Chybe7Ge.js → index-BX_8_UFn.js} +1 -1
- package/src/assets/web-panel/assets/{index-C5C4kSi8.js → index-BdwYZI-H.js} +1 -1
- package/src/assets/web-panel/assets/{index-oElehY4F.js → index-Bhz0a_oU.js} +1 -1
- package/src/assets/web-panel/assets/{index-DCusBOqR.js → index-BjW7Qlh-.js} +1 -1
- package/src/assets/web-panel/assets/index-BpqhSIKB.js +1 -0
- package/src/assets/web-panel/assets/{index-DHg3LMNP.js → index-BtV-unhh.js} +1 -1
- package/src/assets/web-panel/assets/{index-DH01oIaj.js → index-ByPe74vs.js} +1 -1
- package/src/assets/web-panel/assets/{index-CXmpR6N3.js → index-Bz4O8exa.js} +3 -3
- package/src/assets/web-panel/assets/{index-DmZNnZz7.js → index-C3oYV_lA.js} +1 -1
- package/src/assets/web-panel/assets/{index-CyXmP3PW.js → index-CIanQUmB.js} +1 -1
- package/src/assets/web-panel/assets/{index-Ygh0wmKz.js → index-CNMfIBsh.js} +1 -1
- package/src/assets/web-panel/assets/{index-CONPVaxw.js → index-CsoYgCfM.js} +1 -1
- package/src/assets/web-panel/assets/{index-C6ICn9Y6.js → index-CuIo38St.js} +1 -1
- package/src/assets/web-panel/assets/index-Cv9p7aNY.js +1 -0
- package/src/assets/web-panel/assets/{index-B7wDjYUd.js → index-D4DUCUMd.js} +1 -1
- package/src/assets/web-panel/assets/{index-BZz2eB33.js → index-DF8AVnyq.js} +1 -1
- package/src/assets/web-panel/assets/{index-BblNQlaA.js → index-DUfRaQ2R.js} +1 -1
- package/src/assets/web-panel/assets/{index-BdfKoqsK.js → index-DdXJoar7.js} +1 -1
- package/src/assets/web-panel/assets/{index-hDHHJYno.js → index-DjkLws9g.js} +1 -1
- package/src/assets/web-panel/assets/{index-DfWvcu4p.js → index-Dqf95oif.js} +1 -1
- package/src/assets/web-panel/assets/{index-DaUGdvtU.js → index-Du20UePt.js} +1 -1
- package/src/assets/web-panel/assets/{index-DcA-tEQd.js → index-DvYF07ij.js} +1 -1
- package/src/assets/web-panel/assets/{index-C8ldqZi6.js → index-DwfM7rYW.js} +1 -1
- package/src/assets/web-panel/assets/{index-CPyYXKFB.js → index-WJ_YxlwK.js} +1 -1
- package/src/assets/web-panel/assets/{index-Bf8YofPE.js → index-Zlt4hVX9.js} +1 -1
- package/src/assets/web-panel/assets/{index-z4_YwZDW.js → index-iHgBGK8l.js} +1 -1
- package/src/assets/web-panel/assets/{index-dIYqw3f0.js → index-nM2lMEZ4.js} +1 -1
- package/src/assets/web-panel/assets/{index-B-C-Ruft.js → index-q_5BV7Pj.js} +1 -1
- package/src/assets/web-panel/assets/{index-C24NoPpy.js → index-yIN1stc7.js} +1 -1
- package/src/assets/web-panel/assets/{initDefaultProps-B9OXWu2e.js → initDefaultProps-D1uCn3z4.js} +1 -1
- package/src/assets/web-panel/assets/{motion-IQ47MCDQ.js → motion-5TP3EY0Q.js} +1 -1
- package/src/assets/web-panel/assets/{move-CLCU4kjV.js → move-C_bi-KUq.js} +1 -1
- package/src/assets/web-panel/assets/{mtc-parser-CXnVlSPq.js → mtc-parser-CmdzT6ro.js} +1 -1
- package/src/assets/web-panel/assets/{omit-BJjLXB0f.js → omit-Ce0_wQke.js} +1 -1
- package/src/assets/web-panel/assets/{pickAttrs-BHdtvdy6.js → pickAttrs-DG8auaWM.js} +1 -1
- package/src/assets/web-panel/assets/{placementArrow-oq8X_Bwc.js → placementArrow-CaWVLdLv.js} +1 -1
- package/src/assets/web-panel/assets/{responsiveObserve-DTD02LAO.js → responsiveObserve-Bot4LFBx.js} +1 -1
- package/src/assets/web-panel/assets/{slide-DbEeq8to.js → slide-HCFYDpKc.js} +1 -1
- package/src/assets/web-panel/assets/{statusUtils-Do2fy1CJ.js → statusUtils-CWNqwWxQ.js} +1 -1
- package/src/assets/web-panel/assets/{styleChecker-CFWD63T-.js → styleChecker-BUyR4PCy.js} +1 -1
- package/src/assets/web-panel/assets/{useFlexGapSupport-BeozAWOo.js → useFlexGapSupport-C4XRVB5s.js} +1 -1
- package/src/assets/web-panel/assets/{useFs-0-rIgnBL.js → useFs-D2VOJbk-.js} +1 -1
- package/src/assets/web-panel/assets/{usePersonalDataHub-CeiNoI31.js → usePersonalDataHub-dN8G1tq6.js} +1 -1
- package/src/assets/web-panel/assets/{vnode-Dj0ReRNg.js → vnode-DSQKKZnw.js} +1 -1
- package/src/assets/web-panel/assets/{zoom-DD7MC4Dy.js → zoom-Dl0bVMqQ.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 +205 -76
- package/src/lib/read-file-page.js +55 -2
- package/src/lib/sub-agent-context.js +34 -2
- package/src/repl/chat-repl.js +60 -10
- package/src/runtime/agent-core.js +243 -64
- package/src/runtime/agent-runtime.js +20 -1
- package/src/runtime/runtime-factory.js +1 -1
- package/src/assets/web-panel/assets/MarkdownRenderer-BxIIB4k3.js +0 -1
- package/src/assets/web-panel/assets/devWarning-DuGrUMAS.js +0 -1
- package/src/assets/web-panel/assets/index-DvFfMAux.js +0 -1
- package/src/assets/web-panel/assets/index-n6p-1A77.js +0 -1
|
@@ -12,6 +12,8 @@ import crypto from "crypto";
|
|
|
12
12
|
import { CLIContextEngineering } from "./cli-context-engineering.js";
|
|
13
13
|
import { agentLoop, buildSystemPrompt, AGENT_TOOLS } from "./agent-core.js";
|
|
14
14
|
import { feature } from "./feature-flags.js";
|
|
15
|
+
import { isEvolutionIngressFailure } from "./model-failure-policy.js";
|
|
16
|
+
import { captureAgentEvolutionIngress } from "./evolution/agent-evolution-ingress.js";
|
|
15
17
|
import {
|
|
16
18
|
createWorktree,
|
|
17
19
|
removeWorktree,
|
|
@@ -589,7 +591,13 @@ export class SubAgentContext {
|
|
|
589
591
|
}
|
|
590
592
|
return result;
|
|
591
593
|
} catch (err) {
|
|
592
|
-
if (
|
|
594
|
+
if (
|
|
595
|
+
isEvolutionIngressFailure(err) ||
|
|
596
|
+
err?.runtimeLedgerPersistence === true ||
|
|
597
|
+
this._workflowEffectId
|
|
598
|
+
) {
|
|
599
|
+
this.status = "failed";
|
|
600
|
+
this.completedAt = new Date().toISOString();
|
|
593
601
|
throw err;
|
|
594
602
|
}
|
|
595
603
|
// If worktree creation fails (e.g. not a git repo), fall back to direct
|
|
@@ -875,12 +883,21 @@ export class SubAgentContext {
|
|
|
875
883
|
options.approvalGate = this._approvalGate;
|
|
876
884
|
}
|
|
877
885
|
|
|
886
|
+
const evolutionIngress =
|
|
887
|
+
options.evolutionIngress == null
|
|
888
|
+
? null
|
|
889
|
+
: captureAgentEvolutionIngress(options.evolutionIngress);
|
|
890
|
+
if (evolutionIngress !== null) options.evolutionIngress = evolutionIngress;
|
|
891
|
+
|
|
878
892
|
try {
|
|
879
893
|
// Use a separate messages array for the agent loop
|
|
880
894
|
// The agentLoop will append to this.messages directly
|
|
881
895
|
const gen = agentLoop(this.messages, options);
|
|
882
896
|
|
|
883
897
|
for await (const event of gen) {
|
|
898
|
+
if (evolutionIngress !== null) {
|
|
899
|
+
await evolutionIngress.ingestAgentEvent(event);
|
|
900
|
+
}
|
|
884
901
|
this._iterationCount++;
|
|
885
902
|
|
|
886
903
|
if (event.type === "run-started" && event.runId) {
|
|
@@ -1099,6 +1116,13 @@ export class SubAgentContext {
|
|
|
1099
1116
|
this._tokenCount += Math.ceil((lastContent.length || 0) / 4);
|
|
1100
1117
|
}
|
|
1101
1118
|
|
|
1119
|
+
if (event.type === "run-ended" && event.reason !== "complete") {
|
|
1120
|
+
this.forceComplete(event.reason || "unknown-terminal-reason", {
|
|
1121
|
+
partialContent: lastContent,
|
|
1122
|
+
artifacts,
|
|
1123
|
+
});
|
|
1124
|
+
}
|
|
1125
|
+
|
|
1102
1126
|
// Emit progress to consumer if callback provided
|
|
1103
1127
|
if (this._onProgress) {
|
|
1104
1128
|
try {
|
|
@@ -1161,7 +1185,13 @@ export class SubAgentContext {
|
|
|
1161
1185
|
throw error;
|
|
1162
1186
|
}
|
|
1163
1187
|
} catch (err) {
|
|
1164
|
-
if (
|
|
1188
|
+
if (
|
|
1189
|
+
isEvolutionIngressFailure(err) ||
|
|
1190
|
+
err?.runtimeLedgerPersistence === true ||
|
|
1191
|
+
this._workflowEffectId
|
|
1192
|
+
) {
|
|
1193
|
+
this.status = "failed";
|
|
1194
|
+
this.completedAt = new Date().toISOString();
|
|
1165
1195
|
throw err;
|
|
1166
1196
|
}
|
|
1167
1197
|
if (this.isAborted()) {
|
|
@@ -1295,6 +1325,8 @@ export class SubAgentContext {
|
|
|
1295
1325
|
: "";
|
|
1296
1326
|
this.result = {
|
|
1297
1327
|
summary: `(Sub-agent force-completed: ${reason})${partialText}`,
|
|
1328
|
+
incomplete: true,
|
|
1329
|
+
completionReason: reason,
|
|
1298
1330
|
artifacts: Array.isArray(partial.artifacts) ? partial.artifacts : [],
|
|
1299
1331
|
tokenCount: this._tokenCount,
|
|
1300
1332
|
toolsUsed: [...new Set(this._toolsUsed)],
|
package/src/repl/chat-repl.js
CHANGED
|
@@ -56,6 +56,8 @@ import { installPipeSafety } from "../runtime/pipe-safety.js";
|
|
|
56
56
|
import { installOutputBackpressure } from "../runtime/output-backpressure.js";
|
|
57
57
|
import { assertChatSessionUsageAdmission } from "../lib/chat-session-admission.js";
|
|
58
58
|
import { captureAmbientExecutionLocation } from "../lib/execution-location-runtime.js";
|
|
59
|
+
import { captureAgentEvolutionIngress } from "../lib/evolution/agent-evolution-ingress.js";
|
|
60
|
+
import { createAgentEvolutionSessionLifecycle } from "../lib/evolution/agent-evolution-session-lifecycle.js";
|
|
59
61
|
|
|
60
62
|
const SLASH_COMMANDS = {
|
|
61
63
|
"/exit": "Exit the chat",
|
|
@@ -94,9 +96,17 @@ const SLASH_COMMANDS = {
|
|
|
94
96
|
* @param {object} options
|
|
95
97
|
*/
|
|
96
98
|
export async function startChatRepl(options = {}) {
|
|
99
|
+
const evolutionIngress =
|
|
100
|
+
options.evolutionIngress == null
|
|
101
|
+
? null
|
|
102
|
+
: captureAgentEvolutionIngress(options.evolutionIngress);
|
|
97
103
|
const admittedSessionId = options.sessionId
|
|
98
104
|
? assertChatSessionUsageAdmission(options.sessionId)
|
|
99
105
|
: null;
|
|
106
|
+
const evolutionSession =
|
|
107
|
+
evolutionIngress === null
|
|
108
|
+
? null
|
|
109
|
+
: createAgentEvolutionSessionLifecycle(evolutionIngress);
|
|
100
110
|
let model = options.model || "qwen2:7b";
|
|
101
111
|
let provider = options.provider || "ollama";
|
|
102
112
|
const baseUrl = options.baseUrl || "http://localhost:11434";
|
|
@@ -147,7 +157,9 @@ export async function startChatRepl(options = {}) {
|
|
|
147
157
|
),
|
|
148
158
|
);
|
|
149
159
|
try {
|
|
150
|
-
|
|
160
|
+
const createInterface =
|
|
161
|
+
options.createInterface || readline.createInterface.bind(readline);
|
|
162
|
+
rl = createInterface({
|
|
151
163
|
input: options.input || process.stdin,
|
|
152
164
|
output: stdout,
|
|
153
165
|
prompt: chalk.green("you> "),
|
|
@@ -266,13 +278,20 @@ export async function startChatRepl(options = {}) {
|
|
|
266
278
|
logger.verbose?.(`[@ref] expansion skipped: ${err.message}`);
|
|
267
279
|
}
|
|
268
280
|
|
|
269
|
-
|
|
270
|
-
|
|
281
|
+
try {
|
|
282
|
+
if (evolutionIngress !== null) {
|
|
283
|
+
await evolutionIngress.ingestUserPrompt({
|
|
284
|
+
content: userContent,
|
|
285
|
+
sessionId,
|
|
286
|
+
});
|
|
287
|
+
}
|
|
271
288
|
|
|
272
|
-
|
|
273
|
-
|
|
289
|
+
// Add user message
|
|
290
|
+
messages.push({ role: "user", content: userContent });
|
|
291
|
+
|
|
292
|
+
// Stream the response
|
|
293
|
+
stdout.write(chalk.blue("ai> "));
|
|
274
294
|
|
|
275
|
-
try {
|
|
276
295
|
let response;
|
|
277
296
|
const onToken = (token) => {
|
|
278
297
|
const accepted = stdout.write(token);
|
|
@@ -302,9 +321,19 @@ export async function startChatRepl(options = {}) {
|
|
|
302
321
|
if (sessionId)
|
|
303
322
|
appendEvent(sessionId, "user_message", { content: trimmed });
|
|
304
323
|
|
|
324
|
+
const providerMessages =
|
|
325
|
+
evolutionIngress === null
|
|
326
|
+
? messages
|
|
327
|
+
: (
|
|
328
|
+
await evolutionIngress.prepareModelRequest({
|
|
329
|
+
messages,
|
|
330
|
+
tools: [],
|
|
331
|
+
})
|
|
332
|
+
).messages;
|
|
333
|
+
|
|
305
334
|
if (provider === "ollama") {
|
|
306
335
|
response = await streamOllama(
|
|
307
|
-
|
|
336
|
+
providerMessages,
|
|
308
337
|
model,
|
|
309
338
|
baseUrl,
|
|
310
339
|
onToken,
|
|
@@ -325,7 +354,7 @@ export async function startChatRepl(options = {}) {
|
|
|
325
354
|
`API key required for anthropic (set ${providerDef?.apiKeyEnv || "ANTHROPIC_API_KEY"})`,
|
|
326
355
|
);
|
|
327
356
|
response = await streamAnthropic(
|
|
328
|
-
|
|
357
|
+
providerMessages,
|
|
329
358
|
model,
|
|
330
359
|
url,
|
|
331
360
|
key,
|
|
@@ -348,7 +377,7 @@ export async function startChatRepl(options = {}) {
|
|
|
348
377
|
`API key required for ${provider} (set ${providerDef?.apiKeyEnv || "API key"})`,
|
|
349
378
|
);
|
|
350
379
|
response = await streamOpenAI(
|
|
351
|
-
|
|
380
|
+
providerMessages,
|
|
352
381
|
model,
|
|
353
382
|
url,
|
|
354
383
|
key,
|
|
@@ -358,6 +387,14 @@ export async function startChatRepl(options = {}) {
|
|
|
358
387
|
);
|
|
359
388
|
}
|
|
360
389
|
|
|
390
|
+
if (evolutionIngress !== null) {
|
|
391
|
+
await evolutionIngress.ingestAgentEvent({
|
|
392
|
+
type: "response-complete",
|
|
393
|
+
content: response,
|
|
394
|
+
sessionId,
|
|
395
|
+
});
|
|
396
|
+
}
|
|
397
|
+
|
|
361
398
|
stdout.write("\n\n");
|
|
362
399
|
messages.push({ role: "assistant", content: response });
|
|
363
400
|
|
|
@@ -410,6 +447,19 @@ export async function startChatRepl(options = {}) {
|
|
|
410
447
|
: 0;
|
|
411
448
|
disposePipeSafety();
|
|
412
449
|
outputFlow.restore();
|
|
413
|
-
|
|
450
|
+
if (evolutionSession !== null) {
|
|
451
|
+
try {
|
|
452
|
+
await evolutionSession.close(outputFailure);
|
|
453
|
+
} catch (error) {
|
|
454
|
+
outputFailure ||= error;
|
|
455
|
+
}
|
|
456
|
+
}
|
|
457
|
+
const finalExitCode = outputFailure
|
|
458
|
+
? outputFailure.code === "EPIPE"
|
|
459
|
+
? 0
|
|
460
|
+
: 1
|
|
461
|
+
: exitCode;
|
|
462
|
+
process.exit(finalExitCode);
|
|
414
463
|
});
|
|
464
|
+
return evolutionSession?.handle;
|
|
415
465
|
}
|