feat(chat): add voice input with real-time transcription#3105
Merged
feat(chat): add voice input with real-time transcription#3105
Conversation
Made-with: Cursor
Contributor
🧪 BenchmarkShould we run the Virtual MCP strategy benchmark for this PR? React with 👍 to run the benchmark.
Benchmark will run on the next push after you react. |
Contributor
Release OptionsSuggested: Minor ( React with an emoji to override the release type:
Current version:
|
…Access Made-with: Cursor
Contributor
There was a problem hiding this comment.
1 issue found across 4 files
Prompt for AI agents (unresolved issues)
Check if these issues are valid — if so, understand the root cause of each and fix them. If appropriate, use sub-agents to investigate and fix each issue separately.
<file name="apps/mesh/src/web/components/chat/input.tsx">
<violation number="1" location="apps/mesh/src/web/components/chat/input.tsx:334">
P1: Transcription can be lost on confirm because `appendText` is called while `TiptapInput` is unmounted in recording mode.</violation>
</file>
Reply with feedback, questions, or to request a fix. Tag @cubic-dev-ai to re-run a review.
Transcript now appears live in the normal text area instead of a separate overlay. The bottom bar switches to waveform + accept/decline during recording. Waveform uses chart-2 color and reads low-mid frequency bins where speech energy lives. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Contributor
There was a problem hiding this comment.
2 issues found across 3 files (changes from recent commits).
Prompt for AI agents (unresolved issues)
Check if these issues are valid — if so, understand the root cause of each and fix them. If appropriate, use sub-agents to investigate and fix each issue separately.
<file name="apps/mesh/src/web/components/chat/input.tsx">
<violation number="1" location="apps/mesh/src/web/components/chat/input.tsx:337">
P1: Use the final text returned by `stopRecording()` when confirming, otherwise the last dictated words can be lost.</violation>
<violation number="2" location="apps/mesh/src/web/components/chat/input.tsx:354">
P2: Prefix dictated text with a space when baseline content is non-empty so transcription truly appends instead of concatenating words.</violation>
</file>
Reply with feedback, questions, or to request a fix. Tag @cubic-dev-ai to re-run a review.
Use the final text returned by stopRecording() to guarantee interim words captured in the ref are committed. Add a space before voice text when baseline content is non-empty to avoid word concatenation. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Made-with: Cursor
tlgimenes
pushed a commit
that referenced
this pull request
Apr 13, 2026
* feat(chat): add voice input with real-time transcription and waveform Made-with: Cursor * fix(chat): add Web Speech API global types and fix noUncheckedIndexedAccess Made-with: Cursor * fix(chat): rework voice input to type directly into textarea Transcript now appears live in the normal text area instead of a separate overlay. The bottom bar switches to waveform + accept/decline during recording. Waveform uses chart-2 color and reads low-mid frequency bins where speech energy lives. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * fix(chat): prevent last words being lost and fix space before voice text Use the final text returned by stopRecording() to guarantee interim words captured in the ref are committed. Add a space before voice text when baseline content is non-empty to avoid word concatenation. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * fix(chat): remove unused VoiceInputOverlay export Made-with: Cursor --------- Co-authored-by: rafavalls <valls@deco.cx> Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
tlgimenes
pushed a commit
that referenced
this pull request
Apr 14, 2026
* feat(chat): add voice input with real-time transcription and waveform Made-with: Cursor * fix(chat): add Web Speech API global types and fix noUncheckedIndexedAccess Made-with: Cursor * fix(chat): rework voice input to type directly into textarea Transcript now appears live in the normal text area instead of a separate overlay. The bottom bar switches to waveform + accept/decline during recording. Waveform uses chart-2 color and reads low-mid frequency bins where speech energy lives. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * fix(chat): prevent last words being lost and fix space before voice text Use the final text returned by stopRecording() to guarantee interim words captured in the ref are committed. Add a space before voice text when baseline content is non-empty to avoid word concatenation. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * fix(chat): remove unused VoiceInputOverlay export Made-with: Cursor --------- Co-authored-by: rafavalls <valls@deco.cx> Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
SpeechRecognition)AnalyserNode) animates while listeninggetUserMediais called upfront to trigger the browser prompt; if denied, the mic button turns red with a descriptive tooltip and clicking it re-promptsTest plan
Made with Cursor
Summary by cubic
Add voice input to chat with real-time transcription that types directly into the editor and shows a live waveform. During recording the editor locks; cancel restores previous text, confirm keeps the transcription.
New Features
SpeechRecognitionis available; hidden on unsupported browsers.getUserMedia; denied state turns the mic red with a tooltip and allows retry.use-voice-inputhook andVoiceWaveform;TiptapInputaddsappendText(),syncVoiceText(), andrestoreContent().Bug Fixes
globals.d.tsforSpeechRecognitionand related interfaces to fix TypeScript builds andnoUncheckedIndexedAccessissues.VoiceInputOverlayexport.Written for commit ec23fa4. Summary will update on new commits.