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
@@ -32,6 +32,20 @@ final class FlowBudgetAndMergeTests: XCTestCase {
}
}
func testAIKeyboardTimeoutOutlastsASRAndAnswerGeneration() {
for engineMode in ["local", "cloud"] {
let hostWorstCase = (engineMode == "local"
? FlowSessionKeys.localASRWaitTimeout
: FlowSessionKeys.cloudASRWaitTimeout)
+ FlowSessionKeys.batchASRFallbackTimeout
+ FlowSessionKeys.aiQuestionRequestTimeout
XCTAssertGreaterThan(
FlowSessionKeys.keyboardAIResultTimeout(engineMode: engineMode),
hostWorstCase
)
}
}
// MARK: - SyncedField future-clock clamping
func testMergePrefersGenuinelyNewerRemote() {