feat: Linux desktop companion app with auto-install, Gateway lifecycle, and Control UI window (#106352)

* feat(linux): add Tauri desktop companion app and openclaw dashboard --json

* test(dashboard): assemble fake token fixture to satisfy secret scanners

* test(dashboard): avoid secret-scanner-shaped mock factory line

* fix(linux): actionable error when installed CLI predates dashboard --json

* docs: regenerate docs map for linux platform heading change
This commit is contained in:
Peter Steinberger
2026-07-13 05:17:27 -07:00
committed by GitHub
parent 6c5084f1ad
commit 0bab08510e
27 changed files with 6389 additions and 7 deletions

View File

@@ -320,15 +320,16 @@ describe("registerMaintenanceCommands doctor action", () => {
expect(runtime.exit).toHaveBeenCalledWith(2);
});
it("passes noOpen to dashboard command", async () => {
it("passes output options to dashboard command", async () => {
dashboardCommand.mockResolvedValue(undefined);
await runMaintenanceCli(["dashboard", "--no-open"]);
await runMaintenanceCli(["dashboard", "--no-open", "--json"]);
expect(dashboardCommand).toHaveBeenCalledTimes(1);
const [runtimeArg, options] = commandCall(dashboardCommand);
expect(runtimeArg).toBe(runtime);
expect(options.noOpen).toBe(true);
expect(options.json).toBe(true);
});
it("passes reset options to reset command", async () => {

View File

@@ -186,11 +186,13 @@ export function registerMaintenanceCommands(program: Command) {
`\n${theme.muted("Docs:")} ${formatDocsLink("/cli/dashboard", "docs.openclaw.ai/cli/dashboard")}\n`,
)
.option("--no-open", "Print URL but do not launch a browser")
.option("--json", "Output dashboard connection details as JSON", false)
.option("--yes", "Start/install the gateway without prompting when needed", false)
.action(async (opts) => {
await runCommandWithRuntime(defaultRuntime, async () => {
const { dashboardCommand } = await import("../../commands/dashboard.js");
await dashboardCommand(defaultRuntime, {
json: Boolean(opts.json),
noOpen: opts.open === false,
yes: Boolean(opts.yes),
});