16c3f841b5
chore(release): prepare 2.0.0-Beta.2 build 20260924
...
Integrate the reviewed 2.0 PRs and local fixes from 03136853.
Preserve the verified subtitle behavior and model/runtime corrections.
Keep the numeric Beta tag compatible with released clients while exposing
the date as application build metadata.
Co-authored-by: DepengWang <2818245+DepengWang@users.noreply.github.com >
Co-authored-by: HKLHaoBin <we3q@qq.com >
Co-authored-by: Nahida <1139500183@qq.com >
Co-authored-by: TRIP <1933142963@qq.com >
Co-authored-by: chyuwei <weichangyuwcy@gmail.com >
Co-authored-by: leonoxo <leonoxo@gmail.com >
Co-authored-by: tayir <arnoldincredible@126.com >
2026-09-24 17:28:24 +08:00
zhou zhichao and Chris233
882fac63f0
fix(remote-input): preserve phone trust across restarts and IP changes ( #1037 )
...
* fix(remote-input): preserve phone trust with a persistent local CA
* fix(remote-input): disclose LAN certificate MITM risk
---------
Co-authored-by: Chris233 <h-chris233@outlook.com >
2026-09-10 06:36:12 +08:00
fd632c2fc7
fix(windows): 粘贴模式下也可隐藏键盘列表中的 OpenLess ( #1015 ) ( #1017 )
...
* fix(windows): allow hiding OpenLess from keyboard list in paste mode
Extend the keyboard-list visibility toggle and desired-profile logic from
SendInput-only to all non-TSF insertion modes so clipboard paste can hide
OpenLess without blocking TSF when switched back.
Refs: #1015
Co-authored-by: Cursor <cursoragent@cursor.com >
* fix(macos): 把 mlx.metallib 放到 Resources,避免 ad-hoc codesign 失败
Contents/MacOS 里的非 Mach-O 会被当成 nested code;克隆仓没有 Developer ID 时 identity '-' 会直接 bundle 失败。metallib 改为 Contents/Resources,worker 启动时调用 MLX set_metallib_path。
Co-authored-by: Cursor <cursoragent@cursor.com >
* fix(ci): dispatch 时按版本号跳过 Windows MSI,避免 Beta.N 被 WiX 拒绝
workflow_dispatch 的 ref 不是 tag,OPENLESS_RELEASE_CHANNEL 会落成 stable,但 app 版本仍是 1.3.18-Beta.7。WiX 要求 prerelease 只能是数字,MSI 直接失败。版本带 Beta/Alpha/RC 时与 beta 渠道一样跳过 MSI。
Co-authored-by: Cursor <cursoragent@cursor.com >
* ci(linux): test core without egui host
---------
Co-authored-by: Cursor <cursoragent@cursor.com >
Co-authored-by: Chris233 <h-chris233@outlook.com >
2026-09-06 23:37:56 +08:00
Chris233
fc38edd1a3
refactor: consolidate Core 2.0 and restore cross-platform behavior ( #1019 )
...
* refactor: split Linux egui host from shared backend
* fix: keep CI contracts portable across runners
* fix(ci): preserve CRLF while removing qwen dependency
* fix(ci): regenerate target lockfile and install ripgrep
* fix(ci): gate desktop-only selection voice module
* ci: limit native build parallelism on cross-platform runners
* fix(host): expose blocking task seam to coordinator
* fix(settings): avoid macOS default hotkey collision
* docs: record cross-platform CI evidence
* ci: expose Linux validation package artifact
* ci: grant reusable Linux package permissions
* refactor: remove legacy coordinator dictation facade
* ci: skip unsupported MSI prerelease builds
* ci: install minisign only for signed Linux releases
* fix: keep test-only coordinator session helper
* refactor: move style preview diagnostics into core
* fix: import shared preferences type from core
* refactor: centralize enabled vocabulary projection
* ci: install ripgrep for Linux package gates
* test: make source contract line-ending agnostic
* fix: keep Linux desktop entry standards compliant
* docs: expose core style diagnostics contract
* ci: resolve Linux package version in app directory
* refactor: centralize ASR vocabulary priority
* fix: use shared vocabulary note constant
* refactor: keep vocabulary priority inside core
* test: retain starting-stop queue coverage
* ci: scope Linux updater URL to the current repository
* docs: close implementation and artifact evidence
* docs: record final CI artifact evidence
* fix(android): align updater plugin versions
* fix(android): pin updater crate exactly
* refactor(core): remove unused type anchor
* docs: record final artifact runs
* fix(remote-input): preserve beta status fields
* fix(tauri): finish beta host merge
* fix(asr): pass scoped operation to native qwen adapter
* fix(macos): bundle mlx metallib as a resource
* test(remote-input): update status wire contract
* feat: share Less Computer voice flow with Linux
* refactor(core): centralize host-independent runtime policy
* refactor(core): complete 2.0 backend consolidation
* fix(ci): prepare Sherpa after cache restore
* fix(macos): route native model paths through Core store
* fix(macos): use ModelStore catalog API
* fix(ci): serialize macOS native test build
* test(ci): preserve macOS cargo diagnostics
* fix(macos): release input source lock before await
* test(core): replace legacy hotkey injection gate
* test(core): move Codex sandbox contract into Core
* fix(core): close final runtime policy gaps
* fix(windows): terminate coding agent process trees
* fix(core): complete local model migration
* fix(credentials): align Core LLM model account
* fix(core): restore 1.x parity across shared backend
* fix(android): complete shared backend stubs
* fix: close cross-platform migration review gaps
* fix: complete migration lifecycles and platform compatibility
* docs: define desktop 2.0 acceptance and Linux handoff
* fix: close desktop parity and session lifecycle gaps
* fix: finish voice lifecycle and desktop feedback parity
* fix: close desktop cancellation and feedback race gaps
* fix: honor proxy settings and reject stale session effects
* fix: dispatch native cleanup on host runtimes and order events
* fix: keep optional recording effects best effort
* fix: close desktop agent model and QA lifecycle gaps
* fix: preserve desktop raw voice and QA turn ownership
* fix: finalize desktop dictation and QA feedback
2026-09-06 18:39:46 +08:00
5ba0fa725c
feat(coding-agent): Less Computer 接入 Codex,语音使唤电脑不再只能用 Claude ( #974 )
...
* fix(coding-agent): 从用户 shell 取真实 PATH,打包后也找得到 CLI
macOS 从 Finder 启动的 GUI 进程拿到的是一份极简 PATH,不经过用户的 shell 配置。
后果是:凡是版本管理器装的 agent CLI 在打包版里一个都找不到——`opencode` 官方脚本
装在 `~/.opencode/bin`,全局 npm 前缀和 nvm 的路径更是带版本号、根本没法硬编码。
用户只能手动去高级设置里填绝对路径。
改成先问用户的 shell 要一份真实 PATH。三个细节是踩出来的,都写进注释了:
- 用 `-lic` 而不是 `-lc`。nvm 这类版本管理器通常在 .zshrc 里初始化,而 .zshrc 只有
交互式 shell 才读;`-lc` 拿到的 PATH 里 nvm 排在 /usr/local/bin 之后,
`#!/usr/bin/env node` 会命中错版本的 node,子进程直接崩。
- 拼接必须保序。逐项前插等于把整个 PATH 倒过来,同样会选错解释器。
- 分隔符交给 std::env::split_paths / join_paths,不能手写 `:`。Windows 用 `;`,
而且盘符自带冒号,手写会把 `C:\Windows` 切成两半、整条 PATH 报废。
shell 卡住有 5 秒硬上限,超时回落到静态目录列表。整段探测限定 unix:Windows 没有
「登录 shell 的 PATH」这个概念,装了 Git Bash 的机器 SHELL 有值,真去跑只会莫名其妙
拉起一个 bash。
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com >
* feat(codex): 无头 Codex 适配器
Less Computer 现在只认 Claude Code 和 OpenCode,因为每个后端都得手写一套适配器。
这个是 Codex 的那套,形状和前两家一致,共用同一套请求/事件/错误类型。
- 运行:`codex exec --json`,逐行解析 JSONL。
- prompt 走 stdin(末尾的 `-`),不进 argv,也不会出现在进程列表里。
- 续接用 `resume --last`。参数顺序有坑:`-s` / `--json` 这些必须排在 `resume` 之前,
写反了 CLI 直接报 unexpected argument,已对 0.146.0 核实并写进注释。
- 工具展示会剥掉 `/bin/zsh -lc '…'` 这层 shell 包装,胶囊里显示的是真正执行的命令名。
- 护栏:Codex 给不了逐命令 deny 清单(`.rules` 只从 $CODEX_HOME / 项目目录读,实测
`-c rules=[…]` 会被静默忽略)。它的护栏是自带的 seatbelt 沙箱,走 `-s <mode>`。
额外关掉 workspace-write 对 /tmp 与 $TMPDIR 的默认放行——不关的话「写入限制在工作
目录内」就是句假话,实测任务真的能在 $TMPDIR 里落文件。
有一处刻意不做:Codex 会把「模型元数据没找到」这类警告也塞成 error 事件,本机每次运行
都会发一条。把它当终局失败会让所有运行都被误判,所以只认 turn.failed。
联机验收默认 #[ignore],其中一条不调模型不花钱:它比对加固前后实际生效的可写根,
盯住护栏别被上游无声改宽(codex 对未知 -c 键是静默接受的,改名了不会报错)。
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com >
* feat(coding-agent): Less Computer 可选 Codex 后端,审批卡按能力启用
把 Codex 接进语音链路,后端从两家变三家。
护栏这块两类后端不一样,代码里如实分开:Claude / OpenCode 有逐命令 deny 清单,撞了能
弹审批卡、批准后放行那一条重跑;Codex 只有粗粒度沙箱档位,唯一的「放行」办法是整体
降档,那等于把护栏关掉,不是放行这一条。
所以给 provider 加了一个能力位,只有支持逐命令放行的后端才弹审批卡。否则用户点了批准、
重跑还是同样被拦,那是个假承诺。撞墙时直接把失败如实报出去。
模型解析也按后端分开:Codex 收裸模型名(gpt-5 / o3 这种),留空交给它自己的
~/.codex/config.toml,不替用户瞎猜一个默认。
另加一个通用的安装检测命令:选了后端却没装 CLI 时,在设置页当场看到,而不是等说完
一句话才发现跑不起来。
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com >
* feat(settings): Less Computer 后端下拉加入 Codex
设置页的后端下拉从两项变三项,并且如实反映能力差异,不给假开关:
- 模型:Claude 用别名下拉,OpenCode 拉账号可用列表,Codex 改成自由文本——它的模型名
是裸名(gpt-5 / 自建网关的任意名字),枚举不过来;留空 = 用 Codex 自己的默认。
- 护栏:选了 Codex 会挂一条说明,讲清楚它只有粗粒度沙箱、撞到限制会直接报错而不是弹
「批准这条命令」的卡片。免得用户按 Claude 的心智去用。
- 装没装:当场检测并提示,没装时按警示色显示。
- 可执行文件的 placeholder 跟着后端走。
文案 5 语言齐全。
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com >
* fix(coding-agent): harden Codex execution
---------
Co-authored-by: Claude Opus 5 <noreply@anthropic.com >
Co-authored-by: Chris233 <h-chris233@outlook.com >
2026-08-21 22:07:10 +08:00
sim
1933a283c6
chore(release): prepare 1.3.18-Beta.5
2026-08-21 14:24:56 +08:00
Jimmy Lee and Chris233
42c1b31754
本地模型增加whisper相关模型的支持; 增加qwen3-asr的rust版本, 相比C版本速度更快 ( #940 )
...
* feat: add selectable local ASR backends
* fix(build): 修复本地 ASR 多平台构建与旧渠道兼容
* fix(asr): 修复 MLX 权重跨线程 stream 错误
* fix(ci): exclude MLX Qwen3 from non-macOS jobs
* fix(ci): use app-relative ASR submodule path
* fix(android): skip qwen-asr C backend
* fix(android): guard qwen-asr by target triple
* fix(ci): 修正语法错误
* fix(ci): remove invalid checkout step options
* fix(asr): harden local backend integration
* fix(asr): 处理 PR #940 审查发现(9 项)
- strip: 全局保留 symbols,macOS release profile 单独退回 debuginfo(Homebrew rustc 的 LINKEDIT 问题仅限 macOS)
- 转录超时改为驱逐引擎而非无效 cancel():spawn_blocking 解码任务无法被中止,驱逐后下次会话加载新引擎而非排队
- Turbo/Q5 共享目录模型在 is_downloaded/downloaded_bytes/delete_model 上互相认账
- MLX 临时 WAV 用 RAII guard 兜底清理;HF tree API 改 Link rel=next 游标分页(offset 被服务器静默忽略),带防御上限与 5 个单测
- Intel Mac 渠道下拉不再闪现 MLX 预设;MetalToolchainGuide 默认折叠并标注仅源码构建期要求
- qwen3-asr-rs 子模块 URL 与 gitlink 指向 Open-Less org 镜像,嵌套 mlx-c 同步改指 org(供应链 N-6)
- README/注释补充:所有平台源码构建均需递归初始化子模块(path 依赖跨 target 解析)
* fix: harden local whisper model lifecycle and downloads
* fix(asr): address PR 940 review findings
* fix(ci): add local ASR model stub to backend tests
* fix(linux): bundle and sync fcitx5 selection plugin
* fix(macos): avoid duplicate whisper test module
* fix(history): make detail sibling keys unique
* fix(ci): stub macos whisper model constant
* test(ci): avoid macOS streaming timeout race
---------
Co-authored-by: Chris233 <h-chris233@outlook.com >
2026-08-20 20:22:02 +08:00
aeoform and Chris233
33467a36ea
feat(linux): 选区读取集成进 fcitx5 插件(clipboard addon),删除外部工具依赖 ( #961 )
...
* feat(linux): 选区读取集成进 fcitx5 插件(clipboard addon),删除外部工具依赖
- openless 插件新增 GetSelectionText DBus 方法:直读 fcitx clipboard addon
的 PRIMARY 选区缓存(X11 XFIXES / Wayland data-control 统一维护),与
fcitx 剪贴板模块来源一致,不触碰用户剪贴板
- CMake 增加 Fcitx5::Module::Clipboard 依赖
- Rust 侧 selection 改走插件 GetSelectionText,删除 wl-paste/xclip/xsel
外部工具路径及 linux_selection_tools_missing 提醒机制(前端
selection_warning 状态机、i18n、测试一并删除)
- acceptQaSessionEvent 的 idle 分支不再依赖 selection_warning 字段,
一律视为新会话 token(事件保序,语义等价)
- 打字提问路径(QA 面板 / less-computer)不再 emit Polishing capsule:
回答在面板内可见,避免 Linux 输入法 auxDown 闪「✨ 润色中...」
(cherry picked from commit 384f8876a490cb3e8e992af05cdad33f2af6a8ec)
* fix(linux): bundle and sync fcitx5 selection plugin
(cherry picked from commit 7e8bf825c08f5e935c7a25746c121136d92b7926)
* fix(linux): use DBus selection reader during validation
(cherry picked from commit d13403343b08fe1b4070e0f0d2f219a0a69d363e)
* refactor(linux): 收尾 PR 961 审查发现的小毛病
- capsule 反馈参数从裸 bool 改为具名枚举 CapsuleFeedback(Show/Hide):
语音/听写路径 Show、打字路径 Hide,调用点自文档化,避免将来误传
- AppImage 插件子路径提取为 APPIMAGE_PLUGIN_SUBDIR 常量并注明与 CI
bundle.resources 的契约,避免三处硬编码静默失配
- selection.rs 移除文件级 Linux 大赦(lib.rs 的 crate 级兜底仍在),
Duration import 按平台限定,消除 Linux unused 隐患
---------
Co-authored-by: Chris233 <h-chris233@outlook.com >
2026-08-19 20:34:10 +08:00
King and Chris233
c84bfb98f3
chore(ci): optimize CI caching, concurrency, and Tauri security ( #937 )
...
* ci: optimize CI caching, concurrency, and Tauri security
Address multiple CI/CD efficiency and security gaps identified during
project optimization analysis. The changes reduce PR build times,
prevent wasteful concurrent runs, tighten the Tauri security boundary,
and eliminate unnecessary submodule fetches on non-macOS jobs.
CI workflow improvements:
- Add swatinem/rust-cache@v2 to both ci.yml jobs (android-check and
cross-platform), matching the caching already present in
release-tauri.yml. This converts PR Rust compilation from full
rebuilds to incremental builds, saving an estimated 60-80% of
compile time per run.
- Add concurrency groups to all three workflows. PR pushes cancel
superseded runs to free concurrency slots; tag pushes and manual
dispatches are isolated by run_id to avoid mutually canceling
release builds. Previously, rapid PR pushes triggered redundant
parallel CI runs with no cancellation.
- Unify Node version to 22 across release-tauri.yml and
android-apk.yml, which were previously pinned to 20. This ensures
consistent build environments across all workflows.
Submodule and security hardening:
- Conditionally fetch the vendor/qwen-asr submodule only on macOS
jobs across all three workflows. The submodule is compiled
exclusively by build.rs on macOS (build_qwen_asr_macos); Linux,
Windows, and Android builds never reference it. Removing the
unconditional recursive checkout eliminates a network fetch and
a submodule-availability failure point on every non-macOS job.
- Set withGlobalTauri to false in tauri.conf.json. The frontend
exclusively uses @tauri-apps/api imports and never references the
window.__TAURI__ global, so disabling it removes an unnecessary
XSS attack surface without functional impact.
Dependency hygiene:
- Move @types/dompurify from dependencies to devDependencies in
package.json. Type declaration packages are build-time only and
should not ship in the production bundle.
* fix(ci): address review findings
* fix(ci): isolate manual CI workflow runs
---------
Co-authored-by: Chris233 <h-chris233@outlook.com >
2026-08-10 23:06:12 +08:00
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
浩彬(^-^) and Cursor
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
TRIP and sim
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
TRIP and sim
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
TRIP and sim
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
HKLHaoBin and Cursor
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
HKLHaoBin and Cursor
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
HKLHaoBin and Cursor
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
HKLHaoBin and Cursor
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
HKLHaoBin and Cursor
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
HKLHaoBin and Cursor
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
aeoform and Claude 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
aeoform and Claude 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
浩彬(^-^) and Cursor
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
aeoform and Claude 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
TRIP and baiqing
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