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
@@ -6,6 +6,17 @@ import XCTest
@MainActor
final class KeyboardSurfaceStateTests: XCTestCase {
@MainActor
func testBusyAISessionLocksOtherSurfacesAndShowsCancel() {
let state = KeyboardState()
state.surface = .ai
state.aiSession.enter()
state.aiSession.beginPreparing(utteranceID: UUID())
XCTAssertTrue(state.locksTypingSurface)
XCTAssertTrue(state.canCancelAIInput)
}
func testRecordingLocksTyping() {
let state = KeyboardState()
state.phase = .idle