Commit Graph

5815 Commits

Author SHA1 Message Date
Adrià Arrufat
ceff290ff9 Merge branch 'main' into agent 2026-06-09 07:24:10 +02:00
Karl Seguin
72770cf438 webapi, gc: Give FormData its own arena
Rather than relying on the frame_arena, use a distinct arena for FormData. This
generally results in tighter memory usage, but more importantly it ensures that
if FormData outlives the frame, we don't get a UAF. This can happen if the
FormData is refernced in v8 and finalized late (e.g. after the frame would
appear to still be needed).

Also, in Frame.submitForm use the explicit acquireRef and releaseRef. This
FormData can [in theory] be passed to JS, via the `formdata` event that we fire.
2026-06-09 10:45:55 +08:00
Karl Seguin
f4774f1ac2 Merge pull request #2668 from lightpanda-io/fix-newsession-init-failure
browser: clear session slot when Session.init fails
2026-06-09 07:09:04 +08:00
Karl Seguin
4784c29287 Merge pull request #2666 from lightpanda-io/crypto
WPT /WebCryptoAPI/
2026-06-09 07:07:12 +08:00
Adrià Arrufat
8e12f6cdf9 agent: exclude version from comptime banner check 2026-06-08 20:08:32 +02:00
Adrià Arrufat
e6ae13717d agent: move up text 2026-06-08 19:52:42 +02:00
Adrià Arrufat
02cf1c582b agent: add colored braille panda logo
Replace the monochrome braille logo with a truecolor ANSI-colored
version. Update logo dimensions and row counting logic, and simplify
the welcome banner printing to stream logo lines directly.
2026-06-08 19:48:05 +02:00
Adrià Arrufat
826fa34cb5 agent: remove schema from slash help
Stop printing the verbose JSON schema for tool parameters when
displaying slash command help.
2026-06-08 19:11:02 +02:00
Adrià Arrufat
378a11d0dd agent: support LLM commands in slash help 2026-06-08 19:08:39 +02:00
Adrià Arrufat
95963e63e8 agent: simplify welcome banner rendering
Statically assert that the banner fits within 80 columns at compile
time. This removes the need to dynamically measure terminal width
and conditionally hide the logo.
2026-06-08 18:50:35 +02:00
Adrià Arrufat
c6b1649b93 repl: update isocline and polish hints 2026-06-08 18:26:27 +02:00
Adrià Arrufat
6a35253368 terminal: remove custom status bar
Updates the isocline dependency to use its native hints for Ctrl-D
and Esc. Removes the custom status bar rendering logic, and prints
the active model and effort level at REPL startup instead.
2026-06-08 18:13:49 +02:00
Adrià Arrufat
70cc8ff5f9 Merge branch 'main' into agent 2026-06-08 17:01:18 +02:00
Adrià Arrufat
a91eaecb1b build: update isocline and remove top bar
Updates the isocline dependency to a newer commit and removes the
redundant top bar rule configuration in Terminal.zig.
2026-06-08 16:55:29 +02:00
Karl Seguin
6d8c4e9ca6 Merge pull request #2670 from lightpanda-io/websocket_double_free
websocket,gc: Don't call cleanup from websocket.deinit
2026-06-08 22:36:42 +08:00
Karl Seguin
86cb0b1820 websocket,gc: Don't call cleanup from websocket.deinit
Don't call cleanup from WebSocket.deinit, since cleanup can result in deinit
being called (via rc release). This results in a double free.
2026-06-08 18:23:08 +08:00
Pierre Tachoire
22d1c5ecd1 Merge pull request #2654 from lightpanda-io/form-upload-file
form: encode file inputs as multipart/form-data on submit
2026-06-08 11:47:54 +02:00
Karl Seguin
4fc0ba7dcb Merge pull request #2667 from lightpanda-io/arena_pool_debug_cleanup
Improve ArenaPool release debug reporting
2026-06-08 17:32:52 +08:00
Adrià Arrufat
c087229b8a agent: add welcome banner with logo
Prints a Braille-art Lightpanda logo alongside the welcome text and
command hints if the terminal is wide enough. Otherwise, falls back
to a text-only layout.

Also exposes `Terminal.displayWidth` to assist with layout calculations.
2026-06-08 11:28:16 +02:00
Pierre Tachoire
3ec0c25dde Merge pull request #2665 from mvanhorn/fix/2610-axnode-password-input-textbox-role
fix: map password inputs to textbox accessibility role
2026-06-08 11:21:32 +02:00
Pierre Tachoire
b2002a8dca Merge pull request #2657 from rohitsux/feat/cdp-mouse-button-clickcount
feat(cdp): support mouse button and clickCount in Input.dispatchMouseEvent
2026-06-08 10:53:59 +02:00
Adrià Arrufat
04345a5149 fix: resolve agent init crash and mcp stream recovery
- Track initialized providers in Agent.zig to avoid freeing garbage
  memory on error.
- Discard the rest of the line in mcp router on StreamTooLong to
  allow processing subsequent requests.
2026-06-08 10:35:42 +02:00
Pierre Tachoire
530a9e0765 deinit FormData to release files 2026-06-08 10:26:02 +02:00
Adrià Arrufat
bf7992f904 browser: clear session slot when Session.init fails
newSession set self.session to undefined, but left it non-null if
Session.init failed. closeSession() then ran deinit() on garbage:

- double-released the arena
- read undefined fields on the never-assigned path

Add an errdefer to null the slot on failure.
2026-06-08 10:18:48 +02:00
Karl Seguin
e64aa70c34 Improve ArenaPool release debug reporting
Cherry-picked from https://github.com/lightpanda-io/browser/pull/2623 since the
main issue in that PR was directly solved by https://github.com/lightpanda-io/browser/pull/2625
but the ArenaPool change is still worth keeping. The change is: that we
check for a double-release BEFORE resetting the arena, which would cause the
invalid flow to appear in a harder-to-debug spot.
2026-06-08 15:24:27 +08:00
Karl Seguin
d11d7fdbd4 zig fmt 2026-06-08 15:10:54 +08:00
Pierre Tachoire
845dac86ba FormData: fix file leak on deletion 2026-06-08 09:10:01 +02:00
Adrià Arrufat
2a7bda3608 string: add string.isOneOf and deduplicate helpers 2026-06-08 09:04:36 +02:00
Pierre Tachoire
6aa4ef074f call the ref count release after releasing coupled data 2026-06-08 08:51:01 +02:00
Pierre Tachoire
4c06cfb17c use u8 for reference counter
Co-authored-by: Karl Seguin <karlseguin@users.noreply.github.com>
2026-06-08 08:49:07 +02:00
Matt Van Horn
e7cce250d3 fix: map password inputs to textbox accessibility role 2026-06-07 23:45:20 -07:00
Pierre Tachoire
fdf6276f39 cdp: use Frame.mouse_button consts from cdp.input.zig 2026-06-08 08:42:54 +02:00
Karl Seguin
b7c3814ece WPT /WebCryptoAPI/
I threw Claude at WPT's /WebCryptoAPI/ which represents a significant number of
failing cases.

There were a few very low-hanging fruit, like enabling CryptoKey on Worker and
supporting `{name: string}` in addition to just `string` for some functions.

Some of these "fixes" just handle the error case / validation, which tends to
represent a greater number of WPT cases, e.g. some of the importKey algorithms
aren't fully supported, but they still validate the input and return the correct
errors.

To that end, while there should be considerably more passing cases (~42K), some
of these changes merely unlocked more failing cases, so our total case count
should go up.

Claude's summary:

  1. digest {name} object fix (16→80)
  2. Symmetric importKey/exportKey/generateKey (AES, HMAC; raw + jwk) + CryptoKey
  accessors + DataError
  3. EC/OKP importKey usage validation (failure-path)
  4. PBKDF2 + HKDF deriveBits, then deriveKey
  5. ECDH generateKey + import (spki/pkcs8) + deriveBits/deriveKey
  6. AES encrypt/decrypt (CBC/CTR/GCM)
2026-06-08 14:04:15 +08:00
Karl Seguin
8b16a5a650 Merge pull request #2661 from lightpanda-io/async_action_sequence
Fire actionSequence on the next tick
2026-06-08 06:39:31 +08:00
Karl Seguin
c8df32b98a Merge pull request #2659 from rohitsux/feat/element-scroll-into-view
feat(webapi): implement Element.scrollIntoView
2026-06-07 13:55:56 +08:00
Karl Seguin
6522615e21 zig fmt 2026-06-07 12:34:30 +08:00
Karl Seguin
1ffc84d947 implement the IfNeeded part of scrollIntoViewIfNeeded 2026-06-07 12:32:39 +08:00
Rohit
e68def97b3 refactor(cdp): use named constants for mouse button values
Address review: replace the bare 0/1/2 button values in the
mousedown/release switch (Frame.zig) and the CDP button mapping
(input.zig) with named constants so the code self-documents.
2026-06-06 19:03:45 +05:30
Karl Seguin
802163308e zig fmt 2026-06-06 19:04:15 +08:00
Karl Seguin
c55dcf0484 Fire actionSequence on the next tick
Apparently, that's what's expected and not doing this can break some tests
2026-06-06 19:01:16 +08:00
Adrià Arrufat
7bcab1d840 terminal: separate normal and JS REPL history
Store normal and JS history in separate files and swap them
dynamically when toggling modes.
2026-06-06 12:44:59 +02:00
Adrià Arrufat
adec4d45f5 Merge branch 'main' into agent 2026-06-06 11:42:53 +02:00
Adrià Arrufat
c2e2717170 deps: update isocline dependency
Updates the isocline dependency to a newer commit and cleans up
redundant comments in Terminal.zig.
2026-06-06 11:07:05 +02:00
Adrià Arrufat
eb118bb1de terminal: highlight $LP_* vars inside strings
Extracts `highlightDollarVarsIn` to support highlighting within a
specific range, then applies it to JavaScript string literals.
2026-06-06 11:02:54 +02:00
Adrià Arrufat
2d574a92b1 terminal: add javascript syntax highlighting in JS mode 2026-06-06 10:53:53 +02:00
Adrià Arrufat
b009e416a6 terminal: add Ctrl-D exit confirmation
Updates the isocline dependency and implements a confirmation prompt
when pressing Ctrl-D to exit the terminal.
2026-06-06 10:42:36 +02:00
Adrià Arrufat
828abda838 terminal: support double Esc clear confirmation
Updates isocline and adds a status bar indicator when a clear
is pending after the first Esc press.
2026-06-06 09:47:00 +02:00
Pierre Tachoire
29b407bc30 Merge pull request #2653 from lightpanda-io/element_set_style
add Element.style setter
2026-06-06 09:24:13 +02:00
Adrià Arrufat
a771597caa terminal: support Backspace to exit JS mode
Updates the isocline dependency and the status bar exit hint.
2026-06-06 09:18:20 +02:00
Karl Seguin
a68598fa5d Merge pull request #2650 from lightpanda-io/fix_arena_leaks
Fix two arena leaks
2026-06-06 07:21:39 +08:00