Skip to content

feat(overlays): branded glass HUD that floats over fullscreen (Swift NSPanel routing + redesign)#189

Merged
AVADSA25 merged 1 commit into
mainfrom
feat/overlay-redesign
Jun 9, 2026
Merged

feat(overlays): branded glass HUD that floats over fullscreen (Swift NSPanel routing + redesign)#189
AVADSA25 merged 1 commit into
mainfrom
feat/overlay-redesign

Conversation

@AVADSA25

@AVADSA25 AVADSA25 commented Jun 9, 2026

Copy link
Copy Markdown
Owner

Why

All keyboard/HUD overlays looked like Windows 98 (square tkinter, 1px border) and never appeared over fullscreen apps. Both symptoms = one regression: commit faf3bef deleted the event writers feeding the Swift CODECOverlay NSPanel (the fullscreen-capable renderer), so everything fell back to tkinter.

What

  • Route every overlay through the running Swift NSPanel via ~/.codec/overlay_events.jsonl (tkinter = automatic fallback, _USE_SWIFT flag = instant rollback).
  • Full visual redesign of the panel: dark glass (blur + tint), 24px masked corners, big tinted CODEC hexagon mark, solid accent titles, shortcut chips, pulsing/breathing state animations, uniform frame.
  • F16 input → new focusable glass InputPanel (Enter sends, Esc cancels), osascript fallback if the panel doesn't ack in 2s. Contract preserved.
  • Dictate unified onto the shared renderer; F18 release hides the recording HUD.

Tests

tests/test_overlays.py — 7 tests, written red-first. Full suite green (2391 passed). Live-verified on screen across all states + iterated with the operator.

Engine modules only — no skill-manifest impact. Deploy: swift build -c release in swift-overlay/ + pm2 restart codec-overlay open-codec codec-dictate.

🤖 Generated with Claude Code

…s through the Swift NSPanel

Every keyboard/HUD overlay (F13 toggle, F18 recording, transcribing, SIGNING
OUT, the three CODEC Dictate pills, skill-fired, F16 task input) was a dated
square tkinter box that macOS hides behind fullscreen apps. Root cause: commit
faf3bef deleted the writers feeding the Swift CODECOverlay NSPanel — the
renderer that floats over fullscreen (canJoinAllSpaces|fullScreenAuxiliary) —
so everything fell back to tkinter.

Fix + redesign:
- codec_overlays.py emits JSON events to ~/.codec/overlay_events.jsonl (the
  channel the running Swift panel polls); tkinter kept as automatic fallback
  when the panel is down. One flag (_USE_SWIFT) reverts everything.
- swift-overlay redesigned: dark-tinted glass (blur + black 0.66), 24px radius
  with maskImage (transparent corners), 84px tinted CODEC hexagon mark pinned
  left, solid accent-colored centered titles (orange/red/blue per state),
  shortcut chips (F18·voice …), pulsing dot / breathing mark, uniform 700×140
  frame, fade in/out.
- New focusable InputPanel replaces the raw AppleScript F16 dialog (glass field
  + Send; Enter submits, Esc cancels); codec_core.get_text_dialog falls back to
  osascript within 2s if the panel doesn't ack. Return contract preserved.
- codec_dictate reuses the shared renderer (was 3 inline tkinter pills);
  codec.py hides the recording HUD on F18 release.

Tests: tests/test_overlays.py (7, TDD red-then-green). Preview harness:
tools/overlay_preview.py. Design: docs/OVERLAY-REDESIGN.md.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@AVADSA25 AVADSA25 merged commit 1228e69 into main Jun 9, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants