fix: 覆盖 Codex retry 503 分类
This commit is contained in:
@@ -423,7 +423,7 @@ function normalizeCodexNotification(message: JsonRecord): { events: BackendEvent
|
||||
if (method === "error") {
|
||||
const error = asRecordAt(params, "error");
|
||||
const messageText = typeof error.message === "string" ? error.message : "Codex app-server error";
|
||||
const failureKind = classifyMessageFailureKind(messageText, "backend-failed");
|
||||
const failureKind = classifyCodexErrorRecord(error, "backend-failed");
|
||||
const terminal = params.willRetry === true ? undefined : { status: "failed" as const, failureKind, message: redactText(messageText) };
|
||||
return { events: [{ type: "error", payload: { failureKind, error: redactJson(error), willRetry: params.willRetry === true } }], ...(terminal ? { terminal } : {}) };
|
||||
}
|
||||
@@ -435,7 +435,7 @@ function normalizeCodexNotification(message: JsonRecord): { events: BackendEvent
|
||||
const status = terminalStatusFromValue(turn.status);
|
||||
const error = asRecordAt(turn, "error");
|
||||
const messageText = typeof error.message === "string" ? redactText(error.message) : null;
|
||||
const failureKind = status === "completed" ? null : classifyMessageFailureKind(messageText ?? turn.status, "backend-failed");
|
||||
const failureKind = status === "completed" ? null : classifyCodexErrorRecord(Object.keys(error).length > 0 ? error : { message: turn.status }, "backend-failed");
|
||||
const events: BackendEvent[] = [{ type: "backend_status", payload: { phase: method, terminalStatus: status } }];
|
||||
if (failureKind) events.push({ type: "error", payload: { failureKind, error: redactJson(error), phase: method } });
|
||||
return { events, terminal: { status, failureKind, message: messageText } };
|
||||
@@ -569,6 +569,15 @@ function normalizeFailure(error: unknown): CodexStdioFailure {
|
||||
return new CodexStdioFailure(classifyMessageFailureKind(message, "backend-protocol-error"), message, "codex-stdio");
|
||||
}
|
||||
|
||||
function classifyCodexErrorRecord(error: JsonRecord, fallback: FailureKind): FailureKind {
|
||||
const parts: string[] = [];
|
||||
if (typeof error.message === "string") parts.push(error.message);
|
||||
if (typeof error.additionalDetails === "string") parts.push(error.additionalDetails);
|
||||
const redactedJson = JSON.stringify(redactJson(error as JsonValue));
|
||||
if (redactedJson && redactedJson !== "{}") parts.push(redactedJson);
|
||||
return classifyMessageFailureKind(parts.join("\n"), fallback);
|
||||
}
|
||||
|
||||
function classifyMessageFailureKind(message: string, fallback: FailureKind): FailureKind {
|
||||
const text = String(message || "").toLowerCase();
|
||||
if (/rate.?limit|too many requests|\b429\b/u.test(text)) return "provider-rate-limited";
|
||||
|
||||
Reference in New Issue
Block a user