fix: address cubic review issues - abort handling, error metadata, logger binding

This commit is contained in:
YeonGyu-Kim
2026-03-16 15:18:41 +09:00
parent 40f25fb07d
commit ed92a05e59
3 changed files with 16 additions and 6 deletions

View File

@@ -65,6 +65,7 @@ export function createOmoRunner(options: CreateOmoRunnerOptions): OmoRunner {
onError,
} = options
let connectionPromise: Promise<ServerConnection> | null = null
let connectionController: AbortController | null = null
let closed = false
let activeRun: Promise<unknown> | 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
},
}
}

View File

@@ -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

View File

@@ -26,7 +26,7 @@ async function startServer(options: {
logger?: RunLogger
}): Promise<ServerConnection> {
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" }),
)