Commit Graph

4219 Commits

Author SHA1 Message Date
Vincent Koc
de0efd5445 refactor(android): mark presence platform as metadata 2026-07-12 13:26:39 +02:00
Vincent Koc
26692f6915 fix(android): retain localized transient presentation 2026-07-12 13:26:39 +02:00
Vincent Koc
d0ca7d2a24 style(android): wrap presence locale assertion 2026-07-12 13:26:39 +02:00
Vincent Koc
099c261541 fix(android): keep presence metadata locale neutral 2026-07-12 13:26:39 +02:00
Vincent Koc
c5f94adef4 fix(android): localize settings and thinking presentation 2026-07-12 13:26:39 +02:00
Vincent Koc
c984bf0e8b fix(android): type approval command presentation 2026-07-12 13:26:39 +02:00
Vincent Koc
e5932778f4 fix(android): keep cron detail localization reactive 2026-07-12 13:26:39 +02:00
Vincent Koc
1b87391658 fix(android): close locale review gaps 2026-07-12 13:26:39 +02:00
Vincent Koc
be900f2116 fix(android): refresh localized retained presentation 2026-07-12 13:26:39 +02:00
Vincent Koc
71db13d4c3 fix(android): localize command and overview models 2026-07-12 13:26:39 +02:00
Vincent Koc
d0fc18fba8 fix(android): keep voice status semantics locale-safe 2026-07-12 13:26:39 +02:00
Vincent Koc
0026e67488 test(android): keep approval layout guard localization-safe 2026-07-12 13:26:39 +02:00
Vincent Koc
6e6213e7b9 fix(android): refresh retained gateway status text 2026-07-12 13:26:39 +02:00
Vincent Koc
928d1935a6 fix(android): refresh retained voice and chat text 2026-07-12 13:26:39 +02:00
Vincent Koc
1cf227cf19 feat(android): add locale-aware retained text 2026-07-12 13:26:39 +02:00
Vincent Koc
06b2be86c3 fix(android): scope locale context lint suppression 2026-07-12 13:26:39 +02:00
Vincent Koc
f6a3448658 fix(android): keep localized labels out of state 2026-07-12 13:26:39 +02:00
Vincent Koc
4c6f171b9b fix(android): localize remaining settings actions 2026-07-12 13:26:39 +02:00
Vincent Koc
6dbcbd49fa fix(android): apply localization formatting 2026-07-12 13:26:39 +02:00
Vincent Koc
08cf91606d test(android): align localization helper indentation 2026-07-12 13:26:39 +02:00
Vincent Koc
5e3f04248d test(android): satisfy localization helper formatting 2026-07-12 13:26:39 +02:00
Vincent Koc
2a32dcafea build(android): regenerate localization resources 2026-07-12 13:26:39 +02:00
Vincent Koc
f8bcf1d1d6 fix(android): localize settings and cron helpers 2026-07-12 13:26:39 +02:00
Vincent Koc
bd81763cd0 fix(android): localize connection chat and voice states 2026-07-12 13:26:39 +02:00
Vincent Koc
26e28ab2e3 fix(android): format localization fallbacks 2026-07-12 13:26:39 +02:00
Vincent Koc
ea8cadaf75 feat(android): localize chat sessions and voice 2026-07-12 13:26:39 +02:00
Vincent Koc
fc96ddf0e0 feat(android): localize settings surfaces 2026-07-12 13:26:39 +02:00
Vincent Koc
2c19c8d4d2 feat(android): localize onboarding and navigation 2026-07-12 13:26:39 +02:00
Vincent Koc
869d1b0238 feat(android): localize platform feedback 2026-07-12 13:26:39 +02:00
Vincent Koc
c03d64558f feat(android): generate native localization resources 2026-07-12 13:26:39 +02:00
Peter Steinberger
7303f42917 fix(macos): fail fast during node lifecycle cleanup (#105282) 2026-07-12 11:41:21 +01:00
Peter Steinberger
dba78584ff fix(ui): preserve rejected first message when session send fails (#105261)
* fix(ui): preserve rejected first session message

* chore: leave changelog to release closeout

* fix(protocol): regenerate session create result
2026-07-12 11:09:38 +01:00
Peter Steinberger
5b56a1f664 feat(gateway): land remaining durable-approvals stack and repair main gates (#104837)
* feat(gateway): propagate approvals to ancestor sessions with replay

Squash-rebased #103921 segment onto the native-clients tip on current main.
Session-scoped approval events publish sanitized pending/terminal
transitions to opted-in session audiences, with authoritative pending
replay on stream subscribe and durable-expiry reconciliation through the
owning manager. SessionApprovalEvent/Replay wire types export from the
approvals owner module; Swift models regenerated.

(cherry picked from commit 2d1dcf9747044710111d0c730fc46ba6013a165c)
(cherry picked from commit ccf88efd56b513d07599ffcee997bf0cddaf9adc)
(cherry picked from commit 8eb33f59f00ec9ee4625259b76bd7ae60d2cd480)
(cherry picked from commit c297cbc93c8401e9c79c20f242245a194f5dd236)
(cherry picked from commit 93d68f28601ff37d863da4db009504993a22533a)
(cherry picked from commit d285ccd8b2f212bb57e814107e7709c896e96b7d)
(cherry picked from commit 5c536982231402b1b58d1683794ea9948b32d077)
(cherry picked from commit 1646e5b6dc4dd20de54e10f110a5909be18d7d50)
(cherry picked from commit 35cf1b705b247fb282f4d56ffe74bd2fb238221f)
(cherry picked from commit 4f8ef3699d)
(cherry picked from commit 74fbdcc99d5fff062d67760a51dba4ee9e84479b)
(cherry picked from commit 222b285502681d2be14b1819798e9ee5555f431e)
(cherry picked from commit b9e744951f676b600e7c5322bfd04b0e99797c07)
(cherry picked from commit 9e904efde5)
(cherry picked from commit 678f2384fa)
(cherry picked from commit 72842e5cf6)
(cherry picked from commit be74c25e80e84a1f065053766f23efb84822e811)
(cherry picked from commit 93ba8c4b09)
(cherry picked from commit 8f23761372)

* feat(gateway): fail-closed plugin and tool approval gates

Squash-rebased #103932 segment onto the ancestor-propagation tip on
current main. Plugin node.invoke approvals claim a one-shot allow-once
decision before handing execution authority to the policy, so observation
or retry cannot replay a consumed approval; sibling tool gates bind
approval ids to their originating reviewer identity.

(cherry picked from commit 122df0d75281f572c012b6484ed5daf085d1d577)
(cherry picked from commit f23d8ac240a8dcf2a42c4daaae962263975a0ae8)
(cherry picked from commit 8632fb6436a224dac7a9a9ef0216884530de2c24)
(cherry picked from commit d9fe2dd5c53665e5732f5f3da5ed1907a686ade8)
(cherry picked from commit bb139f2c8aa36ddad70413e1ef79ff491a6f2ecd)
(cherry picked from commit 9b3e056b68ea515c7d4baef269289b6670570480)
(cherry picked from commit b11e66b59a7af1f3b08712de06864aed64d349e4)
(cherry picked from commit a12916ee592d03dfa35e86a2aaede4476a5d4e5d)
(cherry picked from commit d699de840fc8346892b9ae244fe3c3e8c4413032)
(cherry picked from commit 9b7e5a9608)
(cherry picked from commit 4b507593f1b2f10b4496984c84a2803b853e5c5e)
(cherry picked from commit 56408a186733c4eeb5aa76bd5907cde7b0cd3d5b)
(cherry picked from commit a4051d6d8353d39d6fa0b5d69c36e06c3cd3e796)
(cherry picked from commit 76829805a7)
(cherry picked from commit a8b493f934)
(cherry picked from commit aceb990597)
(cherry picked from commit a29b0e75482470c53a9fb4fe3f204e14cf71868f)
(cherry picked from commit 2e3be08653)
(cherry picked from commit c9ae3d7202)

* fix: main-gate repairs for the durable-approvals stack

- android: capture createdAtMs on the pending exec-approval write at
  registration; canonical readback after a refresh that already replaced
  the visible rows was dropping the approval instead of surfacing the
  still-pending reconciliation message (#104913 merged without this)
- android: generous CI timeout ceilings in GatewayExecApprovalRuntimeTest
- agents: hermetic model-discovery test via the plugins/provider-runtime
  boundary (lazy plugin-runtime resolution hangs vitest workers since #104770)
- cli: usage-cost settle-budget test asserts the budget bound on every call
  instead of pinning the poll count (fast hosts fit a second poll in 50ms)
- protocol coverage: allowlist session.approval for ios/android (native
  review rides exec.approval push/nudge delivery)
- docs map, native i18n inventory, plugin-sdk api baseline regenerated
2026-07-12 10:51:38 +01:00
Peter Steinberger
e0f45bfbf0 feat(tooling): enforce indexed access checks in root tests (#105223)
* feat(tooling): enforce indexed access checks in root tests

* style(tooling): clarify scoped package guard
2026-07-12 10:42:07 +01:00
Peter Steinberger
251f54baec fix(apps): remove dead native code 2026-07-12 02:41:17 -07:00
Peter Steinberger
a8b104c4e3 feat(mac): swap dashboard titlebar buttons with sidebar state (#105175)
* feat(mac): swap dashboard titlebar buttons with sidebar state

The Control UI reports sidebar collapsed/width over a new openclawNav
WKScriptMessage; the titlebar accessory shows toggle+back/forward
right-aligned to the sidebar edge while expanded, and
toggle+search+new-session while collapsed. Search opens the command
palette and + opens the new-session surface via openclaw:native-*
events. Older gateway bundles that never report keep the shipped
toggle/back/forward layout.

Refs #105129

* docs: describe state-dependent mac titlebar buttons
2026-07-12 10:13:36 +01:00
Peter Steinberger
55254c3a0b feat(nodes): route alerts to the active computer (#105083)
* feat(nodes): route alerts by active computer

* fix(ci): allowlist node presence mobile coverage

* test(prompts): refresh node presence snapshots

* fix(macos): await presence reporter actor hop

* fix(macos): type presence test delivery state

* docs(nodes): add active presence guide

* docs(nodes): format presence troubleshooting
2026-07-12 10:05:50 +01:00
Peter Steinberger
d31eeea408 fix(android): upsert device sessions safely (#105144) 2026-07-12 09:28:14 +01:00
Peter Steinberger
6fc564278d feat(agents): sessions_search full-text recall over past session transcripts (#105057)
Adds a core sessions_search agent tool backed by a SQLite FTS5 index that
lives next to the transcript rows in the per-agent database. Indexing is
transactional: user/assistant text is indexed inside the same write
transaction that persists the event, deletes drop index rows in the same
transaction, and branch rewinds mark the session dirty so the next search
rebuilds it from the same visible-path resolution sessions_history uses
(which also lazily backfills doctor-migrated databases). Search executes
gateway-side behind an additive sessions.search method with a bounded
session-key allowlist; visibility, sandbox restrictions, and snippet
redaction mirror sessions_history.

Closes #100978
2026-07-12 09:15:41 +01:00
Peter Steinberger
c0496ea96d fix(android): bound structured chat image decoding (#105065)
* fix(android): bound structured chat images

* chore(android): sync native i18n inventory
2026-07-12 09:11:21 +01:00
Peter Steinberger
6038480915 feat(ui): browse Gateway and node folders from one root (#105114)
* feat(ui): browse Gateway and node folders

* chore: keep changelog release-owned

* chore: refresh native i18n inventory

* refactor(macos): isolate node filesystem commands
2026-07-12 09:07:07 +01:00
Peter Steinberger
448b90a594 feat(android): adopt per-device app sessions (#105115)
* feat(android): adopt per-device app sessions

Co-authored-by: snowzlmbot <293528334+snowzlmbot@users.noreply.github.com>

* test(android): assert latest session adoption wins

---------

Co-authored-by: snowzlmbot <293528334+snowzlmbot@users.noreply.github.com>
2026-07-12 09:06:45 +01:00
Peter Steinberger
da4a480089 chore(apps): remove more dead code 2026-07-12 00:58:32 -07:00
Peter Steinberger
952733d6fa test(macos): isolate gateway device stores (#105048) 2026-07-12 08:42:20 +01:00
Peter Steinberger
e4d8a2a55b fix(android): preserve TLS hostname context (#105072)
* fix(android): preserve TLS hostname context

Co-authored-by: whisky0809 <32197959+whisky0809@users.noreply.github.com>

* style(android): order TLS test imports

* style(android): group TLS test imports

---------

Co-authored-by: whisky0809 <32197959+whisky0809@users.noreply.github.com>
2026-07-12 08:32:03 +01:00
Peter Steinberger
ba9a04580b fix(macos): unblock node transport reconnects (#105091)
* fix(macos): unblock node transport reconnects

* chore(macos): leave release notes to release flow
2026-07-12 08:17:59 +01:00
Peter Steinberger
35abbb7d0f chore(apps): sync native i18n inventory 2026-07-11 23:57:56 -07:00
Peter Steinberger
bf13c3bb1b chore(apps): remove dead native code 2026-07-11 23:51:21 -07:00
Peter Steinberger
6921fb4ce7 refactor(ios): trim approval test fixtures (#105052) 2026-07-12 07:38:45 +01:00
Peter Steinberger
46355cbdcf fix(android): stop canceled work from surfacing failures (#105047)
* fix(android): propagate request cancellation

* chore: keep release notes in PR body
2026-07-12 07:22:27 +01:00