Commit Graph

964 Commits

Author SHA1 Message Date
Peter Steinberger b4a26783f7 refactor(test): consolidate duplicated requireRecord and provider HTTP mock helpers (#119982)
* refactor(test): consolidate duplicated test helpers

* test: remove stale record guard import

* fix(test): remove orphaned record guards

* refactor(test): keep record requirement messages exhaustively typed

* fix(test): keep packages/ai record guard package-local
2026-08-06 14:48:01 -07:00
Peter Steinberger d6233c29b9 fix(browser): preserve locale, timezone, and device overrides (#119695)
* fix(browser): make device emulation transitions atomic

* test(browser): verify device presets in packaged profile

* fix(browser): retain page emulation overrides
2026-08-05 12:29:26 -07:00
Peter Steinberger 21b6478c6f fix(browser): honor explicit navigation timeouts across browser drivers (#119654)
* fix(browser): propagate bounded navigation timeouts end to end

* fix(browser): share shipped navigation limits across all drivers
2026-08-05 09:44:27 -07:00
Peter Steinberger b3f3da1688 fix(browser): visibly report failed pairing and tab-sharing actions (#119526)
* fix(browser): surface extension action errors exactly once

* fix(browser): reuse typed extension error response handler

* fix(browser): settle tab sharing only after consent reconciliation

* fix(browser): retain popup action errors across status refreshes

* fix(browser): preserve popup failures across state transitions
2026-08-05 07:22:51 -07:00
Peter Steinberger 767dc7019d refactor(browser): consolidate browser CLI and normalization helpers (#119432) 2026-08-04 20:26:21 -07:00
Peter Steinberger 2b3351a743 fix(browser): protect private observation media and Canvas trust boundaries (#118775)
* fix(browser): protect observation screenshots and Canvas trust boundaries

* test(canvas): preserve actual image helper result types
2026-08-03 11:33:27 -07:00
Peter Steinberger c70863a5e5 fix(browser): wrap page-controlled action results (#118691) 2026-08-03 07:37:04 -07:00
Vincent Koc a2f3c01068 fix(browser): wake page shares when heartbeat is disabled (#116790)
* fix(browser): wake page shares with heartbeat disabled

* fix(browser): preserve page-share session agent
2026-08-03 12:30:36 +08:00
Vincent Koc 9689d55c12 fix(browser): allow page extraction in tab-bound runs (#116779)
* fix(browser): allow extraction in tab-bound runs

* test(browser): tighten tab-bound extraction coverage

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-08-03 12:25:59 +08:00
Peter Steinberger 2dc8553247 refactor(browser): consolidate profile configuration fixtures (#118438)
* test(browser): consolidate profile configuration fixtures

* test(browser): centralize synthetic auth fixtures

* test(browser): preserve credential fixtures outside matrices
2026-08-02 21:15:53 -07:00
Vincent Koc 27f5691d29 fix(browser): keep Tab Copilot working after extension reload (#116784)
* fix(browser): derive unique copilot session labels

* test(browser): harden copilot reload proof

* test(browser): keep e2e expect dependency type-only

* fix(browser): repair type-only e2e helper

* chore(release): remove PR changelog entry
2026-08-03 12:09:06 +08:00
Peter Steinberger e9d88696b5 feat(cron): add webhook SSRF policy (#118237) (#118286) 2026-08-02 17:02:20 -07:00
Peter Steinberger b93fc7e8f6 test(browser): consolidate navigation security fixtures (#118240) 2026-08-02 16:32:33 -07:00
Peter Steinberger c203baea97 test(browser): consolidate upload path fixtures (#118283) 2026-08-02 16:13:22 -07:00
Peter Steinberger 9fa28928e5 refactor(browser): deduplicate profile hot-reload fixtures (#118220) 2026-08-02 16:10:26 -07:00
Peter Steinberger 937d13193b test(browser): consolidate CDP fixtures (#118239) 2026-08-02 16:08:44 -07:00
Peter Steinberger fb7cb832cc feat(browser): redesign extension popup with settings panel (#118095)
* feat(browser): redesign extension popup with settings panel

* fix(browser): hide unpair action while popup is unpaired

* test(browser): compare realpaths when resolving loaded extension id
2026-08-02 11:50:06 -07:00
Peter Steinberger f599ff520d feat(browser): relay CDP compat for Puppeteer clients (chrome-devtools-mcp) (#117915)
* feat(browser): relay CDP compat for Puppeteer clients

Answer Target.getBrowserContexts with the always-empty context list so
puppeteer.connect() (chrome-devtools-mcp) can drive the paired Chrome
through the extension relay without the remote-debugging prompt. Serve
DevTools-style /json/list descriptors (id + type), which also makes the
HTTP tab-list fallback see extension-profile tabs, and add
`openclaw browser extension cdp` to print the relay endpoint and auth
header for external CDP clients.

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

* fix(browser): avoid map-spread in relay target descriptors

oxc(no-map-spread): build the /json/list descriptor object explicitly
instead of spreading RelayTabInfo inside map().

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

---------

Co-authored-by: Peter Steinberger <steipete@mac-studio-sf2.local>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-08-02 01:59:44 -07:00
Peter Steinberger 164c3f2cb1 test(browser): consolidate navigation guard fixtures (#117638) 2026-08-01 14:33:21 -07:00
Omar Shahine 2b3009f718 fix(gateway): preserve node invoke dispatch provenance (#117139)
* fix(gateway): preserve node invoke dispatch provenance

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 6381c461-11aa-4700-8648-4da1393e1c59

* fix(gateway): preserve timeout precedence

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 6381c461-11aa-4700-8648-4da1393e1c59

* fix(gateway): mark wake-path disconnect as not dispatched

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 6381c461-11aa-4700-8648-4da1393e1c59

* fix(gateway): mark plugin dispatch after send

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 6381c461-11aa-4700-8648-4da1393e1c59

* build(browser): regenerate Copilot runtime

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 6381c461-11aa-4700-8648-4da1393e1c59

---------

Co-authored-by: Omar Shahine <10343873+omarshahine@users.noreply.github.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 6381c461-11aa-4700-8648-4da1393e1c59
2026-08-01 21:22:51 +00:00
Vincent Koc 263741b1f0 fix(ci): align release validation fixtures (#117494)
* fix(release): align beta 6 e2e fixtures

* fix(doctor): preserve missing state startup signal

* test(release): align beta e2e contracts

* test(agents): use canonical empty auth store

* test(agents): isolate prompt cooldown scheduling

* test(release): align main validation fixtures

* test(release): accept Code Mode plugin tool evidence

* fix(test): repair release validation checks

* test(cron): assert structured session targets
2026-08-02 00:39:36 +08:00
Peter Steinberger 568ea29d2e refactor(plugins): inherit shared package boundary settings (#117474) 2026-08-01 09:11:09 -07:00
Vincent Koc f5a8cb02ea test(release): repair full validation regressions (#116931)
* test(discord): mock thread delete listener

* test(qa): expect blocked update evidence

* test(telegram): preserve recovered context body

* fix(test): configure kitchen-sink personality

* test(browser): expect canonical staged upload paths

* test(browser): canonicalize macOS download roots

* test(feishu): seed legacy session rows offline

* test(telegram): isolate message context session stores

* test(qqbot): expect canonical media paths

* test(anthropic): match canonical transcript paths

* test(qa): expect canonical session store keys

* test(gateway): isolate rewind media reads

* test(release): review plugin child spawns

* test(plugins): expect process-stable manifest metadata

* test(google): retire usage telemetry contracts
2026-08-01 15:42:50 +08:00
Peter Steinberger 433bb3f954 fix(cli): make commands, completion, and JSON output reliable (#116033)
* fix(cli): make commands, completion, and JSON output reliable

* fix(cli): reconcile completion coverage with current main

* test(cli): keep test routing stable across isolation lanes
2026-07-31 16:20:34 -07:00
Peter Steinberger 4645d4a487 fix(browser): unify node routing and honor configured pins (#117087) 2026-07-31 16:16:44 -07:00
Peter Steinberger 410c163328 fix(browser): preserve doctor JSON failure status (#116811)
* fix(browser): preserve doctor JSON exit status

* fix(browser): defer doctor failure exit

* test(browser): harden doctor JSON assertions
2026-07-31 05:08:22 -07:00
Vincent Koc 20e68e01df fix(gateway): sign device proofs with challenge time (#116679) 2026-07-31 16:45:53 +08:00
Peter Steinberger ba756a23ad fix(browser): return committed trace path (#116702) 2026-07-31 00:01:39 -07:00
Vincent Koc 8dd575f986 test(browser): remove dead config cases (#116631) 2026-07-31 10:57:55 +08:00
Vincent Koc 90a22b4f50 chore(test): run browser copilot E2E in CI (#116407)
* test(browser): run copilot E2E in CI

* test(browser): stabilize copilot E2E synchronization

* test(browser): wake extension workers deterministically

* test(ci): route browser copilot command changes
2026-07-30 23:20:34 +08:00
pash-openai e52354ea13 fix(build): pin typebox to a published release (#116333) 2026-07-30 09:58:51 +00:00
Shakker 052212dc97 chore: refresh browser gateway runtime (#116043) 2026-07-29 20:05:56 +01:00
Shakker ab3f52c367 fix: reset gateway event sequence on reconnect 2026-07-29 20:05:56 +01: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 9c45302800 fix(browser): stabilize atomic download staging (#115892)
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-29 21:05:41 +08:00
synth 151c549494 fix(browser): uploads fail when the browser runs on a remote node (#115291)
* fix(browser): resolve upload paths on the owning browser node, not the Gateway

When a browser session is proxied to a remote node, the upload action
previously ran resolveExistingUploadPaths on the Gateway, pinning paths
to a filesystem the node cannot see and rejecting node-local files. The
node-side /hooks/file-chooser route already re-resolves paths against
its own filesystem, so skip Gateway-local resolution whenever the
request is proxied and forward the requested paths as-is.

Fixes openclaw/openclaw#115251

* fix(browser): transfer uploads to remote browser nodes

* fix(browser): normalize upload abort errors

---------

Co-authored-by: Vincent Koc <vincentkoc@ieee.org>
2026-07-29 20:31:46 +08:00
sunlit-deng da8a2208d2 fix(browser): reject malformed proxy file base64 (#115045)
* fix(browser): reject malformed proxy file base64

* fix(browser): preserve empty proxy downloads

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-29 06:08:01 -04:00
Peter Steinberger 20668eed03 fix(memory): quarantine writes from tainted agent turns (#115818)
* feat(memory): taint writes after network tools

* fix(memory): keep provenance mutations recoverable

* fix(memory): roll back failed provenance writes

* fix(memory): serialize provenance mutations

* docs(memory): explain flush provenance boundary

* refactor(memory): share provenance mutation wrapper

* docs(memory): clarify flush provenance fallback

* fix(memory): canonicalize provenance paths
2026-07-29 06:02:06 -04:00
Peter Steinberger b0376d19bf fix(browser): abort cancelled CDP handshakes (#115805)
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-29 05:48:27 -04: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
Peter Steinberger 452abbaf8a fix(browser): release unread CDP response streams (#115675) 2026-07-29 04:11:35 -04: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 5157340862 fix(browser): avoid colliding extension relay ports (#115592) 2026-07-29 01:40:06 -04:00
Peter Steinberger ad36646ed1 fix(gateway): reconnect nodes after transient socket failures (#115539)
* fix(gateway): reconnect nodes after transient socket failures

* fix(browser): refresh bundled gateway reconnect runtime

* fix(gateway): preserve callback-owned reconnect state
2026-07-29 01:15:26 -04:00
Peter Steinberger 90fca5aadb fix(browser): cancel in-flight status probes (#115534) 2026-07-29 00:35:55 -04:00
Peter Steinberger d239a59d82 fix(ui): make Control UI ownership and permissions reliable (#115364)
* fix(ui): unify connection-owned gateway event dispatch

* fix(qa): keep hosted UI smoke evidence truthful

* fix(ui): make mobile navigation drawer an accessible modal

* refactor(ui): centralize settings search destinations

* fix(ui): own chat media resource lifecycles

* fix(ui): unify sidebar session scope ownership

* refactor(ui): remove obsolete navigation backdrop styles

* refactor(ui): isolate dashboard provider lease capabilities

* fix(ui): centralize gateway operator permissions

* style(ui): format gateway event regressions

* fix(ui): render live dashboard permissions immediately

* fix(ui): enforce approval grant authority

* fix(gateway): fence retired sockets after event gaps

* fix(ui): isolate sidebar gateway fixtures across shared workers

* test(ui): isolate singleton-sensitive browser suites

* fix(ui): retire stale catalog pagination on gateway reconnect

* fix(ui): restore drawer focus after native dialog dismissal

* fix(ui): seed drawer threads and preserve modal focus ownership

* fix(ui): isolate nested native drawer overlay lifecycle

* test(ui): prove isolated dashboard lease authorization

* fix(ui): bound settled managed image resources

* fix(ui): type native modal focus and shared test helper

* fix(ui): correct approval mock types and trim dead export

* fix(ui): keep settings section metadata private

* fix(qa): keep hosted coverage regression within lint limit

* refactor(ui): keep catalog presence in its session data owner

* fix(browser): regenerate bundled copilot runtime

* test(ui): split board lease authorization regressions

* fix(ui): snapshot gateway listener fanout without redundant spread

* fix(ui): bind chat media subscriptions to image lifetime

* fix(ui): extract overlay access lifecycle

* fix(ui): restore guarded media after Lit reconnection

* test(ui): localize board lease fixture title

* fix(ui): reuse system approval fixture labels

* test(ui): narrow managed media lifecycle source

* fix(ui): prevent retired board gateway clients from rolling back leases

* fix(ui): expose pairing to pairing-scoped operators

* fix(ui): preserve legacy device pairing access

* fix(ui): preserve responsive sidebar ownership

* fix(ui): preserve responsive navigation and prove media ownership

* fix(ui): retire revoked catalog and refresh pairing grants

* test(ui): align typed catalog fixtures with main
2026-07-28 16:42:05 -04:00
Peter Steinberger 2b8e6395b9 fix: prevent node gateway hangs and runaway local inference (#115248)
* fix(node): bound gateway wake, cancellation, and local inference

* refactor(gateway): extract bounded node invocation policies
2026-07-28 12:47:30 -04:00
Ayaan Zaidi a54e28e8e9 feat(browser): return inline page state after navigation (#114814)
navigate and act results that changed the page document now include the
loaded page's compact snapshot inline (honoring browser.snapshotDefaults
and standard caps/wrapping), removing the follow-up snapshot round-trip.
Snapshot execution moves to browser-tool.snapshot.ts to keep action
executors under the file size cap.
2026-07-28 20:42:57 +09:00
wahaha1223 4c2d06be2b fix(browser): reject startup when control ports are occupied (#109994)
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-28 06:01:02 -04:00
Vincent Koc 9d5bec8487 fix(deps): remediate tar and Hono advisories (#115029) 2026-07-28 16:48:04 +08:00