diff --git a/CHANGELOG.md b/CHANGELOG.md index 65659752..03cf8954 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,7 @@ All notable changes to this project will be documented in this file. ## [Unreleased] +- **Dictation:** speech is now transcribed after you stop talking, instead of being re-guessed word by word while you speak. The offline models OpenChamber runs are built to read a whole utterance at once, so the running transcript was consistently worse than the final one. While recording, the composer shows a live waveform of your voice and a timer, then Transcribing while the text is produced. Long recordings are split at pauses in your speech rather than on a timer, so a three-minute dictation still returns a few seconds after you stop, and words are no longer cut in half at the split. - Chat: if OpenCode restarts while a response is still running, the chat now stops with an interrupted state and a notification to continue instead of hanging silently (thanks to @sum117). ## [1.19.0] - 2026-08-19 diff --git a/packages/ui/src/components/dictation/ComposerDictation.tsx b/packages/ui/src/components/dictation/ComposerDictation.tsx index c458e5d1..c66bc804 100644 --- a/packages/ui/src/components/dictation/ComposerDictation.tsx +++ b/packages/ui/src/components/dictation/ComposerDictation.tsx @@ -5,6 +5,10 @@ * area uses the same paddings/typography as the textarea and the action row * reuses the footer icon-button styling — so toggling dictation causes no * vertical shift. + * + * No text appears while recording. The server transcribes the audio once the + * user stops, so the overlay shows the recording state and then Transcribing. + * The only transcript rendered here is the salvage text of a failed dictation. */ import React from 'react'; @@ -15,6 +19,7 @@ import { useThemeSystem } from '@/contexts/useThemeSystem'; import { cn } from '@/lib/utils'; import { runtimeFetch } from '@/lib/runtime-fetch'; import { useDictation } from '@/hooks/useDictation'; +import { DictationWaveform } from '@/components/dictation/DictationWaveform'; import { isDictationCaptureSupported } from '@/lib/dictation/use-dictation-audio-source'; import { isVSCodeRuntime } from '@/lib/desktop'; import { useConfigStore } from '@/stores/useConfigStore'; @@ -50,25 +55,6 @@ const formatDuration = (seconds: number): string => { return `${mins}:${String(secs).padStart(2, '0')}`; }; -const VolumeMeter: React.FC<{ volume: number }> = ({ volume }) => { - const { currentTheme } = useThemeSystem(); - return ( -