Redesign the macOS client as native SwiftUI with no web view

This commit is contained in:
Ian Gulliver
2026-10-16 15:13:36 -07:00
parent 19336a501a
commit 17c8da435b
2 changed files with 156 additions and 216 deletions
+11 -7
View File
@@ -16,11 +16,15 @@
# M8 — macOS client
- macOS client feasibility build
See `docs/macos.md`. Throwaway AppKit + WKWebView shell with a UI/navigation delegate and the Notification polyfill, pointed at a development byre. Compare with Safari: identity and both SSE streams, terminal Ctrl keys, typed vs Go-menu ⌘K/P/L/S/ with a dialog open, screenshot paste and Finder drop, code Copy, every `_blank` link type, notification permission and click, blur on app switch and window close, an hour hidden then a question, sleep/wake, quit with a draft. Record OS/SDK and signing results.
- macOS client shell
`mac/` Xcode project: one window hosting a persistent WKWebView on the configured origin, connection sheet with 401/403/TLS/unreachable errors and Change Server…, `_blank` and off-origin links to NSWorkspace, menus with no File menu and no key equivalents for page shortcuts, hide-on-close, quit via pagehide, reload-once crash recovery.
- macOS client notifications
Document-start `Notification` polyfill backed by UNUserNotificationCenter via a main-frame, origin-checked message handler; `tag` as request id, click shows the window then calls the page's onclick; permission re-read on activation.
- macOS client spike
See `docs/macos.md`. SwiftUI package under `mac/` built with `swift build` and bundled by script, pointed at a development byre (never the service). Settle each row of "Gaps in SwiftUI": composer Enter/Shift-Enter/IME, image paste and drop, a long real transcript scrolling and staying stuck to the bottom, cross-message selection, SwiftTerm terminal with Ctrl keys, Core Text loading `web/fonts/`, SVG images. Record which fallbacks were needed.
- macOS client store and API
Generated client from `api/openapi.yaml`, hand-written SSE client, `Store` and `Feed` ported from `state.ts`, startup sequence, connection screen with 401/403/TLS/unreachable errors and Change Server…, `Palette.swift` generated from `web/style.css`.
- macOS client panes and transcript
Window and two equal panes, tab strips with More, Lead and task transcripts via `TranscriptBuilder`, composer, drafts, Markdown port, images, native flowchart diagrams, pane-focus reporting, identity banner.
- macOS client tabs
Changes, Files, Terminal, Inbox, Reviews, Workflow (native stage graph), Project, Status, Settings.
- macOS client overlays, menus and notifications
Switcher, keyboard help, alert and confirm overlays, Merge and Discard dialogs, Go menu shortcuts with the Ctrl variants and terminal passthrough, UNUserNotificationCenter notifications.
- macOS client parity review
Side by side with Safari on the same server, size and appearance, using disposable tasks: every tab, switcher, Inbox choice types, merge/discard dialogs, light/dark, narrow windows, IME. Document build, setup, storage and limits in `docs/operations.md`.
Side by side with the web client on the same server, window size and appearance, using disposable tasks: every tab, switcher, Inbox choice types, merge/discard dialogs, light/dark, narrow windows, IME. Document build, install and storage in `docs/operations.md`.