Summary
Extend the native desktop wrappers' system tray / menu-bar item from the minimal
Open / Close-to-tray / Quit set to the server-runner menu convention shared by
Docker Desktop, Tailscale, Syncthing, and Ollama — Odysseus runs a local server you
keep resident, so it should be controllable from the tray — and add a native
About dialog.
Builds on the existing feat/qt-native-{linux,macos,windows}-app branches.
Tray menu (all three OSes)
- Live status line (
● Running — host:port / ○ Stopped)
- Open in Browser / Copy Server URL (resolve the real LAN IP when exposed)
- Settings… / Shortcut Keys… (drive the app's own settings modal / shortcuts tab)
- Expose to Network — persisted toggle that rebinds the server to
0.0.0.0;
enabling is gated behind a confirmation (security posture change)
- View Logs / Restart Server (restart runs off the GUI thread)
- Existing Close-to-tray (Win/Linux), README, About, Quit
About dialog
Icon, name, version (read live from src/constants.py), copyright, the AGPL-3.0 §5
no-warranty notice, and clickable license / GitHub / issue links.
Platform notes
- Linux/Windows:
QSystemTrayIcon + QMenu, refreshed on aboutToShow.
- macOS: rendered by a separate
rumps helper process (Qt can't render an
NSStatusItem on Tahoe); helper ↔ wrapper over an AF_UNIX socket — one-word
verbs for actions, a periodic status query drives the live status line.
Docs: docs/dev/desktop-wrappers.md.
Summary
Extend the native desktop wrappers' system tray / menu-bar item from the minimal
Open / Close-to-tray / Quit set to the server-runner menu convention shared by
Docker Desktop, Tailscale, Syncthing, and Ollama — Odysseus runs a local server you
keep resident, so it should be controllable from the tray — and add a native
About dialog.
Builds on the existing
feat/qt-native-{linux,macos,windows}-appbranches.Tray menu (all three OSes)
● Running — host:port/○ Stopped)0.0.0.0;enabling is gated behind a confirmation (security posture change)
About dialog
Icon, name, version (read live from
src/constants.py), copyright, the AGPL-3.0 §5no-warranty notice, and clickable license / GitHub / issue links.
Platform notes
QSystemTrayIcon+QMenu, refreshed onaboutToShow.rumpshelper process (Qt can't render anNSStatusItemon Tahoe); helper ↔ wrapper over anAF_UNIXsocket — one-wordverbs for actions, a periodic
statusquery drives the live status line.Docs:
docs/dev/desktop-wrappers.md.