fix: label code queue final response closeout
This commit is contained in:
@@ -200,6 +200,11 @@ interface CodexTasksEntry {
|
||||
taskId: string;
|
||||
queueId: string | null;
|
||||
status: string | null;
|
||||
statusLabel: string | null;
|
||||
awaitingTerminalJudge?: boolean;
|
||||
closeoutState?: "awaiting-terminal-or-judge" | "awaiting-judge";
|
||||
closeoutHint?: string;
|
||||
finalResponseAt?: unknown;
|
||||
currentAttempt: number | null;
|
||||
updatedAt: string | null;
|
||||
finishedAt: string | null;
|
||||
@@ -235,6 +240,11 @@ interface CodexTasksSupervisorEntry {
|
||||
id: string;
|
||||
queue: string | null;
|
||||
status: string | null;
|
||||
statusLabel?: string;
|
||||
awaitingTerminalJudge?: boolean;
|
||||
closeoutState?: "awaiting-terminal-or-judge" | "awaiting-judge";
|
||||
closeoutHint?: string;
|
||||
finalResponseAt?: unknown;
|
||||
attempt: number | null;
|
||||
updatedAt: string | null;
|
||||
finishedAt?: string | null;
|
||||
@@ -1983,10 +1993,31 @@ function supervisorLastMessage(summaryLastAssistant: unknown, maxChars: number):
|
||||
};
|
||||
}
|
||||
|
||||
const awaitingTerminalJudgeHint = "finalResponse is visible while task status is non-terminal; wait for terminal status and judge before closeout.";
|
||||
|
||||
function finalResponseAwaitingTerminalStatus(status: string | null, summaryLastAssistant: unknown): {
|
||||
label: string;
|
||||
state: "awaiting-terminal-or-judge" | "awaiting-judge";
|
||||
finalResponseAt: unknown;
|
||||
} | null {
|
||||
if (status !== "running" && status !== "judging") return null;
|
||||
const record = asRecord(summaryLastAssistant);
|
||||
if (record === null) return null;
|
||||
if (asString(record.source) !== "finalResponse") return null;
|
||||
if (asString(record.text).trim().length === 0) return null;
|
||||
return {
|
||||
label: status === "judging" ? "judging (awaiting judge)" : "running (awaiting terminal/judge)",
|
||||
state: status === "judging" ? "awaiting-judge" : "awaiting-terminal-or-judge",
|
||||
finalResponseAt: record.at ?? null,
|
||||
};
|
||||
}
|
||||
|
||||
function taskWatchEntry(task: Record<string, unknown>, summary: Record<string, unknown> | null): CodexTasksEntry {
|
||||
const taskId = asString(task.id);
|
||||
const summaryCommands = summary === null ? null : asRecord(summary.commands);
|
||||
const summaryLastAssistant = summary?.lastAssistantMessage ?? task.lastAssistantMessage;
|
||||
const status = asString(task.status) || null;
|
||||
const awaitingStatus = finalResponseAwaitingTerminalStatus(status, summaryLastAssistant);
|
||||
const promptPreview = textPreview(asString(task.displayPrompt ?? task.basePrompt ?? task.prompt), 360);
|
||||
const showCommand = typeof summary?.cliHint === "string" && summary.cliHint.length > 0
|
||||
? summary.cliHint
|
||||
@@ -1999,7 +2030,14 @@ function taskWatchEntry(task: Record<string, unknown>, summary: Record<string, u
|
||||
return {
|
||||
taskId,
|
||||
queueId: asString(task.queueId) || null,
|
||||
status: asString(task.status) || null,
|
||||
status,
|
||||
statusLabel: awaitingStatus?.label ?? status,
|
||||
...(awaitingStatus === null ? {} : {
|
||||
awaitingTerminalJudge: true,
|
||||
closeoutState: awaitingStatus.state,
|
||||
closeoutHint: awaitingTerminalJudgeHint,
|
||||
finalResponseAt: awaitingStatus.finalResponseAt,
|
||||
}),
|
||||
currentAttempt: typeof task.currentAttempt === "number" && Number.isFinite(task.currentAttempt) ? task.currentAttempt : null,
|
||||
updatedAt: asString(task.updatedAt) || null,
|
||||
finishedAt: asString(task.finishedAt) || null,
|
||||
@@ -2025,6 +2063,7 @@ function taskSupervisorEntry(task: Record<string, unknown>, summary: Record<stri
|
||||
const taskId = asString(task.id);
|
||||
const summaryLastAssistant = summary?.lastAssistantMessage ?? task.lastAssistantMessage;
|
||||
const status = asString(task.status) || null;
|
||||
const awaitingStatus = finalResponseAwaitingTerminalStatus(status, summaryLastAssistant);
|
||||
const unreadTerminal = taskUnreadTerminal(task);
|
||||
const classification = taskClassification(task, summary);
|
||||
const queuedReason = compactQueuedReason(task.queuedReason);
|
||||
@@ -2034,6 +2073,13 @@ function taskSupervisorEntry(task: Record<string, unknown>, summary: Record<stri
|
||||
id: taskId,
|
||||
queue: asString(task.queueId) || null,
|
||||
status,
|
||||
...(awaitingStatus === null ? {} : {
|
||||
statusLabel: awaitingStatus.label,
|
||||
awaitingTerminalJudge: true,
|
||||
closeoutState: awaitingStatus.state,
|
||||
closeoutHint: awaitingTerminalJudgeHint,
|
||||
finalResponseAt: awaitingStatus.finalResponseAt,
|
||||
}),
|
||||
attempt: typeof task.currentAttempt === "number" && Number.isFinite(task.currentAttempt) ? task.currentAttempt : null,
|
||||
updatedAt: asString(task.updatedAt) || null,
|
||||
...(isTerminalTaskStatus(status) ? { finishedAt: asString(task.finishedAt) || null, unreadTerminal } : {}),
|
||||
|
||||
Reference in New Issue
Block a user