fix(delegate-task): retry sync tasks after runtime session errors
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
This commit is contained in:
@@ -3,6 +3,7 @@ import type { SessionMessage } from "./executor-types"
|
||||
import { getDefaultSyncPollTimeoutMs, getTimingConfig } from "./timing"
|
||||
import { log } from "../../shared/logger"
|
||||
import { normalizeSDKResponse } from "../../shared"
|
||||
import { extractErrorMessage } from "../../features/background-agent/error-classifier"
|
||||
|
||||
const NON_TERMINAL_FINISH_REASONS = new Set(["tool-calls", "unknown"])
|
||||
const PENDING_TOOL_PART_TYPES = new Set(["tool", "tool_use", "tool-call"])
|
||||
@@ -32,6 +33,16 @@ async function fetchSessionMessages(
|
||||
return Array.isArray(rawData) ? (rawData as SessionMessage[]) : []
|
||||
}
|
||||
|
||||
function getTerminalSessionError(messages: SessionMessage[]): string | null {
|
||||
const lastAssistant = [...messages].reverse().find((msg) => msg.info?.role === "assistant")
|
||||
if (!lastAssistant?.info || !("error" in lastAssistant.info)) {
|
||||
return null
|
||||
}
|
||||
|
||||
const errorMessage = extractErrorMessage((lastAssistant.info as { error?: unknown }).error)
|
||||
return errorMessage && errorMessage.length > 0 ? errorMessage : "Session error"
|
||||
}
|
||||
|
||||
export function isSessionComplete(messages: SessionMessage[]): boolean {
|
||||
let lastUser: SessionMessage | undefined
|
||||
let lastAssistant: SessionMessage | undefined
|
||||
@@ -137,6 +148,12 @@ export async function pollSyncSession(
|
||||
continue
|
||||
}
|
||||
|
||||
const sessionError = getTerminalSessionError(messages)
|
||||
if (sessionError) {
|
||||
log("[task] Poll detected terminal session error", { sessionID: input.sessionID, sessionError })
|
||||
return sessionError
|
||||
}
|
||||
|
||||
if (isSessionComplete(messages)) {
|
||||
log("[task] Poll complete - terminal finish detected", { sessionID: input.sessionID, pollCount })
|
||||
break
|
||||
|
||||
Reference in New Issue
Block a user