110 lines
2.9 KiB
Markdown
110 lines
2.9 KiB
Markdown
# AI Workspace macOS Menu Bar App
|
|
|
|
Minimal SwiftUI `MenuBarExtra` app for controlling local AI Workspace services.
|
|
|
|
The app is intentionally a thin UI over the service manager. It reads live status from:
|
|
|
|
```bash
|
|
python3 scripts/aiw/services.py status --profile fidelity --json
|
|
```
|
|
|
|
and sends lifecycle actions through `scripts/aiw/services.py`.
|
|
|
|
## Build
|
|
|
|
```bash
|
|
swift build --package-path apps/mac/AIWorkspace
|
|
```
|
|
|
|
## Package as `.app`
|
|
|
|
```bash
|
|
apps/mac/AIWorkspace/scripts/package-app.sh
|
|
```
|
|
|
|
Install to `~/Applications/AIWorkspace.app`:
|
|
|
|
```bash
|
|
apps/mac/AIWorkspace/scripts/package-app.sh --install
|
|
```
|
|
|
|
The script defaults to the per-user install location because this workspace is a
|
|
developer-local utility and frequent rebuilds should not require `sudo`. To
|
|
install system-wide instead, pass an explicit install directory:
|
|
|
|
```bash
|
|
INSTALL_DIR=/Applications apps/mac/AIWorkspace/scripts/package-app.sh --install
|
|
APP_PATH=/Applications/AIWorkspace.app apps/mac/AIWorkspace/scripts/install-start-at-login.sh
|
|
```
|
|
|
|
Avoid keeping both `~/Applications/AIWorkspace.app` and
|
|
`/Applications/AIWorkspace.app` installed unless you are intentionally comparing
|
|
builds. They share the same bundle identifier (`com.aiworkspace.menu`) and can
|
|
confuse LaunchServices, login item registration, and which copy opens at login.
|
|
If both exist, quit any running AI Workspace instances and remove the stale copy.
|
|
|
|
## Build a DMG
|
|
|
|
```bash
|
|
apps/mac/AIWorkspace/scripts/build-dmg.sh
|
|
```
|
|
|
|
This creates:
|
|
|
|
```text
|
|
apps/mac/AIWorkspace/dist/AIWorkspace.dmg
|
|
```
|
|
|
|
The DMG contains `AIWorkspace.app` and an `Applications` shortcut for drag-and-drop installation.
|
|
|
|
One-step local install, optionally enabling start at login and opening the app:
|
|
|
|
```bash
|
|
apps/mac/AIWorkspace/scripts/install.sh --start-at-login --open
|
|
```
|
|
|
|
## Start at login
|
|
|
|
Preferred: open the installed app and use the **Start at Login** toggle in the UI. The app uses macOS `SMAppService` for login item registration.
|
|
|
|
Development fallback after installing the app bundle:
|
|
|
|
```bash
|
|
apps/mac/AIWorkspace/scripts/install-start-at-login.sh
|
|
```
|
|
|
|
To remove the login item:
|
|
|
|
```bash
|
|
apps/mac/AIWorkspace/scripts/uninstall-start-at-login.sh
|
|
```
|
|
|
|
## Run during development
|
|
|
|
```bash
|
|
swift run --package-path apps/mac/AIWorkspace AIWorkspace
|
|
```
|
|
|
|
## Current actions
|
|
|
|
- Refresh status
|
|
- Start Fidelity services
|
|
- Stop Fidelity services
|
|
- Restart Context MCP
|
|
- Open Mattermost through the service manager
|
|
- Open Mattermost through the local proxy-managed launcher
|
|
- Run Doctor
|
|
- Copy Doctor JSON
|
|
- Copy Photo Inbox URL
|
|
- Copy recent logs
|
|
- Open MCP Health
|
|
- Open logs folder
|
|
- Open project knowledge
|
|
|
|
## Notes
|
|
|
|
- This is not yet packaged as a signed `.app` bundle.
|
|
- Start at login should be implemented later through a LaunchAgent or app login item.
|
|
- Start at Login is available in the app UI through `SMAppService`. The LaunchAgent scripts are retained as development fallback utilities.
|
|
- The app should remain a UI layer; service lifecycle remains in `scripts/aiw/services.py`.
|