Commit Graph

5853 Commits

Author SHA1 Message Date
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
Patrick Erichsen 45270a02c8 chore(autoreview): centralize secret scanning (#112036)
* chore(autoreview): centralize secret scanning

* chore(autoreview): remove generated caches

* chore(autoreview): remove generated caches
2026-07-20 22:59:20 -07: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
Jason (Json) 8968e955f7 fix(plugins): restore external runtime imports (#112021)
* fix(plugins): restore external runtime imports

* fix(plugins): support synthetic runtime builds

* test(plugins): type synthetic runtime plan
2026-07-20 21:45:23 -06:00
Drew Meyer 51b31fc131 fix(codex): timed-out native hooks exhaust memory (#109446)
* fix(codex): prevent native hook relay orphans

* test(codex): prove native relay timeout ownership

* fix(codex): keep source hook relay pid stable

* test: auto-clean compile-cache fixtures

Co-authored-by: Drew Meyer <dr00-eth@users.noreply.github.com>

---------

Co-authored-by: Drew Meyer <dr00-eth@users.noreply.github.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-20 20:07:11 -07: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
Josh Lehman a2a0e932c8 fix: preserve transcript cursors across embedded turns (#111949)
* fix(agents): preserve transcript generation on flush (clawdbot-85c)

* fix(agents): preserve SQLite transcript parents (clawdbot-85c.5)

* test(agents): prove cursor continuity through Gateway (clawdbot-85c.7)
2026-07-20 15:41:31 -07:00
Jason (Json) e2bb04328f fix(release): accept large tarball entry lists (#111672) 2026-07-20 13:21:27 -06:00
Peter Steinberger ba3711bb82 feat(linux): render widgets in Quick Chat (#111933) 2026-07-20 11:56:03 -07: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 d0f5e7b74932e98ccc5f1984840e8f9d545edc2d.

* 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 3247a56d15 fix(ui): prevent cross-file mock leakage in Control UI tests (#111554)
* test(ui): stop shared mock registry leakage

* ci: add three-worker UI leakage canary
2026-07-19 15:38:50 -07:00
Peter Steinberger 5fcf7e75de test: clear plugin runtimes between shared files (#111556) 2026-07-19 15:28:46 -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 163a6c6e16 fix(agents): declare visible-session constraints upfront in sessions_spawn (#111502) 2026-07-19 11:42:05 -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
Peter Steinberger d9c9eeb8cd fix(ci): resolve manual protocol baseline 2026-07-19 14:53:32 +01:00
Peter Steinberger be831088e9 fix: local lint works in dependency-less worktrees (#111393)
* fix(scripts): resolve worktree oxlint toolchain

* fix(scripts): declare worktree tool resolver
2026-07-19 06:23:36 -07:00
Peter Steinberger 6a8f16a69e chore(pr): reuse green hosted CI from patch-identical pre-rebase heads (#111335)
* chore(pr): reuse green hosted CI from patch-identical pre-rebase heads (24h window)

* fix(pr): type-safe fixtures and lint cleanup for hosted-CI reuse tests
2026-07-19 05:34:48 -07:00
Peter Steinberger 06f5f73e47 refactor: own model discovery by runtime lifecycle (#111173)
* refactor(agents): prepare model runtime catalogs

Build lifecycle-owned model and auth snapshots, carry prepared stores into hot agent paths, and serialize config/auth publication.

Credits @zeroaltitude's #90741 investigation and benchmark approach.

* refactor: finish lifecycle-owned model discovery

* fix: align prepared model catalog contracts

* test: align lifecycle catalog mocks

* test: fix prepared catalog type fixtures

* refactor: split prepared model runtime ownership

* fix: import prepared runtime replacement gate type

* test: split media runtime coverage

* test: preserve image auth fixture key types

* test: isolate lifecycle gate fixtures

* chore: keep release changelog owned

* refactor: finish prepared model catalog migration

* test: keep catalog review fixtures scanner-safe

* refactor: preserve lifecycle model runtime ownership

* fix: close prepared runtime lifecycle races

* fix: preserve compaction workspace fallback

* chore: document btw generation rebinding

* fix: preserve prepared generation boundaries

* fix: keep model-list discovery flag explicit

* fix: serialize standalone model runtime activation

* refactor: migrate subagent model catalog lookup

* refactor: clarify doctor catalog lookup seam

* chore: refresh plugin sdk api baseline

* test: migrate swarm catalog dependency

* refactor(telegram): rename runtime catalog seam

* refactor: extract model-aware tool context

* test(models): isolate lifecycle catalog fixtures

* refactor(agents): avoid btw parameter rebinding

* fix(net-policy): align root ipaddr dependency

* fix(build): keep net policy dependency bundled

* fix(deadcode): document net policy compile dependency
2026-07-19 05:30:54 -07:00
Peter Steinberger ef91ce5712 feat: keep reset session history searchable (#111194)
* feat(sessions): retain reset history in sqlite with physical disk budget

* fix(sessions): satisfy test-types, knip export scan, and docs map

* fix(sessions): align behavioral suites and flip proof with retained history, route-aware cleanup plans
2026-07-19 03:38:51 -07:00