From f12f7e7718c7cbe3058e0154f37291114bef3f58 Mon Sep 17 00:00:00 2001 From: Aiden Cline Date: Tue, 27 Jan 2026 11:22:03 -0500 Subject: [PATCH] tweak: adjust retry check to be more defensive --- packages/opencode/src/session/retry.ts | 38 +++++++++++--------- packages/opencode/test/session/retry.test.ts | 6 ++++ 2 files changed, 27 insertions(+), 17 deletions(-) diff --git a/packages/opencode/src/session/retry.ts b/packages/opencode/src/session/retry.ts index 8d3f72844..dddeae1cf 100644 --- a/packages/opencode/src/session/retry.ts +++ b/packages/opencode/src/session/retry.ts @@ -76,24 +76,28 @@ export namespace SessionRetry { return undefined } }) - if (!json || typeof json !== "object") return undefined - const code = typeof json.code === "string" ? json.code : "" + try { + if (!json || typeof json !== "object") return undefined + const code = typeof json.code === "string" ? json.code : "" - if (json.type === "error" && json.error?.type === "too_many_requests") { - return "Too Many Requests" - } - if (code.includes("exhausted") || code.includes("unavailable")) { - return "Provider is overloaded" - } - if (json.type === "error" && json.error?.code?.includes("rate_limit")) { - return "Rate Limited" - } - if ( - json.error?.message?.includes("no_kv_space") || - (json.type === "error" && json.error?.type === "server_error") || - !!json.error - ) { - return "Provider Server Error" + if (json.type === "error" && json.error?.type === "too_many_requests") { + return "Too Many Requests" + } + if (code.includes("exhausted") || code.includes("unavailable")) { + return "Provider is overloaded" + } + if (json.type === "error" && json.error?.code?.includes("rate_limit")) { + return "Rate Limited" + } + if ( + json.error?.message?.includes("no_kv_space") || + (json.type === "error" && json.error?.type === "server_error") || + !!json.error + ) { + return "Provider Server Error" + } + } catch { + return undefined } } } diff --git a/packages/opencode/test/session/retry.test.ts b/packages/opencode/test/session/retry.test.ts index 6866b03a1..9cfdd7fca 100644 --- a/packages/opencode/test/session/retry.test.ts +++ b/packages/opencode/test/session/retry.test.ts @@ -102,6 +102,12 @@ describe("session.retry.retryable", () => { expect(SessionRetry.retryable(error)).toBe("Provider Server Error") }) + test("does not throw on numeric error codes", () => { + const error = wrap(JSON.stringify({ type: "error", error: { code: 123 } })) + const result = SessionRetry.retryable(error) + expect(result).toBeUndefined() + }) + test("returns undefined for non-json message", () => { const error = wrap("not-json") expect(SessionRetry.retryable(error)).toBeUndefined()