Files
oh-my-opencode/src/features/background-agent/abort-with-timeout.ts
T
2026-04-04 01:19:52 +09:00

36 lines
870 B
TypeScript

import { log } from "../../shared"
import type { OpencodeClient } from "./opencode-client"
export async function abortWithTimeout(
client: OpencodeClient,
sessionID: string,
timeoutMs = 10_000,
): Promise<boolean> {
let timeoutHandle: ReturnType<typeof setTimeout> | undefined
try {
const result = await Promise.race([
client.session.abort({ path: { id: sessionID } }).then(() => "aborted" as const),
new Promise<"timed_out">((resolve) => {
timeoutHandle = setTimeout(() => {
resolve("timed_out")
}, timeoutMs)
}),
])
if (result === "timed_out") {
log("[background-agent] Session abort timed out; continuing cleanup:", {
sessionID,
timeoutMs,
})
return false
}
return true
} finally {
if (timeoutHandle) {
clearTimeout(timeoutHandle)
}
}
}