chore(release): bump version to 2.1.6 (build 131)

Version: CURRENT_PROJECT_VERSION 130 -> 131 (project.yml, AGENTS.md, READMEs,
docs/llms.txt).

fix(flow): host-app identification now compiles in every build configuration
(Debug, TestFlight, Release). The arbiter probe and HostAppIdentity were
DEBUG-only, so TestFlight/App Store builds never knew the host bundle id and
could not auto-return after a startflow handoff. Debug-only logging and the
Home test card are unchanged.

Also includes the pending work in the tree:
- Home: single account/setup card surface (HomeAccountSurfacePolicy/Views)
- Wide screens: voice key row and centred mic placement, iPhone Duo layout
- Keyboard: clipboard skill ranking and AI skill layout updates
- Debug: account session handoff to the Simulator (+ import script)
- Docs: portfolio assets, privacy policy URL, site/README refresh
This commit is contained in:
Rocky
2026-10-29 11:54:13 +08:00
parent 055a40976f
commit 4dce67df84
65 changed files with 3682 additions and 787 deletions
+19 -2
View File
@@ -237,13 +237,30 @@ public final class KeyboardState {
/// The view controller resolves this from device idiom + horizontal size
/// class so SwiftUI and the UIKit height constraint cannot disagree.
public var usesIPadLayoutMetrics: Bool = false
/// The custom system-keyboard switch is iPad-only. iPhone relies on the
/// system-provided switch below the keyboard instead of showing a duplicate.
/// Unfolded iPhone Duo: phone key layout on rows sized to the system
/// keyboard of the inner display. Resolved alongside
/// `usesIPadLayoutMetrics`; never true at the same time.
public var usesExpandedPhoneLayoutMetrics: Bool = false
/// Any iPhone in landscape (vertically compact): a shorter phone panel.
/// Never true together with the iPad or expanded-phone metrics.
public var usesCompactHeightPhoneLayoutMetrics: Bool = false
/// Whether the keyboard draws its own globe key: always on iPad, and
/// elsewhere only when UIKit reports no system switch below the keyboard.
public var showsSystemGlobeKey: Bool = false
/// Width the controller sized the keyboard to. Both the UIKit height
/// constraint and the SwiftUI key grid pick their metrics from this one
/// value so they can never disagree and clip the bottom row.
public var layoutWidth: CGFloat = 0
/// Wide hosts swap the voice surface's circle cluster for a keyboard-style
/// bottom row aligned with the typing keys (see `VoiceKeyRowLayout`).
public var usesVoiceKeyRow: Bool {
VoiceKeyRowLayout.isAvailable(
usesIPadMetrics: usesIPadLayoutMetrics,
usesExpandedPhoneMetrics: usesExpandedPhoneLayoutMetrics,
usesCompactHeightPhoneMetrics: usesCompactHeightPhoneLayoutMetrics,
hostWidth: layoutWidth
)
}
/// `true` when the last voice insertion is still at the caret and can
/// be undone (suffix-checked against `documentContextBeforeInput`).
public var undoAvailable: Bool = false