Peter Steinberger
afae681085
feat(apple): add inline media players ( #115903 )
2026-07-29 10:36:38 -04:00
Cihat Gündüz
c3fba2bb20
fix(ios): forgetting a paired gateway does nothing ( #114083 )
...
* fix(ios): forgetting a paired gateway does nothing
Confirming "Forget Gateway" in Settings never removed the gateway. The
confirmation dialog derived its isPresented binding from the payload it
later needed and cleared that payload on dismissal, so by the time the
destructive button's action ran, forgetPendingGateway() found nil at its
opening guard and returned without calling forgetGateway(stableID:).
Nothing was logged either, because the failure branch was never reached.
Hand the entry to the action through the dialog's presenting: parameter
instead of reading it back from view state, and take it as a parameter
rather than looking it up. Everything downstream is unchanged; it simply
runs now.
* Shorten the dialog comment to one line
The three-line version repeated in prose what the next line already shows.
What is worth keeping is the trap: someone simplifying this back to reading
the entry from view state reintroduces the bug.
* fix(ios): harden forget gateway payload handoff
Co-authored-by: Cihat Gündüz <anthropic@fline.dev >
* test(ios): run gateway settings source guards
* test(ios): allow forget dialog state cleanup
* test(ci): provide rg in PR review fixture
---------
Co-authored-by: Cihat Gündüz <anthropic@fline.dev >
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-28 09:59:23 -04:00
Peter Steinberger
c539c77057
fix(ios): expose expandable chat agent identity ( #113917 )
2026-07-25 17:42:17 -07:00
Vincent Koc
a911bfb716
style(ios): satisfy settings chat formatting
2026-07-24 15:26:58 +08:00
Vincent Koc
9cecc3083d
fix(ios): localize settings chat fixtures
2026-07-24 15:26:58 +08:00
joshavant
0030a8c808
fix(ios): cache location authorization state
2026-07-23 20:45:33 -05:00
Peter Steinberger
9a624cd78f
fix(ios): localize Agent Pro detail labels ( #112980 )
...
* fix(ios): preserve localized Agent Pro detail labels
* fix(ios): localize Dreaming metric labels
* test(ios): refresh native localization inventory
* test(setup): align isolated detection fallback
* test(system-agent): allow slow shared TUI setup
* test(chat): allow loaded outbox retry drain
---------
Co-authored-by: Alix-007 <li.long15@xydigit.com >
2026-07-23 09:01:07 -07:00
Peter Steinberger
74de1a2f0c
feat(ios): add OpenClaw settings chat ( #112420 )
...
* feat(ios): add OpenClaw settings chat
* chore(ios): sanitize screenshot fixture label
* fix(ios): gate OpenClaw settings chat
* fix(ios): stabilize OpenClaw settings support checks
* chore(i18n): refresh native source inventory
* fix(ios): bind OpenClaw chat to gateway route
2026-07-22 05:14:47 -07:00
joshavant
12515ad182
fix(ios): harden App Store release flow
2026-07-21 13:44:11 -05:00
Peter Steinberger
26165bbe80
fix(ios): smooth sidebar drags and remove background seams ( #112299 )
...
* fix(ios): polish sidebar drawer interaction
* fix(ios): latch sidebar drag direction
2026-07-21 08:40:30 -07:00
Peter Steinberger
262deec72c
feat(mobile): session Dashboard on iOS and Android via authenticated Control UI webview ( #112163 )
...
* feat(mobile): session dashboard screens on iOS and Android via authenticated Control UI webview
* fix(android): keep configured Control UI base path in session dashboard URL
* docs(android): note system-trust boundary of the shared Control UI webview
* fix(android): origin-only document-start rule for Control UI auth script
* chore(i18n): refresh native inventory on rebased head
* fix(ios): swiftlint closure form in session dashboard toolbar
* fix(i18n): tolerate workflow-owned pending native rows in PR alignment checks
* fix(android): KTX toUri per lint and refresh native inventory
* fix(android): ktlint import order incl. main-inherited fleet test, refresh inventory
2026-07-21 01:13:23 -07:00
Peter Steinberger
49ff6a4497
fix(protocol): classify system agents in rosters ( #111920 )
...
* fix(protocol): classify system agents in rosters
* fix(ci): align agent kind client gates
* fix(ci): keep roster filtering in startup bundle
* chore(ui): remove superseded roster module
* style(android): satisfy agent kind test formatting
* style(linux): format merged agent capability assertion
* fix(config): reject reserved system agent ids
* chore(i18n): refresh native source inventory
* style(android): format agent kind surfaces
* fix(gateway): preserve configured agent ownership
2026-07-20 16:57:04 -07:00
Colin Johnson
0d3cbae6a1
fix(ios): sidebar drags jitter and toolbar control flickers ( #111831 )
...
* fix(ios): smooth sidebar gestures and toolbar controls
* fix(ios): keep sidebar edge gesture below toolbar
* chore(ios): refresh native localization inventory
* fix(ios): preserve edge content interactions
* fix(ios): restore smooth sidebar tracking
* test(ios): align drawer source guards
2026-07-20 17:26:17 -04:00
Peter Steinberger
a52eb2134b
feat(apps): connect multiple gateways simultaneously ( #111932 )
...
* feat(apps): support simultaneous gateways
* fix(apps): satisfy multi-gateway checks
* chore(apps): refresh multi-gateway baselines
* style(android): format gateway fleet code
2026-07-20 13:06:29 -07:00
Peter Steinberger
bdf71d7d98
refactor(apple): unify offline client databases ( #111598 )
...
* refactor(apple): unify offline client databases
* refactor(apple): remove dead cache APIs
* fix(apple): satisfy native storage gates
* fix(apple): sync generated localization catalog
* Revert "fix(apple): sync generated localization catalog"
This reverts commit d0f5e7b749 .
* fix(i18n): keep source validation pre-merge
* test(macos): isolate flaky suite state
* test(macos): isolate log locator on main actor
2026-07-19 22:14:12 -07:00
Peter Steinberger
0fff74c800
feat(ios): replace the tab bar with a black overlay sidebar (web parity + dashboard) ( #111339 )
...
* feat(ios): unify navigation on a black overlay sidebar and drop the phone tab bar
* test(ios): rework navigation tests and snapshot UITests for the sidebar shell
* chore(i18n): sync derived native catalogs for sidebar strings
* feat(ios): reveal the sidebar beneath a push-away rounded content card
* feat(ios): web-parity sidebar — agent switcher, pinned pages, sessions vocabulary, uniform content card
* chore(i18n): translate sidebar and session strings across native catalogs
* fix(ios): sidebar footer shows connection dot only when degraded, like the web
* feat(ios): sidebar toggle top-left with edge-swipe open; card surface owns the drawer chrome
* fix(ios): single sidebar refresh owner, alias-aware Home badges, RM tap-close, user pin order, drop vestigial idiom shims
* feat(ios): align sidebar with the mobile prototype — agent roster, theme-following palette, web session subtitles, row badges
* chore(i18n): translate agent roster and Recent strings across native catalogs
* feat(ios): frosted-glass agent picker with uniform drawer insets
* fix(ios): address sidebar review findings — settings toggle edge, per-agent scoping, alias-aware selection, cron paging, refresh cadence
* fix(ios): clear landing CI blockers
2026-07-19 14:50:39 -07:00
Peter Steinberger
8178b3cc14
feat(clients): adopt model controls, session management, and keyboard history recall on iOS ( #110831 )
...
* feat(clients): adopt model controls, session management, and keyboard history recall on iOS
* chore(i18n): translate iOS adoption strings and realign locale artifacts
* refactor(clients): drop test-only group response inits flagged by the shared dead-code intersect
* chore: retrigger ci
* chore(i18n): resync inventory after voice-unification main rebase
* chore(i18n): resync inventory after main rebase
* chore(i18n): resync inventory after main rebase
* chore(i18n): realign locale artifacts after main rebase
* fix(clients): preserve native chat API and locale copy
* fix(ios): retain public session DTO initializers
* refactor(clients): delete test-only session DTO inits flagged dead instead of suppressing
2026-07-19 03:08:22 -07:00
Peter Steinberger
59b2fbbb4b
feat(ios): Talk camera flip control and mic input selection ( #111044 )
...
* feat(ios): add Talk camera flip and mic selection
* chore(ios): sync native i18n inventory and locale artifacts for talk camera/mic strings
* chore(ios): commit regenerated Localizable.xcstrings for new talk strings
* fix(ios): extract Talk composer controls
* chore(ios): resync native i18n inventory and locale artifacts atop landed Android entries
* fix(ios): repair Talk composer CI checks
* chore(i18n): commit regenerated Android locale outputs from catalog reconciliation
* chore(i18n): sync Android locale outputs after rebase
2026-07-19 01:24:53 -07:00
Peter Steinberger
b57660d024
fix(apps): call chat sessions threads ( #111038 )
...
* fix(apps): call chat sessions threads
* test(apps): update thread wording expectations
* fix(i18n): guard retained Android translations
2026-07-18 20:34:12 -07:00
Peter Steinberger
d343216510
fix(ios): keep unified voice controls recoverable ( #110906 )
...
* docs(ios): align unified chat voice copy
* fix(ios): keep active dictation control available
* fix(ios): keep active talk control available
* fix(ios): restore unified voice recovery
* fix(ios): keep pending dictation cancel visible
* chore(ios): refresh native i18n inventory
* chore(ios): sync unified voice locale memory
* fix(ios): return unified mic label view
* test(ios): lock dictation cancellation ordering
2026-07-18 23:41:00 +01:00
Colin Johnson
1ca6b6ff67
feat(ios): unify chat and voice experience ( #107879 )
...
* feat(ios): unify chat and voice experience
* refactor(ios): finish unified chat ownership
* fix(ios): unify chat and voice capture ownership
* fix(ios): serialize Talk permission hydration
* fix(ios): clear voice CI regressions
* fix(ios): clear remaining unified chat CI failures
* chore(i18n): sync native source inventory
* refactor(ios): defer provider-only realtime voice
* fix(ios): clean unified chat voice PR
* fix(ios): localize unified voice controls
* fix(ios): serialize composer audio controls
* fix(ios): isolate dictation preparation lifecycle
* fix(ios): key chat tab icons by appearance
* fix(ios): preserve talk upgrade handshakes
* fix(ios): refresh native i18n inventory
* fix(ios): reconcile shared locale artifacts
* fix(ios): satisfy chat view lint limit
* fix(ios): reconcile shared composer implementation
* test(apple): avoid XCTest actor deinit crash
* fix(ios): satisfy SwiftFormat scope spacing
* fix(ios): remove duplicate merged helper declarations
2026-07-18 14:30:10 -04:00
Peter Steinberger
4d4099e608
fix(ios): prevent black edge bands in chat ( #110505 )
...
* fix(ios): restore translucent chat edges
* chore: keep release notes in pull request
* chore(ios): sync native i18n inventory
2026-07-18 09:01:37 +01:00
Peter Steinberger
125934addc
feat(ios): harvest shared chat capabilities — verbosity, trace toggle, live talk level, sessions entry ( #110254 )
...
* feat(ios): wire verbosity, assistant trace toggle, live talk level, and chat-local sessions entry
* chore(i18n): translate new iOS chat strings and regenerate catalogs
2026-07-18 03:27:45 +01:00
joshavant
1c16005cd7
fix(ios): identify Apple Health integration
2026-07-17 12:16:44 -07:00
Peter Steinberger
a9f82837a1
feat: inspect background tasks across web and mobile ( #109150 )
...
* feat: add background task details across clients
* fix: refresh background task clients and translations
* fix: keep background task details fresh
* fix: ignore deleted background task details
* refactor: split background task rendering
* fix: use canonical background task ids
* refactor: extract background task view types
* fix(apps): regenerate task localizations
* fix(ios): remove unused task screen import
* fix(apps): refresh task localization inventory
2026-07-16 13:08:42 -07:00
Peter Steinberger
6b79db8b7d
feat(ios): mascot moods for onboarding and gateway quick setup ( #108900 )
...
* feat(ios): mascot moods for onboarding and gateway quick setup
The activation glyph now takes a mood: the onboarding welcome step
shows the hard-hat working mascot while connecting, the success step
celebrates, and the gateway quick-setup header derives working/sad/
curious/idle from its connect state.
* fix(ios): quick-setup mood reflects app-level gateway problems too
The sheet renders two error surfaces — the local connect error and the
app-level gateway problem banner — and the mascot now goes sad for
either instead of only the sheet-local failure.
2026-07-16 08:56:18 -07:00
Peter Steinberger
334e7f3f21
feat(apps): add native mobile Automations parity ( #106355 )
...
* fix(apps): address native Skills review feedback
* feat(apps): add native Automations parity
* fix(ios): preserve automation editor selection
* fix(android): page automation discovery
* chore(apps): refresh native source inventory
* fix(ios): refresh invalid automation diagnostics
* chore(apps): sync native localization
* fix(cron): stabilize paginated snapshots
* refactor(cron): split pagination helpers
* fix(apps): address final native review feedback
* chore(apps): refresh native source inventory
* fix(ios): dedupe automation list actions
* chore: keep release note in PR context
* fix(ci): repair current main architecture gates
* fix(ios): default new skill requirement fields
* fix(ios): retain queued automation reservations
2026-07-13 15:35:32 -07:00
Peter Steinberger
938d41014f
feat(mobile): default pairing to full node access ( #105928 )
...
* feat(mobile): default pairing to full node access
* chore: leave release notes to release workflow
* refactor(mobile): bound pairing helpers
* chore(i18n): refresh mobile access inventory
* chore(ci): lower mobile pairing LOC baseline
* fix(mobile): complete pairing validation artifacts
* ci: remove stale transcript target export baseline
* fix(ios): wrap access upgrade guidance
* fix(ios): preserve localized access key
* fix(ci): dedupe read-only SQLite guardrail
* fix(mobile): secure full-access node setup
2026-07-13 02:30:45 -07:00
Peter Steinberger
17630226fc
improve(ios): make gateway QR pairing prominent in Settings ( #106111 )
...
Reorder Settings -> Gateway by intent: pairing (Add Gateway with Scan QR,
setup code, discovered gateways) right below status, nav-bar QR scanner
button on the gateway route, and a Scan QR to Pair status-card hero while
nothing is paired (honoring the shared connect lock). Manual Gateway and
credentials move to the bottom. Fix setup-code Connect busy spinner to
track the whole attempt. New strings ran the full native i18n pipeline.
Closes #106013
2026-07-13 00:35:38 -07:00
Peter Steinberger
b57e7b74e6
feat: add native Skills management parity ( #105814 )
...
* feat(apps): add native skills management parity
* chore(i18n): refresh native skills inventory
* style(apps): apply canonical Swift formatting
* style(ios): wrap skills status message
* chore(i18n): refresh native skill locales
* refactor(apps): trim native skills review surface
* chore(i18n): regenerate native app resources
* chore: keep release changelog owner-only
* fix(ios): remove dead gateway and watch wrappers
2026-07-13 00:11:11 -07:00
Peter Steinberger
c81ae0412c
fix(ios): localize Settings accessibility labels ( #105859 )
...
* fix(ios): preserve localized accessibility labels
* chore(i18n): refresh native source inventory
2026-07-12 19:33:27 -07:00
Vincent Koc
818eca2c09
fix(ios): coalesce automatic overview refreshes
2026-07-13 03:53:15 +02:00
Vincent Koc
5e9bc0916f
fix(ios): harden gateway and watch state handling
2026-07-13 03:53:15 +02:00
Vincent Koc
01ed6b1f04
fix(ios): distinguish localized and verbatim session actions
2026-07-12 18:33:47 +02:00
Vincent Koc
aa1a8ddb34
fix(ios): preserve localized text value boundaries
2026-07-12 18:33:47 +02:00
Vincent Koc
543161e67e
fix(ios): localize remaining runtime labels
2026-07-12 18:33:47 +02:00
Vincent Koc
6ddc87de0a
fix(ios): satisfy watch localization build gates
2026-07-12 18:33:47 +02:00
Vincent Koc
1e22d4fcbd
fix(ios): localize concatenated settings copy
2026-07-12 18:33:47 +02:00
Vincent Koc
cf8ae716ff
fix(ios): preserve localized runtime semantics
2026-07-12 18:33:47 +02:00
Vincent Koc
c09a555c9e
fix(ios): decouple Talk state from localized copy
2026-07-12 18:33:47 +02:00
Vincent Koc
f3000a953f
fix(ios): preserve runtime localization semantics
2026-07-12 18:33:47 +02:00
Vincent Koc
4e689e33d5
fix(ios): localize gateway problem presentation
2026-07-12 18:33:47 +02:00
Vincent Koc
3372812560
fix(ios): localize dynamic presentation strings
2026-07-12 18:33:47 +02:00
Vincent Koc
632ea2bcb7
style(ios): satisfy SwiftFormat in localized surfaces
2026-07-12 18:33:47 +02:00
Vincent Koc
2ee16ccdc1
test(ios): cover positional localized status formats
2026-07-12 18:33:47 +02:00
Vincent Koc
cc85d8256f
fix(ios): use plural-aware localized counts
2026-07-12 18:33:47 +02:00
Vincent Koc
a8ae1bff7f
fix(ios): preserve localized status semantics
2026-07-12 18:33:47 +02:00
Vincent Koc
ee3104340d
fix(ios): localize design and chat surfaces
2026-07-12 18:33:47 +02:00
Vincent Koc
6d4afffec3
fix(ios): localize setup and status surfaces
2026-07-12 18:33:47 +02:00
Peter Steinberger
251f54baec
fix(apps): remove dead native code
2026-07-12 02:41:17 -07:00