fix: address cubic review issues - abort handling, error metadata, logger binding
This commit is contained in:
@@ -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
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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" }),
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user