Menu bar controller for CAAL: Docker networked stack or embedded sidecar runtime, Home Assistant hooks, and iOS onboarding QR.
The Settings/Onboarding view now includes a Quick Start scanner to reduce manual setup. It probes local prerequisites and pre-fills suggestions:
- Docker availability
- Ollama availability
- CLI tools (
claude,gemini,cursor,gh) - common CAAL repo paths
- common Obsidian vault path
This is intentionally local-only and safe to run repeatedly. It does not read secrets.
Onboarding/Settings is now scrollable and resizable (min/ideal/max sizing) so controls remain reachable on constrained remote displays (for example Jump Desktop on iPad).
Quick Start now runs as a step-based wizard:
- Mode
- Models
- Capabilities
- Knowledge
- Doctor
The Capabilities step persists host/bridge access preferences (calendar, contacts, mail, files, iOS bridge fallback). The Doctor step now runs local probes for frontend/backend reachability, Docker daemon, CLI readiness/auth, and current permission states for Contacts/Calendar.
Profiles can also be exported/imported as JSON from the Quick Start panel to move setup between devices or restore known-good local configs quickly.
Doctor rows now include context-aware Fix actions for common local blockers (privacy panes, Docker app launch, CLI auth/install docs). Quick Start can also export a runtime contract JSON snapshot for Helmsman/team tooling alignment. Phase 6 adds deeper live probes for sidecar STT/TTS health, backend /health, and routing policy parity against the selected local provider.
Phase 7 adds an opt-in Preflight repair action that re-scans local prerequisites, re-starts the selected runtime path (embedded sidecar or networked CAAL), and reruns Doctor checks to confirm readiness before save/deploy.
Phase 8 adds direct permission-request remediation actions for not-determined Contacts/Calendar states and a Doctor check that verifies the published runtime contract path exists for consumer tooling.
Phase 9 adds startup self-heal guardrails in ServerMonitor: if runtime is still offline shortly after launch, SoniqueBar retries the selected runtime path once automatically.
Phase 10 automates contract consumer surfaces: runtime contract now republishes on Save/Preflight, and preflight telemetry is exported to preflight-telemetry.latest.json with check counts and failed-label summaries.
Phase 11 adds long-horizon consumer stability: runtime contract embeds contractPullPath, and telemetry history is retained in preflight-telemetry.history.jsonl (rolling last 50 runs).
Phase 12 completes consumer pull + observability: SoniqueBar runs a local loopback-only contract endpoint on 127.0.0.1:8894 with token-gated reads (x-sonique-contract-token or ?token=), exposes runtime/trend pull URLs in the contract payload, and shows an in-app preflight trend summary in Doctor.
Connected installs are now first-class: onboarding includes a Connection profile selector. Standard keeps setup minimal, while Connected Lab applies lab-oriented defaults (host-first capabilities on, NVIDIA base URL seed, local-then-provider fallback) and syncs CAAL routing/integration preferences on save for HA/NVIDIA/CLI-heavy environments.
Open SoniqueBar.xcodeproj in Xcode (or generate via XcodeGen if you add a spec). Scheme: SoniqueBar, destination: My Mac.
Point Settings at the cloned CAAL repo. SoniqueBar can start/stop the compose stack or run the bundled sidecar per deployment mode.
SoniqueBar stores routing preferences in UserDefaults (keys in LLMRoutingStorageKeys in SoniqueBar/Services/MacSettings.swift). CAAL consumes snake_case fields (LLMRoutingCAALKeys) via settings.json and optional .env — see vault note Projects/Sonique/NVIDIA Provider UI — Task 284 Handoff.md.
Placeholder server .env lines (no real secrets in repo or docs). Swift names for these keys live in LLMRoutingEnvVarNames next to LLMRoutingCAALKeys in SoniqueBar/Services/MacSettings.swift.
NVIDIA_FEATURE_ENABLED=false
NVIDIA_BASE_URL=<nvidia-base-url>
NVIDIA_MODEL=<nvidia-model-placeholder>
# NVIDIA_API_KEY=<nvidia-api-key>Client UI never stores NVIDIA API keys; base URL is optional text when the experimental toggle is on.
See Sidecar/README.md for the embedded runtime layout and the same NVIDIA placeholder block.