Live server-transcriptie via Vosk-WebSocket (#2525) #2592

Merged
brenno merged 3 commits from feat/live-asr-server-2525 into main 2026-10-26 10:53:13 +00:00
Owner

Samenvatting

Optionele live voorlopige transcriptie tijdens opname, via een zelf gekozen ASR-server met het bewezen vosk-ws-1-WebSocket-protocol. De opname blijft éénmalig en lokaal-duurzaam; de liveroute luistert mee op dezelfde chunkstroom.

  • Protocol: config-frame, binaire s16le/16kHz-chunks, letterlijke {"eof" : 1} (de echte Vosk-server eist die spelling); partial- en result-berichten.
  • Transport: eigen ASR-platformtransport — op IO via de gepinde resolve-laag, op web via browser-WebSocket (geen headers → geen sleutelservers daar; nooit sleutels in de URL).
  • Consent: ServerConsent krijgt sessie-scope; de opt-in proeft de server vóór de keuze toont en benoemt de host. Geen stille reconnect — herstel is een expliciete knop met vernieuwde sessieconsent.
  • Falen: valt de server weg, dan loopt de lokale opname door; lost is geen opnamefout.
  • Definitief: transcribe speelt de voltooide WAV over hetzelfde protocol af en verzamelt de finales.
  • Proef: testbed/vosk-asr pint de Vosk-image op digest en het model op sha256; make test-asr-integration bewijst proef, live partials en definitieve tekst tegen de echte server.

Testplan

  • make check volledig groen (format, analyse, conventies, privacygrens, suite, coverage, goldens)
  • make check-secrets (gitleaks + trufflehog, 0 findings)
  • make sast (semgrep, 0 findings)
  • make test-asr-integration — echte Vosk: proef, live partials, definitieve tekst, nette eof
  • Network-sink-guard uitgebreid met gedocumenteerde pinning/CSP-motivatie
  • l10n-poort, 30 talen
  • Opt-in 200%-tekstschaaltest; mislukte proef toont reden, geen dode checkbox
  • Web: opt-in verborgen zolang geen bron chunks levert (eerlijk, geen dood pad)

Closes #2525

## Samenvatting Optionele live voorlopige transcriptie tijdens opname, via een zelf gekozen ASR-server met het bewezen `vosk-ws-1`-WebSocket-protocol. De opname blijft éénmalig en lokaal-duurzaam; de liveroute luistert mee op dezelfde chunkstroom. - **Protocol**: config-frame, binaire s16le/16kHz-chunks, letterlijke `{"eof" : 1}` (de echte Vosk-server eist die spelling); partial- en result-berichten. - **Transport**: eigen ASR-platformtransport — op IO via de gepinde resolve-laag, op web via browser-WebSocket (geen headers → geen sleutelservers daar; nooit sleutels in de URL). - **Consent**: `ServerConsent` krijgt sessie-scope; de opt-in proeft de server vóór de keuze toont en benoemt de host. Geen stille reconnect — herstel is een expliciete knop met vernieuwde sessieconsent. - **Falen**: valt de server weg, dan loopt de lokale opname door; `lost` is geen opnamefout. - **Definitief**: `transcribe` speelt de voltooide WAV over hetzelfde protocol af en verzamelt de finales. - **Proef**: `testbed/vosk-asr` pint de Vosk-image op digest en het model op sha256; `make test-asr-integration` bewijst proef, live partials en definitieve tekst tegen de echte server. ## Testplan - [x] `make check` volledig groen (format, analyse, conventies, privacygrens, suite, coverage, goldens) - [x] `make check-secrets` (gitleaks + trufflehog, 0 findings) - [x] `make sast` (semgrep, 0 findings) - [x] `make test-asr-integration` — echte Vosk: proef, live partials, definitieve tekst, nette eof - [x] Network-sink-guard uitgebreid met gedocumenteerde pinning/CSP-motivatie - [x] l10n-poort, 30 talen - [x] Opt-in 200%-tekstschaaltest; mislukte proef toont reden, geen dode checkbox - [x] Web: opt-in verborgen zolang geen bron chunks levert (eerlijk, geen dood pad) Closes #2525
De capture blijft eenmalig en lokaal-duurzaam; de liveroute is een
opt-in die op dezelfde chunkstroom meeluistert. Nieuw: het vosk-ws-1
draadcontract (config, binaire s16le/16kHz-frames, het letterlijke
{"eof" : 1} dat de echte Vosk-server eist), een eigen platformtransport
dat via de gepinde ASR-resolve loopt, sessieconsent op ServerConsent,
en de AsrLiveServerEngine die proeft, streamt, de opname intact laat bij
wegvallen en nooit stilletjes herverbindt.
De opnamedialogen krijgen een gedeelde opt-in die de server eerst proeft
voordat de keuze getoond wordt, de bestemmingshost benoemt en op web
verdwijnt zolang geen bron daar chunks levert. De opname-indicator
toont de verbindingsstatus en een expliciete herstelknop met vernieuwde
sessieconsent; de instellingen krijgen het live-endpointveld. Alle
nieuwe teksten in de 30 talen, plus een 200%-tekstschaaltest.
testbed/vosk-asr pint de Vosk-serverimage op digest en het kleine
model op sha256; make test-asr-integration draait de integratietest
die proeft, live partials streamt en de definitieve tekst over de
voltooide WAV verifieert. De echte proef dwong het byte-exacte
eof-frame af. Poorten en documentatie bijgewerkt: network-sink-
allowlist met pinning/CSP-motivatie, secret-scanner-allowlists voor
de gegenereerde modelmap, TRANSCRIPTION.md/SOURCE_MAP/gebruikers-
gidsen/CHANGELOG.
brenno force-pushed feat/live-asr-server-2525 from 56554fff0b to 195472d3ca 2026-10-26 10:52:45 +00:00 Compare
brenno merged commit 05f6243235 into main 2026-10-26 10:53:13 +00:00
Sign in to join this conversation.
No description provided.