Commit Graph

488 Commits

Author SHA1 Message Date
Josh
e43c72954a Polish iOS onboarding and chat critique fixes (#99243)
* fix(ios): polish onboarding and empty chat

Co-authored-by: Josh <17843332+jcooley8@users.noreply.github.com>

* fix(ios): correlate pending chat echoes

* fix(ios): ship localized chat starters

* fix(ios): preserve chat echo identity

* fix(ios): adopt late correlated chat echoes

* fix(ios): reconcile reused chat runs

* fix(ios): preserve transformed chat history

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-04 00:38:56 -07:00
VicZhang
7acfb63535 feat: add slash command picker in chat composer (#99426)
* feat: add iOS slash command picker

* refine iOS slash command picker presentation

* Fix iOS slash picker scroll affordance build

* Preserve branded mono typography in slash picker

* Refresh native i18n inventory

* Remove slash picker row icons

* Refresh native i18n inventory

---------

Co-authored-by: Colin <colin@solvely.net>
2026-07-03 22:53:25 -04: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
37474b2e06 Restore branded button disabled states 2026-07-03 18:45:45 -05:00
joshavant
b525191150 Cap iOS chrome typography scaling 2026-07-03 18:45:45 -05:00
joshavant
52ed5eca49 Fix iOS branded typography dynamic type refresh 2026-07-03 18:45:45 -05:00
joshavant
426672ccb1 Restore location permission copy scope 2026-07-03 18:45:45 -05:00
joshavant
d3848d39f2 Remove out-of-scope location guidance 2026-07-03 18:45:45 -05:00
joshavant
25c8fbb5e7 Fix iOS typography rebase audit 2026-07-03 18:45:45 -05:00
joshavant
b5f754b63d Restore gateway secure field accessibility 2026-07-03 18:45:45 -05:00
joshavant
7a1f3d7183 Fix iOS typography CI checks 2026-07-03 18:45:45 -05:00
joshavant
37a9b9a91c Audit iOS branded typography coverage 2026-07-03 18:45:45 -05:00
joshavant
700403e840 Fix Gateway branded typography coverage 2026-07-03 18:45:45 -05:00
joshavant
788472ed4a Apply branded fonts across iOS sibling controls 2026-07-03 18:45:45 -05:00
joshavant
17f152ddd0 fix(ios): brand remaining SwiftUI controls 2026-07-03 18:45:45 -05:00
joshavant
d483cc1f72 fix(ios): cover remaining branded typography surfaces 2026-07-03 18:45:45 -05:00
joshavant
b4c5cd511a fix(ios): apply typography to native chrome 2026-07-03 18:45:45 -05:00
joshavant
ea3c6dc5f7 fix(ios): align branded typography licenses 2026-07-03 18:45:45 -05:00
joshavant
9184a68ab8 fix(ios): list bundled font licenses 2026-07-03 18:45:45 -05:00
joelnishanth
97e582ec74 fix(ios): address ClawSweeper review findings
- Remove location guidance from SettingsProTabSections (out of scope)
- Revert ChatProTab to connectionStatusButton/connectionStatusIcon
  to preserve source guard contract (plain style, Circle content shape)
- Change OpenClawType from static let to static var for Dynamic Type
  responsiveness (re-computes through UIFontMetrics each access)
- Add exact provenance: upstream revision URLs and SHA-256 checksums
  for all 14 bundled font binaries
- Re-sync native i18n inventory

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-03 18:45:45 -05:00
joelnishanth
9f73c9acdc fix(ios): remove leaked location capability and restore chat hooks
- Remove UIBackgroundModes location from project.yml/Info.plist
- Restore emptyAssistantIntro in ChatProTab
- Restore accessibilityIdentifier("chat-gateway-status")
- Restore gatewayAccessibilityLabel computed property
- Re-sync native i18n inventory

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-03 18:45:45 -05:00
joelnishanth
39b703dfcf feat(ios): implement branded typography design system
Add OpenClaw design system foundations:
- Custom typography tokens (OpenClawType) using Plus Jakarta Sans,
  DM Sans, and JetBrains Mono with Dynamic Type scaling
- Spacing and radius token enums (OpenClawSpacing, OpenClawRadius)
- Additive brand color tokens (accentPressed, teal, void, obsidian,
  slate, textPrimary, textSecondary)
- Shared components: OpenClawToggleIndicator, OpenClawStatusBadge,
  OpenClawPrimaryButtonStyle, OpenClawSecondaryButtonStyle
- Bundled font files with OFL license provenance

Migrate all iOS views to OpenClawType tokens. No behavioral, navigation,
or routing changes — this is purely visual/typographic.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-03 18:45:45 -05:00
PollyBot13
671c315072 feat: clarify iOS Location Always permission flow (#99247)
* feat: clarify iOS Location Always permission flow

* fix(ios): avoid stale location permission summary

* fix(ios): clarify disabled location permission grants

* fix(ios): sync external location grants into settings

* chore(ios): refresh native i18n inventory

* fix(ios): preserve location off during permission sync

* fix(ios): preserve while using during location sync

* fix(ios): wait for location permission prompts

* fix(ios): reconcile significant location monitoring

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-03 14:16:20 -07:00
Sahil Satralkar
d29a4f9c2f improve: tighten iOS Control row density (#99468)
* improve: tighten iOS Control row density

* test(ios): drop brittle control row source guards

* chore(i18n): sync iOS Control inventory

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-03 13:17:42 -07:00
NianJiu
51859fe0e4 fix ios node invoke permission prompts (#99477)
Co-authored-by: NianJiuZst <180004567+NianJiuZst@users.noreply.github.com>
2026-07-03 12:49:20 -07:00
Abdullah Taş
6b869a6188 fix(ios): contacts.add crashes the app via unfetched CNContactFormatter keys (#99475)
* fix(ios): prevent contacts.add crash from unfetched CNContactFormatter keys

ContactsService.payload(from:) formats contacts with CNContactFormatter, but
payloadKeys did not include the formatter's required-key descriptor. The
formatter then reads name components (e.g. middleName) that were not fetched,
so CNContact raises CNPropertyNotFetchedException — an Objective-C exception
that is not caught by Swift error handling and terminates the app.

Add CNContactFormatter.descriptorForRequiredKeys(for: .fullName) to payloadKeys
so every key the formatter touches is fetched.

* fix(ios): clarify contact formatter contract

---------

Co-authored-by: abdullahtas0 <“dev.abdullahtas@gmail.com”>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-03 03:08:15 -07:00
Peter Steinberger
0e68c50139 fix(ios): add Photos permission controls (#99350)
* fix(ios): add Photos permission controls

* chore(i18n): sync native Photos strings

* fix(ios): align Swedish Photos disclosure

* test(ios): complete limited Photos UI proof

* chore(i18n): refresh native source lines
2026-07-02 22:11:14 -07:00
Abdullah Taş
c37961fdab fix(ios): onboarding Retry Connection does nothing after editing gateway details (#99220)
* fix(ios): make onboarding Retry Connection use current manual input

Retry Connection on the auth step replayed connectLastKnown(), which
silently returns when no last connection is stored and otherwise redials
the stale persisted endpoint, ignoring host/port/TLS and token edits made
on screen. Manual retries now dial the current form input; discovered
gateway retries keep the previous behavior.

* fix(ios): repair onboarding credential retry

Co-authored-by: Abdullah Taş <29359748+abdullahtas0@users.noreply.github.com>

---------

Co-authored-by: abdullahtas0 <“dev.abdullahtas@gmail.com”>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-02 20:49:14 -07:00
joshavant
cfa7b1b616 Add iOS licenses settings screen 2026-07-02 20:34:59 -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
PollyBot13
2f707f9811 fix: prevent Voice Wake crash after Talk audio capture (#99137)
* fix: prevent Voice Wake audio restart race

* fix: handle in-flight Voice Wake suspension

* test(ios): harden Voice Wake lifecycle proof

* fix(ios): remove Voice Wake tap after failed start

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-02 14:41:49 -07:00
NianJiu
3424ee6771 fix: stop iOS screen recording after cancellation (#99155)
* fix: stop iOS screen recording after cancellation

* test(ios): exercise real screen-record cancellation

---------

Co-authored-by: NianJiuZst <180004567+users.noreply.github.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-02 14:14:30 -07:00
PollyBot13
8b99c45bbb fix: route iOS OpenAI realtime Talk through WebRTC (#98563)
* fix: route iOS OpenAI realtime talk through WebRTC

* fix(ios): harden native realtime routing

* fix(ios): preserve realtime route ownership

* fix(ios): balance realtime audio sessions

* chore(ios): sync native i18n inventory

* fix(ios): preserve Azure realtime relay

* fix(ios): harden realtime session recovery

* chore(ios): sync native i18n inventory

* fix(ios): preserve selected Azure realtime routing

* fix(ios): rotate terminal realtime sessions

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-02 12:49:23 -07:00
Sahil Satralkar
496ce0e05d fix: Control row icons use inconsistent row styling (iOS) (#98936)
* fix: align iOS Control row icon styling

Closes #98916.

* chore(ios): sync native i18n inventory

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-02 05:07:02 -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
OfflynAI
133ce01e4a feat(ios): PR1 brand color palette overhaul (#98930)
* feat(ios): align brand color tokens with design guide (PR1)

* fix(ios): preserve brand contrast

* fix(ios): cover tinted palette surfaces

* chore(ios): sync native i18n inventory

* chore(ios): sync native i18n inventory

* chore(ios): sync native i18n inventory

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-02 09:12:19 +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
3e50f41dd6 improve(ios): simplify Talk controls and composer alignment (#98736)
* refactor(ios): streamline talk and composer controls

* test(ios): restore Talk control state

* chore(ios): refresh native i18n inventory
2026-07-02 00:48:37 +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
Vincent Koc
5e4d71686a fix(apple): preserve localized static labels 2026-07-01 05:19:12 -07:00
Vincent Koc
fe18aa38db feat(apple): complete core locale coverage 2026-07-01 05:19:12 -07:00
Peter Steinberger
b2355ef6a2 fix(ios): improve light and dark appearance contrast (#98443) 2026-07-01 07:31:42 +01: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