diff --git a/foundry/packages/backend/src/index.ts b/foundry/packages/backend/src/index.ts index bf64122..335bb42 100644 --- a/foundry/packages/backend/src/index.ts +++ b/foundry/packages/backend/src/index.ts @@ -118,15 +118,30 @@ export async function startBackend(options: BackendStartOptions = {}): Promise - await withRetries( + let cachedAppWorkspace: any | null = null; + + const appWorkspace = async () => { + if (cachedAppWorkspace) return cachedAppWorkspace; + const handle = await withRetries( async () => await actorClient.workspace.getOrCreate(workspaceKey(APP_SHELL_WORKSPACE_ID), { createWithInput: APP_SHELL_WORKSPACE_ID, }), ); + cachedAppWorkspace = handle; + return handle; + }; - const appWorkspaceAction = async (run: (workspace: any) => Promise): Promise => await withRetries(async () => await run(await appWorkspace())); + const appWorkspaceAction = async (run: (workspace: any) => Promise): Promise => + await withRetries(async () => { + try { + return await run(await appWorkspace()); + } catch (error) { + // Invalidate cache on connection/actor errors so next retry re-resolves + cachedAppWorkspace = null; + throw error; + } + }); const resolveSessionId = async (c: any): Promise => { const requested = c.req.header("x-foundry-session");