prole/prole-app/README.md
chrisfu 8a6e8738db ProleStatus: app-window default, light splash restored, status bar controls; endpoint config via properties; build + docs
- Default to Application Window mode with full app menu; status bar overlay remains available
- Restore clickable startup Splash Tip (5s) with animated GIF and live counter; use light theme (Aqua)
- Status bar item: monospaced "P" icon; left click shows overlay (status mode) or main window (app mode)
- Overlay: add Maximize button (□) to toggle back to main window; keep click‑through elsewhere
- Global hotkey Cmd+Opt+Shift+P toggles modes; Prole menu item mirrors the same toggle and updates title dynamically
- Application menu (Prole): Show Status Bar / Show Main Window (contextual), Refresh Now, Quit
- Application Window layout: non‑scrolling, vertical 1‑line rows (svc, k3s aggregate, local) with top‑right timestamp; bottom‑left controls (⟳ Refresh, _ Minimize)
- Parameterize endpoints via `prole.properties` (bundled + user override). Replace legacy raspberry with retropie defaults
- ServiceChecker + UI read endpoints from Config loader; tooltips/labels reflect configured hosts/ports
- Build script: generate `Info.plist` with `LSUIElement=false`; bundle resources (`prole-type.gif`, `prole.properties`); ad‑hoc codesign. Universal build supported
- Documentation: rewrite README with technical build/run/config details and operational posture

Files:
- proleStatus/Sources/: AppDelegate.swift, OverlayWindow.swift, StatusView.swift, StatusItemController.swift,
  SplashTipWindowController.swift, MainWindowController.swift, AppStatusView.swift, ServiceChecker.swift, Config.swift
- proleStatus/build.sh
- proleStatus/prole.properties
- proleStatus/README.md

Notes:
- Build verified via `./build.sh build` (arm64). App starts in App Window mode with light theme; menu + hotkey + overlay toggle operate as intended
2025-12-01 21:08:30 -08:00

123 lines
6.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

```
#####################################################
# ╭───────────────────────────────────────────────╮ #
# │ _ ___ _ _ │ #
# │ _ __ _ _ ___| |___/ __| |_ __ _| |_ _ _ ___ │ #
# │ | '_ \ '_/ _ \ / -_)__ \ _/ _` | _| || (_-< │ #
# │ | .__/_| \___/_\___|___/\__\__,_|\__|\_,_/__/ │ #
# │ |_| │ #
# ╰───────────────────────────────────────────────╯ #
#####################################################
```
Prole
— macOS status and control surface for Prole endpoints, with a path to an integrated virtual workstation harness.
Overview
- Prole provides live reachability and latency signals for Prole service endpoints. It operates in two modes: a regular application window for situational awareness and a minimalist statusbar overlay for persistent ataglance status.
- The application will evolve to include a virtual workstation surface to coordinate work across a network of Prolelinked LLMs. The current scope is operational visibility and control of endpoints.
Supported platform
- macOS 12.0+ (Monterey or newer) on Apple Silicon (arm64) and Intel (x86_64). Universal builds are supported by the build script.
Execution environment requirements (runtime)
- No external daemons or brew packages are required to run the built app bundle.
- Network access to the configured endpoints.
Build environment requirements
- Xcode Command Line Tools (swiftc, xcrun). Install if needed:
```
xcode-select --install
```
- System tools used by the build:
- `iconutil` and `sips` (for `.icns` generation)
- `codesign` (adhoc signing)
- `plutil` (plist formatting, via xcrun if needed)
Repository layout (subset)
- `prole-app/` — macOS app sources and build system
- `Sources/` — Swift sources (AppKit)
- `build.sh` — hermetic CLI build producing a `.app` bundle
- `prole.properties` — default endpoint configuration (bundled into Resources)
- `dist/Prole.app` — build output
Build script
- The build is driven by `prole-app/build.sh`. Typical usage:
```
cd prole-app
./build.sh build # build for host arch
./build.sh run # build (if needed) and open the app
./build.sh build-universal # produce a universal (arm64+x86_64) binary
./build.sh debug # run in foreground with verbose logs
./build.sh clean # remove build artifacts
./build.sh package # zip dist/Prole.app into dist/Prole.zip
```
What the script does
- Compiles all Swift sources with `swiftc` (AppKit, Carbon, Network frameworks).
- Generates `Contents/Info.plist` with `LSUIElement=false` so the app can present a standard menu when in Application Window mode.
- Generates an application icon (`Prole.icns`) and a template status glyph as needed.
- Copies resources:
- `www/images/prole-type.gif``Contents/Resources/prole-type.gif` (for the startup tip splash)
- `prole-app/prole.properties``Contents/Resources/prole.properties`
- Performs adhoc code signing of the `.app` bundle.
Alternate build path (installer UI)
- The repository includes `install.py`, a Tkinter helper that can orchestrate the build. From the repository root:
```
python3 install.py
```
- Use the “Build Prole macOS app” step. The installer will produce `prole-app/dist/Prole.app` and can optionally copy it to `/Applications`.
Run modes and controls
- Modes:
- Application Window mode (default): resizable window with three vertical status rows (svc, k3s aggregate, local) and a timestamp in the topright. A small control bar bottomleft exposes Refresh (⟳) and Minimize to Status Bar (_).
- Status Bar mode: thin overlay aligned with the macOS menu bar; shows a scrolling summary and a 'maximize' button (□) to return to the main window.
- Toggle between modes with the global shortcut:
- `Cmd`+`Option`+`Shift`+`P`
- Menus:
- Application menu “Prole” (next to the Apple menu): Show Status Bar / Show Main Window (same toggle as the hotkey), Refresh Now, Quit.
- Statusbar “P” icon (rightclick): Show/Hide Status Bar Icon, Show/Hide Application Window, Refresh Now, Quit.
Configuration
- Endpoint configuration is provided via Javastyle `key=value` properties. Two locations are read at startup; the user override has precedence:
1. Bundled defaults: `Prole.app/Contents/Resources/prole.properties`
2. User override (optional): `~/Library/Application Support/Prole/prole.properties`
- Default keys:
- `svc.host`, `svc.port`
- `k3s.retropie.host`, `k3s.retropie.port`
- `k3s.pi.host`, `k3s.pi.port`
- `k3d.local.host`, `k3d.local.port`
- Example user override:
```
# Override core service endpoint
svc.host=svc.my-domain.tld
svc.port=443
# Local k3d on a custom port
k3d.local.port=6445
```
Operational notes
- Status checks are TCP connect probes executed on a background timer (default: 30s). Latency is the connection time in milliseconds; failures record a short diagnostic for tooltips.
- The splash screen is transient (~ 5s) and can be dismissed with a click. It loads `prole-type.gif` if present in Resources.
Diagnostics & troubleshooting
- Ensure Xcode CLT is installed if the build fails:
```
xcode-select --install
```
- If the app launches without a standard menu/window, verify `Info.plist` has `LSUIElement=false` (the build script sets this). Rebuild using `build.sh`.
- If the hotkey appears inactive, bring the app to the foreground or use the Prole menu item (it triggers the same toggle).
- If status indicators stay red, validate network reachability and adjust `prole.properties` to endpoints reachable from your host.
- For adhoc logging, search the sources for `dlog("…")` and run via `./build.sh debug` to watch stdout.
Security & signing
- The `.app` bundle is adhoc signed by default. For distribution, replace with a Developer ID signature and notarize as appropriate for your environment.
Roadmap
- Integration of a virtual workstation to orchestrate a network of Prolelinked LLMs from within the Prole surface.
License
- See the repository `LICENSE` file.