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
+22 -3
View File
@@ -8,6 +8,25 @@ struct LastInputEditView: View {
private enum Layout {
static let primaryButtonHeight = KeyboardChromeLayout.assistantActionCapsuleHeight
static let primaryButtonWidth: CGFloat = primaryButtonHeight * 3
static let pagesHeight: CGFloat = 174
}
/// Phone and iPad keep the fixed 281 pt column; the shorter expanded-phone
/// and landscape-phone shells take the difference out of the review pages.
private var surfaceHeight: CGFloat {
guard state.usesExpandedPhoneLayoutMetrics || state.usesCompactHeightPhoneLayoutMetrics else {
return KeyboardChromeLayout.totalHeight
}
return TypingSurfaceMetrics.contentHeight(
isIPad: false,
width: state.layoutWidth,
isExpandedPhone: state.usesExpandedPhoneLayoutMetrics,
isCompactHeightPhone: state.usesCompactHeightPhoneLayoutMetrics
)
}
private var pagesHeight: CGFloat {
Layout.pagesHeight - (KeyboardChromeLayout.totalHeight - surfaceHeight)
}
@Environment(\.colorScheme) private var colorScheme
@@ -32,17 +51,17 @@ struct LastInputEditView: View {
}
.allowsHitTesting(false)
}
.frame(height: 174)
.frame(height: pagesHeight)
.contentShape(Rectangle())
.simultaneousGesture(reviewSwipeGesture)
primaryRow.frame(height: 55)
}
.frame(maxWidth: KeyboardChromeLayout.voiceContentMaxWidth)
.frame(maxWidth: KeyboardChromeLayout.voiceContentWidthCap(usesVoiceKeyRow: state.usesVoiceKeyRow))
}
.padding(.vertical, 4)
.padding(.horizontal, KeyboardChromeLayout.horizontalInset)
.frame(maxWidth: .infinity)
.frame(height: KeyboardChromeLayout.totalHeight)
.frame(height: surfaceHeight)
.environment(\.themePalette, palette)
.onChange(of: state.editSession) { _, newValue in
guard let review = newValue.review else {