Skip to content
13 changes: 13 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,19 @@ _Feature module implementation (iam, billing, workspace, discovery) in progress.

### Added

- **Discovery — virtual-meeting audio capture** (`feature/system-audio-capture`): the analyst can now
record a Zoom / Google Meet / Teams call, not only a face-to-face meeting. A compact **audio-source
picker** next to the record button chooses **In person (microphone)** or **Virtual meeting (microphone +
meeting audio)**, remembered per user in localStorage. The virtual source opens the browser's
screen-share picker straight from the record click (`getDisplayMedia` with tab/window/system audio, voice
processing off and ReqsAI's own tab hidden), drops the unused video track and mixes the shared audio with
the mic in one mono Web Audio mixer — the backend keeps receiving the same 16 kHz Int16 PCM on `/ws/stt`,
and the level meter shows the mix. Sharing without ticking "Share tab audio" warns and lets the user
retry; a dismissed picker stays idle silently; "Stop sharing" mid-session keeps recording the mic with a
notice and a **Share again** action in the session bar; pausing keeps the shared tab, so resuming never
re-opens the picker. The virtual option is disabled (with the reason) outside desktop Chrome/Edge, and a
hint recommends headphones to avoid a duplicated transcript (`discovery.source.*` plus new
`discovery.rec.*` / `discovery.bar.*` keys, en/es).
- **Discovery — live session presence** (`feature/discovery-presence`): the discovery chat now shows who
else is viewing the **live** session — an overlapping avatar stack with a live pulse, a "+N" overflow
bubble and a viewer count, in both the page header and the live session bar. It is fed by a new
Expand Down
18 changes: 16 additions & 2 deletions public/i18n/en.json
Original file line number Diff line number Diff line change
Expand Up @@ -1082,20 +1082,34 @@
"empty": "No language found.",
"locked": "The language is fixed once recording starts."
},
"source": {
"label": "Audio source",
"mic": "In person (microphone)",
"meeting": "Virtual meeting (microphone + meeting audio)",
"unsupported": "Virtual meeting: available in desktop Chrome or Edge.",
"hint": "When sharing, pick the meeting tab and tick \"Share tab audio\". Use headphones to avoid a duplicated transcript."
},
"bar": {
"recording": "Recording",
"paused": "Paused",
"pause": "Pause",
"resume": "Resume",
"stop": "Stop"
"stop": "Stop",
"meetingAudio": "Recording microphone + meeting audio",
"meetingAudioLost": "Meeting audio is not being captured. Share the meeting tab again.",
"reshare": "Share again"
},
"rec": {
"micDenied": "Microphone permission denied. Enable it in your browser settings.",
"invalidUserSession": "Your user session is not valid.",
"wsError": "Could not connect to the transcription server.",
"wsClosed": "The transcription connection was closed.",
"initFailed": "Could not start recording.",
"audioInitFailed": "Could not initialize the local audio processor."
"audioInitFailed": "Could not initialize the local audio processor.",
"noMeetingAudio": "No audio was shared. Pick the meeting tab and tick \"Share tab audio\".",
"meetingAudioEnded": "Meeting audio sharing stopped. Recording continues with the microphone only.",
"meetingUnsupported": "Your browser cannot capture meeting audio. Use desktop Chrome or Edge.",
"shareFailed": "Could not capture the selected tab, window or screen."
},
"queue": {
"pendingBadge": "{{count}} suggestions pending",
Expand Down
18 changes: 16 additions & 2 deletions public/i18n/es.json
Original file line number Diff line number Diff line change
Expand Up @@ -1082,20 +1082,34 @@
"empty": "No se encontró el idioma.",
"locked": "El idioma queda fijo al iniciar la grabación."
},
"source": {
"label": "Fuente de audio",
"mic": "Presencial (micrófono)",
"meeting": "Reunión virtual (micrófono + audio de la reunión)",
"unsupported": "Reunión virtual: disponible en Chrome o Edge de escritorio.",
"hint": "Al compartir, elige la pestaña de la reunión y marca «Compartir audio de la pestaña». Usa audífonos para no duplicar la transcripción."
},
"bar": {
"recording": "Grabando",
"paused": "En pausa",
"pause": "Pausar",
"resume": "Reanudar",
"stop": "Detener"
"stop": "Detener",
"meetingAudio": "Grabando micrófono + audio de la reunión",
"meetingAudioLost": "No se está capturando el audio de la reunión. Vuelve a compartir la pestaña de la reunión.",
"reshare": "Compartir de nuevo"
},
"rec": {
"micDenied": "Permiso de micrófono denegado. Habilítalo en los ajustes de tu navegador.",
"invalidUserSession": "Tu sesión de usuario no es válida.",
"wsError": "No se pudo conectar con el servidor de transcripción.",
"wsClosed": "Se cerró la conexión de transcripción.",
"initFailed": "No se pudo iniciar la grabación.",
"audioInitFailed": "No se pudo inicializar el procesador de audio local."
"audioInitFailed": "No se pudo inicializar el procesador de audio local.",
"noMeetingAudio": "No se compartió audio. Elige la pestaña de la reunión y marca «Compartir audio de la pestaña».",
"meetingAudioEnded": "Se dejó de compartir el audio de la reunión. La grabación continúa solo con el micrófono.",
"meetingUnsupported": "Tu navegador no puede capturar el audio de la reunión. Usa Chrome o Edge de escritorio.",
"shareFailed": "No se pudo capturar la pestaña, ventana o pantalla elegida."
},
"queue": {
"pendingBadge": "{{count}} sugerencias pendientes",
Expand Down
Loading
Loading