Commit Graph
46 Commits
Author SHA1 Message Date
baiqing effa12e5f1 fix(hotkey): Wayland 下用 CLI 触发录音,修复 #420
Wayland 协议禁止应用监听非聚焦窗口键盘事件,原 rdev 路径必然失效。
保留 X11 rdev 不动;Wayland 下走 stub HotkeyAdapter(不监听键盘),
通过 tauri-plugin-single-instance 把 `openless --toggle-dictation`
等 CLI 命令的 argv 转给主实例 coordinator,由桌面环境快捷键设置
绑定该命令实现全局触发。Settings → 录音 mount 时 invoke
is_wayland_cli_mode 拉状态,显示绑命令引导 callout
(GNOME / KDE / Hyprland / sway 四段步骤)。

新增:
- src-tauri/src/cli.rs — CLI intent 解析 + 10 个单测
- docs/issue-420-wayland-hotkey-research.md — 方案调研文档

改动:
- hotkey.rs Linux 分支:Wayland 检测命中走 WaylandCliAdapter stub
  (不再硬拒绝 wayland_unsupported)
- lib.rs:single-instance 回调路由 argv → dispatch_cli_intent
- commands.rs:新增 is_wayland_cli_mode IPC command
- coordinator.rs:dictation_phase_for_cli + cli_toggle_qa_panel
  暴露 CLI 入口,复用现有状态机
- Settings.tsx:WaylandHotkeyCallout 组件 + invoke pull 模型
- i18n × 5 locale:settings.recording.wayland.* 共 14 个键

macOS CGEventTap 和 Windows RegisterHotKey 路径零触碰。
2026-05-13 12:34:52 +08:00
baiqing a74a5472b0 docs: 2026-05-10 audit + beta logic review snapshots
Snapshot two audit artifacts produced 2026-05-10:

- docs/audit-2026-05-10-validated.md — 21 audit items run against
  the live source tree at openless-all/app/src-tauri/src/ with a
  CONFIRMED / FALSE_POSITIVE / PARTIAL verdict per item plus the
  exact file:line range that supports each verdict.

- docs/logic-review-2026-05-10.md — 5-path logic review of
  origin/beta @ 400097ad covering startup, press/release, end-of-
  session, capsule emit, and shutdown. Notable: at 400097ad the
  emit_capsule fix from PR #389 was NOT yet an ancestor, so the
  cpal audio-callback → AppKit/Win32 SIGTRAP risk was still live
  on that snapshot (subsequent merges have addressed it; this doc
  remains the dated record).

Both files are pure snapshots — no code changes here.
2026-05-10 18:13:46 +08:00
H-Chris233 717e694370 Constrain WebView loading with a minimal CSP
The desktop WebView no longer runs with an unexplained disabled CSP. The policy keeps scripts self-hosted, permits Tauri IPC and local Vite development connections, keeps provider/update/model networking on the Rust side, and documents the only unsafe allowance for React inline styles used by the existing pixel-aligned UI.

Constraint: Issue #226 requires csp:null to be replaced or explicitly bounded

Constraint: Provider validation, updater checks, and model downloads are Rust-side paths, not frontend fetch allowlist entries

Rejected: Keep csp:null with documentation only | weaker defense-in-depth and leaves the WebView effectively unconstrained

Confidence: high

Scope-risk: narrow

Directive: Do not add external provider domains to WebView connect-src unless a frontend fetch path is introduced

Tested: npm run build

Tested: npm run tauri -- info

Tested: cargo check --manifest-path src-tauri/Cargo.toml
2026-05-08 12:00:09 +08:00
millionart f358260866 merge upstream main into windows local asr 2026-05-06 21:28:41 +08:00
baiqing 938c6a74b9 docs: 工程审计基线 (audit-2026-05-06.md)
完整工程审计报告(系统化逐项检查):
- 后端架构总评 + 5 个 P1/P2 优化点(coordinator/commands 拆分等)
- 前端 4 个 UI bug(tab 切换竞态、流式滚动打断 QA 等)
- 工程化水平评估 + 4 条改善(CI 门禁 / E2E / gitignore / 版本号)
  → 其中 3 条已在本 PR 实现(CI matrix + gitignore + bump-version 脚本)
- 多端逻辑与体验一致性表(macOS vs Windows 平台差异 vs 行为一致性)
- UI/后端 IPC 1:1 映射校验(全部命令前后端对齐 ✓)
- 改进建议汇总:P0 无;P1 5 项;P2 6 项
- 总结:项目整体健康,建议下迭代处理 coordinator 拆分 + 前端动画竞态

把这份基线纳入 git,让 main 留下 v1.2.20→v1.2.21 这一阶段的工程现状
锚点,后续审计有 baseline 对照。
2026-05-06 20:57:38 +08:00
millionart 2a03f15292 Merge remote-tracking branch 'upstream/main' into codex/windows-local-asr
# Conflicts:
#	openless-all/app/src-tauri/Cargo.lock
#	openless-all/app/src-tauri/src/commands.rs
#	openless-all/app/src-tauri/src/coordinator.rs
#	openless-all/app/src-tauri/src/lib.rs
2026-05-06 20:15:12 +08:00
millionart 9ebedebf7d docs: plan Windows local ASR 2026-05-06 14:14:58 +08:00
millionart 844c1da098 docs: design Windows local ASR 2026-05-06 13:59:39 +08:00
millionart f497cd4eb5 merge Windows TSF IME support 2026-05-03 19:24:21 +08:00
Cooper-X-Oak f8c5337084 docs(windows): 为 issue 142 建立 capsule 占位 2026-05-02 12:04:28 +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
Cooper-X-Oak d58c9500c6 docs(windows): add tracking docs for issue 139 and pr 140 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 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 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
Cooper-X-Oak 734c430339 test(windows): automate openless lifecycle evidence 2026-05-02 04:47:37 +08:00
Cooper-X-Oak 23207beb8e docs(windows): record clipboard regression evidence 2026-05-02 04:25:17 +08:00
Cooper-X-Oak 02a3e0a225 fix(windows): delay clipboard restore after synthetic paste 2026-05-02 03:59:01 +08:00
Cooper-X-Oak 93cbd03305 docs(windows): 跟踪双热键事件源生命周期 2026-05-02 01:46:49 +08:00
Cooper-X-Oak 20d67da5c4 docs(windows): 为 issue 143 建立冷启动占位 2026-05-02 01:23:22 +08:00
Cooper-X-Oak e34b3feee7 fix updater download acceleration 2026-05-01 23:47:58 +08:00
TRIP b79a1e76b4 Merge pull request #119 from appergb/feat/selection-voice-qa
feat: 划词语音问答(Selection + Voice Q&A)— closes #118
2026-05-01 19:32:18 +08:00
millionart 271a51ad79 docs: plan temporary TSF IME implementation 2026-05-01 18:20:01 +08:00
millionart 7005a060b0 docs: design temporary TSF IME flow 2026-05-01 18:05:39 +08:00
baiqing 6e49281519 feat(qa): v2 多轮对话 + 流式输出 + macOS 浮窗修复
issue #118 v2 完整闭环。

## 多轮对话
- QaSessionState 加 messages: Vec<QaChatMessage> + panel_visible flag。
- Cmd+Shift+/ 现在 toggle 浮窗可见性(不再启动录音);浮窗可见时 rightOption
  路由到 QA recording,不可见时仍是主听写。open_qa_panel / close_qa_panel 分离。
- 第一轮 user message 嵌选区原文(# 选区原文 / # 我的问题),之后只送提问。
- 前端 QaPanel 渲染气泡列表(user 蓝色靠右 / assistant 灰色 markdown 靠左)。

## 流式输出
- chat_completion_history → chat_completion_history_streaming:开 stream:true
  + SSE chunk 解析,on_delta 回调把每 chunk emit 成 qa:state{kind:"answer_delta"}。
- 前端 streamingAnswer state + StreamingAssistantBubble(带蓝色闪烁 caret)。
- answer 事件落定后清空 buffer,最终 messages 接管。

## macOS 浮窗修复(v1 一直存在的雷)
- capabilities/default.json 加 "qa" 到 windows 数组。否则前端 listen("qa:state")
  被 Tauri 权限拦截,浮窗永远收不到事件。
- show_qa_window 用 NSWindow.orderFrontRegardless 替代 window.show()
  (后者在 macOS 走 makeKeyAndOrderFront 抢 frontmost)。这样 capture_selection
  的 AX read / Cmd+C fallback 能稳定从原 app 读到选区。
- 所有 ObjC msg_send 必须 wrap 进 app.run_on_main_thread —— macOS 26 对
  NSWindow 主线程要求是硬断言(违反直接 SIGTRAP)。
- NSWindow.movableByWindowBackground=YES:浮窗任意空白处可拖。
- QA hotkey 注册在主线程:global-hotkey crate 在 macOS 用 Carbon
  RegisterEventHotKey,事件回调要靠主 run loop dispatch。

## 胶囊状态同步
- QA 录音 / 转写 / 思考 同步推 capsule:state,让用户在底部胶囊也看到状态。
- schedule_capsule_idle 同时检查 dictation 和 QA 都 Idle 才隐藏,避免旧
  dictation Done timer 把 QA 的胶囊误关。
- open_qa_panel 进入时先 emit Idle 清掉 dictation 残留 message + insertedChars。

## 设置页
- SelectionAsk 独立成一级 tab;预设减到 4 个 cmd+shift+ 系列(Option 跟主听写
  共用,不放进 QA hotkey)。
- howto / hotkey / privacy 文案重写,反映 v2 的「先开浮窗、再 Option 录音」流程。
- prefs 默认 qaHotkey = cmd+shift+;。

## 后续路线图
- docs/qa-reasoning-roadmap.md:思考能力 v2.2 设计稿(C 路线 reasoner model
  切换 + reasoning_content delta + 折叠思考块)。
2026-05-01 17:40:22 +08:00
Cooper-X-Oak 57efa8e64d docs: add OpenLess settings screenshot 2026-05-01 17:34:17 +08:00
Cooper-X-Oak a24ac6e380 docs: add simple Volcengine ASR setup guide 2026-05-01 17:31:31 +08:00
Cooper OakandCooper-X-Oak 7797d1479a docs(windows): 补齐上游交付与测试工作流 (#67)
Co-authored-by: Cooper-X-Oak <Cooper-X-Oak@users.noreply.github.com>
2026-04-30 14:25:51 +08:00
baiqing 648df0579d chore: 清理已废弃的 Swift 时代文档
用户明确:这些 docs/* 是已废弃 Swift 实现的产物,全平台 Tauri 后不再需要。
- 删除 18 份过时 architecture / requirements / release-notes / review 文档
- 不影响 Tauri 当前文档(CLAUDE.md / README / USAGE 仍在)
2026-04-30 12:51:50 +08:00
Chris233 82a24faa83 fix(hotkey): 收口桌面热键适配边界 (#38)
统一热键适配边界:macOS 保留 CGEventTap,Windows 改用原生 WH_KEYBOARD_LL hook,前端热键展示改为读取后端 capability/status。
2026-04-30 08:58:55 +08:00
baiqing ff0c95d99c release: v1.0.08 (build B1007) 2026-04-29 13:42:46 +08:00
baiqing 53cbdfbbff chore: stop tracking planning docs and promo working dirs
把规划文档保留在本地,不再发布到公开仓库;同时把 promo working
目录纳入 ignore,避免误把 node_modules / 视频产物提交上去。
2026-04-29 09:53:37 +08:00
baiqing e029f0bb17 release: v1.0.07 (build B1006) 2026-04-28 17:37:18 +08:00
baiqing 7ccda2b280 fix(updater): route settings update action 2026-04-28 13:35:38 +08:00
baiqing c36ec22618 fix(help): correct GitHub URL + clean up FAQ / link layout
- HelpTab GitHub 链接 baiqing → appergb,老地址 404
- helpLink 不再把整段 URL 当 label(中间截断 + 和标题挤一行),
  改成右侧「打开 ↗」按钮,hover tooltip 显示完整 URL
- helpFAQ Q/A 间距 4 → 8、加 lineSpacing 2、行 padding 9 → 11,
  提升可读性
2026-04-28 13:28:50 +08:00
baiqing cd744d5d9b fix(dictionary): preserve hitCount when editing entry; refresh HelpTab copy
- DictionaryEditorSheet 保存时把原 hitCount 带回去,否则编辑词条会让命中数静默归零
- 帮助中心快速上手 / 常见问题里"火山 ASR"、"润色模式"指向已合并的 Tab,
  改为指向"设置"和"风格"
- 加 1.0.04 release notes(B 系第一个版本,主体是 1697→ 多文件拆分)

Codex rescue 体检发现,发版前修。
2026-04-28 13:20:35 +08:00
baiqing 88a5a97812 feat: 1.0.03 — 侧边栏重构 + 词汇表 chip 布局 + 风格页 + 关掉自动学词
- 侧边栏 4 → 6 项:首页 / 历史记录 / 词汇表 / 风格 / 帮助中心 / 设置
- 词典 → 词汇表,整页改 chip 流式布局:phrase + hitCount,hover ✕ 删除,
  批量输入(每行一个),重置统计 / 清除全部
- DictionaryEntry 加 hitCount + 兼容旧 dictionary.json 解码
- DictationCoordinator 在润色后扫描最终文本递增命中数;
  删除 learnTerms 自动学词路径
- 润色模式 → 风格 (StyleTab):4 张模式卡 + 启用开关;
  关闭时跳过 Ark 直接插入原文 (UserPreferences.polishEnabled)
- 帮助中心:快速上手 4 步、快捷键速查、FAQ、GitHub 外链
- 设置 Tab 合并 Volc ASR + Ark 凭据、录音、授权、隐私、关于 + 检查更新
- 胶囊:NSPanel 220×96, hasShadow=false;macOS 26 分支去掉 SwiftUI 阴影
  → 解决"红绿灯外圈黑边"
- 侧边栏视觉:strokeBorder 0.08 → 0.04、阴影 radius 16 → 6
  → 解决"灰色边栏 + 黑色卡顿"
- 首页底部新增今日概览 + 风格预览
2026-04-28 11:16:40 +08:00
baiqing 25ede6ce07 docs: add 1.0.02 release notes 2026-04-27 18:59:25 +08:00
baiqing 4f8e6b914e feat: add dock main window and fixed navigation 2026-04-27 14:07:12 +08:00
baiqing f5a0c810fa feat: add dictionary hotwords and insights UI 2026-04-27 13:53:18 +08:00