From 609aef6e49a0948fb4e868bf65f326c9855c565d Mon Sep 17 00:00:00 2001 From: "sentry[bot]" <39604003+sentry[bot]@users.noreply.github.com> Date: Sat, 22 Aug 2026 22:41:40 +0000 Subject: [PATCH 1/2] fix(sandbox): Gracefully handle unavailable sandbox sessions --- packages/junior/src/chat/sandbox/session.ts | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) 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); } From e3c6e45d9fca1f2381230d0df6a2f53f86a16304 Mon Sep 17 00:00:00 2001 From: "sentry[bot]" <39604003+sentry[bot]@users.noreply.github.com> Date: Sat, 22 Aug 2026 23:46:15 +0000 Subject: [PATCH 2/2] fix(sandbox): Gracefully handle unavailable sandbox sessions --- .../tests/component/task-execution/conversation-work.test.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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;