70 Commits
Author SHA1 Message Date
crosswk 3877fcba20 chore: 发布 0.2.0
四处版本号、CHANGELOG 与关于页亮点同步到 0.2.0,本版新增的界面文案(中英两份)
一并补齐。
2026-09-09 16:47:55 +08:00
crosswk 74c5017b62 perf: AI 润色对所有 OpenAI 兼容端点默认关闭思考
此前只有 DeepSeek、通义千问、MiMo、智谱会被显式关闭,用自定义地址接入的服务仍然
带着思考在跑,出字要多等好几秒。现在一次带上四种格式的关闭参数,端点认哪个就哪个
生效;被拒绝的端点自动去掉参数重试一次并记住结论,OpenAI 官方与 Azure 保持不注入。
2026-09-09 16:47:36 +08:00
crosswk 70b4204fc3 fix: 录音结束即落盘,连接断开与超时不再静默
此前音频要等整个识别流程走完才保存,中途出岔子就跟着一起丢;录音期间掉线也没有
任何提示,只是空等到超时后回到待机。现在停止录音就写盘,掉线当场结束本次录音,
历史里没出文字的记录会区分「没识别到声音」「连接已断开」「等待超时」三种原因。
2026-09-09 16:47:17 +08:00
crosswk b0495dc1c3 fix: 悬浮窗与托盘菜单跟随系统文本大小缩放
Windows 的「文本大小」设置会被 WebView2 当作页面缩放,叠在显示器缩放之上,而窗口
仍按显示器缩放定尺寸,于是内容比窗口高、超出的部分被直接裁掉。改为由渲染端上报
webview 的真实缩放,窗口尺寸按它计算,托盘菜单共用同一个值。
2026-09-09 16:47:04 +08:00
crosswk ad60493eca feat: 支持 F13–F24 作为录音快捷键
这些按键 Windows 认得,但键盘上通常没有,因此几乎不会和其他程序的快捷键冲突。
可编程键盘或改键工具可以把一个不常用的键映射成 F13–F24,专门用来触发录音。
「按住说话」和「免提模式」都支持。
2026-09-09 16:46:42 +08:00
crosswk fcb0cc2e9b chore: 发布 0.1.9,并把设计决策笔记移出公开仓库
四处版本号、CHANGELOG、关于页亮点与两份 locale 同步到 0.1.9。关于页那五条
按用户视角重写:只说用户得到什么,不描述我们改了哪些文案。

docs/decisions.md 从仓库移除——它是私人设计笔记,放在公开 docs/ 下是当初
建错了位置。源码注释里的引用路径一并更新。同时去掉 asr_corrections.py 注释
里的部署绝对路径,运维细节不该出现在公开源码里。

识别服务卡片的说明改成直接回答适用场景,并去掉每张卡都挂的「面向中国大陆
账号」,只留 Groq 需要海外网络这一条。
2026-08-30 09:07:29 +08:00
crosswk 23c188f7e2 fix: 悬浮窗在提示出现或消失时上下跳动
麦克风来源提示 3 秒后隐藏、或录音以「未检测到有效声音」结束时,原生窗口会
跟着收缩。窗口按底边锚定,收缩需要重新定位,WebView2 把两次几何更新之间的
中间帧显示成了下跳。

改为只要悬浮窗仍可见就保留已展开的高度(上方留透明空间),等 hide 或下一轮
waiting 明确开始时再恢复基础尺寸。
2026-08-30 09:06:55 +08:00
crosswk 19d37df372 feat: 更新安装完成后自动打开并跳到关于页
退出时兜底安装的那条路径此前装完就结束,用户不知道版本变了,也就看不到
关于页里的「本次更新」——尤其开机自启、长期只用托盘的用户。改为装完拉起
应用并带 --open-about 落在关于页。

relaunch 参数保留不写成常量:关机前退出时拉起应用是错的,一旦要区分退出
成因,开关必须立刻可用。
2026-08-30 09:06:55 +08:00
crosswk 4015cf80ef feat: 新增千问 Audio 3.0 流式识别、WebDAV 备份、服务器模式本地 AI 整理
三项一起提交是因为它们共用命令注册与供应商目录,拆开任一条都编不过。

千问 Audio 3.0 流式:热词交给模型自带的即时热词,可带权重、上限 100 条,
不再需要业务空间 ID。

WebDAV 备份:配置、历史、音频是同一份 zip 的三个子集,配置为默认项;
选 WebDAV 而不是各家网盘 SDK,是为了让坚果云这类自建入口直接可用。
包体可能有几个 GB,所以走流式 PUT,不整包读进内存。

服务器模式本地 AI 整理:此前 ASR 与 AI 整理绑在一起,若因成本停掉服务器 AI
会连带失去语音识别。拆开来源后服务器只做识别,整理由本机直连用户自己的供应商,
API Key、提示词与上下文感知读到的文字都不再经过服务器。默认关闭。
2026-08-30 09:06:42 +08:00
kilikilikid bad38dabe5 perf(models): 支持模型多分片并发下载
模型下载改用多个 Range 分片并发传输,提升受单连接限速时的下载吞吐。
补充分片断点恢复、阶段化组装、ETag/大小/SHA 校验及操作互斥。
包含真实 HTTP 生命周期与前端错误映射测试。
2026-08-20 14:08:38 +08:00
crosswk 00b04c8a3f feat: 新增上下文感知写作、服务器模式识别纠错与短语音跳过整理
上下文感知读取光标附近的文本交给 AI,选中文字时改走单独的编辑指令 Prompt;
识别纠错在历史记录里回放并修正原文,提交前需用户确认、30 天内可撤回。
另有 AI 整理的托盘开关与快捷键、应用规则拖动排序、麦克风设备提示,
以及录音保留期与麦克风静音误报两处修复。
2026-08-19 15:11:41 +08:00
crosswk df2e3b4a41 chore(发版): 版本号升到 0.1.7,更新 CHANGELOG 与关于页亮点
四处版本号(package.json / tauri.conf.json / Cargo.toml / releaseHighlights.ts)
一起改,preflight 会校验它们一致,漏一个就会 FAIL。
2026-08-13 22:10:53 +08:00
crosswk 63c66ca04b feat(客户端): 新增 Groq 供应商,按住说话不再接受 Shift,悬浮窗改为启动后预热
Groq 既可作 AI 整理供应商,也可作语音识别服务,两项都需要海外网络。
按住说话禁用 Shift 并把默认键改为右 Ctrl:长按右 Shift 会触发 Windows 筛选键,
此后松开按键的动作收不到,录音停不下来,而这恰好就是按住说话的使用方式。
悬浮窗在启动后的空闲时段预建渲染器,按键时先显示再探测目标窗口,两次窗口扫描
合并成一次;供应商请求统一走带 User-Agent 的共享客户端,403 不再一律报成密钥被拒。
2026-08-13 22:10:45 +08:00
crosswk 79c3f8a61c feat(自动更新): 后台静默下载,改由用户或退出时安装
原先下载完就立刻关闭应用装上,正在说话的用户会被一个关不掉的全屏遮罩打断。现在下载完
只在侧栏「关于」图标上提示,由用户点「立即安装」,或在下次关闭应用时静默装好。
顺带补上周期检查(原先只在启动时查一次,常驻托盘的用户几周都发现不了新版本)、安装包
sha512 校验、已下载包的复用;并修复自建服务器用户收不到更新 —— 更新 manifest 原先跟随
用户可改写的后端地址。设置里的「自动检测更新」开关不再暴露,底层设置项保留备用。
2026-08-12 16:16:32 +08:00
crosswk 900ffd7c7b feat(本地模型): 新增英文 ASR 模型 Parakeet Unified EN 与 Nemotron 3.5
Parakeet 在英文上同时是目录里最快和最准的一档(LibriSpeech WER 1.62%、
Vulkan RTF 0.023),代价是只支持英文;Nemotron 覆盖 32 个 locale,补上
欧洲语系与多语言混用的场景。权重转存到自有仓库,与上游字节一致。

Nemotron 是第一个只认带地区 locale(en-US / zh-CN)的模型,而界面的语种
设置只有 auto/zh/en/ja/ko,给不出这种形式,故语种改为先按模型自报的清单
解析、再传给引擎。
2026-08-12 12:05:15 +08:00
crosswk df8ac2ce29 feat: 完成界面英文化并加强快捷键校验 2026-08-12 09:42:00 +08:00
crosswk 375688d276 feat(0.1.6): 识别失败不再只显示「无有效声音」,各模式补齐诊断日志
云 API 各家 provider 原先在失败点几乎不记日志,空结果还走成功路径,用户只看到
「未检测到有效声音」却无从排查。现在统一经 providers/diag.rs 记录失败环节、HTTP
状态与服务端追踪 ID,空结果必留痕(只记字数、不记文本),原因写进历史记录详情;
供应商卡片新增「测试全部」。同时修复鼠标侧键/中键按住说话约 1.7 秒后自动结束、
豆包服务端中途断连被当成没有声音、报错路径按字节截断中文导致的 panic,以及官网
GitHub 链接指向错误仓库。
2026-08-09 08:42:56 +08:00
crosswk b833d9ffe1 feat: 0.1.5 — 语音识别服务卡片化,修复本地模型加载卡住界面
新增
- 云 API 语音识别改为卡片式管理:一张卡一套完整配置,同一家可存多份
  (如两个百炼账号),点一张即启用;卡上显示可用状态与实测耗时,耗时是用
  内置音频真跑一次识别测出来的,按 RTF 分档
- 豆包 ASR 支持新版控制台的接入方式:新版只需一个 API Key,设置中可显式
  选择控制台代次,两代密钥各存一份,来回切换不必重新粘贴

变更
- 设置页的键盘快捷键说明改为讲清 Esc:录音或识别处理期间按 Esc 可取消本次
  识别,不插入文字,录音也不保留
- 「检测当前应用」的等待时间从 3 秒延长到 5 秒
- 悬浮窗长度的选项改按「长 / 中 / 短」排列
- 识别服务的检测结论超过 24 小时转为中性色并提示重测
- 千问流式识别缺少业务空间 ID 时在卡片上直接提示,不再等到录音时才失败

修复
- 选择本地识别模型后界面假死:读取引擎状态的命令移出主线程,且不再与模型
  加载抢同一把锁;加载期间给出明确提示
- 豆包仅填写一个密钥时,会把密钥同时当作 App ID 发送并写进请求体
- 仅开通「并发版」资源的豆包账号无法使用普通识别,现在会在小时版与并发版
  之间依次尝试
- 豆包的连接与请求日志记录服务端返回的 X-Tt-Logid,便于排查连接问题

详细变更见 CHANGELOG.md。
2026-08-07 17:47:56 +08:00
crosswk 4c7605e5f0 feat: 0.1.4 — 本地识别换代,AI 服务与设置页重做
新增
- 本地识别改用 transcribe.cpp(GGUF/ggml):可选模型从 2 个扩到 5 个
  (SenseVoice Small、Fun-ASR Nano、Qwen3-ASR 0.6B/1.7B/1.7B 高精度),
  支持 Vulkan 显卡加速并可手动切回 CPU,加载后预热一次推理,空闲可卸载
- AI 服务改为卡片式管理:一张卡一套完整配置,可测连通性与响应延迟并分档留痕
- 应用 Prompt 规则支持用户自建,含「检测当前应用」自动填进程名
- 快捷键支持 Ctrl+Win 这类纯修饰键组合,三类快捷键之间做冲突检测
- 配置导出可按需选择,导入前给出新增/更新/跳过的变更预览
- 热词组、文本替换、润色模式支持拖拽排序

变更
- 移除 sherpa-onnx:安装体积与首次响应都由新引擎接管,旧 ONNX 权重开机自动回收
- 「格式规范」仅在未开 AI 整理时生效,开启后排版交给 AI;文本替换始终生效
- 单次录音上限提前在设置页说明,最后一分钟显示剩余时间
- 全应用统一称「AI 整理」(此前有三种叫法)

修复
- 本地模式下模型未下载时仍能开始录音
- 历史记录可同时播放多条录音
- 设置页开关与选择器在读回已保存值时出现一次跳变
- 应用规则误匹配(在 Outlook 中写标题含 Teams 的邮件被 Teams 规则抢走)
- 弹窗遮罩未覆盖整个窗口

构建
- 客户端构建新增 CMake 与 Vulkan SDK 前置,README/CONTRIBUTING 已同步
- 打包随附 VC++ 运行库(app-local),并在发版前校验安装包内容

详细变更见 CHANGELOG.md。
2026-08-06 21:40:32 +08:00
crosswk 3b1f1e8980 更新 0.1.3 更新日志与关于页亮点:新增「历史记录开关」条目 2026-07-29 23:28:29 +08:00
crosswk 67b23f687f 新增关闭历史记录开关:可在设置中停止保存历史记录(默认开启) 2026-07-29 22:19:00 +08:00
crosswk 8fdf35d16f 修复「请靠近麦克风」说话也清不掉:容忍字间短暂停顿,累计正常音量达0.5s即清除,不再被停顿打回 2026-07-29 21:59:34 +08:00
crosswk d38bece14b 去掉 auto-accept 参数,改由 PermissionRequested 处理器授权麦克风(使权限持久granted以恢复设备枚举) 2026-07-29 21:37:02 +08:00
crosswk 0b8de417c1 麦克风名字:挂 WebView2 PermissionRequested 处理器将麦克风置为持久授权,恢复设备枚举 2026-07-29 21:33:53 +08:00
crosswk f1bf117af6 回退 --use-fake-ui-for-media-stream(导致WebView2创建失败0x8000FFFF) 2026-07-29 21:14:48 +08:00
crosswk e63c04f0a4 麦克风名字为空:WebView2 加 --use-fake-ui-for-media-stream 使权限持久化以恢复设备枚举 2026-07-29 21:06:09 +08:00
crosswk f017cde9df 麦克风列表:始终在活跃音频流下枚举,适配新版WebView2的设备名隐藏行为 2026-07-29 20:54:46 +08:00
crosswk 41d98dd275 修复麦克风名字为空:在音频流活跃时枚举设备(WebView2自动放行下权限不持久) 2026-07-29 20:40:08 +08:00
crosswk af7d5529e7 修复麦克风列表:枚举前先申请权限,恢复显示系统全部麦克风 2026-07-29 20:34:39 +08:00
crosswk b13eaccb79 客户端:将超链接样式移到网址本身,查看反馈进度改为说明文字 2026-07-29 20:25:58 +08:00
crosswk 8f70c94521 客户端:反馈成功提示注明待作者通过后方可查看进度 2026-07-29 20:23:28 +08:00
crosswk 741c92ff31 客户端:反馈成功提示移到消息位(不再额外撑高卡片),网址补全 /feedback.html 后缀 2026-07-29 20:14:55 +08:00
crosswk 67d5299bca 客户端:反馈成功提示显示服务器地址,查看反馈进度改为带上角标的下划线超链接 2026-07-29 20:03:04 +08:00
crosswk 65bbaaa686 客户端:反馈发送成功提示与查看进度链接合并为一行并常驻 2026-07-29 19:38:29 +08:00
crosswk 75dff8bb1f 客户端:查看反馈页链接改用当前配置的服务器地址 2026-07-29 17:54:44 +08:00
crosswk ae6b498206 客户端:反馈提交成功后增加查看公开反馈页的链接 2026-07-29 16:48:57 +08:00
crosswk 340a9805be 录音时区分「麦克风静音」与「声音偏小」,默认麦克风被静音显示红色高警
- 新增查询默认采集设备静音状态的命令 get_mic_mute_state(Windows Core Audio,查 eCapture 端点 GetMute),录音开始即时查询
- 默认麦克风被系统静音 → 悬浮窗即时红色高警「麦克风已被静音」;此时只在胶囊里居中显示红字、不画平波形,避免撑破圆角
- 基于音频信号的两档提醒:完全无信号(峰值≈0)→「未检测到声音」,有声音但 RMS 偏低 →「请靠近麦克风」
- 悬浮窗 warning 支持 error(红)/warn(琥珀) 两种级别;有警告时隐藏计时数字以免撑宽胶囊
- 检测到真实说话即清除提醒;选了特定麦克风时静音查询暂退回信号检测(默认设备可靠支持)
- 抽出 classifyMicLevel 纯函数并补单元测试;CHANGELOG / 关于页「本次更新」归入 0.1.3
2026-07-29 16:05:40 +08:00
crosswk 7d5eade190 0.1.3: 修复右Alt热键抢焦点、数字规范化误转「一点」、诊断页AI未开启;新增模型自定义存储位置与历史手工编辑
- 键盘钩子:Alt 类单键热键(按住说话/免提)连 keyup 一起吞,避免松键呼出目标程序菜单栏抢走输入框焦点、导致插入落空但日志显示成功
- 数字规范化:整点仅在有明确时间信号时才转,口语「一点」不再被误转为「1点」
- 诊断页:所有模式(含默认的服务器模式)关闭「AI 整理」后均显示「未开启(极速模式)」
- 新增本地模型自定义存储位置:可改存到其它磁盘,更换目录后自动迁移已下载模型
- 历史记录支持手工编辑整理结果:失焦/离开页面自动保存,编辑过的记录加小图标标记
- 版本号 0.1.2 → 0.1.3,同步更新 CHANGELOG 与关于页「本次更新」亮点
2026-07-29 13:40:14 +08:00
crosswk 73c8fa2a08 备份与迁移导入改用应用内弹窗,并补充导入导出更新日志与关于页
- 导入的覆盖确认与成功提示改为应用内弹窗(替代原生系统对话框),导入完成后自动重启

- 导出/导入失败提示改为卡片内内联横幅,与导出成功/进度样式统一

- CHANGELOG 将「备份与迁移」列为新增功能并说明导入导出;关于页发布亮点同步补充
2026-07-24 15:07:27 +08:00
crosswk d9ae553d3c 修复设置保存卡顿并优化诊断页 AI 校对状态显示(0.1.2)
- 修复保存润色模式/切换麦克风等设置后卡顿 2-4 秒:get_client_runtime_info 改用原生接口(GetUserDefaultLocaleName / GlobalMemoryStatusEx)替代 PowerShell,并把机器信息采集移出设置刷新热路径、启动时取一次复用

- 诊断页「AI 校对」未开启时不再显示绿色对勾,改为中性「未开启」状态并温和提示

- 通用设置无标题卡片补充「偏好设置」标题

- 更新 CHANGELOG 与关于页发布亮点,标注 0.1.2 发布日期
2026-07-24 12:12:13 +08:00
crosswk fc1eb4b0e7 修复悬浮窗创建失败并增加分级诊断日志;新增本地备份/恢复;版本 0.1.2
- 悬浮窗:WebView2 浏览器参数统一到 main.rs 全局常量,移除主窗专属 additionalBrowserArgs,并加启动一致性护栏

- 悬浮窗:创建链路改为分级日志(create dispatched / page load / renderer ready / render ack)与失败分类

- 新增本地备份与恢复功能

- 版本号 bump 到 0.1.2
2026-07-24 10:55:10 +08:00
crosswk 77bfe8b74f chore: 版本号 bump 到 0.1.1
- package.json / Cargo.toml / Cargo.lock / tauri.conf.json 版本号 0.1.0 → 0.1.1
- CHANGELOG 0.1.1 定版日期
2026-07-22 10:27:48 +08:00
crosswk d57db341dd 数字规范化时间修复 + 历史搜索高亮 + 默认开启(0.1.1)
- 数字规范化:修复时间(如「九点三十二分」)被误当小数、以及句末小数偶发不生效;默认改为开启
- 历史记录搜索:命中的关键词在正文与 ASR 原文里高亮显示
- 更新 CHANGELOG 与关于页更新摘要至 0.1.1
- 更新 README 用户反馈微信群二维码图片
2026-07-22 09:28:54 +08:00
crosswk b120593bdc 热词管理:过多时折叠 + 温和提示 + 支持情况表格
- 分类内热词超过 30 个自动折叠(显示前 30,可展开全部)
- 热词总数超过 200 时显示可关闭的温和提示(热词并非越多越好)
- 热词说明 ⓘ 改为表格,列出各模型热词支持与上限;Tooltip content 放宽为 ReactNode
2026-07-21 20:04:47 +08:00
crosswk 11ef6727ef 悬浮窗与快捷键体验优化(0.1.1)
- 悬浮窗置顶:显示/前台切换/显示期间周期性用原生 SetWindowPos 重申
  HWND_TOPMOST(不抢焦点),修复被其他置顶程序(播放器/会议共享条等)遮挡
- 低音量提醒:文案缩短并单行不换行、需持续说话约 0.5s 才消失(不再闪烁)、
  未听到过说话时静音约 2s 提醒、已说过话后约 5s 才提醒,避免过度催促
- 识别结果为空时用琥珀色短暂显示「未检测到有效声音」,不再一闪而逝
- 快捷键:「按住说话」「免提模式」支持绑定鼠标中键(复用低级鼠标钩子)
- 快捷键设置区新增信息说明(ⓘ);绑定中键后一次性提示其原功能将被占用
2026-07-21 10:15:59 +08:00
crosswk e9f0859980 插入文本内容排除出剪贴板历史与云剪贴板
- 写入剪贴板时附加 CanIncludeInClipboardHistory=0、CanUploadToCloudClipboard=0
  及 ExcludeClipboardContentFromMonitorProcessing 标记,使插入的文本及
  「保护剪贴板」还原的内容都不进入 Win+V 历史与云剪贴板
- CHANGELOG、关于页更新摘要同步记录本次优化
2026-07-18 20:31:10 +08:00
crosswk b34f063659 增强各 ASR 引擎的热词识别
- 豆包:热词 context 移到 request.corpus.context,修复热词不生效
- 千问 qwen3-asr-flash(非实时):改用逗号词表并加回显检测,避免整串回显热词库
- 新增 restoreHotwordSpacing:还原被 ASR 拆开/改小写的无空格热词,并接入重新识别路径
- 新增「热词注入 AI 提示词」开关(默认关,位于 AI 整理页),把热词表注入系统提示词以提升准确率
- 实时字幕开关与热词页新增信息提示,说明各模型热词支持与实时字幕取舍
2026-07-18 19:46:25 +08:00
crosswk f74dae42d1 fix: 数字规范化支持多段点分版本号 + 放宽豆包 Access Token 校验
- 数字规范化:多段「数字点数字点数字」按版本号处理(零点一点零 → 0.1.0),
  单段仍为普通小数(三点一四 → 3.14),修复此前只转第一段留下「点零」的问题
- 豆包 Access Token 格式校验放宽:Token 可能含 - _ 等符号、长度不固定,
  改为仅在包含空格/换行等明显异常时提示,避免误报
2026-07-17 23:48:49 +08:00
crosswk 95dd015130 feat: 流式实时字幕 + 诊断常见问题 + 应用规则扩展(0.1.0)
- 新增流式实时字幕:说话时在悬浮窗实时显示识别文字,支持豆包 Seed-ASR 2.0 与千问 qwen3-asr-flash-realtime;开关位于设置-外观页,默认关闭
- 悬浮窗字幕 UI:内容驱动尺寸、朝下尖角、光标闪烁动画,消除漂移与抖动
- 实时字幕仅对支持流式的模型生效(doubao_v2、qwen_realtime);千问实时需填写北京地域业务空间 ID
- qwen3-asr-flash 短音频热词回显修复
- 诊断页新增「常见问题」模块(文字无法插入的排查步骤)
- 应用 Prompt 规则新增 Codex、微信、QQ
- 修复诊断报告覆盖记录终点时间多余的 [ 符号
- 版本升级至 0.1.0,更新 CHANGELOG 与关于页更新摘要
2026-07-17 19:45:55 +08:00
crosswk 68dff21dc6 fix: 桌面模式服务器不再拼接指令语气的 user 消息外壳,三端 AI 校对统一中性标签 2026-07-17 10:11:16 +08:00