From 144b83b39e034b3250bf3e9ffa6a86c306679364 Mon Sep 17 00:00:00 2001 From: LHagfoss Date: Sun, 15 Nov 2026 10:19:58 +0100 Subject: [PATCH 1/4] feat(desktop): trim settings text and put row status beside its action --- apps/desktop/src/acp/mock.ts | 56 +++++++++++++++++++ apps/desktop/src/ui/DiagnosticsPage.tsx | 17 +++--- apps/desktop/src/ui/MachinesPage.test.tsx | 7 ++- apps/desktop/src/ui/MachinesPage.tsx | 66 +++++++++++++---------- apps/desktop/src/ui/Settings.tsx | 36 ++++++------- apps/desktop/src/ui/ThreadMirrorGroup.tsx | 48 +++++++++-------- apps/desktop/src/ui/settingsIndex.ts | 9 +--- apps/desktop/src/ui/settingsKit.tsx | 15 +++--- 8 files changed, 159 insertions(+), 95 deletions(-) diff --git a/apps/desktop/src/acp/mock.ts b/apps/desktop/src/acp/mock.ts index 5d67d4227..283c18b09 100644 --- a/apps/desktop/src/acp/mock.ts +++ b/apps/desktop/src/acp/mock.ts @@ -7016,6 +7016,8 @@ export class MockTransport implements Transport { if (command === "link_meta") return mockLinkMeta(String(args.url)); if (command === "server_status") return this.serverStatus(); if (command === "system_info") return MOCK_SYSTEM_INFO; + // Settings › About › System setup: a finished install, one step not needed. + if (command === "system_setup_status" || command === "system_setup_run") return MOCK_SYSTEM_SETUP; if (command === "resolve_binaries") return (args.names as string[]).map((name) => ["codex", "claude-agent-acp", "gemini", "opencode"].includes(name) @@ -7238,3 +7240,57 @@ function mockGit(threads: readonly { worktree?: MockWorktree }[], path: string): mockGitStates.set(path, state); return state; } + +/** Settings › About › System setup in the mock: the macOS steps of a finished install. */ +const MOCK_SYSTEM_SETUP = [ + { + id: "quarantine", + title: "Clear the download quarantine flag", + about: + "macOS marks a downloaded app as quarantined, which can make its command line prompt or fail the first time. This clears the flag on RustCode.", + auto: true, + status: "done", + message: "No quarantine flag on RustCode.", + lastRun: "2026-11-14T09:00:00Z", + }, + { + id: "signature", + title: "Keep one signature across updates", + about: + "Releases are signed ad hoc, so macOS sees every update as a new app and asks again for Keychain access and Background Items. A local certificate gives updates one identity.", + auto: true, + status: "done", + message: "RustCode has a signature that stays the same across updates.", + lastRun: "2026-11-14T09:00:00Z", + }, + { + id: "cli-link", + title: "Put `rustcode` on your PATH", + about: + "Links `rustcode` into ~/.local/bin when no copy is on your PATH, so a terminal runs the same version as the app.", + auto: true, + status: "done", + message: "`rustcode` is at /Users/lars/.cargo/bin/rustcode.", + lastRun: "2026-11-14T09:00:00Z", + }, + { + id: "shell-path", + title: "Check ~/.local/bin is on your shell's PATH", + about: + "Reads your login shell's PATH. RustCode never edits your shell profile; when the folder is missing it shows the line to add.", + auto: true, + status: "skipped", + message: "`rustcode` is not linked into ~/.local/bin, so there is nothing to add.", + lastRun: "2026-11-14T09:00:00Z", + }, + { + id: "background-server", + title: "Run the RustCode server in the background", + about: + "Installs the server as a LaunchAgent, systemd user unit or logon task, so paired machines reach this computer with the app closed. See Machines.", + auto: false, + status: "done", + message: "The server starts when you log in.", + lastRun: "2026-11-14T09:00:00Z", + }, +]; diff --git a/apps/desktop/src/ui/DiagnosticsPage.tsx b/apps/desktop/src/ui/DiagnosticsPage.tsx index 1f794d429..9a4a542b6 100644 --- a/apps/desktop/src/ui/DiagnosticsPage.tsx +++ b/apps/desktop/src/ui/DiagnosticsPage.tsx @@ -247,17 +247,19 @@ export function DiagnosticsPage() { <> - + void saveReport()}> Save… void copyReport()}> - Copy debug report + Copy report @@ -270,8 +272,8 @@ export function DiagnosticsPage() { {SERVER_STATE_LABEL[state]} } - subtitle="Runs every thread. The app starts it again when it crashes." - status={detail ?? TRANSPORT_LABEL[transport ?? ""]} + hint="Runs every thread. The app starts it again when it crashes." + subtitle={detail ?? TRANSPORT_LABEL[transport ?? ""]} > {shell && ( - + {harnesses.length ? ( harnesses.map((h) => (
@@ -423,8 +425,7 @@ function ServerLog() { return (