Adrià Arrufat
f2a30f8cdd
mcp: don't forget to flush
2026-03-02 21:46:49 +09:00
Adrià Arrufat
43785bfab4
mcp: simplify handleList implementations
2026-03-02 21:30:47 +09:00
Adrià Arrufat
78edf6d324
mcp: simplify I/O architecture and remove test harness
2026-03-02 21:25:07 +09:00
Adrià Arrufat
73565c4493
mcp: optimize dispatching and simplify test harness
...
- Use StaticStringMap and enums for method, tool, and resource lookups.
- Implement comptime JSON minification for tool schemas.
- Refactor router and harness to use more efficient buffered polling.
- Consolidate integration tests and add synchronous unit tests.
2026-03-02 20:53:14 +09:00
Adrià Arrufat
a7872aa054
mcp: improve robustness of server and test harness
...
- Refactor router and test harness for non-blocking I/O using buffered polling.
- Implement reliable test failure reporting from sub-threads to the main test runner.
- Encapsulate pipe management using idiomatic std.fs.File methods.
- Fix invalid JSON generation in resource streaming due to duplicate fields.
- Improve shutdown sequence for clean test exits.
2026-03-02 17:03:04 +09:00
Adrià Arrufat
64107f5957
mcp: refactor for testability and add comprehensive test suite
...
- Refactor mcp.Server and router to accept injected I/O streams.
- Implement McpHarness for high-fidelity MCP integration testing.
- Add unit tests for protocol, tools, and resources modules.
- Add integration tests covering initialization, tool/resource execution, and error handling.
- Improve error reporting for malformed JSON requests.
2026-03-02 15:52:05 +09:00
Adrià Arrufat
8a1795d56f
mcp: fix memory leak in links tool
2026-03-02 13:09:58 +09:00
Adrià Arrufat
175488563e
mcp: remove browser message loop from processRequests
2026-03-02 12:25:33 +09:00
Adrià Arrufat
da51cdd11d
Merge branch 'main' into mcp
2026-03-02 11:55:36 +09:00
Adrià Arrufat
a8a47b138f
mcp: change browser from pointer to value
2026-03-02 11:50:56 +09:00
Adrià Arrufat
b63d4cf675
mcp: improve RawJson stringification and schema formatting
...
- Update `RawJson.jsonStringify` to parse and re-write JSON content, ensuring valid output.
- Reformat tool input schemas in `tools.zig` using multi-line string literals for better readability.
2026-03-02 11:47:02 +09:00
Adrià Arrufat
a91afab038
mcp: improve event loop and response handling
...
- Use an allocating writer in `sendResponse` to handle large payloads.
- Update the main loop to tick the HTTP client and cap poll timeouts.
- Update protocol version and minify tool input schemas.
2026-03-02 11:12:00 +09:00
Adrià Arrufat
d4747b5386
mcp: own the browser
...
Co-authored-by: Karl Seguin <karlseguin@users.noreply.github.com >
2026-03-02 10:10:08 +09:00
Adrià Arrufat
41b81c8b05
mcp: use io poll for stdin and integrate message loop
...
Replaces blocking stdin reads with `std.io.poll` to allow macrotasks to
run. Removes the stdout mutex as I/O is now serialized.
2026-03-02 10:04:23 +09:00
Pierre Tachoire
552831364d
Merge pull request #1687 from lightpanda-io/ci-integration-test
...
e2e-test / zig build release (push) Has been cancelled
e2e-test / demo-scripts (push) Has been cancelled
e2e-test / cdp-and-hyperfine-bench (push) Has been cancelled
e2e-test / perf-fmt (push) Has been cancelled
e2e-test / browser fetch (push) Has been cancelled
zig-test / zig test using v8 in debug mode (push) Has been cancelled
zig-test / zig test (push) Has been cancelled
zig-test / perf-fmt (push) Has been cancelled
nightly build / build-linux-x86_64 (push) Has been cancelled
nightly build / build-linux-aarch64 (push) Has been cancelled
nightly build / build-macos-aarch64 (push) Has been cancelled
nightly build / build-macos-x86_64 (push) Has been cancelled
wpt / zig build release (push) Has been cancelled
wpt / build wpt runner (push) Has been cancelled
wpt / web platform tests json output (push) Has been cancelled
wpt / perf-fmt (push) Has been cancelled
e2e-integration-test / zig build release (push) Has been cancelled
e2e-integration-test / demo-integration-scripts (push) Has been cancelled
ci: reduce log_level for integration test
2026-03-01 16:09:56 +01:00
Adrià Arrufat
42b5e32473
mcp: modernize I/O processing and reuse message buffer
2026-03-01 22:35:28 +09:00
Adrià Arrufat
e9c36fd6f8
mcp: use declarative static definitions for tools and resources
2026-03-01 21:56:48 +09:00
Adrià Arrufat
952dfbef36
mcp: use acquire/release ordering for server running flag
2026-03-01 21:39:38 +09:00
Adrià Arrufat
254984b600
mcp: use dynamic allocation for error messages in tools
2026-03-01 21:36:21 +09:00
Adrià Arrufat
8cbc58d257
mcp: unify error reporting and use named error codes
2026-03-01 21:29:59 +09:00
Adrià Arrufat
e6cc3e8c34
mcp: refactor tools handling
2026-03-01 21:18:28 +09:00
Karl Seguin
516335e0ed
Merge pull request #1686 from lightpanda-io/load_event_iframe_fix
...
Fix load event for page with no external scripts but with iframes
2026-03-01 20:15:36 +08:00
Adrià Arrufat
01798ed7f8
mcp: use sentinel-terminated strings for tool params
2026-03-01 20:58:00 +09:00
Adrià Arrufat
fcad67a854
mcp: pre-initialize tools and resources on server startup
2026-03-01 20:44:11 +09:00
Adrià Arrufat
e359ffead0
mcp: propagate errors in tool schema parsing
2026-03-01 20:39:40 +09:00
Adrià Arrufat
eb09041859
mcp: resolve absolute URLs for links tool
2026-03-01 20:35:13 +09:00
Adrià Arrufat
b3d52c966d
mcp: handle errors during resource and tool streaming
2026-03-01 20:23:23 +09:00
Pierre Tachoire
3fb8a14348
ci: reduce log_level for integration test
2026-03-01 11:22:37 +01:00
Karl Seguin
84a949e7c7
Fix load event for page with no external scripts but with iframes
...
Previously the "load" event happened when all external scripts were done. In the
case that there was no external script, the "load" event would fire immediately
after parsing.
With iframes, it now waits for external script AND iframes to complete but the
no-external-script code was never updated to consider iframes and would thus
fire load events prematurely.
2026-03-01 18:19:40 +08:00
Pierre Tachoire
eaf1cb26b2
Merge pull request #1685 from ireydiak/chore/remove-gitsubmodules-from-readme
...
e2e-test / zig build release (push) Has been cancelled
e2e-test / demo-scripts (push) Has been cancelled
e2e-test / cdp-and-hyperfine-bench (push) Has been cancelled
e2e-test / perf-fmt (push) Has been cancelled
e2e-test / browser fetch (push) Has been cancelled
zig-test / zig test using v8 in debug mode (push) Has been cancelled
zig-test / zig test (push) Has been cancelled
zig-test / perf-fmt (push) Has been cancelled
Remove outdated git submodule documentation and Makefile target
2026-03-01 11:01:24 +01:00
Pierre Tachoire
f37962d3de
Merge pull request #1683 from lightpanda-io/dump_mode_wpt
...
Add a "wpt" dump mode
2026-03-01 11:00:29 +01:00
Pierre Tachoire
511e957d4b
Merge pull request #1682 from lightpanda-io/iframe_document_open_fix
...
Noop when document.open is called during iframe parsing
2026-03-01 10:57:42 +01:00
Pierre Tachoire
71df03b729
Merge pull request #1681 from lightpanda-io/xhr_url_escape_mime_parse_lax
...
Escape XHR URL, Lax MIME parameter parsing
2026-03-01 10:55:50 +01:00
Pierre Tachoire
839052f4b8
Merge pull request #1680 from lightpanda-io/cdp_json_url
...
Correctly JSON encode URL
2026-03-01 10:55:05 +01:00
ireydiak
7c18d857f0
chore: removed gitsubmodules from README and Makefile
2026-02-28 12:36:40 -05:00
Adrià Arrufat
947e672d18
mcp: stream resource and tool content to JSON output
2026-02-28 23:04:22 +09:00
Adrià Arrufat
96942960a9
mcp: reuse arena allocator for message processing
2026-02-28 22:38:16 +09:00
Adrià Arrufat
8b0118e2c8
mcp: update logging scope to use mcp instead of app
2026-02-28 22:30:02 +09:00
Adrià Arrufat
5f9a7a5381
mcp: ignore unknown json fields and improve error reporting
2026-02-28 22:18:37 +09:00
Adrià Arrufat
6897d72c3e
mcp: simplify request processing to single-threaded
2026-02-28 21:26:51 +09:00
Adrià Arrufat
aae9a505e0
mcp: promot Server.zig to file struct
2026-02-28 21:02:49 +09:00
Karl Seguin
45196e022b
Add a "wpt" dump mode
...
Adds a not-documented "wpt" mode to --dump which outputs a formatted
report.cases.
This is meant to make working on a single WPT test case easier, particularly
with some coding tool. Claude recommended this output for its own use.
Instead of telling claude to start the browser in serve mode, then run the
wptrunner, and merge the two outputs (and then stop the server), you can do:
zig build run -- fetch --dump wpt "http://localhost:8000/dom/nodes/CharacterData-appendChild.html "
(you still need the wpt server up)
2026-02-28 19:08:58 +08:00
Karl Seguin
b9e4c44d63
Noop when document.open is called during iframe parsing
...
I'm not sure what the correct behavior is, but this fixes a WPT crash:
/html/browsers/sandboxing/sandbox-inherited-from-required-csp.html
The issue is iframe-specific as, with an iframe, you document.write can be
called during parsing when there's no document._current_script (because it's
being executed from the parent).
2026-02-28 18:05:03 +08:00
Karl Seguin
0a9e5b66ee
Merge pull request #1679 from lightpanda-io/escape_data_uri
...
e2e-test / zig build release (push) Has been cancelled
zig-test / zig test using v8 in debug mode (push) Has been cancelled
zig-test / zig test (push) Has been cancelled
e2e-test / demo-scripts (push) Has been cancelled
e2e-test / cdp-and-hyperfine-bench (push) Has been cancelled
e2e-test / perf-fmt (push) Has been cancelled
e2e-test / browser fetch (push) Has been cancelled
zig-test / perf-fmt (push) Has been cancelled
nightly build / build-linux-x86_64 (push) Has been cancelled
nightly build / build-linux-aarch64 (push) Has been cancelled
nightly build / build-macos-aarch64 (push) Has been cancelled
nightly build / build-macos-x86_64 (push) Has been cancelled
wpt / zig build release (push) Has been cancelled
wpt / build wpt runner (push) Has been cancelled
wpt / web platform tests json output (push) Has been cancelled
wpt / perf-fmt (push) Has been cancelled
e2e-integration-test / zig build release (push) Has been cancelled
e2e-integration-test / demo-integration-scripts (push) Has been cancelled
Escape DataURIs
2026-02-28 14:45:12 +08:00
Karl Seguin
8b99e82743
Merge pull request #1678 from lightpanda-io/improve_atob
...
Re-implement forgiving base64 decode without intermediate allocation
2026-02-28 14:45:01 +08:00
Karl Seguin
059fb85e22
Escape XHR URL, Lax MIME parameter parsing
...
Follow up to https://github.com/lightpanda-io/browser/pull/1646 applies the
same change to XHR URLs.
Following specs, ignores unknown/invalid parameters of the Content-Type when
parsing the MIME (rather than rejecting the entire header).
2026-02-28 14:42:43 +08:00
Karl Seguin
8997df861a
Merge pull request #1677 from lightpanda-io/mime_charset_default
...
Initialize charset to safe default
2026-02-28 14:30:14 +08:00
Karl Seguin
e65667963f
Correctly JSON encode URL
...
I think this code comes from some serialization tweak from when everything was
an std.Uri and by switch to [:0]const u8 everywhere not only was the tweak
unecessary, it was also wrong - possibly resulting in the generation of
invalid JSON.
2026-02-28 12:48:45 +08:00
Karl Seguin
3d51667fc8
Escape DataURIs
...
Support forgiving base64 decoder
Support non-encoded DataURIs
2026-02-28 12:24:26 +08:00
Karl Seguin
7fc6e97cd8
Re-implement forgiving base64 decode without intermediate allocation
...
Was looking at, what I thought was a related issue, and started to extract this
code to re-use it (in DataURIs). Realized it could be written without the
intermediate allocation. Then I realized the dataURI issue is something else,
but wanted to keep this improvement.
2026-02-28 11:22:31 +08:00