Commit Graph

4219 Commits

Author SHA1 Message Date
github-actions[bot]
e41d8e3345 chore(i18n): refresh native hi locale 2026-07-02 19:54:13 +00:00
github-actions[bot]
1bbcb5ecdb chore(i18n): refresh native fr locale 2026-07-02 19:53:27 +00:00
github-actions[bot]
0e2fdd1b03 chore(i18n): refresh native ko locale 2026-07-02 19:52:40 +00:00
github-actions[bot]
b2554c8ce9 chore(i18n): refresh native es locale 2026-07-02 19:51:51 +00:00
github-actions[bot]
6cb4468a50 chore(i18n): refresh native de locale 2026-07-02 19:51:19 +00:00
github-actions[bot]
8648ec4494 chore(i18n): refresh native pt-BR locale 2026-07-02 19:51:02 +00:00
github-actions[bot]
fa9ec20aa4 chore(i18n): refresh native zh-TW locale 2026-07-02 19:50:21 +00:00
github-actions[bot]
de9a6bad95 chore(i18n): refresh native zh-CN locale 2026-07-02 19:50:14 +00: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
Ben.Li
a51b06fd4d fix(android): strip ws scheme prefix from manual gateway host input (#99110)
* fix(android): strip ws scheme prefix from manual gateway host input

Reject bare ws:// in the Host field and normalize pasted ws:// LAN URLs
so manual onboarding resolves the real hostname instead of host ws.
Fixes #87216.

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix(android): preserve complete manual gateway endpoints

* fix(android): preserve gateway i18n inventory

---------

Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-02 11:43:31 -07:00
NianJiu
db7bfc618d fix: require Android contact and calendar write permissions in onboarding (#99158)
* fix: require Android contact and calendar write permissions in onboarding

* refactor(android): share required onboarding permission groups

---------

Co-authored-by: NianJiuZst <180004567+users.noreply.github.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-02 11:36:56 -07:00
Ben.Li
97ad0b7c21 fix(android): bracket IPv6 hosts in manual gateway URL composition (#99107)
* fix(android): bracket IPv6 hosts in manual gateway URL composition

Reuse formatGatewayAuthority when building manual gateway URLs so IPv6
loopback and LAN hosts parse correctly during onboarding connect setup.

Co-authored-by: Cursor <cursoragent@cursor.com>

* test(android): cover bracketed IPv6 gateway hosts

* fix(android): avoid gateway i18n inventory churn

---------

Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-02 11:28:18 -07:00
NianJiu
36361fc2a0 fix(android): preserve split SMS permission grants (#99147)
* fix: preserve split SMS permission grants

* refactor(android): generalize split permission grant merging

---------

Co-authored-by: NianJiuZst <180004567+users.noreply.github.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-02 11:21:00 -07:00
Ben.Li
f2a708468a fix(android): ignore chat events with missing assistant role in voice text extraction (#99123)
* fix(android): ignore chat events with missing assistant role in voice text extraction

Voice chat event parsing now rejects messages without an explicit assistant role,
matching ChatController fail-closed behavior and preventing accidental TTS playback.

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix(android): require canonical assistant role for voice events

---------

Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-02 11:18:12 -07:00
github-actions[bot]
55ed57a4e3 chore(i18n): refresh native sv locale 2026-07-02 17:37:19 +00:00
github-actions[bot]
6afef15100 chore(i18n): refresh native fa locale 2026-07-02 17:24:41 +00:00
github-actions[bot]
267898cddb chore(i18n): refresh native ru locale 2026-07-02 17:23:44 +00:00
github-actions[bot]
203a896b27 chore(i18n): refresh native nl locale 2026-07-02 17:11:59 +00:00
github-actions[bot]
d3d7282a8c chore(i18n): refresh native vi locale 2026-07-02 17:07:14 +00:00
github-actions[bot]
3f289fdb40 chore(i18n): refresh native th locale 2026-07-02 16:59:04 +00:00
github-actions[bot]
8a3935fe0b chore(i18n): refresh native pl locale 2026-07-02 16:54:54 +00:00
github-actions[bot]
019603d336 chore(i18n): refresh native id locale 2026-07-02 16:44:34 +00:00
github-actions[bot]
8c5adbfe3e chore(i18n): refresh native uk locale 2026-07-02 16:42:44 +00:00
github-actions[bot]
0011a18478 chore(i18n): refresh native tr locale 2026-07-02 16:32:59 +00:00
github-actions[bot]
6ea407d462 chore(i18n): refresh native it locale 2026-07-02 16:29:31 +00:00
github-actions[bot]
e8e96bf7ee chore(i18n): refresh native hi locale 2026-07-02 16:19:06 +00:00
github-actions[bot]
0c82908f78 chore(i18n): refresh native ar locale 2026-07-02 16:16:54 +00:00
github-actions[bot]
28a8414726 chore(i18n): refresh native fr locale 2026-07-02 16:02:10 +00:00
github-actions[bot]
db27d2ecfa chore(i18n): refresh native ko locale 2026-07-02 15:57:47 +00:00
github-actions[bot]
f8e1e0c5bf chore(i18n): refresh native pt-BR locale 2026-07-02 15:45:23 +00:00
Shakker
e4194df270 fix: skip native Swift conditional interpolations 2026-07-02 16:32:22 +01:00
github-actions[bot]
3020f7817e chore(i18n): refresh native es locale 2026-07-02 15:20:18 +00:00
github-actions[bot]
a39b07bb15 chore(i18n): refresh native de locale 2026-07-02 15:09:28 +00:00
github-actions[bot]
f0d2066787 chore(i18n): refresh native zh-TW locale 2026-07-02 14:54:43 +00:00
github-actions[bot]
e7e98f6399 chore(i18n): refresh native zh-CN locale 2026-07-02 14:52:40 +00:00
NeatGuyCoding
76ccd17ac3 test(android): poll for stale TLS probe cleanup in auth test (#83826)
* test(android): poll for stale TLS probe cleanup in auth test

Signed-off-by: NeatGuyCoding <15627489+NeatGuyCoding@users.noreply.github.com>

* test(android): await stale TLS probe job

Co-authored-by: NeatGuyCoding <15627489+NeatGuyCoding@users.noreply.github.com>

---------

Signed-off-by: NeatGuyCoding <15627489+NeatGuyCoding@users.noreply.github.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-02 07:18:27 -07:00
Masato Hoshino
40d4e32110 fix(android): show specific gateway auth-recovery reason instead of generic label (#98698)
* fix(android): distinguish gateway auth-recovery reasons instead of one generic label

gatewaySummary()/gatewayStatusLabel() collapsed every auth failure (expired
setup QR, missing/invalid token, missing/invalid password, stale device
identity) into "Authentication needed", discarding the already-computed
MainViewModel.gatewayConnectionProblem signal consumed elsewhere in the app
(OnboardingFlow's recoveryGatewayAuthDetail). Thread it into both status
labels via a shared gatewayAuthNeededSummary() helper so the Overview and
Settings screens tell the user which recovery action applies.

Fixes #98046

* test(android): lock gateway auth-needed labels to the real unauthorized message format

Verified against src/gateway/server/ws-connection/auth-messages.ts:
formatGatewayAuthFailureMessage always returns strings starting with
"unauthorized", which contains the "auth" substring the status-text gate
checks for. Add tests using the exact real-world message text (not just
synthetic "auth failed" strings) so this stays regression-locked.

* fix(android): widen the auth-needed status gate to cover device-identity failures

CONTROL_UI_DEVICE_IDENTITY_REQUIRED/DEVICE_IDENTITY_REQUIRED real gateway
messages ("device identity required", "control ui requires device
identity...") don't contain "auth", so the status.contains("auth") gate
never reached their specific label. Add "device identity" as an additional
substring the gate checks for those two codes, with regression tests using
the exact real message text (message-handler.ts).

Verified via GitHub-style codex review round 2 (round 1's "unauthorized
doesn't contain auth" claim was checked against source and rejected as
false — "unauthorized" does contain "auth" — but this second, narrower
finding about device-identity codes held up under the same source check).

* fix(android): centralize gateway auth status labels

* fix(android): correlate gateway connection diagnostics

* chore(android): align native i18n inventory after rebase

* fix(android): preserve retryable pairing guidance

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-02 06:50:26 -07:00
NianJiu
0ccdef5dcf [codex] Cancel Android gateway pending RPCs on close (#98067)
* fix: cancel Android gateway pending RPCs on close

* fix(android): isolate pending RPCs per connection

* style(android): separate RPC waiter invariant

* chore(android): align native i18n inventory

---------

Co-authored-by: NianJiuZst <180004567+users.noreply.github.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-02 06:39:44 -07:00
NianJiu
e3f46d0926 [codex] Gate Android Talk capture starts in background (#98055)
* fix: gate Android talk capture starts

* refactor(android): make Talk capture policy explicit

---------

Co-authored-by: NianJiuZst <180004567+users.noreply.github.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-02 06:22:26 -07:00
Momo
3ae5e98bf6 fix(macos): stop runtime config-health sidecar access (#99039)
Summary:
- The PR removes macOS runtime reads and writes of `logs/config-health.json`, keeps config-health observation in process memory, and adds Swift tests for ignoring and not recreating the retired sidecar.
- PR surface: Other +22. Total +22 across 2 files.
- Reproducibility: yes. Current main still writes `logs/config-health.json` from the macOS config observation path, and the PR body includes before/after terminal output for that same Swift path.

Automerge notes:
- No ClawSweeper repair was needed after automerge opt-in.

Validation:
- ClawSweeper review passed for head 8cbc4e10d3.
- Required merge gates passed before the squash merge.

Prepared head SHA: 8cbc4e10d3
Review: https://github.com/openclaw/openclaw/pull/99039#issuecomment-4864550335

Co-authored-by: momothemage <niuzhengnan@163.com>
Approved-by: momothemage
2026-07-02 12:22:21 +00:00
NianJiu
98e97661da [codex] Fix Android camera snap cleanup (#98040)
* fix: release Android camera snap use case

* fix(android): release one-shot camera capture promptly

---------

Co-authored-by: NianJiuZst <180004567+users.noreply.github.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-02 05:10:02 -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
Lokimorty
a8c7657cd7 fix(android): return settings details to their originating tab on Back (#98914)
* fix(android): return settings details to their originating tab on Back

* chore(i18n): refresh native string inventory for shell back label
2026-07-02 09:52:59 +01:00
NianJiu
04e4c3719d [codex] Support Android selected photo access (#98059)
* fix: support Android selected photo access

* fix(android): expose selected photo access in settings

---------

Co-authored-by: NianJiuZst <180004567+users.noreply.github.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-02 09:36:58 +01:00
Voscko
f2abf57d32 fix(android): make offline chat actionable (#94566)
* fix(android): make offline chat actionable

* fix(android): use structured offline recovery state

* chore(i18n): sync native string inventory

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-02 09:25:12 +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