Peter Steinberger
ac89350327
feat(apps): review durable approvals on mobile ( #104913 )
...
* feat(apps): Android, iPhone, and Watch approval clients
Squash-rebased #103912 segment onto the deep-links tip on current main.
Native approval surfaces: iOS approval presentation with gateway-switch
lease preservation and resolution fencing, watchOS inbox + approval
actions with shipped-shape payload codec, Android approval notices with
publication-tokened dismissal. Native i18n inventory regenerated.
(cherry picked from commit 428a76670ffeede54248b7bd7aa4438e2589851b)
(cherry picked from commit 80225d5707c3645eeea5435f266131037b50ede6)
(cherry picked from commit 2a23b714dc30d773a294aa45adc617e46b80732e)
(cherry picked from commit 9ff1153827769e2cbab7c11c153f0f8634662c28)
(cherry picked from commit 5b25723525bd562e5f97478af492f7b46ad30fd1)
(cherry picked from commit 8c80e8467b5fe89aad0d4c74a0573f1600ed3af9)
(cherry picked from commit ad4037bc9846bf6f082b41c129ee68aa344576c3)
(cherry picked from commit fdf767dd662cff3c8a5a6d571f38f153410651ca)
(cherry picked from commit 00c120376ffd992ea68ce29254a9bc0a25ed1740)
(cherry picked from commit f36a95213e )
(cherry picked from commit e2c25cbe2baacab44d21871d8cb6734704f065ac)
(cherry picked from commit 7c4fda519080486d341a9f4df36d63f9e24b1235)
(cherry picked from commit 1b3d4eda3dc5988012124597f9454ae21fb187a1)
(cherry picked from commit 2a60619722 )
(cherry picked from commit 6f0c386567 )
(cherry picked from commit 784a5857b7 )
(cherry picked from commit cbf294e026841c9bc2799da0fc7db666a69c52db)
* fix(apps): harden approval reconciliation and watch states
2026-07-11 19:59:07 -07:00
NianJiu
067edbcb2d
fix(ios): make Talk audio lifecycle-safe ( #103072 )
...
* fix(ios): cancel queued push-to-talk invokes
* fix(ios): make push-to-talk cancellation lifecycle-safe
* style(ios): use switch expression for PTT result
* fix(ios): bind audio capture to lifecycle owners
Co-authored-by: NianJiuZst <180004567+NianJiuZst@users.noreply.github.com >
* style(ios): format rebased lifecycle changes
Co-authored-by: NianJiuZst <180004567+NianJiuZst@users.noreply.github.com >
* fix(ios): preserve routing hydration across reconnects
Co-authored-by: NianJiuZst <180004567+NianJiuZst@users.noreply.github.com >
* fix(ios): cancel routing hydration on target switch
Co-authored-by: NianJiuZst <180004567+NianJiuZst@users.noreply.github.com >
* chore(ios): refresh native i18n inventory
Co-authored-by: NianJiuZst <180004567+NianJiuZst@users.noreply.github.com >
* fix(i18n): preserve native localization IDs
* chore: leave changelog to release automation
* refactor(apple): split lifecycle and gateway helpers
Co-authored-by: NianJiuZst <180004567+NianJiuZst@users.noreply.github.com >
* fix(ios): make lifecycle parsing nonisolated
* fix(ios): consume canonical Talk events
---------
Co-authored-by: NianJiuZst <180004567+NianJiuZst@users.noreply.github.com >
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-10 15:03:40 +01:00
Peter Steinberger
62bd760c0e
chore(swift): enforce current formatting and lint rules ( #103313 )
...
* style: apply SwiftFormat 0.62.1 rules
Refs #103202
* ci: enforce deterministic Swift lint
Refs #103202
* refactor: keep gateway connect lint-clean
Refs #103202
* style: keep iOS typography checks warning-free
* ci: route MLX Swift changes through pre-push
* fix: preserve native i18n extraction after Swift cleanup
* refactor: keep rebased Swift surfaces lint-clean
* style: format latest Swift additions
* chore: refresh native i18n inventory
* style: keep generated Swift formatter-clean
* fix: preserve node route invalidation callbacks
* fix: keep native translation IDs stable
* fix: retain native translation identifiers
* fix: preserve translations across Swift source moves
2026-07-10 11:54:08 +01:00
Peter Steinberger
7fe004d852
feat: show build identity in About screens ( #103595 )
...
* feat: show build identity in About screens
* chore: leave root changelog to release automation
* fix: translate Control UI About build details
2026-07-10 10:42:36 +01:00
Sahil Satralkar
4e3d91a020
feat: iOS Privacy screen location controls ( #103096 )
...
* Fix iOS privacy location card presentation
* Refine iOS location privacy controls
* fix(ios): restore location access chooser
* style(ios): format location access dialog
* chore: keep release note in PR body
* test(ios): keep privacy coverage focused
* fix(ios): clear unresolved location mode
* chore(ios): refresh native strings
* fix(ios): localize location status copy
---------
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-10 05:42:04 +01:00
Peter Steinberger
1f12e7fc87
fix(ios): replace dead-end discovered gateway connects ( #103289 )
...
* fix(ios): clarify insecure discovered gateways
* fix(ios): finish discovered gateway guidance
* fix(ios): preserve gateway failure expression
2026-07-10 05:08:58 +01:00
Raghav Sethi
19f42a27e5
feat(ios): redesign Control tab to a flatter, card-based layout ( #98582 )
...
* feat(ios): refresh Control tab layout
Co-authored-by: Raghav Sethi <rsraghavsethi@gmail.com >
* fix(ios): align Control card edges
---------
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-09 15:08:07 +01:00
Peter Steinberger
6621ead871
improve(ios): manage notifications from Privacy ( #102733 )
...
* improve(ios): manage notifications from privacy
Co-authored-by: Sahil Satralkar <62758655+sahilsatralkar@users.noreply.github.com >
* fix(ios): make notification status returns explicit
---------
Co-authored-by: Sahil Satralkar <62758655+sahilsatralkar@users.noreply.github.com >
2026-07-09 12:35:29 +01:00
mahmoud
32510a3225
improve(ios): show connection progress and errors prominently in onboarding gateway step ( #101921 )
...
* fix(ios): surface connection progress and errors prominently in onboarding gateway step
* fix(ios): surface onboarding validation failures
* chore(ios): sync native string inventory
---------
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-09 10:03:26 +01:00
Josh Avant
6438c89f05
fix(mobile): clarify gateway connection security setup ( #101325 )
...
* fix(mobile): clarify gateway connection setup
* chore(i18n): sync native mobile strings
* fix(mobile): align manual gateway previews
* chore(i18n): refresh native source inventory
* chore(android): remove unused connect tab strings
* test(i18n): drop removed connect tab sentinel
* fix(ios): brand connection security picker labels
* fix(mobile): hide gateway endpoint previews
* chore(i18n): sync native source inventory
* fix(mobile): remove redundant TLS helper copy
2026-07-07 14:43:11 -05:00
Colin Johnson
632efa2d73
fix ios qr scanner lifecycle ( #101235 )
...
* fix ios qr scanner lifecycle
* fix(ios): tighten QR scanner lifecycle change
---------
Co-authored-by: joshavant <830519+joshavant@users.noreply.github.com >
2026-07-06 21:34:44 -05:00
Peter Steinberger
36b733bf5c
feat(ios): pair multiple gateways and switch between them without re-pairing ( #100948 )
...
* feat(ios): multi-gateway registry, per-gateway credentials, and switching
* fix(ios): harden multi-gateway state isolation
2026-07-06 20:29:02 +01:00
Peter Steinberger
06789ca4c2
fix(ios): keep offline chat sends on their original route ( #100942 )
2026-07-06 17:53:05 +01:00
Peter Steinberger
f1d28c855c
fix(ios): unify Talk and Settings row typography on one branded detail row ( #100515 )
...
* fix(ios): unify Talk and Settings row typography on one branded detail row
* chore(i18n): sync native string inventory for iOS detail row refactor
2026-07-06 07:46:19 +01:00
Peter Steinberger
443c582949
fix(ios): restore in-flight runs after reconnect ( #100277 )
...
* fix(ios): restore in-flight chat runs from gateway history
Restore active Apple chat ownership across reconnect, foreground, and sequence-gap recovery using the existing chat.history snapshot. Preserve agent/session scoping and Gateway user-turn identity across Codex and Copilot mirrors, including current offline-cache integration.
* fix(ios): restore in-flight chat runs from gateway history
2026-07-06 03:23:38 +01:00
PollyBot13
a320f775f0
fix(ios): defer QR pairing after scanner dismissal ( #99572 )
...
* fix(ios): defer QR pairing after scanner dismissal
* fix(ios): process QR pairing after scanner dismissal
* fix(ios): harden QR scanner handoff
* fix(ios): give QR scanner dismissal more time
* fix(ios): keep onboarding open for QR trust prompt
* fix(ios): keep QR trust prompt owned by onboarding
* fix(ios): recover operator pairing after QR bootstrap
* fix(ios): cancel stale QR scanner handoffs
Co-authored-by: PollyBot13 <pollybot13@gmail.com >
* fix(ios): defer QR setup until onboarding closes
* fix(ios): keep QR setup links with visible settings
* fix(ios): consume setup links during onboarding
* fix(ios): handle setup links during onboarding launch
* fix(ios): route setup links through active onboarding
* fix(ios): harden QR gateway handoff
* fix(ios): cancel superseded gateway attempts
* fix(ios): serialize scanner result delivery
* fix(ios): prevent stale gateway reconnects
* fix(ios): serialize gateway target handoff
* fix(ios): disable stale gateway relaunch route
* fix(ios): await staged bootstrap reset
* test(ios): bound gateway reset handoff
* fix(ios): preserve explicit gateway handoff
* fix(ios): harden gateway lifecycle ownership
* chore(ios): sync native i18n inventory
* test(ios): align gateway ownership assertions
* refactor(ios): remove superseded gateway helpers
* fix(ios): keep gateway auth route scoped
* fix(ios): restore gateway target review state
* fix(protocol): refresh Swift plugin approval model
* test(ios): isolate state directory overrides
* fix(ios): preserve watch alerts across gateway switches
* fix(ios): bind deferred work to gateway ownership
* docs(changelog): credit iOS gateway handoff fix
* chore(i18n): sync native app inventory
* test(ios): remove unused Watch approval hooks
---------
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-05 12:31:53 -07:00
Peter Steinberger
862de9f1a1
fix(pairing): advertise reachable Tailnet routes ( #100317 )
...
* fix(pairing): advertise reachable tailnet routes
* fix(pairing): satisfy native and SDK checks
* fix(ios): cancel stale pairing route probes
* test(pairing): document LAN-only Serve fallback
* fix(ios): preserve pairing result initializer
2026-07-05 07:43:43 -07:00
Peter Steinberger
211e0d7263
feat(ios): Terminal hub destination embedding the gateway terminal page
2026-07-04 20:07:19 -07:00
Marvin Kaunda
5370f64cf0
improve: native iOS look with stock SwiftUI navigation, forms, chat, and talk visualizer ( #99231 )
...
* improve(ios): adopt native SwiftUI chrome across the app
* fix(ios): keep phone chat on the native navigation bar
* fix(ios): render licenses screen as native settings rows
* fix(ios): complete native interface polish
* fix(ios): preserve branded native interface
* test(ios): align gateway badge source guard
* fix(ios): center onboarding on iPad
* fix(ios): remove dead reskin symbols
---------
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-03 18:17:09 -07:00
joshavant
b4c5cd511a
fix(ios): apply typography to native chrome
2026-07-03 18:45:45 -05:00
Peter Steinberger
32762dad53
fix(ios): return chat to originating control detail ( #99245 )
...
* fix(ios): return chat to originating control detail
Co-authored-by: Colin <colin@solvely.net >
* fix(ios): reset retained state before control chat handoff
Co-authored-by: Colin <colin@solvely.net >
---------
Co-authored-by: Colin <colin@solvely.net >
2026-07-02 15:20:51 -07:00
Sahil Satralkar
09de1642f3
fix: Update Dark/Light mode UI control appearance ( #99052 )
...
* fix: keep iOS appearance row visible
* test(ios): verify appearance preference updates
---------
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-02 14:53:24 -07:00
Lokimorty
4f933ccf7b
fix(ios): gateway error shows twice on the Settings Gateway page ( #98856 )
...
* fix(ios): show gateway errors once as a swipeable animated toast
Gateway connection errors on the Settings > Gateway page appeared twice:
as the app-wide toast and again as an embedded banner section. Remove the
embedded banner (and its now-dead sheet/action helpers) so problems surface
only via the root toast, animate the toast in smoothly from the top, and
support swipe-up to dismiss with re-arm on new problems.
* fix(ios): re-surface gateway toast on repeated problem reports
A swiped-away toast stayed hidden when a retry failed with an identical
problem, because value equality alone produces no observable change. The
model now counts every problem report; a report while hidden re-shows the
toast, and a report while visible shakes it instead of stacking a new one.
* fix(ios): keep reset-onboarding action on the gateway toast and sync i18n inventory
The root toast is now the only gateway problem surface outside covers, so it
must keep the reset-onboarding primary action the removed settings banner had:
auth-token-mismatch problems now show Reset onboarding and run the full
GatewayOnboardingReset flow. Also refreshes the native i18n inventory for the
changed Swift strings.
* fix(ios): preserve gateway problem recovery state
---------
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-02 04:50:12 -07:00
Sahil Satralkar
574604e3da
fix: clean up iOS About page copy ( #98985 )
...
* fix: clean up iOS About page copy
* fix(ios): sync About copy inventory
---------
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-02 04:09:29 -07:00
Lokimorty
9d3e263365
fix(ios): back from settings details returns to the originating screen ( #98898 )
...
* fix(ios): back from settings details returns to the originating screen
Detail views reachable from multiple places (gateway, voice, notifications
settings) previously opened by switching to the canonical Settings tab, so
Back landed on the Settings root instead of the screen the user came from.
Phone tabs now push SettingsRoute details on their own NavigationStack via
PhoneTabSettingsHost, the Control hub pushes the gateway detail onto its own
stack, and the Approvals->Notifications shortcut appends instead of replacing
the path (phone and iPad). Global flows (deep links, onboarding, problem
banner, notification dialog) still jump to the canonical Settings tab.
* chore(i18n): sync native app i18n inventory line references
* test(ios): prove settings back navigation
* test(ios): prove settings back navigation
---------
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-02 10:08:39 +01:00
Peter Steinberger
c4102f5d67
feat(ios): refine the chat experience ( #98953 )
...
* feat(ios): refine the chat experience
* feat(ios): refine the chat experience
2026-07-02 08:40:53 +01:00
Peter Steinberger
313560d5b9
feat(ios): modernize navigation and settings ( #98811 )
...
* feat(ios): modernize navigation and settings
* fix(ios): remove obsolete settings helpers
* test(ios): update i18n collector fixture
* test(ios): update i18n collector fixture
* test(ios): update i18n collector fixture
2026-07-02 02:43:49 +01:00
Peter Steinberger
8502ef6c59
feat(ios): modernize the app with iOS 26 Liquid Glass ( #98452 )
...
* feat(ios): adopt iOS 26 Liquid Glass design
* refactor(ios): refine Liquid Glass hierarchy
* docs(ios): require Xcode 26
* refactor(ios): remove obsolete design helpers
* fix(ios): keep agent tab navigation hidden
* fix(ios): compact chat composer at rest
* refactor(ios): reduce interface density
* fix(ios): keep native string inventory current
2026-07-01 19:06:04 +01:00
PollyBot13
ffd7d68687
fix: route iOS Talk fallback settings correctly ( #98602 )
2026-07-01 11:26:34 -04:00
Josh Avant
0c7bac34ae
fix(ios): classify TLS fingerprint timeouts ( #98429 )
...
* fix(ios): classify gateway TLS fingerprint timeouts
* Add discovered TLS trust regression test
2026-07-01 01:06:13 -05:00
Peter Steinberger
c230ab3c92
improve(ios): clarify Control and Talk visual hierarchy ( #98423 )
...
* feat(ios): refine control and talk visual hierarchy
* feat(ios): refine control and talk visual hierarchy
* feat(ios): refine control and talk visual hierarchy
2026-07-01 06:19:58 +01:00
Josh Avant
ad59492d3c
fix: show actionable mobile protocol mismatch recovery ( #98385 )
...
* Fix mobile protocol mismatch recovery
* Test iOS protocol mismatch connect failures
* Fix iOS protocol mismatch problem actions
2026-07-01 00:11:03 -05:00
Brian Snyder
63dc9201c6
fix(ios): open app on chat by default ( #98353 )
...
Co-authored-by: BSnizND <199837910+BsnizND@users.noreply.github.com >
2026-06-30 23:54:01 -04:00
Colin Johnson
54b09580f6
fix(ios): reset sidebar navigation stacks ( #94991 )
2026-06-29 20:56:22 -04:00
joshavant
fcedd37067
test(ios): guard local network permission trigger points
2026-06-23 14:48:33 -05:00
joshavant
8efed50c4e
fix: gate ios push enrollment on notification consent
2026-06-23 01:38:24 -05:00
joshavant
920bd04e19
fix(ios): make notification guidance suppression a button
2026-06-21 23:40:56 -04:00
joshavant
c3ab1feb61
test(ios): cover notification permission UX
2026-06-21 23:40:56 -04:00
Sash Zats
233b48daaa
refactor: prune unused iOS code ( #91996 )
...
Prune unused iOS surfaces and regenerate the Xcode project. Add a scoped Periphery PR gate with hardened artifact handling and stale-status cleanup.
Co-authored-by: Sash Zats <sash@zats.io >
2026-06-15 02:07:15 -07:00
Colin Johnson
bf89552e67
Improve iPad and iPhone control surfaces ( #91557 )
...
* feat(ios): expand iPad layout support
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com >
* feat: improve iPad and iPhone control surfaces
* fix: preserve workboard dispatch compatibility
* fix: keep Talk reachable on iPad
* fix: add universal iPad app icons
* fix: address ready-review iOS feedback
* fix: avoid workboard board id shadowing
* fix ios sidebar separators
---------
Co-authored-by: Solvely-Colin <211764741+Solvely-Colin@users.noreply.github.com >
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com >
Co-authored-by: joshavant <830519+joshavant@users.noreply.github.com >
2026-06-09 21:46:02 -05:00