feat(overlay): split secondary subtitles into dedicated top window

This commit is contained in:
2026-02-22 18:41:23 -08:00
parent badb82280a
commit 0a2461f45a
23 changed files with 523 additions and 29 deletions

View File

@@ -0,0 +1,73 @@
# Agent Session: codex-overlay-three-window-layout-20260223T021606Z-9z2t
- alias: `codex-overlay-three-window-layout`
- started_utc: `2026-02-23T02:16:06Z`
- status: `handoff`
- mission: `Implement top-anchored secondary subtitle overlay window (20%) plus swappable primary overlay region (80%).`
- linked_backlog: `TASK-110`
## Intent
- Convert overlay runtime from 2 fullscreen windows to 3 windows:
- `secondary` window anchored top (max 20% height).
- `visible` / `invisible` windows constrained to remaining 80%.
- Keep secondary subtitle bar independent from visible/invisible swapping.
## Planned Files
- `src/core/services/overlay-window.ts`
- `src/core/services/overlay-runtime-init.ts`
- `src/core/services/overlay-manager.ts`
- `src/main.ts`
- `src/preload.ts`
- `src/types.ts`
- `src/renderer/utils/platform.ts`
- `src/renderer/renderer.ts`
- `src/renderer/style.css`
- `src/main/runtime/overlay-window-factory*.ts`
- `src/main/runtime/overlay-window-runtime-handlers*.ts`
- `src/main/runtime/overlay-runtime-options*.ts`
- focused tests under `src/main/runtime/*` + `src/core/services/*`
## Assumptions
- Secondary bar window should remain independently present while visible/invisible overlays toggle.
- Top bar height fixed at 20% of tracked mpv bounds (clamped to valid integer px).
- Existing secondary mode semantics (`hidden`/`visible`/`hover`) remain; hover behavior stays functional.
## Phase Log
- `2026-02-23T02:16:06Z` plan: read overlay/runtime wiring, implement secondary window + geometry split, run focused tests.
- `2026-02-23T02:24:10Z` implementation: added `secondary` overlay window kind/wiring, overlay-manager secondary window ownership, and geometry split helper (`top 20%` secondary + `bottom 80%` primary).
- `2026-02-23T02:27:40Z` renderer updates: added `secondary` layer detection, disabled measurement reports for secondary layer, and CSS layer split (secondary hidden in primary layers; subtitle/modals hidden in secondary layer).
- `2026-02-23T02:29:51Z` validation: `bun run tsc --noEmit`; `bun test src/main/runtime/overlay-window-factory.test.ts src/main/runtime/overlay-window-factory-main-deps.test.ts src/main/runtime/overlay-window-runtime-handlers.test.ts src/renderer/error-recovery.test.ts src/core/services/overlay-window.test.ts`; `bun run build`; `node --test dist/core/services/overlay-manager.test.js`.
## Files Touched
- `src/main.ts`
- `src/core/services/overlay-window.ts`
- `src/core/services/overlay-window-geometry.ts`
- `src/core/services/overlay-window.test.ts`
- `src/core/services/overlay-manager.ts`
- `src/core/services/overlay-manager.test.ts`
- `src/main/runtime/overlay-window-factory.ts`
- `src/main/runtime/overlay-window-factory-main-deps.ts`
- `src/main/runtime/overlay-window-runtime-handlers.ts`
- `src/main/runtime/overlay-window-factory.test.ts`
- `src/main/runtime/overlay-window-factory-main-deps.test.ts`
- `src/main/runtime/overlay-window-runtime-handlers.test.ts`
- `src/preload.ts`
- `src/types.ts`
- `src/renderer/utils/platform.ts`
- `src/renderer/overlay-content-measurement.ts`
- `src/renderer/error-recovery.ts`
- `src/renderer/style.css`
- `backlog/tasks/task-110 - Split-overlay-into-top-secondary-bar-and-bottom-primary-region.md`
## Handoff
- Implemented requested 3-window behavior:
- dedicated top secondary overlay window anchored by mpv geometry split,
- visible/invisible overlays constrained to lower region.
- Secondary mode state now syncs window visibility (`hidden` hides window; non-hidden shows + interactive).
- Remaining caution: source-level `overlay-manager.test.ts` still requires dist/node path (Bun ESM + electron named export limitation), but dist test lane passes.