Conversation
Races a promise against a timeout, rejecting with a TimeoutError if it does not settle in time. Includes unit tests for resolve, reject, and timeout paths.
The manual update check replied via mainWindow.webContents, but the About view lives in the separate settings window, so it never received the result (spinner stuck). Reply via event.sender instead, detect availability with isUpdateAvailable, and emit a new updater:update-not-available channel. Wrap both the manual and on-launch checkForUpdates calls in a 10s timeout.
The per-card y-axis slide-up fought the panel-level slide-in, making the Shortcuts tab feel inconsistent with the other tabs. Drop the inner motion wrappers and rely on the shared panel transition.
- Website link points to https://knovy.app/ and opens via openExternal (system browser) instead of an in-app Electron window - Update check now toasts when up to date, and on error/timeout reveals a Download from GitHub fallback to releases/latest - Hold the Checking... state for a minimum duration so a near-instant result no longer flashes the button text and toast - Move Send Feedback from the sidebar into the About page Links card - Remove the conflicting inner entrance animation for consistency - Mount a Toaster in the settings window and add the related i18n keys
Feat(about): About page improvements — website, update UX, feedback, animation
…progress indicator
… progress after download
…uplicated flush() populated the cleared-ids set inside the React state updater (which runs async during render) but deleted from the buffer map synchronously right after setTranscriptions, when the set was still empty. Buffers were never cleared, so each rAF flush re-appended all prior tokens — the bubble showed growing repeated text until correction:done overwrote it with the final text. Snapshot + clear synchronously; the updater reads the immutable snapshot.
…f clipped in-window modal
The mute/unmute effect guarded on micAudioWorkletNodeRef.current, which was never assigned (only the system equivalent was), so the effect always early-returned. Mic stream was never torn down on mute (OS indicator stayed on) nor re-acquired on unmute, leaving no mic transcription after toggling back on. Assign the ref where the worklet node is created, mirroring the system path.
Feat: System-audio-only (mic mute) toggle
Feat: Raw transcription + streaming token-by-token correction
Resolves conflicts from merging the streaming-correction (#33) and system-audio-only-toggle (#32) features (now on stg) into the model download UX lifecycle work. Key integration decisions: - ollamaService: kept model-download's modelState/phase lifecycle and dropped the old JSON enhance() path (runInference/enhanceSingleSegment/ retryInference) in favour of stg's streaming enhanceStream()/ runStreamingCorrection(), ported from this.status/activeModel onto this.modelState.phase/model. - transcriptionEnhancementService: took stg's types-only version (the enhancement-service class was dead code removed by streaming). - index.ts transcription:data: merged the aiCorrection gate with the streaming branch — skip correction (broadcast raw) when aiCorrection is off OR modelState.phase !== 'ready', else stream tokens. Replaced the removed getStatus() check with getModelState().phase. - index.ts updater handler: took stg's update-not-available fallback (from about-page improvements). - MainControlBar/MainController: combined both feature's props (preparingProgress + micEnabled/onToggleMic). - ollamaEnhanceStream.test: updated readiness setup from the removed `status` field to modelState.phase. 46/46 unit tests pass; no new type errors vs stg.
Feat: Model download UX & recording gate
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.
Release v0.3.10
Promotes the current staging line to
mainand bumps the version to 0.3.10.Included since v0.3.9
gemma4:e2b.Release
Tag
v0.3.10will be pushed after merge to trigger the signed macOS build/release workflow.