Codex abort 時のエラーメッセージをタイムアウトと外部中断で区別
This commit is contained in:
parent
55559cc41c
commit
de89882c7f
@ -24,6 +24,7 @@ export type { CodexCallOptions } from './types.js';
|
|||||||
|
|
||||||
const log = createLogger('codex-sdk');
|
const log = createLogger('codex-sdk');
|
||||||
const CODEX_STREAM_IDLE_TIMEOUT_MS = 10 * 60 * 1000;
|
const CODEX_STREAM_IDLE_TIMEOUT_MS = 10 * 60 * 1000;
|
||||||
|
const CODEX_STREAM_ABORTED_MESSAGE = 'Codex execution aborted';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Client for Codex SDK agent interactions.
|
* Client for Codex SDK agent interactions.
|
||||||
@ -58,18 +59,21 @@ export class CodexClient {
|
|||||||
|
|
||||||
let idleTimeoutId: ReturnType<typeof setTimeout> | undefined;
|
let idleTimeoutId: ReturnType<typeof setTimeout> | undefined;
|
||||||
const streamAbortController = new AbortController();
|
const streamAbortController = new AbortController();
|
||||||
const abortMessage = `Codex stream timed out after ${Math.floor(CODEX_STREAM_IDLE_TIMEOUT_MS / 60000)} minutes of inactivity`;
|
const timeoutMessage = `Codex stream timed out after ${Math.floor(CODEX_STREAM_IDLE_TIMEOUT_MS / 60000)} minutes of inactivity`;
|
||||||
|
let abortCause: 'timeout' | 'external' | undefined;
|
||||||
|
|
||||||
const resetIdleTimeout = (): void => {
|
const resetIdleTimeout = (): void => {
|
||||||
if (idleTimeoutId !== undefined) {
|
if (idleTimeoutId !== undefined) {
|
||||||
clearTimeout(idleTimeoutId);
|
clearTimeout(idleTimeoutId);
|
||||||
}
|
}
|
||||||
idleTimeoutId = setTimeout(() => {
|
idleTimeoutId = setTimeout(() => {
|
||||||
|
abortCause = 'timeout';
|
||||||
streamAbortController.abort();
|
streamAbortController.abort();
|
||||||
}, CODEX_STREAM_IDLE_TIMEOUT_MS);
|
}, CODEX_STREAM_IDLE_TIMEOUT_MS);
|
||||||
};
|
};
|
||||||
|
|
||||||
const onExternalAbort = (): void => {
|
const onExternalAbort = (): void => {
|
||||||
|
abortCause = 'external';
|
||||||
streamAbortController.abort();
|
streamAbortController.abort();
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -202,7 +206,11 @@ export class CodexClient {
|
|||||||
};
|
};
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
const message = getErrorMessage(error);
|
const message = getErrorMessage(error);
|
||||||
const errorMessage = streamAbortController.signal.aborted ? abortMessage : message;
|
const errorMessage = streamAbortController.signal.aborted
|
||||||
|
? abortCause === 'timeout'
|
||||||
|
? timeoutMessage
|
||||||
|
: CODEX_STREAM_ABORTED_MESSAGE
|
||||||
|
: message;
|
||||||
emitResult(options.onStream, false, errorMessage, threadId);
|
emitResult(options.onStream, false, errorMessage, threadId);
|
||||||
|
|
||||||
return {
|
return {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user