feat: harden Flow cold-start/force-quit and polish macOS dictation UX
Fix cold-start overlay recursion that overflowed the main-thread stack when recording began while the ready overlay was still up; also remove temporary on-screen Flow DEBUG panels after the orange-mic investigation, and land the macOS overlay/catalog/layout polish plus related Flow recovery hardening.
This commit is contained in:
+5
-5
@@ -20,7 +20,7 @@ OSGKeyboard 是商业语音输入工具的免费、源码可见替代方案。
|
||||
2. 自由说话(单次上限 3.5 分钟 / 210 秒)
|
||||
3. 再按一下结束 —— AI 自动整理成干净的文字并插入光标
|
||||
|
||||
**音频始终在设备本地转写**(iOS 26+ 的 `SpeechAnalyzer` + `DictationTranscriber`),**只有润色后的文本** 会发到你选择的云端 LLM。**音频永不离开你的手机。**
|
||||
默认情况下,**音频在设备本地转写**(iOS 26+ 的 `SpeechAnalyzer` + `DictationTranscriber`)——**除非你主动选择,音频不会离开你的手机**;开启润色时也只有文本会发到你选择的 LLM。你也可以显式切换到**云端识别引擎**(需二次确认的 opt-in):该模式下你的录音会上传到你配置的识别服务商。
|
||||
|
||||
项目内部采用 **Flow 会话模型**:主 App 维护一个长生命周期的音频会话,键盘扩展只通过 App Group 写入"开始 / 停止"等轻量信号,润色后的文本再由主 App 回传给键盘插入。**多次录音之间无需反复跳回主 App**。
|
||||
|
||||
@@ -33,7 +33,7 @@ OSGKeyboard 是商业语音输入工具的免费、源码可见替代方案。
|
||||
- ✍️ **AI 润色** —— 自动加结构、补标点、修正语法、可生成列表
|
||||
- 🧩 **本地 + 云端润色开关** —— 本地模式默认仅在设备上识别;若 iOS 语音识别效果不理想(远场、噪声、方言),可开启「识别后云端润色」,默认走 DeepSeek
|
||||
- 🔌 **自带 API 接入** —— 兼容任何 OpenAI 兼容协议端点(OpenAI / DeepSeek / Qwen DashScope / Moonshot / 智谱 / 自建服务器 ……)
|
||||
- 🔒 **隐私优先** —— 音频不离开设备;只有润色文本会发给你选择的 LLM
|
||||
- 🔒 **隐私优先** —— 默认端侧识别,音频不离开设备(除非显式开启云端识别引擎);润色只发送文本给你选择的 LLM
|
||||
- 🎨 **原生 SwiftUI** —— 暗色主题、毛玻璃、纯 Swift 6 实现,约 3,600 行代码
|
||||
- 🪶 **零依赖** —— 无 SwiftPM 包、无 CocoaPods、无 Carthage
|
||||
- 🔁 **Flow 会话** —— 多次录音无需跳回主 App,会话自动维持心跳与续期
|
||||
@@ -127,9 +127,9 @@ OSGKeyboard/
|
||||
|
||||
**引擎模式:**
|
||||
|
||||
- `cloud`(默认)—— 端侧 `SpeechAnalyzer` 识别,文本发到云端 LLM 润色。
|
||||
- `local` —— 仅端侧 `SpeechAnalyzer` 识别,原始文本直接插入,不联网。
|
||||
- `local` + 「识别后云端润色」开关(设置 → 引擎)—— 同样走端侧 ASR,但识别完成后送 LLM 润色再插入。适用于 iOS 识别效果不理想的场景。
|
||||
- `local`(默认)—— 仅端侧 `SpeechAnalyzer` 识别,原始文本直接插入,不联网。
|
||||
- `local` + 「识别后云端润色」开关(设置 → 引擎)—— 同样走端侧 ASR,但识别完成后送 LLM 润色(仅文本)再插入。适用于 iOS 识别效果不理想的场景。
|
||||
- `cloud`(opt-in,需显式确认)—— **你的语音录音会上传**到你配置的识别服务商(如 OpenAI `/audio/transcriptions`、DashScope、智谱),识别文本再送 LLM 润色。请在接受服务商隐私条款的前提下选用。
|
||||
|
||||
**跨进程管道(主 App ↔ 键盘扩展):**
|
||||
|
||||
|
||||
Reference in New Issue
Block a user