diff --git a/packages/sdk/src/create-omo-runner.ts b/packages/sdk/src/create-omo-runner.ts index 48782c871..9165bcf77 100644 --- a/packages/sdk/src/create-omo-runner.ts +++ b/packages/sdk/src/create-omo-runner.ts @@ -65,6 +65,7 @@ export function createOmoRunner(options: CreateOmoRunnerOptions): OmoRunner { onError, } = options let connectionPromise: Promise | null = null + let connectionController: AbortController | null = null let closed = false let activeRun: Promise | null = null @@ -78,11 +79,11 @@ export function createOmoRunner(options: CreateOmoRunnerOptions): OmoRunner { throw new Error("Runner is closed") } if (connectionPromise === null) { - const controller = new AbortController() + connectionController = new AbortController() connectionPromise = createServerConnection({ port, attach, - signal: controller.signal, + signal: connectionController.signal, logger: silentLogger, }) } @@ -178,9 +179,11 @@ export function createOmoRunner(options: CreateOmoRunnerOptions): OmoRunner { }, async close() { closed = true + connectionController?.abort() const connection = await connectionPromise connection?.cleanup() connectionPromise = null + connectionController = null }, } } diff --git a/src/cli/run/run-engine.ts b/src/cli/run/run-engine.ts index 0e5551e65..6e06b3b0b 100644 --- a/src/cli/run/run-engine.ts +++ b/src/cli/run/run-engine.ts @@ -95,11 +95,18 @@ export async function executeRunSession( const resolvedModel = resolveRunModel(model) const abortController = new AbortController() const startTime = Date.now() + let resolvedSessionId: string | undefined + + // Check if signal was already aborted before setting up listener + if (signal?.aborted) { + abortController.abort() + } + const forwardAbort = () => abortController.abort() signal?.addEventListener("abort", forwardAbort, { once: true }) try { - const resolvedSessionId = await resolveSession({ + resolvedSessionId = await resolveSession({ client, sessionId, directory, @@ -182,12 +189,12 @@ export async function executeRunSession( const serialized = serializeError(error) await eventObserver?.onEvent?.({ type: "session.error", - sessionId: sessionId ?? "", + sessionId: resolvedSessionId ?? sessionId ?? "", error: serialized, }) await eventObserver?.onError?.({ type: "session.error", - sessionId: sessionId ?? "", + sessionId: resolvedSessionId ?? sessionId ?? "", error: serialized, }) throw error diff --git a/src/cli/run/server-connection.ts b/src/cli/run/server-connection.ts index 2c292ad68..ae0d948fd 100644 --- a/src/cli/run/server-connection.ts +++ b/src/cli/run/server-connection.ts @@ -26,7 +26,7 @@ async function startServer(options: { logger?: RunLogger }): Promise { const { signal, port, logger } = options - const log = logger?.log ?? console.log + const log = logger?.log?.bind(logger) ?? console.log const { client, server } = await withWorkingOpencodePath(() => createOpencode({ signal, port, hostname: "127.0.0.1" }), )