From 3f05a2a536451bd1c2fa814d9f5e7db870ae8f74 Mon Sep 17 00:00:00 2001 From: marius-kilocode Date: Fri, 7 Aug 2026 12:57:48 +0200 Subject: [PATCH] fix(cli): make models snapshot cache write and read fault-tolerant --- packages/opencode/script/generate.ts | 25 ++++++++++++++++++------- 1 file changed, 18 insertions(+), 7 deletions(-) diff --git a/packages/opencode/script/generate.ts b/packages/opencode/script/generate.ts index 301458d07d3..a50c1ad5266 100644 --- a/packages/opencode/script/generate.ts +++ b/packages/opencode/script/generate.ts @@ -16,21 +16,32 @@ const raw = await (async () => { return await Bun.file(process.env.MODELS_DEV_API_JSON).text() } const cached = Bun.file(cacheFile) - const exists = await cached.exists() - if (exists) { - const st = await cached.stat() - if (st && Date.now() - st.mtimeMs < 6 * 3600 * 1000) { - return await cached.text() + try { + if (await cached.exists()) { + const st = await cached.stat() + if (st && Date.now() - st.mtimeMs < 6 * 3600 * 1000) { + return await cached.text() + } } + } catch (err) { + console.warn("[generate] cache read check failed, fetching live", err) } try { const res = await fetch(`${modelsUrl}/api.json`, { signal: AbortSignal.timeout(5000) }) if (!res.ok) throw new Error(`Failed to fetch models.dev snapshot: HTTP ${res.status}`) const text = await res.text() - await Bun.write(cacheFile, text) + try { + await Bun.write(cacheFile, text) + } catch (err) { + console.warn("[generate] cache write failed", err) + } return text } catch (err) { - if (exists) return await cached.text() + try { + if (await cached.exists()) return await cached.text() + } catch (fallbackErr) { + console.warn("[generate] cache fallback read failed", fallbackErr) + } throw err } })()