From 7997be63737f1ea8373208937745e0dc3965b728 Mon Sep 17 00:00:00 2001 From: Ian Gulliver Date: Thu, 22 Oct 2026 07:09:31 -0700 Subject: [PATCH] Make Status the first tab under More on the phone and after Lead on Mac --- AGENTS.md | 2 +- docs/iphone.md | 2 +- mac/Sources/Byre/Dialogs.swift | 2 +- mac/Sources/Byre/Panes.swift | 6 +++--- mac/Sources/Byre/Phone.swift | 8 ++++---- 5 files changed, 10 insertions(+), 10 deletions(-) diff --git a/AGENTS.md b/AGENTS.md index 3481aa0..cac7327 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -52,7 +52,7 @@ When the owner tells the lead "deploy byre", or anything that means the same, th - Exactly two panes, side by side, each exactly half the width, at every window size. Never three or more columns, never a sidebar, never a resizable or collapsible split. - No navbar. The panes fill the window, below only the identity banner when it shows. -- The left pane has six tabs: Lead (the user's lead agent), Notes (what the lead has noted about the user), Workflows (the saved workflows), Status, Server (the byre service on this Mac) and Settings (the user's and this client's preferences), with the connection dot and the user's name at the end of its tab strip. Nothing else of the user's goes in it. The right pane always shows one task's conversation (its transcript, or a workflow stage task's run), or a project's dashboard when no task is selected; the lead sets the task, and the human can switch it (⌘K). The task's other views (its other tabs, and images and diagrams zoomed from its transcript) open only when the human opens them, in a sheet over the left pane: attached to the center line, in the task's color and named by it, leaving a strip of the left pane visible that closes it. Images and diagrams zoomed from the lead chat open the same way over the right pane. A new task view is a new tab that opens in that sheet, never a new column or region. +- The left pane has six tabs: Lead (the user's lead agent), Status, Notes (what the lead has noted about the user), Workflows (the saved workflows), Server (the byre service on this Mac) and Settings (the user's and this client's preferences), with the connection dot and the user's name at the end of its tab strip. Nothing else of the user's goes in it. The right pane always shows one task's conversation (its transcript, or a workflow stage task's run), or a project's dashboard when no task is selected; the lead sets the task, and the human can switch it (⌘K). The task's other views (its other tabs, and images and diagrams zoomed from its transcript) open only when the human opens them, in a sheet over the left pane: attached to the center line, in the task's color and named by it, leaving a strip of the left pane visible that closes it. Images and diagrams zoomed from the lead chat open the same way over the right pane. A new task view is a new tab that opens in that sheet, never a new column or region. - Overlays (the task switcher, confirmation dialogs) are allowed; they sit above the panes and don't change the layout. ## UI look diff --git a/docs/iphone.md b/docs/iphone.md index f75b23c..8fba1bf 100644 --- a/docs/iphone.md +++ b/docs/iphone.md @@ -1,6 +1,6 @@ # byre for iPhone -The iPhone app is the same `Byre` target as the Mac app, built for iOS: platform differences are `#if os(macOS)` / `#if os(iOS)` blocks, with the small shared aliases (`PlatformImage`, `PlatformColor`, `PlatformFont`, `PlatformView`, `touchOnly`, `deviceKind`) in `mac/Sources/Byre/Platform.swift`. Only the layout is the phone's own (`Phone.swift`): a tab bar with Lead, Tasks and More. Tasks lists every project's active tasks with the Mac's own task rows; a task opens pushed, with the Mac's task bar and tab strip on top and the tab's view below in place of the Mac's attached sheet. Zoomed images and diagrams cover the screen. More holds Notes, Workflows, Status and Settings. Every action that focuses a task or project (a row, a link, a notification, the switcher) bumps `Store.reveals`, which brings the Tasks tab forward with the task open; the server's own focus changes don't. +The iPhone app is the same `Byre` target as the Mac app, built for iOS: platform differences are `#if os(macOS)` / `#if os(iOS)` blocks, with the small shared aliases (`PlatformImage`, `PlatformColor`, `PlatformFont`, `PlatformView`, `touchOnly`, `deviceKind`) in `mac/Sources/Byre/Platform.swift`. Only the layout is the phone's own (`Phone.swift`): a tab bar with Lead, Tasks and More. Tasks lists every project's active tasks with the Mac's own task rows; a task opens pushed, with the Mac's task bar and tab strip on top and the tab's view below in place of the Mac's attached sheet. Zoomed images and diagrams cover the screen. More holds Status (shown first), Notes, Workflows and Settings. Every action that focuses a task or project (a row, a link, a notification, the switcher) bumps `Store.reveals`, which brings the Tasks tab forward with the task open; the server's own focus changes don't. The phone holds the client connection (`Remote`) like a Mac, so agents can show it pages and files and drive its Page view (`show_page`, `show_file`, `drive_page`); it answers every other client request with an error. It sends `Byre-Device: iPhone` (Macs send `Mac`), and the server signs commits and runs `byre client-exec` without `--client` only on Macs. diff --git a/mac/Sources/Byre/Dialogs.swift b/mac/Sources/Byre/Dialogs.swift index 4cfe9e2..1f0046c 100644 --- a/mac/Sources/Byre/Dialogs.swift +++ b/mac/Sources/Byre/Dialogs.swift @@ -35,7 +35,7 @@ struct OverlayAlert: Identifiable { } enum LeftTab { - case lead, notes, workflows, status, server, settings + case lead, status, notes, workflows, server, settings } @MainActor diff --git a/mac/Sources/Byre/Panes.swift b/mac/Sources/Byre/Panes.swift index d8bee26..95e049b 100644 --- a/mac/Sources/Byre/Panes.swift +++ b/mac/Sources/Byre/Panes.swift @@ -113,15 +113,15 @@ private struct LeftPane: View { PaneTabButton(label: "Lead", active: tab == .lead) { pick(.lead) } + PaneTabButton(label: "Status", active: tab == .status) { + pick(.status) + } PaneTabButton(label: "Notes", active: tab == .notes) { pick(.notes) } PaneTabButton(label: "Workflows", active: tab == .workflows) { pick(.workflows) } - PaneTabButton(label: "Status", active: tab == .status) { - pick(.status) - } PaneTabButton(label: "Server", active: tab == .server) { pick(.server) } diff --git a/mac/Sources/Byre/Phone.swift b/mac/Sources/Byre/Phone.swift index 7476497..a72affc 100644 --- a/mac/Sources/Byre/Phone.swift +++ b/mac/Sources/Byre/Phone.swift @@ -41,13 +41,13 @@ private func taskTab(_ store: Store) -> TaskTab { } private enum MoreRoute: Hashable { - case notes, workflows, status, settings + case status, notes, workflows, settings } private let moreTitles: [MoreRoute: String] = [ + .status: "Status", .notes: "Notes", .workflows: "Workflows", - .status: "Status", .settings: "Settings", ] @@ -368,12 +368,12 @@ private func dismissKeyboard() { } private struct MoreScreen: View { - @ViewState private var route = MoreRoute.notes + @ViewState private var route = MoreRoute.status var body: some View { VStack(spacing: 0) { HStack(spacing: 4) { - ForEach([MoreRoute.notes, .workflows, .status, .settings], id: \.self) { r in + ForEach([MoreRoute.status, .notes, .workflows, .settings], id: \.self) { r in PaneTabButton(label: moreTitles[r]!, active: route == r) { route = r dismissKeyboard()