WASM browser build: interned env keys, async kernel boot, bundled .sx platform
- Symbol interning in sx_types.ml: env lookups use int keys (intern/unintern) to avoid repeated string hashing in scope chain walks - sx-platform.js: poll for SxKernel availability (WASM init is async) - shell.sx: load sx_browser.bc.wasm.js when SX_USE_WASM=1 - bundle.sh: fix .sx file paths (web-signals.sx rename) - browser/dune: target byte+js+wasm modes - Bundle 23 .sx platform files for browser (dom, signals, router, boot, etc.) Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -709,6 +709,7 @@ let rec handle_tool name args =
|
||||
let selector = args |> member "selector" |> to_string_option in
|
||||
let expr = args |> member "expr" |> to_string_option in
|
||||
let actions = args |> member "actions" |> to_string_option in
|
||||
let island = args |> member "island" |> to_string_option in
|
||||
(* Determine whether to run specs or the inspector *)
|
||||
let use_inspector = match mode with
|
||||
| Some m when m <> "run" -> true
|
||||
@@ -745,6 +746,7 @@ let rec handle_tool name args =
|
||||
(match selector with Some s -> Some ("selector", `String s) | None -> None);
|
||||
(match expr with Some e -> Some ("expr", `String e) | None -> None);
|
||||
(match actions with Some a -> Some ("actions", `String a) | None -> None);
|
||||
(match island with Some i -> Some ("island", `String i) | None -> None);
|
||||
]) in
|
||||
let args_json = Yojson.Safe.to_string (Yojson.Safe.from_string (Yojson.Basic.to_string inspector_args)) in
|
||||
let cmd = Printf.sprintf "cd %s && node tests/playwright/sx-inspect.js '%s' 2>&1" project_dir (String.escaped args_json) in
|
||||
@@ -1154,14 +1156,15 @@ let rec handle_tool name args =
|
||||
let bindings = ref [] in
|
||||
(* Walk env chain collecting all bindings *)
|
||||
let rec collect_bindings env acc =
|
||||
Hashtbl.iter (fun k v ->
|
||||
if not (Hashtbl.mem acc k) then Hashtbl.replace acc k v
|
||||
Hashtbl.iter (fun id v ->
|
||||
if not (Hashtbl.mem acc id) then Hashtbl.replace acc id v
|
||||
) env.bindings;
|
||||
match env.parent with Some p -> collect_bindings p acc | None -> ()
|
||||
in
|
||||
let all = Hashtbl.create 256 in
|
||||
collect_bindings e all;
|
||||
Hashtbl.iter (fun k v ->
|
||||
Hashtbl.iter (fun id v ->
|
||||
let k = Sx_types.unintern id in
|
||||
let kind = match v with
|
||||
| NativeFn _ -> "native"
|
||||
| Lambda _ -> "lambda"
|
||||
@@ -1351,10 +1354,11 @@ let tool_definitions = `List [
|
||||
("files", `Assoc [("type", `String "array"); ("items", `Assoc [("type", `String "string")]); ("description", `String "Multiple .sx files to load in order")]);
|
||||
("setup", `Assoc [("type", `String "string"); ("description", `String "SX setup expression to run before main evaluation")])]
|
||||
["expr"];
|
||||
tool "sx_playwright" "Run Playwright browser tests or inspect SX pages interactively. Modes: run (spec files), inspect (page report), diff (SSR vs hydrated), eval (JS expression), interact (action sequence), screenshot."
|
||||
tool "sx_playwright" "Run Playwright browser tests or inspect SX pages interactively. Modes: run (spec files), inspect (page/island report with leak detection and handler audit), diff (full SSR vs hydrated DOM), hydrate (lake-focused SSR vs hydrated comparison — detects clobbering), eval (JS expression), interact (action sequence), screenshot."
|
||||
[("spec", `Assoc [("type", `String "string"); ("description", `String "Spec file to run (run mode). e.g. stepper.spec.js")]);
|
||||
("mode", `Assoc [("type", `String "string"); ("description", `String "Mode: run, inspect, diff, eval, interact, screenshot")]);
|
||||
("mode", `Assoc [("type", `String "string"); ("description", `String "Mode: run, inspect, diff, hydrate, eval, interact, screenshot")]);
|
||||
("url", `Assoc [("type", `String "string"); ("description", `String "URL path to navigate to (default: /)")]);
|
||||
("island", `Assoc [("type", `String "string"); ("description", `String "Filter inspect to a specific island by name (e.g. home/stepper)")]);
|
||||
("selector", `Assoc [("type", `String "string"); ("description", `String "CSS selector to focus on (screenshot mode)")]);
|
||||
("expr", `Assoc [("type", `String "string"); ("description", `String "JS expression to evaluate (eval mode)")]);
|
||||
("actions", `Assoc [("type", `String "string"); ("description", `String "Semicolon-separated action sequence (interact mode). Actions: click:sel, fill:sel:val, wait:ms, text:sel, html:sel, attrs:sel, screenshot, screenshot:sel, count:sel, visible:sel")])]
|
||||
|
||||
Reference in New Issue
Block a user