Commit Graph
1052 Commits
Author SHA1 Message Date
Chris233 63d3e16757 Merge pull request #577 from aeoform/chore/suppress-linux-build-warnings
chore: suppress all Linux build warnings (192 → 0)
2026-06-03 21:53:23 +08:00
aeoformandClaude Opus 4.7 8d386815f2 fix(ci): restore macOS/Windows imports removed by cargo fix
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>
2026-06-02 23:29:41 +08:00
aeoformandClaude Opus 4.7 b4d0f1e36e fix(ci): restore variables broken by cargo fix --broken-code
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>
2026-06-02 23:19:07 +08:00
aeoformandClaude Opus 4.7 72b53520f2 chore: suppress all Linux build warnings (192 → 0)
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>
2026-06-02 23:01:31 +08:00
吕柏青 08ad6b7979 docs(readme): 突出风格市场 + 流式输出,状态更新到 v1.3.6 2026-06-01 18:00:22 +08:00
Chris233 ad629367d7 Merge pull request #572 from katanumahotori/fix/whisper-hallucination-verbose-json
fix(asr): 用 verbose_json 元数据丢弃 Whisper 幻听段落(仅 OpenAI/Groq)
2026-06-01 16:52:41 +08:00
吕柏青 d1a5b75c2b chore(release): bump version to 1.3.6-1 (Beta) — MediaPlayPause 线控录音 + Toggle 冷却(#545) + 多屏胶囊跟随(#569) + 本地模型管理(#559) + Linux 磨砂回退(#553) 2026-06-01 15:08:50 +08:00
片沼ほとりandClaude Opus 4.8 48713ed6d5 fix(asr): drop Whisper hallucination segments via verbose_json (OpenAI/Groq only)
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>
2026-06-01 14:21:54 +09:00
Chris233 137c175ccb Merge pull request #569 from katanumahotori/fix/capsule-follow-input-monitor
fix(windows): 多显示器下胶囊跟随正在输入的屏幕
2026-06-01 12:42:26 +08:00
Chris233 c87bab4dc3 Merge pull request #571 from H-Chris233/fix/545-toggle-cooldown
fix: add 600ms activation cooldown after end_session for Toggle mode (#545)
2026-06-01 12:27:46 +08:00
H-Chris233 1788da4667 fix: add 600ms activation cooldown after end_session for Toggle mode (#545)
在 coordinator 层增加 timer-based busy gate:end_session / cancel_session
将 phase 设为 Idle 时记录冷却时间戳;handle_pressed 的 (Toggle, Idle)
分支在 begin_session 前检查该冷却,未过期则忽略本次按键。

冷却时长 600ms(覆盖胶囊 EXIT_ANIM_MS 360ms + 余量),既拦截
三连按的第 3 次误触,也不影响用户主动重新激活。

- coordinator.rs: 新增 POST_SESSION_COOLDOWN_MS 常量 + Inner 字段
- dictation.rs: handle_pressed 增加冷却检查
- dictation.rs: end_session / cancel_session 成功收尾时设置冷却
2026-06-01 12:08:55 +08:00
Chris233 9b05ed0c71 Merge pull request #570 from H-Chris233/fix/linux-frosted-glass-553
fix(linux): fallback from backdrop-filter when WEBKIT_DISABLE_COMPOSITING_MODE=1
2026-06-01 10:36:46 +08:00
H-Chris233 c45b6c0179 fix(linux): fallback from backdrop-filter when WEBKIT_DISABLE_COMPOSITING_MODE=1
Issue #553: Linux 上 WEBKIT_DISABLE_COMPOSITING_MODE=1 时 WebKitGTK backdrop-filter
在 DOM 重排后失效(hover 历史词汇表 / 选择条目刷新面板)。

方案:
- Rust 端新增 is_no_compositing_mode command 暴露环境变量状态
- App.tsx 初始化时调用,写入 data-ol-no-compositing 到 <html>
- CSS 用 [data-ol-no-compositing] 选择器覆盖 inline style,切换到
  渐变+噪点纹理假磨砂方案(复用 tokens.css --ol-frost-grain)
- WindowChrome/FloatingShell 加 className 钩子

受影响的三处 backdrop-filter:WindowChrome 底板、主面板、
Linux 标题栏。ProviderPrompt/HotkeyModePrompt 弹窗遮罩
(瞬态 UI)跳过。提交签署:Reasonix Code
2026-06-01 09:35:07 +08:00
片沼ほとりandClaude Opus 4.8 2c47ef65b8 fix(windows): 多显示器下胶囊跟随「正在输入的屏幕」
问题:多显示器环境下,无论在哪块屏输入,录音胶囊总是固定出现在主屏
(或胶囊窗口自己所在那块屏)。在 A 屏取消后到 B 屏输入,胶囊仍停在 A 屏。

根因:`position_capsule_bottom_center` 用 `window.current_monitor()` 决定
位置,拿到的是胶囊窗口自身所在显示器,而非用户正在输入的显示器。并且
`maybe_position_capsule_bottom_center` 的去重缓存 key 也基于同一个
current_monitor,于是「输入焦点已切到另一块屏、但胶囊还在原屏」会被误判为
「没变化」→ 跳过重新定位,胶囊被钉死在原屏。

修复:
- 新增 `foreground_window_monitor()`(Win32 GetForegroundWindow →
  MonitorFromWindow → GetMonitorInfoW + GetDpiForMonitor),定位「正在输入的
  App」所在显示器;`position_capsule_bottom_center` 在 Windows 上优先按它
  (physical px + 该屏 DPI)摆放,取不到时回退 current_monitor。
- `capsule_layout_snapshot()` 让去重缓存 key 与实际定位用的显示器一致,
  消除「输入切屏但不重定位」的误判。
- Cargo.toml 增加 `Win32_UI_HiDpi` feature(GetDpiForMonitor 所需)。

仅 Windows 路径改动;macOS / Linux 行为不变(仍走 current_monitor)。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-01 09:56:54 +09:00
Chris233 4d2a35d2d3 Merge pull request #568 from H-Chris233/feat/media-play-pause-trigger
feat: 新增 MediaPlayPause HotkeyTrigger 支持有线耳机线控录音 (#477)
2026-06-01 08:39:32 +08:00
H-Chris233 dc846f60e6 feat: 新增 MediaPlayPause HotkeyTrigger 支持有线耳机线控录音
- 枚举新增 MediaPlayPause 变体,与 RightControl 等并列
- Windows WH_KEYBOARD_LL 钩子捕获 VK_MEDIA_PLAY_PAUSE (0xB3)
- macOS/Linux 标记为 unreachable (Windows-only)
- 前端类型、i18n 翻译支持
- 配置迁移保护:Linux fcitx 函数添加 MediaPlayPause 守卫

Closes #477
2026-05-31 23:14:48 +08:00
Chris233 854d0aacd1 Merge pull request #566 from H-Chris233/fix/issue-562-qa-active-asr
fix(qa): use active ASR provider in floating panel
2026-05-31 21:34:22 +08:00
Chris233 0b615a9a3e 更新 pr-agent.yml 2026-05-31 21:32:21 +08:00
H-Chris233 4e30c7461d fix(qa): use active ASR provider in floating panel 2026-05-31 21:04:37 +08:00
Chris233 bbc78d1461 Merge pull request #565 from H-Chris233/fix/issue-559-local-model-management
Fix local ASR model storage management
2026-05-31 20:12:32 +08:00
Chris233 2990e39994 更新 pr-agent.yml 2026-05-31 20:11:27 +08:00
H-Chris233 550f410b9a fix: guard Foundry model directory refresh 2026-05-31 19:59:13 +08:00
H-Chris233 110902f49d fix: add local model storage management 2026-05-31 19:32:49 +08:00
吕柏青 acac9f67d9 chore(release): bump version to 1.3.5-1 (Beta) — 录音开始合成提示音
本次只动版本号,功能改动已在 #560 落盘:
- 按下录音热键进入 recording 即播放 Web Audio 合成提示音,提醒「已开始录音」
- 新增 audioCueOnRecord 开关(默认开启),录音与输入设置可关闭 + 试听
2026-05-31 14:02:47 +08:00
TRIP 4bc94ecc5e Merge pull request #560 from Open-Less/feat/audio-cue-on-record
feat(capsule): 录音开始播放合成提示音 + 录音与输入设置开关
2026-05-31 14:01:35 +08:00
Chris233 f669370003 Merge pull request #556 from H-Chris233/fix/issue-548-macos-fullscreen-capsule
fix(macos): show capsule in fullscreen Spaces
2026-05-31 13:30:56 +08:00
H-Chris233 a5970f8c12 fix(macos): avoid gated AppKit collection type 2026-05-31 11:29:43 +08:00
Chris233 8a68be01d3 Merge pull request #558 from andya1lan/fix/release-notes-duplicate-prelude
fix(ci): Release Notes 里的注意事项只输出一次
2026-05-31 10:05:10 +08:00
吕柏青 2784e9764b fix(audioCue): resume 期间被叫停则作废本次播放(pr_agent 评审)
suspended 的 AudioContext 先 resume 再排期,若等待 resume 期间录音已结束
(stopAudioCue)或有新一轮播放,旧的 resume 回调不再排期,避免「录音已停、
提示音晚到」。引入 playGeneration 代号:stopAudioCue 自增并停节点;
scheduleCueVoices 只 stopVoices 不动代号;deferred 播放回调比对代号决定是否排期。
2026-05-31 09:44:25 +08:00
吕柏青 84a96a3975 feat(capsule): 录音开始播放合成提示音 + 录音与输入设置开关
按下录音热键进入 recording 状态时,capsule 窗口用 Web Audio API 即时合成
一段上升双音提示音,提醒「已开始录音」;离开 recording 即停。提示音独立于
showCapsule —— 胶囊隐藏时仍会响。

- 新增 audioCueOnRecord 偏好(默认开启),可在「录音与输入」设置里开关,
  并提供「试听」按钮即时听效果。
- 后端 UserPreferences / UserPreferencesWire 持久化该字段并默认 true,
  老配置缺字段按开启;补两条单测(缺字段默认开启 + 显式 false 往返保真)。
- 提示音合成抽成 lib/audioCue.ts:playRecordStartCue / stopAudioCue 两个
  操作 + 纯函数音符规划(recordStartCueTones / cueTotalDurationMs),附
  .test.ts。suspended 的 AudioContext 先 resume 再排期,无 Web Audio 时静默降级。
- i18n 五语(en / zh-CN / zh-TW / ja / ko)补齐 label / desc / preview。
2026-05-31 09:39:29 +08:00
Andy Allan 972405927a fix(ci): emit release body prelude only from leader matrix job 2026-05-31 00:36:17 +08:00
H-Chris233 0a66f3e50e fix(macos): show capsule in fullscreen Spaces 2026-05-30 15:14:08 +08:00
Chris233 f7bcf25bd7 Merge pull request #555 from H-Chris233/fix/issue-542-openai-reasoning-effort
fix(llm): gate OpenAI reasoning effort by model
2026-05-29 22:54:46 +08:00
H-Chris233 84e2a7ba1d fix(llm): gate OpenAI reasoning effort by model 2026-05-29 22:28:41 +08:00
Chris233 e0711c11e9 Merge pull request #554 from aeoform/fix/linux-fcitx5-auxdown-persist-and-hotkey-mode-save
fix(linux): fcitx5 auxDown 持久化 + 热键模式保存修复 + 隐藏剪贴板/胶囊设置
2026-05-29 21:59:23 +08:00
aeoformandClaude Opus 4.7 05a4634768 fix(linux): move streaming insert toggle into recording card
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>
2026-05-29 21:36:49 +08:00
aeoformandClaude Opus 4.7 eb05bc1ca1 fix(linux): fcitx5 auxDown persistent + hotkey mode save + hide clipboard/capsule settings
- 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>
2026-05-29 20:53:32 +08:00
Chris233 f517912068 Merge pull request #551 from H-Chris233/beta
fix(asr): change default Resource ID from bigasr to seedasr
2026-05-29 13:07:52 +08:00
H-Chris233 de5034145f fix(asr): change default Resource ID from bigasr to seedasr
volc.bigasr.sauc.duration -> volc.seedasr.sauc.duration
2026-05-29 11:43:25 +08:00
Chris233 87d752ef26 Merge pull request #550 from H-Chris233/fix/issue-543-asr-http-endpoint
fix(asr): allow HTTP endpoints with risk warning
2026-05-29 11:35:29 +08:00
H-Chris233 2e5ba91b95 fix(asr): allow HTTP endpoints with risk warning 2026-05-29 11:28:31 +08:00
Chris233 5f6f44709c Merge pull request #549 from H-Chris233/fix/issue-548-macos-capsule-spaces
fix(macos): show capsule across Spaces
2026-05-29 11:19:01 +08:00
H-Chris233 57f186f054 test: make capsule Spaces contract cross-platform 2026-05-29 11:07:07 +08:00
H-Chris233 40b8c0ce13 fix(macos): show capsule across Spaces 2026-05-29 10:59:58 +08:00
Chris233 e4acd1d9b4 Merge pull request #546 from aeoform/chore/linux-fcitx5-plugin-inject-and-cleanup
chore(linux): fcitx5 插件打包注入 + 清理 rdev 残留 + 声明系统依赖
2026-05-29 10:15:42 +08:00
aeoformandClaude Opus 4.7 28ef33267c fix(inject): fail loudly when RPM injection cannot complete
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>
2026-05-28 23:59:53 +08:00
aeoformandClaude Opus 4.7 f5bf1ff153 fix(inject): remove AppImage support, detect Debian multiarch dynamically
- 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>
2026-05-28 23:53:53 +08:00
aeoformandClaude Opus 4.7 71a36344b2 fix(fcitx): probe multiple distro lib paths for plugin check
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>
2026-05-28 23:38:08 +08:00
aeoformandClaude Opus 4.7 0e5f90bcf2 fix(inject): use correct RPM lib path, remove broken AppImage file mode
- 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>
2026-05-28 23:32:10 +08:00
aeoformandClaude Opus 4.7 2bd733ecb3 fix(ci): remove Tauri resources for plugin files, simplify to path check
- 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>
2026-05-28 23:16:53 +08:00