Files
tulsi bce05bf054 feat: wire up voice dictation in goose2 via ACP
Add voice dictation support to the goose2 Tauri app by exposing
transcription and config as ACP custom methods, then wiring the
frontend to use them.

Backend (crates/):
- Add DictationTranscribeRequest/Response and DictationConfigRequest/Response
  types to goose-sdk custom_requests.rs with model metadata fields
- Add #[custom_method] handlers in goose-acp server.rs for transcribe
  (OpenAI, Groq, ElevenLabs, Local) and config
- Register methods in acp-meta.json
- Forward local-inference feature from goose-cli to goose-acp

Tauri (ui/goose2/src-tauri/):
- Rewrite dictation.rs to use call_ext_method via ACP instead of
  importing goose crate directly
- Add generic CallExt command to ACP manager with method name
  normalization (strips leading _ to avoid double-prefix)
- Register get_dictation_config and transcribe_dictation commands

Frontend (ui/goose2/src/):
- Wire useDictationRecorder + useVoiceInputPreferences into ChatInput
- Replace placeholder mic button with working toggle (recording/
  transcribing states, auto-submit on keyword)
- Stop recording on manual send and on auto-submit keyword
- Show "Listening..."/"Transcribing..." placeholder in textarea
- Add Voice section to SettingsModal with VoiceInputSettings
- Add all voice i18n strings (en + es)
- Fix pre-existing type errors in dictationVad.ts and VoiceInputSettings

Known issue: Local Whisper reports configured: false despite model being
downloaded and config set. The is_downloaded() path check needs
investigation in a follow-up.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-15 14:28:00 -07:00
..
2026-04-15 13:00:12 -04:00
2026-04-15 15:09:12 -04:00
2026-04-15 15:38:04 -04:00
…
2026-04-15 15:09:12 -04:00