Commit Graph
9840 Commits
Author SHA1 Message Date
Karl Seguin 8f568c1382 webapi: add a number of DOMTokenList setters
While the token list itself is readonly, the attribute itself is settable. For
example, HTMLOutputElement's htmlFor says:

"Although the htmlFor property itself is read-only in the sense that you can't
replace the DOMTokenList object, you can still assign to the htmlFor property
directly"
2026-09-28 09:59:04 +08:00
Karl Seguin a9738c7df5 Merge pull request #3660 from lightpanda-io/nikneym/iframe-set-sandbox
`iframe`: add sandbox setter
2026-09-28 09:55:04 +08:00
Karl Seguin 38e8957639 Merge pull request #3665 from lightpanda-io/orderfile-regen
orderfile: regenerate the hot-code profile
2026-09-28 09:18:46 +08:00
github-actions[bot] d0c8a24334 orderfile: regenerate the hot-code profile
hot set 16948KB resident at 4KB fault-around: 21493 text, 22328 rodata symbols
2026-09-28 01:08:30 +00:00
Karl Seguin 389c0826e9 Merge pull request #3642 from lightpanda-io/click-wait-networkidle
tools: wait for networkidle after an action-triggered navigation
2026-09-28 08:00:36 +08:00
Karl Seguin 111fd35258 have httpclient own idle time 2026-09-28 07:33:06 +08:00
Karl Seguin 895b967259 Merge pull request #3629 from lightpanda-io/nikneym/text-encoder-encode-into
`TextEncoder`: add `encodeInto`
2026-09-28 07:07:17 +08:00
Karl Seguin 8a31f29b8a Merge pull request #3634 from lightpanda-io/v8-wakeup
perf: v8 task wakeup
2026-09-28 07:07:02 +08:00
Karl Seguin 831af0ca37 cleanup code, re-use new helper 2026-09-28 06:46:27 +08:00
Karl Seguin 52cb8cf47b disable poll (0) if there's a foreground task 2026-09-28 06:36:30 +08:00
nikneym 395550488a iframe: add sandbox setter 2026-09-27 14:45:47 +03:00
nikneym 690adc28a8 TextEncoder: add encodeInto
Also reworks `TextEncoder#encode` to use `v8__String__WriteUtf8`.
2026-09-27 13:15:30 +03:00
Karl Seguin 6cd05967ed Merge pull request #3652 from lightpanda-io/orderfile-regen
orderfile: regenerate the hot-code profile
2026-09-27 09:36:51 +08:00
github-actions[bot] baea3fc12b orderfile: regenerate the hot-code profile
hot set 16928KB resident at 4KB fault-around: 21514 text, 22326 rodata symbols
2026-09-27 01:10:20 +00:00
Karl Seguin d69b5418db Merge pull request #3650 from lightpanda-io/cli-error-ergonomics
cli: report usage errors once, accept -h, show tips only on a terminal
2026-09-27 08:06:03 +08:00
Karl Seguin 162e73e1c1 log command on failed sniff 2026-09-27 07:23:20 +08:00
Karl Seguin 727724bf85 Merge pull request #3646 from lightpanda-io/same-page-reload
Don't skip navigation when page isn't loaded (or had error loading)
2026-09-27 07:12:40 +08:00
Adrià Arrufat 9c55b6040a Merge pull request #3651 from lightpanda-io/drop-orcarouter
agent: drop the OrcaRouter provider
2026-09-27 00:10:57 +02:00
Adrià Arrufat a6df7b04d0 agent: drop the OrcaRouter provider
zenai no longer ships the OrcaRouter preset. It still works as an
OpenAI-compatible endpoint via OPENAI_BASE_URL + OPENAI_API_KEY.
2026-09-26 23:58:30 +02:00
Adrià Arrufat 1f582d4674 cli: report usage errors once, accept -h, show tips only on a terminal
A flag given without its value, or an extra positional, failed with
only `FATAL exit err=MissingArgument`, not naming the flag. The parser
now logs which flag is missing its value or which argument is extra,
with a hint pointing at the command's help, and a missing fetch URL is
caught while parsing, next to run's missing script. Since each of these
is logged where it's found, main exits without the generic `exit` line.

`-h` works wherever `--help` does, instead of being taken as a URL.

The --obey-robots tip is for a person at a terminal, so it's skipped
when stderr isn't one; scripts capturing stderr no longer get it on
every run.
2026-09-26 23:52:34 +02:00
Adrià Arrufat 1068e8893d runner: use activity.total() after the merge with main
d77c6fb1c dropped the total_network_activity local.
2026-09-26 22:17:07 +02:00
Adrià Arrufat 0e98f7accc Merge remote-tracking branch 'origin/main' into click-wait-networkidle 2026-09-26 22:16:33 +02:00
Adrià Arrufat bf0d69f33b runner: hold networkidle on live activity, not the CDP latch
The .networkidle/.networkalmostidle wait conditions read
Frame._notified_network_idle, the one-shot latch behind CDP's lifecycle
event. Once a frame has been idle it stays .done, so waiting on it after
an action that loads a popup or navigates an iframe resolved at once.

Track instead, per Runner, how long the network has been idle and meet
the condition once that has held for 500ms. The frame latch stays for
the CDP events.
2026-09-26 21:48:32 +02:00
Adrià Arrufat b9d8b39c68 Test that a same-url read re-navigates after a failed navigation
The failed frame's url already matches, so markdown/tree with that url
used to return the error placeholder page instead of navigating again.
2026-09-26 21:36:11 +02:00
Karl Seguin 81278de250 Don't skip navigation when page isn't loaded (or had error loading) 2026-09-26 07:52:19 +08:00
Karl Seguin 64b14b23e6 Merge pull request #3639 from lightpanda-io/goto-pending-connection
Don't resolve a navigation queued on a free connection as loaded
2026-09-26 07:21:44 +08:00
Karl Seguin 989ad39a47 Merge pull request #3628 from lightpanda-io/iterative-axnode
mem: AXNode tree/query walks iterative, isIgnore linear
2026-09-26 06:12:45 +08:00
Karl Seguin e4e95cf3cb Merge pull request #3627 from lightpanda-io/recycling-allocator
mem: replace slab allocator
2026-09-26 06:06:39 +08:00
Adrià Arrufat b2fb908e06 tools: wait for networkidle after an action-triggered navigation
`.done` waits for full quiescence, which a page running ads or polling
never reaches, so every navigating click ran its 10s budget out and gave
up. On hostelworld.com one click cost 10,141ms against 2,705ms waiting
for networkidle, with both producing an identical page: same URL, same
5023 nodes, same 2403 characters of text.

The same navigation issued as a `goto` costs 1.2-2.2s, because `goto`
defaults to `load`. `load` alone is not enough for a caller that reads
the DOM next, though: on that page it yields 961 nodes against
networkidle's 5023.

Closes #3641
2026-09-25 16:29:51 +02:00
Pierre Tachoire 6f18cfcae7 Merge pull request #3632 from lightpanda-io/robots-log-level
ops: downgrade error.RobotsBlocked to warn (from err)
2026-09-25 15:17:22 +02:00
Adrià Arrufat d77c6fb1ca Don't resolve a navigation queued on a free connection as loaded
The easy-handle pool is shared by every client in the process. When other
sessions hold all of it, a new navigation's request sits in pending_queue,
but Runner resolved a frame still in `.pre` as soon as in-flight activity
was zero, which ignores pending transfers. goto then reported success on
an empty document.

Wait on `activity.idle()` instead, and make a goto that times out before
any response arrives a NavigationTimeout error rather than a soft timeout.

Fixes #3636
2026-09-25 15:17:19 +02:00
Adrià Arrufat 8702e06167 Merge pull request #3630 from lightpanda-io/prompt-audit-cleanup
agent: drop dated prompt patterns, bump zenai
2026-09-25 11:35:59 +02:00
Adrià Arrufat efc239bbe8 Merge pull request #3613 from lightpanda-io/scroll-text-extent
Measure wrapped text in an element's content height
2026-09-25 11:20:28 +02:00
Adrià Arrufat ec31d4b711 Merge branch 'main' into prompt-audit-cleanup
# Conflicts:
#	build.zig.zon
#	src/browser/tools.zig
2026-09-25 11:13:12 +02:00
Adrià Arrufat 3ba2a5fffa Merge pull request #3597 from lightpanda-io/agent-fixes
Agent and tool-layer fixes found by a decision-model loop
2026-09-25 10:58:32 +02:00
Adrià Arrufat b5896c259b Merge branch 'main' into agent-fixes
# Conflicts:
#	build.zig.zon
#	src/SemanticTree.zig
2026-09-25 10:44:05 +02:00
Karl Seguin 43d384d676 perf: v8 task wakeup
This is a cleaner implementation of https://github.com/lightpanda-io/browser/pull/3615
which allows a Foreground task posted to v8 to wake up the HttpClient from a
poll
2026-09-25 12:14:32 +08:00
Karl Seguin 3d74a90f71 Merge pull request #3633 from lightpanda-io/v8-string-writeutf8
v8: update for changes to v8__String__WriteUtf8
2026-09-25 12:11:42 +08:00
Karl Seguin db98e85ce3 v8: update for changes to v8__String__WriteUtf8
https://github.com/lightpanda-io/zig-v8-fork/pull/211
2026-09-25 11:52:42 +08:00
Karl Seguin 42e593e49f remove unused deinit 2026-09-25 10:53:13 +08:00
Karl Seguin 3f7662dc98 ops: downgrade error.RobotsBlocked to warn (from err) 2026-09-25 10:41:27 +08:00
Karl Seguin a720a51987 Merge pull request #3631 from lightpanda-io/orderfile-regen
orderfile: regenerate the hot-code profile
2026-09-25 09:37:48 +08:00
Karl Seguin ddda5a4bc6 Merge pull request #3612 from lightpanda-io/cascade-box-size
Resolve width and height from stylesheet rules
2026-09-25 09:37:29 +08:00
Karl Seguin 140b0bc908 Merge pull request #3626 from lightpanda-io/style-groups
Split the style cascade into property groups
2026-09-25 09:30:42 +08:00
Karl Seguin 070ece06bb Merge pull request #3483 from lightpanda-io/cors-store
Cors Store
2026-09-25 09:17:04 +08:00
github-actions[bot] 07880245b2 orderfile: regenerate the hot-code profile
hot set 16652KB resident at 4KB fault-around: 21492 text, 21950 rodata symbols
2026-09-25 01:01:57 +00:00
Karl Seguin 722241fe0d Merge pull request #3622 from lightpanda-io/keep-preload-script-errors
http: preserve preload script errors
2026-09-25 06:14:25 +08:00
Karl Seguin 2bd46136dc Merge pull request #3621 from lightpanda-io/legacy-constructors
webapi: Legacy constuctor API
2026-09-25 06:13:23 +08:00
Karl Seguin bfbc34bffa Merge pull request #3619 from lightpanda-io/sanitizer-usage
webapi: Sanitizer API usage
2026-09-25 06:13:06 +08:00
Karl Seguin 1950a81753 Merge pull request #3617 from lightpanda-io/iterative-semantic-tree
mem: SemanticTree and AXNode recursive walk -> iterative
2026-09-25 06:12:53 +08:00