Commit Graph

8347 Commits

Author SHA1 Message Date
Karl Seguin
1f94312086 Merge pull request #2161 from lightpanda-io/crash_fix
Various crash fixes
2026-04-15 07:09:14 +08:00
Karl Seguin
beb6069ce5 Merge pull request #2160 from lightpanda-io/fix_fetch_cleanup_order
Remove unnecessary flag clear
2026-04-15 07:09:02 +08:00
Karl Seguin
5de092f662 Merge pull request #2159 from lightpanda-io/document_font_lifecycle
acquire reference on document font
2026-04-15 07:08:52 +08:00
Karl Seguin
5c33c8fc3c Merge pull request #2158 from lightpanda-io/websocket_tweaks
WS.close returns DOMException
2026-04-15 07:08:37 +08:00
Karl Seguin
ada235a8c8 Various crash fixes
1. Double buffer to_load list so that load callback which register more loadable
elements don't invalid the list while we're iterating

2. Switch to debug-only assertion for opaque origin. Not clear how this
assertion is failing, but isn't worth failing release builds for it.

3. on worker terminate, don't remove worker from page tracking. This results in
a leaking context, which causes numerous problems.

4. On page.init error, cleanly shutdown context
2026-04-15 01:14:26 +08:00
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