Skip to content

Commit ce726f3

Browse files
committed
WIP
Signed-off-by: Thomas Kosiewski <tk@coder.com>
1 parent 9dd4549 commit ce726f3

File tree

2 files changed

+24
-7
lines changed

2 files changed

+24
-7
lines changed

src/node/services/agentSession.ts

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -505,14 +505,26 @@ export class AgentSession {
505505
} satisfies AgentSessionChatEvent);
506506
}
507507

508-
private _isScriptRunning = false;
508+
private scriptAbortController: AbortController | null = null;
509509

510510
public get isScriptRunning(): boolean {
511-
return this._isScriptRunning;
511+
return this.scriptAbortController !== null;
512512
}
513513

514-
public setScriptRunning(value: boolean): void {
515-
this._isScriptRunning = value;
514+
public startScriptExecution(): AbortSignal {
515+
this.scriptAbortController = new AbortController();
516+
return this.scriptAbortController.signal;
517+
}
518+
519+
public endScriptExecution(): void {
520+
this.scriptAbortController = null;
521+
}
522+
523+
public abortScript(): void {
524+
if (this.scriptAbortController) {
525+
this.scriptAbortController.abort();
526+
this.scriptAbortController = null;
527+
}
516528
}
517529

518530
public processQueue(): void {

src/node/services/ipcMain.ts

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1027,6 +1027,10 @@ export class IpcMain {
10271027
try {
10281028
const session = this.getOrCreateSession(workspaceId);
10291029
const stopResult = await session.interruptStream();
1030+
1031+
// Also abort any running scripts
1032+
session.abortScript();
1033+
10301034
if (!stopResult.success) {
10311035
log.error("Failed to stop stream:", stopResult.error);
10321036
return { success: false, error: stopResult.error };
@@ -1258,7 +1262,7 @@ export class IpcMain {
12581262
: runtimeInstance.getWorkspacePath(metadata.projectPath, metadata.name);
12591263

12601264
const session = this.getOrCreateSession(workspaceId);
1261-
session.setScriptRunning(true);
1265+
const signal = session.startScriptExecution();
12621266

12631267
try {
12641268
// 1. Create and persist script execution message immediately
@@ -1305,7 +1309,8 @@ export class IpcMain {
13051309
args,
13061310
{}, // Extra env
13071311
secretsToRecord(projectSecrets),
1308-
300 // timeout
1312+
300, // timeout
1313+
signal
13091314
);
13101315

13111316
if (!execResult.success) {
@@ -1340,7 +1345,7 @@ export class IpcMain {
13401345
const message = error instanceof Error ? error.message : String(error);
13411346
return Err(`Failed to execute script: ${message}`);
13421347
} finally {
1343-
session.setScriptRunning(false);
1348+
session.endScriptExecution();
13441349
session.processQueue();
13451350
}
13461351
} catch (error) {

0 commit comments

Comments
 (0)