feat(keyboard): ship AI mode surface with streaming search answers

Add the AI keyboard tab, Agent settings, and user-owned LLM key path for 1.7.0, including streaming answers and web-search transports without the built-in DeepSeek fallback.
This commit is contained in:
Rocky
2026-08-11 01:06:27 +08:00
parent f6212dcd2c
commit 3de665d254
81 changed files with 4467 additions and 398 deletions
@@ -11,6 +11,8 @@ public enum FlowUtteranceMode: String, Codable, Equatable, Sendable {
case dictation
/// ASR is an explicit instruction over the last verified OSG insertion.
case editLastInput
/// ASR is a direct question for the temporary AI conversation.
case aiQuestion
/// Decoded only from retired or unknown wire modes. Production code must
/// reject this value and must never treat it as dictation.
case unsupportedLegacy
@@ -22,6 +24,8 @@ public enum FlowUtteranceMode: String, Codable, Equatable, Sendable {
self = .dictation
case Self.editLastInput.rawValue:
self = .editLastInput
case Self.aiQuestion.rawValue:
self = .aiQuestion
case "clipboardCommand", Self.unsupportedLegacy.rawValue:
self = .unsupportedLegacy
default: