Commit Graph
264 Commits
Author SHA1 Message Date
baiqing 89dd4e49bb chore: release 1.2.12 2026-05-02 12:19:28 +08:00
TRIP 7aefb8199e Merge pull request #181 from Cooper-X-Oak/codex/windows-native-titlebar-off
fix(windows): 收紧主窗口 shell 外观契约
2026-05-02 12:18:12 +08:00
Cooper-X-Oak 802ee653c9 fix(windows): 收紧主窗口 shell 外观契约 2026-05-02 12:12:46 +08:00
Cooper-X-Oak 946d842023 fix(windows): restore custom chrome interactions 2026-05-02 12:12:02 +08:00
Cooper-X-Oak 4ea8389ceb fix(windows): align custom shell rounded frame 2026-05-02 12:12:02 +08:00
Cooper-X-Oak f83a5339c7 fix(windows): remove native titlebar before first show 2026-05-02 12:12:02 +08:00
TRIP a2d243f333 Merge pull request #182 from Cooper-X-Oak/codex/windows-capsule-geometry-pr
fix(windows): 收紧 Capsule 几何契约
2026-05-02 12:11:51 +08:00
baiqing 9fd726ec87 test(windows): 对齐 capsule geometry 新契约断言 2026-05-02 12:06:22 +08:00
Cooper-X-Oak 9875e089d8 fix(windows): 收紧 capsule 几何契约 2026-05-02 12:05:09 +08:00
Cooper-X-Oak f8c5337084 docs(windows): 为 issue 142 建立 capsule 占位 2026-05-02 12:04:28 +08:00
TRIP 13d9d29233 Merge pull request #180 from appergb/fix/issue-165-linux-contract-alignment
fix(linux): 收敛平台契约错配与 best-effort 降级
2026-05-02 11:53:24 +08:00
TRIP 9510611a82 Merge pull request #179 from appergb/fix/issue-167-clipboard-restore-queue
fix(windows): 收敛 clipboard restore 并发恢复竞态
2026-05-02 11:49:22 +08:00
TRIP ae6be2defc Merge pull request #178 from appergb/fix/issue-164-qa-window-no-activate
fix(windows): QA 浮窗显示时不再抢前台焦点
2026-05-02 11:49:14 +08:00
TRIP 652b6d7bab Merge pull request #177 from appergb/fix/issue-166-mic-permission-no-activate
fix(mic): dictation 缺麦克风权限时不再抢前台焦点
2026-05-02 11:49:06 +08:00
baiqing dd7c02558f fix(linux): 收敛平台契约错配与 best-effort 降级 (closes #165) 2026-05-02 11:48:15 +08:00
baiqing d74d947106 fix(windows): 收敛 clipboard restore 并发恢复竞态 (closes #167) 2026-05-02 11:41:40 +08:00
baiqing 6a915c762f chore(windows): 补齐 QA no-activate 依赖锁文件 2026-05-02 11:40:06 +08:00
baiqing d4e7a8b4fe fix(windows): QA 浮窗显示时不再抢前台焦点 (closes #164) 2026-05-02 11:38:30 +08:00
baiqing 1fc6d9bd3f fix(mic): 听写路径请求麦克风权限时不再抢前台焦点 (closes #166) 2026-05-02 11:35:45 +08:00
TRIP 0c4fbb9815 Merge pull request #176 from appergb/fix/issue-161-qa-cancel-race
fix(qa): 修划词追问浮窗 4 个取消 race (closes #161)
2026-05-02 11:34:30 +08:00
baiqing db27107e7a fix(qa): 修划词追问浮窗 4 个取消 race (closes #161)
issue #161 4 个子修复合并为一个 PR(取消相关,紧密耦合)。

## 1. Esc 路由
coordinator.rs::handle_window_hotkey_event 之前无条件 cancel_session(dictation
取消),即使在 QA 浮窗里按 Esc 也杀的是 dictation。现在先查 qa_state.panel_visible
+ phase != Idle,是 → close_qa_panel;否 → 走 dictation 取消。

## 2. SSE 流取消旗标
- Inner 加 qa_stream_cancelled: Arc<AtomicBool>
- begin_qa_session 重置 false
- cancel_qa_session set true
- polish.rs::chat_completion_history_streaming 的 SSE loop 每帧检查
  should_cancel() flag,true 时立即 break,避免取消后 LLM 继续 drain
  HTTP body 烧 token

## 3. session_id 守卫
on_delta 闭包捕获本会话的 captured_session_id;emit chunk 前比对当前
qa_state.session_id,不等就跳过。修复"取消后开新会话,旧 LLM 流的
chunk 漏进新气泡"。

## 4. loading 帧
types.ts::QaStateKind 加 'loading';QaPanel.tsx switch 加 case:把 status
切到 'thinking' 视图,避免 ASR finalize 期间 UI 卡 'recording' 几百 ms
反馈缺失。

## API 变化
- polish::answer_chat_streaming<F, C> 签名加 should_cancel: C
- polish::chat_completion_history_streaming<F, C> 同
- coordinator::answer_chat_dispatch<F, C> 同

## 测试
- cargo check ✅
- npm run build ✅
2026-05-02 10:56:40 +08:00
TRIP f5ffd9ef0f Merge pull request #175 from appergb/fix/issue-168-qa-recorder-error-monitor
fix(qa): QA recorder error monitor (closes #168)
2026-05-02 10:51:36 +08:00
TRIP fcd37fbc71 Merge pull request #174 from appergb/fix/issue-169-macos-exit-main-thread
fix(macos): stop_qa_hotkey_listener 包 run_on_main_thread (closes #169)
2026-05-02 10:51:30 +08:00
baiqing 65d4b5243b fix(qa): 加 QA recorder runtime error monitor (closes #168)
QA 录音中麦克风设备消失 / cpal 内部 panic 时,QA 流程之前**没有**对应
runtime error 监听器(recorder_errors 用 _ 弃用),导致:
- QA 浮窗一直显示"录音中"
- 用户按 Option 第二次没反应
- 必须按 Esc 才能脱困

修:
- 新增 spawn_qa_recorder_error_monitor,镜像 dictation 现有 spawn_recorder_error_monitor
- begin_qa_session Recorder::start 成功后启动监听器
- 用 qa_state.session_id 守卫 stale 事件
- 收到 error → finish_qa_with_error("录音设备异常: ..") → emit 错误胶囊 + 浮窗错误状态

测试:
- cargo check ✅
2026-05-02 10:46:03 +08:00
TRIP ca7b68053b Merge pull request #173 from appergb/fix/issue-162-qa-level-listener
fix(qa): QaPanel 加 qa:level 监听 + LevelBar (closes #162)
2026-05-02 10:44:48 +08:00
baiqing 7ac0421a3f fix(macos): stop_qa_hotkey_listener 包 run_on_main_thread (closes #169)
QaHotkeyMonitor::drop 在 macOS 底层调 Carbon RemoveEventHotKey,要求主线程。
RunEvent::Exit 回调不保证在 AppKit 主线程跑——drop 漏到 tokio worker 上
触发 macOS dispatch_assert_queue_fail SIGTRAP,退出时偶发崩溃。

修:
- coordinator.rs::stop_qa_hotkey_listener 把 .take() 包到 run_on_main_thread
- AppHandle 已 None 时(极端 shutdown 序)直接 drop 兜底(最坏崩也是退出时机)

测试:
- cargo check ✅
2026-05-02 10:44:25 +08:00
TRIP e0614e3c7e Merge pull request #172 from appergb/fix/issue-163-windows-startup-gate-timeout
fix(windows): 启动 gate pollHotkeyStatus 加 10s 超时 (closes #163)
2026-05-02 10:43:33 +08:00
baiqing a8f4b891a0 fix(qa): QaPanel 加 qa:level 监听 + LevelBar 电平条 (closes #162)
后端 coordinator.rs:1743 在 QA 录音时每帧 33ms 推 qa:level 事件,
但 QaPanel 之前只 listen qa:state / qa:dismiss,qa:level 完全无人接 →
QA 录音用户看不到电平反馈,不知道麦克风是否收音。

修复:
- QaPanel 加 listen('qa:level') 累积 level state(cleanup 加 unlistenLevel)
- 新增 LevelBar 组件:4px 高蓝色进度条,宽度 = level × 100%
- RecordingHeader / TurnIndicator(recording) 都加 LevelBar 渲染
- 状态切换非 recording 时 setLevel(0) 避免残留

测试:
- npm run build ✅
- macOS 实测:QA 录音电平条跟随声音起伏(同 capsule 体验)
2026-05-02 10:38:44 +08:00
baiqing 4627eb4615 fix(windows): 启动 gate pollHotkeyStatus 加 10s 超时 (closes #163)
Windows 上 OS 拒绝低层键盘 hook 安装(反作弊/EDR/UAC 拦)时,
hotkey 永远 starting → 前端 while(!cancelled) 永不退出 → UI 卡 "正在启动" 灰屏。

加 50 × 200ms = 10s 上限:超时后强 setGate('ready'),让用户能进 Permissions
页看 hotkey_status.lastError 处理(页面已能显示错误 + 重试入口)。

非 Windows 路径不变。

测试:
- npm run build ✅
2026-05-02 10:36:13 +08:00
TRIP 490b391022 Merge pull request #171 from appergb/chore/issue-170-cleanup-warnings
chore: cargo clippy --fix 清理 small lints (closes #170 第一波)
2026-05-02 10:35:20 +08:00
baiqing f9d31b68c8 fix(insertion): 修 clippy --fix 误删的 Duration import 在 Windows/Linux cfg 下被用 2026-05-02 10:30:10 +08:00
baiqing 6fde92417b chore: cargo clippy --fix 自动清理小手术 (closes #170)
cargo clippy --fix 自动修了 8 个 lint,warnings 从 18 降到 16。

改动文件:
- asr/mod.rs / coordinator.rs / hotkey.rs / insertion.rs / polish.rs / types.rs
- 主要是 needless_borrow / single_match / useless_conversion / 多余 cast

build 跑过:
- cargo check ✅
- npm run build ✅

剩余 16 个 warning 都是有意保留的(test-only helpers、future-API placeholder、
类似 TodayMetrics 这种历史接口),不动这些避免破坏 surface。issue #170
里更深层的整洁度(SettingsWriter dedupe / force 参数删除等)后续 PR 跟进。
2026-05-02 10:24:21 +08:00
TRIP 68298d253c Merge pull request #138 from Cooper-X-Oak/codex/auto-update-download-acceleration
fix(tauri): 加速自动更新下载
2026-05-02 09:51:13 +08:00
TRIP 124778036d Merge pull request #145 from Cooper-X-Oak/codex/windows-cold-start-ui-pr
fix(windows): 收口 startup visible-ready 生命周期并进入评审观察
2026-05-02 09:48:13 +08:00
baiqing 0f4d29fdec fix(capsule): 三平台统一恢复 Done/Cancelled/Error toast
PR #140 在 Windows 上把 emit_capsule 的 visible 判定从 !Idle 缩窄到
仅 Recording/Transcribing/Polishing,副作用是 macOS / Linux 用户也失去了
"已粘贴 N 字" / "已取消" / 错误文案这一组完成 toast。

本 commit 把 visible 切回原本的 `!matches!(state, CapsuleState::Idle)`,
覆盖三平台。Windows 上 linger 的真实问题(dead zone / 截图选中 / 拖动卡顿)
由 PR #140 引入的 hide_capsule_window_if_present() Win32 hard-hide 路径
在 visible=false 分支处理——不依赖改 visible 语义。

closes the visible-narrowing follow-up referenced in PR #140 review comment。
2026-05-02 09:47:19 +08:00
baiqing 9dd9b0b066 Merge pull request #140 from Cooper-X-Oak/codex/fix-windows-capsule-dead-zone-followup
fix(windows): 收口 Capsule helper-window 生命周期并进入回归评审

合入 PR #140 全部修复(保留 #140 author 提交)。冲突点(Win32 use 块导入排序)
取 main HEAD 排序——两边导入相同符号,仅字母顺序不同,无语义差异。

合并后 emit_capsule 的 visible 判定将三平台统一回 !Idle,由后续 commit 跟进——
保留 macOS 已习惯的 Done/Cancelled/Error toast,Windows linger 由本 PR 加的
hide_capsule_window_if_present() Win32 hard-hide 路径解决,不靠改 visible 语义。
2026-05-02 09:46:50 +08:00
Cooper-X-Oak d58c9500c6 docs(windows): add tracking docs for issue 139 and pr 140 2026-05-02 09:46:39 +08:00
Cooper-X-Oak c74ea1bcb2 fix(windows): fully hide inactive capsule helper window 2026-05-02 09:46:39 +08:00
TRIP 4d06f0cad2 Merge pull request #160 from Cooper-X-Oak/codex/continue-from-main
fix(windows): 延后剪贴板恢复并补齐插入回归覆盖
2026-05-02 09:32:45 +08:00
TRIP 7c6b4250b7 Merge pull request #150 from Cooper-X-Oak/codex/issue-147-qa-hotkey-refresh
fix(windows): 对齐 QA hotkey 设置写回与运行态监听器
2026-05-02 09:31:52 +08:00
TRIP c8bb0899d6 Merge pull request #151 from Cooper-X-Oak/codex/issue-148-qa-hotkey-normalization
fix(windows): 归一 QA hotkey 的跨平台修饰键语义
2026-05-02 09:31:21 +08:00
TRIP cc030c8f88 Merge pull request #155 from Cooper-X-Oak/codex/issue-154-windows-dual-hotkey-pr
docs(windows): 跟踪双热键事件源生命周期
2026-05-02 09:30:17 +08:00
Cooper-X-Oak bcb00c60c1 fix(qa): refresh QA hotkey listener on settings writes 2026-05-02 06:01:56 +08:00
Cooper-X-Oak a758cfa998 fix(qa): normalize cmd modifier to ctrl on Windows 2026-05-02 06:01:56 +08:00
Cooper-X-Oak e8df0cd971 docs(tracking): tighten windows insertion handoff 2026-05-02 05:42:52 +08:00
Cooper-X-Oak 4f6df56744 docs(windows): refresh pr 145 review-ready tracking summary 2026-05-02 05:25:11 +08:00
Cooper-X-Oak 229b871d27 docs(github-tracking): add dual-hotkey tracking docs 2026-05-02 05:19:11 +08:00
Cooper-X-Oak da13e8ca37 docs(windows): add tracking docs for issue 98 and pr 145 2026-05-02 05:18:01 +08:00
Cooper-X-Oak 780a4a4483 docs(tracking): add windows clipboard restore handoff 2026-05-02 05:15:32 +08:00
Cooper-X-Oak 283cfdf9f3 test(windows): stabilize lifecycle regression coverage 2026-05-02 05:07:40 +08:00