"""GET /api/transcribe — STT route — DEFERRED MIGRATION (P2.A). The STT feature in the original fork commit 014b9eef touches THREE upstream modules: 1. api/upload.py — handle_transcribe() + _external_stt_transcribe() 2. api/streaming.py — _transcribe_audio_attachments() injects transcripts into the agent-visible message during streaming 3. static/boot.js — mic button + MediaRecorder fallback (iOS WKWebView) Migration #1 is straightforward (route + helper move cleanly). Migrations #2 and #3 cross-cut the streaming engine and the bootstrap JS — refactoring them to live in the plugin requires either: (a) New public-API hooks: api.streaming_hook(name, callback) so the plugin can register an attachment processor that runs inside the streaming pipeline. Adds ~50 LOC to the loader + amends Protocol PRD §5.1. (b) Accept STT as a forced-internal dependency. Adds CONNECTION-MAP entries under forced_internal/ with the streaming.py + boot.js touch points and their rebase-risk notes. Phase 2.1 decides between (a) and (b). Until that's resolved, the STT route stays in the fork (commit 014b9eef remains). This stub exists so the migration plan is co-located with the code and tooling can flag the gap. Test status: vault_status migration proves the loader works. STT is a deeper integration test for the loader's expressiveness. """ # Intentionally NOT registered yet. The plugin loader's _phase2_routes() does # not include "transcribe" — see plugin.py. # # When Phase 2.1 lands, this file will host either: # - A new route handler using a streaming_hook to register the attachment # processor (option a), or # - The route handler + CONNECTION-MAP forced-internal entries for the # remaining touch points (option b).