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
@@ -243,9 +243,7 @@ struct ClipboardHistoryPanelView: View {
}
if history.entries.isEmpty {
ExtL10n.text("keyboard.clipboard.panel.empty")
.font(.system(size: 14))
.foregroundStyle(palette.textSecondary)
emptyState
.frame(maxWidth: .infinity, maxHeight: .infinity)
} else {
ScrollView {
@@ -277,6 +275,26 @@ struct ClipboardHistoryPanelView: View {
.animation(.easeOut(duration: 0.16), value: showClearConfirmation)
}
/// Icon + title + one-line hint, so an empty panel explains what fills it.
private var emptyState: some View {
VStack(spacing: 6) {
Image(systemName: "doc.on.clipboard")
.font(.system(size: 22, weight: .regular))
.foregroundStyle(palette.textTertiary)
.padding(.bottom, 4)
.accessibilityHidden(true)
ExtL10n.text("keyboard.clipboard.panel.empty")
.font(.system(size: 14, weight: .semibold))
.foregroundStyle(palette.textSecondary)
ExtL10n.text("keyboard.clipboard.panel.emptyHint")
.font(TypeStyle.caption.weight(.regular))
.foregroundStyle(palette.textTertiary)
.multilineTextAlignment(.center)
}
.padding(.horizontal, 24)
.accessibilityElement(children: .combine)
}
private var clearConfirmationOverlay: some View {
VStack(spacing: 12) {
Image(systemName: "trash")