Commit Graph

4386 Commits

Author SHA1 Message Date
joshavant
a69ebf3067 fix(ios): keep snapshot results outside upload tree 2026-07-21 13:44:11 -05:00
joshavant
12515ad182 fix(ios): harden App Store release flow 2026-07-21 13:44:11 -05:00
Peter Steinberger
4586ae36ae fix(gateway): keep fresh-state startup responsive with prepared runtimes (#112262)
* fix(gateway): keep health responsive during model runtime startup

* refactor(agents): isolate prepared runtime startup mode

* refactor(agents): keep prepared runtime catalog mode internal
2026-07-21 06:18:27 -07:00
Vincent Koc
a11b13622a test(i18n): require localized compact token suffixes 2026-07-21 20:54:26 +08:00
Vincent Koc
fd31e53bd9 test(i18n): cover shared macOS chat strings 2026-07-21 20:14:39 +08:00
Peter Steinberger
48828c38a1 fix(release): honor frozen AI package exports (#112258) 2026-07-21 04:20:04 -07:00
Vincent Koc
dc1abfb4a6 test(i18n): cover generated Wear lint attributes 2026-07-21 18:42:12 +08:00
Vincent Koc
60cb53233b ci(i18n): publish Wear locale artifacts 2026-07-21 17:36:49 +08:00
Vincent Koc
c6c1151c3a build(i18n): generate Wear locale resources 2026-07-21 17:36:49 +08:00
Vincent Koc
d4021c351c fix(macos): localize settings surfaces (#112185) 2026-07-21 16:15:40 +08: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
Dallin Romney
33f5c0bbb2 fix(ci): forward live QA credentials to maturity generation (#112201) 2026-07-21 16:57:39 +09:00
Vincent Koc
9e0c5f94b5 fix(macos): support background-only launches (#112168)
* fix(macos): support background-only launches

* fix(macos): refresh native i18n inventory

* fix(i18n): refresh native inventory after main sync
2026-07-21 15:41:49 +08:00
Peter Steinberger
e1ff65fb77 chore(cli): drop dead classifiers and single-use wrappers left by fallback removal (#112191)
Follow-up to c5254f13ee (#112074): delete the legacy string-match timeout
classifier (the CLI path only sees typed GatewayTransportError from
callGateway's wrapper timer), the duplicate JSON/blank-message validation
in the private gateway command, the now-pointless getGatewayDispatchConfig
wrapper, the single-use embedded-loader alias, and the cross-os release
guard for the EMBEDDED FALLBACK marker no build can emit anymore.
2026-07-21 00:21:15 -07:00
Vincent Koc
1d28128c20 chore(ci): audit dependency fingerprint exports (#112190) 2026-07-21 15:18:09 +08:00
Dallin Romney
8a03f414ce fix(ci): restore Z.AI API Platform validation (#112171) 2026-07-21 15:44:41 +09:00
Peter Steinberger
b4e27f8b3d refactor: move provider transports into packages/ai behind a typed host port (#111669)
* refactor(ai): invert plugin coupling behind the transport host port

* fix(ai): queue custom transport registrations until the host is configured

* refactor(ai): remove relocated transport sources from src/agents

* fix(ai): source core stream types from canonical packages and fix tarball fixtures

* fix(ai): invert plugin transport host wiring

* fix(ai): harden managed transport projection

* test(ai): register synchronous stream in transport mock

* fix(ai): lazily install transport runtime host

* fix(ai): preserve completion compat detection
2026-07-20 23:26:00 -07:00
joshavant
b63ccef409 Android: align Wear internal release track 2026-07-21 01:06:12 -05:00
Peter Steinberger
be5e427f56 feat(dashboard): plugin-declared widget data bindings and action verbs (#112083)
* feat(dashboard): add plugin capability declarations

* docs(dashboard): describe plugin capabilities

* fix(plugins): preserve registry map cloning

* fix(dashboard): make plugin grant ids unambiguous

* fix(dashboard): align generated plugin grant ids

* chore(boards): internalize verb ids and refresh protocol snapshots
2026-07-20 22:43:04 -07:00
joshavant
9089e33a1a Android: add Wear OS screenshot pipeline 2026-07-21 00:06:15 -05:00
Lei Mei
a0f03b6f9f test(tooling): stabilize lifecycle measure pid fixtures (#96482)
* test(tooling): stabilize lifecycle measure pid fixtures

* test: remove redundant lifecycle pid wait

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-20 21:52:48 -07:00
thomas.szbay
db482e6e97 fix(agents): race in-flight tool promises against run abort (#103905) (#110704)
* fix(agents): race in-flight tool promises against run abort (#103905)

wrapToolWithAbortSignal forwarded the combined abort signal into tool
execute calls but awaited the returned promise without racing it, so a
tool that never observes the signal kept running after stuck-session
recovery aborted the run and delivered its result into a dead run.

Race the execute promise against the combined signal so the wrapped
call rejects with AbortError as soon as the abort fires. The tool
promise itself cannot be cancelled in JavaScript; it keeps running in
the background and its late settlement is detached so it never lands
in the aborted run. Tool results and errors pass through unchanged
while the run is alive.

Refs #103905

* fix(agents): satisfy oxlint abort-race rejection rules without losing tool errors

* fix(lint): annotate intentional non-Error pass-through rejections

The race intentionally forwards tool rejections untouched (including
non-Error values), which trips oxlint's promise-rejection rules; mark
both sites with oxlint-disable-next-line justifications.

* test(scripts): allowlist intentional abort-race rejection suppression

The raw non-Error pass-through reject() in agent-tools.abort.ts is the
documented tool-error contract; register its prefer-promise-reject-errors
suppression in the production allowlist.

* fix(agents): observe sync-aborted tool rejections

Co-authored-by: thomas.szbay <thomas.szbay@xydigit.com>

---------

Co-authored-by: thomas.szbay <thomas.szbay@example.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
Co-authored-by: thomas.szbay <thomas.szbay@xydigit.com>
2026-07-20 21:24:52 -07:00
joshavant
d445a251f7 fix(android): remove retired voice release screenshot 2026-07-20 23:04:56 -05:00
wangmiao0668000666
998f0ed27d fix(e2e): keep phase log tails UTF-8 safe (#109923)
* fix(e2e): keep phase log tails UTF-8 safe

The phase runner keeps a bounded in-memory log tail per phase and writes it
to stderr when a phase fails. The byte-based cut can land inside a multi-byte
UTF-8 character, and decoding from that offset emits U+FFFD replacement
characters at the start of the diagnostics tail. Reuse the decodeUtf8Tail
helper from scripts/e2e/lib/text-file-utils.mjs (#109669) so the retained
window starts on a character boundary.

Co-Authored-By: Claude <noreply@anthropic.com>

* fix(e2e): declare decodeUtf8Tail in text-file-utils types

phase-runner.ts imports decodeUtf8Tail from text-file-utils.mjs; the
adjacent declaration file must export it or check-test-types fails with
TS2305.

Co-Authored-By: Claude <noreply@anthropic.com>

* refactor(e2e): reuse tailText wrapper for phase log tails

Co-Authored-By: Claude <noreply@anthropic.com>

* test(e2e): focus phase tail regression

Co-authored-by: wangmiao0668000666 <wang.miao86@xydigit.com>

---------

Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-20 19:45:35 -07:00
Peter Steinberger
2bb6b870aa fix: preserve Codex-bound conversation history across session rotation (#112016)
* fix: preserve Codex conversation bindings

* test: harden Codex live gateway stress

* chore: refresh plugin SDK API baseline

* test: tighten restart recovery fixtures

* test: complete restart recovery recorder fixture

* fix: keep plugin command authorization fail closed

* fix: restore private queue source imports

* fix: keep private SDK imports inside core

* fix: keep speech core on private SDK paths

* fix: stage private SDK exports for live tests

* fix: preserve plugin-bound gateway history

* fix: block transcript writes after binding races

* test: complete live stage helper contracts

* test: align binding mocks with current types

* fix: preserve compiler OOM diagnostics

* chore: move release notes to PR context
2026-07-20 19:42:56 -07:00
Dallin Romney
3abf8ce964 fix(ci): freeze floating maturity main refs (#112015) 2026-07-21 11:42:22 +09:00
Peter Steinberger
64607ba63d feat: show cloud workspace conflicts in the Control UI (#111329)
* feat(ui): surface cloud workspace conflicts with staged-ref guidance

* fix(ui): satisfy workspace conflict CI checks

* fix(ui): reject terminal controls in conflict paths

* chore: keep release notes out of the PR

* fix(ui): satisfy conflict path lint

* fix(ui): retain cloud conflicts after reclaim

* fix(ui): keep child conflict badges visible

* test(ui): cover cloud conflict recovery in browser

* fix(ci): rotate poisoned dependency snapshot

* fix(ui): keep nested cloud conflicts discoverable

* docs(changelog): note cloud conflict UI

* fix(ui): restore conflict UI budget headroom
2026-07-20 19:27:19 -07:00
Dallin Romney
29737496a8 fix(qa): run independent evidence channels concurrently (#112008)
* fix(qa): overlap independent channel evidence

* fix(ci): pin nested maturity evidence ref

* test(qa): satisfy promise executor lint
2026-07-21 11:25:46 +09:00
zw-xysk
9db4b991b0 fix(scripts): preserve UTF-16 surrogate pairs at truncation boundaries in label-open-issues (#109498)
Replace .slice(0, maxChars) with truncateUtf16Safe in two locations:
- readBoundedResponseText (error body truncation)
- truncateBody (issue body preview)

Without this fix, an emoji (or any astral character) straddling the
truncation boundary would leave a lone surrogate in the output, producing
invalid UTF-16 that serializes to a garbled replacement character.

Follows the same pattern as Leon-SK668's PRs #108184, #108193, #108208.
2026-07-20 19:06:06 -07:00
Dallin Romney
d4deddb6ed fix(ci): budget maturity evidence runs (#111980) 2026-07-21 10:54:37 +09:00
lzyyzznl
f267a4f99b fix(scripts): preserve UTF-16 surrogate pairs in firecrawl truncation (#109561)
* fix(scripts): preserve UTF-16 surrogate pairs in firecrawl truncation

* test(scripts): cover UTF-16-safe firecrawl truncation

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-20 18:50:03 -07:00
Patrick Erichsen
ff98dd93f5 ci: scan pull requests with TruffleHog (#111935)
* ci: scan pull requests with TruffleHog

* ci: scan staged changes with TruffleHog

* ci: fetch pull request base for secret scan

* ci: fetch complete pull request scan history
2026-07-20 17:08:41 -07:00
Jason (Json)
e2bb04328f fix(release): accept large tarball entry lists (#111672) 2026-07-20 13:21:27 -06:00
Dinesh H Suthar
444fd4bbea test(ci): provide rg in PR wrapper fixture (#111824)
* test(ci): avoid lock path in wrapper opt-in test

* test(ci): stub rg in PR wrapper fixture
2026-07-20 06:49:32 -07:00
Peter Steinberger
a971188a6d build(client): make @openclaw/gateway-client publishable to npm (#111707) 2026-07-20 00:23:36 -07:00
Peter Steinberger
6b80b01369 chore(pr): warn when ci-dispatch targets a remote head behind local work (#111694) 2026-07-19 23:24:29 -07:00
Peter Steinberger
fef846a3f0 build(protocol): make @openclaw/gateway-protocol publishable to npm (#111664)
* build(protocol): make @openclaw/gateway-protocol publishable to npm

* chore(mxc): align package version with release train

* fix(release): support gateway-only core packages
2026-07-19 23:18:24 -07:00
Peter Steinberger
104128dd32 chore(pr): dev-wrapper opt-in — advisory subcommands may dogfood modified wrappers (#111656)
* chore(pr): dev-wrapper opt-in — advisory subcommands may dogfood modified wrappers

* fix(pr): hermetic dev-wrapper test fixture and type narrowing
2026-07-19 22:58:15 -07:00
Peter Steinberger
bdf71d7d98 refactor(apple): unify offline client databases (#111598)
* refactor(apple): unify offline client databases

* refactor(apple): remove dead cache APIs

* fix(apple): satisfy native storage gates

* fix(apple): sync generated localization catalog

* Revert "fix(apple): sync generated localization catalog"

This reverts commit d0f5e7b749.

* fix(i18n): keep source validation pre-merge

* test(macos): isolate flaky suite state

* test(macos): isolate log locator on main actor
2026-07-19 22:14:12 -07:00
Peter Steinberger
8f9e42f2a9 fix(cli): report honest SQLite store labels and consistent build SHA in help (#111659) 2026-07-19 22:07:44 -07:00
Peter Steinberger
3564c1c795 fix(test): bound Matrix test process memory (#111607)
* test: bound Matrix test process memory

* test: align Matrix runner mock contract
2026-07-19 20:04:14 -07:00
Peter Steinberger
e0b1a39d2a improve(i18n): generate native locales after merge (#111557)
* ci(i18n): move native locale generation post-merge

* fix(i18n): allow generated Android companions
2026-07-19 15:42:41 -07:00
Peter Steinberger
50114c5163 fix(test): recognize CI env aliases (#111521) 2026-07-19 12:44:18 -07:00
Peter Steinberger
5ec3b2dab4 fix(install): isolate source postinstall state (#111514) 2026-07-19 12:14:21 -07:00
Peter Steinberger
c7e7ac2728 refactor: remove expired plugin compatibility surfaces (#111451)
* docs(secrets): remove retired web credential paths

* refactor(web): remove retired provider compatibility paths

* refactor(providers): delete retired compatibility routes

* refactor(secrets): remove retired credential aliases

* refactor(plugin-sdk): delete retired compatibility surfaces

* docs(plugin-sdk): remove retired migration guidance

* chore(plugin-sdk): refresh rebased surface budgets

* chore(plugin-sdk): refresh API removal baseline

* refactor(compat): migrate retired internal callers

* chore(plugin-sdk): refresh current-main baselines

* test(config): migrate plugin-owned secret assertions

* test(gateway): narrow plugin secret refs

* fix(plugin-sdk): preserve private boundary type identity

* chore(compat): remove stale sweep references

* chore(lint): lower max-lines budget

* refactor(secrets): remove unused web helper

* build(plugin-sdk): drop removed compat entries

* chore(plugin-sdk): refresh rebased API baseline

* chore(plugin-sdk): use Linux API baseline hash

* fix(plugin-sdk): preserve private bundled build entries

* fix(plugin-sdk): package private runtime facades

* fix(plugins): preserve external credential contracts
2026-07-19 11:04:48 -07:00
Peter Steinberger
7aedca21b2 test(release): align built-in timing proofs (#111483) 2026-07-19 09:42:16 -07:00
Peter Steinberger
87fbc19fe3 fix: complete lint toolchain reuse in worktrees (#111467)
* fix(scripts): complete worktree lint toolchain

* fix(scripts): prepare complete lint pipeline
2026-07-19 08:58:43 -07:00
Peter Steinberger
ca3a1873a6 fix(test): make broad shard execution deterministic (#111416)
* fix(test): harden broad shard execution

* test: allow broad-profile contention

* style(telegram): remove redundant chat id cast

* style(test): preserve setup test spacing
2026-07-19 08:39:16 -07:00
Peter Steinberger
1f507162ee fix(ci): validate sticky importer restores (#111444) 2026-07-19 07:57:46 -07:00
Peter Steinberger
783a5d21cf refactor(config): purge numeric tuning knobs behind built-in defaults (#111382) 2026-07-19 07:35:45 -07:00