- Deleted ProleRouter-related YAML files (services, deployments, storage) and unused `call_openapi.py`.
- Updated installer to reference `prole-net/prole-scan` instead of outdated `net/scan`.
- Renamed `network_prompt.txt` to match the new directory structure.
- Moved prole-tools-app to prole-app at the project root to make it self-contained for transition to its own repository.
- Created prole-tools-app/dist/ directory to host build artifacts.
- Generated distribution artifacts (Prole Tools.app and Prole Tools.zip) using prole-app/build.sh package.
- Checked in the generated artifacts to prole-tools-app/dist/ (bypassing .gitignore for temporary release process).
Changes Summary
•
Renamed directory prole-tools-app/ to prole-app/.
•
Populated prole-tools-app/dist/ with the latest build output from prole-app/build.sh.
•
Staged all changes, including the forced addition of ignored artifacts in prole-tools-app/dist/.
- Refactored installer UI with updated canvas rendering, sidebar navigation, and footer buttons.
- Enhanced styling for macOS compatibility and consistent design across controls.
- Added Pytest-based unit tests for `screen.py` and `config.py`.
- Expanded dependency catalog with new tools like `tshark` and `pyshark`.
- Improved error tolerance for background rendering and added placeholders for Kerberos configuration.
- Added error checks for `samba-tool dns add` and `update` to handle pre-existing records gracefully.
- Improved Kerberos cache validation with warnings and hints for unreadable or missing caches.
- Updated usage examples to provide better guidance for Kerberos authentication.
- Added error checks for `samba-tool dns add` and `update` to handle pre-existing records gracefully.
- Improved Kerberos cache validation with warnings and hints for unreadable or missing caches.
- Updated usage examples to provide better guidance for Kerberos authentication.
- Added logic to auto-set `KRB5CCNAME` from the sudo user's Kerberos cache, if available.
- Improved logging to indicate when the Kerberos cache is automatically utilized.
- Replaced `-k yes` with `--use-kerberos=required` for all `samba-tool` commands.
- Added Kerberos ticket validation with warnings for unset or missing `KRB5CCNAME`.
- Updated usage example to emphasize preserving Kerberos ticket via `sudo -E`.
- Added `init-prole-dns.sh` to sync host records to Samba AD DNS.
- Included a fallback `hosts.txt` for static entries when Postgres is unavailable.
- Script supports operations such as start, stop, sync, status, and flush.
- Integrated cron-based hourly sync functionality.
- Added `init-prole-dns.sh` to sync host records to Samba AD DNS.
- Included a fallback `hosts.txt` for static entries when Postgres is unavailable.
- Script supports operations such as start, stop, sync, status, and flush.
- Integrated cron-based hourly sync functionality.
- Added Ollama endpoint to `Config.swift` and `install.py`.
- Updated `ServiceChecker` to handle Ollama status checks and errors.
- Enhanced `StatusView` with a sixth traffic light for Ollama.
- Added Ollama endpoint to `Config.swift` and `install.py`.
- Updated `ServiceChecker` to handle Ollama status checks and errors.
- Enhanced `StatusView` with a sixth traffic light for Ollama.
- Added OpenBAO readiness check via `PFScriptBridge`.
- Merged service defaults with indexed configuration in `Config.swift`.
- Improved service checker to handle OpenBAO readiness using `kubectl`.
- Refined `StatusView` to support traffic light interactivity and case-insensitive service matching.
- Expanded `prole-db.yaml` with additional PostgreSQL extensions and function grants.
- Introduced new script commands to manage CloudNative-PG clusters (`create`, `delete`, `recreate`).
- Updated default namespace to `prole` and refined variable handling for cluster name.
- Adjusted kustomization.yaml to reference `prole-db.yaml` for consistency in manifests.
- Removed `init_primary_domain.sh` entirely; introduced `init_openbao.sh` with updated logic and streamlined functionality.
- Standardized script names to align with the OpenBao-centric workflow.
- Updated installer to dynamically fetch Prole database versions and reflect script changes.
- Improved TLS generation and k8s manifest handling for CloudNative-PG.
- Added new references to OpenBao initialization across scripts and UI components.
- Deleted `init-port-forwards.sh`, removing deprecated placeholder script.
- Introduced `dbStatus` command in `PFScriptBridge.swift` for querying database status with `kubecolor`.
- Improved `StatusView` UI: refined button interactivity and font standardization.
- Added `DBStatusWindowController` to `AppDelegate` for better database status visibility and control.
- Updated `OverlayWindow`: adjusted window levels and interaction behavior for smoother UX.
- Update `screen.py` to make text read-only using `state='disabled'`, while allowing text selection and copying.
- Simplify `init_primary_domain.sh` by removing unnecessary local variable declaration for `db_pass`.
- Replace direct script invocation with `$PROLE_HOME/env.sh` wrapper for consistent environment setup across all components.
- Update runtime processes to dynamically resolve `$PROLE_HOME` or fallback to `$HOME/.prole`.
- Deprecate `init-port-forwards.sh` script bundling; remove from LaunchAgentManager and build system.
- Overhaul `env.sh` generation to include execution capability, customizable paths, and improved error handling.
- Standardize app name and paths to "Prole Tools" across all files and UI elements.
- Adjust build output to align with new structure, including executable naming and resource packaging.
feat(installer): clear overlay widgets on page switch; generate robust env.sh with safe PATH defaults
•
Fix UI bug where Environment page widgets persisted after navigation
◦
Destroy overlay widgets and clear page-specific canvas items in _clear_canvas_page()
•
Improve $PROLE_HOME/env.sh generation in _save_env_to_file()
◦
Export core PROLE_* directories
◦
Add portable _prole_add_path helper
◦
Prepend $PROLE_HOME/bin and common macOS paths: /opt/homebrew/bin, /usr/local/bin, /usr/bin, /bin, /usr/sbin, /sbin
◦
Export final PATH and include guidance for custom paths (e.g., Ollama app bundle)
Rationale: Ensures clean screen transitions in the installer and provides a minimal, safe PATH so shells launched by Prole.app can find docker and ollama by default.
•
Strip all embedded shell from LaunchAgentManager.swift; use external etc/init-port-fowards.sh copied from app Resources at runtime; set executable perms
•
Set defaultHelperScript to empty to eliminate inline script
•
Build script: bundle init-port-fowards.sh into Prole.app/Contents/Resources and chmod +x; capture spm_build_binary path via tail -n1
•
Fix malformed multiline XML in PortMappingsXML.save()
•
Preferences: handle new .agentPF tab in didSelect and windowDidResize
Result: Prole.app builds cleanly on arm64; no inline shell remains; embedded dylibs packaged and codesigned
- ServiceChecker now runs as a background timer task (30s), skips overlapping runs, and caches per-endpoint state from Preferences (services + kubernetes). Legacy UI flags are kept in sync for StatusView/Overlay.
- Auto-reload on Preferences save: ServiceChecker listens to Config.didChange, clears caches, invalidates freshness, and triggers an immediate refresh.
- Preferences: ensure in-progress text edits are committed before saving (endEditing) for Kubernetes, Services, and Ports tabs.
- PortForwardManager: fix crash in termination handler by reading terminationStatus from the provided Process instance, then updating state on the manager queue.
- Minor: keep existing UI wiring; logging intact for diagnostics.
TODO: remove (list unused code paths)
- Config.primaryKube (unused in prole-app)
- Config.string(_:, default:) (unused in prole-app)
- Config.int(_:, default:) (unused in prole-app)
- PortForwardManager.parsePFCommand tuple parts `modeBackground` and `keepAlive` (never read by callers)
- Config.pfModeBackground and Config.pfKeepAlive (currently ineffective because their values aren’t used downstream)
- 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.
- 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.
This marks a milestone alpha build of Prole.
Key changes
- build.sh now supports conditional third‑party frameworks via env flags:
- PROLE_ENABLE_IRCKit (default: 0)
- PROLE_ENABLE_RoyalVNCKit (default: 0)
- When disabled, IRCKit/RoyalVNCKit are not fetched, linked, or embedded.
- Swift compile receives convenience defines for conditional compilation:
- -D PROLE_ENABLE_IRCKit or -D PROLE_ENABLE_IRCKit_DISABLED
- -D PROLE_ENABLE_RoyalVNCKit or -D PROLE_ENABLE_RoyalVNCKit_DISABLED
- Archive flow stabilized; optional SSL-less path for IRCKit remains available via PROLE_DISABLE_SSL=1.
- App bundle generation unchanged (plist, icons, resources, codesign).
Why
- Restore a clean build on current toolchains and allow incremental re‑enablement of optional integrations.
- Make the build resilient: dependencies can be toggled on CI or locally without modifying sources.
Usage examples
- Default (alpha baseline; both off):
./build.sh build --arch arm64
- Enable IRCKit only:
PROLE_ENABLE_IRCKit=1 ./build.sh build --arch arm64
- Enable RoyalVNCKit only:
PROLE_ENABLE_RoyalVNCKit=1 ./build.sh build --arch arm64
- Enable both:
PROLE_ENABLE_IRCKit=1 PROLE_ENABLE_RoyalVNCKit=1 ./build.sh build --arch arm64
Notes
- IRCKit SSL-less switch remains available if needed:
PROLE_DISABLE_SSL=1 PROLE_ENABLE_IRCKit=1 ./build.sh build --arch arm64
- Current alpha defaults keep both IRCKit and RoyalVNCKit disabled.
Build: 2025-12-05 14:21 local
This marks a milestone alpha build of Prole.
Key changes
- build.sh now supports conditional third‑party frameworks via env flags:
- PROLE_ENABLE_IRCKit (default: 0)
- PROLE_ENABLE_RoyalVNCKit (default: 0)
- When disabled, IRCKit/RoyalVNCKit are not fetched, linked, or embedded.
- Swift compile receives convenience defines for conditional compilation:
- -D PROLE_ENABLE_IRCKit or -D PROLE_ENABLE_IRCKit_DISABLED
- -D PROLE_ENABLE_RoyalVNCKit or -D PROLE_ENABLE_RoyalVNCKit_DISABLED
- Archive flow stabilized; optional SSL-less path for IRCKit remains available via PROLE_DISABLE_SSL=1.
- App bundle generation unchanged (plist, icons, resources, codesign).
Why
- Restore a clean build on current toolchains and allow incremental re‑enablement of optional integrations.
- Make the build resilient: dependencies can be toggled on CI or locally without modifying sources.
Usage examples
- Default (alpha baseline; both off):
./build.sh build --arch arm64
- Enable IRCKit only:
PROLE_ENABLE_IRCKit=1 ./build.sh build --arch arm64
- Enable RoyalVNCKit only:
PROLE_ENABLE_RoyalVNCKit=1 ./build.sh build --arch arm64
- Enable both:
PROLE_ENABLE_IRCKit=1 PROLE_ENABLE_RoyalVNCKit=1 ./build.sh build --arch arm64
Notes
- IRCKit SSL-less switch remains available if needed:
PROLE_DISABLE_SSL=1 PROLE_ENABLE_IRCKit=1 ./build.sh build --arch arm64
- Current alpha defaults keep both IRCKit and RoyalVNCKit disabled.
Build: 2025-12-05 14:21 local
Live-updating Dependencies (background checks via installer.config.get_dep_info)\n- Final steps retained: pre-completed items + Start Prole Workstation + Install Prole.app\n- Console shows docker run; Enter/Next runs detatched and verifies\n- Drag-to-install popup marks completion on close\n- Fixed-height footer to prevent background geometry shifts\n- Back/Next footer; Next triggers same action as Enter\n\nNote: docker run preview didn’t appear for the user; follow-up fix planned.