Compare commits
2 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 4b4abb47b0 | |||
| bc9a43d5a9 |
@@ -511,9 +511,11 @@ class ExecutionStream:
|
||||
logger.debug(f"Queued execution {execution_id} for stream {self.stream_id}")
|
||||
return execution_id
|
||||
|
||||
# Errors that indicate a fundamental configuration or environment problem.
|
||||
# Resurrecting after these is pointless — the same error will recur.
|
||||
# Errors that indicate resurrection won't help — the same error will recur.
|
||||
# Includes both configuration/environment errors and deterministic node
|
||||
# failures where the conversation/state hasn't changed.
|
||||
_FATAL_ERROR_PATTERNS: tuple[str, ...] = (
|
||||
# Configuration / environment
|
||||
"credential",
|
||||
"authentication",
|
||||
"unauthorized",
|
||||
@@ -525,6 +527,11 @@ class ExecutionStream:
|
||||
"permission denied",
|
||||
"invalid api",
|
||||
"configuration error",
|
||||
# Deterministic node failures — resurrecting at the same node with
|
||||
# the same conversation produces the same result.
|
||||
"node stalled",
|
||||
"ghost empty stream",
|
||||
"max iterations",
|
||||
)
|
||||
|
||||
@classmethod
|
||||
|
||||
@@ -605,7 +605,11 @@ export default function Workspace() {
|
||||
const result = await sessionsApi.get(existingSessionId);
|
||||
if (result.loading) continue;
|
||||
return result as LiveSession;
|
||||
} catch {
|
||||
} catch (pollErr) {
|
||||
// 404 = agent failed to load and was cleaned up — stop immediately
|
||||
if (pollErr instanceof ApiError && pollErr.status === 404) {
|
||||
throw new Error("Agent failed to load");
|
||||
}
|
||||
if (i === maxAttempts - 1) throw loadErr;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user