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,
|
onError,
|
||||||
} = options
|
} = options
|
||||||
let connectionPromise: Promise<ServerConnection> | null = null
|
let connectionPromise: Promise<ServerConnection> | null = null
|
||||||
|
let connectionController: AbortController | null = null
|
||||||
let closed = false
|
let closed = false
|
||||||
let activeRun: Promise<unknown> | null = null
|
let activeRun: Promise<unknown> | null = null
|
||||||
|
|
||||||
@@ -78,11 +79,11 @@ export function createOmoRunner(options: CreateOmoRunnerOptions): OmoRunner {
|
|||||||
throw new Error("Runner is closed")
|
throw new Error("Runner is closed")
|
||||||
}
|
}
|
||||||
if (connectionPromise === null) {
|
if (connectionPromise === null) {
|
||||||
const controller = new AbortController()
|
connectionController = new AbortController()
|
||||||
connectionPromise = createServerConnection({
|
connectionPromise = createServerConnection({
|
||||||
port,
|
port,
|
||||||
attach,
|
attach,
|
||||||
signal: controller.signal,
|
signal: connectionController.signal,
|
||||||
logger: silentLogger,
|
logger: silentLogger,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
@@ -178,9 +179,11 @@ export function createOmoRunner(options: CreateOmoRunnerOptions): OmoRunner {
|
|||||||
},
|
},
|
||||||
async close() {
|
async close() {
|
||||||
closed = true
|
closed = true
|
||||||
|
connectionController?.abort()
|
||||||
const connection = await connectionPromise
|
const connection = await connectionPromise
|
||||||
connection?.cleanup()
|
connection?.cleanup()
|
||||||
connectionPromise = null
|
connectionPromise = null
|
||||||
|
connectionController = null
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -95,11 +95,18 @@ export async function executeRunSession(
|
|||||||
const resolvedModel = resolveRunModel(model)
|
const resolvedModel = resolveRunModel(model)
|
||||||
const abortController = new AbortController()
|
const abortController = new AbortController()
|
||||||
const startTime = Date.now()
|
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()
|
const forwardAbort = () => abortController.abort()
|
||||||
signal?.addEventListener("abort", forwardAbort, { once: true })
|
signal?.addEventListener("abort", forwardAbort, { once: true })
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const resolvedSessionId = await resolveSession({
|
resolvedSessionId = await resolveSession({
|
||||||
client,
|
client,
|
||||||
sessionId,
|
sessionId,
|
||||||
directory,
|
directory,
|
||||||
@@ -182,12 +189,12 @@ export async function executeRunSession(
|
|||||||
const serialized = serializeError(error)
|
const serialized = serializeError(error)
|
||||||
await eventObserver?.onEvent?.({
|
await eventObserver?.onEvent?.({
|
||||||
type: "session.error",
|
type: "session.error",
|
||||||
sessionId: sessionId ?? "",
|
sessionId: resolvedSessionId ?? sessionId ?? "",
|
||||||
error: serialized,
|
error: serialized,
|
||||||
})
|
})
|
||||||
await eventObserver?.onError?.({
|
await eventObserver?.onError?.({
|
||||||
type: "session.error",
|
type: "session.error",
|
||||||
sessionId: sessionId ?? "",
|
sessionId: resolvedSessionId ?? sessionId ?? "",
|
||||||
error: serialized,
|
error: serialized,
|
||||||
})
|
})
|
||||||
throw error
|
throw error
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ async function startServer(options: {
|
|||||||
logger?: RunLogger
|
logger?: RunLogger
|
||||||
}): Promise<ServerConnection> {
|
}): Promise<ServerConnection> {
|
||||||
const { signal, port, logger } = options
|
const { signal, port, logger } = options
|
||||||
const log = logger?.log ?? console.log
|
const log = logger?.log?.bind(logger) ?? console.log
|
||||||
const { client, server } = await withWorkingOpencodePath(() =>
|
const { client, server } = await withWorkingOpencodePath(() =>
|
||||||
createOpencode({ signal, port, hostname: "127.0.0.1" }),
|
createOpencode({ signal, port, hostname: "127.0.0.1" }),
|
||||||
)
|
)
|
||||||
|
|||||||
Reference in New Issue
Block a user