Restore std::path::Path, std::sync::Arc, parking_lot::Mutex, anyhow::Result,
std::time::{Duration, Instant} imports in cache.rs, PhysicalPosition/PhysicalSize
in lib.rs, and std::time::Duration in selection.rs. These were removed by
cargo fix --broken-code because they appear unused on Linux but are needed
on macOS and Windows.
Add unused_imports to cfg_attr allow lists so future cargo fix runs on
Linux won't strip cross-platform imports again.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Restore handle_pressed/handle_released imports and window/show_capsule/
visible/audio_timeout/duration_ms variable names that cargo fix renamed
with _ prefix. These are used on macOS/Windows but the _ prefix broke
the builds. Add platform-gated import for model_dir in test_run.rs.
Expand cfg_attr allow lists to cover unused_imports and unused_variables
where needed.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Add #[cfg_attr(target_os = "linux", allow(dead_code, unused_variables))]
to 20+ source files where Linux builds see platform-specific dead code
(Windows IME, macOS permissions, Sherpa ASR, clipboard restore, etc.).
Also manually fix 3 real warnings: unused imports in coordinator.rs,
unreachable expression in insertion.rs.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Whisper fabricates plausible-but-unspoken text on silence/noise (the
classic hallucination defect): leading/trailing silence or mic hiss turns
into unrelated words. When the provider returns verbose_json, each segment
carries no_speech_prob / avg_logprob / compression_ratio — use them to
drop segments that clearly aren't speech (conservative thresholds so real
speech is never trimmed). No segments in the response → fall back to text.
Provider-gated to avoid breaking non-Whisper backends:
- whisper (OpenAI) / groq: native Whisper, verbose_json fully supported
with the metrics above — filter is effective. Verified against both
providers' current docs.
- siliconflow: SenseVoice / TeleSpeech, response_format is undocumented;
sending verbose_json risks a 4xx, so it stays on the existing json path.
- zhipu (GLM-ASR): accepts verbose_json but does not emit those metrics
(filter would be a no-op), so it also stays on json to minimize behavior
change. Only whisper/groq opt in.
whisper_supports_verbose_json(provider_id) decides the flag; WhisperBatchASR
gains a verbose_json bool. Missing metric fields are treated as "keep" so
the filter is harmless for any provider that returns segments without them.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
On Linux, hide the clipboard/paste/capsule settings group and move
the streaming insert toggle directly into the recording input card.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- coordinator.rs: terminal state (Done/Error/Cancelled) auto-clears after 3s;
fix RETRY_GEN comparison (fetch_add returns old value, use latest_gen > gen+1);
remove broken 300ms retry
- HotkeySettingsContext.tsx: fix queueSetSettings never calling setSettings()
(latestPrefsRef was already updated to the new object before microtask ran)
- openless.cpp: add PostInputMethod event hook to restore auxDown after
fcitx5 processes key events
- RecordingInputSection.tsx: hide clipboard/paste/capsule settings on Linux;
streaming insert shown as standalone card instead of inside clipboard group
- ShortcutsSection.tsx: hide "capsule confirm" shortcut hint on Linux
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
exit 0 on rpmrebuild failure produced a broken RPM silently.
Use exit 1 and print to stderr so the CI pipeline catches it.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- AppImage cannot work for fcitx5 plugin injection: fcitx5 runs on the
host system and loads addons from host paths (/usr/lib/.../fcitx5).
Files placed inside the AppImage mount are invisible to fcitx5.
- For Debian, use dpkg-architecture to detect the multiarch triplet
(x86_64-linux-gnu, aarch64-linux-gnu, etc.) instead of hardcoding.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Debian uses /usr/lib/x86_64-linux-gnu/fcitx5, RPM uses /usr/lib64/fcitx5,
and some distros use /usr/lib/fcitx5. Check all three to avoid false
alarms on non-Debian systems.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- RPM: use /usr/lib64/fcitx5/ (RPM 64-bit standard) instead of
Debian multiarch path
- AppImage: only support AppDir directory input, remove .AppImage file
extraction which couldn't repack and would lose changes
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- Remove `resources` from tauri.linux.conf.json — the .so/.conf files
don't exist on CI (plugin is built separately), causing cargo check
to fail with "resource path doesn't exist"
- Simplify ensure_plugin_installed to just check system paths exist,
no bundled comparison needed
- Remove prebuild script and copy-plugin.mjs (no longer needed)
- Remove plugin entries from .gitignore
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>