Add live waveform and active status pill to dictation panel#474
Add live waveform and active status pill to dictation panel#474jrschumacher wants to merge 12 commits intoOpenWhispr:mainfrom
Conversation
… sync (#2) * Bundle Noto Sans fonts locally instead of Google Fonts CDN - Embeds Noto Sans woff2 variable-weight font files (weights 300–700, normal + italic, latin + latin-ext subsets) into src/assets/fonts/ - Replaces Google Fonts CDN links in index.html with local stylesheet reference - Eliminates outbound requests to fonts.googleapis.com and fonts.gstatic.com, improving privacy and enabling full offline functionality Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com> * Point auto-updater at CloudFree fork releases and update docs Replace the hook-based updater override with a simpler direct edit to owner/repo in updater.js. Document the updater change, electron-builder files addition, and sidebar account section removal in CLOUDFREE.md. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * Rename allowlist.json to cloudfree-allowlist.json Avoids collision with any future upstream allowlist file and makes the fork-owned config immediately identifiable. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * docs: update upstream sync conflict resolution instructions Add reference to CLOUDFREE.md when manually resolving merge conflicts. Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com> * ci: add release-please workflow for automated releases Combines release-please versioning with multi-platform build pipeline in a single workflow. Triggers on push to main, builds Linux/Windows/macOS when a release is created. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * ci: disable upstream build/release workflows Replaced by cloudfree-release.yml which combines release-please versioning with the multi-platform build pipeline. Upstream workflows kept in repo (trigger neutered) to avoid merge conflicts. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * ci: add lint and test workflow for PRs Runs eslint and vitest on pull requests and pushes to main. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * ci: scope lint and test to src/cloudfree/ only Use npm install instead of npm ci to avoid lockfile sync issues from upstream. Only lint and test CloudFree-owned code. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * ci: run eslint from src/ directory to use correct config Root eslint.config.js ignores src/** — run from src/ to pick up the src/eslint.config.js that covers React/TS files. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * ci: drop --ignore-scripts from npm install tinyexec (vitest dep) needs postinstall to work. Using plain npm install instead of npm ci to tolerate lockfile drift from upstream. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * ci: use npm install --legacy-peer-deps for CI Lockfile has peer dep conflicts from upstream that cause npm ci to fail. Using --legacy-peer-deps to tolerate them. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * ci: include dev and optional deps in npm install tinyexec (vitest dep) is marked devOptional and was being skipped. Explicitly include dev and optional deps to ensure vitest works. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * ci: use npm install --force to work around broken lockfile The upstream lockfile is out of sync (missing pg packages) which prevents normal install from resolving all transitive deps. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * ci: add fallback to reinstall vitest if tinyexec missing Adds a verification step that checks for tinyexec and reinstalls vitest if the transitive dep is missing after npm install --force. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * ci: explicitly install tinyexec for vitest Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> --------- Co-authored-by: Claude Haiku 4.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The env context doesn't have access to secrets at the step level, causing the signing step to be skipped entirely. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Secrets aren't accessible in step-level `if` conditions without being passed through env first. Setting it at the job level makes it available. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Build jobs were skipped when release-please was skipped because they inherited the skipped status through the needs chain. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- add a live waveform visualizer for active dictation - add an optional floating icon setting that expands recording/transcribing into a pill with text - resize the dictation panel for the active pill state and wire the setting through the app store - add safety checks for optional chaining on electronAPI calls Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
JiwaniZakir
left a comment
There was a problem hiding this comment.
In cloudfree-ci.yml, both npm install --force and the separate npm install tinyexec --force steps should raise concern: --force bypasses lockfile integrity checks, which defeats the purpose of reproducible CI builds. The standard practice is npm ci, which installs exactly what's in package-lock.json and will fail fast if there's a mismatch. The fact that tinyexec needs its own install step suggests it isn't committed as a proper devDependency, which means the lockfile doesn't pin its version — any future CI run could silently pull a different version of that package.
In cloudfree-release.yml, the prepare job uses if: always() && (needs.release-please.outputs.release_created == 'true' || ...). The always() guard means prepare (and consequently the build jobs) will proceed even if release-please fails, not just when it's skipped. A tighter condition like if: needs.release-please.result != 'failure' && (...) would prevent spurious builds from a broken release job while still allowing the workflow_dispatch path to work correctly.
Summary
Notes