Commit Graph

3415 Commits

Author SHA1 Message Date
Jesse Merhi
64318d7624 Rework Android gateway onboarding setup (#98752)
* feat(android): rework gateway onboarding setup

* fix(android): restore protocol mismatch onboarding guidance

* fix(android): sync onboarding native i18n

* fix(android): preserve LAN manual setup prefill

* fix(android): refine onboarding node approval step

* fix(android): polish onboarding recovery actions

* test(android): cover onboarding protocol mismatch copy

* fix(android): separate onboarding node approval

* fix(android): guard onboarding node approval transitions

* fix(android): keep onboarding approval states reachable

* fix(android): wait for node access before onboarding continue

* fix(android): refresh node approval after operator handoff

* fix(android): refresh onboarding approval states

* fix(android): require approval after onboarding permission changes

* fix(android): keep onboarding approval gates active

* fix(android): preserve permission reapproval state

* fix(android): skip node approval on legacy gateways

* fix(android): wait for node approval refresh

* fix(android): preserve camera setting on upgrade

* fix(android): avoid stuck approval check spinner

* fix(android): request talk secrets on operator connects

* fix(android): avoid missed node approval completion

* fix(android): keep nearby LAN setup local

* fix(android): complete onboarding after node approval

* fix(android): reconcile onboarding with gateway auth plans

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

* Fix Android onboarding review edge cases

* Fix native i18n onboarding sentinels
2026-07-03 21:20:12 +10:00
Peter Steinberger
1c7229dead fix(android): expose exact gateway recovery actions (#99414)
* fix(android): expose exact gateway recovery actions

* fix(android): keep auth recovery actionable

* fix(android): cover terminal gateway auth states

* fix(android): keep recovery commands current

* fix(android): reset gateway-scoped recovery state

* fix(android): keep auth rate limits terminal

* fix(android): expire approval ids before refresh

* chore(i18n): refresh Android recovery inventory
2026-07-03 00:30:25 -07:00
Colin Johnson
7cfc66ad07 fix(android): derive Voice readiness from Gateway catalog (#98269)
* fix(android): derive voice readiness from Gateway catalog

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

* chore(android): sync native i18n inventory

* test(gateway): use registered realtime provider ids

* fix(gateway): satisfy Talk catalog lint

* chore(android): refresh voice i18n inventory

* fix(talk): preserve runtime readiness semantics

* fix(talk): make catalog readiness authoritative

* fix(talk): validate selected provider readiness

* fix(android): honor authoritative talk readiness

* fix(android): inventory voice readiness copy

* fix(talk): report runtime-selected catalog provider

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-02 23:32:03 -07:00
Josh Avant
1a508d7915 fix: ignore test-only network CI guard lines (#99233) 2026-07-02 16:18:21 -05:00
Shakker
e4194df270 fix: skip native Swift conditional interpolations 2026-07-02 16:32:22 +01:00
Shakker
28fee00559 fix: retry repository OpenAI key for locale refresh 2026-07-02 15:40:44 +01:00
Shakker
4614449d98 fix: fall back to OpenAI for locale refresh 2026-07-02 15:25:14 +01:00
Dallin Romney
d32c4cf300 perf(build): canonicalize plugin SDK declarations (#98758) 2026-07-02 00:21:41 -07:00
Masato Hoshino
e845a26fd6 fix(agents): fail fast with attributable reason after MCP stdio session dies mid-run (#98738)
* fix(agents): fail fast with attributable reason after MCP stdio session dies mid-run

Wires MCP Client onclose/onerror during bundle-mcp session creation so a
crashed/exited server flips session.connected instead of staying stale.
Next tool/resource/prompt call throws a domain-specific 'is disconnected'
error immediately instead of surfacing the SDK's generic 'Not connected'.
A disconnected reused session is retired and rebuilt fresh on the next
catalog pass rather than reused, since the SDK chains onclose/onerror
cumulatively on repeat connect() and the stdio transport never clears its
read buffer on an unexpected exit.

* fix(agents): retire a reused MCP session that dies mid-refresh, not just pre-refresh

codex review found: the catch-path retirement in getCatalog()'s per-server
task only covered two cases (fresh session that never connected this pass,
and a non-reused session that failed for any reason) - a reused session
that was healthy when this pass started but disconnects mid-refresh (child
process dies between ensureSessionConnected() returning and
listAllToolsBestEffort() finishing) hit neither branch, so onclose flipped
connected=false but the dead session object stayed in the map until the
next catalog rebuild happened to notice it. Added the missing branch plus
a regression test that kills the child process mid tools/list on a reused
session and asserts the session is purged from the map within the same
refresh (not just fail-fast on tool calls, which already worked).

* fix(agents): retire a dead reused MCP session even across overlapping catalog generations

codex round-2 review found: the mid-refresh retirement branch still
skipped when sharedWithNewerGeneration was true, which protects a
still-alive session another generation is actively using - but once
onclose flips session.connected=false, the transport is dead for every
generation sharing that object, so that guard no longer applies.
Simplified to a single !session.connected branch that always retires
(retireSessionIfCurrent already no-ops safely if a newer generation
replaced the map entry), and dropped the now-write-only
connectedForCatalog local it replaced.

* test(scripts): allow MCP SDK callback suppressions

* fix(agents): retire closed MCP sessions

---------

Co-authored-by: Vincent Koc <vincentkoc@ieee.org>
2026-07-01 22:55:15 -07:00
Dave Nicoll
6e79ca3cbc fix(fal): route grok-imagine and nano-banana-2-lite edits to correct endpoints (#98688)
* fix(fal): route grok-imagine and nano-banana-2-lite edits to correct endpoints

The fal image-generation provider appends '/image-to-image' to any model
that isn't 'openai/gpt-image-*' or 'fal-ai/nano-banana-*' when reference
images are supplied. That's wrong for two models fal serves:

- `xai/grok-imagine-image`: fal 404s on '/image-to-image'. The real edit
  endpoint is '/quality/edit'. The endpoint also expects lowercase
  resolution values ('1k'/'2k' only) and a distinct aspect_ratio enum.

- `google/nano-banana-2-lite`: fal 404s on '/image-to-image'. The real
  edit endpoint is '/edit'. The endpoint does not accept a 'resolution'
  parameter.

Add schema entries for both models so ensureFalModelPath and
applyFalImageGeometry pick the right suffix and body shape. Introduce
resolution allowlist support ('resolutions: readonly string[]') and
lowercase transform ('resolutionCase: "lower"') on the schema; existing
schemas keep their behaviour (nb2 still forwards uppercase resolution
unchanged; flux/gpt-image/nb2/krea untouched). Refactor
ensureFalModelPath to consult schema.appendEditPath instead of hardcoded
prefix checks so future models only need a schema entry.

Tested:
- Existing 49 fal unit tests still pass; added 9 new tests covering the
  two new endpoints and their guard conditions (32 -> 34 tests in the
  image-generation-provider suite).
- Live fal.ai calls confirm both endpoints return 200 with real
  reference images; the buggy old URLs still return 404.

* fix(fal): preserve standard edit routing

* fix(image): apply inferred resolution per model

* fix(image): preserve provider reference limits

* fix(image): resolve reference limits per model

* fix(fal): preserve nano banana family limits

* test(ios): stub generated file list helper

---------

Co-authored-by: Vincent Koc <vincentkoc@ieee.org>
2026-07-01 20:42:25 -07:00
Vincent Koc
d310b786cf fix(ci): reset SwiftPM state between build retries 2026-07-01 20:26:18 -07:00
joshavant
8e95e56e2d chore(ios): generate release artifacts locally 2026-07-01 22:05:26 -05:00
Vincent Koc
4a2a97777e test(maturity): derive expected score from source 2026-07-01 19:51:15 -07:00
Mason Huang
5ff247b99e test: prefer auto-cleaning temp dir helper (#93209)
Summary:
- The branch adds `useAutoCleanupTempDirTracker()`, broadens the temp-dir warning reporter to flag new manual helper imports/usages, updates docs, and migrates two script tests to the new helper.
- PR surface: Tests +301, Docs +1, Other +248. Total +550 across 8 files.
- Reproducibility: not applicable. this is test/tooling cleanup, and the changed behavior is exercised through helper/reporter tests and CI evidence rather than a user reproduction path.

Automerge notes:
- PR branch already contained follow-up commit before automerge: test: harden temp dir helper guard
- PR branch already contained follow-up commit before automerge: test: clarify auto cleanup temp dir helper name
- PR branch already contained follow-up commit before automerge: test: cover existing mkdtemp temp dir forms
- PR branch already contained follow-up commit before automerge: test: read staged temp helper source from index

Validation:
- ClawSweeper review passed for head 1fdd7d2a9a.
- Required merge gates passed before the squash merge.

Prepared head SHA: 1fdd7d2a9a
Review: https://github.com/openclaw/openclaw/pull/93209#issuecomment-4705653665

Co-authored-by: Mason Huang <masonxhuang@tencent.com>
Approved-by: hxy91819
2026-07-02 02:46:28 +00:00
joshavant
7fa26e088d ci: remove security guard rollout floor 2026-07-01 21:21:31 -05:00
Peter Steinberger
313560d5b9 feat(ios): modernize navigation and settings (#98811)
* feat(ios): modernize navigation and settings

* fix(ios): remove obsolete settings helpers

* test(ios): update i18n collector fixture

* test(ios): update i18n collector fixture

* test(ios): update i18n collector fixture
2026-07-02 02:43:49 +01:00
joshavant
080481fec9 Require explicit iOS release versions 2026-07-01 20:24:38 -05:00
Peter Steinberger
8502ef6c59 feat(ios): modernize the app with iOS 26 Liquid Glass (#98452)
* feat(ios): adopt iOS 26 Liquid Glass design

* refactor(ios): refine Liquid Glass hierarchy

* docs(ios): require Xcode 26

* refactor(ios): remove obsolete design helpers

* fix(ios): keep agent tab navigation hidden

* fix(ios): compact chat composer at rest

* refactor(ios): reduce interface density

* fix(ios): keep native string inventory current
2026-07-01 19:06:04 +01:00
Vincent Koc
be2c4c65ab fix(i18n): invalidate native artifacts on glossary changes 2026-07-01 06:16:30 -07:00
Vincent Koc
1611e04fd9 fix(ci): keep locale refresh matrices alive 2026-07-01 06:16:30 -07:00
Vincent Koc
18e33d44d4 test(i18n): use shared temp directory helper 2026-07-01 06:16:30 -07:00
Vincent Koc
b881a978fb fix(ci): refresh native locales for glossary changes 2026-07-01 06:16:30 -07:00
Vincent Koc
51f5164bf4 fix(i18n): preserve native printf placeholders 2026-07-01 06:16:30 -07:00
Vincent Koc
8bc40fc8de fix(i18n): validate native refresh inputs 2026-07-01 06:16:30 -07:00
Vincent Koc
a0ab8a7475 fix(i18n): allow locale placeholder reordering 2026-07-01 06:16:30 -07:00
Vincent Koc
3029006364 test(ci): guard native locale refresh retries 2026-07-01 06:16:30 -07:00
Vincent Koc
096cc881c0 test(i18n): prove native refresh creation and no-op 2026-07-01 06:16:30 -07:00
Vincent Koc
d3e6d1fd6c fix(macos): compile packaged localizations 2026-07-01 05:19:12 -07:00
Vincent Koc
be381c27a1 fix(macos): package localized app resources 2026-07-01 05:19:12 -07:00
Vincent Koc
a53b6823c6 test(apple): enforce phased catalog coverage 2026-07-01 05:19:12 -07:00
Vincent Koc
9cfbd1b65c feat(apple): localize native app surfaces 2026-07-01 05:19:12 -07:00
Vincent Koc
02046b665f feat(apple): add Russian and Hindi app catalogs 2026-07-01 05:19:12 -07:00
An Dang
98254634f1 fix(docker): reduce local build memory pressure 2026-07-01 03:58:21 -07:00
Vincent Koc
03d3f49c3d fix(android): preserve Swedish app name 2026-07-01 03:43:03 -07:00
Vincent Koc
844775a6de feat(android): localize every native locale 2026-07-01 03:43:03 -07:00
Vincent Koc
af00b0bebf feat(android): localize gateway onboarding 2026-07-01 03:43:03 -07:00
Vincent Koc
84247114c2 fix(i18n): include custom SwiftUI helper labels 2026-07-01 03:28:23 -07:00
Vincent Koc
a38864aeb9 fix(i18n): parse native UI string expressions 2026-07-01 03:28:23 -07:00
Vincent Koc
18494a04f5 fix(i18n): cover native conditional UI strings 2026-07-01 03:28:23 -07:00
Vincent Koc
5ec988230c fix(i18n): scope native UI helper extraction 2026-07-01 03:28:23 -07:00
Vincent Koc
59b6bdf36c fix(i18n): cover structured native UI strings 2026-07-01 03:28:23 -07:00
Vincent Koc
fbd6e30ce1 feat(i18n): add Swedish native locale 2026-07-01 03:28:23 -07:00
Vincent Koc
9fd6ca9602 fix(i18n): route native inventory checks narrowly 2026-07-01 03:28:23 -07:00
Vincent Koc
da6ee4f0dd fix(i18n): restrict native UI extraction 2026-07-01 03:28:23 -07:00
Vincent Koc
53c66986ea fix(i18n): filter non-translatable native literals 2026-07-01 03:28:23 -07:00
Vincent Koc
ab83d35b26 fix(i18n): cover all native source roots 2026-07-01 03:28:23 -07:00
Vincent Koc
0e03507935 fix(i18n): inventory conditional native labels 2026-07-01 03:28:23 -07:00
Vincent Koc
aa32894afc fix(i18n): align native scan scope and build exclusions 2026-07-01 03:28:23 -07:00
Vincent Koc
3e65e64c19 feat(i18n): inventory native resources and wrappers 2026-07-01 03:28:23 -07:00
Vincent Koc
d913a3314b fix(i18n): preserve Kotlin native placeholders 2026-07-01 03:28:23 -07:00