Peter Steinberger
bd6c6aaef2
refactor(ws): consolidate raw WebSocket payload decoding ( #121268 )
...
* refactor(ws): consolidate raw data conversion
* fix(scripts): keep gateway client source-loadable
* refactor(ws): share plugin frame decoding
2026-08-09 16:32:18 -07:00
Peter Steinberger
75a454469d
fix(browser): coalesce volatile tab cleanup ( #114507 )
2026-08-09 08:50:33 -07:00
Peter Steinberger
8616c0c374
refactor: finish shared test helper migrations ( #120996 )
...
* test: finish shared helper migrations
* test: fix helper migration CI
* style: fix test import ordering
* test(acpx): restore deferred void types
* test: fix helper migrations after rebase
2026-08-09 06:00:06 -07:00
Peter Steinberger
8362f74c99
feat(browser): add all-tabs extension access ( #120995 )
...
* feat(browser): add all-tabs extension access
* fix(browser): preserve cancel revocation during startup
* test(browser): align all-tabs Chromium fixtures
2026-08-09 03:15:54 -07:00
Peter Steinberger
a663063d4d
fix(browser): reclaim stalled extension relay connections ( #120806 )
2026-08-08 18:37:05 -07:00
wanyongstar
9c3e4ce431
fix(browser): bound batch action nesting depth in act request normalization ( #120274 )
...
* fix(browser): bound batch action nesting depth in act request normalization
normalizeActRequest recursed over batch nesting with no depth bound, so a
~1MB POST /act body with tens of thousands of nested batch levels parsed
fine and then crashed normalization with RangeError: Maximum call stack
size exceeded before the ACT_MAX_BATCH_ACTIONS count check could run,
surfacing an internal stack overflow as the 400 validation message.
Thread the existing ACT_MAX_BATCH_DEPTH limit through normalizeBatchAction/
normalizeActRequest and reject deeper nesting up front with a clear
'batch nesting exceeds maximum depth of 5' error, matching the bound the
Playwright executor already enforces at dispatch time.
* fix(browser): match batch depth executor boundary
Accept the six wrapper levels supported by the Playwright executor and reject the seventh during request normalization.
Co-authored-by: 万拥 0668000723 <wan.yong@xydigit.com >
---------
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-08-08 12:52:59 -07:00
Peter Steinberger
83900e4683
feat(browser): add relay authentication v2 ( #120526 )
...
* feat(browser): add relay authentication v2
* fix(browser): cap relay test WebSocket payload
* fix(browser): keep relay E2E inside extension boundary
* fix(browser): isolate relay admission and cleanup auth
* fix(browser): finish relay auth migration hardening
* fix(browser): keep preauth transport bounded through teardown
2026-08-08 05:48:24 -07:00
Peter Steinberger
947bca5608
fix(browser): harden extension relay authorization ( #120390 )
...
* fix(browser): harden extension relay authorization
* fix(browser): validate persisted relay pairing
2026-08-07 21:56:15 -07:00
Peter Steinberger
01281ad9f8
refactor(browser): remove model-backed page extraction ( #120101 )
...
* refactor(browser): remove model-backed extraction
* docs(browser): remove stale extract reference
2026-08-06 18:32:14 -07:00
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
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
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
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
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
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
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
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
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
90fca5aadb
fix(browser): cancel in-flight status probes ( #115534 )
2026-07-29 00:35:55 -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
Peter Steinberger
0d7fb8eb39
refactor(fs): adopt fs-safe 0.5 core primitives ( #113705 )
...
* refactor(fs): unify exclusive file publication
* fix(fs): fence stale lock reclamation
* refactor(fs): bound wiki scans and secret reads
* chore(fs): finalize fs-safe 0.5 compatibility
* fix(fs): preserve publication ownership and legacy mode
* fix(fs): fail closed on unverifiable lock owners
* fix(fs): preserve concurrent backup publications
* refactor(fs): preserve ambiguous backup outputs
* fix(fs): preserve mixed-version lock coordination
* refactor(file-transfer): adopt fs-safe archive extraction
* refactor(fs): add bounded walk and secret seams
* refactor(auth): replace proper-lockfile with fs-safe
* fix(fs): honor Windows mode override casing
* refactor(snapshot): adopt fs-safe publication
* refactor(memory-wiki): adopt prunable root walks
* refactor(fleet): adopt bounded archive restore
* fix(fs): preserve post-publication ownership receipts
* refactor(fs): harvest final fs-safe primitives
* style(fs): clean harvest lint
* chore(plugin-sdk): refresh move helper API baseline
* refactor(snapshot): adopt native Windows ACL facts
* refactor(fs): adopt hardened atomic outputs
* fix(fs): scope lock reentrancy to logical owners
* chore(config): lower env var count budget
* fix(deps): adopt published fs-safe 0.5.0
* fix(ci): align SDK surface ratchets
* fix(ci): regenerate SDK API baseline after rebase
* fix(fs): preserve owner-scoped file lock nesting
* fix(ci): refresh SDK API baseline for file locks
* fix(fs): separate SQLite and file lock reentrancy
* fix(imessage): bound pinned attachment reads
* fix(agents): narrow session-key lock options
* fix(fs): preserve fs-safe 0.5 compatibility contracts
* fix(windows): retain private SQLite directory owner
* refactor(sqlite): centralize exclusive coordinator
* refactor(snapshot): isolate Windows ACL policy
* fix(windows): retain snapshot ACL inspector
* chore(config): realign env budget after rebase
* test(agents): accept canonical sandbox escape error
* docs(changelog): defer fs-safe release note
2026-07-28 03:41:47 -04:00
Peter Steinberger
960b050add
refactor(extensions): remove orphaned shadow trial and retired config aliases ( #114709 )
...
* refactor(memory-core): remove orphaned shadow trials
* refactor(qqbot): migrate direct voice upload formats
Release note: QQBot configs using voiceDirectUploadFormats now migrate through openclaw doctor --fix to audioFormatPolicy.uploadDirectFormats at root and account scope. Existing nested uploadDirectFormats values win conflicts, and runtime reads only the nested policy.
* refactor(feishu): migrate tools base alias
Release note: Feishu configs using tools.base now migrate through openclaw doctor --fix to tools.bitable at root and account scope. Existing bitable values win conflicts, and runtime accepts only the canonical key.
* refactor(extensions): remove dead runtime state
* chore(config): refresh bundled channel metadata
* refactor(codex): keep realtime fallback type private
* test(ci): align QA compatibility scenario count
2026-07-27 17:12:41 -04:00
Peter Steinberger
44bcaa263c
fix(browser): bypass managed proxy during CDP handshake ( #114546 )
2026-07-27 08:32:32 -04:00
Peter Steinberger
3f37731175
docs(agents): surface hidden tool capabilities in model-facing descriptions ( #114516 )
2026-07-27 07:20:25 -04:00
Peter Steinberger
269bc5c89e
fix(cli): preserve machine-readable stdout ( #113654 )
...
Co-authored-by: 1052326311 <65798732+1052326311@users.noreply.github.com >
2026-07-27 05:44:16 -04:00
Peter Steinberger
bba7e30fcc
fix(browser): preserve nested timeouts and cancellation across node actions ( #114131 )
2026-07-26 12:04:52 -04:00
Peter Steinberger
a2c6474377
feat(browser): scoped and structured page extraction ( #113938 )
...
* feat(browser): add scoped structured extraction
* fix(browser): keep capture result type module-local and refresh docs map
* fix(browser): keep extract capture helper private
2026-07-25 19:32:44 -07:00