- liveatc.vue: fix ~/ to ~~/ imports for shared dir, fix reactive type cast
- TransmissionCard.vue: import Transmission type from shared instead of local dupe
- route.post.ts: fix possibly-undefined candidates, remove unused ts-expect-error
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- shared/atc/engine.ts: useAtcEngine() composable — reactive state machine with
initFlight, handlePilotInput, updateTelemetry, declareEmergency, reset
- server/api/atc/route.post.ts: Token-efficient LLM router with single-candidate
fast path, heuristic readback checking, and fallback to LLM
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
BREAKING: Removes communicationsEngine (1,429 LOC), LLM decision
router (1,137 LOC), decision tree MongoDB models, editor UI/API,
pm.vue page, and all related types/services. Simplifies PTT endpoint
to STT-only. Moves getOpenAIClient to normalize.ts.
Prepares for v2 Phase Machine reimplementation.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Add collapsible sidebar with phase stepper (jump between phases)
- Add SimBridge conditions panel in sidebar (live values, progress bars, targets)
- Add global progress bar (top edge, glowing) + phase-local TTS progress bar
- Add skip button to skip TTS speech while ATC is speaking
- Add skipSpeech() to audio composable (stops current Pizzicato sound)
- Wire up bridge data.post.ts with user auth (JWT) + example payload
- Add server-side telemetry store with pub/sub for Bridge→WS relay
- Extend WS handler with subscribe-telemetry message + userId tracking
- Extend sync composable with subscribeTelemetry() + onTelemetry() callback
- Add require-auth middleware to all flightlab pages
- Fix instructor station ECONNREFUSED via import.meta.client guard
- Add animations: phase transitions, button lists, fade-scale, check-pop, pulse
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>