@deepseekdev/coder 1.0.74 → 1.0.76
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/LICENSE +1 -1
- package/dist/bin/deepseek.js +0 -0
- package/dist/bin/lean.js +0 -0
- package/dist/capabilities/unifiedCodingCapability.d.ts.map +1 -1
- package/dist/capabilities/unifiedCodingCapability.js +55 -2
- package/dist/capabilities/unifiedCodingCapability.js.map +1 -1
- package/dist/contracts/agent-schemas.json +1 -1
- package/dist/core/agent.d.ts.map +1 -1
- package/dist/core/agent.js +9 -0
- package/dist/core/agent.js.map +1 -1
- package/dist/core/hooks.d.ts.map +1 -1
- package/dist/core/hooks.js +0 -2
- package/dist/core/hooks.js.map +1 -1
- package/dist/core/sessionStore.d.ts.map +1 -1
- package/dist/core/sessionStore.js +1 -2
- package/dist/core/sessionStore.js.map +1 -1
- package/dist/headless/interactiveShell.js +104 -46
- package/dist/headless/interactiveShell.js.map +1 -1
- package/dist/providers/openaiChatCompletionsProvider.d.ts.map +1 -1
- package/dist/providers/openaiChatCompletionsProvider.js +66 -3
- package/dist/providers/openaiChatCompletionsProvider.js.map +1 -1
- package/dist/providers/resilientProvider.d.ts.map +1 -1
- package/dist/providers/resilientProvider.js +12 -1
- package/dist/providers/resilientProvider.js.map +1 -1
- package/dist/ui/UnifiedUIRenderer.d.ts +4 -0
- package/dist/ui/UnifiedUIRenderer.d.ts.map +1 -1
- package/dist/ui/UnifiedUIRenderer.js +153 -20
- package/dist/ui/UnifiedUIRenderer.js.map +1 -1
- package/package.json +2 -3
- package/dist/bin/erosolar.d.ts +0 -7
- package/dist/bin/erosolar.d.ts.map +0 -1
- package/dist/bin/erosolar.js +0 -7
- package/dist/bin/erosolar.js.map +0 -1
|
@@ -2,8 +2,7 @@ import { randomUUID } from 'node:crypto';
|
|
|
2
2
|
import { mkdirSync, readdirSync, readFileSync, rmSync, statSync, writeFileSync } from 'node:fs';
|
|
3
3
|
import { join } from 'node:path';
|
|
4
4
|
import { homedir } from 'node:os';
|
|
5
|
-
const dataRoot = process.env['
|
|
6
|
-
process.env['AGI_DATA_DIR']?.trim() ||
|
|
5
|
+
const dataRoot = process.env['AGI_DATA_DIR']?.trim() ||
|
|
7
6
|
join(homedir(), '.agi');
|
|
8
7
|
const sessionsDir = join(dataRoot, 'sessions');
|
|
9
8
|
const indexPath = join(sessionsDir, 'index.json');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sessionStore.js","sourceRoot":"","sources":["../../src/core/sessionStore.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAChG,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAIlC,MAAM,QAAQ,GACZ,OAAO,CAAC,GAAG,CAAC,
|
|
1
|
+
{"version":3,"file":"sessionStore.js","sourceRoot":"","sources":["../../src/core/sessionStore.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAChG,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAIlC,MAAM,QAAQ,GACZ,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,EAAE,IAAI,EAAE;IACnC,IAAI,CAAC,OAAO,EAAE,EAAE,MAAM,CAAC,CAAC;AAC1B,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;AAC/C,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;AAkClD,MAAM,UAAU,YAAY,CAAC,OAAqB;IAChD,MAAM,KAAK,GAAG,SAAS,EAAE,CAAC;IAC1B,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC7C,MAAM,QAAQ,GAAG,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;IAC1F,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QAC5B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC;QACjD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC;QACjD,OAAO,KAAK,GAAG,KAAK,CAAC;IACvB,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,OAA2B;IAC7D,eAAe,EAAE,CAAC;IAClB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QACrC,MAAM,IAAI,KAAK,CAAC,kEAAkE,CAAC,CAAC;IACtF,CAAC;IAED,MAAM,KAAK,GAAG,SAAS,EAAE,CAAC;IAC1B,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACrC,MAAM,UAAU,GAAG,OAAO,CAAC,EAAE,IAAI,IAAI,CAAC;IACtC,MAAM,SAAS,GACb,UAAU,IAAI,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC;IACtE,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAE1C,MAAM,OAAO,GAAmB;QAC9B,EAAE,EAAE,SAAS;QACb,KAAK,EAAE,aAAa,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,QAAQ,EAAE,KAAK,IAAI,iBAAiB,CAAC,OAAO,CAAC,QAAQ,CAAC;QAC7F,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,aAAa,EAAE,OAAO,CAAC,aAAa,IAAI,QAAQ,EAAE,aAAa,IAAI,SAAS;QAC5E,SAAS,EAAE,QAAQ,EAAE,SAAS,IAAI,GAAG;QACrC,SAAS,EAAE,GAAG;QACd,YAAY,EAAE,OAAO,CAAC,QAAQ,CAAC,MAAM;KACtC,CAAC;IAEF,MAAM,OAAO,GAAkB;QAC7B,GAAG,OAAO;QACV,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,GAAG,CAAC,OAAO,CAAC,gBAAgB,IAAI,EAAE,gBAAgB,EAAE,OAAO,CAAC,gBAAgB,EAAE,CAAC;KAChF,CAAC;IAEF,aAAa,CAAC,cAAc,CAAC,SAAS,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;IACnF,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,OAAO,CAAC;IACnC,UAAU,CAAC,KAAK,CAAC,CAAC;IAClB,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,EAAU;IACxC,IAAI,CAAC,EAAE,EAAE,CAAC;QACR,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,YAAY,CAAC,cAAc,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC;QACrD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAkB,CAAC;QAChD,OAAO,MAAM,CAAC;IAChB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,EAAU;IACtC,IAAI,CAAC,EAAE,EAAE,CAAC;QACR,OAAO,KAAK,CAAC;IACf,CAAC;IACD,MAAM,KAAK,GAAG,SAAS,EAAE,CAAC;IAC1B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC;QACvB,OAAO,KAAK,CAAC;IACf,CAAC;IACD,IAAI,CAAC;QACH,MAAM,CAAC,cAAc,CAAC,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IAC9C,CAAC;IAAC,MAAM,CAAC;QACP,SAAS;IACX,CAAC;IACD,OAAO,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IACzB,UAAU,CAAC,KAAK,CAAC,CAAC;IAClB,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,oBAAoB,CAClC,OAAoB,EACpB,OAA4C;IAE5C,eAAe,EAAE,CAAC;IAClB,MAAM,OAAO,GAAkB;QAC7B,EAAE,EAAE,YAAY,OAAO,EAAE;QACzB,OAAO;QACP,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,aAAa,EAAE,OAAO,CAAC,aAAa,IAAI,SAAS;QACjD,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACnC,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACnC,KAAK,EAAE,aAAa,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,iBAAiB,CAAC,OAAO,CAAC,QAAQ,CAAC;QAC1E,YAAY,EAAE,OAAO,CAAC,QAAQ,CAAC,MAAM;QACrC,QAAQ,EAAE,OAAO,CAAC,QAAQ;KAC3B,CAAC;IACF,aAAa,CAAC,eAAe,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;AACpF,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,OAAoB;IACvD,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,YAAY,CAAC,eAAe,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,CAAC;QAC3D,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAkB,CAAC;IAC1C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,OAAoB;IACxD,IAAI,CAAC;QACH,MAAM,CAAC,eAAe,CAAC,OAAO,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACpD,CAAC;IAAC,MAAM,CAAC;QACP,SAAS;IACX,CAAC;AACH,CAAC;AAED,SAAS,SAAS;IAChB,eAAe,EAAE,CAAC;IAClB,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,YAAY,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;QAC5C,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAiB,CAAC;QAC/C,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,OAAO,MAAM,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;YAChF,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;QACzB,CAAC;QACD,OAAO,EAAE,OAAO,EAAE,EAAE,GAAG,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC;IAC5C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;IACzB,CAAC;AACH,CAAC;AAED,SAAS,UAAU,CAAC,KAAmB;IACrC,eAAe,EAAE,CAAC;IAClB,aAAa,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;AACnE,CAAC;AAED,SAAS,eAAe;IACtB,SAAS,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;AAC9C,CAAC;AAED,SAAS,cAAc,CAAC,EAAU;IAChC,OAAO,IAAI,CAAC,WAAW,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;AACzC,CAAC;AAED,SAAS,eAAe,CAAC,OAAoB;IAC3C,OAAO,IAAI,CAAC,WAAW,EAAE,GAAG,OAAO,gBAAgB,CAAC,CAAC;AACvD,CAAC;AAED,SAAS,aAAa,CAAC,KAAgC;IACrD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAC7B,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;AAC/B,CAAC;AAED,SAAS,iBAAiB,CAAC,QAA+B;IACxD,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YAC5B,SAAS;QACX,CAAC;QACD,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAC9D,IAAI,SAAS,EAAE,CAAC;YACd,OAAO,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QACjC,CAAC;IACH,CAAC;IACD,OAAO,WAAW,IAAI,IAAI,EAAE,CAAC,cAAc,EAAE,EAAE,CAAC;AAClD,CAAC;AAED,SAAS,YAAY;IACnB,IAAI,CAAC;QACH,eAAe,EAAE,CAAC;QAClB,MAAM,KAAK,GAAG,SAAS,EAAE,CAAC;QAC1B,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;QAClD,KAAK,MAAM,IAAI,IAAI,WAAW,CAAC,WAAW,CAAC,EAAE,CAAC;YAC5C,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC5B,SAAS;YACX,CAAC;YACD,IAAI,IAAI,KAAK,YAAY,IAAI,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;gBACxD,SAAS;YACX,CAAC;YACD,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YAC7B,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;gBACnB,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;gBAC1C,MAAM,KAAK,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC;gBAClC,IAAI,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC;oBACnB,MAAM,CAAC,SAAS,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;gBACrC,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,sBAAsB;IACxB,CAAC;AACH,CAAC;AAED,YAAY,EAAE,CAAC"}
|
|
@@ -193,8 +193,11 @@ class InteractiveShell {
|
|
|
193
193
|
promptController = null;
|
|
194
194
|
isProcessing = false;
|
|
195
195
|
shouldExit = false;
|
|
196
|
+
runCounter = 0;
|
|
197
|
+
activeRunId = 0;
|
|
196
198
|
pendingPrompts = [];
|
|
197
199
|
pendingInterruptPrompt = null;
|
|
200
|
+
interruptStartTimer = null;
|
|
198
201
|
debugEnabled = false;
|
|
199
202
|
ctrlCCount = 0;
|
|
200
203
|
lastCtrlCTime = 0;
|
|
@@ -3378,18 +3381,48 @@ Any text response is a failure. Only tool calls are accepted.`;
|
|
|
3378
3381
|
}
|
|
3379
3382
|
// Dismiss inline panel for regular user prompts
|
|
3380
3383
|
this.dismissInlinePanel();
|
|
3381
|
-
|
|
3384
|
+
const busy = this.isProcessing || this.controller.isProcessing();
|
|
3385
|
+
if (busy) {
|
|
3382
3386
|
this.pendingInterruptPrompt = trimmed;
|
|
3383
3387
|
this.controller.cancel('New prompt submitted');
|
|
3384
3388
|
this.promptController?.getRenderer()?.clearStreamBuffer();
|
|
3389
|
+
this.promptController?.setStatusMessage('Interrupting previous request...');
|
|
3390
|
+
this.scheduleInterruptPromptStart();
|
|
3385
3391
|
return;
|
|
3386
3392
|
}
|
|
3387
3393
|
void this.processPrompt(trimmed);
|
|
3388
3394
|
}
|
|
3389
|
-
|
|
3390
|
-
if (this.
|
|
3395
|
+
scheduleInterruptPromptStart() {
|
|
3396
|
+
if (this.interruptStartTimer) {
|
|
3397
|
+
return;
|
|
3398
|
+
}
|
|
3399
|
+
const attemptStart = () => {
|
|
3400
|
+
this.interruptStartTimer = null;
|
|
3401
|
+
if (this.shouldExit) {
|
|
3402
|
+
return;
|
|
3403
|
+
}
|
|
3404
|
+
const prompt = this.pendingInterruptPrompt;
|
|
3405
|
+
if (!prompt) {
|
|
3406
|
+
return;
|
|
3407
|
+
}
|
|
3408
|
+
if (this.controller.isProcessing()) {
|
|
3409
|
+
this.interruptStartTimer = setTimeout(attemptStart, 50);
|
|
3410
|
+
return;
|
|
3411
|
+
}
|
|
3412
|
+
this.pendingInterruptPrompt = null;
|
|
3413
|
+
void this.processPrompt(prompt, { interrupt: true });
|
|
3414
|
+
};
|
|
3415
|
+
this.interruptStartTimer = setTimeout(attemptStart, 0);
|
|
3416
|
+
}
|
|
3417
|
+
async processPrompt(prompt, options) {
|
|
3418
|
+
const interrupting = options?.interrupt ?? false;
|
|
3419
|
+
if (this.isProcessing && !interrupting) {
|
|
3391
3420
|
return;
|
|
3392
3421
|
}
|
|
3422
|
+
const runId = ++this.runCounter;
|
|
3423
|
+
this.activeRunId = runId;
|
|
3424
|
+
this.isProcessing = true;
|
|
3425
|
+
const isActiveRun = () => this.activeRunId === runId;
|
|
3393
3426
|
// Start new run for file change tracking (enables /revert)
|
|
3394
3427
|
startNewRun();
|
|
3395
3428
|
// Flow protection - sanitize prompt for injection attacks
|
|
@@ -3401,6 +3434,11 @@ Any text response is a failure. Only tool calls are accepted.`;
|
|
|
3401
3434
|
// Blocked prompt - show warning and return
|
|
3402
3435
|
const renderer = this.promptController?.getRenderer();
|
|
3403
3436
|
renderer?.addEvent('response', chalk.red(`⚠️ Prompt blocked: ${result.reason}\n`));
|
|
3437
|
+
if (isActiveRun()) {
|
|
3438
|
+
this.isProcessing = false;
|
|
3439
|
+
this.promptController?.setStreaming(false);
|
|
3440
|
+
this.promptController?.setStatusMessage(null);
|
|
3441
|
+
}
|
|
3404
3442
|
return;
|
|
3405
3443
|
}
|
|
3406
3444
|
sanitizedPrompt = result.sanitized;
|
|
@@ -3414,6 +3452,9 @@ Any text response is a failure. Only tool calls are accepted.`;
|
|
|
3414
3452
|
// Run initial exploration on first prompt (not on continuations)
|
|
3415
3453
|
if (!this.explorationCompleted && prompt !== 'continue') {
|
|
3416
3454
|
await this.runInitialExploration();
|
|
3455
|
+
if (!isActiveRun()) {
|
|
3456
|
+
return;
|
|
3457
|
+
}
|
|
3417
3458
|
}
|
|
3418
3459
|
// Prepend exploration context to prompt if available
|
|
3419
3460
|
if (this.explorationContext) {
|
|
@@ -3421,7 +3462,10 @@ Any text response is a failure. Only tool calls are accepted.`;
|
|
|
3421
3462
|
}
|
|
3422
3463
|
// Enter critical section to prevent termination during AI processing
|
|
3423
3464
|
enterCriticalSection();
|
|
3424
|
-
|
|
3465
|
+
if (!isActiveRun()) {
|
|
3466
|
+
exitCriticalSection();
|
|
3467
|
+
return;
|
|
3468
|
+
}
|
|
3425
3469
|
this.currentResponseBuffer = '';
|
|
3426
3470
|
this.promptController?.setStreaming(true);
|
|
3427
3471
|
this.promptController?.setStatusMessage('🔄 Analyzing request...');
|
|
@@ -3448,6 +3492,9 @@ Any text response is a failure. Only tool calls are accepted.`;
|
|
|
3448
3492
|
try {
|
|
3449
3493
|
// Use timeout-wrapped iterator to prevent hanging on slow/stuck models
|
|
3450
3494
|
for await (const eventOrTimeout of iterateWithTimeout(this.controller.send(sanitizedPrompt), PROMPT_STEP_TIMEOUT_MS)) {
|
|
3495
|
+
if (!isActiveRun()) {
|
|
3496
|
+
break;
|
|
3497
|
+
}
|
|
3451
3498
|
// Check for timeout marker
|
|
3452
3499
|
if (eventOrTimeout && typeof eventOrTimeout === 'object' && '__timeout' in eventOrTimeout) {
|
|
3453
3500
|
if (hitlDepth > 0) {
|
|
@@ -3707,6 +3754,9 @@ Any text response is a failure. Only tool calls are accepted.`;
|
|
|
3707
3754
|
break;
|
|
3708
3755
|
}
|
|
3709
3756
|
}
|
|
3757
|
+
if (!isActiveRun()) {
|
|
3758
|
+
return;
|
|
3759
|
+
}
|
|
3710
3760
|
// After loop: synthesize from reasoning if no response was generated or timed out
|
|
3711
3761
|
// This handles models like deepseek-reasoner that output thinking but empty response
|
|
3712
3762
|
// Also handles step timeouts where the model was stuck
|
|
@@ -3728,6 +3778,9 @@ Any text response is a failure. Only tool calls are accepted.`;
|
|
|
3728
3778
|
}
|
|
3729
3779
|
}
|
|
3730
3780
|
catch (error) {
|
|
3781
|
+
if (!isActiveRun()) {
|
|
3782
|
+
return;
|
|
3783
|
+
}
|
|
3731
3784
|
const message = error instanceof Error ? error.message : String(error);
|
|
3732
3785
|
// Suppress error banner for intentional cancellation (new prompt submitted)
|
|
3733
3786
|
const isCancelled = /cancel/i.test(message);
|
|
@@ -3747,8 +3800,9 @@ Any text response is a failure. Only tool calls are accepted.`;
|
|
|
3747
3800
|
finally {
|
|
3748
3801
|
// Exit critical section - allow termination again
|
|
3749
3802
|
exitCriticalSection();
|
|
3803
|
+
const stillActive = isActiveRun();
|
|
3750
3804
|
// Final fallback: If stream ended without message.complete but we have reasoning
|
|
3751
|
-
if (!episodeSuccess && reasoningBuffer.trim() && !this.currentResponseBuffer.trim()) {
|
|
3805
|
+
if (stillActive && !episodeSuccess && reasoningBuffer.trim() && !this.currentResponseBuffer.trim()) {
|
|
3752
3806
|
const synthesized = this.synthesizeFromReasoning(reasoningBuffer);
|
|
3753
3807
|
if (synthesized && renderer) {
|
|
3754
3808
|
renderer.addEvent('stream', '\n' + synthesized);
|
|
@@ -3763,56 +3817,60 @@ Any text response is a failure. Only tool calls are accepted.`;
|
|
|
3763
3817
|
episodeSuccess = true;
|
|
3764
3818
|
}
|
|
3765
3819
|
}
|
|
3766
|
-
|
|
3767
|
-
|
|
3768
|
-
|
|
3769
|
-
|
|
3770
|
-
|
|
3771
|
-
|
|
3772
|
-
|
|
3820
|
+
if (stillActive) {
|
|
3821
|
+
this.isProcessing = false;
|
|
3822
|
+
this.promptController?.setStreaming(false);
|
|
3823
|
+
this.promptController?.setStatusMessage(null);
|
|
3824
|
+
// If cancelled mid-execution, sanitize history to fix orphaned tool calls
|
|
3825
|
+
// Always reset and sanitize when cancelled to ensure clean state for next prompt
|
|
3826
|
+
this.controller.forceReset();
|
|
3827
|
+
this.controller.sanitizeHistory();
|
|
3828
|
+
}
|
|
3773
3829
|
// End episodic memory tracking
|
|
3774
3830
|
const summary = episodeSuccess
|
|
3775
3831
|
? `Completed: ${prompt.slice(0, 100)}${prompt.length > 100 ? '...' : ''}`
|
|
3776
3832
|
: `Failed/interrupted: ${prompt.slice(0, 80)}`;
|
|
3777
3833
|
await memory.endEpisode(episodeSuccess, summary);
|
|
3778
|
-
|
|
3779
|
-
|
|
3780
|
-
|
|
3781
|
-
this.
|
|
3782
|
-
|
|
3783
|
-
|
|
3784
|
-
|
|
3785
|
-
|
|
3786
|
-
|
|
3787
|
-
|
|
3788
|
-
|
|
3789
|
-
|
|
3790
|
-
|
|
3791
|
-
|
|
3792
|
-
|
|
3793
|
-
|
|
3794
|
-
|
|
3795
|
-
|
|
3796
|
-
|
|
3797
|
-
|
|
3798
|
-
|
|
3799
|
-
|
|
3800
|
-
|
|
3801
|
-
|
|
3802
|
-
|
|
3803
|
-
|
|
3804
|
-
|
|
3805
|
-
|
|
3834
|
+
if (stillActive) {
|
|
3835
|
+
this.currentResponseBuffer = '';
|
|
3836
|
+
const interruptPrompt = this.pendingInterruptPrompt;
|
|
3837
|
+
if (interruptPrompt && !this.shouldExit) {
|
|
3838
|
+
this.pendingInterruptPrompt = null;
|
|
3839
|
+
await this.processPrompt(interruptPrompt);
|
|
3840
|
+
}
|
|
3841
|
+
else if (this.pendingPrompts.length > 0 && !this.shouldExit) {
|
|
3842
|
+
const next = this.pendingPrompts.shift();
|
|
3843
|
+
if (next) {
|
|
3844
|
+
await this.processPrompt(next);
|
|
3845
|
+
}
|
|
3846
|
+
}
|
|
3847
|
+
else if (!this.shouldExit) {
|
|
3848
|
+
// Auto mode: keep running until user's prompt is fully completed
|
|
3849
|
+
const autoMode = this.promptController?.getAutoMode() ?? 'off';
|
|
3850
|
+
if (autoMode !== 'off') {
|
|
3851
|
+
// Check if original user prompt is fully completed
|
|
3852
|
+
const detector = getTaskCompletionDetector();
|
|
3853
|
+
const analysis = detector.analyzeCompletion(this.currentResponseBuffer, toolsUsed);
|
|
3854
|
+
// Continue until task is complete
|
|
3855
|
+
if (!analysis.isComplete) {
|
|
3856
|
+
this.promptController?.setStatusMessage(autoMode === 'dual' ? 'Dual refining...' : 'Continuing...');
|
|
3857
|
+
await new Promise(resolve => setTimeout(resolve, 500));
|
|
3858
|
+
// Generate auto-continue prompt using stored original prompt
|
|
3859
|
+
const autoPrompt = this.generateAutoContinuePrompt(this.originalPromptForAutoContinue || '', this.currentResponseBuffer, toolsUsed, autoMode === 'dual' // Pass dual mode flag for tournament refinement
|
|
3860
|
+
);
|
|
3861
|
+
if (autoPrompt) {
|
|
3862
|
+
await this.processPrompt(autoPrompt);
|
|
3863
|
+
}
|
|
3864
|
+
else {
|
|
3865
|
+
// Default continue if no specific auto-prompt generated
|
|
3866
|
+
await this.processPrompt('continue');
|
|
3867
|
+
}
|
|
3806
3868
|
}
|
|
3807
3869
|
else {
|
|
3808
|
-
|
|
3809
|
-
|
|
3870
|
+
this.promptController?.setStatusMessage('Task complete');
|
|
3871
|
+
setTimeout(() => this.promptController?.setStatusMessage(null), 2000);
|
|
3810
3872
|
}
|
|
3811
3873
|
}
|
|
3812
|
-
else {
|
|
3813
|
-
this.promptController?.setStatusMessage('Task complete');
|
|
3814
|
-
setTimeout(() => this.promptController?.setStatusMessage(null), 2000);
|
|
3815
|
-
}
|
|
3816
3874
|
}
|
|
3817
3875
|
}
|
|
3818
3876
|
}
|