Vincent Koc
5e9bc0916f
fix(ios): harden gateway and watch state handling
2026-07-13 03:53:15 +02:00
Peter Steinberger
5e45ebe82b
feat(ios): add private HealthKit summaries ( #105616 )
...
* feat(ios): add private HealthKit summaries
* fix(ios): satisfy Health settings lint
* chore(ios): sync Health localization artifacts
* chore(ios): refresh generated localization and docs
* fix(ios): reject partial Health history
* chore(ios): sync Health string catalogs
* fix(ios): bridge Health authorization dates
* fix(ios): scope Health summaries to today
2026-07-12 12:52:38 -07:00
Vincent Koc
a1f0a92b03
fix(watch): preserve terminal approval outcomes
2026-07-12 18:33:47 +02:00
Vincent Koc
34fe882301
fix(ios): carry semantic gateway progress
2026-07-12 18:33:47 +02:00
Vincent Koc
0e49f09112
fix(watch): preserve localized terminal status
2026-07-12 18:33:47 +02:00
Vincent Koc
1c3b94550e
fix(watch): preserve one-shot push-to-talk status
2026-07-12 18:33:47 +02:00
Vincent Koc
a69f1cb1be
fix(watch): dual-write legacy snapshot status
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
95cff58166
fix(watchos): localize semantic status on watch
2026-07-12 18:33:47 +02:00
Vincent Koc
99c1fedf27
fix(watchos): localize chat status on watch
2026-07-12 18:33:47 +02:00
Peter Steinberger
6921fb4ce7
refactor(ios): trim approval test fixtures ( #105052 )
2026-07-12 07:38:45 +01:00
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
NianJiu
8b49bc61a8
fix(ios): stop camera work when invoke is cancelled ( #103069 )
...
* fix(ios): stop camera work when invoke is cancelled
* fix(ios): mark AVFoundation cancellation boundary
* chore(ios): refresh native i18n inventory
* fix(camera): clean up cancelled warm-up sessions
* fix(ios): make camera cancellation lifecycle-safe
---------
Co-authored-by: NianJiuZst <180004567+NianJiuZst@users.noreply.github.com >
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-10 09:44:42 +01:00
Peter Steinberger
54f45a950b
feat(watchos): connect directly to Gateway as a node ( #102893 )
...
* feat(watchos): add direct gateway node
* docs: refresh watch node docs map
* chore: leave release notes to release workflow
* chore(ios): refresh native localization inventory
* fix(watchos): keep direct node policy bounded
2026-07-09 15:53:02 +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
Peter Steinberger
f95ca90378
fix(ios): persist voice notes through offline delivery ( #101236 )
...
* fix(ios): persist voice note delivery state
* fix(ios): pin chats during attachment staging
* fix(ios): keep voice notes on captured chat
* fix(ios): keep voice notes durable through staging
* fix(ios): harden voice note lifecycle
* test(ios): satisfy strict concurrency in voice note proof
* fix(ios): keep legacy attachment sends live
* fix(ios): retain legacy drafts during outbox restore
* fix(ios): pin voice note recipient presentation
* fix(ios): preserve confirmed voice note duration
* chore(i18n): refresh voice note source inventory
* chore: leave release notes to release automation
2026-07-07 01:21:16 +01:00
Peter Steinberger
b978dcc63b
feat(ios): record and send voice notes from the chat composer ( #100946 )
...
* feat(ios): record and send voice notes from the chat composer
Adds tap-to-record voice notes to the shared chat composer: m4a/AAC mono
capture with a 3-minute cap, lazy mic permission, cancel/finish controls,
audio attachment chips with duration, and a voice-note transcript row.
Voice-wake suppression becomes reason-scoped so recording and Talk cannot
clobber each other. Attachments stay online-only per the outbox contract.
Related: #100709
* fix(ios): harden voice note attachment staging
* chore(ios): keep voice note changelog release-owned
* fix(ios): gate voice notes with attachment availability
* chore(ios): refresh native localization inventory
2026-07-07 00:14:05 +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
b4b1984fe7
feat(gateway): start a new chat session in a managed worktree ( #100788 )
...
Adds an additive worktree flag to sessions.create so any new chat can run in an
isolated managed worktree of the agent's git workspace, with the branch checked
out and .worktreeinclude provisioning applied. The session's spawnedCwd points at
the matching subdirectory inside the worktree so chat runs, CLI, and the file
browser execute there. agents.list gains workspaceGit (workspace or an ancestor
is a git checkout) to gate the affordance; web sidebar, iOS, and Android expose a
New-Chat-in-worktree action. Uses the method's operator.write scope, but the
.openclaw/worktree-setup.sh step runs only for operator.admin callers since it
executes repo code. Deleting the session, or leaving via a plain New Chat, clears
the cwd and lossless-removes the worktree; idle GC treats recent session activity
as worktree activity so an active session's checkout is never swept.
Live-verified end-to-end on a real gateway; follow-up to #100535 (issue #100534 ).
2026-07-06 10:23:41 +01:00
Peter Steinberger
aaf5ab910c
fix: land ten small reliability fixes ( #100483 )
...
* fix(agents): harden LSP process failures
Source: #100450
Co-authored-by: morluto <williamlin1327@gmail.com >
* fix(sandbox): report effective workspace layout
Sources: #100435 , #100439
Co-authored-by: Aniruddha Adak <aniruddhaadak80@users.noreply.github.com >
Co-authored-by: ZengWen-DT <ceng.wen@xydigit.com >
* fix(security): fail install checks on stream errors
Source: #100413
Co-authored-by: 陈宪彪0668000387 <chen.xianbiao@xydigit.com >
* fix(android): normalize all-day calendar events
Source: #100032
Co-authored-by: NianJiuZst <180004567+NianJiuZst@users.noreply.github.com >
* fix(ios): serialize push-to-talk lifecycle
Source: #99942
Co-authored-by: NianJiuZst <180004567+NianJiuZst@users.noreply.github.com >
* fix(talk): reject inherited provider names
Source: #99849
Co-authored-by: zenglingbiao <zeng.lingbiao@xydigit.com >
* fix(android): stop voice capture in background
Source: #99840
Co-authored-by: xialonglee <li.xialong@xydigit.com >
* fix(cron): preserve fallback result classification
Source: #99913
Co-authored-by: jincheng-xydt <xu.jincheng@xydigit.com >
* fix(google): bound Vertex response decompression
Source: #99812
Co-authored-by: 黄剑雄0668001315 <huang.jianxiong@xydigit.com >
* fix(plugins): report malformed discovery JSON
Source: #99892
Co-authored-by: 陈宪彪0668000387 <chen.xianbiao@xydigit.com >
* test(sandbox): configure non-default workspace fixture
* test: fix small-fix batch validation
---------
Co-authored-by: morluto <williamlin1327@gmail.com >
Co-authored-by: ZengWen-DT <ceng.wen@xydigit.com >
Co-authored-by: 陈宪彪0668000387 <chen.xianbiao@xydigit.com >
Co-authored-by: NianJiuZst <180004567+NianJiuZst@users.noreply.github.com >
Co-authored-by: zenglingbiao <zeng.lingbiao@xydigit.com >
Co-authored-by: xialonglee <li.xialong@xydigit.com >
Co-authored-by: jincheng-xydt <xu.jincheng@xydigit.com >
Co-authored-by: 黄剑雄0668001315 <huang.jianxiong@xydigit.com >
2026-07-06 00:08:51 +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
70f2bef6b4
fix(ios): persist queued Watch replies ( #100372 )
...
* fix(ios): persist queued watch replies
Route Apple Watch quick replies through the durable, gateway-scoped Watch message outbox with restart-safe routing and deduplication.
Co-authored-by: NianJiuZst <180004567+NianJiuZst@users.noreply.github.com >
* fix(ios): preserve pre-upgrade Watch replies
Bind shipped notification prompts without routing metadata to the current Gateway once, while keeping explicit and persisted Gateway owners fail-closed.
---------
Co-authored-by: NianJiuZst <180004567+NianJiuZst@users.noreply.github.com >
2026-07-05 09:14:49 -07:00
Peter Steinberger
245092dc3a
feat(ios): add Apple Watch voice turns ( #100283 )
...
* feat(ios): add Apple Watch voice turns
* chore(ios): sync native i18n inventory
* fix(ios): preserve Watch message label
2026-07-05 06:40:03 -07:00
joshavant
8efed50c4e
fix: gate ios push enrollment on notification consent
2026-06-23 01:38:24 -05:00
joshavant
93c7ec645a
fix(ios): remove stale notification authorization seam
2026-06-21 23:40:56 -04:00
joshavant
c3ab1feb61
test(ios): cover notification permission UX
2026-06-21 23:40:56 -04:00
Josh Avant
5d1e649aea
fix: route mobile exec approvals to reviewer device ( #95175 )
...
* fix: route mobile exec approvals to reviewer device
* fix: surface iOS approval events in foreground
* fix: forward codex approval reviewer device
* test: harden approval reviewer device contract
* test: cover reviewer approval fallback resolvers
2026-06-21 08:47:52 -05:00
Colin Johnson
c45c87acca
feat(ios): add watch action surface ( #93387 )
...
* feat(ios): add watch action surface
* fix: harden watch action surface
* fix: clean watch codegen lint
* fix(ios): scope watch chat commands to gateway
---------
Co-authored-by: joshavant <830519+joshavant@users.noreply.github.com >
2026-06-16 15:22:16 +02: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
joshavant
e8c0d92015
fix(ios): clarify agent chat session
2026-06-06 04:41:32 -05:00
joshavant
67dc71983c
fix(ios): show focused session agent
2026-06-06 04:41:32 -05:00
joshavant
5c07f7ccf0
Fix iOS selected agent chat routing
2026-06-06 04:41:32 -05:00
joshavant
d5d3e9983e
fix: harden mobile a2ui bridge trust
2026-06-03 16:50:08 -07:00
Colin Johnson
f6e51ff99a
feat(ios): refresh pro UI and gateway flows ( #87367 )
...
Summary:
- Replace the legacy iOS shell with Pro Command, Chat, Agents, and Settings tabs.
- Wire iOS chat/session/settings/diagnostics and realtime Talk flows through gateway-backed APIs.
- Add gateway/session and shared chat coverage for the new iOS flow.
Verification:
- git diff --check
- node scripts/run-vitest.mjs src/gateway/server.sessions.create.test.ts src/gateway/talk-realtime-relay.test.ts
- swift test --filter ChatViewModelTests (apps/shared/OpenClawKit)
- xcodebuild build for Nimrod's iPhone succeeded; install succeeded; launch was blocked because the phone was locked
Known follow-up:
- Preserve traceLevel in sessions.create parent runtime inheritance and keep the changelog credit in the follow-up patch.
2026-05-28 17:23:26 +03:00
Nimrod Gutman
6f566585d8
fix(ios): harden watch exec approval review ( #61757 )
...
* fix(ios): harden watch exec approval review
* fix(ios): address watch approval review feedback
* fix(ios): finalize watch approval background recovery
* fix(ios): finalize watch approval background recovery (#61757 ) (thanks @ngutman)
2026-04-06 17:42:42 +03:00
Nimrod Gutman
28955a36e7
feat(ios): add exec approval notification flow ( #60239 )
...
* fix(auth): hand off qr bootstrap to bounded device tokens
* feat(ios): add exec approval notification flow
* fix(gateway): harden approval notification delivery
* docs(changelog): add ios exec approval entry (#60239 ) (thanks @ngutman)
2026-04-05 16:33:22 +03:00
Nimrod Gutman
a9140abea6
fix(auth): hand off qr bootstrap to bounded device tokens
2026-04-04 15:57:38 +09:00
Nimrod Gutman
69fe999373
fix(pairing): restore qr bootstrap onboarding handoff ( #58382 ) (thanks @ngutman)
...
* fix(pairing): restore qr bootstrap onboarding handoff
* fix(pairing): tighten bootstrap handoff follow-ups
* fix(pairing): migrate legacy gateway device auth
* fix(pairing): narrow qr bootstrap handoff scope
* fix(pairing): clear ios tls trust on onboarding reset
* fix(pairing): restore qr bootstrap onboarding handoff (#58382 ) (thanks @ngutman)
2026-03-31 21:11:35 +03:00
Nimrod Gutman
6bcf89b09b
feat(ios): refresh home canvas toolbar
2026-03-10 21:44:00 +02:00
Mariano
e806c479f5
Gateway/iOS: replay queued foreground actions safely after resume ( #40281 )
...
Merged via squash.
- Local validation: `pnpm exec vitest run --config vitest.gateway.config.ts src/gateway/server-methods/nodes.invoke-wake.test.ts`
- Local validation: `pnpm build`
- mb-server validation: `pnpm exec vitest run --config vitest.gateway.config.ts src/gateway/server-methods/nodes.invoke-wake.test.ts`
- mb-server validation: `pnpm build`
- mb-server validation: `pnpm protocol:check`
2026-03-08 22:46:54 +01:00
Mariano
a3112d6c5f
iOS Security Stack 3/5: Runtime Security Guards ( #33031 )
...
Merged via /review-pr -> /prepare-pr -> /merge-pr.
Prepared head SHA: 9917165401
Co-authored-by: mbelinky <132747814+mbelinky@users.noreply.github.com >
Co-authored-by: mbelinky <132747814+mbelinky@users.noreply.github.com >
Reviewed-by: @mbelinky
2026-03-03 16:30:27 +00:00
Peter Steinberger
500883775b
refactor(tests): dedupe ios defaults and setup-code helpers
2026-03-02 09:39:45 +00:00
Mariano Belinky
d06d8701fd
iOS: normalize watch quick actions and fix test signing
2026-02-24 15:16:11 +00:00
Peter Steinberger
ff4e6ca0d9
fix(ios): gate agent deep links with local confirmation
2026-02-24 02:51:58 +00:00
Mariano
738b011624
iOS/watch: add actionable watch approvals and quick replies ( #21996 )
...
Merged via /review-pr -> /prepare-pr -> /merge-pr.
Prepared head SHA: 3c2a01f903
Co-authored-by: mbelinky <132747814+mbelinky@users.noreply.github.com >
Co-authored-by: mbelinky <132747814+mbelinky@users.noreply.github.com >
Reviewed-by: @mbelinky
2026-02-20 16:39:13 +00:00
Mariano
a1d5dce7ab
iOS: use dedicated session key for chat sheet ( #21139 )
...
Merged via /review-pr -> /prepare-pr -> /merge-pr.
Prepared head SHA: 31a27b0c5b
Co-authored-by: mbelinky <132747814+mbelinky@users.noreply.github.com >
Co-authored-by: mbelinky <132747814+mbelinky@users.noreply.github.com >
Reviewed-by: @mbelinky
2026-02-19 18:42:56 +00:00
Mariano
57083e4220
iOS: add Apple Watch companion message MVP ( #20054 )
...
Merged via /review-pr -> /prepare-pr -> /merge-pr.
Prepared head SHA: 720791ae6b
Co-authored-by: mbelinky <132747814+mbelinky@users.noreply.github.com >
Co-authored-by: mbelinky <132747814+mbelinky@users.noreply.github.com >
Reviewed-by: @mbelinky
2026-02-18 13:37:41 +00:00
Mariano Belinky
6aedc54bd7
iOS: alpha node app + setup-code onboarding ( #11756 )
2026-02-08 18:08:13 +01:00