summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorAiden Cline <[email protected]>2026-01-27 11:22:03 -0500
committerAiden Cline <[email protected]>2026-01-27 11:31:02 -0500
commitf12f7e7718c7cbe3058e0154f37291114bef3f58 (patch)
treed8c06367f39cd8b8ab84d6a761133eb841921260
parent0aa93379bd8e52d8fe7b71f7a8a9ace25c3d7695 (diff)
downloadopencode-f12f7e7718c7cbe3058e0154f37291114bef3f58.tar.gz
opencode-f12f7e7718c7cbe3058e0154f37291114bef3f58.zip
tweak: adjust retry check to be more defensive
-rw-r--r--packages/opencode/src/session/retry.ts38
-rw-r--r--packages/opencode/test/session/retry.test.ts6
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()