From 3f29ce9cb6702db7c4bea1c223e7d9b16af92f32 Mon Sep 17 00:00:00 2001 From: Mario Zechner Date: Thu, 9 Oct 2025 20:39:04 +0200 Subject: [PATCH] Fix ConsoleRuntimeProvider blocking execution-complete from reaching executionConsumer - ConsoleRuntimeProvider was handling execution-complete and returning true - This stopped message propagation before executionConsumer could handle it - ExecutionConsumer never got execution-complete, so promise never resolved - Now ConsoleRuntimeProvider responds but returns false to allow propagation - Fixes javascript_repl never completing (30s timeout) --- .../sandbox/ConsoleRuntimeProvider.ts | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/packages/web-ui/src/components/sandbox/ConsoleRuntimeProvider.ts b/packages/web-ui/src/components/sandbox/ConsoleRuntimeProvider.ts index f284d4f9..e4859d5d 100644 --- a/packages/web-ui/src/components/sandbox/ConsoleRuntimeProvider.ts +++ b/packages/web-ui/src/components/sandbox/ConsoleRuntimeProvider.ts @@ -128,14 +128,18 @@ export class ConsoleRuntimeProvider implements SandboxRuntimeProvider { if ((window as any).sendRuntimeMessage) { if (finalError) { + console.log("Reporting execution error:", finalError); await (window as any).sendRuntimeMessage({ type: "execution-error", error: finalError, }); + console.log("Execution completed"); } else { + console.log("Reporting execution complete"); await (window as any).sendRuntimeMessage({ type: "execution-complete", }); + console.log("Execution completed"); } } }; @@ -162,17 +166,11 @@ export class ConsoleRuntimeProvider implements SandboxRuntimeProvider { return true; } - if (message.type === "execution-complete") { - this.completed = true; + // Don't handle execution-complete/error - let executionConsumer handle those + // We just need to respond to allow the message to proceed + if (message.type === "execution-complete" || message.type === "execution-error") { respond({ success: true }); - return true; - } - - if (message.type === "execution-error") { - this.completed = true; - this.completionError = message.error; - respond({ success: true }); - return true; + return false; // Don't stop propagation } return false;