Commit graph

667 commits

Author SHA1 Message Date
Evgeny Khudoba
a385371c32
refactor(nix): rely on cargo-tauri.hook standard phases (#1335)
Some checks failed
Main Branch Build / build (, windows-latest, x86_64-pc-windows-msvc) (push) Has been cancelled
Main Branch Build / build (--bundles appimage,deb,rpm, ubuntu-24.04-arm, aarch64-unknown-linux-gnu) (push) Has been cancelled
Main Branch Build / build (--bundles appimage,rpm, ubuntu-24.04, x86_64-unknown-linux-gnu) (push) Has been cancelled
Main Branch Build / build (--bundles deb, ubuntu-22.04, x86_64-unknown-linux-gnu) (push) Has been cancelled
Main Branch Build / build (--target aarch64-apple-darwin, macos-26, aarch64-apple-darwin) (push) Has been cancelled
Main Branch Build / build (--target aarch64-pc-windows-msvc, windows-11-arm, aarch64-pc-windows-msvc) (push) Has been cancelled
Main Branch Build / build (--target x86_64-apple-darwin, macos-latest, x86_64-apple-darwin) (push) Has been cancelled
nix build check / nix-build (push) Has been cancelled
Set buildAndTestSubdir + tauriBundleType so cargo-tauri.hook handles
build/install correctly, and drop the manual overrides:

- installPhase override (was needed because hook didn't know to pushd
  into src-tauri without buildAndTestSubdir; hook's install script now
  finds bundle/deb/.../data/usr/* on its own)
- preBuild with `bun run build` (hook runs beforeBuildCommand from
  tauri.conf.json itself; bun2nix.hook has node_modules ready before
  buildPhase)
- jq del(.build.beforeBuildCommand) in postPatch (no longer needed)

Net change: +3/-18. End-to-end verified on NixOS x86_64-linux:
GigaAM v3 ASR + Whisper large-v3-turbo on Vulkan both work.
2026-04-30 08:46:23 +08:00
CJ Pais
085cd530a3 release v0.8.3 2026-04-27 22:52:35 +08:00
Evgeny Khudoba
8346bc2db2
fix(nix): Fix for macOS build for nixpkgs (#1316)
* fix(macos): pass -parse-as-library to swiftc

Without this flag swiftc compiles a single-file input in script mode
and emits a synthetic `_main` into the object file. Packaged into
libapple_intelligence.a and linked alongside Rust's `_main`, Apple's
open-source ld64 (used by nixpkgs' Darwin stdenv) picks Swift's main,
leaving the app with a 5-instruction no-op that returns 0 immediately.

The binary looks complete — full Rust code, Metal, Swift runtime,
onnxruntime rpath — but launching it exits cleanly with code 0, no
output. Production CI masks the issue because Xcode's linker happens
to prefer Rust's `_main`.

`-parse-as-library` keeps swiftc in library mode so no `_main` is
emitted. The @_cdecl exports used by the Rust FFI are unaffected.

* fix(macos): respect SDKROOT/SWIFTC env vars for non-Xcode toolchains

xcrun is unavailable in non-Xcode setups (e.g. nixpkgs uses
apple-sdk_* plus a standalone swift compiler). Honor SDKROOT and
SWIFTC if set; fall back to xcrun otherwise so Apple-toolchain
behavior is unchanged.

Also invoke swiftc directly via the resolved path rather than via
`xcrun swiftc`.
2026-04-27 13:27:18 +08:00
Rob Sanheim
4b7bb4e5c4
docs(audio): clarify what the mic-init timing log actually measures (#1330) 2026-04-24 05:51:40 -04:00
Evgeny Khudoba
af6ec6c903
chore(nix): add bun node_modules normalization scripts (#1256) 2026-04-19 09:32:12 -04:00
Evgeny Khudoba
c1e11faa71
refactor(nix): replace manual bindgen env with rustPlatform.bindgenHook (#1255) 2026-04-15 19:06:59 -04:00
Christoph Noetel
a4d671a601
fix: improve German translation quality (#1292) 2026-04-14 18:58:16 -04:00
Jaden Yuros
aee682f63d
feat: add AWS Bedrock (Mantle) as post-processing provider (#1288) 2026-04-13 18:47:59 -04:00
Evgeny Khudoba
564fbc84df
docs: unify CLAUDE.md and AGENTS.md into single source of truth (#1272)
Merge content from both files into AGENTS.md, making it the single
source of truth for all AI coding assistants. CLAUDE.md now references
AGENTS.md via `Read @AGENTS.md` directive.

Kept existing architecture/technical descriptions as-is to avoid
a separate review cycle.

Added sections: linting/formatting commands, i18n, code style, commit
guidelines, CLI parameters, debug mode, platform notes, troubleshooting
reference, and explicit links to CONTRIBUTING.md,
CONTRIBUTING_TRANSLATIONS.md, and PR template.
2026-04-11 20:08:10 +08:00
Evgeny Khudoba
11311bee0e
fix(overlay): parse HANDY_NO_GTK_LAYER_SHELL as boolean (#1269)
The previous check used `env::var(...).is_ok()`, which only tested for
the variable's presence and ignored its value. Setting the variable to
`0` or `false` counter-intuitively still disabled gtk-layer-shell.

Introduce `env_flag_enabled` helper that treats `0`, `false`, `no`,
`off`, and the empty string as falsy (case-insensitive).
2026-04-11 15:22:12 +08:00
CJ Pais
966ff99756
query gpu async (#1246)
* async advanced gpu query

* forrmat
2026-04-11 09:37:39 +08:00
Evgeny Khudoba
0392b7b6ae
docs(readme): add Linux startup troubleshooting section (#1266)
Add a "Linux Startup Crashes or Instability" subsection to the
Troubleshooting section, with step-by-step instructions:
1. Install/reinstall gtk-layer-shell
2. Disable gtk-layer-shell via HANDY_NO_GTK_LAYER_SHELL env var
3. Disable WebKit DMA-BUF renderer
4. How to make workarounds permanent (.desktop file, shell profile)

Also add a cross-reference from the Linux Notes section.
2026-04-11 09:25:35 +08:00
vpsone
f26fe0dce1
Fix (linux) overlay problem in kde (#1121)
* Fix overlay problem in kde

* Add env variable check for GTK layer shell initialization
2026-04-11 09:25:24 +08:00
ChaseC
fdc8cb712d
correct typo in library name, from 'transcription-rs' to 'transcribe-rs' (#1260) 2026-04-09 15:51:49 +08:00
odi
30b57c4295
fix(issue 522): surface paste errors as UI toast notification (#1198)
* fix: surface paste errors as UI toast notification (#522)

When pasting the transcription fails (e.g. wtype/xdotool/dotool not
available or returns an error on Linux), the error was silently logged
to the backend console only.  Users had no idea why their text was not
pasted.

Emit a new 'paste-error' Tauri event from the Rust side and listen for
it in the frontend App component, showing a sonner toast with the error
detail — mirroring the existing 'recording-error' pattern exactly.

Files changed:
- src-tauri/src/actions.rs: add PasteErrorEvent struct, emit event on paste failure
- src/App.tsx: add useEffect listener that shows toast.error on paste-error
- src/lib/types/events.ts: add PasteErrorEvent interface
- src/i18n/locales/en/translation.json: add pasteFailedTitle/pasteFailed keys

* chore: apply cargo fmt and prettier formatting

* add translationss

---------

Co-authored-by: CJ Pais <cj@cjpais.com>
2026-04-07 17:36:48 +08:00
LuoXi
84d88f911c
perf: add reasoning_effort passthrough to avoid thinking-mode latency in local models (#1221)
* perf: add reasoning_effort passthrough to avoid thinking-mode latency

Reasoning models (Gemma 4, Qwen 3, etc.) default to thinking mode,
adding 10-40x latency for simple transcript cleanup. Pass through the
OpenAI-compatible reasoning_effort parameter so users can disable
thinking when speed matters more than deep reasoning.

- Add optional reasoning_effort field to ChatCompletionRequest
- Thread through send_chat_completion / send_chat_completion_with_schema
- New set_post_process_reasoning_effort Tauri command for persistence
- Dropdown in post-processing settings, Custom provider only
- i18n for en and ja

* refactor: simplify reasoning_effort to on/off toggle

Addresses review feedback on the reasoning_effort passthrough:
post-processing rarely benefits from reasoning, so a 5-way dropdown
(default/none/low/medium/high) is overkill. Collapse to a single
boolean toggle "Disable reasoning" that defaults to ON for Custom
providers (sends reasoning_effort: "none"). Cloud providers continue
to receive no reasoning_effort parameter.

- Replace post_process_reasoning_effort: Option<String> with
  post_process_disable_reasoning: bool (default true) in settings
- Map bool to Option<String> at the request site (true -> "none",
  false -> omit) so the API contract is unchanged
- Rename Tauri command to set_post_process_disable_reasoning(disable)
  so parameter naming matches the setting and avoids inversion bugs
- Swap the Dropdown for a ToggleSwitch in the Custom provider section
- Collapse five i18n strings to one label + description, and add the
  translation to all 18 additional locales so non-en/ja users don't
  fall back to English for this control

* refactor: remove disable-reasoning toggle, always disable for custom provider

Per PR #1221 discussion with @cjpais: since this is an alpha feature,
simplify the UI by always sending reasoning_effort: "none" for custom
provider post-processing. If this causes issues with specific provider
setups, we can revisit.

* disable for openrouter too

---------

Co-authored-by: CJ Pais <cj@cjpais.com>
2026-04-07 15:19:40 +08:00
Yuxiang Qiu
c1697b2a95
nix: use symlinkJoin for ALSA_PLUGIN_DIR (#1226) 2026-04-05 18:15:59 +08:00
CJ Pais
39e855deb8 release v0.8.2 2026-04-02 08:21:41 +08:00
CJ Pais
b123c1e5c0
fix crash on old cpus (#1176)
* fix crash on old cpu

* fix

* disable whisper extensions
2026-04-02 08:20:28 +08:00
albanobattistella
743d8a54a7
Update Italian translation (#1202) 2026-04-02 06:46:40 +08:00
CJ Pais
4609db7fdb
add cohere (#1200)
* add cohere

* format

* add appropriate translations

* add chinese properly

* 0.3.8 sentencepiece fix

* update
2026-04-01 20:36:34 +08:00
Evgeny Khudoba
892658ee89
fix(nix): remove onnxruntime overlay, use nixpkgs native package (#1149) 2026-03-31 07:39:10 +08:00
Fero
552ebe5378
preserve legacy portable marker during updates (#1167) 2026-03-31 06:53:57 +08:00
CJ Pais
d1d3393230
upgrade transcribe rs to 0.3.5 (#1188) 2026-03-29 16:59:49 +08:00
Jackson
7ed8a558f2
Load the VAD when model loads in parallel (#1177)
Co-authored-by: CJ Pais <cj@cjpais.com>
2026-03-29 13:15:45 +08:00
CJ Pais
5bf7646609 Update bindings.ts 2026-03-29 13:07:32 +08:00
CJ Pais
be2c584a8d Update bindings.ts 2026-03-29 13:07:22 +08:00
tomerar
320dfb2d0a
fix(tray): set tray tooltip text on Windows (#1185)
Fixes #1184.

The tray icon was created and refreshed without setting a tooltip, which caused Windows to show an empty hover tooltip.

This change sets the tooltip when building the tray icon and refreshes it during tray menu updates using the existing version label.
2026-03-29 13:04:16 +08:00
Emma Watson
b76febdbbf
docs: add release signature verification steps (#1178) 2026-03-28 19:06:14 +08:00
Shaan Khosla
4239cd3584
fix: don't log cloud provider keys (#1145)
* fix: don't log cloud provider keys

* test: make sure keys are redacted

* change to newtype

* change secret struct to public

* test: test secretmap directly

* Update bindings.ts

---------

Co-authored-by: Shaan <shaankhosla@macbook-pro.mynetworksettings.com>
Co-authored-by: CJ Pais <cj@cjpais.com>
2026-03-28 19:05:36 +08:00
Alexander Yastrebov
075fb5f78d
[bugfix] remove long repeating words (#976)
* audio_toolkit: remove long repeating words

I've noticed a couple of times that Paraket v3 may produce
repeats of words that are not folded by Handy so I propose
to lift up word length limitation.

* Update text.rs

---------

Co-authored-by: CJ Pais <cj@cjpais.com>
2026-03-28 18:40:47 +08:00
Collin Stevens
b710ff27c9
docs: add feature freeze notice to CONTRIBUTING.md and fix typo in PR template (#1175)
Add a visible feature freeze section near the top of CONTRIBUTING.md
so contributors see it before starting work. Fix "GATEHRED" typo in
the PR template.
2026-03-28 12:30:54 +08:00
Guan-Rong Wu
2cb0e78bde
Change zh-Hant OpenCC conversion from S2twp to S2tw (#1171) 2026-03-28 10:50:40 +08:00
tomerar
18ce41a4ef
Add Hebrew language support (#1155) 2026-03-27 06:54:16 +08:00
CJ Pais
233db14d72 release v0.8.1 2026-03-26 09:16:55 +08:00
CJ Pais
32687d19e1
rearrange some ui (#1123)
* rearrange some ui

* full disable

* move cancel shortcut

* fix bg translation
2026-03-26 09:16:22 +08:00
CJ Pais
2b7231e6a9 Update Cargo.lock 2026-03-26 09:03:57 +08:00
CJ Pais
a6eec9e628
enumerate and list gpus in the whisper dropdown, improve auto gpu (#1142)
* enumerate and list gpus in the whisper dropdown, improve auto gpu
support

* add translations

* move to release transcribe-rs
2026-03-26 09:00:59 +08:00
Shehab Tarek
214e22dc3d
fix: require magic string in portable marker to prevent false portable mode on scoop installs (#1126)
* fix: require magic string in portable marker to prevent false portable mode

Scoop's extras bucket extracts the NSIS installer via #/dl.7z, which can
leave a stale empty portable file next to the exe. This caused
portable::init() to falsely trigger portable mode on non-portable scoop
installs, storing data in Data/ next to the exe (wiped on each update).

Changes:
- portable.rs: only enable portable mode when marker contains
  "Handy Portable Mode"; extracted is_valid_portable_marker() with tests
- installer.nsi: write magic string when creating marker file
- installer.nsi: validate magic string in update auto-detect block
- installer.nsi: allow desktop shortcut creation from finish page
  checkbox in portable mode (was silently doing nothing)
- commands/mod.rs + lib.rs: expose is_portable() as a Tauri command
- UpdateChecker.tsx: show manual-update popup for portable installs
  instead of attempting auto-install (which would download MSI)
- en/translation.json: add i18n strings for portable update popup

Fixes #1124

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* fix: add missing translation keys to all locales and fix prettier formatting

Add portableUpdateTitle, portableUpdateMessage, portableUpdateButton to
all 17 non-English locales (English fallback text) so check:translations
passes. Also run prettier on the PR's modified files to fix format:check.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* fix: migrate legacy empty portable markers from v0.8.0

v0.8.0 created an empty `portable` marker file. Users who manually
update (drop new exe in place) would silently lose portable mode since
the new magic-string check rejects empty files.

Migration: if the marker exists but has invalid/empty content AND a
`Data/` directory is present, treat it as a real portable install and
rewrite the marker with the magic string. This handles the v0.8.0 →
new upgrade path without regressing the scoop false-positive fix
(scoop does not create a Data/ directory).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

---------

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-26 08:52:33 +08:00
CJ Pais
c6576aca44 fix paste delay not being saved 2026-03-26 08:33:58 +08:00
Ron
714ce0c270
Add Bulgarian language (#1136)
Co-authored-by: Ron <ron@xron.net>
2026-03-24 20:44:15 +08:00
CJ Pais
ad75807a69 format 2026-03-23 08:44:53 +08:00
CJ Pais
557d274db6 release v0.8.0 2026-03-23 08:43:26 +08:00
CJ Pais
2d8c94d258 Update .gitignore 2026-03-23 08:43:01 +08:00
CJ Pais
495311ca0b Update translation.json 2026-03-23 08:41:41 +08:00
Alexander Yastrebov
cca4c49455
Fix model speed/accuracy indicator alignment (#1116)
* increase indicator width to fit German translation
* use text-end for proper alignment of Arabic translation
* use ms-4 instead of ml-4 to fix score bar alignment for Arabic
* use ms-auto to fix download button alignment for Arabic

Fixes #1109
2026-03-23 08:35:39 +08:00
Marcelo Terreiro Prado
f6e71862ff
fix: show friendly error when no audio input device is available (#1115) 2026-03-23 07:53:55 +08:00
MOHAMMAD ALBARHAM
05f6bdfb50
Adding Swedish language translation (#1113) 2026-03-22 19:11:04 +08:00
Fero
17277cf6ce
Save recordings before transcription (#1024)
* save recordings before transcription

* impart cj preferences

* cleanup

* re-transcribe anything

* format

* fix tests

* format

* ui cleanup

* format

* cleanup

* bunch of fixes, mainly for vm

* put comments back

* update transcription failure text

* alert -> toast

* spawn_blocking

---------

Co-authored-by: CJ Pais <cj@cjpais.com>
2026-03-22 15:43:02 +08:00
Ivan Schneider
4a4f5ebc9a
docs: remove outdated CHANGELOG.md (#1110) 2026-03-22 08:15:47 +08:00