Run and test transcription endpoint: docker run -p 9876:9876 -e WHISPER_MODEL=tiny triple-c-stt then curl -F 'file=@test.wav' http://localhost:9876/transcribe
Enable STT in Settings → pull image → start container
Click mic button in terminal → speak → verify transcribed text appears
Verify existing voice mode (/voice) still works independently
Verify app startup/shutdown with STT container running (cleanup on close)
Test model switching (tiny → small) triggers container recreation
## Summary
- Adds a **mic button** to the terminal UI for speech-to-text input via a Faster Whisper sidecar container
- New `stt-container/` with FastAPI transcription server (Dockerfile + `server.py`)
- Rust backend: STT container lifecycle management + `transcribe_audio` IPC command (proxied via reqwest multipart)
- Frontend: `useSTT` hook, `SttButton` (floating overlay), `SttSettings` panel, WAV encoder utility
- Gitea Actions CI workflow for multi-arch (amd64/arm64) STT image builds, dual-push to Gitea + GHCR
## How it works
1. User enables STT in Settings and pulls/builds the STT container image
2. Clicking the mic button in the terminal starts recording (16kHz mono PCM via AudioWorklet)
3. Clicking again stops recording, encodes to WAV, sends through Tauri IPC to Rust backend
4. Rust backend POSTs the WAV to the Whisper container's `/transcribe` endpoint
5. Transcribed text is injected into the terminal as if typed
## Risk assessment
- **Zero impact on existing users** — STT is disabled by default and requires explicit opt-in (Settings toggle + image pull)
- No changes to existing terminal I/O, voice mode, or container management
- STT container binds to `127.0.0.1` only (not exposed to network)
- Model cache persisted via named Docker volume (`triple-c-stt-model-cache`)
## Test plan
- [ ] Build STT container locally: `docker build -t triple-c-stt ./stt-container`
- [ ] Run and test transcription endpoint: `docker run -p 9876:9876 -e WHISPER_MODEL=tiny triple-c-stt` then `curl -F 'file=@test.wav' http://localhost:9876/transcribe`
- [ ] Enable STT in Settings → pull image → start container
- [ ] Click mic button in terminal → speak → verify transcribed text appears
- [ ] Verify existing voice mode (`/voice`) still works independently
- [ ] Verify app startup/shutdown with STT container running (cleanup on close)
- [ ] Test model switching (tiny → small) triggers container recreation
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Adds a mic button to the terminal UI that captures speech, transcribes
it via a Faster Whisper sidecar container, and injects the text into
the terminal input. Includes settings panel for model selection
(tiny/small/medium), port config, and container lifecycle management.
- stt-container/: Dockerfile + FastAPI server for Whisper transcription
- Rust backend: STT container management, transcribe_audio IPC command
- Frontend: useSTT hook, SttButton, SttSettings, WAV encoder
- CI: Gitea Actions workflow for multi-arch STT image builds
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Cargo had resolved to 2.6.0 while npm had 2.7.0, causing the Tauri
build version check to fail.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Aligns the npm lockfile with the Cargo crate version to fix the Tauri
build version mismatch check.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
jknapp
merged commit 702ebb7247 into main2026-04-13 03:35:40 +00:00
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Summary
stt-container/with FastAPI transcription server (Dockerfile +server.py)transcribe_audioIPC command (proxied via reqwest multipart)useSTThook,SttButton(floating overlay),SttSettingspanel, WAV encoder utilityHow it works
/transcribeendpointRisk assessment
127.0.0.1only (not exposed to network)triple-c-stt-model-cache)Test plan
docker build -t triple-c-stt ./stt-containerdocker run -p 9876:9876 -e WHISPER_MODEL=tiny triple-c-sttthencurl -F 'file=@test.wav' http://localhost:9876/transcribe/voice) still works independently🤖 Generated with Claude Code