From cac988f8e2259307beeb6e3dbfa325aa3421caa0 Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Sun, 7 Dec 2025 05:04:25 +0100 Subject: [PATCH] fix(webchat): wire agent CLI send into web chat view --- .../macos/Sources/Clawdis/WebChatWindow.swift | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/apps/macos/Sources/Clawdis/WebChatWindow.swift b/apps/macos/Sources/Clawdis/WebChatWindow.swift index 60422c7fb..488b77ea2 100644 --- a/apps/macos/Sources/Clawdis/WebChatWindow.swift +++ b/apps/macos/Sources/Clawdis/WebChatWindow.swift @@ -411,6 +411,7 @@ final class WebChatWindowController: NSWindowController, WKScriptMessageHandler, final class WebChatManager { static let shared = WebChatManager() private var window: WebChatWindowController? + private var webView: WKWebView? { self.window?.value(forKey: "webView") as? WKWebView } func show(sessionKey: String) { if self.window == nil { @@ -420,4 +421,28 @@ final class WebChatManager { self.window?.window?.makeKeyAndOrderFront(nil) NSApp.activate(ignoringOtherApps: true) } + + /// Send a message into the active web chat session. Returns true if enqueued. + func sendMessage(_ text: String, thinking: String = "default", sessionKey: String = "main") -> Bool { + self.show(sessionKey: sessionKey) + guard let webView else { return false } + guard let script = try? JSONSerialization.data(withJSONObject: [ + "text": text, + "thinking": thinking, + ]) else { return false } + + let payload = String(data: script, encoding: .utf8) ?? "" + let js = "window.__clawdisEnqueueOutgoing(\(payload))" + + var success = false + webView.evaluateJavaScript(js) { result, error in + if error == nil { success = true } + if let err = error { + webChatLogger.error("enqueue JS error: \(err.localizedDescription, privacy: .public)") + } else if let res = result { + webChatLogger.debug("enqueue JS result: \(String(describing: res), privacy: .public)") + } + } + return success + } }