fix(webchat): wire agent CLI send into web chat view

This commit is contained in:
Peter Steinberger
2025-12-07 05:04:25 +01:00
parent bbe92a3a40
commit cac988f8e2

View File

@@ -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
}
}