diff --git a/.copilot/skills/justfile-ci/SKILL.md b/.copilot/skills/justfile-ci/SKILL.md index f4a7cc4..38f6b28 100644 --- a/.copilot/skills/justfile-ci/SKILL.md +++ b/.copilot/skills/justfile-ci/SKILL.md @@ -25,7 +25,7 @@ Justfile (root) ← orchestrates everything └── mod examples_mod 'examples/Justfile' ``` -- Root recipes (`test`, `build-all`, `lint`, `fmt`) delegate to subproject recipes via `mod::recipe` syntax +- Root recipes (`test`, `build`, `lint`, `fmt`) delegate to subproject recipes via `mod::recipe` syntax - Subproject Justfiles own environment setup (e.g. `WIT_WORLD` for WASM) - Root Justfile uses `set unstable := true` to enable module imports - Justfiles are organized with `#### SECTION ####` headers (BUILD TARGETS, TESTS, DOCS, etc.) @@ -41,7 +41,7 @@ See `references/architecture.md` for the full CI job layout and Justfile recipe ## Workflow: Adding a New Step 1. **Add the recipe to the subproject Justfile** — include any env setup, deps, and the actual command -2. **Wire it into the root Justfile** if it should be part of `test`, `lint`, `fmt`, `build-all`, or `examples` +2. **Wire it into the root Justfile** if it should be part of `test`, `lint`, `fmt`, `build`, or `examples` 3. **Add the CI step** — call the `just` recipe from the appropriate CI job 4. **Verify alignment** — root `just test` should run the same test steps that CI runs diff --git a/.copilot/skills/justfile-ci/references/architecture.md b/.copilot/skills/justfile-ci/references/architecture.md index 7cccd14..2f60e6e 100644 --- a/.copilot/skills/justfile-ci/references/architecture.md +++ b/.copilot/skills/justfile-ci/references/architecture.md @@ -4,7 +4,7 @@ | Recipe | Delegates to | Purpose | |--------|-------------|---------| -| `build-all` | `wasm::build`, `jss::build`, `nanvix::build`, `python::build` | Build everything | +| `build` | `wasm::build`, `jss::build`, `nanvix::build`, `python::build` | Build everything | | `test` | `test-rust`, `wasm::test`, `python::python-test` | All tests | | `test-rust` | (direct cargo) | Core crate unit + integration tests | | `lint` | `lint-rust`, `wasm::lint`, `js::lint`, `python::lint` | All linters | diff --git a/.github/copilot-instructions.md b/.github/copilot-instructions.md index e0c47f2..0e6ec56 100644 --- a/.github/copilot-instructions.md +++ b/.github/copilot-instructions.md @@ -3,11 +3,11 @@ - When running examples in this repository, use the `Justfile` recipes instead of invoking `cargo run` or `python` directly. - Use `just examples` from the repository root to run the full example suite. - To run examples for a specific sandbox, use module-scoped recipes: `just wasm examples`, `just js examples`, `just python examples`. -- Use `just build-all` from the repository root to build all subprojects and SDKs. +- Use `just build` from the repository root to build all subprojects and SDKs. - Reason: the example commands depend on `WIT_WORLD` being set to `src/wasm_sandbox/wit/sandbox-world.wasm`; the `Justfile` handles that setup. Make things cross-platform where possible (window/mac/linux). Mac supprot for hyperlight isn't avaliable yet but is coming. -- **After changing WIT interfaces**: you must run `just build-all` (or at minimum rebuild the guest `.wasm` and `.aot` files) before running examples. The pre-compiled guest binaries embed the WIT signature; a mismatch causes "Host function vector parameter missing length" errors at runtime. +- **After changing WIT interfaces**: you must run `just build` (or at minimum rebuild the guest `.wasm` and `.aot` files) before running examples. The pre-compiled guest binaries embed the WIT signature; a mismatch causes "Host function vector parameter missing length" errors at runtime. - **Formatting and linting**: always use `just fmt` and `just fmt-check` from the repository root instead of invoking `cargo fmt`, `ruff format`, or `ruff check` directly. The Justfile recipes run multiple tools in sequence (e.g. `ruff format` + `ruff check --fix` for Python) and missing a step causes CI failures. \ No newline at end of file diff --git a/.github/hooks/hooks.json b/.github/hooks/hooks.json index 3426ec4..4db58a3 100644 --- a/.github/hooks/hooks.json +++ b/.github/hooks/hooks.json @@ -3,7 +3,7 @@ "PostToolUse": [ { "type": "command", - "command": "bash .vscode/run-just-post-session.sh", + "command": "bash ./run-just-post-session.sh", "timeout": 1800 } ] diff --git a/Cargo.lock b/Cargo.lock index 571730f..e60ee68 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -249,9 +249,9 @@ dependencies = [ [[package]] name = "buddy_system_allocator" -version = "0.12.0" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b672b945a3e4f4f40bfd4cd5ee07df9e796a42254ce7cd6d2599ad969244c44a" +checksum = "c1af5a01adeeade54c9f5060300227a8ee64c05b6376f28e9b8ee3b72dd2056f" dependencies = [ "spin", ] @@ -1030,20 +1030,6 @@ version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" -[[package]] -name = "elfcore" -version = "2.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fdaa3d1c27119b3394513f4596894a40cd53cb4acec7fce636a9ca0c4abb171" -dependencies = [ - "libc", - "nix", - "smallvec", - "thiserror", - "tracing", - "zerocopy", -] - [[package]] name = "embedded-io" version = "0.4.0" @@ -1616,22 +1602,9 @@ dependencies = [ [[package]] name = "hyperlight-common" -version = "0.12.0" -source = "git+https://github.com/hyperlight-dev/hyperlight?rev=620339aa95d508e8cbd1d38b4374f09090aade7b#620339aa95d508e8cbd1d38b4374f09090aade7b" -dependencies = [ - "anyhow", - "flatbuffers", - "log", - "spin", - "thiserror", - "tracing", -] - -[[package]] -name = "hyperlight-common" -version = "0.13.1" +version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4187a7affab21aa49e498781595648437ac22cfdf94753c3200eddf89f7ab98c" +checksum = "be2d385987047c64fdb5c95e05ef3b6bd9431001a8fe694abb29b29e99913167" dependencies = [ "anyhow", "flatbuffers", @@ -1644,9 +1617,9 @@ dependencies = [ [[package]] name = "hyperlight-component-macro" -version = "0.13.1" +version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f814ad0745e14be12779361222d63a82928c0c6ce27612c0c89ed925d8957433" +checksum = "fa7ae5cd7c8e5f5b925b07bce45be853ac0be0e6d4e8b2afd17ad8c16aa135c4" dependencies = [ "env_logger", "hyperlight-component-util", @@ -1655,13 +1628,13 @@ dependencies = [ "proc-macro2", "quote", "syn", - "wasmparser 0.245.1", + "wasmparser 0.246.1", ] [[package]] name = "hyperlight-component-util" -version = "0.13.1" -source = "git+https://github.com/jsturtevant/hyperlight-1?branch=wasm-component-fixes#5b5c8c4be6e157269bb90be1c6a8eab8e795214a" +version = "0.14.0" +source = "git+https://github.com/jsturtevant/hyperlight-1?rev=4701257034306b0978d49cc9140bc0b12de3b409#4701257034306b0978d49cc9140bc0b12de3b409" dependencies = [ "itertools 0.14.0", "prettyplease", @@ -1669,34 +1642,34 @@ dependencies = [ "quote", "syn", "tracing", - "wasmparser 0.245.1", + "wasmparser 0.246.1", ] [[package]] name = "hyperlight-guest" -version = "0.13.1" +version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "45e6132c20b413ba14ad6967c3c941702276773d3bc749569e746e3d1df3dff3" +checksum = "6ee2682d284171d2bd9e80e3e543de310356c1d8ec65e88028b3e08048d15d3d" dependencies = [ "anyhow", "flatbuffers", - "hyperlight-common 0.13.1", + "hyperlight-common", "serde_json", "tracing", ] [[package]] name = "hyperlight-guest-bin" -version = "0.13.1" +version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b84470d8d2f9647a02f6bf5287f4083937df6452cacac028cd772f3796c6e2f3" +checksum = "3740817f3be98d18edb50eec985461baca0eba5b1f73d0f475b7a539d812e750" dependencies = [ "buddy_system_allocator", "cc", "cfg-if", "flatbuffers", "glob", - "hyperlight-common 0.13.1", + "hyperlight-common", "hyperlight-guest", "hyperlight-guest-macro", "hyperlight-guest-tracing", @@ -1708,9 +1681,9 @@ dependencies = [ [[package]] name = "hyperlight-guest-macro" -version = "0.13.1" +version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "440596a4204f3c60da9e11da838bcd280bf350b2087361a0ebf69c088bb76423" +checksum = "a4f88cbcde1ca986e4f14a85ea0a436659edcb6eb63e8a9d14413ca5cdc8ea86" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -1720,11 +1693,11 @@ dependencies = [ [[package]] name = "hyperlight-guest-tracing" -version = "0.13.1" +version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f2c1db4d357e8ff0e0f9e26432b38e079d7d7949daa063effeb25bbdce50212" +checksum = "d14e9c34c508ecfba1283a552c3eb118d8ee82d863e2e91377a6059f06cf84dd" dependencies = [ - "hyperlight-common 0.13.1", + "hyperlight-common", "spin", "tracing", "tracing-core", @@ -1732,50 +1705,9 @@ dependencies = [ [[package]] name = "hyperlight-host" -version = "0.12.0" -source = "git+https://github.com/hyperlight-dev/hyperlight?rev=620339aa95d508e8cbd1d38b4374f09090aade7b#620339aa95d508e8cbd1d38b4374f09090aade7b" -dependencies = [ - "anyhow", - "bitflags 2.11.0", - "blake3", - "cfg-if", - "cfg_aliases", - "crossbeam-channel", - "elfcore", - "flatbuffers", - "goblin", - "hyperlight-common 0.12.0", - "kvm-bindings", - "kvm-ioctls", - "lazy_static", - "libc", - "log", - "metrics", - "mshv-bindings", - "mshv-ioctls", - "page_size", - "rand 0.10.0", - "rust-embed", - "serde_json", - "sha256", - "termcolor", - "thiserror", - "tracing", - "tracing-core", - "tracing-log", - "uuid", - "vmm-sys-util", - "windows", - "windows-result", - "windows-sys 0.61.2", - "windows-version", -] - -[[package]] -name = "hyperlight-host" -version = "0.13.1" +version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05a62d79d2871137b0feea8db77e222289594766e2d6902ef0bdb0d65d8edda6" +checksum = "65c2f9b5a13324c5dd786bf77a7531216207684da1cefc19fb9b697d08346ac0" dependencies = [ "anyhow", "bitflags 2.11.0", @@ -1785,7 +1717,7 @@ dependencies = [ "crossbeam-channel", "flatbuffers", "goblin", - "hyperlight-common 0.13.1", + "hyperlight-common", "kvm-bindings", "kvm-ioctls", "lazy_static", @@ -1798,7 +1730,6 @@ dependencies = [ "rand 0.10.0", "rust-embed", "serde_json", - "sha256", "termcolor", "thiserror", "tracing", @@ -1827,13 +1758,13 @@ dependencies = [ [[package]] name = "hyperlight-js" -version = "0.1.1" -source = "git+https://github.com/hyperlight-dev/hyperlight-js.git?rev=eeca10c9574ecb3eb03955350e91b6f58d562792#eeca10c9574ecb3eb03955350e91b6f58d562792" +version = "0.2.0" +source = "git+https://github.com/hyperlight-dev/hyperlight-js.git?rev=dd118685db5da1aca3c22c51752ab1816de311cb#dd118685db5da1aca3c22c51752ab1816de311cb" dependencies = [ "anyhow", "cargo-hyperlight", "fn-traits", - "hyperlight-host 0.12.0", + "hyperlight-host", "hyperlight-js-runtime", "metrics", "oxc_resolver", @@ -1846,21 +1777,21 @@ dependencies = [ [[package]] name = "hyperlight-js-runtime" -version = "0.1.1" -source = "git+https://github.com/hyperlight-dev/hyperlight-js.git?rev=eeca10c9574ecb3eb03955350e91b6f58d562792#eeca10c9574ecb3eb03955350e91b6f58d562792" +version = "0.2.0" +source = "git+https://github.com/hyperlight-dev/hyperlight-js.git?rev=dd118685db5da1aca3c22c51752ab1816de311cb#dd118685db5da1aca3c22c51752ab1816de311cb" dependencies = [ "anyhow", "base64", - "cc", + "bindgen", + "chrono", "clap", "fn-traits", "hashbrown 0.16.1", "hex", "hmac", - "hyperlight-common 0.12.0", + "hyperlight-common", "hyperlight-guest", "hyperlight-guest-bin", - "libc", "rquickjs", "serde", "serde_json", @@ -1927,7 +1858,7 @@ dependencies = [ [[package]] name = "hyperlight-wasm" version = "0.13.1" -source = "git+https://github.com/jsturtevant/hyperlight-wasm?rev=09b5e8297d827518847c08c8506bf83e85eb89b1#09b5e8297d827518847c08c8506bf83e85eb89b1" +source = "git+https://github.com/jsturtevant/hyperlight-wasm?rev=05a9eea#05a9eea52e9bca0722d9e1e2b42e95d78b4d4afe" dependencies = [ "anyhow", "blake3", @@ -1938,8 +1869,8 @@ dependencies = [ "chrono", "env_logger", "goblin", - "hyperlight-common 0.13.1", - "hyperlight-host 0.13.1", + "hyperlight-common", + "hyperlight-host", "hyperlight-wasm-runtime", "junction", "libc", @@ -1957,7 +1888,7 @@ dependencies = [ [[package]] name = "hyperlight-wasm-macro" version = "0.13.1" -source = "git+https://github.com/jsturtevant/hyperlight-wasm?rev=09b5e8297d827518847c08c8506bf83e85eb89b1#09b5e8297d827518847c08c8506bf83e85eb89b1" +source = "git+https://github.com/jsturtevant/hyperlight-wasm?rev=05a9eea#05a9eea52e9bca0722d9e1e2b42e95d78b4d4afe" dependencies = [ "hyperlight-component-util", "itertools 0.14.0", @@ -1969,13 +1900,13 @@ dependencies = [ [[package]] name = "hyperlight-wasm-runtime" version = "0.13.1" -source = "git+https://github.com/jsturtevant/hyperlight-wasm?rev=09b5e8297d827518847c08c8506bf83e85eb89b1#09b5e8297d827518847c08c8506bf83e85eb89b1" +source = "git+https://github.com/jsturtevant/hyperlight-wasm?rev=05a9eea#05a9eea52e9bca0722d9e1e2b42e95d78b4d4afe" dependencies = [ "cargo_metadata", "cc", "cfg-if", "cfg_aliases", - "hyperlight-common 0.13.1", + "hyperlight-common", "hyperlight-guest", "hyperlight-guest-bin", "hyperlight-wasm-macro", @@ -1995,9 +1926,9 @@ dependencies = [ "http", "http-body", "http-body-util", - "hyperlight-common 0.13.1", + "hyperlight-common", "hyperlight-component-macro", - "hyperlight-host 0.13.1", + "hyperlight-host", "hyperlight-sandbox", "hyperlight-wasm", "log", @@ -2533,18 +2464,6 @@ dependencies = [ "vmm-sys-util", ] -[[package]] -name = "nix" -version = "0.31.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d6d0705320c1e6ba1d912b5e37cf18071b6c2e9b7fa8215a1e8a7651966f5d3" -dependencies = [ - "bitflags 2.11.0", - "cfg-if", - "cfg_aliases", - "libc", -] - [[package]] name = "nodejs-built-in-modules" version = "1.0.0" @@ -3685,19 +3604,6 @@ dependencies = [ "digest", ] -[[package]] -name = "sha256" -version = "1.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f880fc8562bdeb709793f00eb42a2ad0e672c4f883bbe59122b926eca935c8f6" -dependencies = [ - "async-trait", - "bytes", - "hex", - "sha2", - "tokio", -] - [[package]] name = "shellexpand" version = "3.1.2" @@ -4427,6 +4333,19 @@ dependencies = [ "serde", ] +[[package]] +name = "wasmparser" +version = "0.246.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2d991c35d79bf8336dc1cd632ed4aacf0dc5fac4bc466c670625b037b972bb9c" +dependencies = [ + "bitflags 2.11.0", + "hashbrown 0.16.1", + "indexmap", + "semver", + "serde", +] + [[package]] name = "wasmprinter" version = "0.236.1" diff --git a/Cargo.toml b/Cargo.toml index 794a9e4..bc8680a 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -23,18 +23,19 @@ license = "Apache-2.0" hyperlight-sandbox = { path = "src/hyperlight_sandbox" } hyperlight-javascript-sandbox = { path = "src/javascript_sandbox" } hyperlight-wasm-sandbox = { path = "src/wasm_sandbox" } -hyperlight-common = { version = "0.13.1", default-features = false } -hyperlight-component-macro = { version = "0.13.1" } -hyperlight-host = { version = "0.13.1", default-features = false, features = ["executable_heap"] } -hyperlight-wasm = { git = "https://github.com/jsturtevant/hyperlight-wasm", rev = "09b5e8297d827518847c08c8506bf83e85eb89b1" } +hyperlight-common = { version = "0.14.0", default-features = false } +hyperlight-component-macro = { version = "0.14.0" } +hyperlight-host = { version = "0.14.0", default-features = false, features = ["executable_heap"] } +hyperlight-wasm = { git = "https://github.com/jsturtevant/hyperlight-wasm", rev = "05a9eea" } #branch util-compont-fixes # Patched component-util (name collision fix, flags fix, empty-ns fix) +# https://github.com/jsturtevant/hyperlight-1/tree/wasm-component-fixes [patch."https://github.com/hyperlight-dev/hyperlight"] -hyperlight-common = { version = "=0.13.1" } -hyperlight-guest = { version = "=0.13.1" } -hyperlight-guest-bin = { version = "=0.13.1" } -hyperlight-host = { version = "=0.13.1" } -hyperlight-component-util = { git = "https://github.com/jsturtevant/hyperlight-1", branch = "wasm-component-fixes", package = "hyperlight-component-util" } +hyperlight-common = { version = "0.14.0" } +hyperlight-guest = { version = "=0.14.0" } +hyperlight-guest-bin = { version = "=0.14.0" } +hyperlight-host = { version = "0.14.0" } +hyperlight-component-util = { git = "https://github.com/jsturtevant/hyperlight-1", rev="4701257034306b0978d49cc9140bc0b12de3b409", package = "hyperlight-component-util" } [patch.crates-io] -hyperlight-component-util = { git = "https://github.com/jsturtevant/hyperlight-1", branch = "wasm-component-fixes", package = "hyperlight-component-util" } +hyperlight-component-util = { git = "https://github.com/jsturtevant/hyperlight-1", rev="4701257034306b0978d49cc9140bc0b12de3b409", package = "hyperlight-component-util" } diff --git a/Justfile b/Justfile index fd1e0dc..51c9316 100644 --- a/Justfile +++ b/Justfile @@ -13,7 +13,7 @@ clean: wasm::clean python::clean #### BUILD TARGETS #### -build-all target=default-target: (wasm::build target) (js::build target) nanvix::build python::build +build target=default-target: (wasm::build target) (js::build target) nanvix::build python::build lint: lint-rust wasm::lint js::lint python::lint diff --git a/README.md b/README.md index c637dc2..db7c089 100644 --- a/README.md +++ b/README.md @@ -197,7 +197,7 @@ Tool requirements: ```bash # Build everything (Rust backends, Wasm guests, Python SDK) -just build-all +just build # Run the example suite just examples @@ -206,7 +206,7 @@ just examples Other useful commands: ```bash -just build-all # Build all Rust backends, Wasm guests, and Python SDK +just build # Build all Rust backends, Wasm guests, and Python SDK just test # Run full test suite (Rust + Python) just lint # Lint Rust and Python code just fmt # Format all code diff --git a/docs/end-user-overview-slides.md b/docs/end-user-overview-slides.md index e42a512..2e62f52 100644 --- a/docs/end-user-overview-slides.md +++ b/docs/end-user-overview-slides.md @@ -261,17 +261,18 @@ resp = http_get("https://other.com/admin") Measured from `benchmark.py` (release build) — 5 cold / 10 warm rounds, averages shown. -| Step | Wasm + Python | Wasm + JS | HyperlightJS | -|---|---:|---:|---:| -| Cold start (create + first run) | 386 ms | 363 ms | 307 ms | -| Warm run (no restore) | 0.1 ms | 0.3 ms | 0.1 ms | -| Cold start + tool dispatch | 376 ms | 338 ms | 313 ms | -| Warm tool dispatch (no restore) | 0.2 ms | 1.3 ms | 0.1 ms | -| Warm file I/O (no restore) | 0.5 ms | n/a | 0.1 ms | -| Snapshot | 147 ms | 152 ms | 114 ms | -| Restore | 162 ms | 151 ms | 133 ms | -| Restore + run | 14 ms | 14 ms | 11 ms | -| Restore + tool dispatch | 14 ms | 14 ms | 11 ms | +Step Wasm + Python Wasm + JavaScript HyperlightJS +----------------------------------------------------------------------------------------- +Cold start (create + first run) 420.8 ms 409.2 ms 386.8 ms +Warm run (no restore) 0.2 ms 0.4 ms 0.1 ms +Cold start + tool dispatch 370.7 ms 384.1 ms 387.7 ms +Warm tool dispatch (no restore) 0.4 ms 0.4 ms 0.1 ms +Cold start + file I/O 451.9 ms 443.5 ms 373.7 ms +Warm file I/O (no restore) 0.3 ms 0.5 ms 0.1 ms +Snapshot 239.6 ms 215.3 ms 168.9 ms +Restore 46.7 ms 43.5 ms 41.9 ms +Restore + run 2.6 ms 3.3 ms 1.5 ms +Restore + tool dispatch 2.7 ms 3.2 ms 1.3 ms --- diff --git a/src/javascript_sandbox/Cargo.toml b/src/javascript_sandbox/Cargo.toml index 701dc9d..c42f85e 100644 --- a/src/javascript_sandbox/Cargo.toml +++ b/src/javascript_sandbox/Cargo.toml @@ -10,7 +10,7 @@ description = "Hyperlight JS guest for hyperlight-sandbox" hyperlight-sandbox.workspace = true anyhow = "1" url = "2" -hyperlight-js = { git = "https://github.com/hyperlight-dev/hyperlight-js.git", rev = "eeca10c9574ecb3eb03955350e91b6f58d562792" } +hyperlight-js = { git = "https://github.com/hyperlight-dev/hyperlight-js.git", rev = "dd118685db5da1aca3c22c51752ab1816de311cb" } serde = { version = "1", features = ["derive"] } serde_json = "1" diff --git a/src/sdk/python/core/examples/benchmark.py b/src/sdk/python/core/examples/benchmark.py index d319e85..f47879e 100644 --- a/src/sdk/python/core/examples/benchmark.py +++ b/src/sdk/python/core/examples/benchmark.py @@ -58,8 +58,8 @@ def run_suite(name, backend, module=None, lang="python"): file_code = None if lang == "python": file_code = 'with open("/input/data.json") as f:\n import json; print(json.load(f)["name"])' - elif backend == "hyperlight-js": - file_code = 'const data = JSON.parse(readFile("/input/data.json"));\nconsole.log(data.name);' + elif lang == "javascript": + file_code = 'const data = JSON.parse(read_file("/input/data.json"));\nconsole.log(data.name);' kwargs = {"backend": backend} if module: