import type { KernelToHostMessage } from "../../bridge/protocol.ts"; export type ResultMessage = Extract; export type ToolCallMessage = Extract< KernelToHostMessage, { type: "tool-call" } >; export type JavaScriptKernelMode = "worker" | "inline" | "process"; export interface JavaScriptKernelOptions { readonly cwd: string; readonly hardenedCells?: boolean; readonly jitless?: boolean; readonly onMessage?: (message: KernelToHostMessage) => void; readonly parallelPoolWidth: number; readonly sessionId: string; readonly workerEntryUrl?: URL; } export interface JavaScriptRunInput { readonly cellId: string; readonly code: string; readonly onMessage?: (message: KernelToHostMessage) => void; readonly strings?: Readonly>; readonly timeoutMs?: number; } export type KernelOperation = "run" | "reset" | "interrupt"; export type LifecycleState = "open" | "closing" | "closed"; export class JavaScriptKernelClosedError extends Error { readonly name = "JavaScriptKernelClosedError"; readonly operation: KernelOperation; constructor(operation: KernelOperation) { super(`Cannot ${operation}: JavaScript kernel is closed`); this.operation = operation; } } export function assertJavaScriptKernelOpen( lifecycle: LifecycleState, operation: KernelOperation ): void { if (lifecycle !== "open") { throw new JavaScriptKernelClosedError(operation); } }