mirror of
https://github.com/dredx/prole.git
synced 2026-09-24 17:44:33 +00:00
- Replaced all IRCKit (0.16) usage with NozeIO `swift-nio-irc-client` (SwiftPM). - Enabled IRC window with new client: connects and joins `#prole` (plain TCP for now; SSL checkbox displays a notice). - Enabled RoyalVNC and removed all optional/flag-based handling. Integrated RoyalVNC via SwiftPM (`royalvnc` on `main`). - Updated VNC UI to current RoyalVNC API: `VNCConnection` + `VNCCAFramebufferView` with a strong delegate reference. - Simplified build to use SwiftPM for both IRC and RoyalVNC. - Fixed runtime embedding and loader issues: - Copy SwiftPM-built `.dylib` products (e.g., `libRoyalVNCKit.dylib`) into `Contents/Frameworks` and codesign them. - Added `@executable_path/../Frameworks` to app rpaths with `install_name_tool`. - Removed manual RoyalVNCKit `.xcframework` building/embedding and any IRCKit traces. #### Key changes - `prole-app/build.sh`: - Build app via SwiftPM; removed IRCKit and manual RoyalVNC build logic. - Embed SwiftPM `.dylib` outputs into `Contents/Frameworks` and set app rpath. - Cleaned usage text; dependencies now handled by SwiftPM. - `prole-app/Package.swift`: - Add `swift-nio-irc-client` (NozeIO) dependency. - Add RoyalVNC via SwiftPM: `https://github.com/royalapplications/royalvnc` on `main`. - `prole-app/Sources/IRCWindowController.swift`: - Migrate to NozeIO `IRC` package API; re-enable Connect; join `#prole`. - Import AppKit; provide convenience init for transcript view. - `prole-app/Sources/WorkstationWindowController.swift`: - Import `RoyalVNCKit`; use `VNCConnection` + `VNCCAFramebufferView`. - Implement `VNCConnectionDelegate` and keep a strong reference to the delegate. - `prole-app/debug.sh`: - Removed IRCKit logs section; kept RoyalVNC logs earlier; then removed manual RoyalVNC altogether. This build now launches successfully (no dyld errors), opens the Workstation window (RoyalVNC), and the IRC window connects via the new client. ### Suggested follow-ups - If TLS is required for IRC, add `NIOSSL` integration and wire SSL checkbox to TLS connection. - Optionally remove leftover Vendor references if any local cache remains. |
||
|---|---|---|
| .. | ||
| Sources | ||
| build.sh | ||
| debug.sh | ||
| prole.properties | ||
| README.md | ||
#####################################################
# ╭───────────────────────────────────────────────╮ #
# │ _ ___ _ _ │ #
# │ _ __ _ _ ___| |___/ __| |_ __ _| |_ _ _ ___ │ #
# │ | '_ \ '_/ _ \ / -_)__ \ _/ _` | _| || (_-< │ #
# │ | .__/_| \___/_\___|___/\__\__,_|\__|\_,_/__/ │ #
# │ |_| │ #
# ╰───────────────────────────────────────────────╯ #
#####################################################
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 status‑bar overlay for persistent at‑a‑glance status.
- The application will evolve to include a virtual workstation surface to coordinate work across a network of Prole‑linked 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:
iconutilandsips(for.icnsgeneration)codesign(ad‑hoc signing)plutil(plist formatting, via xcrun if needed)
Repository layout (subset)
prole-app/— macOS app sources and build systemSources/— Swift sources (AppKit)build.sh— hermetic CLI build producing a.appbundleprole.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.plistwithLSUIElement=falseso 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 ad‑hoc code signing of the
.appbundle.
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.appand 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 top‑right. A small control bar bottom‑left 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.
- Status‑bar “P” icon (right‑click): Show/Hide Status Bar Icon, Show/Hide Application Window, Refresh Now, Quit.
Configuration
- Endpoint configuration is provided via Java‑style
key=valueproperties. Two locations are read at startup; the user override has precedence:- Bundled defaults:
Prole.app/Contents/Resources/prole.properties - User override (optional):
~/Library/Application Support/Prole/prole.properties
- Bundled defaults:
- Default keys:
svc.host,svc.portk3s.retropie.host,k3s.retropie.portk3s.pi.host,k3s.pi.portk3d.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.gifif 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.plisthasLSUIElement=false(the build script sets this). Rebuild usingbuild.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.propertiesto endpoints reachable from your host. - For ad‑hoc logging, search the sources for
dlog("…")and run via./build.sh debugto watch stdout.
Security & signing
- The
.appbundle is ad‑hoc 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 Prole‑linked LLMs from within the Prole surface.
License
- See the repository
LICENSEfile.