Fix message routing by broadcasting to all providers and consumers

- Router was stopping propagation after first handler returned true
- This prevented consumers from seeing messages that providers handled
- executionConsumer never received execution-complete because ConsoleRuntimeProvider handled it first
- Now all providers and consumers receive all messages
- Fixes javascript_repl never completing
This commit is contained in:
Mario Zechner 2025-10-09 20:41:22 +02:00
parent 3f29ce9cb6
commit fdd4e24246
2 changed files with 5 additions and 12 deletions

View file

@ -166,13 +166,6 @@ export class ConsoleRuntimeProvider implements SandboxRuntimeProvider {
return 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 false; // Don't stop propagation
}
return false;
}

View file

@ -153,15 +153,15 @@ export class RuntimeMessageRouter {
// 1. Try provider handlers first (for bidirectional comm)
for (const provider of context.providers) {
if (provider.handleMessage) {
const handled = await provider.handleMessage(e.data, respond);
if (handled) return; // Stop if handled
await provider.handleMessage(e.data, respond);
// Don't stop - let consumers also handle the message
}
}
// 2. Broadcast to consumers (for one-way messages like console)
// 2. Broadcast to consumers (one-way messages or lifecycle events)
for (const consumer of context.consumers) {
const consumed = await consumer.handleMessage(e.data);
if (consumed) break; // Stop if consumed
await consumer.handleMessage(e.data);
// Don't stop - let all consumers see the message
}
};