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
+14 -3
View File
@@ -613,9 +613,16 @@ private struct TranscriptLine: View {
Group {
switch micVoiceAvailability {
case .ready:
ExtL10n.text("keyboard.placeholder.idle")
// Soft tip when polish key is missing but local ASR can still run.
if !micDisabledHint.isEmpty {
Text(micDisabledHint)
} else {
ExtL10n.text("keyboard.placeholder.idle")
}
case .unavailable(.missingAPIKey):
Text(micDisabledHint)
Text(micDisabledHint.isEmpty
? ExtL10n.string("keyboard.mic.disabled.missingApiKey")
: micDisabledHint)
case .unavailable(.hostNotReady):
ExtL10n.text("keyboard.placeholder.idle")
case .unavailable(.preparingSession):
@@ -631,7 +638,11 @@ private struct TranscriptLine: View {
}
}
.font(TypeStyle.caption)
.foregroundStyle(isWarning ? palette.warning : palette.textTertiary)
.foregroundStyle(
(isWarning || (micVoiceAvailability.isReady && !micDisabledHint.isEmpty))
? palette.warning
: palette.textTertiary
)
.lineLimit(1)
.truncationMode(.tail)
}