Commit Graph

8347 Commits

Author SHA1 Message Date
Adrià Arrufat
4a63bbf233 agent: replace --save with --interactive flag
Replays scripts then enters REPL to append new commands to the file.
The --save flag is removed in favor of this new interactive mode.
2026-04-10 20:57:22 +02:00
Adrià Arrufat
3a9573e1ae agent: route data to stdout and actions to stderr 2026-04-10 18:03:57 +02:00
Pierre Tachoire
071e70e5cc Merge pull request #2133 from lightpanda-io/feat/cdp-json-endpoints
Feat/cdp json endpoints
2026-04-10 17:51:48 +02:00
Pierre Tachoire
88dcac642a Merge pull request #2131 from lightpanda-io/pushstate-pathname
update page URL and location on pushState/replaceState
2026-04-10 17:37:43 +02:00
Matt Van Horn
224a7333f2 fix: use fixed Lightpanda/1.0 for /json/version User-Agent
Replace dynamic build version string with stable Lightpanda/1.0
in the Browser and User-Agent fields of the /json/version response.
The dev version (1.0.0-dev.5492+...) is not useful for CDP clients.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-10 17:36:10 +02:00
Matt Van Horn
416984d32f fix: update integration test for enriched /json/version response
The integration test at "server: get /json/version" was hardcoding
the old response with Content-Length: 48. Updated to verify the
enriched fields structurally since the version string varies at
build time.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-10 17:36:09 +02:00
Matt Van Horn
503ca4ce07 feat: enrich CDP /json/version and add /json/list endpoint
Add Browser, Protocol-Version, and User-Agent fields to the
/json/version CDP endpoint response. Previously it only returned
webSocketDebuggerUrl, while Chrome and other CDP browsers return
7+ fields that automation tools use for capability detection.

Also add /json/list and /json endpoints that return an empty JSON
array, matching the standard CDP endpoint layout that tools like
Puppeteer and chromedp expect.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-10 17:36:05 +02:00
Adrià Arrufat
b99fd47c9d Merge branch 'main' into agent 2026-04-10 17:16:29 +02:00
Adrià Arrufat
bf4e33ee69 Merge pull request #2132 from lightpanda-io/fix/html5ever-cargo-cache-invalidation
build: track html5ever Rust sources as cargo step inputs
2026-04-10 17:14:14 +02:00
Pierre Tachoire
bf75e0cdfb Merge pull request #2123 from mvanhorn/fix/markdown-link-formatting
fix: use proper link text in markdown dump for block-content anchors
2026-04-10 17:09:38 +02:00
Adrià Arrufat
d6cdafc480 build: track html5ever Rust sources as cargo step inputs 2026-04-10 16:42:42 +02:00
Muki Kiboigo
d47e24ced0 add test for History URL updating 2026-04-10 07:38:21 -07:00
Adrià Arrufat
d6aea1187f Merge branch 'main' into fix/markdown-link-formatting 2026-04-10 16:26:14 +02:00
Muki Kiboigo
08cd9ca799 properly resolve URL before setting Location in History 2026-04-10 07:26:01 -07:00
Adrià Arrufat
c1a65160c1 markdown: test block link aria-label and title handling 2026-04-10 16:14:58 +02:00
Adrià Arrufat
a5fd70f5dd refactor: improve tool execution and terminal formatting
- Standardize `fill` tool to use `value` instead of `text`.
- Add formatted output methods (`printInfoFmt`, `printErrorFmt`) to `Terminal`.
- Improve error handling in `ToolExecutor` and `browser/tools` by using error unions.
- Deduplicate `minify` utility and remove redundant code comments.
- Refactor tool dispatch to use `Action` enum tags instead of hardcoded strings.
2026-04-10 14:54:51 +02:00
Karl Seguin
24e17b6f21 Merge pull request #2130 from lightpanda-io/arena_pool_buckets
Add arena buckets to ArenaPool
2026-04-10 20:33:19 +08:00
Karl Seguin
771df02c49 Merge pull request #2129 from lightpanda-io/non-utf8-querystring-encoding
Non utf8 querystring encoding
2026-04-10 20:33:07 +08:00
Adrià Arrufat
d1b429655f tools: add selector support for hover, select, and check actions 2026-04-10 14:15:55 +02:00
Adrià Arrufat
642ce1b25d Merge branch 'main' into agent 2026-04-10 13:38:21 +02:00
Karl Seguin
ddf614a9d5 Add arena buckets to ArenaPool
ArenaPool previously maintained up to 512 16KB buckets. The 16KB retention is
small for things like XHR and scripts, but increasing it to something more
reasonably, like 128KB, would use up to 8x more memory.

This commit adds 4 buckets: 1KB, 4KB, 16KB and 128KB. Callers can request a
tiny, small, medium or large bucket. We end up using less memory peak memory
and less allocations.

Furthermore, callers can request a specific size. This is particularly useful
for WebSocket or Blob where the size could vary greatly (so we'd likely default
to a large bucket), but that could needlessly use up a large arena.

The bucket sizes were derived from analyzing allocations. A significant number
of allocations were very small. Things like ScheduleCallback and
FinalizerCallback are always less than 1K and can be generated in the thousands.
The 16KB retention was wasteful in these cases...better to have a large number
of 1K pools, so that we can have a handful of very large buffers.
2026-04-10 19:09:18 +08:00
Karl Seguin
2cfa1ea035 Merge pull request #2116 from lightpanda-io/gc-snapshot
force an aggressive GC on v8 after snapshot creation
2026-04-10 18:48:08 +08:00
Karl Seguin
e9b8707bdd Merge pull request #2121 from lightpanda-io/fix-telemetry-decoding
http: add default write callback to prevent stdout pollution
2026-04-10 18:38:43 +08:00
Adrià Arrufat
d0c36f7e3e terminal: add persistent REPL history
Persists REPL history to .lp-history, except in script mode.
2026-04-10 11:59:55 +02:00
Pierre Tachoire
0f7079ec7a Merge pull request #2128 from lightpanda-io/v8-snapshot-cache
use v8 snapshot cache with wpt
2026-04-10 11:59:05 +02:00
Adrià Arrufat
81413d9291 agent: add scroll command and improve script reliability
Adds the SCROLL command and ensures WAIT actions are recorded.
Refactors TYPE to use the fill tool, adds self-heal retries, and
propagates agent failures to the process exit code.
2026-04-10 11:45:14 +02:00
Pierre Tachoire
e53e4579ab ci: use v8 snapshot cache w/ wpt test 2026-04-10 11:35:40 +02:00
Pierre Tachoire
9cd79941bf Merge pull request #2119 from lightpanda-io/wpt-completion
ci: send wpt completion
2026-04-10 11:26:15 +02:00
Pierre Tachoire
36fcb0fd7f ci: use a longer timeout for e2e test
When we have to generate a snapshot, the build duration is longer.
2026-04-10 11:02:04 +02:00
Karl Seguin
7c66240146 chore: trigger CI 2026-04-10 16:47:42 +08:00
Karl Seguin
a5bf1f07af chore: trigger CI 2026-04-10 16:47:42 +08:00
Karl Seguin
05229fdc53 Use the document's charset to determine if/how to encode querystring
Whenever we resolve a URL, say from `anchor.href`, we should consider the
document's charset when encoding the querystring. This probably isn't the
most important feature, but it makes tens of thousands of WPT cases pass, e.g

/encoding/legacy-mb-tchinese/big5/big5-encode-href-errors-han.html?3001-4000 and
/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-href-errors-han.html?17001-18000

DOM elements previous called `URL.resolveURL(...)`. They now call
`self.asNode().resolveURL(...)`, where `Node#resolveURL` will provide the
document's charset.
2026-04-10 16:47:42 +08:00
Karl Seguin
f7c1710c23 Expose correct charset
document.characterSet, document.charset and document.inputEncoding now exposes
the correct charset.
2026-04-10 16:47:42 +08:00
Karl Seguin
828715b751 Improve TextDecoder to support all necessary encoding types
Uses the newly added encoding_rs to implement TextDecoder for all encoding.
Claude wrote 100% of the Rust binding.

Improves various WPT tests, e.g. /encoding/api-basics.any.html.
2026-04-10 16:47:41 +08:00
Pierre Tachoire
963682eb0d ci: send wpt completion 2026-04-10 10:42:16 +02:00
Pierre Tachoire
d80e4227b4 force an aggressive GC on v8 after snapshot creation 2026-04-10 10:41:57 +02:00
Pierre Tachoire
18176b554c Merge pull request #2127 from lightpanda-io/v8-snapshot-cache
ci: use cache for snapshots
2026-04-10 10:41:43 +02:00
Pierre Tachoire
bd4e88cec8 ci: typo fix 2026-04-10 10:13:27 +02:00
Pierre Tachoire
90069f6ab8 ci: use a dedicated action for v8 snapshot 2026-04-10 10:13:27 +02:00
Adrià Arrufat
397f69fac5 cli: update agent help text for scripts and self-healing 2026-04-10 10:05:49 +02:00
Pierre Tachoire
ca78bd7786 ci: invalidate snapshot cache on src/browser/js/Snapshot.zig 2026-04-10 09:52:43 +02:00
Adrià Arrufat
070ee7df80 Merge branch 'main' into fix-telemetry-decoding 2026-04-10 09:42:21 +02:00
Adrià Arrufat
7fe580214e Merge branch 'main' into agent 2026-04-10 09:32:43 +02:00
Pierre Tachoire
075a660b2f ci: use cache for snapshots
Add a cache for v8 snapshot file.
Use a cache key for v8 snapshot with the last hash changing
src/browser/js/bridge.zig
eg. v8-snapshot-4dcb2c997e01e4367ca6118629fb4ac712f9692c
2026-04-10 09:26:32 +02:00
Pierre Tachoire
a4617390de Merge pull request #2104 from lightpanda-io/feat/add-ip-filter
Feat/add ip filter
2026-04-10 08:46:06 +02:00
Matt Van Horn
5cc49e79b8 fix: update block link test to match new link text format
The "browser.markdown: block link" test expected the old format
([](url)). Updated to expect [url](url) since block-content
anchors without aria-label/title now use the href as display text.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-09 20:49:39 -07:00
Matt Van Horn
065e9383d0 fix: use proper link text in markdown dump for block-content anchors
When an anchor wraps block content (divs, images), the markdown dump
produced `([](url))` with empty display text. This is not valid
markdown and provides no useful information to LLMs consuming the
output.

Now uses the anchor's aria-label or title attribute as display text,
falling back to the href itself. Produces `[label](url)` instead.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-09 19:33:08 -07:00
Karl Seguin
0b6f099f43 Merge pull request #2117 from lightpanda-io/startup_order_tweak
Initialize snapshot before network
2026-04-10 08:30:54 +08:00
Karl Seguin
101107d63c Merge pull request #2115 from lightpanda-io/gc-v8
move memoryPressureNotification call on session.resetPage
2026-04-10 08:14:27 +08:00
Pierre Tachoire
91e366cb71 move memoryPressureNotification call on session.resetPage
Run V8 GC with memoryPressureNotification directly into
session.resetPage to be sure to save free right after resources are
removed.
2026-04-10 08:12:51 +08:00