59 Commits
Author SHA1 Message Date
christianandClaude Opus 5.5 7f1f37a809 Make a tap on the page number key go to page 1 outright.
The converted key's "startup" page resolves to the current page on surfaces
set to "use last page", so a tap did nothing. The tap page is now
nav_tap_page in config.json (1).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 09:58:59 -04:00
christianandClaude Opus 5.5 a5972d646f Hold the page number key for one second to jump to the status page.
A tap still goes to the start page, now on release so a hold does not flash
through page 1 first. Hold time is nav_hold_ms in config.json.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 09:52:21 -04:00
christianandClaude Opus 5.5 815a4ae0e4 Say in the README that only the page number key follows ALL.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 09:44:12 -04:00
christianandClaude Opus 5.5 3118cdc281 Colour the page nav keys on every page to follow the ALL button.
nav_templates.json holds Companion's own UP / page number / DOWN keys after
'convert to regular button'; make_page.py colours them from the ALL tile and
nav_keys.py copies them onto all 96 other pages (288 keys, recorded in
nav_locations.json; --revert restores the built-in keys). Also rewrites the
README's top half, which an earlier edit had duplicated.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 09:40:45 -04:00
christianandClaude Opus 5.5 161596cefb Add push_page.py to import the status page without the UI.
It uploads the page file over Companion's own API (tRPC over WebSocket, the
same calls the web UI makes) and imports it into page 19, refusing unless that
page is empty or already the status page.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 09:30:56 -04:00
christianandClaude Opus 5.5 c0c83459e5 Regroup Dante, MIDI and apps into one button each, and fix the morning Bonjour check.
DANTE now alarms for all 19 devices by name. MIDI covers the Lighting PC and
SuperRack peers plus the Lighting PC and NA Tracks sessions; APPS covers
ProPresenter, Ableton, the tracks Mac and the Bible TV app. Five buttons
became three, and a check's tag names the device in the message.

dns-sd pads hours before 10 AM with a space, which the Bonjour parser did not
allow for, so every session read as gone each morning. Parsing is now its
own function with a test for both cases.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 09:22:38 -04:00
christianandClaude Opus 5.5 38b6616e3f Make the DANTE button count all 19 watched devices.
It now reads 19/19 to match Dante Controller. NA-Tracks, SuperRack and the
ProPresenter Mac still alarm on their own buttons, so a drop is not flagged
twice; DANTE just shows 18/19 while one of them is missing.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 09:15:46 -04:00
christianandClaude Opus 5.5 195b111bb7 Watch Studio B's six Dante devices on the DANTE button too.
All 19 Dante devices are now watched: 16 on DANTE, and NA-Tracks, SuperRack
and the ProPresenter Mac on their own buttons so a drop is not counted twice.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 09:10:22 -04:00
christianandClaude Opus 5.5 246500f965 Add the Companion status page and its watchdog for NA Ingest.
status_panel.py runs on NA Ingest as a LaunchAgent. Every second it reads
Companion's connection statuses and module variables, adds what Companion
cannot see (network MIDI peers, Bonjour sessions, pings, launchd services,
disk, Resi cloud, the Bible TV app), and writes one JSON custom variable that
page 19 renders. Buttons acknowledge alarms, mute them, and restart a stuck
Companion connection on a two second hold. If the watchdog stops, the page
turns purple instead of freezing on stale green.

make_page.py builds the page export from config.json; tests/ runs offline
against a fake Companion and a CoreMIDI loopback.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 09:00:56 -04:00