feat(launcher): URL-type event_file support + displayplacer Electron task

URL files: event_file.filename = 'https://...' is now a first-class
file type in the launcher.

- is_url derived rune detects https/http filename prefix
- URL branch in handle_open_file() runs before cache/native branches
  (no download, no temp copy, no hash)
- Offline guard: warns and blocks click if navigator.onLine is false;
  online/offline listeners registered only for URL rows (no-op on files)
- Native mode: opens via native.open_external({ url, app: 'chrome' })
  with silent fallback to default browser
- Browser mode: window.open() with noopener
- display_mode default: 'mirror' (URLs typically just need the screen
  mirrored, not extended presenter view)
- Button badge shows Link2 icon + WifiOff warning when offline
- Button text uses event_file.title as label (falls back to URL)
- Test mode popup: skips Steps 1-2 (N/A), shows open_external call

DEFAULT_LAUNCH_PROFILES: add 'url' key (display_mode: 'mirror')

Electron TODO: added set_display_layout / displayplacer per-device
config task to aether_app_native_electron/documentation/TODO_AGENTS.md
with full contract details and resources
This commit is contained in:
Scott Idem
2026-05-12 13:14:58 -04:00
parent e74dc7a388
commit 768fdbfb21
2 changed files with 151 additions and 20 deletions

View File

@@ -345,6 +345,18 @@ end tell`
display_mode: 'none'
// No open_cmd — execution falls through to open_local_file_v2(path)
// No post_script
},
// -------------------------------------------------------------------------
// URL-type files: event_file.filename IS the URL (https://...)
// Opened via native.open_external({ url, app: 'chrome' }) — no local file involved.
// display_mode 'extend' is the default for URL presentations (e.g. Google Slides).
// -------------------------------------------------------------------------
url: {
app: 'Chrome',
display_mode: 'mirror'
// No open_cmd or post_script — URL branch in handle_open_file() handles this
}
};