Commit Graph

4640 Commits

Author SHA1 Message Date
Peter Steinberger
3e67671d92 fix(e2e): apply default service identity per flow (#116265) 2026-07-30 00:00:14 -07:00
Peter Steinberger
62cbbcc800 fix(e2e): align service account state (#116254) 2026-07-29 23:00:16 -07:00
Vincent Koc
16baaff90f fix(e2e): align doctor switch with service ownership (#116209) 2026-07-30 12:31:39 +08:00
Peter Steinberger
4430f8ecfd fix(e2e): use account home for daemon switch (#116217) 2026-07-29 21:06:38 -07:00
Peter Steinberger
9c3503a443 fix(e2e): use default state for daemon switch (#116190) 2026-07-29 20:02:19 -07:00
Peter Steinberger
5a3c3b3f4f fix(ci): explicitly serialize hosted Swift tests (#116167) 2026-07-29 18:55:37 -07:00
Vincent Koc
ffa99ca81d fix(docker): validate timezone in runtime image (#116153) 2026-07-30 09:19:01 +08:00
Vincent Koc
1065c1d697 fix(ui): identify source builds in settings footer (#116134)
* fix(ui): identify source builds in settings footer

* fix(release): classify all official Control UI builds
2026-07-30 08:58:34 +08:00
Peter Steinberger
1165be39ff ci: serialize hosted macOS Swift tests (#116137) 2026-07-29 17:40:41 -07:00
xingzhou
b5c0878777 fix(build): bound bundled plugin asset generators (#111366)
Fail build and copy generators with ETIMEDOUT after 600000ms and terminate the complete managed process tree. Keep the timeout policy in the bundled-assets caller while preserving the shared helper for distinct callers such as #111349.

Co-authored-by: Vincent Koc <vincentkoc@ieee.org>
2026-07-30 04:56:21 +08:00
Jason (Json)
3f6f172873 fix(build): bound declaration memory use (#116021) 2026-07-29 13:25:47 -06:00
RileyJJY
34b72d1fce fix(scripts): bound dependency pin git lookups (#110570)
* fix(scripts): bound dependency pin git lookups

* fix(scripts): address dependency pin review

* Update dependency pin helper types

* fix(scripts): terminate stalled dependency pin Git commands

Bound both dependency-pin Git subprocesses and terminate SIGTERM-resistant children. Preserve sparse-index reads, Windows-native Git, exact timeout errors, and script declaration contracts.

Co-authored-by: RileyJJY <0668000974@xydigit.com>

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-29 13:11:23 -04:00
Peter Steinberger
dc60a9442d feat(talk): support GPT-Live over gateway relay (#115831)
* feat(talk): add GPT-Live gateway relay peer

* fix(talk): ignore duplicate GPT-Live sideband audio

* fix(openai): harden GPT-Live relay startup

* fix(deps): replace vulnerable werift ip helper

* fix(deps): scope werift ip override version

* fix(openai): normalize relay startup errors

* test(ci): register GPT-Live gateway live shard

* fix(talk): tighten GPT-Live relay readiness

* fix(talk): keep relay override helper private

* fix(talk): resolve relay readiness with launch model

* fix(openai): preserve GPT-Live media clock

* fix(talk): align GPT-Live relay readiness and framing

* fix(openai): expire pending GPT-Live reservations

* fix(openai): harden GPT-Live delegation audio

* style(openai): satisfy RTP reorder lint
2026-07-29 12:54:23 -04:00
wings1029
a4aaa1cd74 fix(scripts): keep cross-os command output tails UTF-8 safe (#109152)
* fix(scripts): keep cross-os command output tails UTF-8 safe

* fix(scripts): avoid possibly-undefined buffer index in cross-os UTF-8 tail skip

Buffer bracket indexing returns number | undefined under strict
TypeScript. Use .at() with an explicit undefined guard to satisfy
check-test-types.

* fix: add curly braces to single-line if statements (lint)

ESLint curly rule requires { } around all if/while/for bodies.

* fix(scripts): preserve streamed UTF-8 command output tails

Co-authored-by: 陈志强0668000989 <chen.zhiqiang1@xydigit.com>

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-29 12:51:13 -04:00
Peter Steinberger
d16e33e08e fix: restore trustworthy end-to-end QA and cross-channel delivery (#115404)
* fix(qa): repair verified end-to-end and channel regressions

* fix(gateway): make interrupted restart recovery lifecycle-safe

* test(heartbeat): target the canonical recovery session store

* fix(gateway): prioritize durable restart recovery before heartbeat

* fix(qa): preserve safe restart recovery and channel expiry

* fix(qa): fail closed and fence restart recovery

* test(agents): isolate restart recovery timing

* test(agents): prove actual restart retry timing

* fix(qa): report incompatible profile scenarios

* fix(scripts): resolve symlinked docker scheduler entrypoints

* fix(qa): require fresh native test evidence

* fix(heartbeat): fence active restart recovery delivery

* fix(gateway): consume untargeted restart acknowledgements

* fix(qa): satisfy exhaustive hosted validation gates

* fix(agents): fence stopped restart recovery dispatch

* style(agents): format restart recovery lifecycle regression

* test(gateway): isolate context prewarm sidecar lifecycle

* test(qa): make scenario process timeout cleanup deterministic

* fix(qa): stamp synthetic gateway configs with current version

* fix(openai): preserve vision capabilities in stale model catalogs

* test(qa): align profile channel rejection with current main

* fix(openai): forward supported moderation for image edits

* fix: restore latest-main CI and image edit documentation

* fix(qa): retain relocated code-mode evidence validation

* fix(openai): expose GPT-5.4 vision in static catalog

* fix(pricing): honor explicit model cost overrides

* test(pricing): keep isolated provider regressions deterministic

* fix(openai): inherit transport for discovered static models

* fix(gateway): honor agent-owned static image capabilities

* test(gateway): preserve prepared-snapshot attachment races

* test(gateway): isolate subagent persistence failure injection

* test(gateway): exercise concurrent voice replay admission

* fix(gateway): restore stale model image capabilities

* fix(agents): publish configured model vision capabilities

* fix(agents): isolate detached media transcript ownership

* test(agents): preserve generic transcript lock regression

* fix(gateway): require proven static model route identity

* fix(qa): accept bounded full-size generated image attachments

* fix(qa): require fresh script producer evidence

* test(qa): prove native E2E scenario execution
2026-07-29 12:45:27 -04:00
Peter Steinberger
5bfc65d7f4 refactor: remove 3,543 lines of redundant runtime and tests (#115961)
* refactor: remove 3,543 lines of redundant runtime and tests

* refactor: ratchet production environment variable budget
2026-07-29 11:43:41 -04:00
Peter Steinberger
fde4658bf6 fix(ui): recover sessions and dashboards after prolonged outages (#115654)
* fix(ui): recover long-running sessions and dashboards

* fix(ui): expose browser-safe gateway timers

* refactor(ui): keep browser timer surface minimal

* refactor(gateway): extract pending request state

* fix(ci): refresh browser runtime and format baseline

* fix(ci): exclude generated plugin outputs from targeted lint

* fix(ui): bound long-running connection and pane lifecycles

* refactor(ui): split long-running lifecycle regression coverage

* fix(ui): bound long-running media and lint ownership

* fix(security): preserve explicit workspace disable denylist

* fix(ci): preserve plugin manifest fallback lint
2026-07-29 10:09:51 -04:00
Vincent Koc
7e08953401 Merge pull request #115839 from openclaw/refactor/status-summary-owner
refactor(status): own summary preparation
2026-07-29 22:07:31 +08:00
wings1029
796ee27b3a fix(scripts): keep format-docs output tails UTF-8 safe (#110825)
* fix(scripts): keep format-docs output tails UTF-8 safe

When formatter (oxfmt) error output exceeds the 16 KiB tail cap and the
retained byte window starts inside a multibyte UTF-8 character, the
diagnostic tail would begin with a replacement character (�).

Add a decodeUtf8Tail helper that skips leading UTF-8 continuation bytes
before decoding the byte suffix, matching the existing pattern in
scripts/run-additional-boundary-checks.mjs (#109167).

Keep the existing 16 KiB cap and ASCII behavior unchanged.

* refactor(scripts): share UTF-8-safe output tails

Co-authored-by: 陈志强0668000989 <chen.zhiqiang1@xydigit.com>

* test(scripts): prove real formatter UTF-8 failures

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-29 08:29:24 -04:00
Peter Steinberger
5de970c1cc refactor: correct SDK compatibility removal metadata (#115862)
* refactor(plugin-sdk): correct compat removal metadata

* test(plugins): align boundary report compat counts
2026-07-29 08:18:52 -04:00
Vincent Koc
38abf500ba fix(update): stabilize cross-version dev upgrades (#115651)
* fix(e2e): stabilize cross-version Parallels upgrades

* fix(e2e): avoid inline macOS guest probes

* fix(e2e): detach Windows dev updates

* fix(e2e): detach macOS guest updates with Node

* fix(e2e): initialize skipped upgrade config

* fix(update): use partial clone for dev checkout

* fix(update): keep Windows dev checkouts clean

* fix(e2e): pin Parallels dev update targets

* fix(e2e): own Parallels gateway restarts

* fix(e2e): verify pinned Parallels checkouts

* fix(e2e): forward Parallels update budgets

* fix(e2e): use canonical provider auth choices

* chore: leave changelog to release automation

* test(ui): stabilize route waits on loaded runners
2026-07-29 19:52:34 +08:00
qingminlong
ba26595aaa fix(e2e): bound Docker stats sample lines (#109262)
* fix(e2e): bound Docker stats sample lines

* fix(e2e): format Docker stats line cap proof

* fix docker stats CRLF line cap

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-29 07:30:29 -04:00
loong
7bdd1f646b fix(memory-host-sdk): resolve stable execPath for worker fork to survive Homebrew Node upgrades (#99318)
* fix(memory): survive Homebrew Node upgrades

Co-authored-by: 袁龙辉0668001277 <yuan.longhui@xydigit.com>

* test(whatsapp): isolate last-route coverage

* fix(deepinfra): preserve offline model compatibility

* test(memory): isolate migration cleanup lifecycle

* test: stabilize aggregate extension gates

* ci: retrigger pull request workflow

* test: preserve inherited Node options

* test(cli): tolerate cold hosted startup

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-29 06:49:02 -04:00
Vincent Koc
fa16b0fcf0 refactor(status): own summary preparation 2026-07-29 18:08:41 +08:00
Peter Steinberger
7a4649ceb3 feat(ui): first-class chat audio/video player cards (#115764)
* feat(ui): add chat media player cards

* fix(ui): harden chat media attachment lifecycle

* fix(ui): finalize chat media fallbacks

* fix(ui): rely on video playback errors

* fix(ui): guard deferred media resume

* test(ui): align local media assertions with player cards

* docs(ui): note cross-origin download fallback

* fix(ui): keep player helpers module-private

* test(ui): wait for encoded video attachment

* test(ui): wait for hidden audio media element

* test(scripts): give oxlint shard-kill test headroom under CI load
2026-07-29 05:32:43 -04:00
Hannes Rudolph
6dc55fa65e fix(plugins): recover user turns with scoped reply hooks (#114836)
Allow before_agent_reply plugins to declare host-enforced trigger eligibility so scheduled-only hooks do not block interrupted user-turn recovery. Keep omitted and malformed scopes fail-closed, scope both memory-core maintenance hooks, and cover three runner reload cycles through the public registration contract.

Refs: #111442

Source: #114836

Co-authored-by: Vincent Koc <vincentkoc@ieee.org>
2026-07-29 17:22:16 +08:00
Peter Steinberger
4232126bba chore: update dependencies across workspace (#115677)
* chore(deps): update dependencies

* fix(deps): restore CI compatibility
2026-07-29 05:16:42 -04:00
Dallin Romney
0723c68b57 refactor(qa): remove execution sharding (#115787) 2026-07-29 17:06:57 +08:00
Peter Steinberger
302f262e6b refactor: deduplicate extension normalization primitives (#115650)
* refactor(plugins): reuse SDK normalization primitives

* fix(ci): repair code-mode matrix checks

* fix(ci): satisfy code-mode matrix gates

* fix(ci): use matrix evidence export

* fix(ci): validate matrix evidence artifact
2026-07-29 04:10:06 -04:00
Peter Steinberger
8ad4e858fd fix(ci): repair red main — align QA evidence timeout guard, drop stale code-mode symbols
The qa-profile-evidence timeout was deliberately raised to 90m (28e09a04d3)
without its workflow guard; code-mode-repair.ts grew a local copy of
CodeModeFailurePhase stranding the runtime re-export, and the matrix test
kept an unused validateQaEvidenceSummaryJson import.
2026-07-29 00:48:09 -07:00
Peter Steinberger
6ec84bc3bd fix(models): expose custom max and ultra reasoning tiers (#115690)
* fix(models): honor custom advanced reasoning levels

* fix(ci): restore code mode matrix boundaries
2026-07-29 03:33:30 -04:00
Vincent Koc
e31dc59250 fix(ui): clarify model picker state labels (#115632) 2026-07-29 15:25:47 +08:00
Dallin Romney
f027d7bcf6 refactor(qa): make Matrix sharding execution-owned (#115589)
* refactor(qa): make sharding execution-owned

* test(qa): simplify transport selection coverage
2026-07-29 15:23:37 +08:00
Vincent Koc
9daa60961c fix(agents): serialize sandbox provisioning (#115645)
* fix(agents): serialize sandbox provisioning

* test(docker): add sandbox browser sidecar e2e

* fix(ci): register sandbox browser e2e entrypoint

* fix(ci): restore code mode matrix checks
2026-07-29 14:50:15 +08:00
Peter Steinberger
ddd0b48673 refactor: remove 3,527 lines of runtime and test duplication (#115626)
* refactor: remove obsolete runtime and test duplication

* test: preserve typed cron and realtime fixtures
2026-07-29 02:21:20 -04:00
Vincent Koc
1c36054494 feat(agents): add code mode model acceptance matrix (#115305)
* feat(agents): add code mode model acceptance matrix

* fix(qa): emit canonical Code Mode matrix evidence

* fix(qa): reserve code mode matrix output safely

* fix(qa): require fresh matrix builds

* fix(qa): protect matrix evidence paths
2026-07-29 14:12:20 +08:00
Dallin Romney
2fa91f48d0 fix(ci): validate frozen release candidates (#115605)
* fix(ci): support historical i18n targets

* test(ci): cover historical i18n verification
2026-07-29 13:43:39 +08:00
Dallin Romney
aca7b59526 refactor: make Telegram release workflow tests behavioral (#114023)
* refactor: make Telegram release workflow tests behavioral

* test: fix Telegram release workflow CI
2026-07-29 13:23:35 +08:00
Eugene Harold Krabs
0079fe80bb fix(plugin-npm): align bundled lock install strategy (#114620)
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-29 00:20:32 -04:00
Vincent Koc
4896416521 fix(android): preserve generated lint suppressions (#115501) 2026-07-29 11:37:40 +08:00
mikasa
887b37cf80 fix(ci): bound Mantis Discord fetches (#110851)
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-28 23:36:27 -04:00
Dallin Romney
0d8ee3a1c5 fix(qa): validate profile evidence against scenario inventory (#115446) 2026-07-29 11:29:56 +08:00
Patrick Erichsen
0972790951 fix(agents): preserve onboarding probe session manager (#115452)
* fix(agents): preserve caller-owned session manager

* test(onboard): cover guided inference composition
2026-07-28 17:50:11 -07:00
Peter Steinberger
bd33a1c45f fix(ci): simplify fail-closed workflow revival (#115420) 2026-07-28 17:47:48 -04:00
Christian Lallo
811444d6db fix(memory-core): avoid cubic MMR similarity rescans (#113359)
* fix(memory): avoid cubic MMR similarity rescans

* style(memory-core): oxfmt mmr.test.ts

* test(memory-core): allow packed CI integration tests

* fix(ci): serialize targeted memory-core tests

* fix(ci): pin agentic cli worker count

---------

Co-authored-by: Vincent Koc <vincentkoc@ieee.org>
2026-07-29 03:53:43 +08:00
Peter Steinberger
388bcc43a1 fix: make Code Mode reliable across gateway and provider lifecycles (#115379)
* fix(code-mode): dispose suspended runs and propagate cancellation

* fix(code-mode): preserve request-visible provider tools

* test(code-mode): require real packaged gateway execution

* fix(gateway): load code mode cleanup only during shutdown
2026-07-28 15:21:54 -04:00
Peter Steinberger
f78ba09120 feat(talk): support GPT-Live realtime voice over ChatGPT OAuth (#115226)
* feat(gateway): share the canonical browser-origin policy with plugins

Export resolveAcceptedBrowserOrigin through openclaw/plugin-sdk/webhook-request-guards
so browser-facing plugin routes reuse the Gateway's real origin contract instead of a
narrow allowedOrigins array check. Private LAN/Tailnet Control UI loads and the
Host-header fallback were previously rejected with 403 by plugin offer routes while the
Control UI itself worked.

Moves the loopback/forwarded-header helpers to net.ts (re-exported from auth.ts) so the
guard can delegate without importing gateway auth, and migrates the Codex realtime
broker onto the shared seam.

* feat(talk): let providers own agent delegation for realtime voice

Adds an optional runAgentConsult callback to the browser-session create request and
injects the existing embedded consult runtime from talk-client, bound to the same agent
and session key the GA tool path uses. Providers whose realtime protocol delegates work
through their own control channel (rather than GA function calls) can now reach the
OpenClaw agent without a client round-trip.

Threads the effective per-session model into browser-session capability resolution so a
request-level model override selects the right capability set, and propagates a caller
abort signal into consultRealtimeVoiceAgent so a superseded delegation stops its run.

* feat(openai): support GPT-Live realtime voice over ChatGPT OAuth

Implements OpenAI's quicksilver/frameless session natively for Talk browser sessions.
The Gateway creates the WebRTC call (multipart sdp+session to https://api.openai.com/v1/live)
and owns the sideband control socket, so the browser never holds upstream credentials;
delegation.created events run through the OpenClaw agent and stream back as speakable
context appends.

Verified end-to-end on 2026-07-28 against a ChatGPT Pro OAuth profile: call create 201
with an rtc_* id and answer SDP, sideband session.started, session.close teardown.
ChatGPT OAuth is preferred over a Platform API key because /v1/live access for platform
keys is waitlist-gated; the legacy chatgpt.com backend route returns 403 for every model
and protocol version and is not used.

Accepted models are gpt-live-1-codex and gpt-live-1-boulder-alpha; the voice allowlist is
the ten values the route actually accepts, since an invalid voice is rejected at call
creation and cannot be repaired afterwards (session.update reports immutable_field_update).

* docs: document GPT-Live Talk support and its route gotchas

Records the working route and auth, the accepted models and voices, the browser-only
scope, and the two traps that cost the most time: the chatgpt.com backend route returns
403 Voice session access denied for every model, and that same 403 is also what an
invalid voice returns, so it must not be read as an account entitlement block.

* fix(openai): resolve GPT-Live CI failures

* refactor(openai): own zod runtime dependency

* fix(openai): satisfy lint and live-shard gates for GPT-Live

Types the retry-delay finish callback as Error so the rejection reason is provably an
Error at the call site; the abort path already normalized a non-Error AbortSignal reason,
but the unknown parameter type hid that from static analysis.

Registers the new GPT-Live live test in the native-live-extensions-openai shard
expectation. The shard selector already picked the file up from the real tree; only the
hardcoded list in the tooling test lagged.

* fix(openai): clean up post-rebase capability resolver

* fix(openai): preserve GPT-Live delegation fragments

* fix(openai): close GPT-Live sideband handoff race

* fix(openai): accept UUID GPT-Live call ids

* style: apply oxfmt to GPT-Live sources and Talk docs

* style: format Talk docs after rebase

* fix(openai): keep GPT-Live transcript context across ignored delegations
2026-07-28 15:05:55 -04:00
Peter Steinberger
723423ffe7 fix(ci): stop reviving superseded pull request workflows (#115378)
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-28 14:56:19 -04:00
Vincent Koc
77751a224d fix: stabilize package-to-dev release upgrades (#115292)
* origin/test/parallels-main-3224005-host:
  docs(changelog): cover Windows prerequisite readiness
  fix(e2e): preserve Windows installer reboot results
  docs(changelog): include Windows stop safety gate
  fix(e2e): force Windows smoke gateway stop
  docs(changelog): note Parallels and update fixes
  fix(update): finalize install switches in fresh process
  fix(e2e): harden Parallels guest preparation
2026-07-29 02:52:44 +08:00
Peter Steinberger
a8fb4872fb refactor: harden shell completion and shard Control UI E2E (#115332)
* refactor: harden CLI completion and shard Control UI E2E

* fix: keep completion command-tree result private

* fix: remove unused browser test helper exports

* test: cover sharded Control UI workflow contract
2026-07-28 14:35:27 -04:00