Commit Graph
113 Commits
Author SHA1 Message Date
Chris233 4cd93bd006 fix(deps): resolve memmap2 and rkyv advisories for #815 (#938)
* fix(deps): resolve RustSec advisories for issue 815

* ci(rust): verify Rust 1.88 MSRV

* test(linux): stub fcitx in backend harness

* docs: document Rust 1.88 MSRV in Chinese README
2026-08-10 21:58:56 +08:00
浩彬(^-^)andCursor ead09481bd feat(android): 可选 Shizuku 与三层跨应用粘贴回退 (#932)
* feat(android): add optional Shizuku accessibility recovery path

Integrate best-effort OpenLessAccessibilityService recovery via Shizuku UserService with safe rollback, manifest/Gradle scaffolding, JNI bridge, settings UI, and contract tests.

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix(android): add primary constructor for Shizuku UserService Stub

Kotlin requires an explicit supertype initializer when extending AIDL Stub; fixes Gradle compile error on CI.

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix(android): replace accessibility heartbeat with IPC paste results

Remove SharedPreferences cross-process heartbeat gating, use structured PASTE/PING IPC with safe retry rules, tighten editable target validation, and fix Shizuku manifest attribute merging for mixed-quote providers.

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix(android): use literal const values in accessibility command receiver

Kotlin const val cannot reference enum codes; fixes release APK compile.

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix(android): 修复无障碍组件短名与全名匹配误判

Settings.Secure 常以 pkg/.Class 存储服务列表,主检测路径改用 ComponentName 规范化比较,避免 enabled=false 误报未授权;同步 Rust JNI 路径并补齐测试。

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix(android): 为 JNI 调用的无障碍检测方法添加 @Keep

Release 构建中 R8 会剥离仅由 JNI 反射调用的 pingAccessibilityProcess,导致 NoSuchMethodError 与 operational=false 误报;同步保护 isEnabled 并补充契约测试。

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix(android): 恢复无障碍粘贴的可编辑目标回退查找

粘贴失败日志为 NO_FOCUSED_EDITOR:过严的 isFocused 校验与移除树遍历导致找不到输入框。恢复 FOCUS_ACCESSIBILITY、宽松焦点匹配与 findEditableInTree 回退,并保留严格缓存校验。

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix(android): 跨窗口扫描与缓存优先修复粘贴目标查找

微信等场景下 rootInActiveWindow 非输入窗口导致 NO_FOCUSED_EDITOR;改为缓存优先、遍历全部无障碍窗口,并加深树搜索。

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix(android): 识别非 isEditable 的粘贴目标节点

微信等 App 不向无障碍暴露 isEditable;扩展为 EditText/ACTION_PASTE/ACTION_SET_TEXT 目标,并订阅文本变更事件以预热缓存。

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix(android): 三层粘贴回退(无障碍 → Shizuku → 剪贴板)

无障碍失败后尝试 Shizuku 注入 KEYCODE_PASTE,再回退剪贴板;精简 Tier1 为 findFocus + ACTION_PASTE。

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix(android): 粘贴结果校验与 Shizuku processNameSuffix

ACTION_PASTE 返回 true 但文本未写入时降级为 PASTE_REJECTED 并走 Tier2;修复 UserService 绑定 NPE;Tier1 成功后跳过 Shizuku。

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix(android): 恢复无障碍可编辑目标查找以修复微信等应用粘贴

aaa3fbf2 将 Tier1 简化为 findFocus 导致微信等应用 PASTE_REJECTED;恢复跨窗口/树扫描与焦点缓存,保留粘贴结果校验与 Promise.allSettled 容错。

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix(android): 通过 IPC 传递粘贴文本修复后台剪贴板读取被拒绝

无障碍子进程在应用未聚焦时无法读剪贴板,导致 Tier1 直接 PASTE_REJECTED;主进程将听写文本经 EXTRA_PASTE_TEXT 传入粘贴流程。

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix(android): Tier2 粘贴改用 Shizuku.newProcess 绕过 MTK UserService 崩溃

联发科/小米 ROM 上 UserService 进程在 LoadedApk.makeApplicationInner 因 procName 为 null 而 NPE;粘贴键注入优先走 Shizuku.newProcess,失败再回退 UserService。

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix(android): Tier2 粘贴改用 Shizuku daemon UserService

newProcess 为私有 API;粘贴键注入改走 daemon(true) 绑定,避免 MTK 上 :shizuku 子进程 Application NPE。

Co-authored-by: Cursor <cursoragent@cursor.com>

* test(android): 修正 daemon 粘贴契约断言

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix(android): daemon 粘贴绑定补全 processNameSuffix

Shizuku UserServiceArgs 要求 suffix 非空;daemon(true)+suffix=paste 避免此前 null NPE 与 MTK :shizuku 子进程崩溃。

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix(android): Tier2 粘贴经反射调用 Shizuku.newProcess

MTK 上 UserService 子进程仍触发 LoadedApk NPE;粘贴键注入优先反射 newProcess 执行 input keyevent 279,UserService 作回退。

Co-authored-by: Cursor <cursoragent@cursor.com>

* chore(android): 移除粘贴调试日志

微信等应用三层粘贴回退已在真机验证通过,清理 DBG-21a66f/DBG-53a00d 临时 instrumentation。

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix(android): 修复 CI 单元测试在无 Robolectric 下失败

ComponentIds 改为纯 Kotlin 规范化(对齐 Rust);isValidServiceComponent 拒绝首尾空白;Target 测试改用 action id 常量。

Co-authored-by: Cursor <cursoragent@cursor.com>

---------

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-07 21:50:09 +08:00
Chris233 115680cd4c Delete .github/workflows/pr-agent.yml 2026-08-05 22:36:33 +08:00
TRIP 857ea6dc21 Merge pull request #839 from Open-Less/release/1.3.15
fix(updater): prepare 1.3.15-Beta.2 after repository transfer
2026-07-21 18:43:09 +08:00
sim 6b33ba21e0 fix(updater): prepare 1.3.15-Beta.2 after repository transfer 2026-07-19 00:11:34 +08:00
75918e0338 fix(android): protect credentials with Android Keystore (#838)
* fix(android): protect credentials with Keystore

* fix(android): harden credential migration

* fix(android): recover sanitized credential migration

* fix(ci): target Android x86_64 test variant

* fix(ci): prepare Tauri Android test project

* fix(ci): set Tauri Android build metadata

* fix(ci): isolate Android Keystore test build

* fix(ci): generate Tauri Android Kotlin bridge

* fix(android): harden credential persistence

* fix(android): preserve credential migration roots

* fix(android): recover verified credential writes

* fix(android): clear unrecoverable credential recovery

* fix(ci): accept CRLF in Android credential contract

---------

Co-authored-by: Codex <codex@openai.com>
Co-authored-by: baiqing <lbx12309@icloud.com>
Co-authored-by: Chris233 <h-chris233@outlook.com>
2026-07-18 18:13:34 +08:00
TRIPandsim 4bdef5d7a3 ci: run all frontend and contract tests (#832)
Co-authored-by: sim <sim@local>
2026-07-15 15:55:37 +08:00
eb099c4f41 build(macos): 校验打包产物声明语音识别用途 (#825)
* build(macos): 校验打包产物声明语音识别用途

build-mac.sh 已在校验 NSMicrophoneUsageDescription 与 audio-input
entitlement,但 Apple Speech provider 引入的 NSSpeechRecognitionUsage-
Description 没有对应护栏。该 key 一旦缺失,构建静默成功,而选择
apple-speech 的用户会在调用 Speech.framework 时被 macOS TCC 以 SIGABRT
直接杀掉进程(崩溃报告 termination namespace = TCC)。

对打包产物 .app/Contents/Info.plist(而非源码 Info.plist)新增一行
PlistBuddy 校验:脚本开头的 set -euo pipefail 会让 key 缺失时非零退出、
当场中止构建。key 存在时输出被丢弃,行为与现在完全一致,产物逐字节不变。

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* fix(macos): enforce speech usage description contract

* fix(macos): reject Unicode-only speech descriptions

---------

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Co-authored-by: sim <sim@local>
2026-07-15 15:26:48 +08:00
TRIPandsim e3e63cad04 fix(security): harden remote pairing PIN persistence (#821)
* fix(security): harden remote pairing PIN persistence

* fix(security): harden pairing PIN persistence

* test(ci): accept Windows line endings in PIN contract

* fix(linux): declare libc for secure PIN opens

---------

Co-authored-by: sim <sim@local>
2026-07-15 14:46:06 +08:00
TRIPandsim 9991b325b8 test(windows): repair UI config contract (#829)
Co-authored-by: sim <sim@local>
2026-07-15 13:53:09 +08:00
jmr 1df2838604 NO AI SLOP PLEASE
AI SLOP 会导致项目产生大量垃圾内容 且在此workflow被跳过的情况下无法正常merge pr
2026-06-27 14:05:38 +08:00
sim de8b6e3bd8 fix(release): skip beta Windows MSI 2026-06-25 15:32:28 +08:00
sim 8d74b3e0eb chore(release): prepare 1.3.13-Beta.1 2026-06-25 14:59:31 +08:00
TRIP fbe40ab583 feat(android): 集成 #704 安卓自动更新 + 同步 PC updater 修复(#705/#708)到安卓 (#712)
合并 #704(安卓应用内自动更新 + JNI 修复)并把 PC updater 修复同步到安卓:①安卓公钥回退 6F4B5994→1DEAA803(同步#705)②installError 安装失败兜底+去 throw(同步#708)③还原被自动合并误删的桌面 logClientError。桌面机制零变更。CI 全绿 + @claude 审核通过。取代 #704 及 #694 安卓部分。
2026-06-19 13:55:53 +08:00
HKLHaoBinandCursor e83297eca7 fix(ci): build frontend before Android cargo check
generate_context! requires ../dist; the android-check job was missing npm ci + vite build, causing proc macro panic on CI.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-13 20:42:32 +08:00
HKLHaoBinandCursor 100b6c292a fix(ci): export NDK clang for Android cargo check
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-13 20:24:06 +08:00
HKLHaoBinandCursor 81cbbed5b4 fix(ci): install NDK for Android cargo check job
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-13 20:11:36 +08:00
HKLHaoBinandCursor 0fe5fbfdcf feat(android): align release pipeline with desktop updater rules
Add signed release APK builds on v*-tauri tags, minisign manifests per ABI, custom Android in-app updater, and CI cargo check for aarch64-linux-android.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-13 19:48:07 +08:00
HKLHaoBin 1ea467a001 feat(android): port Android APK runtime onto beta 2026-06-12 18:13:12 +08:00
HKLHaoBinandCursor cb63eaa766 ci(android): harden Gradle wrapper download in APK workflow
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-12 17:55:06 +08:00
HKLHaoBinandCursor dbc2643583 Add Android APK CI workflow for manual dispatch on beta.
Sync android-apk.yml from openless-android so the workflow appears in Actions.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-12 17:55:06 +08:00
aeoformandClaude Opus 4.7 1658af4dfd ci(linux): upload fcitx5 plugin as standalone release artifact
- Add upload step for libopenless.so + openless.conf as a separate
  artifact (openless-fcitx5-plugin-linux-x64) for AppImage users
  and manual installation
- Include plugin files in GitHub Release assets alongside existing
  deb/rpm/AppImage bundles

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-06-05 22:12:10 +08:00
吕柏青 18ffbb0e48 fix(ci): cask intel sed 锚定 sha256 行,避免误改 arch 指令 (@claude review)
裸 s/intel: "..."/ 会同时命中 cask 第2行 arch arm: "aarch64", intel: "x64",把 arch 的 intel 改成哈希 → Intel Mac 用户 brew 安装 404。改用 ^[[:space:]]*intel: 锚定 sha256 块行(捕获组保留缩进),并加防呆:arch 指令被破坏或 sha256 没写进去就让 job 失败。本地模拟新旧 sed 对比已验证。
2026-06-04 12:57:31 +08:00
吕柏青 0d35c811fe ci(release): 正式发版后在流水线内自动更新 Homebrew cask
原 update-cask.yml 监听 release: published,但 Release 由 release-tauri.yml 用默认 GITHUB_TOKEN 创建,不会触发该事件(GitHub 防递归)——所以 cask 从不自动更新,需手动;且其条件 endsWith('-tauri') 连 beta 也匹配。

改为在 release-tauri.yml 内新增 needs:build 的 update-homebrew-cask job:仅正式版 tag(v*-tauri 且非 -beta-tauri),构建+建 Release 后下载 DMG 算 sha256、sed 更新 Casks/openless.rb、提交回默认分支([skip ci])。删除失效且会错配 beta 的 update-cask.yml。
2026-06-04 11:50:32 +08:00
Chris233 0b615a9a3e 更新 pr-agent.yml 2026-05-31 21:32:21 +08:00
Chris233 2990e39994 更新 pr-agent.yml 2026-05-31 20:11:27 +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 40b8c0ce13 fix(macos): show capsule across Spaces 2026-05-29 10:59:58 +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 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
aeoformandClaude Opus 4.7 57a4919712 feat(linux): fcitx5 候选框听写状态提示 + AppImage 插件自动安装 + 热键启动容错
- fcitx5 插件新增 SetAuxDown/ClearAuxDown DBus 接口,在候选词列表下方
  显示听写状态文字(收音中→识别中→润色中→已插入),切窗口自动跟随焦点
- 优先使用当前焦点 IC 展示 auxDown,失焦 IC 降级兜底,避免面板不渲染
- flushUI 排空旧事件后再设 auxDown,防止按键事件竞态覆盖状态文字
- start_dictation_signal_listener 启动时等待 fcitx5 最多 30s,监听
  NameOwnerChanged 在 fcitx5 重启后自动重新同步快捷键绑定
- AppImage 打包 libopenless.so 为资源,启动时检测缺失自动安装到
  ~/.local/lib/fcitx5/ 和 ~/.local/share/fcitx5/addon/
- Linux 胶囊窗口不在 Wayland/X11 显示,状态完全走 fcitx5 输入面板

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-22 20:40:40 +08:00
浩彬(^-^)andCursor 94fe8c7850 Fix/revert windows capsule qa acrylic (#496)
* chore(ci): nudge Actions to index release workflow on fork

Co-authored-by: Cursor <cursoragent@cursor.com>

* chore(ci): nudge Actions to index release workflow on fork

Co-authored-by: Cursor <cursoragent@cursor.com>

* chore(ci): nudge Actions to index release workflow on fork

Co-authored-by: Cursor <cursoragent@cursor.com>

* chore(ci): nudge Actions to index release workflow on fork

Co-authored-by: Cursor <cursoragent@cursor.com>

* chore: add CapsWriter to .gitignore for local voice inference reference

* fix(windows): revert capsule/qa Acrylic to remove dark host rect

Reverts the apply_acrylic blocks from #487. Full-window Acrylic
tinted the 220×84 capsule hitbox, causing a visible dark rectangle
around the pill on light backgrounds.

Co-authored-by: Cursor <cursoragent@cursor.com>

---------

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-19 14:31:06 +08:00
baiqing bd5dcb8a57 chore(release): bump version to 1.3.4-8 (Beta) + fcitx5 路径抓取/安装前缀修复
v1.3.4-7 显示:fcitx5 包名替换后构建本身已成功([100%] Built target openless),
但下一步立刻 exit 1。根因有两个:

1) cmake -LA 抓不到值
   fcitx5 5.0.14 把 FCITX_INSTALL_ADDONDIR / FCITX_INSTALL_PKGDATADIR
   设为普通变量而非 CACHE,cmake -LA 看不到 → grep 退码 1 → set -e -o pipefail
   触发整步退出。
   改从 configure 阶段 message(STATUS ...) 的输出抓(CMakeLists.txt 已经打印)。

2) CMAKE_INSTALL_PREFIX 默认 /usr/local 路径错
   fcitx5 在 Ubuntu 上运行时只扫 /usr/lib/<arch>/fcitx5/,默认 prefix=/usr/local
   会让 .deb 把插件安到 /usr/local/lib/fcitx5/,运行时找不到。
   显式 -DCMAKE_INSTALL_PREFIX=/usr 强制 Debian 系标准路径。
   历史 v1.3.4-3 其实也是这条 bug 路径,只是 cmake -LA 那行先挂掉没人意识到。

提取失败时打印 cmake-configure.log 末 50 行作为诊断。
2026-05-18 21:34:38 +08:00
baiqing 9bae92b4df chore(release): bump version to 1.3.4-7 (Beta) + Linux fcitx5 包名拆分修复
v1.3.4-6 加的 apt-cache search 诊断揭示真因:Ubuntu 22.04 universe 在
v1.3.4-3 (Apr 2026) 之后把 fcitx5-dev 这个 meta 包移除了,源里只剩拆分后的
libfcitx5{core,utils,config}-dev 等子包。这也解释了 -4/-5/-6 为何连挂同样错误
"Unable to locate package fcitx5-dev":根本就找不到这个 umbrella 包了。

CMakeLists.txt 实际只 find_package(Fcitx5Core / Fcitx5Utils / Fcitx5Module),
对应:
  libfcitx5core-dev
  libfcitx5utils-dev
  fcitx5-modules-dev
另外 fcitx5 CMake config 文件依赖 KDE 的 extra-cmake-modules (ECM),
和 libfcitx5config-dev 作为传递依赖一起补上。

诊断块保留(apt-cache search / os-release / sources.list.d),未来若再变包名
能立刻拿到证据。
2026-05-18 21:22:43 +08:00
baiqing 1960e0d602 chore(release): bump version to 1.3.4-6 (Beta) + 修 Linux CI fcitx5-dev 安装
v1.3.4-4 / -5 的 Linux 构建在 "Build fcitx5 plugin" 步骤连挂两次,
错误一致:"E: Unable to locate package fcitx5-dev"。同一 job 前面的
"Install Linux bundle deps" 步骤明明已经 apt-get update + 装好了一堆
universe 包,到 fcitx5 这步突然找不到 —— 表象与 GitHub Actions
ubuntu-22.04 runner 镜像弃用过渡期里 apt 元数据漂移的现象一致。

release-tauri.yml "Build fcitx5 plugin" 步骤增加三层防御:
  1) sudo add-apt-repository -y universe(已启用则 no-op)
  2) 本步骤内重新 sudo apt-get update,独立于上游 step 缓存
  3) 安装失败时打印 apt-cache policy / search / os-release / sources.list.d
     便于以后排查

同 commit 同时 bump 五处版本到 1.3.4-6 重发,让 PR #487/#488/#489
三个 Windows P0 修复带上 Linux 包一起进 Beta 通道。
2026-05-18 20:56:58 +08:00
aeoformandClaude Opus 4.7 39ce12c8e9 Merge remote-tracking branch 'origin/beta' into beta — resolve coordinator.rs conflict
- Accept upstream's show_capsule_window_for_recording wrapper + CapsuleShowStrategy
  (our Linux fallback logic is subsumed by the upstream strategy pattern)
- Keep Linux on NoActivate strategy; show_capsule_window_no_activate returns true
  on Linux to suppress capsule window (no popup on Wayland/fcitx5)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-17 21:50:58 +08:00
baiqing d1aff0f97c Merge remote-tracking branch 'origin/main' into beta
# Conflicts:
#	openless-all/app/package-lock.json
#	openless-all/app/package.json
#	openless-all/app/src-tauri/Cargo.lock
#	openless-all/app/src-tauri/Cargo.toml
#	openless-all/app/src-tauri/tauri.conf.json
2026-05-17 18:18:23 +08:00
TRIPandbaiqing fe56eb3038 fix(ci): detach HEAD before claude-code-action on fork PR (#464)
PR #451 (来自 fork aeoform/openless, head ref 也叫 beta) 触发 @claude 时,
claude-code-action 执行 `git fetch origin pull/451/head:beta` 把 PR head
拉到本地 beta 分支,但此时 worktree 正 checkout 在 refs/heads/beta,
git 拒绝 fetch 到已 checkout 的分支:

    fatal: refusing to fetch into branch 'refs/heads/beta' checked out at ...
    Action failed with error: Command failed: git fetch origin --depth=20 pull/451/head:beta

修复: 在 actions/checkout 后立即 git checkout --detach,释放
refs/heads/<default-branch> 这个本地分支名,让 action 自己 fetch 不撞名.
仅在 fork head ref == base ref name 的 corner case 才会触发问题,
detach 对其他场景无副作用.

失败 run: https://github.com/Open-Less/openless/actions/runs/25978532215

Co-authored-by: baiqing <lbx12309@icloud.com>
2026-05-17 14:09:58 +08:00
TRIP 98dd4c7e47 chore(ci): 允许 Open-Less 组织成员触发 @claude (#461)
After repo transfer to Open-Less org, author_association == 'OWNER' no longer matches any human user on org repos. Expand the gate to [OWNER, MEMBER] so any org member can trigger @claude. No other changes.
2026-05-17 09:54:26 +08:00
baiqing d6d1fee77e chore(repo): 移除内部 AI 协作 / 规划 / 审计文档,仅本地保留
公共仓库不再发布 CLAUDE.md / AGENTS.md / 内部 audit + roadmap +
github-tracking + superpowers + windows-*-tracking 等共 45 个文件。

- 全部用 `git rm --cached`,本地仍保留以供日常协作;
- `.gitignore` 加规则防止再次被 `git add` 拉回;
- 用户 docs(volcengine-setup / tauri-csp / references / 图片素材)
  以及 ISSUE_TEMPLATE / workflows / pull_request_template 仍保留发布。

密钥层面审计同步完成:未发现 API key / token / 私钥泄露,
tauri pubkey 与 GitHub OAuth client_id 均为设计上公开值。
2026-05-16 22:07:30 +08:00
aeoformandClaude Opus 4.7 088e2ab3d9 fix(ci): derive RPM fcitx5 plugin path from cmake detection
Map Debian multiarch addon dir to /usr/lib64 for RPM packages.
Uses FCITX_RPM_ADDON_DIR derived from cmake output instead of
hardcoded paths.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-16 09:38:21 +08:00
aeoformandClaude Opus 4.7 b349a4dcba fix(linux): remove dead rdev code and leftover Wayland references
Remove 290 lines of unused rdev listener code from the Linux hotkey
platform module, drop the rdev dependency from Cargo.toml, and clean up
capsule_window_visible init leftover. Update doc comments and frontend
i18n to reflect the unified fcitx5-only path.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-16 09:01:56 +08:00
aeoformandClaude Opus 4.7 85c2cafcad fix(ci): use cmake-determined plugin install path in deb
FCITX_INSTALL_ADDONDIR varies by distro (multiarch Ubuntu →
/usr/lib/x86_64-linux-gnu/fcitx5/; Fedora → /usr/lib64/fcitx5/;
Arch → /usr/lib/fcitx5/). Extract from cmake cache at build time
via GITHUB_ENV instead of hardcoding.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-16 08:53:06 +08:00
aeoformandClaude Opus 4.7 4f1e457cfa feat(ci): build fcitx5 plugin into Linux deb/rpm packages
- Add "Build fcitx5 plugin" step to release-tauri.yml: compiles
  the C++ plugin via cmake, copies .so + .conf to
  src-tauri/linux-fcitx5-plugin/ for the Tauri bundler.
- Override tauri build --config to include deb.files / rpm.files
  that place the plugin at /usr/lib/fcitx5/ so it's auto-detected
  after install.
- Add fcitx5, fcitx5-module-dbus as deb/rpm dependencies.
- Local builds unaffected (config is CI-only via --config flag).

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-16 08:53:06 +08:00
TRIP e33fc0047b Merge pull request #450 from Open-Less/beta
release: 1.3.2 stable — marketplace UI gated, ASR correction upgraded
2026-05-15 23:03:04 +08:00
H-Chris233 b0c469dbd4 Keep streaming insertion enabled for migrated prefs
Older builds could persist the old default streamingInsert=false into preferences.json, which is indistinguishable from a user opt-out if the value is treated as an ordinary bool. Add a one-time migration marker, persist normalized legacy prefs on load, and keep later user opt-outs durable after migration.

Constraint: issue #440 requests streaming input/output defaults on for fresh installs and updates, plus release notes for the behavior change.

Rejected: treating any stored false as manual opt-out | old default writes would keep update users off forever.

Rejected: overriding every false forever | would erase a user's post-migration manual opt-out.

Confidence: high

Scope-risk: moderate

Directive: Keep UserPreferencesWire serde defaults and migration markers aligned with persisted UserPreferences fields.

Tested: cargo test --manifest-path src-tauri/Cargo.toml --lib streaming_insert -- --nocapture

Tested: cargo test --manifest-path src-tauri/Cargo.toml --lib legacy_streaming_insert_false_is_migrated_and_marker_is_persisted -- --nocapture

Tested: npm run build

Tested: cargo test --manifest-path openless-all/app/src-tauri/Cargo.toml --lib

Tested: git diff --check

Not-tested: cargo fmt --check fails on pre-existing unrelated formatting drift in volcengine.rs and commands.rs.
2026-05-15 18:59:45 +08:00
baiqing f89fd2ed22 chore(release): merge beta for Stable 1.3.1 2026-05-14 12:58:48 +08:00
Chris233 180d9a70a0 更新 pr-agent.yml 2026-05-14 10:12:14 +08:00
H-Chris233 4d9b63aab3 Route qwen-asr through the organization fork
Keep the submodule pinned to the reviewed commit while moving the fetch URL to Open-Less/qwen-asr, then document the review checklist future upgrades must follow.\n\nConstraint: #301 identified the personal upstream submodule URL as a supply-chain risk.\nRejected: Updating the submodule commit together with the URL change | would mix provenance hardening with unreviewed upstream code changes.\nConfidence: high\nScope-risk: narrow\nDirective: Do not point .gitmodules back to antirez/qwen-asr; sync upstream into the organization fork and review the diff first.\nTested: gh repo view Open-Less/qwen-asr; git submodule update --init --recursive openless-all/app/src-tauri/vendor/qwen-asr; git diff --check; npm run build; cargo check --manifest-path src-tauri/Cargo.toml\nNot-tested: macOS INSTALL=0 ./scripts/build-mac.sh C-link verification.
2026-05-12 18:48:03 +08:00