Commit Graph
1259 Commits
Author SHA1 Message Date
HKLHaoBinandCursor 63040b2028 feat(ui): 深色模式与主题 token 及选中态修复
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-14 19:03:02 +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 6aedfb087a perf(ui): code-split per-window screens so each webview loads only its own code
All 5 webviews (settings/capsule/qa/less-computer/glow) shared one ~942KB bundle, so every WebKit content process parsed+held the entire app (settings UI + LocalAsr 3.4k LOC + Style + Marketplace + chat panels). React.lazy each window root: FloatingShell (settings, 352KB) + QaPanel + LessComputerPanel + LessComputerGlow + Onboarding + AutoUpdateGate are now separate chunks loaded on demand. Capsule kept eager (tiny + latency-sensitive). Secondary webviews no longer load the settings UI → much lower resident memory per process.

Frontend-only, build-verified (chunks split, tsc+vite pass). Runtime-sanity: open settings / QA / Less Computer / glow once to confirm they still render (Suspense fallback is blank during first chunk load).
2026-06-14 13:57:43 +08:00
Chris233 3cc4576b12 Merge pull request #659 from HKLHaoBin/feat/mobile-portrait-ui
feat(ui): 移动端竖屏 UI 适配
2026-06-14 13:38:11 +08:00
github-actions[bot] 14802f3e5d [cask] openless 1.3.8 (auto from release) [skip ci] 2026-06-14 04:03:23 +00: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 b29c624d08 fix(macos): convert capsule to non-activating NSPanel so it overlays fullscreen apps
v1.3.7 fixed cross-desktop but not fullscreen: a plain NSWindow can't draw over ANOTHER app's fullscreen Space even with CanJoinAllSpaces+FullScreenAuxiliary+level (known Tauri limit: tauri#9556/#11488). The window must be a non-activating NSPanel. Add tauri-nspanel (macOS-only git dep), register the plugin, and convert the capsule via to_panel() at setup with NSNonactivatingPanel mask + FullScreenAuxiliary|CanJoinAllSpaces + level 25, per the plugin's own fullscreen example.

Note: Cargo.lock not regenerable here (no local cargo) — CI resolves the git dep; commit the lock update after the first local 'tauri dev'. Runtime-verify on macOS before release.
2026-06-14 11:16:42 +08:00
github-actions[bot] 96acd715c2 [cask] openless 1.3.7 (auto from release) [skip ci] 2026-06-13 16:50:55 +00: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 12fa110795 fix(macos): raise capsule window level to 25 so it overlays fullscreen apps
v1.3.6-5 fixed cross-desktop following but not fullscreen: FULL_SCREEN_AUXILIARY only lets the capsule JOIN the fullscreen Space; at alwaysOnTop's floating level (~3) it still renders behind the fullscreen window. setLevel(25) (above the menu bar, matching show_less_computer_glow which does overlay fullscreen) makes it render on top. Add a contract assertion to lock it in.

Runtime-verify on macOS: enter a fullscreen app, trigger dictation, capsule should now appear over it.
2026-06-13 23:59:43 +08:00
HKLHaoBinandCursor 452dca0a13 fix(scripts): improve android-ui-verify uninstall and screencap on Windows
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-13 23:34:54 +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
Andy Jiang 35831499e3 fix(a11y): restore --ol-ink-4 WCAG AA contrast; trim stale aura-skin contract
AURA->beta-3 revert lowered light --ol-ink-4 alpha 0.58->0.42 (muted text 2.88:1, fails WCAG AA); restore 0.58 (~5.1:1). Trim aura-skin contract: drop assertions for revert-deleted theme switching / solid tokens / .ol-aura-* classes. Dark-mode-only guards parked pending the post-revert dark-mode decision.
2026-06-13 23:18:13 +08:00
Andy Jiang 11e536d3c5 perf(ui): rAF-throttle streaming markdown + capsule per-frame style
Add useRafThrottle; QaPanel/LessComputerPanel parse streamed markdown at frame-rate instead of per-token (was O(n^2)); LessComputer DOM-measure + IPC window-resize coalesced to one per frame. Capsule keyframes injected once into document.head instead of re-created every ~60Hz audio-level frame.
2026-06-13 23:18:13 +08:00
Andy Jiang 33b0e5ea38 perf(backend)+fix(macos): perf quick-wins, capsule across Spaces, drop dead coordinator files
Backend perf: add [profile.release] (lto=thin/codegen-units=1/strip); tray mic watcher 1.5s->10s; global-hotkey dispatcher blocks on recv() instead of 250ms poll; coding_agent supervisor exits on non-macOS instead of 5s poll; cache+reuse reqwest client across utterances (net.rs) in OpenAI/Codex/Gemini providers (kills per-utterance cold TLS handshake).

fix(macos): capsule joins all Spaces + fullscreen via an absolute setCollectionBehavior(273) matching show_less_computer_glow; drop the racy Tauri set_visible_on_all_workspaces that deferred-overwrote the manual FullScreenAuxiliary bit.

chore: remove 12 orphaned coordinator/*.rs (never mod-declared -> not compiled); repoint macos-capsule-spaces contract test to the live coordinator.rs.
2026-06-13 23:18:13 +08:00
HKLHaoBinandCursor 5e2663b26b feat(ui): add mobile portrait shell with bottom nav and responsive pages
Replace fixed sidebar on narrow/Android with top bar, bottom tabs, and more sheet; adapt Overview, History, Vocab, and Settings for portrait; add android-ui-verify.ps1.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-13 23:13:39 +08:00
HKLHaoBinandCursor aaf4ccce92 chore(updater): rotate minisign pubkey for CI release signing
Pair with TAURI_SIGNING_PRIVATE_KEY set via gh secret set. Old pubkey superseded for new tag releases.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-13 21:44:25 +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 c3bd3c346a fix(android): resolve updater compile errors for mobile build
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-13 20:00:00 +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
baiqing 24049d9472 chore(release): bump version to 1.3.6-4 (Beta) — 回退 AURA 界面大改到旧外观、保留功能 + ASR 本地引擎可切换 + 风格页性能修复(#656) + macOS capsule 监听修复(#649) 2026-06-13 14:18:23 +08:00
TRIP dbb0676ccb Merge pull request #656 from Open-Less/revert/aura-ui-to-beta3-keep-features
revert(ui): 回退 AURA 界面大改到 beta-3 外观,保留功能与今日修复
2026-06-13 14:12:11 +08:00
baiqing 760f662f73 fix(style): 风格编辑器输入框背景用主题 token,修复回退后暗色模式白底
beta-3 的 Style.tsx 把输入/文本域背景写死 #fff,回退后在系统暗色模式下
会显示刺眼白底。改回 var(--ol-style-input-bg)(浅色 rgba(255,255,255,.86)、
暗色 rgba(255,255,255,.04)),随主题自动跟随。Claude 审核指出。
2026-06-13 14:00:36 +08:00
baiqing 5671805a09 revert(ui): 回退 AURA 界面大改到 beta-3 外观,保留功能与今日修复
把 #650 引入的 AURA / 玻璃拟态界面大改回退到 beta-3 (v1.3.6-3) 的外观,同时保留
AURA 期间合入的功能与今日两处行为修复。

回退到 beta-3:
- 外壳 FloatingShell、概览 / 历史页、卡片按钮 _atoms、设置弹窗、tokens.css / global.css
- 移除随 AURA 加入的主题切换(themeMode.ts / ThemeSection.tsx)
- 设置关闭按钮去掉圆形底(beta-3 本就透明)

保留:Apple 语音、手机远程录入、安卓、划词追问等功能,后端不动。

今日行为修复:
- 风格页切换不再卡顿(prefs:changed 监听只订阅一次 + motion layoutDependency 限制 layout 重测)
- ASR 本地引擎不再锁死,可在 provider 页直接切换(Apple 语音 macOS 直接可选)

为划词追问页补回其引用的 6 个 solid / radius token,避免回退后丢色。
2026-06-13 13:48:18 +08:00
TRIP 8142cceebd Merge pull request #649 from aron-76/codex/macos-capsule-input-monitor
Fix macOS capsule monitor targeting
2026-06-13 10:47:00 +08:00
TRIP 8c1e0c50e3 Merge pull request #652 from HKLHaoBin/feat/card-ui-unification
fix(ui): 统一卡片样式并修复深色模式可读性
2026-06-13 10:39:37 +08:00
HKLHaoBinandCursor 356e8ad480 Fix Style page dark mode readability with style tokens.
Replace hardcoded light card backgrounds with --ol-style-* tokens and strengthen dark subtle/input contrast.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-13 00:47:53 +08:00
HKLHaoBin 012cb77cea 统一卡片 UI 设计,优化主题切换与背景样式 2026-06-12 23:15:12 +08:00
HKLHaoBinandCursor 00fd21d78e Add system/light/dark theme switching in settings.
Apply theme before first paint via main.tsx, persist preference locally, and expose a segmented control in General settings with aura-skin contract coverage.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-12 22:10:53 +08:00
aron-76 601c4700e9 fix macos capsule monitor targeting 2026-06-12 21:38:17 +08:00
HKLHaoBin e330edef14 重构样式与组件以提高一致性并优化设计
• 更新了 Card 组件样式,采用新的变量来实现玻璃拟态效果和阴影。
• 修改了 Btn 组件中的按钮样式,以符合新的颜色令牌(tokens)。
• 调整了 Collapsible 组件样式,以获得更好的边框和背景一致性。
• 统一了各设置组件的边框圆角和背景颜色。
• 增强了 AboutSection、CheckUpdateButton 及其他板块,以利用新的设计令牌。
• 优化了应用外壳(app shell)和 aura 表面的全局样式,确保视觉效果的一致性。
• 引入了新的颜色令牌,以实现更好的主题管理和无障碍性。
• 更新了多个组件的 CSS,以反映设计系统的变更,包括按钮状态和背景。
2026-06-12 21:14:16 +08:00
Chris233 81b7cfffb6 Merge pull request #650 from HKLHaoBin/openless-android-beta-to-beta
feat(android): 将 Android APK 运行时移植到 beta
2026-06-12 19:03:02 +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
Chris233 8b7dd83dcc Merge pull request #646 from katanumahotori/codex/whisper-dynamic-timeout-upstream
Scale Cloud Whisper timeout for long recordings
2026-06-12 16:10:16 +08:00
片沼ほとりandCodex c7a65b92c3 Handle Apple Speech retranscription timeout
Co-Authored-By: Codex <codex@openai.com>
2026-06-12 08:24:32 +09:00
片沼ほとりandCodex 0ba04c13e0 Scale cloud Whisper timeout for long recordings
Co-Authored-By: Codex <codex@openai.com>
2026-06-12 08:11:04 +09:00
Chris233 834dd6398e Merge pull request #636 from Open-Less/feat/issue-574-apple-speech-asr-wire
feat(asr): Apple Speech 本地 ASR provider (macOS) — 完成 #574
2026-06-11 16:58:37 +08:00
Chris233 91023ed806 Merge pull request #618 from ciddwd/feat/mobile-remote-input
Feat/mobile remote input
2026-06-11 16:58:16 +08:00
Chris233 67447e6232 Merge pull request #637 from Open-Less/feat/issue-613-retain-recording-retranscribe
feat(history): 转录失败保留录音 + 历史「重新转录」(#613)
2026-06-11 16:57:45 +08:00
吕柏青andClaude Fable 5 7b71dc55ca feat(history): 转录失败保留录音 + 历史「重新转录」(issue #613)
ASR 转录失败时若本次录音已归档,写一条 transcribeFailed 历史记录,让用户能在
历史页回放原始录音并对其重新转录,不再丢失可恢复的语音内容。

后端:
- dictation_end: 新增 write_transcribe_failed_history 辅助函数,在 14 处真实
  转录失败分支(各 provider 的 Ok(Err)/超时;不含 cancel/empty 分支)写历史。
  history id 用 coordinator session_id,与归档 wav 文件名对齐,回放/重转才能命中。
  仅在录音确已归档时写(沿用 empty-transcript「以实际归档状态为准」语义)。
- coordinator: retranscribe_pcm —— 复用 build_qa_asr_start,用当前 provider 对一段
  PCM 重新转录,统一覆盖流式/批处理全部 provider,整段超时兜底。
- persistence: HistoryStore::update_entry,原地按 id 替换历史条目(保持位置)。
- commands/history: retranscribe_recording 命令 —— 读归档 wav→取 PCM→重转→回写
  rawTranscript/finalText 并清 error_code,返回更新后的整条记录。已注册到 lib.rs。

前端:
- ipc: retranscribeRecording。
- History.tsx: 失败条目(有 errorCode)且录音仍在时显示「重新转录」按钮,
  loading 态防重复点击,成功后局部刷新该条。
- i18n: history.retranscribe / retranscribing / retranscribeFailed(5 语言)。

仅做 ASR 重转,不自动二次润色(依赖 LLM 凭据且 issue 标为待定,留作后续)。
验证:cargo check + cargo test(481 通过)+ npm run build 均通过。

Closes #613

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-10 15:26:03 +08:00
ciddwd 6e62009260 fix(remote-input): 全面自审——修复 2 个 HIGH 竞态与一批中危问题
按评审机器人的维度(安全/并发/资源/错误处理/边界)对远程输入全部改动面
做了一轮地毯式自审,修复如下:

Rust 核心(2 HIGH + 3 medium):
- [HIGH] start_remote_dictation TOCTOU:busy 预检查与 remote_source_active
  置位原在锁外,竞态输家把残留标志泄给抢先启动的本地会话(被劫持进远程
  分支:不开麦克风、听写全文经 remote:result 泄给手机)。新增
  begin_session_with_source(remote),busy 判定与置位移入 begin_session_state
  同一临界区(与本地路径同构);busy 时返回 Err(REMOTE_BUSY) 供手机回执。
- [HIGH] 服务关停/重置 PIN 不撤销存量连接:连接任务是裸 spawn,shutdown 只
  停 accept loop,已配对手机仍能录音落字。新增 watch 关停广播,shutdown 时
  断开全部存量 WS 连接(旧 handle 被覆盖时靠 sender drop 自动生效)。
- end_session 新增 RemoteFlagsJanitor(Drop 兜底):十余处终结路径统一在
  会话回 Idle 时清远程标志;同时修复 double-stop 过早清标志导致「仅回传」
  失效与 remote:result 丢失(phase 非 Idle 不清)。
- stop/cancel_remote_dictation 加守卫:手机 stop/断连不再能终止 PC 用户
  正在进行的本地听写。
- refresh_remote_server 串行化(异步锁 + 代数):连点开关/连改端口不再交错
  启动、误报 port-in-use;中间代直接让位只跑最后一轮。
- WS 主循环加 keepalive(30s Ping / 90s 无上行断开):手机息屏不发 FIN 时
  半开连接与录音会话不再悬挂;PCM 单帧加 64KB 上限防认证后 DoS。
- 私钥 remote-key-v4.der 在 Unix 下收紧为 0600。

H5 录音页(4 medium + 1 low):
- getUserMedia 超时后迟到 resolve 用代际计数作废,不再泄漏麦克风轨道;
- hold 按下立即松手不再发孤立 stop(startSent 配对),transcribing/polishing
  加 30s 客户端兜底超时,UI 不再可能永久卡「识别中…」;
- iOS 来电/Siri 后的 'interrupted' 状态改为非 running 即 resume;
- sessionStorage 被禁时写后读回校验,根除无限 reload 循环;
- readyTimer/busyTimer 统一跟踪清理,杜绝迟到定时器错盖新状态。

设置页(2 medium + 1 low):
- listen() 异步注册 vs 卸载竞态:注册完成若已卸载立即退订;
- 端口输入改草稿+失焦提交:不再逐键重启服务,clamp 对齐 [1024,65535],
  取整防 u16 反序列化失败;
- 重置 PIN 用命令返回值本地更新,不再撞异步重启窗口闪烁,并加错误处理。

验证:cargo check 0 错误;cargo test --lib 508 过(5 例失败为基线既有 asr
mock);tsc 通过;node --check app.js 通过。
2026-06-10 15:19:09 +08:00
吕柏青andClaude Fable 5 050927e719 feat(asr): Apple Speech 本地 ASR 接线 — dictation/QA/cancel + 平台门控 (issue #574)
承接草稿 PR #625 的 provider 基础,补完后端接线:
- coordinator: ActiveAsr::AppleSpeech 变体(macOS only)
- asr_setup: build_apple_speech + ensure_asr_credentials 平台门控 +
  build_qa_asr_start QA 接线 + is_keyless_local_asr_provider
- dictation_session/dictation_end: 听写 start + 批处理 transcribe(沿用
  local_qwen 动态超时)
- qa_session: QA transcribe arm
- resources: cancel arm
- commands: active_apple_speech_asr_is_supported(非 macOS 返回 false)+
  keyless 校验白名单 + asr_configured_for_provider + set_active_asr_provider
  非 macOS 拒绝门控

provider 仅 macOS 编译;非 macOS 由门控判不可用。前端 UI/i18n 已随 #625 落地。
验证:cargo check(macOS)通过、provider 单测 5/5 通过、npm run build 通过。

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-10 15:00:14 +08:00
ciddwd 23cc80ea23 fix(remote-input): 启动错误按 reason 区分展示 + 清理证书过时注释
1. 错误粒度:remote-input:error 携带的 reason 之前被前端忽略,任何启动失败
   (TLS/权限/证书生成)都显示「端口被占用」误导排查。现在仅 reason ==
   'port-in-use' 时显示端口文案,其余显示通用 startError + 原始 reason
   (5 语言)。
2. load_or_generate_cert 残留 v3 时代「做成自签名 CA」的过时注释,与下方
   v4「非 CA 服务器证书」的实现矛盾(review 机器人因此误判 iOS 不可用)。
   统一为:主路径页面级例外,cert.cer/mobileconfig 是系统级安装兜底。

验证:cargo check 通过;tsc 通过。
2026-06-10 14:57:14 +08:00
ciddwd d3f2e33054 fix(remote-input): verify_hello 锁定检查与失败累计合并到同一临界区
之前分两次拿锁:同一 IP 的并发握手可以都先通过锁定检查、再各自累计失败,
让计数越过 PIN_MAX_FAILS 却不触发锁定。合并后并发请求无法在检查与累计之间
穿插。PIN 比较本身无共享状态,留在锁外。

另:cancel_remote_dictation 补注释说明 double-cancel(stop 收尾后断连)下
cancel_session 经 begin_cancel_session_state 返回 None 早退,是安全 no-op
(review 提到的 panic 不存在)。

验证:cargo check 通过。
2026-06-10 14:50:04 +08:00
吕柏青 7ed72be76e feat(asr): Apple Speech 本地 ASR provider 基础(Draft, issue #574)
从旧 WIP 分支抢救 provider 并重新落到当前 beta 结构;只含可干净合并的基础,coordinator/dictation 接线、命令、完整编译验证待后续(见 PR 待办)。

- asr/local/apple_speech_provider.rs:SFSpeechRecognizer 批处理识别 + 授权 + objc2 桥接 + 单测
- asr/local/mod.rs:注册 + APPLE_SPEECH_PROVIDER_ID + is_apple_speech
- build.rs:链接 Speech.framework(macOS);Info.plist:NSSpeechRecognitionUsageDescription
- 前端:LocalAsr / ProvidersSection / Overview / shared + 5 语言 i18n
2026-06-10 14:49:24 +08:00
Chris233 4dcd16debb Merge pull request #635 from zouzhe1/fix/mimo-asr-credential-gate
fix(asr): validate MiMo credentials as ASR provider
2026-06-10 13:53:48 +08:00