diff --git a/packages/cli/package.json b/packages/cli/package.json index eb24580b1..094ce3110 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,6 +1,6 @@ { "name": "@openrouter/spawn", - "version": "0.32.4", + "version": "0.32.5", "type": "module", "bin": { "spawn": "cli.js" diff --git a/packages/cli/src/__tests__/manifest.test.ts b/packages/cli/src/__tests__/manifest.test.ts index 8afed3b91..7ace2e4a2 100644 --- a/packages/cli/src/__tests__/manifest.test.ts +++ b/packages/cli/src/__tests__/manifest.test.ts @@ -136,7 +136,7 @@ describe("manifest", () => { ); }); - it("should use disk cache when fresh", async () => { + it("should always fetch from GitHub even when cache exists", async () => { mkdirSync(join(env.testDir, "spawn"), { recursive: true, }); @@ -149,7 +149,8 @@ describe("manifest", () => { expect(manifest).toHaveProperty("agents"); expect(manifest).toHaveProperty("clouds"); expect(manifest).toHaveProperty("matrix"); - expect(global.fetch).not.toHaveBeenCalled(); + // Always fetches fresh — cache is only an offline fallback + expect(global.fetch).toHaveBeenCalled(); }); it("should refresh cache when forceRefresh is true", async () => { diff --git a/packages/cli/src/manifest.ts b/packages/cli/src/manifest.ts index bda9e6ff6..f67719382 100644 --- a/packages/cli/src/manifest.ts +++ b/packages/cli/src/manifest.ts @@ -76,7 +76,6 @@ const RAW_BASE = `https://raw.githubusercontent.com/${REPO}/main` as const; const SPAWN_CDN = "https://openrouter.ai/labs/spawn" as const; /** Static URL for version checks — GitHub release artifact, never changes with repo structure */ const VERSION_URL = `https://github.com/${REPO}/releases/download/cli-latest/version` as const; -const CACHE_TTL = 3600; // 1 hour in seconds const FETCH_TIMEOUT = 10_000; // 10 seconds // ── Cache helpers ────────────────────────────────────────────────────────────── @@ -195,13 +194,6 @@ async function fetchManifestFromGitHub(): Promise { let _cached: Manifest | null = null; let _staleCache = false; -function tryLoadFromDiskCache(): Manifest | null { - if (cacheAge() >= CACHE_TTL) { - return null; - } - return readCache(); -} - function updateCache(manifest: Manifest): Manifest { writeCache(manifest); _cached = manifest; @@ -246,17 +238,8 @@ export async function loadManifest(forceRefresh = false): Promise { return local; } - // Check disk cache first if not forcing refresh - if (!forceRefresh) { - const cached = tryLoadFromDiskCache(); - if (cached) { - _cached = cached; - _staleCache = false; - return cached; - } - } - - // Fetch from GitHub + // Always fetch from GitHub first — ensures users always see latest agents/clouds. + // Disk cache is only used as an offline fallback. const fetched = await fetchManifestFromGitHub(); if (fetched) { return updateCache(fetched);