From 8a085b5395efabad6144221da0e0bf751f0d8f52 Mon Sep 17 00:00:00 2001 From: Jatin K Malik Date: Mon, 13 Jul 2026 23:44:07 -0700 Subject: [PATCH] chore(release): prepare v0.14.0-beta * chore(release): prepare v0.14.0-beta - Bump version 0.13.0-beta -> 0.14.0-beta (src/vocalinux/version.py) - README: refresh What's New for v0.14.0-beta and bump comparison table - docs/UPDATE.md: add v0.14.0-beta section and bump checkout example - SECURITY.md: mark 0.14.x supported, 0.13.x unsupported - docs/RELEASE_PROCESS.md: add v0.14.0-beta to version history - web: bump package.json / package-lock.json / page.tsx schema + badge - web changelog: add v0.14.0-beta entry * ci(codecov): allow 0.5% project coverage threshold Prevents version-bump/docs-only PRs from being blocked by minor coverage fluctuations (e.g. -0.04% on a release-prep branch). * docs(release): correct chronological order in version history table * docs(release): add #509 shortcut UI exclusivity fix to v0.14.0-beta notes --- README.md | 38 ++++++++++++++++------------------ SECURITY.md | 3 ++- codecov.yml | 14 +++++++++++++ docs/RELEASE_PROCESS.md | 1 + docs/UPDATE.md | 37 ++++++++++++++++++++++++++++++++- src/vocalinux/version.py | 4 ++-- web/package-lock.json | 4 ++-- web/package.json | 2 +- web/src/app/changelog/page.tsx | 17 +++++++++++++++ web/src/app/page.tsx | 4 ++-- 10 files changed, 95 insertions(+), 29 deletions(-) create mode 100644 codecov.yml diff --git a/README.md b/README.md index 22b2f67..3f23ad1 100644 --- a/README.md +++ b/README.md @@ -32,40 +32,38 @@ It's a free, GPLv3-licensed desktop app that lets you dictate text into *any* ap No internet required. No data leaves your machine. Just speak and type. -## 📚 What's New in v0.13.0-beta +## 📚 What's New in v0.14.0-beta -> 🎉 **Release: Guided whisper.cpp model selection, plus Wayland text-injection reliability, hotplug keyboard support, dictation spacing fixes, and refreshed website docs.** +> 🎉 **Release: Configurable keyboard shortcuts, FunASR/SenseVoice remote-API support, and another round of Wayland reliability fixes.** ### 🚀 Highlights | Feature | Description | |---------|-------------| -| **🎙️ Guided Whisper Models** | Pick a whisper.cpp **size** and **specialization** (English-only, quantized, Turbo) through split dropdowns with in-app guidance | -| **🔌 Hotplug Keyboard Support** | Shortcuts keep working on keyboards connected after startup, with automatic recovery from disconnects | -| **✍️ Dictation Spacing** | Spacing is preserved between speech segments separated by a pause in the same session | -| **🖥️ Wayland Reliability** | Fixes silent text drops on wlroots/COSMIC compositors and garbled output on non-US keyboard layouts | +| **⌨️ Configurable Shortcuts** | Bind any modifier combination to a key — e.g. `Alt+R`, `Ctrl+Shift+V`, or `Super+F10` | +| **🌐 FunASR / SenseVoice Remote API** | Remote-API engine now supports FunASR and SenseVoice models via OpenAI-compatible endpoints | +| **🖥️ GNOME Wayland IBus Reliability** | Text injection works again on GNOME Wayland with bare `xkb` layouts and engine restore fallbacks are fixed | +| **🎙️ Audio Crash Fix** | Recording no longer crashes when the system audio device index changes between sessions | +| **⚡ Hybrid-CPU Efficiency** | whisper.cpp no longer defaults to all cores on hybrid Intel/AMD processors | ### ✨ New Features -- **Guided whisper.cpp model variants** — The Settings dialog now splits whisper.cpp selection into **Model Size** and **Specialization**, exposing English-only, quantized (Q5/Q8), Large v3 Turbo, and legacy large models with language-aware recommendations and hover guidance. Exact model IDs (e.g. `medium.en-q5_0`, `large-v3-turbo`) can also be passed to `--model` (#465) -- **Remote API FunASR/SenseVoice support** — OpenAI-compatible remote servers can send a model name (e.g. `sensevoice`) and return richer response shapes; SenseVoice metadata labels are stripped before text injection (#468, #469) +- **Configurable modifier+key hotkeys** — The Settings dialog now lets you set custom shortcuts using any combination of Ctrl, Alt, Shift, and Super plus a letter/number key. The legacy defaults still work, and you can now bind combinations like `Alt+R` or `Ctrl+Shift+V` (#493) +- **Remote API FunASR/SenseVoice support** — OpenAI-compatible remote endpoints can specify FunASR/SenseVoice model names (e.g. `sensevoice`) and return richer response shapes; SenseVoice metadata labels are stripped before text injection (#468) ### 🐛 Bug Fixes -- **Dictation**: Preserve spacing between speech segments separated by a pause, so words no longer run together after a silence within the same session (#464) -- **Shortcuts**: The evdev keyboard backend rescans for hotplugged keyboards, so shortcuts work on devices connected after startup and disconnected devices can be replugged (#467) -- **KDE Plasma Wayland**: Detect KDE Plasma Wayland sessions and guide you to enable IBus Wayland (System Settings → Keyboard → Virtual Keyboard) when `wtype` injection fails, with matching hints during install and in logs (#466) -- **Wayland**: Fix garbled output on non-US keyboard layouts (AZERTY/QWERTZ/Dvorak) and a clipboard-copy hang; ydotool now pastes through the clipboard for layout-independent injection (#480) -- **Wayland/IBus**: Use wtype/ydotool instead of IBus on compositors that don't bridge IBus to native apps (COSMIC, Sway, Hyprland, and similar), fixing silent text drops (#486) -- **Wayland/IBus**: Require a real IM engine before using IBus on Wayland, so a bare `xkb` layout no longer causes silent text drops on GNOME/Mutter and other compositors (#478) -- **Wayland**: Preserve the keyboard layout on Wayland by not running `setxkbmap`, which was flipping XWayland/Electron apps to `us` after dictation (#474) -- **UI**: Cap the settings dialog height on high-resolution displays (#465) +- **GNOME Wayland/IBus**: Restore text injection when only a bare `xkb` engine is configured; the engine restore fallback now picks the correct IM engine instead of silently dropping text (#506, #500) +- **KDE Wayland/IBus**: Restore the KDE Plasma Wayland IBus text-injection path that was regressed in recent compositor-detection changes (#502) +- **Wayland injection**: Wait for held modifiers (Ctrl/Alt/Shift/Super) to release before injecting text, preventing accidental shortcut triggers and garbled output on modifier-heavy workflows (#494) +- **Shortcuts UI**: Keep preset and custom shortcut selection exclusive — selecting a preset now clears the custom field, and setting a custom combo selects the "Custom Shortcut" preset (#509) +- **whisper.cpp**: Stop defaulting to all CPU cores on hybrid processors (Intel Performance + Efficient cores), which caused UI lag and excess battery drain (#492) +- **Audio**: Fix a crash on recording start when the selected audio device index no longer matches the current system enumeration (#499) +- **Installer**: Include `xsel` as a fallback for the Wayland clipboard path when `xclip` is unavailable (#496) ### 🔧 Improvements -- **Performance** — Faster ydotool text injection via an explicit `--key-delay` (#488) -- **Website** — New documentation pages for Remote API, Silero VAD, advanced whisper.cpp settings, and desktop reliability, plus responsive layout polish (#470) -- **CI** — Automatic pull-request labeling by changed files (#473) +- **Code style** — Removed an outdated long comment about whisper.cpp default thread counts (#505) --- @@ -387,7 +385,7 @@ Vocalinux is part of a family of privacy-first, offline voice dictation tools. S | Platform | Project | Website | GitHub | Status | |----------|---------|---------|--------|--------| -| 🐧 Linux | **VocaLinux** | [vocalinux.com](https://vocalinux.com) | [jatinkrmalik/vocalinux](https://github.com/jatinkrmalik/vocalinux) | ✅ Beta v0.13.0 | +| 🐧 Linux | **VocaLinux** | [vocalinux.com](https://vocalinux.com) | [jatinkrmalik/vocalinux](https://github.com/jatinkrmalik/vocalinux) | ✅ Beta v0.14.0 | | 🍎 macOS | **VocaMac** | [vocamac.com](https://vocamac.com) | [jatinkrmalik/vocamac](https://github.com/jatinkrmalik/vocamac) | 🚀 Beta | | 🪟 Windows | **VocaWin** | [vocawin.com](https://vocawin.com) | [jatinkrmalik/vocawin](https://github.com/jatinkrmalik/vocawin) | 📋 Planned | diff --git a/SECURITY.md b/SECURITY.md index 7ffb32e..f9f4314 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -4,7 +4,8 @@ | Version | Supported | | ------- | ------------------ | -| 0.13.x | :white_check_mark: | +| 0.14.x | :white_check_mark: | +| 0.13.x | :x: | | 0.12.x | :x: | | 0.11.x | :x: | | 0.10.x | :x: | diff --git a/codecov.yml b/codecov.yml new file mode 100644 index 0000000..1d3992c --- /dev/null +++ b/codecov.yml @@ -0,0 +1,14 @@ +coverage: + status: + project: + default: + target: auto + threshold: 0.5% + patch: + default: + target: 80% + +comment: + layout: "diff, flags, files" + behavior: default + require_changes: false diff --git a/docs/RELEASE_PROCESS.md b/docs/RELEASE_PROCESS.md index 4486fb2..37a2977 100644 --- a/docs/RELEASE_PROCESS.md +++ b/docs/RELEASE_PROCESS.md @@ -344,6 +344,7 @@ git push origin v0.5.1-beta | 0.11.0-beta | 2026-05-30 | Beta | Advanced Settings tab, IBus/recognition hardening, installer fixes, distro compatibility | | 0.12.0-beta | 2026-06-07 | Beta | Remote API engine, Silero VAD, threading/IBus hardening, settings and installer fixes | | 0.13.0-beta | 2026-06-30 | Beta | Guided whisper.cpp model variants, Wayland text-injection reliability, hotplug keyboard support, dictation spacing fix, website docs refresh | +| 0.14.0-beta | 2026-07-13 | Beta | Configurable modifier+key hotkeys, FunASR/SenseVoice remote-API support, GNOME/KDE Wayland IBus reliability fixes, audio crash fix, hybrid-CPU efficiency fix | ## Questions? diff --git a/docs/UPDATE.md b/docs/UPDATE.md index c616b52..3cc3f99 100644 --- a/docs/UPDATE.md +++ b/docs/UPDATE.md @@ -2,6 +2,41 @@ This guide explains how to update Vocalinux to the latest version. +## What's New in v0.14.0-beta + +### 🚀 Highlights + +| Feature | Description | +|---------|-------------| +| **⌨️ Configurable Shortcuts** | Bind any modifier combination to a key — e.g. `Alt+R`, `Ctrl+Shift+V`, or `Super+F10` | +| **🌐 FunASR / SenseVoice Remote API** | Remote-API engine now supports FunASR and SenseVoice models via OpenAI-compatible endpoints | +| **🖥️ GNOME Wayland IBus Reliability** | Text injection works again on GNOME Wayland with bare `xkb` layouts and engine restore fallbacks are fixed | +| **🎙️ Audio Crash Fix** | Recording no longer crashes when the system audio device index changes between sessions | +| **⚡ Hybrid-CPU Efficiency** | whisper.cpp no longer defaults to all cores on hybrid Intel/AMD processors | + +### ✨ New Features + +- **Configurable modifier+key hotkeys** — The Settings dialog now lets you set custom shortcuts using any combination of Ctrl, Alt, Shift, and Super plus a letter/number key. The legacy defaults still work, and you can now bind combinations like `Alt+R` or `Ctrl+Shift+V` (#493) +- **Remote API FunASR/SenseVoice support** — OpenAI-compatible remote endpoints can specify FunASR/SenseVoice model names (e.g. `sensevoice`) and return richer response shapes; SenseVoice metadata labels are stripped before text injection (#468) + +### 🐛 Bug Fixes + +- **GNOME Wayland/IBus**: Restore text injection when only a bare `xkb` engine is configured; the engine restore fallback now picks the correct IM engine instead of silently dropping text (#506, #500) +- **KDE Wayland/IBus**: Restore the KDE Plasma Wayland IBus text-injection path that was regressed in recent compositor-detection changes (#502) +- **Wayland injection**: Wait for held modifiers (Ctrl/Alt/Shift/Super) to release before injecting text, preventing accidental shortcut triggers and garbled output on modifier-heavy workflows (#494) +- **Shortcuts UI**: Keep preset and custom shortcut selection exclusive — selecting a preset now clears the custom field, and setting a custom combo selects the "Custom Shortcut" preset (#509) +- **whisper.cpp**: Stop defaulting to all CPU cores on hybrid processors (Intel Performance + Efficient cores), which caused UI lag and excess battery drain (#492) +- **Audio**: Fix a crash on recording start when the selected audio device index no longer matches the current system enumeration (#499) +- **Installer**: Include `xsel` as a fallback for the Wayland clipboard path when `xclip` is unavailable (#496) + +### 🔧 Improvements + +- **Code style** — Removed an outdated long comment about whisper.cpp default thread counts (#505) + +See the [full changelog](https://github.com/jatinkrmalik/vocalinux/releases/tag/v0.14.0-beta). + +--- + ## What's New in v0.13.0-beta ### 🚀 Highlights @@ -238,7 +273,7 @@ The installer will: ```bash cd vocalinux git fetch origin -git checkout v0.13.0-beta +git checkout v0.14.0-beta ./install.sh ``` diff --git a/src/vocalinux/version.py b/src/vocalinux/version.py index b86881f..37966e8 100644 --- a/src/vocalinux/version.py +++ b/src/vocalinux/version.py @@ -2,8 +2,8 @@ Version information for Vocalinux. """ -__version__ = "0.13.0-beta" -__version_info__ = (0, 13, 0, "beta") +__version__ = "0.14.0-beta" +__version_info__ = (0, 14, 0, "beta") __author__ = "Jatin K Malik" __email__ = "jatinkrmalik@gmail.com" __license__ = "GPL-3.0" diff --git a/web/package-lock.json b/web/package-lock.json index 8be8c55..a80f30c 100644 --- a/web/package-lock.json +++ b/web/package-lock.json @@ -1,12 +1,12 @@ { "name": "vocalinux-website", - "version": "0.13.0", + "version": "0.14.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "vocalinux-website", - "version": "0.13.0", + "version": "0.14.0", "dependencies": { "@types/node": "^20.14.10", "@types/react": "^18.3.3", diff --git a/web/package.json b/web/package.json index 409c96f..5e42c49 100644 --- a/web/package.json +++ b/web/package.json @@ -1,6 +1,6 @@ { "name": "vocalinux-website", - "version": "0.13.0", + "version": "0.14.0", "private": true, "type": "module", "scripts": { diff --git a/web/src/app/changelog/page.tsx b/web/src/app/changelog/page.tsx index 34d1693..a37abc8 100644 --- a/web/src/app/changelog/page.tsx +++ b/web/src/app/changelog/page.tsx @@ -14,6 +14,23 @@ import { SeoSubpageShell } from "@/components/seo-subpage-shell"; import { absoluteUrl, buildPageMetadata } from "@/lib/seo"; const releases = [ + { + version: "v0.14.0-beta", + date: "2026-07-13", + type: "beta", + highlights: [ + "Configurable modifier+key hotkeys: set custom shortcuts with any combination of Ctrl, Alt, Shift, and Super plus a letter/number key, e.g. Alt+R or Ctrl+Shift+V (PR #493)", + "Remote API engine now supports FunASR/SenseVoice models via OpenAI-compatible endpoints; SenseVoice metadata labels are stripped before text injection (PR #468)", + "GNOME Wayland IBus text injection restored when only a bare xkb engine is configured; engine restore fallback now picks the correct IM engine (PR #506, #500)", + "KDE Plasma Wayland IBus text-injection path restored after recent compositor-detection regressions (PR #502)", + "Wayland text injection now waits for held modifiers to release before typing, preventing accidental shortcut triggers and garbled output (PR #494)", + "Shortcuts UI keeps preset and custom shortcut selection exclusive: selecting a preset clears the custom field, and setting a custom combo selects the Custom Shortcut preset (PR #509)", + "whisper.cpp no longer defaults to all CPU cores on hybrid processors, improving UI responsiveness and battery life (PR #492)", + "Fixed a crash on recording start when the selected audio device index no longer matches the current system enumeration (PR #499)", + "Installer includes xsel as a fallback for the Wayland clipboard path when xclip is unavailable (PR #496)", + "Removed an outdated long comment about whisper.cpp default thread counts (PR #505)", + ], + }, { version: "v0.13.0-beta", date: "2026-06-30", diff --git a/web/src/app/page.tsx b/web/src/app/page.tsx index 65d61cc..2740986 100644 --- a/web/src/app/page.tsx +++ b/web/src/app/page.tsx @@ -68,7 +68,7 @@ const homeJsonLd = [ }, description: "Offline voice dictation and speech-to-text for Linux with whisper.cpp and VOSK.", - softwareVersion: "0.13.0-beta", + softwareVersion: "0.14.0-beta", author: { "@type": "Person", name: "Jatin K Malik", @@ -340,7 +340,7 @@ export default function HomePage() { /> Vocalinux - v0.13.0 Beta + v0.14.0 Beta