diff --git a/packages/junior/src/chat/sandbox/session.ts b/packages/junior/src/chat/sandbox/session.ts index fd73a5a0b5..10c9999014 100644 --- a/packages/junior/src/chat/sandbox/session.ts +++ b/packages/junior/src/chat/sandbox/session.ts @@ -628,8 +628,9 @@ export function createSandboxRuntime( return null; } if (isSandboxUnavailableError(error)) { + sandboxRef = undefined; invalidateSession(); - throw error; + return null; } throw new Error("sandbox restore failed", { cause: error }); } @@ -641,9 +642,10 @@ export function createSandboxRuntime( await persistSandboxRef({ ...ref, id: hintedSandbox.sandboxId }); return rememberSandbox(hintedSandbox, networkPolicyKey); } catch (error) { - // Keep the durable VM alive so a later reacquire can reuse it. if (isSandboxUnavailableError(error)) { - throw error; + sandboxRef = undefined; + invalidateSession(); + return null; } return failSetup(error); } diff --git a/packages/junior/tests/component/task-execution/conversation-work.test.ts b/packages/junior/tests/component/task-execution/conversation-work.test.ts index 9f2a55fa32..323d891f0d 100644 --- a/packages/junior/tests/component/task-execution/conversation-work.test.ts +++ b/packages/junior/tests/component/task-execution/conversation-work.test.ts @@ -1808,8 +1808,8 @@ describe("conversation work execution", () => { return target.acquireLock(key, ttlMs); }; } - const value = Reflect.get(target, prop, receiver); - return typeof value === "function" ? value.bind(target) : value; + const value = (target as Record)[prop]; + return typeof value === "function" ? (value as (...args: unknown[]) => unknown).bind(target) : value; }, }) as StateAdapter;