TRIP and HKLHaoBin
6f9af89583
release: OpenLess 2.0.0-Beta.4+build.20260930 ( #1126 )
...
Integrate ASR/Omni fixes, API Route, Android IME and confirmation-based vocabulary learning. Complete settings transitions and macOS single-item credential storage. Synchronize all application versions to 2.0.0-Beta.4+build.20260930.
Integrated PRs: #1116 , #1120 , #1121 , #1123 , #1124 , #1067 and #1128 . Linux #1117 remains independent and is excluded from automatic release.
Validated: full cross-platform CI, 18 UI motion cases, 112 frontend test files, 1245 Core tests (1 ignored) and 572 macOS native tests.
Co-authored-by: HKLHaoBin <we3q@qq.com >
2026-09-30 20:32:53 +08:00
sim
60b43e25cf
chore(release): prepare 2.0.0-Beta.3 build 20260926
...
Roll the Beta 3 dated build metadata from 20260925 to the publish date.
The 2026-09-26 Omni audio data-URL supplement folds into this same
Beta.3 build with the numeric Beta tag staying updater-compatible.
2026-09-26 17:56:56 +08:00
06db7d2978
chore(release): integrate reviewed changes for Beta 3 build 20260925
...
Integrate Android CI acceleration, modifier-only dictation chords,
Requesty, and remote-input generation guards over the verified Beta 2
baseline and macOS CI improvements. Fix review findings in signing
configuration caching, APK validation, and modifier arbitration/recording.
Keep Linux egui and its release workflows identical to Beta 2.
Co-authored-by: HKLHaoBin <we3q@qq.com >
Co-authored-by: leolulu <35873316+leolulu@users.noreply.github.com >
Co-authored-by: Thibault Jaigu <thibault.jaigu@gmail.com >
Co-authored-by: Ethan <257484394+EthanYoQ@users.noreply.github.com >
2026-09-25 23:52:47 +08:00
sim
a473268557
fix(release): keep dated build metadata compatible with NSIS
2026-09-24 17:49:58 +08:00
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
EddieLin
83be689c19
fix(less-computer): 升级 @shadcn/react 到 0.2.1,修复聊天框不自动滚到底 ( #1070 )
...
0.2.0 的 MessageScroller 在流式输出期间有竞态:自动滚动后约 180ms 的
状态复核若恰好落在新内容已提交、ResizeObserver 尚未触发的间隙,会把
跟随底部误判为用户滚走,此后不再跟随。上游 shadcn-ui/ui#11106 已修,
随 0.2.1 发布;0.2.1 在现有 ^0.2.0 范围内,接口与 peer 依赖不变。
Fixes #1010
2026-09-13 18:09:05 +08:00
sim
4519f19c92
style(app): 统一前端与平台源码格式
2026-09-08 14:35:28 +08:00
sim
639c2fbf9b
chore: 删除未使用死文件与零引用依赖
...
前端:chat 桶文件、SegSimple、SwitchLite、androidMicrophonePermission 转发
shim、SelectionPolishSection 孤儿分区、autostart 环境类型声明;依赖移除
@formkit/auto-animate 与 @tauri-apps/plugin-autostart npm 包装层(Rust 插件
与 capability 保留,autostart 经原生 invoke 字符串调用)。
Rust:polish 旧副本两文件、android/types.rs、remote_server/lan_addresses.rs
(均为 Core 2.0 整合遗留,模块树未引用,编译行为不变)。
npm test 构建与全部测试通过;三 crate cargo fmt --check 干净。
2026-09-07 13:36:08 +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
Chris233
5d379f2849
chore(release): 1.3.18-Beta.7
2026-08-24 22:36:11 +08:00
Chris233
86012fce42
chore(release): prepare 1.3.18-Beta.6
2026-08-21 18:37:23 +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
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
浩彬(^-^) 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
TRIP and sim
b83b566cb4
chore(release): prepare 1.3.16(正式版版本号) ( #919 )
...
1.3.16-Beta.1 → 1.3.16(package.json / package-lock.json / tauri.conf.json /
Cargo.toml [package] / Cargo.lock openless 块;手工编辑,bump-version.sh 不支持
-Beta.N 后缀,keyring 依赖 3.6.3 已锚定 section 未被误改)
Co-authored-by: sim <sim@local>
2026-08-05 15:17:51 +08:00
TRIP and sim
d31cafd2d8
chore(release): prepare 1.3.16-Beta.1 ( #913 )
...
版本号 1.3.15 → 1.3.16-Beta.1(package.json / package-lock.json /
tauri.conf.json / Cargo.toml [package] / Cargo.lock openless 块,手工编辑——
bump-version.sh 不支持 -Beta.N 后缀,keyring 依赖版本 3.6.3 已锚定 section
未被误改)
Co-authored-by: sim <sim@local>
2026-08-04 18:23:47 +08:00
TRIP and sim
a3d014b687
chore(release): prepare 1.3.15(正式版版本号)+ 修复 bump 脚本误改依赖版本 ( #893 )
...
* fix(scripts): bump-version.sh 锚定 [package] 段,避免误改依赖版本
* chore(release): prepare 1.3.15
---------
Co-authored-by: sim <sim@local>
2026-08-03 21:27:10 +08:00
TRIP and sim
73e65a4077
chore(release): prepare 1.3.15-Beta.4 ( #889 )
...
Co-authored-by: sim <sim@local>
2026-08-03 16:05:44 +08:00
sim
dd90c13ae3
chore(release): prepare 1.3.15-Beta.3
2026-08-03 12:36:02 +08:00
浩彬(^-^) and Cursor
7ad24d3e94
fix(android): persist prefs/logs under app filesDir ( #877 )
...
* fix(android): use app filesDir for persistence and SAF log export
Honor devices reject writes under /data/local/tmp, which caused PreferencesStore to fall back to openless_prefs_fallback.json and settings saves to fail. Initialize JNI storage roots before Coordinator and file logging, route logs to files/logs/openless.log, and export via ContentResolver for SAF content:// URIs.
* fix(android): guard StylePack empty asset_root and Android-only coord logs
Reject persisting style pack icons when asset_root is empty to avoid writing under cwd; no-op cleanup on empty root. Limit Coordinator persistence degrade log suffix to Android only. Add unit test.
Co-authored-by: Cursor <cursoragent@cursor.com >
---------
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-08-02 20:04:18 +08:00
sim
6b33ba21e0
fix(updater): prepare 1.3.15-Beta.2 after repository transfer
2026-07-19 00:11:34 +08:00
TRIP and sim
033eb5e731
chore(release): prepare 1.3.15-Beta.1 ( #834 )
...
Co-authored-by: sim <sim@local>
2026-07-15 17:22:02 +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
TRIP and sim
a5a9c7f0b5
test: pin local tsx runner ( #828 )
...
Co-authored-by: sim <sim@local>
2026-07-15 13:44:39 +08:00
TRIP and sim
d6ca07a6b2
fix(android): break IPC settings barrel cycle ( #827 )
...
Co-authored-by: sim <sim@local>
2026-07-15 13:20:57 +08:00
TRIP and sim
d8789c783d
feat: 统一聊天面板(官方 shadcn)+ 1.3.14 审计修复批 + CVE 补丁 ( #767 )
...
* fix(deps): patch tauri-plugin-shell CVE (GHSA-c9pr-q8gx-3mgp)
@tauri-apps/plugin-shell (npm) 与 tauri-plugin-shell (crate) 的声明下限
——npm `^2.0.1`、crate `"2"`——都落在 GHSA-c9pr-q8gx-3mgp 影响范围
(`< 2.2.1`,CRITICAL:`open` 端点作用域校验绕过,可致 RCE)。本项目
src/lib/ipc/utils.ts 正是通过该 `open` 端点打开外链,属受影响用法。
两个 lockfile 实际已解析到 2.3.5,但清单声明的下限仍是漏洞版本,供应链
扫描(SkillSpector SC4)因此读取到 2.0.1 报警。此处仅把两侧声明下限抬到
最新安全版 2.3.5,使清单与锁定版本一致、扫描不再命中;解析版本不变,无
运行时行为变化。
Closes #668
* fix(audit): 1.3.14 审计修复一批(Apple Speech 取消/IME 保存锁死/侧向键卡死/火山429 等)
- CRIT Apple Speech 取消/超时不终止 SFSpeechRecognitionTask(SendableTask+cancel_flag+[task cancel]+100ms 轮询)
- HIGH windows_ime 未安装分支反致设置保存事务锁死(抽纯函数 keyboard_list_pref_short_circuit)
- HIGH 侧向键 Released 卡死自愈 + macOS flags 类位竞态 + Linux 显式拒绝
- HIGH coordinator/hotkey_loops unused_assignments clippy 回归
- MED 火山 429 限流不重试(RateLimited)/ Heatmap clamp / 授权失败反馈 / SendInput 分类单一真相 / SendInputOptions 收敛
- 清理 删死码 ?? '重启' / side_aware 死字段 / 孤儿 MarketplaceModal
cargo test 552-0 / npm build 绿。windows cfg 部分需 CI 四平台验证。
* feat(chat): 统一聊天面板组件库——官方 shadcn base 组件按 CLI 规则内嵌
@shadcn/react 官方 primitive + base-rhea registry 原文内嵌 components/chat/ui/
(message-scroller/marker/bubble/message/card/empty/input-group/button/input/
textarea/spinner,仅按 CLI 规则改 import 路径;button 保留 3 行 React18 inert
归一)。Tailwind v4 作用域隔离:utilities source(none) + @source 只扫聊天文件、
无层导入压过 global.css;官方主题 shadcn/tailwind.css + tw-animate-css。
胶囊同款思考动画(orbFeed 单 GL 源镜像多头像)、GitHub 头像(CSP img-src 放行)、
出现/消失生命周期 hook。平台门控:非 darwin 构建 DCE 掉 Less Computer chunk。
删除旧自制 Marker/MessageScroller 组件。
* feat(panels): QA/LC 浮窗重写为官方 message-scroller-demo 同款骨架
Card + Empty + InputGroup + MessageScroller 官方组合;QA=Message 带头像形态
(右 GitHub / 左旋转 orb),LC=Marker 工具行形态(无头像)。
语音状态只在输入区:录音红光/转译黑光绕输入组跑圈,问题落定即停;
思考头像行门控在用户消息落定之后(修「AI 头像先出现、动画抽搐」)。
LC 事件空轮自愈 + mount 后 less_computer_sync 重放(webview 冷加载丢
user 事件导致「后端在跑前端空白/用户的话不显示」)。纯白背景、官方
24px 圆角、出现/消失动画(chat-panel:shown/closing)。
* fix(backend): 聊天面板后端配套——命令注册/非激活面板/事件缓冲/生命周期
- 恢复桌面 invoke_handler 的 qa_submit_text / qa_toggle_recording(此前删
qa_window_pin 时误删相邻项,真机报 Command qa_submit_text not found)
- QA/LC 窗口转非激活 NSPanel(胶囊同管线:NonactivatingPanelMask +
CanJoinAllSpaces|FullScreenAuxiliary),chat_panel_focus_keyboard 改主线程
makeKeyAndOrderFront:打字不激活 app、主窗口不再被带出、frontmost 保持
用户原 app(划词选区在多轮期间仍可读)
- Less Computer 事件按全局单调 seq 写入环形缓冲(fresh user 清空、cap 2048
丢最旧),新命令 less_computer_sync 供前端 mount 重放(仅 less-computer
窗口可调);附 2 个单测
- show/hide 生命周期:show 发 chat-panel:shown 并作废挂起 hide;hide 先发
chat-panel:closing、240ms 后真正隐藏(AtomicU64 世代防快速关-开竞态)
- QA/LC 窗口统一固定 420×540;删除 qa_window_pin / less_computer_window_resize
整链(无消费方)
---------
Co-authored-by: sim <sim@local>
2026-07-06 22:21:16 +08:00
TRIP and sim
3ca6883d3a
fix(deps): patch tauri-plugin-shell CVE (GHSA-c9pr-q8gx-3mgp) ( #763 )
...
@tauri-apps/plugin-shell (npm) 与 tauri-plugin-shell (crate) 的声明下限
——npm `^2.0.1`、crate `"2"`——都落在 GHSA-c9pr-q8gx-3mgp 影响范围
(`< 2.2.1`,CRITICAL:`open` 端点作用域校验绕过,可致 RCE)。本项目
src/lib/ipc/utils.ts 正是通过该 `open` 端点打开外链,属受影响用法。
两个 lockfile 实际已解析到 2.3.5,但清单声明的下限仍是漏洞版本,供应链
扫描(SkillSpector SC4)因此读取到 2.0.1 报警。此处仅把两侧声明下限抬到
最新安全版 2.3.5,使清单与锁定版本一致、扫描不再命中;解析版本不变,无
运行时行为变化。
Closes #668
Co-authored-by: sim <sim@local>
2026-07-05 00:40:23 +08:00
351e0211bd
集成 1.3.14 → beta(主窗 UI 大改 + 一批 fix/feat) ( #761 )
...
* fix(insertion): macOS 让「恢复剪贴板」开关真正生效,修复被回退的 #525
#525 的 macOS 剪贴板恢复(commit 4b4d219)被 Android 移植 commit 1ea467a
连同 cfg 门控一起回退:整套恢复机制被重新 #[cfg] 排除出 macOS,macOS insert()
退回「只写剪贴板 + Cmd+V」,于是设置里的「恢复剪贴板」开关在 macOS 上完全无效
——无论开关开还是关,剪贴板都被留成转写文字。
- 把共享的剪贴板恢复机制(ClipboardRestorePlan / schedule_clipboard_restore /
restore_clipboard_after_delay / should_restore_clipboard 等)的 cfg 从
not(any(macos,android,ios)) 放宽为 not(any(android,ios)),重新纳入 macOS
(移动端仍排除;Windows/Linux 不变)。
- macOS insert() 改为:保存原剪贴板 → 写转写文字 → Cmd+V → 仅当「恢复剪贴板」
开关开启且粘贴成功时按 CLIPBOARD_RESTORE_DELAY 延迟恢复;粘贴失败则保留转写
文字供手动粘贴、不恢复。开 = 恢复,关 = 保持现状,开关说了算。
- 删除随之失效的 macos_insert_status_after_paste;恢复相关单测在 macOS 也运行。
Windows/Linux 专用项(insert_with_clipboard_restore / paste_keys /
simulate_paste(shortcut) / 其 insertion_success_status 变体)的 macOS 排除保持不变。
* fix(less-computer): 护栏 sudo/dd/chmod/chown 等设为不可批准,修批准注入畸形规则 (#679 )
旧审批流对所有命中 pattern 一律 format!("Bash({p}:*)") 生成 allow 规则:
- 对带空格/参数的子串("sudo " → "Bash(sudo :*)","dd if=" → "Bash(dd if=:*)",
"chmod -r 777 /"、"chown -r")生成的串既不等于 deny "Bash(sudo:*)" 等(故 deny
没被移除、批准静默失效),又把畸形规则注入了 allowed_tools。
改为:新增 guard::deny_rule_for_pattern(pattern),把「可批准」命令(rm -rf / git
push --force / git reset --hard / git clean 等)映射到其在 default_deny_rules 里的
**精确** deny 规则;提权/毁盘/系统级命令(sudo / dd / mkfs / chmod / chown / shutdown
/ reboot / 管道执行 / fork 炸弹)返回 None = 不可批准,即使被批准也保持拦截
(fail-closed),不再注入畸形 allow。审批流用 filter_map 取精确规则,移除的 deny 与
加入的 allow 严格一致。
附单测:每个可批准 pattern 的映射规则确实存在于 default_deny_rules;危险系统命令一律
不可批准。
* fix(ui): unify macOS shell top inset with sidebar/background surface
The 28px top inset that clears the macOS overlay traffic lights sat on the
content wrapper with no background, so it exposed the lighter WindowChrome
glass (--ol-window-bg) as a full-width band above the sidebar and panel —
reading as an extra top row that the Windows build (no inset) doesn't have.
Paint that wrapper with the same --ol-app-shell-bg the sidebar/background
already use, so the inset blends into one continuous surface with the panel
card floating on top. One property; token carries its own light + dark
values; no layout, token, or other UI changes.
* fix(capsule): 胶囊跟随鼠标光标所在屏,修复多屏/多 Space 只在第一块屏显示
多屏 + 多桌面下胶囊只出现在第一块屏、其他屏闪一下就消失。根因:定位
(position_capsule_bottom_center) 用 AX caret 选屏,多数 App 取不到 caret 矩形就
跌回胶囊自己的 current_monitor(第一块屏);而去重缓存 capsule_layout_snapshot 也
用 current_monitor,与定位看的不是同一块屏 → 胶囊一落第一块屏即被判“无变化”跳过
重定位,被锁死。两条路都没跟踪鼠标。
- 新增 mouse_cursor_point():CoreGraphics CGEventGetLocation 取光标,坐标系与 AX
一致、零权限、永远可用
- focused_input_target_monitor → capsule_target_monitor,选屏改“光标优先”(caret
仅兜底),选屏循环抽成 monitor_for_anchor_point
- 定位与去重快照统一走 capsule_target_monitor,彻底消除不一致
- 保留 CAN_JOIN_ALL_SPACES(Spaces 契约强制且本就正确:帧落在光标屏→只那块屏显示)
- 扩展 macos-capsule-spaces 契约测试,grep 守护“光标优先 + 两路共用同一函数”
Windows 路径未动(本就跟随输入 App 屏且快照一致)。
验证:cargo check + lib 纯函数单测 + check:macos-capsule-spaces 全过。
* feat(less-computer): 边缘发光改用 EdgeGlow 式四层模糊堆叠 + iridescent 配色
把 Less Computer 全屏彩虹边缘发光从原来「两条都带模糊的软光带」改成
EdgeGlow(github.com/vector4wang/EdgeGlow,MIT)的实现方式,让彩虹「实线」
更清晰、发光更有层次。
- 4 层模糊堆叠:最内一条 0.5px 锐利彩虹实线(对应 EdgeGlow blur=0 那层,
定义边缘),外面叠 3 层逐渐变宽、变虚的光晕(blur 3/8/15px),得到
霓虹灯管式发光。原生用 CAShapeLayer + 高斯模糊,这里用 CSS「边框遮罩环
+ filter:blur」等价复刻。
- 配色移植 EdgeGlow 默认的 iridescent(Apple Intelligence 高饱和霓虹:
紫→蓝→青→绿→金→橙→红→粉),按 12 段均匀铺满 360°。
- 流光整圈 8s/圈通过 --lcg-angle 旋转(只动渐变角度不动元素形状,GPU 友好),
光晕层各带不同周期呼吸;实线用 normal 保色准,光晕用 screen 叠加增亮。
保留 issue #470 的隐藏即卸载发光层(零 GPU)逻辑、pointer-events:none、
prefers-reduced-motion 降级与 --lcg-radius 圆角变量。纯视觉、仅 macOS、单文件。
* fix(vault): Windows 凭据读取瞬时失败重试,修概率性「火山引擎未配置」
Windows Credential Manager(CredReadW)在登录后/并发下读 manifest+各 chunk 条目
时可能瞬时失败。任一条目读失败会让整组凭据看起来为空 → load_keyring_credentials
返回 Err → load_credentials 回退到空默认值 → 概览页显示「火山引擎未配置」,但下
一次听写重读成功,所以是「概率性」且「实际可正常使用」。凭据 chunk 越多,单次
load 读取次数越多,命中瞬时失败的概率越高。
修法:仅在 Windows 上对非 NoEntry 的读错误做几次短退避重试(4 次 / 60·n ms)。
NoEntry 是确定的「未存储」,立即返回不付重试延迟。macOS/Linux 保持原单次行为
——它们的读错误是 ACL 拒绝,重试无益,且未缓存的错误路径下次调用本就会重读,
加 sleep 只会拖慢 macOS 首次 Keychain 授权流程。纯后端、cfg 隔离,零 PC-macOS 影响。
* fix(asr): 火山引擎连接增加超时与重试,修弱网下无法语音输入
connect_async 此前既无超时也无重试:弱网下 TLS/WebSocket 握手可能挂到 OS 级
TCP 超时(几十秒),期间用户卡在「Starting」;而协调器全局超时只覆盖
await_final_result,不覆盖 open_session,所以握手挂起完全不受约束。单次网络
抖动(连接被重置/瞬时 DNS 失败)也会直接让整次听写失败。
修法:每次握手包 5s 超时,最多 3 次尝试、250·n ms 退避。AuthRejected(凭据被拒)
短路不重试——重试不会变好只会拖慢报错。把请求构造抽成 build_connect_request
(connect_async 消费 request 且 http::Request 非 Clone,需每次重建)。
桌面与安卓共享此路径,改动对两端等效;最坏耗时从「无界(~75s)」降到有界(~15s)
并新增抖动可恢复,对 PC 端只增不减。
* feat(coding-agent): OpenCode CLI 适配器,语音 Agent 可选 OpenCode 后端 (issue #579 )
把 OpenCode 当作与 Claude Code 同类的 coding agent CLI 接入,照既有 coding_agent
适配模式(不另造架构),复用同一套 CodingAgentRequest / CodingAgentEvent /
CodingAgentError / 审批护栏链路。
后端:
- coding_agent/opencode.rs(新):detect_opencode(opencode --version)、
build_opencode_args(opencode run --format json --model --dir
[--dangerously-skip-permissions],prompt 作为 argv)、parse_opencode_json_line
(NDJSON:text/tool_use/error;text 块累计,EOF 合成 Completed)、
run_opencode_agent(取消/超时 kill,护栏经 OPENCODE_CONFIG_CONTENT 注入)。
- coding_agent/args.rs:CodingAgentProvider 枚举(claude-code-cli/opencode-cli,
未知回落 Claude)+ from_pref/default_exe。
- coding_agent/guard.rs:build_opencode_guard_config —— 把高风险 bash 前缀翻译成
OpenCode permission.bash deny glob + webfetch deny,审批放行的前缀显式 allow。
- coordinator/dictation_voice_agent: run_less_computer_once 按 coding_agent_provider
分派 Claude / OpenCode 运行器;两路都 fail-closed(护栏生成失败即中止,不裸跑)。
审批拦截探测/重跑放行链路 provider 无关,自动复用。
- commands: coding_agent_detect_opencode 命令(已注册 lib.rs)。
前端:
- CodingAgentSection: OpenCode 选项从「即将支持」改为可用 + 选中后探测安装状态并提示。
- ipc: codingAgentDetectOpencode + OpenCodeDetection。
- i18n: opencodeReady / opencodeMissing(5 语言,替换 providerOpenCodeSoon)。
验证:cargo check + cargo test(492 通过)+ npm run build 均通过。
Refs #579
(#579 还含「语音润色模型配置」:prefs 字段已存在但全链路未实现/未接 UI,
转写直接进 agent 未经语音润色模型整理 —— 故用 Refs 不用 Closes。)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
* fix(coding-agent): OpenCode 防参数注入 + 可配置 Agent 可执行文件路径 (#638 )
注入风险(@H-Chris233 评审):`opencode run` 的 prompt 作为最后位置参数,但之前缺
end-of-options 分隔。以 `-` / `--` 开头的 prompt(语音转写或被 prompt 注入诱导)会被
OpenCode 当作 flag 解析,可绕过护栏(混入 --dangerously-skip-permissions、--dir 改写
工作目录等)。修复:build_opencode_args 末尾追加 `--`,运行器把 prompt 接在其后;新增单测。
可配置路径(@PR-Agent 指出之前 hardcode "opencode"):新增 prefs.coding_agent_exe,
语音 Agent 路径据此取 exe(留空回退默认 claude / opencode),检测命令亦用配置路径;
设置「高级 → Less Computer」新增「可执行文件路径」输入;补 5 语言 i18n。
* fix(updater): 安装失败可见化 + 手动下载兜底 + 错误写日志 (#706 )
下载完成后若 install() 抛错,旧代码把 status 置成 'error',而 UpdateDialog 不渲染 error 态 → 弹框消失、错误只 console.error,用户表现为「下载后无反应、重启仍旧版」(#706 )。
- 新增独立状态 installError:仅下载/安装失败用它;'error' 仍表示「检查失败」,行为不变(CheckUpdateButton 按钮内轻提示、后台自动检查都不弹框,零回归)。
- 失败弹框留在原地显示真实错误 + 「手动下载」按钮直达 GitHub Releases 兜底。
- 新增 Rust IPC log_client_error,把前端更新错误写进 openless.log(webview console 不入文件日志),便于用户「导出日志」后定位真因。
- 5 个 i18n 文件补 updateDialog.installError / manualDownload。
注意:这是兜底(失败可见 + 可诊断),不解决 ad-hoc/quarantine 机器自动更新真正成功的问题——那需要 Apple Developer ID 签名 + 公证(本次暂缓)。
* 手动补:dictation/ipc 拆分后的 OpenCode + updater 改动迁移
* fix: AutoUpdate 兼容性修复(补回 CheckUpdateOptions + Android 参数类型)
* fix(audio-cue): 重建/唤醒退化的 AudioContext,修「用久了提示音消失」
长时间使用后「开始录音」提示音与设置页「试听」双双静音,且重启才恢复。
根因在 audioCue.ts 的 AudioContext 单例 sharedCtx 从不检查/恢复运行期状态:
- WKWebView/WebView2 在频繁录音抢占音频会话后,ctx 可能转入 WebKit 非标准的
`interrupted` 态。旧代码只判断 `suspended`,interrupted 被当作可直接排期 →
排到非 running 的 ctx 上,无声且不尝试 resume → 永久静默(macOS 最可能根因)。
- ctx 也可能被系统 `closed`。closed 无法复活(resume 必拒、createOscillator 必抛、
被 catch 静默吞掉),而 getContext 从不重建 → 永久静默。
- 胶囊窗口与设置窗口各持一份 ctx,都会这样退化 → 两处提示音同时失效。
修复:
- 新增纯函数 audioContextActionForState(state):closed→recreate / running→ready /
其余(suspended/interrupted/未知非运行态)→resume,单一真相、可单测。
- getContext 在 ctx 为 closed 时丢弃重建(并清空挂在旧 ctx 上的 activeVoices)。
- playRecordStartCue / primeAudioCue 改用该分类器,把 interrupted 一并按 resume 唤醒。
公共 API 签名不变,仅 AudioCue.tsx / RecordingInputSection.tsx 复用,行为向后兼容。
tsc --noEmit 通过;audioCue.test.ts 新增 5 条状态分类断言,全部通过。
* fix(macos): onboarding Accessibility authorization page stuck (#703 follow-up)
Root cause: permissions::request_accessibility() was called in setup(),
which runs BEFORE the AppKit event loop is live. On some macOS versions,
AXIsProcessTrustedWithOptions depends on the run loop for XPC to tccd.
When the event loop isn't ready, TCC may not show the dialog but still
consumes the one-time prompt. Later calls from the onboarding page's
'grant accessibility' button silently return Denied, trapping users on
the onboarding page. Recovery requires System Settings grant + app
restart, but users had no clear restart action — only a text hint.
Changes:
- lib.rs: Remove setup() TCC prompt. The prompt is now exclusively
triggered by user action on the onboarding page, aligning with
Apple HIG (explain why → then prompt).
- Onboarding.tsx:
* onGrantAccessibility now checks the TCC result: skip
openSystemSettings when already granted (previously always opened)
* New tccPromptShown state distinguishes 'never attempted' vs
'already denied' for correct button labels
* Denied state now shows a prominent 'Restart OpenLess' button
calling restartApp()
- PermissionsSection.tsx: Same fix for settings page accessibility
row — check TCC result, guide to System Settings when denied,
show 'Restart App' button
- i18n: Add onboarding.actionRestart + settings.permissions.restart
for zh-CN / zh-TW / en / ja / ko
Closes: macos-onboarding-accessibility-stuck
* chore(release): publish 1.3.13
* fix(audio-cue): recover when resume() is rejected or wakes non-running
Long sessions park the shared AudioContext in 'suspended' / WebKit
'interrupted' after the system audio session is repeatedly preempted by
ASR and recording. The earlier fix only recreated a 'closed' context: a
rejected resume() was swallowed and a resume() that resolved without
reaching 'running' scheduled voices on a frozen currentTime, both of
which leave the start cue permanently silent until the app restarts.
Treat both "won't wake" states as recoverable — discard the dead context
and retry once on a fresh one, bounded to avoid infinite recreation. The
decision is extracted into the pure, unit-tested cueActionAfterResume.
* chore(release): integrate 1.3.14
* fix(ipc): 去除 coding-agent.ts/index.ts 中 OpenCodeDetection 和 codingAgentDetectOpencode 的重复声明
integrate/cloud-sync-20260621 合并后 IPC barrel 出现重复 export(beta 已含 PR #638 的
OpenCode 适配器,integrate 分支又加了一份)。合并去重,npm build 通过。
* style(less-computer): 气泡/审批/发送按钮改用 accent 主题 token
把 LessComputerPanel 里三处硬编码渐变(#3d6bff→#7a55f2)替换为
--ol-accent-solid-bg / --ol-accent-solid-ink,跟随浅/深主题。
* feat(capsule/asr/ui): 胶囊即时显示与预测展开、Apple 语音修复、弹窗全局遮罩
胶囊入场(延迟出现 / 无入场动画 / 亮起→卡→展开):
- 按下热键即「乐观显示」胶囊并播入场动画,不等麦克风就绪;level_handler 首帧 PCM
到达后从预备态翻正式态、光条点亮(新增 warming 标志贯穿 emit_capsule payload)
- 修入场动画被吞:入场帧把发给前端的事件挪到 window.show 之后再 emit
- 预测式展开:光条按历史平均加载时长(EMA + localStorage 跨会话学习)从按下就平滑
展开,就绪早则加速补满、未就绪则慢爬至 90%,消除「亮起→卡→突然展开」
Apple 语音(说中文识别成英文 / 偶发不可用):
- initWithLocale 跟随用户工作语言主语言,修 init 无参落系统首选语言(英文)导致
中文被英文引擎误识别
- on-device 优先(requiresOnDeviceRecognition):离线可用 + 隐私 + 不受网络波动/限流
- isAvailable 就绪轮询等待,修刚 init 时瞬时不可用就报错的竞态
弹窗遮罩:Modal 用 createPortal 到 body,修被 WindowChrome/FloatingShell 常驻
will-change: transform 祖先困住 fixed 遮罩(登录弹窗浮在亮着的设置页上、无全局压暗)
服务页 Apple 语音文案优化(zh-CN/zh-TW)
---------
Co-authored-by: 吕柏青 <lubaiqing9@gmail.com >
Co-authored-by: sim <sim@local>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com >
2026-07-04 23:41:41 +08:00
sim
8d74b3e0eb
chore(release): prepare 1.3.13-Beta.1
2026-06-25 14:59:31 +08:00
浩彬(^-^)
fa09eaf605
feat(hotkey): support side-specific modifier combos
...
Add side-aware combo detection for dictation on macOS/Windows, shortcut recording support for side-specific modifiers, overlap validation, and tests.
2026-06-25 13:41:28 +08:00
sim
a4df800d66
chore(release): publish 1.3.12
...
- add OpenCode CLI provider support for voice agent workflows
- improve updater fallback/error visibility and compatibility
- bump app, Tauri, and Cargo versions to 1.3.12
2026-06-24 12:42:25 +08:00
Andy Jiang
950ad58006
chore(release): 1.3.11
2026-06-21 13:55:15 +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
sim
dbdc73f278
chore(release): 1.3.10 (stable / 正式版)
2026-06-18 00:33:00 +08:00
sim
412dc9968a
chore(release): 1.3.10-4 (beta)
2026-06-17 23:30:58 +08:00
sim
f94f9be07a
chore(release): 1.3.10-3 (beta)
...
Re-cut of the 1.3.10-2 beta from the synced cloud beta branch (supersedes the
-2 pre-release, which was deleted). Identical code to 1.3.10-2 — version-number
bump only. Bundles #701 persistence split, #702 top-bar unification, #703
onboarding accessibility gate, on top of 1.3.10-1 audit fixes.
2026-06-17 18:57:05 +08:00
sim
aa643b972d
chore(release): 1.3.10-2 (beta) — macOS top-bar unification + onboarding accessibility gate
...
Bundles the two macOS UX fixes already merged into beta:
- #702 unify macOS shell top inset with sidebar/background surface
- #703 require macOS Accessibility grant before first-run onboarding completes
Version synced across package.json, package-lock.json, tauri.conf.json,
Cargo.toml, Cargo.lock. Local release build verified (1.3.10-2 installs and
runs; top bar seamless; first-run requires Accessibility).
2026-06-17 17:54:09 +08:00
appergb
6aad6e814f
chore(release): 1.3.10-1 (beta) — audit fixes batch 1+2 (critical Android updater, security hardening, correctness bugs)
2026-06-17 11:45:38 +08:00
TRIP
121bb11447
fix: audit batch 1 — critical Android updater + security hardening + bug fixes ( #695 )
...
14 confirmed audit findings: critical Android auto-update fix (SUPPORTED_ABIS), security hardening (exe allowlist, window-scoped approval, update-URL validation, remote PIN rate-limit/entropy, mirror order, prompt sanitization), correctness bugs (prefs race, hotkey spawn race, voice-agent focus clear), build-hygiene, and Android robustness. All-platform CI green; 446 tests pass.
2026-06-17 11:13:27 +08:00
TRIP
0eb69fc0f4
chore: codebase cleanup + behavior-preserving refactor ( #693 )
...
Audit-driven cleanup: 6 issue fixes (#689/#686/#680/#691/#678/#612), Aura skin removal (visually-neutral), dead-code cleanup (98→87 warnings), behavior-preserving modularization (coordinator.rs 6961→3083 + LocalAsr/ + polish/ submodules), and RELEASING.md (admin-only release policy). Gates: cargo test --lib 446 passed, tsc, all-platform build + contract checks green. Supersedes #685/#687/#690/#692/#682/#681.
2026-06-16 23:22:21 +08:00
Andy Jiang
e05025a7e7
chore(release): 1.3.9 (stable / 正式版)
...
内存优化:webview 代码分割 + i18n 按需加载(index 440→285KB) + 胶囊录音帧节流 + qa/less-computer/glow 窗口懒创建(idle WebKit 进程 5→2)。含 #661 暗色模式。
2026-06-15 21:39:49 +08:00
Chris233
8e8f5fdeb5
Merge pull request #658 from HKLHaoBin/feat/android-release-pipeline
...
feat(android): 对齐移动端构建与发布流水线
2026-06-14 14:12:03 +08:00
Andy Jiang
a5188b8935
chore(release): 1.3.8 (stable / 正式版)
...
fix(macos): 胶囊转非激活 NSPanel,可叠加在全屏 app 之上(在 1.3.7 跨桌面修复之上)。注:Cargo.lock 的 tauri-nspanel 依赖由 CI/构建时解析。
2026-06-14 11:34:59 +08:00
Andy Jiang
ffeb0c4412
chore(release): 1.3.7 (stable / 正式版)
...
性能优化批 + macOS 胶囊跨桌面&全屏修复 + ink-4 对比度(AA)修复 + 清理 12 个死文件。将以 stable 渠道(v1.3.7-tauri)推送给所有用户(in-app updater + Homebrew)。
2026-06-14 00:07:49 +08:00
Andy Jiang
2e27f70472
chore(release): bump version to 1.3.6-5 (Beta)
...
性能优化:发布 profile(LTO/strip)、空闲轮询修复(托盘麦克风/全局热键/coding-agent supervisor)、LLM 连接复用、流式 markdown 帧率节流、胶囊每帧 style 提取。
fix(macos): 胶囊跨桌面/全屏跟随(collectionBehavior 绝对值)。fix(a11y): 恢复 --ol-ink-4 WCAG AA 对比度。chore: 删除 12 个未编译的孤儿 coordinator/*.rs。
2026-06-13 23:33:16 +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