From 9db730718bcd59a3e136ab4db91e27ca4ca0104d Mon Sep 17 00:00:00 2001 From: Lawrence Chen <54008264+lawrencecchen@users.noreply.github.com> Date: Tue, 24 Feb 2026 14:29:01 -0800 Subject: [PATCH] Fix browser eval CLI output --- CLI/cmux.swift | 29 ++++++- ...test_browser_eval_cli_output_regression.py | 87 +++++++++++++++++++ 2 files changed, 115 insertions(+), 1 deletion(-) create mode 100644 tests/test_browser_eval_cli_output_regression.py diff --git a/CLI/cmux.swift b/CLI/cmux.swift index 3d3daf92..191ff350 100644 --- a/CLI/cmux.swift +++ b/CLI/cmux.swift @@ -2007,6 +2007,27 @@ struct CMUXCLI { } } + func displayBrowserValue(_ value: Any) -> String { + if value is NSNull { + return "null" + } + if let string = value as? String { + return string + } + if let bool = value as? Bool { + return bool ? "true" : "false" + } + if let number = value as? NSNumber { + return number.stringValue + } + if JSONSerialization.isValidJSONObject(value), + let data = try? JSONSerialization.data(withJSONObject: value, options: [.prettyPrinted]), + let text = String(data: data, encoding: .utf8) { + return text + } + return String(describing: value) + } + func nonFlagArgs(_ values: [String]) -> [String] { values.filter { !$0.hasPrefix("-") } } @@ -2174,7 +2195,13 @@ struct CMUXCLI { throw CLIError(message: "browser eval requires a script") } let payload = try client.sendV2(method: "browser.eval", params: ["surface_id": sid, "script": trimmed]) - output(payload, fallback: "OK") + let fallback: String + if let value = payload["value"] { + fallback = displayBrowserValue(value) + } else { + fallback = "OK" + } + output(payload, fallback: fallback) return } diff --git a/tests/test_browser_eval_cli_output_regression.py b/tests/test_browser_eval_cli_output_regression.py new file mode 100644 index 00000000..b8778a52 --- /dev/null +++ b/tests/test_browser_eval_cli_output_regression.py @@ -0,0 +1,87 @@ +#!/usr/bin/env python3 +"""Static regression guard for browser eval CLI output formatting. + +Ensures `cmux browser eval