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
joshavant
b85c0e2064
fix(ios): harden release screenshot capture
2026-07-23 11:09:06 -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
Colin Johnson
4f4d89574a
fix(ios): show dark app icon in Dark appearance ( #113039 )
...
* fix(ios): use dark app icon appearance
* fix(ios): cover debug app icon appearances
2026-07-23 10:56:24 -04:00
metaforismo
33044992c1
fix(ios): avoid phantom iPad nodes on Apple Silicon Macs ( #112744 )
2026-07-23 08:25:59 -04:00
joshavant
ebbbfa4c30
fix(ios): stabilize release screenshot launches
2026-07-23 00:28:00 -05:00
Peter Steinberger
26e4dec8c9
fix(ios): native Talk respects session thinking level ( #112901 )
...
* fix(ios): inherit thinking in native Talk
* test(ios): verify native Talk thinking inheritance
* test(ios): keep Talk regression i18n-neutral
* test(ios): import Talk request builder module
* test(secrets): secure plugin preset fixture
---------
Co-authored-by: RECOVERI <alfred@recoveri.io >
2026-07-23 01:02:12 -04:00
joshavant
690ed56441
fix(ios): preserve localized app display names
2026-07-22 22:56:22 -05: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
Peter Steinberger
0b080b9c2e
feat(apps): native session-list observer digests on iOS, Android, and macOS ( #112597 )
...
* feat(apps): native session-list observer digests on iOS, Android, and macOS
* fix(apps): satisfy swift, periphery, and lint gates for native digests
2026-07-22 01:53:29 -07:00
joshavant
12515ad182
fix(ios): harden App Store release flow
2026-07-21 13:44:11 -05:00
Peter Steinberger
8f31892b55
feat(apps): native session branch switcher with branch-safe durable outbox ( #112056 )
...
Branch menu (list/switch) for macOS+iOS shared chat via sessions.branches.*;
rewind/fork/switch gated on run activity and pending outbox work through a
durable session-mutation lease; outbox rows carry branch-epoch ownership with
local-only flush checks, atomic confirm/park transitions, attempt-versioned
delivery callbacks, fresh retry identity for possibly-accepted rows, and
epoch-guarded branch evidence; 21-locale native translations for new strings.
2026-07-21 10:59:44 -07: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
5e7cb225e4
fix(mobile): load pinned and base-path Control UI pages ( #112175 )
...
* fix(mobile): harden Control UI webviews
* refactor(mobile): keep native inventory stable
* docs(android): clarify shared pinned trust
* fix(ios): preserve encoded Control UI base paths
2026-07-21 08:19:07 -07:00
Peter Steinberger
312e656138
fix(ios): show agent avatars and use more sidebar space ( #112082 )
...
* fix(ios): improve agent sidebar menu layout
* chore(i18n): refresh native source inventory
2026-07-21 03:05:18 -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
Vincent Koc
2c316f51f7
fix(apps): harden mobile gateway and watch state
2026-07-21 09:00:21 +02: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
da534dc506
fix(ios): harden Talk voice-session lifecycle from review ( #111424 )
...
- Close+clear the adopted logical voice session when a config/provider change
invalidates a realtime prefetch (a live call is preserved); prevents the
gateway rejecting a stale voiceSessionId resume under a new provider.
- Retry talk.client.close (0/500/2000ms) before forgetting the session, matching
the web client, so a transient close does not orphan it until the 6h sweep.
- Surface exhausted transcript-persist failures through the session delegate so a
dropped affirmation transcript no longer silently blocks spoken confirmation.
- Localize the "Confirmation needed" status through the presentation switches;
add its native locale translations.
2026-07-19 07:01:28 -07:00
Peter Steinberger
4e008cd713
feat(ios): adopt Talk voice sessions ( #111369 )
...
* feat(ios): adopt Talk voice sessions
* docs(agents): fix unrelated red-main breakage in the landing PR
* chore(i18n): translate Talk voice-session strings across native locales
2026-07-19 06:28:18 -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
62c5a8b888
fix(gateway): make scope errors machine-readable across clients ( #111013 )
...
* fix(gateway): consume structured scope errors
* docs(gateway): clarify tools error boundary
* refactor(gateway): unify node admin policy
2026-07-18 17:53:45 -07:00
Peter Steinberger
593ac4ae0c
feat(apps): rewind and fork a session from native chat bubbles ( #110886 )
...
* feat(apps): rewind and fork a session from native chat bubbles
* docs(apps): note lease-parity contract on message fork dispatch
* fix(apps): native i18n inventory sync and doc-comment style for bubble actions
* fix(apps): translate native bubble action strings across locales
* fix(apps): refresh generated iOS localization catalog after rebase
2026-07-18 17:52:03 -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
Peter Steinberger
81362bf643
feat(apps,ui): question surface parity and composer takeover ( #110681 )
...
* feat(apple): question parity — persistent summaries, skip, reconnect fallback, macOS keyboard
* feat(android): question parity — persistent summaries, skip, reconnect fallback
* feat(ui): question panel replaces composer while expanded
* fix(apps): regenerate question parity contracts
* fix(apps): preserve question reconciliation state
* fix(apps): keep question terminal state monotonic
* test(android): satisfy question test formatting
* fix(security): restore skill audit file reads
* fix(apps): harden question parity edge cases
* fix(apps): preserve expired question summaries
* fix(apps): keep question recovery retries current
* fix(apps): retry stale question recovery snapshots
* fix(android): reset stale question retry budgets
* docs(tools): clarify question composer takeover
* fix(apps): satisfy question recovery release gates
* fix(apps): preserve unknown question outcomes
* fix(apps): harden question action state
* fix(apps): keep unavailable questions terminal
* fix(apps): finalize local question outcomes
* fix(apps): preserve question card API
* fix(apps): reconcile external question answers
* fix(apps): reset question backoff budget
* chore(apps): refresh native i18n inventory
* fix(android): distinguish question skip progress
* fix(android): reconcile locally expired questions
* fix(apps): keep question recovery state fresh
* docs: note question surface parity
* fix(ui): reconcile IME draft before question takeover
* docs: leave question parity notes to release workflow
2026-07-18 21:42:15 +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
98410d986e
refactor(state): move device identity into canonical SQLite state ( #110392 )
...
* refactor: store device identities in SQLite
* style: satisfy Swift identity lint limits
* test: harden device identity migration fixtures
* fix: harden SQLite device identity recovery
* chore: remove stale identity helper
* refactor: isolate device identity repair
* chore: remove stale migration import
* test: validate migrated identity key types
* fix: harden device identity repair
* style: format device identity assertion
* fix: derive repaired identity key from PEM
* style: remove redundant PEM conversions
* fix: align native identity store with schema v4
* fix(state): satisfy SQLite identity CI gates
* fix(state): coordinate native identity migration
* test(doctor): include native identity claim path
* fix(infra): preserve coordinator release error
* fix(state): clear identity validation gates
* refactor(apple): remove identity test-only APIs
* refactor(apple): remove dead identity error type
* test(apple): use canonical identity test seam
* test(macos): isolate gateway readiness identity
2026-07-18 17:43:56 +01:00
Peter Steinberger
af0d189774
fix(ios): stop repeated gateway errors from wobbling ( #110493 )
...
* fix(ios): keep gateway problem toast stationary
* chore(ios): sync native i18n inventory
2026-07-18 09:07:47 +01: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
d7de67ae02
feat: ask_user follow-ups — harness convergence, channel finalization + reactions, native cards, docked web panel ( #110372 )
...
* feat(ask-user): follow-up harness slice
* feat(ask-user): follow-up channels slice
* feat(ask-user): follow-up native slice
* feat(ui): dock question panel above composer with stepper and compact stream summaries
* docs: refresh follow-up integration maps
* test(ui): align terminal summary proof
* fix(infra): echo declared option answers in terminal status when free-text is allowed
* fix(infra): keep reaction answering when display labels are formatter-adjusted
* fix(agents): settle plain-text claims only after question registration commits
* fix(agents,apps): commit-ordered claim persistence, claim-aware prompt delivery, non-blocking question refresh
* fix(harness,infra): reaction-appropriate question copy, caller presentations honored
* fix(native,infra,agents): local-expiry eviction, value-addressed reactions, reserve-before-request
* fix(infra,android): dual-mode question resolver for compact callbacks; reset terminal retention on replayed pending
* fix(harness,discord): claim-aware prompt delivery in run helper; escape finalization labels
* fix(macos): merge transient-content visibility with question cards after main sync
* fix: repair ask user follow-up CI
* test: update limited bootstrap scope expectation
* fix: retain shared question card API
* chore: refresh native i18n inventory
2026-07-18 03:32:39 -04: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
28a3540f32
feat: add native inline widget support ( #109212 )
...
* feat: add native inline widget support
* refactor: simplify plugin surface refresh
* fix: preserve plugin surface refresh API
* fix: reload widgets after WebKit termination
* fix: harden native widget refresh
* fix: bound native widget recovery
* docs: defer native widget release note
* chore: refresh native i18n inventory
* fix: harden native widget delivery
* refactor: simplify native widget API surface
* fix: serialize native widget capability refresh
* fix: harden native widget recovery
* fix: recover native widget capabilities
* style: format widget refresh role selection
* fix: correct widget refresh formatting
* fix: harden cross-platform widget recovery
* fix: bind widget trust and recovery to routes
* chore: refresh native i18n inventory
* chore: regenerate Android gateway protocol
* test: remove unused release workflow read
2026-07-16 19:24:41 -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
aebea4891e
feat(ios): render plugin approvals as native Allow/Deny notifications ( #108709 )
...
* feat(ios): render plugin approvals as native Allow/Deny notifications
Extend the iOS approval handling from exec to plugin approvals so the native
push the gateway now sends (#108505 ) shows a phone notification with Allow/Deny.
Extract a shared ApprovalNotificationBridge with exec/plugin wrappers owning
their own kind constants and category; tag the parsed prompt with its kind;
register the plugin category and route plugin pushes in the app delegate; add a
.plugin case that maps the plugin presentation (title/description/pluginId/
severity) into the existing prompt and widens the exec-only validation, current,
cache-restore, and resolve guards to accept plugin; parameterize the dialog copy
by kind. Watch snapshot publication stays exec-only; the phone notification still
mirrors to the watch via WatchConnectivity. Reuses the unified approval.get/
approval.resolve RPCs (already kind-generic); no server or protocol changes.
* chore(i18n): sync native inventory after rebase
* chore(ios): drop accidentally committed local Version.xcconfig build override
* fix(ios): sync Apple i18n catalog and remove dead approval-bridge methods
Sync apps/ios/Resources/Localizable.xcstrings for the new plugin-approval
strings (native inventory sync alone did not cover the Apple catalog).
Remove the superseded per-bridge registerCategory variants and the redundant
exec parseResolvedPush wrapper flagged by the iOS Periphery dead-code scan;
registration uses ApprovalNotificationBridge.registerCategories and the shared
parse helpers.
* chore(ios): drop generated SwiftSources filelist; reconcile native i18n inventory
* chore(ios): drop generated Xcode project from tracking
Codex generated OpenClaw.xcodeproj for its simulator test run and the initial
apps/ios directory commit force-added it; xcodegen regenerates it in CI, so it
must not be tracked (matches main).
* chore(ios): reconcile native i18n inventory after rebase
2026-07-16 09:50: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
93c9d2a20c
fix(ios): stop fresh setup from failing after pairing ( #108779 )
...
* fix(ios): make setup keychain handoff atomic
* fix(ios): refresh native i18n inventory
2026-07-16 03:50:54 -07:00
NianJiu
727f9e0a7e
fix(ios): preserve active chat across foreground reconnects ( #108241 )
...
* fix(ios): preserve chat focus across reconnects
* chore(ios): sync native i18n inventory
* test(ios): strengthen reconnect ownership coverage
Co-authored-by: NianJiuZst <180004567+NianJiuZst@users.noreply.github.com >
---------
Co-authored-by: NianJiuZst <180004567+NianJiuZst@users.noreply.github.com >
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-16 01:38:45 -07:00
Peter Lee
e08e1a0ca8
fix(ios): attach EKAlarm to reminders.add so due-time notifications fire ( #106376 )
...
* fix(ios): attach EKAlarm to reminders.add so due-time notifications fire
EKReminder.dueDateComponents only sets the deadline; without an explicit
EKAlarm, iOS does not produce lock-screen or banner notifications.
Closes #105523
* fix(ios): configure reminder due alerts
Co-authored-by: xialonglee <li.xialong@xydigit.com >
---------
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-16 01:14:40 -07:00
Vincent Koc
1185db56c0
refactor(ios): remove write-only talk provider state ( #106881 )
...
* refactor(ios): remove write-only talk provider state
* chore(ios): sync native i18n inventory
2026-07-14 08:46:46 +08:00
joshavant
cac32bb5d1
fix(ios): declare Health update purpose
2026-07-13 19:12:21 -05: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