Peter Steinberger
d003e08756
refactor(plugin-sdk): remove final test-only facades ( #122844 )
2026-08-12 15:28:22 -07:00
wanyongstar
7e21533841
fix(browser): validate extension relay frame fields before handling ( #120283 )
...
* fix(browser): validate extension relay frame fields before handling
* refactor(browser): clarify relay frame validation
* style(browser): format relay frame guards
---------
Co-authored-by: Dallin Romney <dallinromney@gmail.com >
2026-08-13 00:46:15 +08:00
Peter Steinberger
c23d66e3b5
refactor: consolidate coercion ownership ( #122692 )
...
* refactor: consolidate coercion ownership
* test: align shard check with weighted planning
* chore: refresh plugin SDK API baseline
2026-08-12 09:25:28 -07:00
Peter Steinberger
209b3ade0f
test(browser): model DNS lookup overloads ( #122614 )
2026-08-12 05:23:43 -07:00
Peter Steinberger
79ac476b0f
fix(test): type CDP DNS lookup mocks ( #122607 )
...
Amp-Thread-ID: https://ampcode.com/threads/T-019ff3db-c467-70ad-8ed3-81f2ba94b0c0
Co-authored-by: Amp <amp@ampcode.com >
2026-08-12 04:45:15 -07:00
Pavan Kumar Gondhi
92f5f07da1
fix(browser): keep guarded CDP sockets on validated endpoints [AI] ( #114506 )
...
* fix(browser): keep guarded CDP sockets on validated endpoints
* fix(browser): avoid retrying rate-limited CDP discovery
* fix(browser): close Chrome MCP CDP policy gaps
* test(browser): match Chrome MCP policy error
* test(browser): satisfy transport type and lint checks
* fix(browser): narrow guarded CDP transport changes
* fix(browser): separate upload filesystem locality
* fix(browser): keep strict remote CDP hosts untrusted
2026-08-12 16:16:12 +05:30
Peter Steinberger
5350b92dc8
fix(browser): wake extension relay through gateway ( #122537 )
...
* fix(browser): wake extension relay through gateway
* fix(browser): preserve manual extension relay pairing
2026-08-12 02:13:03 -07:00
Peter Steinberger
b080dd1e76
refactor: consolidate coercion contracts ( #122458 )
...
* refactor: consolidate coercion contracts
Centralize exact string, record, numeric, date, Boolean, argument, and structured-error coercions while preserving call-site semantics.
Migrate canonical-name collisions and deprecated internal SDK bypasses, deleting 55 net production/tooling lines. Expand declaration ownership enforcement to 101 allowed helpers and add a narrow export-completeness audit.
* fix: preserve standalone script coercions
Keep copied Control UI tooling self-contained and retain the trusted release harness module-relative source seam when the harness runs against an old target cwd.
2026-08-11 23:26:37 -07:00
Peter Steinberger
964c8c84c1
refactor: consolidate coercion ownership ( #122299 )
...
* refactor: consolidate coercion ownership
Centralize four canonical coercion helpers, migrate exact core and plugin duplicates through narrow Plugin SDK facades, and enforce declaration and plugin-normalization ownership boundaries.
The sweep adds eight focused SDK exports while deleting more production and tooling code than it adds. User-visible behavior is unchanged except for safer equivalent object and UI parsing at existing boundaries.
* fix: guard integer option ownership
Register resolveIntegerOption with the canonical function owner and extend the declaration-guard fixture so future local duplicates fail validation.
* fix: keep integer helpers on numeric facade
Remove the unshipped duplicate string-coerce exports and route every affected plugin consumer through the existing number-runtime contract.
* fix: point numeric coercion to number runtime
Make boundary and declaration diagnostics recommend the canonical numeric facade, with failing-before coverage for both guidance paths.
2026-08-11 17:14:53 -07:00
Peter Steinberger
d8ae7278b9
fix(browser): publish snapshot output atomically ( #122327 )
2026-08-11 16:31:17 -07:00
Vatsal Garg
a432e2a586
fix(browser): let attached workers exit after CDP use ( #122103 )
...
* fix(browser): retire attached runtime Playwright CDP adapter on disposal (#122065 )
* fix(browser): use optional chaining on refresh in CDP adapter retirement
* refactor(browser): simplify attached adapter disposal
---------
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-08-11 13:47:58 -07:00
Vincent Koc
01cd9cc2a8
test(browser): isolate shared fixture state ( #122216 )
...
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-08-12 03:57:39 +08:00
wanyongstar
90dbede056
fix(browser): bound snapshot tree rendering depth ( #119217 )
...
Both snapshot renderers walked accessibility trees recursively with no
default depth bound: the chrome-mcp builder only honored maxDepth when
callers passed one, and the CDP renderRoleTree had no limit at all. A
pathologically nested page could overflow the call stack and grow
indent output quadratically before any output truncation ran. Add a
generous hard depth bound (100) to both traversal paths.
2026-08-12 00:38:29 +07:00
Peter Steinberger
cad77fb39c
refactor: consolidate remaining coercion helpers ( #122020 )
2026-08-11 10:22:01 -07:00
Peter Steinberger
fa03d9b913
refactor: consolidate coercion helpers ( #121366 )
...
* refactor: consolidate coercion helpers
* fix: remove duplicate coercion imports
* fix: preserve serialized coercion guard
* chore: ratchet coercion helper carve-outs
* fix(test): keep gauntlet subprocess startup lean
* fix: preserve imported session timestamp semantics
* fix: preserve catalog timestamp string semantics
* chore: align plugin SDK surface ratchet
* fix: preserve trajectory and SDK string contracts
* fix(test): preserve QA record assertion semantics
* fix: complete standalone record guard rename
* refactor(cron): use canonical string coercion
* fix(acpx): preserve Pi timestamp parsing
* test(channels): adapt custody test harnesses
* test(telegram): classify media harness as test support
* test(acpx): split timestamp contract coverage
* test(channels): support generated custody contracts
* chore: ban the full coercion helper name set
Extends the declaration guard to all eleven consolidated helper names and
renames the cron schedule-identity readNumber wrapper to readScheduleInteger
so the banned generic name cannot regrow.
* fix(scripts): repair release-validation guard drift and lint cause
Restores the renamed isJsonRecord guard in assertTrustedWorkflowHarness after
main added isRecord call sites in parallel, and attaches the caught YAML error
as the thrown error cause (preserve-caught-error was red on main).
* fix: preserve Claude timestamp string semantics
* fix: preserve persisted timestamp string semantics
* fix: preserve date-first timestamp contracts
* fix(openai): harden delegation failure formatting
* chore: close coercion helper guard gaps
* test(openai): model non-error delegation rejection
* chore: refresh plugin SDK API contract
* fix(tasks): use canonical string field reader
* fix(ai): use canonical provider error field coercion
* fix(browser): migrate native bootstrap coercion
* docs(plugin-sdk): clarify text record export compatibility
* fix(gateway): normalize approval execution identity
* test(outbound): isolate message action poll harness
2026-08-11 00:02:18 -07:00
Peter Steinberger
b5d5ec340f
feat(cloud-workers): add desktop apps and browser autonomy ( #121475 )
...
* feat(cloud-workers): add desktop apps and browser autonomy
provider-attested Browser/Terminal launchers, shared visible loopback CDP Browser tool, no MCP/cookies/generic command.
* feat(ui): add cloud desktop app launcher
* docs(gateway): document cloud desktop apps and browser autonomy
* perf(ui): trim desktop launcher startup copy
* refactor(ui): simplify desktop launch feedback
* perf(ui): reuse desktop app labels
* fix(ui): keep desktop launch failures actionable
* fix(crabbox): allow browser bootstrap to finish
* fix(cloud-workers): honor provider provision budgets
* fix(cloud-workers): persist browser screenshot receipts
* fix(cloud-workers): bound browser screenshot lifecycle
* fix(cloud-workers): avoid replaying desktop launches
* test(cloud-workers): isolate browser runtime integration
* refactor(cloud-workers): tighten desktop runtime boundaries
* test(cloud-workers): keep browser runtime mock synchronous
* fix(cloud-workers): break gateway type import cycle
* fix(ci): settle admitted setup sessions in tests
* build(plugin-sdk): refresh desktop app contract
* ci: refresh merge-tree validation
* build(plugin-sdk): regenerate desktop app baseline
* style(gateway): format merged method order test
2026-08-10 20:31:07 -07:00
Peter Steinberger
fada067277
feat(browser): add zero-click Chrome extension bootstrap ( #121586 )
...
* feat(browser): add zero-click extension bootstrap
Pre-register deterministic path-derived extension IDs and install a strict native messaging host.
Keep the popup and options UI minimal while removing the obsolete copilot and page-share flows.
* fix(browser): satisfy native bootstrap CI guards
* test(browser): isolate native bootstrap Chrome roots
* test(browser): flush native bootstrap profile before status
* test(browser): seed Linux native bootstrap identity
* fix(browser): preserve native bootstrap upgrade safety
Allow immutable root-owned package inputs while keeping mutable state, manifests, and launchers user-owned. Preserve all retired copilot keys whenever active or unrecognized recovery custody remains.
* fix(browser): preserve pending copilot custody
Retired cleanup now removes copilot state only when the durable registry is exactly empty. Any session, archive, malformed value, future shape, or read failure preserves every retired key.
* fix(browser): guard native bootstrap upgrades
Fail closed while retired copilot custody remains and make discard durable across partial failures.
Require exact launcher-embedded origins and repair full launcher drift without accepting mismatched registrations.
* fix(browser): remove stale layout export
* chore(release): leave changelog to release flow
2026-08-10 19:31:13 -07:00
Peter Steinberger
1367e9a79f
refactor(packages): collapse duplicate type surfaces ( #121340 )
...
* refactor(packages): collapse duplicate type surfaces
* chore(generated): refresh package contract artifacts
2026-08-09 20:45:15 -07:00
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
0ef798d28d
fix(gateway): keep hello authorization aligned with RPC access ( #120888 )
...
* fix(gateway): separate socket and device token scopes
* chore(i18n): refresh native source baseline
* style(ios): keep gateway channel within lint limit
* refactor(gateway): simplify scope metadata decoding
* ci(ui): isolate real-gateway e2e suites
* docs(ci): align runner table formatting
* chore(plugin-sdk): refresh api baseline
* ci(ui): route real-gateway retries to hosted runners
* chore(plugin-sdk): repair generated api baseline
* test(ui): select Labs toggles by title
* fix(gateway): preserve stored scopes without wire metadata
2026-08-09 14:50:07 -07:00
Peter Steinberger
2f8c950701
fix(browser): recover Copilot storage writes ( #116882 )
2026-08-09 09:34:58 -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
41a778d91a
fix(browser): recover stalled Copilot gateway connections ( #120839 )
2026-08-08 20:20:14 -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
eecbfcc960
fix(infra): unify env-truthiness, missing-path, realpath, and abort-sleep semantics ( #120359 )
...
* fix(infra): unify environment truthiness
* fix(infra): unify missing path classification
* refactor(infra): unify realpath fallbacks
* fix(infra): unify abortable sleep errors
* docs(infra): clarify path fallback semantics
* fix(infra): route realpaths through policy wrapper
* fix(infra): ratchet plugin SDK wildcard budget
* fix(agents): preserve zero-delay abort precedence
* fix(infra): preserve fallback and media recovery contracts
* fix(plugins): share quarantine path resolution
2026-08-08 10:58:57 -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
Alix-007
1575187419
fix(browser): time out Google Docs page exports ( #111633 )
2026-08-08 11:47:58 +08:00
Peter Steinberger
48639663b0
chore(release): prepare 2026.8.1 ( #120375 )
2026-08-07 18:44:12 -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
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