60 lines · 2.0 KB · Markdown
RawDownload

@executor/runtime-quickjs

QuickJS sandbox runtime for @executor/execution. Runs untrusted TypeScript/JavaScript in a WASM-backed interpreter with configurable timeout, memory limit, and stack size — safe enough to execute LLM-generated code that calls your registered tools.

Install

bun add @executor/execution @executor/runtime-quickjs
# or
npm install @executor/execution @executor/runtime-quickjs

Usage

Pass a makeQuickJsExecutor() as the codeExecutor when building the execution engine:

import { createExecutor } from "@executor/sdk";
import { createExecutionEngine } from "@executor/execution";
import { makeQuickJsExecutor } from "@executor/runtime-quickjs";

const executor = await createExecutor({ scope: { name: "my-app" } });

const engine = createExecutionEngine({
  executor,
  codeExecutor: makeQuickJsExecutor({
    timeoutMs: 2_000,
    memoryLimitBytes: 32 * 1024 * 1024,
    maxStackSizeBytes: 1 * 1024 * 1024,
  }),
});

Options

Option Default Description
timeoutMs 5_000 Max wall-clock time per execution
memoryLimitBytes 64 * 1MB Max memory the VM can allocate
maxStackSizeBytes 1 * 1MB Max call-stack depth

Swapping the QuickJS build

import { setQuickJSModule } from "@executor/runtime-quickjs";
import { newQuickJSAsyncWASMModuleFromVariant } from "quickjs-emscripten";
import variant from "@jitl/quickjs-ng-wasmfile-release-sync";

setQuickJSModule(await newQuickJSAsyncWASMModuleFromVariant(variant));

Use this when you want a different WASM variant (e.g. debug builds, QuickJS-NG) than the default bundled one.

Status

Pre-1.0. APIs may still change between beta releases. Part of the executor monorepo.

License

MIT