fix: stop resetting missing-terminal timeout on notifications (#238)

This commit is contained in:
Lyon
2026-06-24 09:12:27 +08:00
committed by GitHub
parent 60e6a1ff71
commit 3e72b6bf84
+4 -1
View File
@@ -572,6 +572,7 @@ async function runCodexStdioTurnWithSession(options: CodexStdioTurnOptions, sess
let idleTimeout: NodeJS.Timeout | null = null; let idleTimeout: NodeJS.Timeout | null = null;
let idleWarningTimeout: NodeJS.Timeout | null = null; let idleWarningTimeout: NodeJS.Timeout | null = null;
let missingTerminalAfterToolTimeout: NodeJS.Timeout | null = null; let missingTerminalAfterToolTimeout: NodeJS.Timeout | null = null;
let lastToolCallAt: number | null = null;
const turnHardTimeoutAttrs = (): JsonRecord => ({ const turnHardTimeoutAttrs = (): JsonRecord => ({
waitingFor, waitingFor,
elapsedMs: Math.max(0, Date.now() - turnStartedAt), elapsedMs: Math.max(0, Date.now() - turnStartedAt),
@@ -586,6 +587,7 @@ async function runCodexStdioTurnWithSession(options: CodexStdioTurnOptions, sess
retryMaxAttempts: 0, retryMaxAttempts: 0,
retryExhausted: true, retryExhausted: true,
lastToolCall, lastToolCall,
toolIdleMs: lastToolCallAt === null ? null : Math.max(0, Date.now() - lastToolCallAt),
}); });
const failTurnHardTimeout = (): void => { const failTurnHardTimeout = (): void => {
if (terminal) return; if (terminal) return;
@@ -637,6 +639,7 @@ async function runCodexStdioTurnWithSession(options: CodexStdioTurnOptions, sess
resolveTerminalNow(); resolveTerminalNow();
}; };
const scheduleMissingTerminalAfterToolTimeout = (): void => { const scheduleMissingTerminalAfterToolTimeout = (): void => {
if (!lastToolCall) return;
clearMissingTerminalAfterToolTimeout(); clearMissingTerminalAfterToolTimeout();
missingTerminalAfterToolTimeout = setTimeout(failMissingTerminalAfterTool, missingTerminalAfterToolTimeoutMs); missingTerminalAfterToolTimeout = setTimeout(failMissingTerminalAfterTool, missingTerminalAfterToolTimeoutMs);
missingTerminalAfterToolTimeout.unref?.(); missingTerminalAfterToolTimeout.unref?.();
@@ -656,7 +659,6 @@ async function runCodexStdioTurnWithSession(options: CodexStdioTurnOptions, sess
if (terminal) return; if (terminal) return;
lastActivityAt = Date.now(); lastActivityAt = Date.now();
scheduleIdleWarning(); scheduleIdleWarning();
if (lastToolCall) scheduleMissingTerminalAfterToolTimeout();
if (idleTimeout) clearTimeout(idleTimeout); if (idleTimeout) clearTimeout(idleTimeout);
idleTimeout = setTimeout(() => { idleTimeout = setTimeout(() => {
if (terminal) return; if (terminal) return;
@@ -691,6 +693,7 @@ async function runCodexStdioTurnWithSession(options: CodexStdioTurnOptions, sess
const toolSummary = toolCallSummaryFromNotification(message); const toolSummary = toolCallSummaryFromNotification(message);
if (toolSummary?.status === "completed" || toolSummary?.status === "failed") { if (toolSummary?.status === "completed" || toolSummary?.status === "failed") {
lastToolCall = toolSummary; lastToolCall = toolSummary;
lastToolCallAt = Date.now();
missingTerminalAfterToolReported = false; missingTerminalAfterToolReported = false;
scheduleMissingTerminalAfterToolTimeout(); scheduleMissingTerminalAfterToolTimeout();
} }