github tover0314-w/opentypeless v0.1.23
OpenTypeless v0.1.23

latest releases: v1.1.50, v1.1.49, v1.1.48...
3 months ago

What's Changed

Bug Fixes

  • Pipeline race condition in hold mode — Added pipeline_lock mutex to serialize start()/stop(), preventing stop() from reading partially-initialized state when the user does a quick press-release.
  • STT errors no longer leave pipeline stuck in RecordingTranscriptEvent::Error now breaks out of the STT receive loop. This is the root cause of the macOS bug where the capsule would stay in "recording" state indefinitely after a transcription error.
  • Audio capture failure now handled gracefully — If AudioCaptureHandle::start() fails, the pipeline cleans up preloaded state, emits an error event, and returns to idle.
  • Abort during start() no longer orphans audio thread — After audio capture setup, the abort flag is checked; if set, the handle is dropped immediately rather than stored for a stop() that will never come.
  • Error messages no longer swallowed by idle transition — Stopped clearing pipelineError on idle state transition. Errors from failed start() calls that rapidly cycle Recording → Idle now remain visible for 2.5 seconds.
  • Error timer no longer overwrites active recording — The 2.5s auto-dismiss timer in CapsuleError now checks if a new recording started during the error window before resetting state.

Details

  • Added pipeline_lock: tokio::sync::Mutex<()> to PipelineHandle for start/stop serialization
  • start() holds the lock through entire setup (config load, STT connect, audio capture start)
  • stop() acquires the lock, reads all shared state, then drops the lock before the long STT wait
  • AudioCaptureHandle::start() errors now emit pipeline:error and clean up preloaded state
  • TranscriptEvent::Error variant now triggers break in the STT recv loop
  • Added abort flag check after audio capture to drop orphaned handles
  • useTauriEvents.ts: moved setPipelineError(null) from idle handler to recording handler
  • CapsuleError.tsx: timer callback checks pipelineState before calling resetRecording()

Full Changelog: v0.1.22...v0.1.23

Don't miss a new opentypeless release

NewReleases is sending notifications on new releases.