Files
james.maes 795c3bf5c9 feat(app): v0.1 UX surfaces — startup panels + InputMonitoring banner + PTT (#87, #88, #89, #156)
#89: new AppDelegate.startupSurfacesMode enum (.minimal/.diagnostic). Debug defaults .diagnostic; Release defaults .minimal. openStartupSurfacesIfDiagnostic() runs at tail of bootHealthTask (skipped under XCTest or when wizard is open). Status panel top-right + Dev Overlay bottom-right of NSScreen.main.visibleFrame. DevOverlay opens to Logs tab.

#88: BannerContent.inputMonitoringDenied is now nonDismissible: true. New HUDBannerCoordinator.dismiss(id:) clears a banner programmatically without writing dismissedThisLaunch. AppDelegate.reprobeInputMonitoring fires on NSApplication.didBecomeActiveNotification; rebinds the global hotkey on re-grant. Uses IOHIDCheckAccess (query-only, no prompt) per CLAUDE.md guidance. 3 new coordinator tests.

#87: WizardState.pttHotkey persisted under Jarvis.pttHotkey (independent of summon hotkey). Ships unbound per CLAUDE.md hotkey hygiene. AppDelegate.rebindPTTFromState() called from installVoice, foreground TCC re-grant, Settings Save/Clear. SettingsView extended with PTT hotkey section. Audio-graph isolation: NSEvent monitors only, no audio-graph surgery — safe alongside fix/voice-crit-v0.1. 3 new WizardState tests.

DevOverlay 14 + Voice 26 tests pass; all 17 grep boundary gates green (incl. single-writer-hudstate + no-modal-presentation).
2026-05-13 06:32:16 -05:00
..

DevOverlay

Cmd+Option+D toggleable debug panel. Shows current agent state, last 5 tool calls (inputs + outputs), context token count, and per-turn latency breakdown. Not user-facing — a developer tool.

Key public types

Type Purpose
DevOverlayWindow The borderless NSWindow that hosts the SwiftUI view
DevOverlayView SwiftUI panel — state, tool calls, tokens, latencies
DevOverlayViewModel Subscribes to OrchestratorEvent + MemoryEvent streams
DevOverlayBridge Wiring from AppDelegate (event-stream subscriber + window controller)

Depends on

AgentCore, AgentOrchestrator, Logging. External: swift-log.

Used by

App/AppDelegate. Not consumed by other packages.

Key invariants / contracts

  • Read-only consumer. DevOverlay never mutates orchestrator/memory state — it only watches.
  • Latency tracking is wall-clock, not LLM-billed. Per-turn breakdown shows network + decode + tool dispatch separately.
  • Token count is provider-reported usage. Not a local re-tokenization.

Tests

XCTest. Snapshot tests on view-model state transitions, integration with mock orchestrator events.

Notable files

  • Sources/DevOverlay/DevOverlayView.swift — SwiftUI panel
  • Sources/DevOverlay/DevOverlayViewModel.swift — event-stream subscriber
  • Sources/DevOverlay/DevOverlayBridge.swift — AppDelegate wiring