Commit Graph
1007 Commits
Author SHA1 Message Date
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
aeoformandClaude Opus 4.7 d426b9e7b8 fix(ci): replace bash prebuild with cross-platform Node.js script
The prebuild script used bash syntax (mkdir, for, [ -f ]) which fails on
Windows. Replace with a Node.js script that checks platform() and skips
non-Linux, keeping the plugin copy logic only where it's needed.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 23:13:44 +08:00
aeoformandClaude Opus 4.7 19ab7429cd chore(linux): fcitx5 插件打包注入 + 清理 rdev 残留 + 声明系统依赖
- fcitx5 插件改为打包时注入系统路径(inject-fcitx5-plugin.sh),不再运行时复制
- ensure_plugin_installed 改为纯版本检查,不做文件 I/O
- 清理 hotkey/permissions/unicode_keystroke 中 rdev 相关注释和日志
- tauri.linux.conf.json 声明 deb/rpm 运行时依赖及 fcitx5 推荐
- prebuild 脚本自动复制插件文件供 Tauri resources 打包

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 23:08:00 +08:00
吕柏青 9746bb2ae8 chore(homebrew): bump cask to 1.3.4
Update OpenLess Homebrew cask from 1.2.23 to 1.3.4 (latest stable
release v1.3.4-tauri, published 2026-05-22). SHA256 checksums for
both aarch64 and x64 DMGs verified by local download.
2026-05-28 21:31:42 +08:00
Chris233 5acb2dff1a Merge pull request #541 from H-Chris233/fix/windows-capsule-hitbox
fix(ui): restore Windows capsule hitbox metrics
2026-05-28 11:38:40 +08:00
H-Chris233 d758d5f71d fix(ui): restore Windows capsule hitbox metrics 2026-05-28 11:27:33 +08:00
Chris233 38e9fb2035 Merge pull request #536 from weikeyi/pr/sherpa-streaming-backend
Pr/sherpa streaming backend
2026-05-27 19:05:22 +08:00
Chris233 58b5684c0c Merge pull request #537 from H-Chris233/fix/bailian-endtime-fallback
fix(bailian): 修复 end_time fallback 将 interim 误判为 final 的 bug
2026-05-27 18:04:44 +08:00
Chris233 e5cb823255 Merge pull request #535 from H-Chris233/fix/issue-530-bailian-dedup
fix(bailian): 加固 DashScope ASR 累积文本重复修复
2026-05-27 18:04:12 +08:00
H-Chris233 a534ec5b0b fix(bailian): 修复 end_time fallback 将 interim 误判为 final 的 bug
end_time > 0 的 fallback 逻辑在 sentence_end 字段存在时不应该启用,
因为 DashScope 的 interim 结果也携带正数 end_time,导致累积文本重复重现。
改为仅当 sentence_end 字段完全不存在时才 fallback 到 end_time > 0。

同时修正测试 helper 的 end_time 值,使其匹配真实 API 行为(interim 也有正数 end_time),
并新增 interim_with_positive_end_time_not_mistaken_for_final 测试。
2026-05-27 17:59:28 +08:00
H-Chris233 ee164c3863 fix(bailian): 加固 DashScope ASR 累积文本重复修复
- 跳过 heartbeat 事件(不含识别文本)
- 改用 API 文档标注的 sentence_end 判断 finality,end_time > 0 作为兼容 fallback
- 新增 partial_segments BTreeMap 追踪 interim 结果,final 时自动清理
- sentence_id == 0 的 final 结果不再丢弃,存入 final_segments
- 新增 merge_segments() 带 2 字符最小重叠检测的拼接守卫
- finish_with_partial_or_error 同时检查 partial_segments
- 测试从 3 个扩展到 20 个
2026-05-27 15:08:23 +08:00
weikeyi c2080286fb feat(asr): wire sherpa streaming into dictation 2026-05-27 15:00:30 +08:00
weikeyi 39738fde2a feat(asr): add sherpa online streaming runtime 2026-05-27 15:00:30 +08:00
Chris233 f2ddf856c5 Merge pull request #533 from weikeyi/pr/windows-ime-whisper-fixes
Pr/windows ime whisper fixes
2026-05-27 14:42:20 +08:00
weikeyi 2fe4bcac80 test(asr): accept lowercase authorization header 2026-05-27 00:11:15 +08:00
weikeyi 4fc558e979 fix(windows): package x86 IME DLL in x64 MSI 2026-05-27 00:11:15 +08:00
Chris233 4723863d5a Merge pull request #531 from aeoform/feat/linux-custom-titlebar
fix: Linux Wayland 改用应用级自定义标题栏,绕过 GTK CSD 点击无响应问题
2026-05-26 10:51:36 +08:00
aeoformandClaude Opus 4.7 a4705fa286 fix: 修复 PR review 发现的两个问题
- 最大化状态同步:mount 后监听 tauri://resize 事件,每次 resize 都重新查询
  isMaximized(),确保双击拖拽栏/键盘快捷键触发最大化时图标不脱节
- 按钮点击后 300ms 再次查询 isMaximized(),防止窗口管理器拒绝 toggle 时
  状态错误
- 启动 nudge drift check:只修正 ±1px 的 nudge 产物,不再覆盖用户/合成器
  的实质性窗口大小变化
- 还原误删的中文注释,移除冗余 closeBtn 常量,<style> 移到 WindowChrome
  层级避免每个 LinuxTitlebar 实例重复注入

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-25 23:55:45 +08:00
aeoformandClaude Opus 4.7 4254d835ff fix: Linux Wayland 改用应用级自定义标题栏,绕过 GTK CSD 点击无响应问题
KDE/Wayland 下 GTK Client-Side Decorations 的 minimize/maximize/close
按钮无法响应鼠标事件(tao#1218, tauri#9394)。此前尝试的 WebKit 环境变量 +
async nudge resize 均不能可靠修复,最终方案参考 cc-switch,完全放弃系统装饰:

- decorations: false → 应用级 WindowChrome 绘制 36px 拖拽栏 + 三键窗口控制
- transparent: true → 配合 CSS 磨砂玻璃背景
- WEBKIT_DISABLE_COMPOSITING_MODE + DMABUF_RENDERER 兜底 WebKit 合成异常
- async nudge(set_focus + ±1px resize)保留为辅助修复,防止 show() 后
  webview surface 输入区域未初始化

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-25 23:38:46 +08:00
吕柏青 b7c6217519 chore(release): bump version to 1.3.4-14 (Beta) — Linux fcitx5 状态弹窗 + Sherpa 本地 ASR 状态同步 + DashScope 重复修复
本次只动版本号,逻辑改动已在以下 PR 落盘:
- #520 Linux fcitx5 候选框听写状态提示 + AppImage 插件自动安装 + 热键启动容错
- #523 Sherpa 本地 ASR 状态同步修复(active settings 顺序 + Qwen3 tokenizer 缓存校验)
- #527 Sherpa 本地 ASR asset 与 state handling 修复
- DashScope (bailian) ASR 部分语句重复输出修复
- pr-agent.yml CI 配置调整
2026-05-25 20:55:51 +08:00
Chris233 7538ac094f Merge pull request #520 from aeoform/feat/linux-fcitx5-status-popup
feat(linux): fcitx5 候选框听写状态提示 + AppImage 插件自动安装 + 热键启动容错
2026-05-25 11:05:09 +08:00
Chris233 cc1f532e76 Merge pull request #527 from weikeyi/fix/sherpa-local-asr-asset-state-beta
修复 Sherpa 本地 ASR 资产校验与部分下载状态
2026-05-25 10:31:19 +08:00
aeoformandClaude Opus 4.7 28324376a5 fix(review): 自动化审核修复 — 注释误判 + gen counter 去重 + bailian warn
1. _name_match/_match 生命周期注释:Rust 的 `let _name =` 不会提前 drop,
   仅有 `let _ =` 才会。两个 guard 与 loop{} 同闭包作用域,自动化审核 HIGH 误判。
2. emit_capsule retry 用 AtomicU64 gen counter 去重,避免快速状态切换时
   多个 retry 线程同时生效。
3. bailian.rs sentence_id==0 的 final 句加 warn 日志,方便排查。
4. 删除空 libopenless.so 占位文件,CI 会在构建前实时 cp。

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-24 15:27:13 +08:00
weikeyi c9aa46263f Fix Sherpa local ASR asset and state handling 2026-05-24 15:12:06 +08:00
aeoformandClaude Opus 4.7 de5c55b00f fix(review): clear_aux_down 同样加状态守卫
避免快速状态切换 (Done→Idle→Recording) 时旧 clear 跑到新 set 后面把新文字清掉。
NameOwnerChanged Stale Sync 是已知低概率场景,注释保留。

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-24 15:10:14 +08:00
aeoformandClaude Opus 4.7 52084999a6 fix(review): Claude Code 审查问题修复
1. NameOwnerChanged 回调内 sleep 移到独立线程,不再阻塞 DBus 事件循环
2. emit_capsule 首次 set_aux_down spawn 加 LAST_AUX 状态守卫
3. ensure_plugin_installed 注释更新为"总是覆盖"语义
4. NameOwnerChanged match rule 移除不支持的 arg0,改回调内过滤

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-24 13:28:56 +08:00
Chris233 5254a91859 更新 pr-agent.yml 2026-05-23 22:50:55 +08:00
Chris233 ab609d3289 更新 pr-agent.yml 2026-05-23 22:42:38 +08:00
Chris233 466e7568b3 Merge pull request #523 from weikeyi/fix/sherpa-local-asr-state-sync-v2
Fix Sherpa local ASR state sync
2026-05-23 22:29:52 +08:00
weikeyi 6d6510fb53 Address Sherpa PR review feedback 2026-05-23 19:10:46 +08:00
weikeyi 75a5082dc7 Tighten Qwen3 tokenizer cache validation 2026-05-23 16:18:05 +08:00
weikeyi cd9696d561 Fix active ASR settings sync ordering 2026-05-23 11:55:48 +08:00
baiqing a38d6b50e1 chore(release): bump version to 1.3.4-13 (Beta) — 设置界面重构 + 加入 Beta 渠道 / 麦克风 / 市场登录
本次只动版本号,逻辑改动已在 #521 落盘:
- 设置界面分节化、整体文案精简
- 「加入 Beta 渠道」迁到高级页底部、独立成节;关于页改为正式版「检查更新」按钮
- 麦克风选择改为 SelectLite 下拉(选中行实时音量条 + 打勾)
- 扩展市场 / 风格市场登录统一走共用 GithubLoginModal,弹窗尺寸不再跳动
- 弹窗动画 de-jank(去掉 blur 滤镜),各处弹窗动画时长缓动统一
- 共享 reqwest 客户端(net.rs)+ 仅连接层失败做指数退避重试
2026-05-23 08:55:35 +08:00
weikeyi 529ec77f5f Fix Sherpa local ASR state sync 2026-05-23 00:41:41 +08:00
TRIP 1b8217eddb Merge pull request #521 from Open-Less/feat/settings-revamp
feat(settings): 设置界面重构 — 分节化 / 精简 / Beta 渠道 / 麦克风 / 市场登录
2026-05-22 23:33:46 +08:00
baiqing 99f22a6aee fix: ASR 切换强制覆盖 endpoint/model + 重试只限连接层失败
处理 PR-Agent 第 8 轮:
- ProvidersSection.onAsrProviderChange: asr.endpoint / asr.model 是所有 ASR 厂商
  共用的凭据槽,原「仅槽空时填」逻辑使跨厂商切换不生效(dropdown 切了、实际仍
  打旧厂商地址)。改为强制覆盖预设默认值,与 onLlmProviderChange 一致。
- net.rs send_with_retry: 重试范围从 is_connect() || is_request() 收窄到只剩
  is_connect()。is_request() 多为确定性失败(endpoint 配置错误等),重试 10 次
  只是徒增数秒延迟才暴露错误;连接层失败才是真正瞬时、值得重试的一类。
2026-05-22 23:05:18 +08:00
baiqing 00b2bd0a8d fix(settings): ProvidersSection 识别 sherpa-onnx-local 本地引擎
合并 beta 的 #504 引入了第三个本地 ASR 引擎 sherpa-onnx-local,但本分支的
ProvidersSection(早于 #504 拆出)只认 local-qwen3 / foundry-local-whisper。
sherpa-onnx-local 激活时 knownAsr 查不到 → 主 Card 回落显示 volcengine、
凭据字段也错。补齐 5 处:ASR_PRESETS 条目、visibleAsrPresets 过滤、isLocked、
anomalousNameKey、本地引擎不渲染云端凭据字段的分支判断。
2026-05-22 22:50:22 +08:00
baiqing 8986c5680b fix(settings): performSwitch 补 catch — 本地 ASR 切换失败不再裸抛
LocalModelSection.performSwitch 是 async、try/finally 无 catch,而调用方
(Qwen3 / Foundry / sherpa Toggle、禁用按钮)都是 void performSwitch(...)
即发即忘。setActiveAsrProvider / updatePrefs 失败会冒成未处理的 promise
rejection。补 catch + console.error 吞掉。
2026-05-22 22:28:53 +08:00
baiqing 74be27d3e2 fix(settings): provider 切换失败按后端是否已切来决定下拉框回滚
上一轮加的回滚无条件把下拉退回 committed provider。但 provider 切换是多步非原子
操作:若 setActiveLlmProvider 已成功、后续 updatePrefs / setCredential 才失败,
后端 active 已是新 provider,回滚下拉到旧的反而让「下拉显示旧 / 后端用新」。
改为记 backendSwitched 标志:仅当后端切换本身没成时才回滚下拉框,让下拉始终与
后端 active 一致。ASR 同理。
2026-05-22 22:14:11 +08:00
baiqing 038744fe40 fix(marketplace): 登录成功写 prefs 失败时补回 .catch
重构 OAuth 登录为 GithubLoginModal 后,onLoginSuccess / MarketplaceSection
onSuccess 用裸 void updatePrefs(...) 写 marketplaceDevLogin,丢掉了重构前
try/catch 里的失败日志 —— prefs 写入失败会冒成未处理的 promise rejection。
补回 .catch + console.warn,与重构前行为一致。
2026-05-22 22:00:24 +08:00
baiqing 0689442148 test(polish): 更新 structured prompt 测试以匹配重写后的事项数规则
types.rs 的 STRUCTURED_BUILTIN_PROMPT「事项数 → 输出形态」规则已重写(原「≤ 2 条」
拆成「仅 1 条 / = 2 条」两档),但 polish.rs 的两个 structured_prompt 测试仍断言旧
文案,CI 的 macOS / Linux cargo test 因此变红(Windows 偶然未跑到同批次)。
同步订正断言:
- 「事项 ≤ 2 条」→「事项仅 1 条」+「事项 = 2 条」
- 「不硬塞层级」→「输出连贯段落」(仅 1 条事项 → 连贯段落,语义等价)
本地 cargo test --lib:306 passed / 0 failed。
2026-05-22 21:44:56 +08:00
aeoformandClaude Opus 4.7 1b0e41c206 docs: NameOwnerChanged 快照语义注释
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-22 21:32:14 +08:00
aeoformandClaude Opus 4.7 77455cf268 fix(build): sync_custom_dictation_to_plugin 加上 #[cfg(target_os = "linux")]
函数体内引用了 crate::linux_fcitx,非 Linux 平台该模块不存在导致 E0433。

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-22 21:29:43 +08:00
baiqing 2056ad81f0 Merge branch 'beta' into feat/settings-revamp
解决 LocalModelSection.tsx 冲突:beta 的 PR #504(Windows sherpa-onnx 本地 ASR)
改的是 AdvancedSection.tsx,而本分支已把它拆分重命名为 LocalModelSection.tsx。
合并保留本分支的拆分 + 文案精简,并并入 #504 的 sherpa-onnx-local 引擎行、
isOnSherpaOnnx / pendingNameKey / 禁用逻辑。其余文件由 git 自动合并。
2026-05-22 21:28:30 +08:00
aeoformandClaude Opus 4.7 163327e17b fix(review): NameOwnerChanged 支持自定义组合键 + 总是覆盖旧版插件
1. start_dictation_signal_listener 新增 custom_trigger_key 参数,
   NameOwnerChanged 和初始同步都通过 resync_main_binding 分支处理
   自定义组合键 vs 预设修饰键
2. ensure_plugin_installed 去掉"已安装即跳过"检查,AppImage 每次启动
   都覆盖最新 .so + .conf,确保新 DBus 方法不会因旧插件丢失

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-22 21:20:19 +08:00
baiqing 15b4fb15a5 fix(net): 超时不重试 + 网络探针单发 — 处理 PR-Agent 评审意见
- send_with_retry 不再重试 is_timeout():reqwest 的 is_timeout 也涵盖「请求已发出、
  等响应时超时」,此时服务端可能已收到并在处理,重试 POST/DELETE(marketplace
  点赞 / 删除等)会重复执行。只保留 is_connect / is_request 两类「请求未送达服务端」
  的重试;net.rs 文档原本宣称超时重试幂等安全 —— 该说法对超时不成立,一并订正
- check_network 改单发、不走 send_with_retry:每 30s 的状态探针走 10 次退避会在
  被过滤 / 黑洞网络下把探测拖到近一分钟、状态灯像卡死;瞬时误判由下个 30s 周期
  自动纠正。仍用 net::http() 共享连接池
2026-05-22 21:18:21 +08:00