Peter Steinberger
ec8f6e5e03
feat(browser): add secure per-tab copilot panel ( #109817 )
...
* feat(browser): add copilot security contracts
* fix(gateway): expose verified client identity to handlers
* feat(browser): add secure per-tab copilot panel
Co-authored-by: Cameron Beeley <cameron.beeley@gmail.com >
* refactor(browser): separate copilot gateway hint custody
* fix(browser): preserve legacy pairing parse shape
* fix(browser): harden copilot lifecycle custody
Co-authored-by: Cameron Beeley <cameron.beeley@gmail.com >
* fix(browser): enforce copilot lifecycle boundaries
Co-authored-by: Cameron Beeley <cameron.beeley@gmail.com >
* style(browser): format copilot sources
Co-authored-by: Cameron Beeley <cameron.beeley@gmail.com >
* fix(browser): preserve copilot consent revocation
Co-authored-by: Cameron Beeley <cameron.beeley@gmail.com >
* refactor(browser): split copilot custody owners
Co-authored-by: Cameron Beeley <cameron.beeley@gmail.com >
* test(browser): normalize websocket array buffers
Co-authored-by: Cameron Beeley <cameron.beeley@gmail.com >
* chore(protocol): regenerate Swift gateway models
Co-authored-by: Cameron Beeley <cameron.beeley@gmail.com >
* refactor(browser): model copilot runtime entrypoints
Co-authored-by: Cameron Beeley <cameron.beeley@gmail.com >
* fix(browser): honor extension build boundaries
Co-authored-by: Cameron Beeley <cameron.beeley@gmail.com >
* test(gateway): assert targeted chat delivery
Co-authored-by: Cameron Beeley <cameron.beeley@gmail.com >
* test(gateway): cover targeted delivery calls
Co-authored-by: Cameron Beeley <cameron.beeley@gmail.com >
* fix(browser): declare copilot build dependencies
Co-authored-by: Cameron Beeley <cameron.beeley@gmail.com >
* fix(ci): clear browser copilot gate failures
Co-authored-by: Cameron Beeley <cameron.beeley@gmail.com >
* test(ci): cover copilot lint exclusion
Co-authored-by: Cameron Beeley <cameron.beeley@gmail.com >
* fix(browser): gate copilot on relay custody
Co-authored-by: Cameron Beeley <cameron.beeley@gmail.com >
* test(browser): bound copilot relay frames
Co-authored-by: Cameron Beeley <cameron.beeley@gmail.com >
---------
Co-authored-by: Cameron Beeley <cameron.beeley@gmail.com >
2026-07-18 01:00:23 +01:00
Peter Steinberger
9cdb9762a3
style: format tab-discovery-poll-abort test
...
8243afc062 (#109617 ) landed unformatted, failing check-lint repo-wide.
2026-07-17 01:50:53 -07:00
wangmiao0668000666
1fe6b6b0f4
fix(browser): honor abortSignal during Playwright click-and-hold delay ( #109710 )
...
* fix(browser): honor abortSignal during Playwright click-and-hold delay
The click-and-hold delay in clickViaPlaywright slept with a bare
setTimeout(resolve, delayMs) where delayMs can reach ACT_MAX_CLICK_DELAY_MS
(5s). The interaction AbortSignal was checked before and after the sleep
but the sleep itself was not abortable, so an abort mid-hold left the
action chain orphaned: the ref'd timer kept the event loop busy for the
full remaining delay and postponed the navigation-guard teardown (grace
recheck and, with an SSRF policy, the page.route interception) until the
orphaned sleep ended.
Swap the bare timer for sleepWithAbort(delayMs, signal) from
openclaw/plugin-sdk/runtime-env so the abort clears the timer and unwinds
the chain immediately. The caller-visible rejection is unchanged: the
abort listener registered before the action still wins the race with the
original signal.reason.
Co-Authored-By: Claude <noreply@anthropic.com >
* refactor(browser): reuse click abort helper
Keep the contributor abort-aware hold delay while deleting duplicate promise and listener lifecycle code in favor of the existing interaction helper.
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-17 01:42:47 -07:00
wangmiao0668000666
8243afc062
fix(browser): honor AbortSignal in tab discovery poll ( #109617 )
...
* fix(browser): honor AbortSignal in tab discovery poll
* fix(browser): unify abort-aware tab discovery
Apply the canonical abortable sleep to both discovery loops, reject late backend results after cancellation, and replace timing-sensitive proof with deterministic timer coverage.
Co-authored-by: wangmiao0668000666 <wang.miao86@xydigit.com >
---------
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-17 01:39:05 -07:00
Peter Steinberger
f1cb2a8f20
perf(test): poll Chrome MCP state faster ( #109776 )
2026-07-17 00:42:52 -07:00
Peter Steinberger
0631252f4b
refactor: reduce plugin SDK test import overhead ( #109333 )
...
* refactor(test): split plugin SDK test helpers
* fix(test): align plugin SDK test subpaths
2026-07-16 13:55:23 -07:00
NIO
67699ddd82
fix(browser): do not sticky-adopt policy-blocked openTab targets ( #105301 )
...
* fix(browser): do not sticky-adopt policy-blocked openTab targets
* test(browser): narrow sticky redirect proof
Co-authored-by: NIO <hu.genshen@xydigit.com >
* fix(browser): validate tab adoption after navigation
Co-authored-by: NIO <hu.genshen@xydigit.com >
---------
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-16 03:18:27 -07:00
Peter Steinberger
7e1d93d36d
refactor(deadcode): enforce full-repository hard zero ( #108717 )
...
* refactor(deadcode): enforce full-repository hard zero
* refactor(deadcode): drop rebased test-support leftovers
* refactor(openai): remove stale TTS test bridge
* test(config): cover bundled tuple baseline merging
* fix(deadcode): reject external Windows paths
* test(config): preserve heterogeneous tuple coverage
2026-07-16 00:16:20 -07:00
Peter Steinberger
bae9752c5a
refactor(deadcode): enforce repository hard zero ( #108641 )
2026-07-15 22:40:00 -07:00
Peter Steinberger
08ecf63bb6
fix(deadcode): resolve strict-workspace fallout from bundled plugin roots
...
The strict knip workspaces landed in #108547 flagged seven files. Two are
convention-resolved and become explicit entries (discord configured-state via
the package-state probes, qa-lab cli via the SDK facade basename resolver);
the other five were dead barrels/wrappers superseded by canonical modules and
are deleted (browser bridge/cdp barrels, discord timeouts wrapper, openai
register.runtime, qa-lab model-selection wrapper).
2026-07-16 03:08:17 +01:00
NIO
e25f512f83
fix(browser): pass control-client timeoutMs through guarded fetch dispatcher floors ( #106497 )
...
* fix(browser): pass control-client timeoutMs through guarded fetch dispatcher floors
* test(browser): simplify control timeout forwarding coverage
---------
Co-authored-by: Colin <colin@solvely.net >
2026-07-15 15:32:37 -04:00
Peter Steinberger
96eaf2be80
fix: restore recent native, browser, and audio behavior ( #107631 )
...
* fix: repair recent landed regressions
* chore: keep release changelog owned
* test(macos): align CLI fixtures with Node floor
* fix(macos): document Node runtime floor contract
* style(auto-reply): restore runtime mode formatting
2026-07-14 10:47:33 -07:00
Peter Steinberger
433656286d
refactor(ws): use native socket contracts
2026-07-14 10:35:38 -07:00
Peter Steinberger
f81f9d8570
chore: enforce max-lines suppression ratchet ( #107315 )
...
* ci: enforce max-lines suppression ratchet
* chore: prune stale max-lines suppression
* fix: close max-lines ratchet enforcement gaps
* fix: harden max-lines ratchet checks
* fix(ci): satisfy max-lines ratchet checks
* style: format max-lines declarations
* fix(ci): match oxlint suppression grammar
* test: isolate max-lines git fixtures
* chore: prune resolved max-lines debt
* test: skip newline path fixture on Windows
* fix: harden max-lines suppression ratchet
* chore: refresh max-lines baseline
* fix: close max-lines ratchet bypasses
* fix: derive ratchet base from PR merge tree
* fix: support older Git in staged ratchet
* fix: align max-lines declarations and baseline
* chore: refresh max-lines baseline for current main
* fix: exclude generated wizard locales from max-lines
* chore: prune resolved max-lines debt
2026-07-14 09:27:02 -07:00
Peter Steinberger
034b259799
refactor(browser): trust Playwright tab focus
2026-07-14 06:33:40 -07:00
Peter Steinberger
673b163b72
refactor(cli): use Commander native APIs
2026-07-14 02:45:52 -07:00
Peter Steinberger
6e067f7662
test: restore moving-main quality gates ( #106972 )
...
* test(agents): preserve caught abort cause
* refactor(browser): privatize route handler type
* test(lint): cover browser route override
2026-07-13 19:06:30 -07:00
Peter Steinberger
56e9d3b05f
refactor(browser): scope async route lint exception
2026-07-13 18:37:46 -07:00
Peter Steinberger
3442825e6b
refactor(browser): use Express 5 async routes
2026-07-13 18:21:52 -07:00
Peter Steinberger
d5a9602b41
refactor(browser): privatize proxy request type ( #106883 )
2026-07-14 00:08:22 +01:00
Peter Steinberger
2e0f6d5304
fix: recover browser routing and Discord voice context
2026-07-13 23:38:56 +01:00
Peter Steinberger
db02a96c4c
refactor(process): route bounded commands through Execa ( #106495 )
...
* refactor(process): centralize bounded command execution
* refactor(process): migrate core one-shot commands
* refactor(plugins): migrate one-shot commands
* fix(process): await Windows tree termination
* chore(plugin-sdk): refresh process runtime surface
* refactor(process): migrate remaining bounded commands
* refactor(process): normalize command result handling
* refactor(process): split execution responsibilities
* chore(plugin-sdk): refresh API baseline
* chore(process): remove release-owned changelog entry
* fix(process): narrow binary command input checks
* fix(process): cap sandbox command output
* fix(qa-lab): preserve exact node probe env
* chore(ci): refresh dead export baseline
* fix(process): preserve force-kill command deadlines
* fix(process): avoid post-exit timeout reclassification
* test(process): update scp staging wrapper mock
* test(process): update remaining wrapper mocks
* refactor(qa-lab): preserve Execa tar execution
2026-07-13 11:07:35 -07:00
Peter Steinberger
801ec63f92
refactor(cli): rely on Commander contracts ( #106366 )
2026-07-13 05:05:31 -07:00
Peter Steinberger
418dd85e66
improve: speed up focused test execution ( #106307 )
...
* test: speed up focused test execution
* style: format vitest config test
* test: preserve targeted watch routing
2026-07-13 04:38:05 -07:00
Peter Steinberger
279f21e02b
chore(deps): remove redundant Commander declarations ( #106345 )
2026-07-13 04:34:19 -07:00
Peter Steinberger
1edc8b6c27
refactor(security): centralize timing-safe secret comparisons ( #105989 )
...
* refactor(plugins): reuse safe secret comparator
* refactor(security): centralize remaining secret comparisons
* chore(ci): lower refactored file baselines
2026-07-12 22:37:21 -07:00
Peter Steinberger
26210c1600
refactor: remove browser and codex dead exports ( #105867 )
...
* refactor(browser): collapse Playwright export paths
* refactor(browser): remove dead plugin exports
* refactor(codex): remove dead app-server exports
* refactor(codex): remove remaining dead exports
* test(codex): use canonical private-type owners
* test(browser): isolate proxy startup state
* test(browser): remove stale chrome imports
* refactor(codex): privatize remaining helpers
* chore(deadcode): refresh export baseline after rebase
* refactor(browser): finish canonical helper ownership
* refactor: fix dead-export cleanup gates
* refactor(codex): keep runtime facades LOC-neutral
* chore(ci): refresh TypeScript LOC baseline
* chore(deadcode): refresh ratchets after rebase
* chore(ci): refresh LOC baseline after main advance
* chore(deadcode): align ratchets with latest main
2026-07-12 22:23:11 -07:00
Peter Steinberger
c3ee86a068
refactor(browser): localize internal support types ( #105839 )
2026-07-12 18:59:01 -07:00
Peter Steinberger
3613b83c6c
refactor(browser): trim private Playwright exports ( #105794 )
...
* refactor(browser): trim private Playwright exports
* chore(deadcode): refresh export baseline
* chore(deadcode): refresh current baseline
* chore(deadcode): refresh latest baseline
2026-07-12 18:30:34 -07:00
Peter Steinberger
774d5249cc
test: eliminate unchecked TypeScript casts ( #105804 )
2026-07-12 18:08:26 -07:00
Vincent Koc
c25cd32c28
refactor(plugins): trim private helper exports ( #105687 )
2026-07-12 22:26:14 +02:00
Peter Steinberger
5b2ae5df9d
test(browser): align existing-session document mock ( #105398 )
...
* test(browser): align existing-session document mock
* test(browser): type document evaluator mock
* test(browser): type document evaluator mock
2026-07-12 15:16:46 +01:00
Michael Appel
dc6befc072
fix(browser): bind wait predicates to allowed documents ( #101852 )
...
* fix(browser): bind waits to allowed documents
Co-authored-by: Michael Appel <3399869+mmaps@users.noreply.github.com >
* fix(browser): guard document-bound wait predicates
Co-authored-by: Michael Appel <3399869+mmaps@users.noreply.github.com >
* fix(browser): satisfy wait guard gates
* test(browser): update lint suppression baseline
---------
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-12 13:27:51 +01:00
Peter Steinberger
81941f2d68
test: enable noUncheckedIndexedAccess for extension tests ( #105343 )
2026-07-12 12:48:22 +01:00
Vincent Koc
5e453f3c72
fix(ci): restore repo e2e and beta plugin compatibility ( #105287 )
2026-07-12 13:43:25 +02:00
Vincent Koc
4d8b201371
refactor(plugins): remove dead channel helpers ( #105276 )
2026-07-12 18:21:11 +08:00
Peter Steinberger
de4d4079ad
fix(browser): make ref uploads request-owned ( #105151 )
...
* fix(browser): make ref uploads request-owned
* style(browser): satisfy upload owner const lint
2026-07-12 10:19:19 +01:00
Peter Steinberger
4983594867
test(browser): align snapshot contract fixtures ( #105210 )
2026-07-12 10:12:47 +01:00
Peter Steinberger
1793c67ae1
test(browser): repair pw-ai page fixture ( #105172 )
2026-07-12 09:47:10 +01:00
Peter Steinberger
218dcd815a
feat(tooling): enforce noUncheckedIndexedAccess in the extensions lane (NUIA phase 4) ( #105132 )
...
* fix(extensions): make indexed access explicit across channel plugins
Transport-payload-safe burn-down: malformed Telegram/Discord/QQ/LINE
and sibling channel input keeps existing skip paths; no synthesized
fields, no new throws in delivery loops. Zalo escape sentinels preserve
literal matches instead of undefined replacements.
* fix(extensions): make indexed access explicit across provider and memory plugins
Stream and model iteration, tool-block guards, capture guards, and
sparse accumulators; singleton model reads carry named invariants.
* fix(extensions): make indexed access explicit across tooling plugins, flip the extensions lane
Remaining plugins (oc-path, qa-lab, browser, logbook, and siblings) plus
the tsconfig.extensions.json flag flip. Cleanup: logbook sampleFrames
NaN index at max=1, QA retry clamp at non-positive attempts, dead Canvas
probe and OpenShell no-op slice removed, twitch test setup leak excluded
from the prod lane.
* refactor(plugin-sdk): expose expectDefined via a focused SDK subpath
Extensions imported @openclaw/normalization-core directly, crossing the
external-plugin packaging boundary (it only worked because the runtime
builder bundles undeclared workspace helpers). expect-runtime joins the
canonical entrypoints JSON, generated exports, API baseline, docs, and
subpath contract test; all 78 extension imports now use the SDK seam.
Two scanner-shaped locals renamed for review-bundle hygiene.
* chore(plugin-sdk): raise surface budgets for the expect-runtime subpath
One new entrypoint with one callable export, added intentionally as the
packaging-honest seam for extension invariant helpers.
2026-07-12 09:17:31 +01:00
Peter Steinberger
89f740651d
fix(browser): normalize geolocation permission origins ( #105092 )
...
Co-authored-by: llagy007 <0668001470@xydigit.com >
2026-07-12 08:54:04 +01:00
Alix-007
d0764f3566
fix(browser): preserve own profile entries ( #101694 )
...
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-11 20:10:59 -07:00
pick-cat
b874258ace
fix(browser): invalidate stale roleRefs on main-frame navigation ( #104308 )
...
* fix(browser): bind refs to document lifecycle
Co-authored-by: Pick-cat <huang.ting3@xydigit.com >
* fix(browser): guard absent ref cache entries
---------
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-11 19:32:00 -07:00
llagy007
7027d2c227
fix(browser): reject non-page json new targets ( #104129 )
...
* fix(browser): reject non-page json new targets
* fix(browser): adopt only validated raw CDP targets
---------
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-11 16:58:43 -07:00
llagy007
c059d7d062
fix(browser): refresh target after guarded existing-session actions ( #104094 )
...
* fix(browser): refresh target after guarded existing-session actions
* test(browser): isolate guarded target cases
* test(browser): mock safe replacement URL resolution
* fix(browser): refresh target after guarded evaluate
* style(browser): format guarded action matrix
---------
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-11 16:11:48 -07:00
llagy007
4057d4b623
fix(browser): keep direct CDP version diagnostics ( #104678 )
2026-07-11 16:09:42 -07:00
Ho Lim
8a4463eef1
feat(browser): support evaluate timeouts for existing sessions ( #103181 )
...
* fix(browser): honor evaluate timeout for existing sessions
Signed-off-by: Ho Lim <subhoya@gmail.com >
* docs(browser): align existing-session evaluate timeouts
---------
Signed-off-by: Ho Lim <subhoya@gmail.com >
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-11 15:23:52 -07:00
Peter Steinberger
5a6d684019
fix(browser): apply profile proxy policy to tab list redaction ( #104715 )
...
* fix(browser): apply profile proxy policy to tab list redaction
* test(browser): cover proxy tab redaction route proof
* test(browser): streamline proxy tab redaction coverage
* fix(browser): scope proxy inference to managed profiles
---------
Co-authored-by: llagy007 <0668001470@xydigit.com >
2026-07-11 14:47:02 -07:00
llagy007
4bf4cacb37
fix(browser): guard act hooks on current tab URL ( #104095 )
...
* fix(browser): guard act hooks on current tab URL
* test(browser): align navigation policy hook mock
* test(browser): exercise real hook navigation guard
---------
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-11 14:27:34 -07:00
llagy007
85a8f4ba8d
fix(browser): run mutation guard before JSON parsing ( #104677 )
...
* fix(browser): run mutation guard before JSON parsing
* test(browser): cover auth in mutation guard ordering
---------
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-11 14:05:38 -07:00