Commit Graph

412 Commits

Author SHA1 Message Date
Pavan Kumar Gondhi 8862cc46b3 fix(ios): harden share relay persistence (#121900)
* fix(ios): harden share relay persistence

* fix(ios): make relay migration transactional

* fix(ios): make relay migration host-owned

* fix(ios): reject legacy auth in share extension

* fix(ios): reject failed relay credential migration

* style(ios): fix relay settings indentation
2026-08-11 18:46:34 +05:30
Peter Steinberger a96fba6ff6 test(ios): remove preview source mirrors (#121960) 2026-08-11 02:03:07 -07:00
Peter Steinberger 4b46a14a54 feat(apple): show live subagent activity in chat (#121815)
* feat(apple): show live subagent activity in chat

* chore(apple): refresh native localization inventory
2026-08-10 21:50:13 -07:00
Peter Steinberger d4fd9cc96a fix(ui): restore settings search, media previews, clipboard, and native chat (#116654)
* fix(ui): restore search media and native text

* fix(native): unify visible chat text projection

* fix(ui): search composed array schemas

* fix(ui): keep config search off startup constraints

* fix(ui): honor schema and media path boundaries
2026-08-09 22:07:28 -07:00
Peter Steinberger af708e6628 test(ios): trim duplicate root shell mirrors (#121272) 2026-08-09 16:53:04 -07:00
Peter Steinberger 0dbce297fd test(ios): isolate TLS pin clearing (#113067) 2026-08-09 06:34:10 -07:00
Colin Johnson 5cd184c91b fix(ios): keyboard unavailable after tapping chat composer (#120723)
* fix(ios): restore composer keyboard focus

* test(ios): cover composer focus in screenshot CI

Co-authored-by: Colin <colin@solvely.net>

* test(ios): make composer focus proof device-aware

Co-authored-by: Colin <colin@solvely.net>

* fix(ios): stabilize sidebar layout under keyboard

Co-authored-by: Colin <colin@solvely.net>

* chore(ios): refresh native i18n inventory

Co-authored-by: Colin <colin@solvely.net>

* test(ios): keep focus proof in screenshot helper

Co-authored-by: Colin <colin@solvely.net>

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-08-08 21:56:46 -07:00
joshavant 0bcbaf2eda fix(ios): remove permission pre-prompts 2026-08-07 15:27:58 -05:00
Peter Steinberger f96fc529c3 test(ios): consolidate talk config fixtures (#118533) 2026-08-02 23:42:06 -07:00
Peter Steinberger 43d9ba493d refactor(ios): remove redundant node test seams (#118387)
* refactor(ios): remove redundant node test seams

* fix(ios): keep approval route context private

* fix(ios): preserve routing task assertion

* fix(ios): retain private talk permission test seam

* fix(ios): retain operator options boundary
2026-08-02 21:44:45 -07:00
clawsweeper[bot] fa0e298d84 fix(ios): route forced realtime consults through Gateway relay (#117485)
* fix(ios): route forced realtime consults through Gateway relay

* fix(ios): route forced realtime consults through Gateway relay

* fix(ios): route forced realtime consults through Gateway relay

* fix(ios): route forced realtime consults through Gateway relay

* style(ios): drop redundant Self in requiresForcedAgentConsultRelay

* style(ios): use explicit self for firstString per swiftformat

---------

Co-authored-by: clawsweeper <274271284+clawsweeper[bot]@users.noreply.github.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-08-02 18:06:19 -07:00
PollyBot13 d9669ce72c fix(ios): finish Calendar and Reminders grants without relaunch (#116504) 2026-08-02 18:01:41 -07:00
Peter Steinberger 079d26c92c test(ios): consolidate gateway connection fixtures (#118072) 2026-08-02 11:10:17 -07:00
Peter Steinberger a3bdc53a71 test(ios): deduplicate node invoke fixtures (#117670) 2026-08-01 16:07:19 -07:00
Vincent Koc 7cc2e6d830 fix(ci): repair full release validation regressions (#117447)
* fix(worktrees): reject repositories without commits

* test(memory-wiki): allow agent isolation runtime

* test(ios): await queued approval retry
2026-08-01 14:55:13 +00:00
Vincent Koc e460fcfb60 test(ios): remove duplicate deep-link coverage (#116657) 2026-07-31 12:16:40 +08:00
Vincent Koc 8a12343efe fix(ios): stabilize Apple UI validation across runtimes (#116487)
* test(ios): align source guards with current contracts

* test(ios): stabilize cross-version UI automation

* test(ios): harden typography boundary audit

* test(ios): synchronize deterministic UI launches
2026-07-31 01:30:46 +08:00
Peter Steinberger d962a3d9c1 fix(ios): avoid duplicate URLs in shared drafts (#116430)
* fix(ios): deduplicate shared URLs

* test(ios): prove share provider extraction
2026-07-30 09:09:35 -07:00
Vincent Koc 3cf98a8708 test(ios): cover auth cleanup during gateway forget (#116425) 2026-07-30 15:46:59 +00:00
Peter Steinberger 0021e51f22 feat(apple): media renditions, Now Playing, video upload (#116051)
* feat(apple): complete media playback and uploads

* fix(apple): preserve movie picker metadata

* fix(apple): harden rendition and picker routing

* style(apple): fix macOS media formatting
2026-07-29 15:50:18 -04:00
Peter Steinberger afae681085 feat(apple): add inline media players (#115903) 2026-07-29 10:36:38 -04:00
Peter Steinberger 844329284e fix(ios): prevent duplicate native chat replies after tool runs (#115678) 2026-07-29 02:59:25 -04:00
Peter Steinberger 26bfa88bb2 fix: restore native Talk transcripts, fallback, and microphone access (#115577)
* fix(ios): decode frameless Talk events

* fix(android): keep browser-only Talk models native

* fix(macos): gate dashboard media capture

* docs(talk): clarify native platform fallbacks

* chore(i18n): refresh native source inventory

* fix(android): gate relay entry on provider-level browser-only models too
2026-07-29 01:55:47 -04:00
Peter Steinberger 7f58f693b9 fix(ios): request motion access on first use (#115523) 2026-07-28 23:56:04 -04:00
yuvraj thakur efec26b2df fix(ios): Apple Watch chat inherits thinking defaults (#111301)
* fix(thinking): fall back instead of erroring on unsupported adaptive level (#109351)

The adaptive level is the auto sentinel (normalizeThinkLevel maps auto ->
adaptive) meaning 'pick an appropriate level', not 'force this exact level'.
Some clients (e.g. the Apple Watch client) send it as a transport default
while the iOS app sends none, so hard-erroring on an unsupported adaptive
override rejected otherwise-valid turns from those clients. Now the auto
sentinel always falls back to a supported level; explicit concrete levels
(e.g. an explicit /think xhigh) still hard-error as before.

Closes #109351

* docs(proof): add real-behavior-proof screenshot + run log for #111301

Captured run of the real get-reply-run.media-only test (101 passed)
showing the adaptive-thinking fallback fix verified.

Co-Authored-By: yuvrajlaptop2008-byte <284412773+yuvrajlaptop2008-byte@users.noreply.github.com>

* fix(ios): inherit Watch chat thinking defaults

Co-authored-by: yuvraj thakur <284412773+yuvrajlaptop2008-byte@users.noreply.github.com>

* chore(ios): sync native i18n inventory

---------

Co-authored-by: yuvrajlaptop2008-byte <284412773+yuvrajlaptop2008-byte@users.noreply.github.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-28 23:24:22 -04:00
metaforismo 430de2299c fix(ios): use configured speech language for system voice (#113372)
* fix(ios): honor speech locale for system voice

* chore(ios): refresh talk locale i18n inventory

* fix(ios): fall through unavailable system voices

* chore(ios): refresh talk locale i18n inventory

---------

Co-authored-by: Colin Johnson <colin@solvely.net>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-28 14:10:23 -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 4b05d83035 fix: generated images do not appear in native chat (#115042)
* fix(chat): render managed images in native clients

Co-authored-by: Francesco Giannicola <francescogiannicola1@gmail.com>

* chore: keep release changelog owned

* refactor(macos): split managed image loading

* test(apple): prove managed image header policy

* test(native): stabilize managed image proof

* test(apple): satisfy strict concurrency checks

---------

Co-authored-by: Francesco Giannicola <francescogiannicola1@gmail.com>
2026-07-28 04:39:53 -04:00
Vincent Koc 7838c6a6fd fix(apps): fence stale mobile delivery state 2026-07-28 08:15:52 +02:00
Peter Steinberger 1e3a4a69b5 fix: preserve native trace heading typography (#103436)
* fix(ios): preserve native trace heading typography

* test(ios): attach trace heading visual proof

* test(ios): import shared chat UI for visual proof
2026-07-28 00:01:44 -04:00
metaforismo a84ea8b732 fix(ios): suppress stale delayed UI actions (#113062)
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-27 23:19:07 -04:00
Peter Steinberger 56d9802f6e fix(mobile): prevent stale reconnect, approval and voice cancellation (#114549)
* fix(mobile): fence reconnect, approval and voice cancellation

* fix(mobile): refresh native localization source inventory

* test(android): advance cancelled voice finalizer scheduler

* test(android): retain one approval during cancellation proof
2026-07-27 08:49:01 -04:00
Peter Steinberger 079ac9390d refactor(ios): simplify node and Watch lifecycle ownership (#114366)
* refactor(ios): centralize node lifecycle owners

* fix(ios): sync native localization source inventory

* test(ios): prove gateway and notification lifecycles in simulator

* fix(ios): preserve voice upgrade and correlate watch snapshots
2026-07-27 03:23:31 -04:00
Peter Steinberger 7e80f36723 fix(apps): restore live session updates after native reconnects (#113634)
* fix(apps): replay session visibility across native reconnects

* fix(apps): refresh shifted native i18n source lines

---------

Co-authored-by: Peter Steinberger <steipete@golden-gate.local>
2026-07-25 04:58:41 -07: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
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
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 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 8481c69cbe feat(apple): port the working claw indicator, wait phrases, and turn recap to iOS/macOS (#112188)
* feat(chat): add native working progress state

* feat(chat): port working claw indicator to Apple

* fix(apple): isolate generated locale catalog

* style(apple): use doc comments on ChatWorkingPhrase API declaration
2026-07-21 04:35:27 -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 9f66f53fb5 feat(chat): collapse long user prompts (#111866)
* feat(chat): collapse long user prompts

* fix(chat): sync disclosure strings

* fix(android): reuse disclosure labels

* chore(i18n): refresh native inventory

* perf(ui): trim prompt disclosure chunk
2026-07-20 20:10:15 -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