Commit Graph
9542 Commits
Author SHA1 Message Date
Karl Seguin 506f52bea2 Remove unnecessary flag clear
Fetch is owned by response.arena (a) we need to clear the flag before freeing
the arena and (b) there's no point in clearing the flag at all, since the
memory is freed.
2026-04-15 00:06:36 +08:00
Karl Seguin 2087aa7aac acquire reference on document font 2026-04-14 22:53:03 +08:00
Karl Seguin eb0af793c2 WS.close returns DOMException
Cleanup WS after sending disconnetion events

Mapping support for []f32 and []f64

Default max WS connections 8 -> 64
2026-04-14 21:58:43 +08:00
Pierre Tachoire 28614479ae Merge pull request #2153 from lightpanda-io/cdp-useragent
cdp: Emulation.setUserAgentOverride implementation
2026-04-14 13:53:19 +02:00
Karl Seguin 2cdaac780b Merge pull request #2155 from lightpanda-io/nikneym/fetch-cookie-jar
`Fetch`: cookie jar should only be included for `include` and same or…
2026-04-14 19:45:28 +08:00
Halil Durak c42e242897 Fetch.init: prefer isSameOrigin for comparison 2026-04-14 13:12:48 +03:00
Halil Durak f9fc858212 Page.isSameOrigin: !bool -> bool 2026-04-14 13:12:48 +03:00
Halil Durak e698028e3a Fetch: cookie jar should only be included for include and same origin requests 2026-04-14 13:12:48 +03:00
Karl Seguin 5226df9968 Tweak tests
De-duplicate user agent validation
2026-04-14 17:11:54 +08:00
Adrià Arrufat 3f7238448b Merge branch 'main' into agent 2026-04-14 10:31:16 +02:00
Karl Seguin 1a2d0934e6 Merge pull request #2078 from lightpanda-io/worker
Worker
2026-04-14 16:00:26 +08:00
Adrià Arrufat f47f762add agent: centralize command and tool call mapping 2026-04-14 08:50:50 +02:00
Adrià Arrufat 5233855537 agent: extract applyReplacements and add tests 2026-04-14 08:24:05 +02:00
Adrià Arrufat ab918fb736 verifier: rename jsonQuote to quoteJson 2026-04-14 07:22:58 +02:00
Karl Seguin b088c42980 update workers for better cdp integration 2026-04-14 12:42:07 +08:00
Karl Seguin 1adb371902 fix rebase 2026-04-14 12:24:10 +08:00
Karl Seguin 4c02959596 update workers to use new arena pool 2026-04-14 12:24:09 +08:00
Karl Seguin 60249f5e5d update v8 dep 2026-04-14 12:24:09 +08:00
Karl Seguin 197de3dc0c Limit Worker API to supported types
In order for an API to be supported by workers, their dependency on *Page has
to be removed. To keep this PR smaller, we're only converting a minimum number
of APIs from Page to Execution. All other APIs should not be exposed to the
worker (better to get a FormData undefined than to try to segfault trying to
execute FormData without a page).
2026-04-14 12:24:09 +08:00
Karl Seguin d1d561f5c1 Worker.close() 2026-04-14 12:24:09 +08:00
Karl Seguin 3830ccfdf2 support worker navigating using object url blobs 2026-04-14 12:24:09 +08:00
Karl Seguin b3a8a7454e add error callbacks for workers 2026-04-14 12:24:09 +08:00
Karl Seguin 5e7f891546 Add unhandledPromiseRejection for Worker
Allow *Session to be injected into WebAPI for more generic webapis between
page and workers.
2026-04-14 12:24:09 +08:00
Karl Seguin 0247b21483 Improve event dispatching between/from workers 2026-04-14 12:24:08 +08:00
Karl Seguin ce6b01f7f6 Allow structuredClone to target a different context 2026-04-14 12:24:08 +08:00
Karl Seguin fb844a17b6 Worker WebAPI 2026-04-14 12:24:08 +08:00
Karl Seguin 951986b655 Create Worker context in snapshot
Turns out you can embed multiple contexts within a snapshot. So our snapshot
now contains the Page context (as before) but also the Worker context. This
gives us the performance benefit of snapshots and makes context creation for
pages and workers much more similar.
2026-04-14 12:24:08 +08:00
Karl Seguin 7ca3aa61e9 Make context work with Page of WGS
A context can be created for either a Page or a Worker. This removes the
Context.page field and replaces it with a Context.global union.
2026-04-14 12:24:08 +08:00
Karl Seguin cd2bb28c6c Tweak snapshot for workers
We'll have two types of contexts: one for pages and one for workers. They'll
[probably] both be js.Context, but they'll have distinct FunctionTemplates
attached to their global. The Worker template will only contain a small subset
of the main Page's types, along with 1 or 2 of its own specific ones.

The Snapshot now creates the templates for both, so that the Env contains the
function templates for both contexts. Furthermore, having a "merged" view like
this ensures that the env.template[N] indices are consistent between the two.

However, the snapshot only attaches the Page-specific types to the snapshot
context. This allows the Page-context to be created as-is (e.g. efficiently).
The worker context will be created lazily, on demand, but from the templates
loaded into the env (since, again, the env contains templates for both).
2026-04-14 12:24:08 +08:00
Karl Seguin 4e385a3d13 Introduce Execution
A Worker has no page. So any API that is accessible to a worker cannot take
a *Page parameter. Such APIs will now take a js.Execution which the context
will own and create from the Page (or from the WorkerGlobalScope when that's
created).

To test this, in addition to introducing the Execution, this change also updates
URLSearchParams which is accessible to Worker (and the Page obviously). This
change is obviously viral..if URLSearchParams no longer has a *Page but instead
has an *Execution, then any function it calls must also be updated.

So some APIs will take a *Page (those only accessible from a Page) and some will
take an *Execution (those accessible from a Page or Worker). I'm ok with that.

A lot of private/internal functions take a *Page, because it's simple, but all
they want is a call_arena or something. We'll try to update those as much as
possible. The Page/Execution being injected from the bridge is convenient, but
we should be more specific for internal calls and pass only what's needed.
2026-04-14 12:24:06 +08:00
Karl Seguin f2a2acc1aa Merge pull request #2134 from lightpanda-io/cache_public_default
Cache-Control is public by default
2026-04-14 12:22:25 +08:00
Karl Seguin 48e8b7dc81 Merge pull request #2156 from lightpanda-io/lid-as-reqid
cdp: accept LID- as requestId prefix
2026-04-14 08:07:58 +08:00
Pierre Tachoire a114106790 cdp: accept LID- as requestId prefix 2026-04-13 23:46:37 +02:00
Adrià Arrufat 68a6ef16db Verifier: deduplicate logic and relocate tests
Refactor `Verifier.zig` to use shared helpers for DOM property checks.
Move `substituteEnvVars` tests to `browser/tools.zig` and remove
redundant debug prints in `Agent.zig`.
2026-04-13 19:26:21 +02:00
Adrià Arrufat 6b7cd72e69 agent: prune message history to limit memory growth
Drops older turns while preserving the system prompt and recent messages
to prevent the message arena from growing indefinitely.
2026-04-13 19:06:57 +02:00
Adrià Arrufat e8c7a01794 agent: use comments for self-healing and simplify verifier 2026-04-13 18:43:57 +02:00
Adrià Arrufat 0c56f085dc agent: improve self-healing and console message handling
Roll back message history on failed self-heal attempts to prevent
context pollution. Cap console messages at 1000 to prevent memory
exhaustion and add a helper to drain the message buffer. Refactor
system prompt initialization into a shared helper function.
2026-04-13 18:22:17 +02:00
Adrià Arrufat 570c901239 agent: improve recorder robustness and cleanup
- Add heap fallback for `Recorder` when fixed buffers overflow.
- Replace global atomic `agent_failed` with a local variable in `main.zig`.
- Fix `UnkownOption` typo in `Config.zig`.
- Add `Verifier` tests and debug logging for navigations.
- Add memory usage TODO and pointer arithmetic comments in `Agent.zig`.
2026-04-13 18:02:18 +02:00
Adrià Arrufat c80cdf1423 Merge branch 'main' into agent 2026-04-13 17:00:23 +02:00
Adrià Arrufat 2b2dd1557e agent: limit max tool calls in heal turn to 4 2026-04-13 16:55:52 +02:00
Karl Seguin 1ee7641f54 Merge pull request #2138 from lightpanda-io/range_error
Map a zig error.RangeError to a proper JS RangeError
2026-04-13 22:50:35 +08:00
Karl Seguin 12a0fb3fb6 Merge pull request #2137 from lightpanda-io/http_abrupt_close
Handle http response with closed socket
2026-04-13 22:50:18 +08:00
Karl Seguin 2f2f74ef4b Merge pull request #2135 from lightpanda-io/mo_cleanup
On Page cleanup, capture next linked list node _before_ releasing MO
2026-04-13 22:49:59 +08:00
Karl Seguin 9a05fd8af4 Merge pull request #2154 from lightpanda-io/cdp_request_id
Improve loaderId and requestId compatibility
2026-04-13 22:49:27 +08:00
Adrià Arrufat f4c266e4bc agent: limit auto-healed replacement to single command
Only use the first command from the LLM to avoid breaking the script
sequence when multiple commands are returned for a single line.
2026-04-13 15:40:54 +02:00
Adrià Arrufat d8c7a8c050 agent: add select verification and improve retry logic
- Implement `verifySelect` to check element values in `Verifier`.
- Add `.select` to retryable commands in `Agent`.
- Increase retries to 3 with incremental backoff.
- Simplify click verification by removing navigation intent logic.
2026-04-13 14:44:57 +02:00
gujishh ea67e41660 docs: match WSL section formatting 2026-04-13 21:09:27 +09:00
Karl Seguin ce811c1b48 Merge pull request #2142 from lightpanda-io/formdata_encoding
Encode form data based on the form (or documents) encoding.
2026-04-13 19:51:17 +08:00
Karl Seguin 6723d6642a 'fix' test 2026-04-13 19:51:04 +08:00
Adrià Arrufat ed8ae3f83a agent: unify verification logic and failure reporting
Consolidates verification and failure reason generation into a single
call. Optimizes state capture to be command-aware and fixes EVAL block
parsing logic in `Command.zig`.
2026-04-13 13:11:02 +02:00