HKLHaoBin and Cursor
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
HKLHaoBin and Cursor
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
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
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
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
片沼ほとり and Codex
c7a65b92c3
Handle Apple Speech retranscription timeout
...
Co-Authored-By: Codex <codex@openai.com >
2026-06-12 08:24:32 +09:00
片沼ほとり and Codex
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
吕柏青 and Claude 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
吕柏青 and Claude 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
Chris233
f6c0b3250a
Merge pull request #634 from Open-Less/fix/issue-602-keychain-prompt-storm
...
fix(vault): 保存凭据跳过未变化的 keychain 条目,修复切换供应商弹窗风暴 (#602 )
2026-06-10 12:14:59 +08:00
Chris233
cffbd06adb
Merge pull request #633 from Open-Less/fix/issue-631-capsule-click-guard
...
fix(capsule): 终态/空闲让胶囊点击穿透,修复贴近输入框误触弹主界面 (#631 )
2026-06-10 12:14:05 +08:00
ciddwd
6372ecdb24
fix(remote-input): 落实 review 三项建议
...
1. 远程标志清理收敛(修真 bug):Starting 阶段 stop 走 pending_stop 延迟
end_session 后无人清 remote_source_active,残留 true 会让下一次本地听写
误走远程分支(跳过 cpal、等不到手机 PCM)。抽 clear_remote_source_flags
并补到 pending_stop 收尾与 cancel_session(幂等,本地会话 no-op)。
2. PIN 防爆破改按源 IP 锁定:pin_fails 改 HashMap<IpAddr,_>,accept loop 经
axum Extension 注入 peer IP;带容量上限 + 过期清理,防伪造海量源 IP 撑爆。
3. 证书信任警告:mobileconfig 处注释说明安全边界(证书为非 CA 纯服务器证书,
无签发能力);设置页新增 certTrustWarning 文案(5 语言)。
验证:cargo check 通过;cargo test --lib coordinator 相关全过(asr mock 5 例
失败为基线既有,与本改动无关);tsc 通过。
2026-06-10 11:59:51 +08:00
ciddwd
797964b59e
Merge upstream/beta into feat/mobile-remote-input
...
解决与上游两次大重构的冲突:
- commands.rs 已拆为 commands/ 域模块:远程输入 4 个命令迁入新建
commands/remote_input.rs(mod.rs glob 重导出,lib.rs 零改);
set_settings 的远程服务 prefs diff 重启逻辑迁入 commands/settings.rs。
- coordinator/dictation.rs 已拆为 5 个子模块:远程音频源接入与跳过
麦克风权限闸门迁入 dictation_session.rs;remote_no_insert 禁流式/
跳插入与 remote:result 回传迁入 dictation_end.rs(适配
streaming_insert_eligible 新增的 chinese_script_preference 参数)。
- Cargo.lock 重新生成。
验证:cargo check 通过;tsc 通过。
2026-06-10 11:44:10 +08:00
吕柏青
7ddd73a057
fix(vault): 保存凭据跳过未变化的 keychain 条目,修复切换供应商弹窗风暴 ( #602 )
...
切换供应商只改 root.active 一个字段,但 save_credentials 会先读旧 manifest、
再重写所有 chunks、再重写 manifest —— macOS 上每个 keychain 条目各自 ACL,
ad-hoc 签名/未永久授权时每次访问各弹一次「访问密码」弹窗,一次切换弹 3+ 次。
三处收口(都基于已有的进程级凭据缓存,行为冷路径不变):
1. manifest 进程缓存(CREDENTIALS_MANIFEST_CACHE):load/save 成功后回填,
后续 save 不再回 keychain 读旧 manifest(省 1 次 ACL 访问);冷缓存仍读
真实 manifest,UUID 代际旧 chunks 的清理信息不丢。
2. chunk_skip_mask:用缓存里上次落盘的 root 反推旧 chunk 内容,逐字节一致的
chunk 跳过重写。仅旧 manifest 已是稳定名(generation=None)时启用;缓存
序列化顺序差异只会多写(回退旧行为),不会漏写。
3. manifest 内容只由 chunks 数决定:数量不变且已是稳定名 → 跳过重写。
典型单 chunk 凭据库:切换供应商 3 次 keychain 访问 → 1 次。
2026-06-10 09:36:08 +08:00
吕柏青
287a0ff4b4
fix(capsule): 终态/空闲让胶囊点击穿透,修复贴近输入框误触弹主界面 ( #631 )
...
胶囊窗口 220×110 远大于可见 pill,录音完成后 2s toast + 360ms 离场动画期间
透明区域仍会吃掉点击并激活 OpenLess(把主界面带到前台)。在 emit_capsule
主线程闭包按状态切换 set_ignore_cursor_events:Done/Cancelled/Error/Idle
点击穿透到下层应用;Recording/Transcribing/Polishing 保留 ✕/✓ 按钮可点。
按状态变化去重,录音中 ~30Hz 电平帧不重复调系统 API。Linux 分支不操作
胶囊窗口,不受影响。
2026-06-10 09:26:22 +08:00
bbb
64c8cc1d60
fix(asr): validate MiMo credentials as ASR provider
2026-06-10 08:45:02 +08:00
Chris233
9f61c8324b
Merge pull request #630 from H-Chris233/fix/qwen-engine-mutex-poison-null-ctx-guard
...
fix: guard qwen_engine std::Mutex poison + null ctx FFI calls
2026-06-09 23:18:41 +08:00
Chris233
6385493519
Merge pull request #632 from H-Chris233/fix/mimo-asr-api-key-race
...
fix: MiMo ASR API Key 为空竞态修复
2026-06-09 22:25:37 +08:00
H-Chris233
53bb8fee37
fix: MiMo ASR API Key 为空竞态修复(三处)
...
1. CredentialField onBlur: save() fire-and-forget 与 validate 按钮存在 IPC 竞态
— 用户输入 Key 后立即点「测试连接」时 setCredential 可能晚于 validate 到达后端。
— 添加 mountedRef 守卫防止组件卸载后 stale save。
2. read_mimo_credentials: 将 .ok().flatten().unwrap_or_default() 改为显式 match
— keyring 读取失败不再静默吞错,分别用 warn/error 记日志。
2026-06-09 22:04:42 +08:00
Chris233
7d37e4b16f
Merge pull request #628 from Open-Less/fix/issue-580-settings-modal-portal
...
fix(settings): 设置弹窗用 Portal 渲染避免被页面滚动条覆盖 (#580 )
2026-06-09 21:03:37 +08:00
Chris233
6abc03c78f
Merge pull request #626 from Open-Less/fix/issue-525-macos-clipboard-restore
...
fix(insertion): macOS 插入后恢复用户剪贴板 (#525 )
2026-06-09 21:00:09 +08:00
Chris233
aaf9133f73
Merge pull request #627 from Open-Less/fix/issue-612-history-search
...
fix(history): 历史页搜索框可点击、可搜索 (#612 )
2026-06-09 20:58:50 +08:00
Chris233
ec5acef170
Merge pull request #629 from Open-Less/fix/issue-622-enforce-traditional-chinese
...
fix(polish): Traditional 模式强制中文字形转换,不再只靠 prompt (#622 )
2026-06-09 20:58:02 +08:00
H-Chris233
0ba3817cee
fix: guard qwen_engine Mutex poison + null ctx FFI calls
...
Two crash-risk fences on the dictation hot path:
1. set_token_handler: Replace std::sync::Mutex::lock().expect() with
unwrap_or_else(|poisoned| poisoned.into_inner()) to survive a poisoned
mutex instead of panicking the process. This is the ONLY std Mutex in
the codebase (all others use parking_lot). If token_trampoline's C FFI
callback panics, the Mutex poisons and the next dictation crashes.
2. transcribe_audio / transcribe_stream: Add is_null() guard before C FFI
calls to prevent UB if engine is somehow used after Drop (defense-
in-depth under normal Arc ownership).
2026-06-09 20:56:18 +08:00
Chris233
bba2c90ef2
Merge pull request #623 from H-Chris233/fix/crash-guards-llm-endpoint-url-asr-model-validation
...
fix: crash guards for LLM endpoint URL + ASR model loading
2026-06-09 20:06:40 +08:00
吕柏青
36f8b7291e
fix(polish): Traditional 模式强制中文字形转换,不再只靠 prompt ( #622 )
...
繁体用户实测:选 Traditional 后最终插入文字仍可能含简体。根因——
1. finalize_polished_text 仅在 Raw / 翻译 / 润色失败时强制 apply_chinese_script_preference;
普通模式 LLM 润色成功时只靠 system prompt 指示 LLM 输出繁体,而部分 provider 会
跟随简体 ASR 输入继续输出简体,prompt 指示不可靠(issue #622)。
2. 流式插入路径逐字落字,刻意跳过 apply_chinese_script_preference(dictation_streaming.rs
注释明示),无法回退已落字符。
修复:
- finalize_polished_text 在非流式路径下无条件套用 apply_chinese_script_preference
(对 Auto 是 no-op,不影响自动模式行为;非 Auto 时保证最终文字不混简体)。
- streaming_insert_eligible 增加 chinese_script_preference 门:非 Auto 时关闭流式,
转走会做字形转换的一次性路径(满足 issue「无法安全转换则 fallback 到 one-shot」)。
- 新增单测:finalize 对 issue 两个验收用例输出繁体;非 Auto 时流式不 eligible。
Auto 模式保持原行为不变。
2026-06-09 20:06:11 +08:00
吕柏青
2ff80d0f72
fix(settings): 设置弹窗用 Portal 渲染避免被页面滚动条覆盖 ( #580 )
...
在历史/风格页滚动后打开设置弹窗,WebKitGTK(Debian/KDE Wayland)下页面自绘滚动条
(.ol-thinscroll) 会盖在弹窗之上。根因:弹窗用 position:absolute 处于页面 overflow:hidden
祖容器的同一 stacking context 内,而 WebKitGTK 滚动条不创建独立合成层,z-index 对其无效
(issue #580 中 position:fixed、isolation:isolate 均无效已验证)。
- SettingsModal 改用 createPortal 渲染到 document.body,彻底脱离页面 DOM 树与
stacking context(与 SelectLite 的 popover 同款做法)。
- 遮罩层 position 由 absolute 改为 fixed,覆盖整窗;视觉与交互不变。
- 设计 token 定义在 :root,body 下的 portal 正常继承,无样式丢失。
2026-06-09 19:58:34 +08:00
吕柏青
ac1f723afc
fix(history): 历史页搜索框可点击、可搜索 ( #612 )
...
历史页顶部带搜索图标的区域此前是静态 div,只显示「共 N 条 · 显示 M」统计,
无法获得焦点、无法输入、无过滤逻辑(issue #612,Windows beta 实测)。
- 把静态 span 改为真实 `<input type="search">`,可聚焦输入;统计文案下移为独立小字。
- 按关键词实时过滤左侧列表,匹配 finalText / rawTranscript / appName(大小写不敏感、trim);
与现有 mode 筛选叠加。
- 清空关键词恢复显示全部(受当前 mode 筛选)。
- ⌘K / Ctrl+K 聚焦搜索框(设计稿预期)。
- 搜索无结果时显示专门提示 history.searchNoMatch,区别于「暂无历史」。
- 新增 i18n: history.searchPlaceholder / history.searchNoMatch(en/ja/ko/zh-CN/zh-TW)。
2026-06-09 19:56:06 +08:00
吕柏青
4b4d21912b
fix(insertion): macOS 插入后恢复用户剪贴板 ( #525 )
...
此前 macOS 的 insert() 只写剪贴板 + post Cmd+V,完全忽略 restore_clipboard_after_paste
参数;整套剪贴板恢复机制被 #[cfg(not(target_os = "macos"))] 排除,导致设置里的
「恢复剪贴板」开关在 macOS 上无效(issue #525,实测 macOS 26.5 / M4 Pro)。
- 把剪贴板恢复机制(保存原内容 → 延迟回写 → 仅当剪贴板仍是刚插入文字时才恢复)改为
跨平台可用,去掉 cfg(not macos) 门控;insert_with_clipboard_restore 仍仅 Windows/
Linux 使用(依赖 PasteShortcut 模拟),故保留其门控。
- macOS insert() 改为:保存原剪贴板 → 写转写文字 → Cmd+V → 粘贴成功且开关开启时按
CLIPBOARD_RESTORE_DELAY 延迟恢复;粘贴失败则保留转写文字供手动粘贴、不恢复。
- CLIPBOARD_RESTORE_DELAY 合并为统一常量;删除随之失效的 macos_insert_status_after_paste。
- should_restore_clipboard 守卫测试改为跨平台运行,新增 macOS 成功路径测试。
2026-06-09 19:50:23 +08:00
H-Chris233
97293b1a40
fix: add crash guards for LLM endpoint URL and ASR model loading
...
Three defensive layers to prevent user-facing crashes:
1. coordinator/llm_pipeline.rs: Auto-prepend http:// when endpoint URL is
missing scheme (user types 192.168.1.100:8080/v1 without http://).
Add catch_unwind guards around all 4 build_active_llm_provider call
sites to turn panics (e.g. poisoned credentials mutex) into logged
errors instead of process kills.
2. polish.rs: Replace try_clone().expect() with safe fallback — if the
request body isn't clonable, send once without retry instead of
panicking the process.
3. test_run.rs: Validate model files (config.json, vocab.json,
merges.txt exist and are non-empty; at least one .safetensors >= 1KB)
before calling into the C FFI qwen_load / qwen_transcribe_audio,
preventing segfaults from corrupted/incomplete model downloads.
2026-06-09 12:35:20 +08:00
TRIP
19ae8641d6
Merge pull request #621 from Open-Less/fix/aura-ui-polish
...
revert(ui): 回退 aura 皮肤 + 钥匙串/彩虹边框/提示词修复 (1.3.6-3)
2026-06-08 17:43:24 +08:00
吕柏青
e2af9ba38e
chore(release): 1.3.6-3
2026-06-08 17:30:38 +08:00
吕柏青
5a8757d3c2
feat(polish): 清晰结构提示词前置第一指令,≥2 件事强制编号罗列
...
弱模型(deepseek-v4-flash)被 8 段长提示词稀释、抓不到关键的'必须罗列'规则。把
'≥2 件事必须编号清单、揉成一段=失败'前置到最顶(高于角色),让模型第一眼读到。
2026-06-08 17:30:38 +08:00
吕柏青
6b9b0ddd89
fix(less-computer): 彩虹边框首次半屏卡死修复
...
glow 窗口 conf 初始 800×600 且 visible:false,首次 show 前从未 realize →
current_monitor()/set_size 没贴住整屏,webview 首帧按 800×600 画半屏描边。改为
realize(orderFront) 后再铺满整屏一次,强制按整屏重排重绘。
2026-06-08 17:30:38 +08:00
吕柏青
432673eb63
fix(security): history HMAC 密钥/标志从 keychain 迁到 0o600 文件
...
ad-hoc 签名下每个钥匙串条目各自 ACL、删建即清空 ACL,导致 #617 的 history HMAC
两个钥匙串条目让用户每次听写后反复弹授权(凭据 3 次外又多 2 次)。迁到同目录
0o600 文件(密钥与明文 history 同目录、安全收益对等,注释本就标注为预期兜底)。
含零钥匙串迁移:换后端时删旧 sidecar 走 legacy 重新接受+补签,不丢历史。
2026-06-08 17:30:38 +08:00
吕柏青
1bb580700d
revert(ui): 回退 aura 皮肤( #605 ) 到之前 UI + 设置瘦身/词汇表边距/胶囊弹性弹出
...
用户决定放弃 aura 皮肤改版(套框悬浮/吞玻璃/选框丑),前端整体回退到 aura 之前
的设计,并在其上做几处打磨:
- 设置页瘦身:去掉所有区块/每行描述小字 + 移除字体大小个性化
- 词汇表悬浮台到右/下边距相等(8px)
- 胶囊弹出改弹性曲线(scale .78→1 back-out overshoot)
2026-06-08 17:30:38 +08:00
TRIP
9b14c031da
Merge pull request #619 from Open-Less/refactor/split-dictation
...
refactor(dictation): dictation.rs 2766→425 拆为 4 个子模块(机械式·零回归)
2026-06-08 13:27:57 +08:00
TRIP
cf1ddae523
Merge pull request #617 from Open-Less/fix/issue-609-security-audit
...
fix(security): 收 #609 安全审计 — SSRF/prompt注入/history HMAC/QA信封 (F-01~F-06)
2026-06-08 13:27:40 +08:00