From f5f318b7e4678ba5b7383d5cfcba06df27814618 Mon Sep 17 00:00:00 2001 From: Axel Delafosse Date: Thu, 26 Feb 2026 00:21:17 -0800 Subject: [PATCH] feat: broadcast user prompts to frontend observers Fan out user-originated NDJSON messages to all connected frontend WebSocket clients so observer UIs can render user prompts that are not echoed back by the Claude SDK. --- src/loop/claude-sdk-server.ts | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/loop/claude-sdk-server.ts b/src/loop/claude-sdk-server.ts index e2242fc..dfdcf22 100644 --- a/src/loop/claude-sdk-server.ts +++ b/src/loop/claude-sdk-server.ts @@ -345,6 +345,9 @@ class ClaudeSdkClient { if (!isValidNdjson(text)) { return; } + // Fan out frontend-originated NDJSON so observer UIs can render + // user prompts that may not be echoed back by Claude. + this.broadcastToFrontends(text); this.ws?.send(text); } @@ -589,12 +592,15 @@ class ClaudeSdkClient { } private sendUserMessage(content: string): void { - this.sendJson({ + const payload = { type: "user", message: { role: "user", content }, parent_tool_use_id: null, session_id: this.sessionId, - }); + }; + const raw = `${JSON.stringify(payload)}\n`; + this.broadcastToFrontends(raw); + this.ws?.send(raw); } private async runTurnExclusive(