sandboxedjs 0.1.71 → 0.1.73

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/runtime/python/host-abi.ts","../src/runtime/python/protocol.ts","../src/runtime/python/sync-transport.ts","../src/kernel/open-file.ts","../src/kernel/descriptors.ts","../src/net/virtual-socket.ts","../src/runtime/python/syscall-server.ts","../src/runtime/python/syscall-client.ts","../src/fs/errno.ts","../src/fs/path.ts","../src/fs/mode.ts","../src/fs/stat.ts","../src/fs/vfs.ts","../src/runtime/memory-volume.ts"],"names":["encoder","resolve","files","st","clean"],"mappings":"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","file":"python-abi.cjs","sourcesContent":["/* Generated by python-runtime/scripts/generate_abi.py from abi/host-v1.json. Do not edit. */\n\n/** Protocol version carried in every frame. */\nexport const SBX_HOST_ABI_VERSION = 1;\n\nexport const SBX_REQUEST_HEADER_BYTES = 16;\nexport const SBX_RESPONSE_HEADER_BYTES = 20;\n\n/** Operation codes. Families are 256 apart so a family stays contiguous. */\nexport const Op = {\n handshake: 0,\n openat: 1,\n close: 2,\n read: 3,\n write: 4,\n pread: 5,\n pwrite: 6,\n lseek: 7,\n fstat: 8,\n statat: 9,\n ftruncate: 10,\n renameat: 11,\n unlinkat: 12,\n mkdirat: 13,\n readlinkat: 14,\n symlinkat: 15,\n getdents: 16,\n fsync: 17,\n dup: 256,\n dup2: 257,\n get_flags: 258,\n set_flags: 259,\n pipe: 512,\n poll: 768,\n clock_gettime: 1024,\n sleep: 1025,\n getpid: 1280,\n getcwd: 1281,\n chdir: 1282,\n environ: 1283,\n getrandom: 1536,\n socket: 1792,\n bind: 1793,\n listen: 1794,\n accept: 1795,\n connect: 1796,\n send: 1797,\n recv: 1798,\n shutdown: 1799,\n getsockname: 1800,\n getpeername: 1801,\n setsockopt: 1802,\n getsockopt: 1803,\n socket_close: 1804,\n spawn: 2048,\n waitpid: 2049,\n kill: 2050,\n} as const;\n\nexport type OpCode = (typeof Op)[keyof typeof Op];\n\n/** Canonical (Linux/musl) errno values. A negative status is `-Errno.X`. */\nexport const Errno = {\n EPERM: 1,\n ENOENT: 2,\n ESRCH: 3,\n EINTR: 4,\n EIO: 5,\n ENXIO: 6,\n E2BIG: 7,\n EBADF: 9,\n ECHILD: 10,\n EAGAIN: 11,\n ENOMEM: 12,\n EACCES: 13,\n EFAULT: 14,\n EBUSY: 16,\n EEXIST: 17,\n EXDEV: 18,\n ENODEV: 19,\n ENOTDIR: 20,\n EISDIR: 21,\n EINVAL: 22,\n ENFILE: 23,\n EMFILE: 24,\n ENOTTY: 25,\n EFBIG: 27,\n ENOSPC: 28,\n ESPIPE: 29,\n EROFS: 30,\n EMLINK: 31,\n EPIPE: 32,\n ERANGE: 34,\n ENAMETOOLONG: 36,\n ENOSYS: 38,\n ENOTEMPTY: 39,\n ELOOP: 40,\n ENODATA: 61,\n ENOTSOCK: 88,\n EPROTONOSUPPORT: 93,\n EAFNOSUPPORT: 97,\n EADDRINUSE: 98,\n EADDRNOTAVAIL: 99,\n ENETUNREACH: 101,\n ECONNRESET: 104,\n EISCONN: 106,\n ENOTCONN: 107,\n ECONNREFUSED: 111,\n EPROTO: 71,\n EOVERFLOW: 75,\n ETIMEDOUT: 110,\n ECANCELED: 125,\n EDQUOT: 122,\n} as const;\n\nexport type ErrnoName = keyof typeof Errno;\n\n/** Capability names a host may advertise in its handshake. */\nexport const CAPABILITIES = [\"files\", \"descriptors\", \"pipes\", \"readiness\", \"time\", \"identity\", \"entropy\", \"sockets\", \"processes\", \"signals\", \"storage\", \"services\", \"threads\"] as const;\n\nexport type Capability = (typeof CAPABILITIES)[number];\n\n/** Names by code, for diagnostics. Never used for dispatch. */\nexport const OP_NAMES: Record<number, string> = Object.fromEntries(\n Object.entries(Op).map(([name, code]) => [code, name]),\n);\n\nexport const ERRNO_NAMES: Record<number, string> = Object.fromEntries(\n Object.entries(Errno).map(([name, code]) => [code, name]),\n);\n","/**\n * Framing for the host ABI.\n *\n * Every field is fixed-width and little-endian, because the two sides are\n * compiled by different toolchains and a shared struct layout is the one thing\n * they cannot negotiate at runtime. Text is UTF-8; file content and network\n * traffic are raw bytes and are never decoded in transit.\n *\n * `request_id` and `process_generation` exist so a late answer can be\n * recognised as late. A worker that exits and is replaced must not have its\n * successor accept a completion addressed to the process before it, and the\n * failure mode for a mismatched frame is an error — never an empty success.\n */\n\nimport {\n Errno, OP_NAMES, SBX_HOST_ABI_VERSION, SBX_REQUEST_HEADER_BYTES, SBX_RESPONSE_HEADER_BYTES,\n} from \"./host-abi.js\";\n\nexport interface RequestHeader {\n version: number;\n op: number;\n requestId: number;\n generation: number;\n}\n\nexport interface ResponseFrame {\n header: RequestHeader;\n status: number;\n payload: Uint8Array;\n}\n\nexport class ProtocolError extends Error {\n readonly code = \"ERR_SBX_ABI_PROTOCOL\";\n}\n\nexport function encodeRequest(header: RequestHeader, payload: Uint8Array): Uint8Array {\n const frame = new Uint8Array(SBX_REQUEST_HEADER_BYTES + payload.length);\n const view = new DataView(frame.buffer);\n view.setUint16(0, header.version, true);\n view.setUint16(2, header.op, true);\n view.setUint32(4, header.requestId, true);\n view.setUint32(8, header.generation, true);\n view.setUint32(12, payload.length, true);\n frame.set(payload, SBX_REQUEST_HEADER_BYTES);\n return frame;\n}\n\nexport function decodeRequest(frame: Uint8Array): { header: RequestHeader; payload: Uint8Array } {\n if (frame.length < SBX_REQUEST_HEADER_BYTES) throw new ProtocolError(\"short request frame\");\n const view = new DataView(frame.buffer, frame.byteOffset, frame.byteLength);\n const header: RequestHeader = {\n version: view.getUint16(0, true),\n op: view.getUint16(2, true),\n requestId: view.getUint32(4, true),\n generation: view.getUint32(8, true),\n };\n const length = view.getUint32(12, true);\n if (frame.length - SBX_REQUEST_HEADER_BYTES < length) {\n throw new ProtocolError(`truncated payload for ${OP_NAMES[header.op] ?? header.op}`);\n }\n return {\n header,\n payload: frame.subarray(SBX_REQUEST_HEADER_BYTES, SBX_REQUEST_HEADER_BYTES + length),\n };\n}\n\nexport function encodeResponse(header: RequestHeader, status: number, payload: Uint8Array): Uint8Array {\n const frame = new Uint8Array(SBX_RESPONSE_HEADER_BYTES + payload.length);\n const view = new DataView(frame.buffer);\n view.setUint16(0, header.version, true);\n view.setUint16(2, header.op, true);\n view.setUint32(4, header.requestId, true);\n view.setUint32(8, header.generation, true);\n view.setInt32(12, status, true);\n view.setUint32(16, payload.length, true);\n frame.set(payload, SBX_RESPONSE_HEADER_BYTES);\n return frame;\n}\n\nexport function decodeResponse(frame: Uint8Array, expected?: RequestHeader): ResponseFrame {\n if (frame.length < SBX_RESPONSE_HEADER_BYTES) {\n /* An empty or short frame means the transport failed. Reporting it as a\n * zero-byte success is how a dead host turns into silent data loss. */\n throw new ProtocolError(\"the host ABI transport returned an incomplete frame\");\n }\n const view = new DataView(frame.buffer, frame.byteOffset, frame.byteLength);\n const header: RequestHeader = {\n version: view.getUint16(0, true),\n op: view.getUint16(2, true),\n requestId: view.getUint32(4, true),\n generation: view.getUint32(8, true),\n };\n const status = view.getInt32(12, true);\n const length = view.getUint32(16, true);\n if (frame.length - SBX_RESPONSE_HEADER_BYTES < length) throw new ProtocolError(\"truncated response payload\");\n if (expected) {\n if (header.requestId !== expected.requestId) throw new ProtocolError(\"stale response: request id mismatch\");\n if (header.generation !== expected.generation) throw new ProtocolError(\"stale response: process generation mismatch\");\n if (header.op !== expected.op) throw new ProtocolError(\"response answers a different operation\");\n }\n if (header.version !== SBX_HOST_ABI_VERSION) {\n throw new ProtocolError(`host ABI version ${header.version}, expected ${SBX_HOST_ABI_VERSION}`);\n }\n return {\n header,\n status,\n payload: frame.subarray(SBX_RESPONSE_HEADER_BYTES, SBX_RESPONSE_HEADER_BYTES + length),\n };\n}\n\n/** Little-endian reader over a payload. Bounds-checked: the guest owns this memory. */\nexport class Reader {\n private at = 0;\n private readonly view: DataView;\n private readonly bytes: Uint8Array;\n\n constructor(bytes: Uint8Array) {\n this.bytes = bytes;\n this.view = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);\n }\n\n private need(count: number): number {\n if (this.at + count > this.bytes.length) throw new ProtocolError(\"payload underrun\");\n const offset = this.at;\n this.at += count;\n return offset;\n }\n\n i32(): number { return this.view.getInt32(this.need(4), true); }\n u32(): number { return this.view.getUint32(this.need(4), true); }\n i64(): number { return Number(this.view.getBigInt64(this.need(8), true)); }\n u64(): number { return Number(this.view.getBigUint64(this.need(8), true)); }\n bytes32(): Uint8Array {\n const length = this.u32();\n const offset = this.need(length);\n return this.bytes.subarray(offset, offset + length);\n }\n string(): string { return new TextDecoder().decode(this.bytes32()); }\n get remaining(): number { return this.bytes.length - this.at; }\n}\n\n/** Little-endian writer. Grows as needed; payload sizes are bounded by the caller. */\nexport class Writer {\n private parts: Uint8Array[] = [];\n\n i32(value: number): this { const b = new Uint8Array(4); new DataView(b.buffer).setInt32(0, value, true); this.parts.push(b); return this; }\n u32(value: number): this { const b = new Uint8Array(4); new DataView(b.buffer).setUint32(0, value >>> 0, true); this.parts.push(b); return this; }\n i64(value: number): this { const b = new Uint8Array(8); new DataView(b.buffer).setBigInt64(0, BigInt(Math.trunc(value)), true); this.parts.push(b); return this; }\n u64(value: number): this { const b = new Uint8Array(8); new DataView(b.buffer).setBigUint64(0, BigInt(Math.trunc(value)), true); this.parts.push(b); return this; }\n bytes32(value: Uint8Array): this { this.u32(value.length); this.parts.push(value); return this; }\n string(value: string): this { return this.bytes32(new TextEncoder().encode(value)); }\n\n finish(): Uint8Array {\n const total = this.parts.reduce((sum, part) => sum + part.length, 0);\n const out = new Uint8Array(total);\n let at = 0;\n for (const part of this.parts) { out.set(part, at); at += part.length; }\n return out;\n }\n}\n\n/** A status the guest reads as `-errno`. */\nexport function failure(errno: number): number {\n return -Math.abs(errno);\n}\n\nexport const EOK = 0;\nexport { Errno };\n","/**\n * The transport under the host ABI: one blocking client, one non-blocking host.\n *\n * This is deliberately not `runtime/sync-channel.ts`. That channel predates the\n * ABI and carries no request identity, so a late or duplicated answer is\n * indistinguishable from the right one; worse, its server answers a failed\n * handler with a zero-length frame, which a caller can only read as a\n * successful empty result. Both are acceptable for `spawnSync`, where the\n * payload is self-describing JSON, and neither is acceptable for `read()`,\n * where an empty result means end of input.\n *\n * So the framing here always carries a full response header, a transport\n * failure is always an error, and the client verifies that the answer it got\n * belongs to the question it asked.\n *\n * Only the client blocks, and the client never owns shared state. The host\n * services requests from its ordinary event loop and may take as long as it\n * likes — which is what lets a guest's synchronous `read()` wait for a\n * keystroke that has not been typed yet.\n */\n\n/* Control-word slots over shared memory. */\nconst STATE = 0;\nconst LENGTH = 1;\nconst MORE = 2;\nconst CONTROL_WORDS = 4;\n\nconst STATE_IDLE = 0;\nconst STATE_REQUEST = 1;\nconst STATE_RESPONSE = 2;\nconst STATE_CONTINUE = 3;\nconst STATE_CLOSED = 4;\n\n/** How long a blocked client sleeps before re-checking for a closed transport. */\nconst WAIT_SLICE_MS = 200;\n\nexport interface HostTransportBuffers {\n control: SharedArrayBuffer;\n data: SharedArrayBuffer;\n}\n\nexport function createHostTransportBuffers(windowBytes = 1 << 20): HostTransportBuffers {\n return {\n control: new SharedArrayBuffer(CONTROL_WORDS * Int32Array.BYTES_PER_ELEMENT),\n data: new SharedArrayBuffer(windowBytes),\n };\n}\n\n/**\n * Can this host support a blocking guest at all?\n *\n * `SharedArrayBuffer` needs cross-origin isolation in a browser, and\n * `Atomics.wait` is forbidden on a browser's main thread — which is why the\n * blocking side is always the worker. Reporting the cause matters: without it\n * the failure surfaces as an interpreter that will not start, with nothing\n * naming the header the host is missing.\n */\nexport function syncTransportUnavailableReason(): string | null {\n if (typeof globalThis.crossOriginIsolated === \"boolean\" && !globalThis.crossOriginIsolated) {\n return \"the page is not cross-origin isolated. Serve it with Cross-Origin-Opener-Policy: same-origin and \" +\n \"Cross-Origin-Embedder-Policy: require-corp.\";\n }\n if (typeof SharedArrayBuffer !== \"function\") return \"SharedArrayBuffer is unavailable in this host.\";\n if (typeof Atomics !== \"object\" || typeof Atomics.wait !== \"function\") return \"Atomics.wait is unavailable in this host.\";\n return null;\n}\n\nexport class HostTransportError extends Error {\n code = \"ERR_SBX_HOST_TRANSPORT\";\n}\n\n/**\n * The guest side. Lives in the worker with the compiled program and blocks.\n *\n * `wake` nudges the host's event loop: the host cannot poll shared memory\n * without spinning, so each window is announced with an ordinary message.\n */\nexport class HostCallClient {\n private control: Int32Array;\n private data: Uint8Array;\n private capacity: number;\n private wake: () => void;\n private closed = false;\n\n constructor(buffers: HostTransportBuffers, wake: () => void) {\n this.control = new Int32Array(buffers.control);\n this.data = new Uint8Array(buffers.data);\n this.capacity = this.data.length;\n this.wake = wake;\n }\n\n /** Send a frame and block until the whole answer is back. Never returns empty. */\n call(request: Uint8Array): Uint8Array {\n /* A transport that has already gone away stays gone. Without this the next\n * call republishes a request over the closed marker and waits for an answer\n * from a host that is no longer listening — a killed process would hang on\n * its way out instead of exiting. */\n if (this.closed || Atomics.load(this.control, STATE) === STATE_CLOSED) {\n this.closed = true;\n throw new HostTransportError(\"the host transport is closed\");\n }\n this.send(request);\n const response = this.receive();\n if (response.length === 0) {\n throw new HostTransportError(\"the host answered with no frame; the kernel side failed or went away\");\n }\n return response;\n }\n\n private send(request: Uint8Array): void {\n let offset = 0;\n for (;;) {\n const size = Math.min(this.capacity, request.length - offset);\n this.data.set(request.subarray(offset, offset + size), 0);\n offset += size;\n Atomics.store(this.control, LENGTH, size);\n Atomics.store(this.control, MORE, offset < request.length ? 1 : 0);\n this.publish(STATE_REQUEST);\n const next = this.waitWhile(STATE_REQUEST);\n if (next === STATE_RESPONSE) return;\n if (next !== STATE_CONTINUE) {\n this.closed = true;\n throw new HostTransportError(\"the host went away mid-request\");\n }\n }\n }\n\n private receive(): Uint8Array {\n const parts: Uint8Array[] = [];\n let total = 0;\n for (;;) {\n const size = Atomics.load(this.control, LENGTH);\n parts.push(this.data.slice(0, size));\n total += size;\n if (Atomics.load(this.control, MORE) === 0) break;\n this.publish(STATE_CONTINUE);\n if (this.waitWhile(STATE_CONTINUE) !== STATE_RESPONSE) {\n this.closed = true;\n throw new HostTransportError(\"the host went away mid-response\");\n }\n }\n Atomics.store(this.control, STATE, STATE_IDLE);\n if (parts.length === 1) return parts[0];\n const joined = new Uint8Array(total);\n let at = 0;\n for (const part of parts) { joined.set(part, at); at += part.length; }\n return joined;\n }\n\n private publish(state: number): void {\n Atomics.store(this.control, STATE, state);\n Atomics.notify(this.control, STATE);\n this.wake();\n }\n\n private waitWhile(state: number): number {\n for (;;) {\n Atomics.wait(this.control, STATE, state, WAIT_SLICE_MS);\n const current = Atomics.load(this.control, STATE);\n if (current !== state) return current;\n }\n }\n}\n\n/**\n * The host side. Lives wherever the volume and the process table do, and never\n * blocks; `handle` is free to be asynchronous.\n */\nexport class HostCallServer {\n private control: Int32Array;\n private data: Uint8Array;\n private capacity: number;\n private handle: (request: Uint8Array) => Promise<Uint8Array> | Uint8Array;\n private onFault: (error: unknown) => void;\n\n private incoming: Uint8Array[] = [];\n private outgoing: Uint8Array | null = null;\n private sent = 0;\n private closed = false;\n\n constructor(\n buffers: HostTransportBuffers,\n handle: (request: Uint8Array) => Promise<Uint8Array> | Uint8Array,\n onFault: (error: unknown) => void = () => {},\n ) {\n this.control = new Int32Array(buffers.control);\n this.data = new Uint8Array(buffers.data);\n this.capacity = this.data.length;\n this.handle = handle;\n this.onFault = onFault;\n }\n\n /** Call on each wake message from the client. */\n async pump(): Promise<void> {\n if (this.closed) return;\n const state = Atomics.load(this.control, STATE);\n if (state === STATE_REQUEST) {\n const size = Atomics.load(this.control, LENGTH);\n this.incoming.push(this.data.slice(0, size));\n if (Atomics.load(this.control, MORE) === 1) {\n this.publish(STATE_CONTINUE);\n return;\n }\n const request = concat(this.incoming);\n this.incoming = [];\n let response: Uint8Array;\n try {\n response = await this.handle(request);\n } catch (error) {\n /* Anything escaping the handler is a bug in the dispatcher. Closing the\n * transport is the honest answer: the client raises, rather than\n * reading a zero-length frame as a successful empty result. */\n this.onFault(error);\n this.close();\n return;\n }\n if (this.closed) return;\n this.outgoing = response;\n this.sent = 0;\n this.sendWindow();\n return;\n }\n if (state === STATE_CONTINUE) this.sendWindow();\n }\n\n /** Release a blocked client — container teardown, or the worker being killed. */\n close(): void {\n if (this.closed) return;\n this.closed = true;\n Atomics.store(this.control, STATE, STATE_CLOSED);\n Atomics.notify(this.control, STATE);\n }\n\n private sendWindow(): void {\n const payload = this.outgoing ?? new Uint8Array();\n const size = Math.min(this.capacity, payload.length - this.sent);\n this.data.set(payload.subarray(this.sent, this.sent + size), 0);\n this.sent += size;\n Atomics.store(this.control, LENGTH, size);\n Atomics.store(this.control, MORE, this.sent < payload.length ? 1 : 0);\n this.publish(STATE_RESPONSE);\n }\n\n private publish(state: number): void {\n Atomics.store(this.control, STATE, state);\n Atomics.notify(this.control, STATE);\n }\n}\n\nfunction concat(parts: Uint8Array[]): Uint8Array {\n if (parts.length === 1) return parts[0];\n const total = parts.reduce((sum, part) => sum + part.length, 0);\n const joined = new Uint8Array(total);\n let at = 0;\n for (const part of parts) { joined.set(part, at); at += part.length; }\n return joined;\n}\n","/**\n * Open-file descriptions: the thing a descriptor points *at*.\n *\n * POSIX has three levels and collapsing any two of them produces bugs that look\n * like something else entirely:\n *\n * - a **pathname** is a directory entry, and may be renamed or removed;\n * - an **inode** is the file's identity and content, and outlives its names;\n * - an **open-file description** holds the offset and the status flags.\n *\n * `dup()` makes two descriptors share one description — so they share an offset.\n * Two separate `open()` calls on the same path make two descriptions, so their\n * offsets are independent. A file stays readable through an open description\n * after its last name is unlinked. None of that is expressible if a descriptor\n * is just a path and a number, which is why this layer exists rather than the\n * path-based {@link Vfs} calls being used directly.\n *\n * The identity used here is the volume's inode number, so a rename moves a name\n * without disturbing anything already open.\n */\n\nimport type { Vfs, Cred } from \"../fs/vfs.js\";\nimport { Errno } from \"../runtime/python/host-abi.js\";\n\n/** A failure carrying the errno the guest's libc should see. */\nexport class PosixError extends Error {\n constructor(readonly errno: number, message?: string) {\n super(message ?? `errno ${errno}`);\n this.name = \"PosixError\";\n }\n}\n\nexport const O_RDONLY = 0o0;\nexport const O_WRONLY = 0o1;\nexport const O_RDWR = 0o2;\nexport const O_CREAT = 0o100;\nexport const O_EXCL = 0o200;\nexport const O_TRUNC = 0o1000;\nexport const O_APPEND = 0o2000;\nexport const O_NONBLOCK = 0o4000;\nexport const O_DIRECTORY = 0o200000;\nexport const O_CLOEXEC = 0o2000000;\n\n/** Access mode alone, with the flag bits masked off. */\nexport function accessMode(flags: number): number {\n return flags & 0o3;\n}\n\nexport interface DescriptionStat {\n ino: number;\n mode: number;\n size: number;\n uid: number;\n gid: number;\n nlink: number;\n atimeMs: number;\n mtimeMs: number;\n ctimeMs: number;\n}\n\n/**\n * What every kind of open thing can do.\n *\n * `read` and `write` are permitted to move fewer bytes than asked for: that is\n * ordinary POSIX behaviour, and a guest that assumes otherwise is already\n * broken on Linux.\n */\nexport interface OpenFileDescription {\n readonly kind: \"file\" | \"dir\" | \"pipe\" | \"stream\" | \"socket\";\n flags: number;\n read(length: number): Uint8Array;\n write(data: Uint8Array): number;\n pread?(length: number, offset: number): Uint8Array;\n pwrite?(data: Uint8Array, offset: number): number;\n seek?(offset: number, whence: number): number;\n stat(): DescriptionStat;\n truncate?(length: number): void;\n /** Ready to read now, or at end of input (which is also \"ready\"). */\n readable(): boolean;\n /** Ready to accept at least one byte. */\n writable(): boolean;\n /** Resolves when readiness may have changed; used only to park a poll. */\n whenReady(): Promise<void>;\n /** Last reference dropped. */\n close(): void;\n}\n\nexport const SEEK_SET = 0;\nexport const SEEK_CUR = 1;\nexport const SEEK_END = 2;\n\n/* ------------------------------------------------------------------ files */\n\n/**\n * The bytes behind an open regular file.\n *\n * Content lives in the volume while a name still points at it, and moves into\n * `detached` when the last name goes away with the file still open. That is the\n * only way to honour \"an unlinked file stays readable until the last close\" on\n * top of a path-addressed volume.\n *\n * A name removed by something that does not go through this service — the\n * shell, or the Node side — cannot be intercepted, and the description will\n * then fail with ENOENT rather than reading stale bytes. Documented in\n * docs/python/abi.md; correctness holds for everything using the host ABI.\n */\nexport class Inode {\n detached: Uint8Array | null = null;\n refs = 0;\n\n constructor(\n readonly ino: number,\n public path: string,\n private readonly vfs: Vfs,\n private readonly cred: Cred,\n ) {}\n\n /** Read the whole file, wherever it currently lives. */\n contents(): Uint8Array {\n if (this.detached) return this.detached;\n try {\n return this.vfs.readFile(this.path, this.cred);\n } catch (error) {\n throw toPosixError(error);\n }\n }\n\n replace(data: Uint8Array): void {\n if (this.detached) {\n this.detached = data;\n return;\n }\n try {\n this.vfs.writeFile(this.path, data, { cred: this.cred });\n } catch (error) {\n throw toPosixError(error);\n }\n }\n\n /** Called when the last name is about to be removed. */\n detach(): void {\n if (this.detached) return;\n try {\n this.detached = this.vfs.readFile(this.path, this.cred);\n } catch {\n this.detached = new Uint8Array();\n }\n }\n\n size(): number {\n return this.contents().length;\n }\n\n stat(): DescriptionStat {\n if (this.detached) {\n return {\n ino: this.ino, mode: 0o100644, size: this.detached.length,\n uid: this.cred.uid, gid: this.cred.gid, nlink: 0,\n atimeMs: Date.now(), mtimeMs: Date.now(), ctimeMs: Date.now(),\n };\n }\n try {\n const st = this.vfs.stat(this.path, { cred: this.cred });\n return {\n ino: st.ino, mode: st.mode, size: st.size, uid: st.uid, gid: st.gid,\n nlink: st.nlink ?? 1, atimeMs: st.atimeMs, mtimeMs: st.mtimeMs, ctimeMs: st.ctimeMs,\n };\n } catch (error) {\n throw toPosixError(error);\n }\n }\n}\n\n/** One `open()`: an offset and status flags over an {@link Inode}. */\nexport class FileDescription implements OpenFileDescription {\n readonly kind = \"file\";\n offset = 0;\n\n constructor(readonly inode: Inode, public flags: number) {\n inode.refs += 1;\n }\n\n read(length: number): Uint8Array {\n if (accessMode(this.flags) === O_WRONLY) throw new PosixError(Errno.EBADF);\n const data = this.inode.contents();\n const start = Math.min(this.offset, data.length);\n const end = Math.min(start + length, data.length);\n this.offset = end;\n return data.slice(start, end);\n }\n\n pread(length: number, offset: number): Uint8Array {\n if (accessMode(this.flags) === O_WRONLY) throw new PosixError(Errno.EBADF);\n const data = this.inode.contents();\n const start = Math.min(offset, data.length);\n return data.slice(start, Math.min(start + length, data.length));\n }\n\n write(data: Uint8Array): number {\n if (accessMode(this.flags) === O_RDONLY) throw new PosixError(Errno.EBADF);\n /* O_APPEND is defined as seek-and-write as one atomic step, so the offset\n * is taken now rather than whenever the caller last seeked. */\n const at = this.flags & O_APPEND ? this.inode.size() : this.offset;\n const written = this.writeAt(data, at);\n this.offset = at + written;\n return written;\n }\n\n pwrite(data: Uint8Array, offset: number): number {\n if (accessMode(this.flags) === O_RDONLY) throw new PosixError(Errno.EBADF);\n return this.writeAt(data, offset);\n }\n\n private writeAt(data: Uint8Array, offset: number): number {\n const current = this.inode.contents();\n const end = offset + data.length;\n const next = new Uint8Array(Math.max(current.length, end));\n next.set(current, 0);\n /* A write past the end leaves a hole, which reads back as zeroes — the\n * allocation above already gives that. */\n next.set(data, offset);\n this.inode.replace(next);\n return data.length;\n }\n\n seek(offset: number, whence: number): number {\n const base =\n whence === SEEK_SET ? 0 : whence === SEEK_CUR ? this.offset : this.inode.size();\n const next = base + offset;\n if (next < 0) throw new PosixError(Errno.EINVAL);\n this.offset = next;\n return next;\n }\n\n truncate(length: number): void {\n const current = this.inode.contents();\n const next = new Uint8Array(length);\n next.set(current.subarray(0, Math.min(length, current.length)), 0);\n this.inode.replace(next);\n }\n\n stat(): DescriptionStat {\n return this.inode.stat();\n }\n\n readable(): boolean { return true; }\n writable(): boolean { return true; }\n whenReady(): Promise<void> { return Promise.resolve(); }\n\n close(): void {\n this.inode.refs -= 1;\n if (this.inode.refs <= 0) this.inode.detached = null;\n }\n}\n\n/* ------------------------------------------------------------- directories */\n\n/** An open directory: `getdents` reads from a snapshot at the description's offset. */\nexport class DirectoryDescription implements OpenFileDescription {\n readonly kind = \"dir\";\n private entries: string[] | null = null;\n private index = 0;\n\n constructor(\n readonly path: string,\n public flags: number,\n private readonly vfs: Vfs,\n private readonly cred: Cred,\n ) {}\n\n /** Entry names, NUL-terminated, as many as fit in `length`. */\n read(length: number): Uint8Array {\n if (!this.entries) {\n try {\n this.entries = [\".\", \"..\", ...this.vfs.readdir(this.path, this.cred)];\n } catch (error) {\n throw toPosixError(error);\n }\n }\n const encoder = new TextEncoder();\n const parts: Uint8Array[] = [];\n let total = 0;\n while (this.index < this.entries.length) {\n const encoded = encoder.encode(this.entries[this.index]! + \"\\0\");\n if (total + encoded.length > length) break;\n parts.push(encoded);\n total += encoded.length;\n this.index += 1;\n }\n const joined = new Uint8Array(total);\n let at = 0;\n for (const part of parts) { joined.set(part, at); at += part.length; }\n return joined;\n }\n\n write(): number { throw new PosixError(Errno.EISDIR); }\n seek(offset: number, whence: number): number {\n if (whence === SEEK_SET && offset === 0) { this.index = 0; return 0; }\n throw new PosixError(Errno.EINVAL);\n }\n\n stat(): DescriptionStat {\n try {\n const st = this.vfs.stat(this.path, { cred: this.cred });\n return {\n ino: st.ino, mode: st.mode, size: st.size, uid: st.uid, gid: st.gid,\n nlink: st.nlink ?? 2, atimeMs: st.atimeMs, mtimeMs: st.mtimeMs, ctimeMs: st.ctimeMs,\n };\n } catch (error) {\n throw toPosixError(error);\n }\n }\n\n readable(): boolean { return true; }\n writable(): boolean { return false; }\n whenReady(): Promise<void> { return Promise.resolve(); }\n close(): void {}\n}\n\n/* ------------------------------------------------------------------ pipes */\n\nconst PIPE_CAPACITY = 64 * 1024;\n\n/** The shared buffer between a pipe's two ends. */\nclass PipeBuffer {\n private chunks: Uint8Array[] = [];\n private queued = 0;\n readers = 0;\n writers = 0;\n private waiters: (() => void)[] = [];\n\n get available(): number { return this.queued; }\n get space(): number { return Math.max(0, PIPE_CAPACITY - this.queued); }\n\n push(data: Uint8Array): void {\n this.chunks.push(data);\n this.queued += data.length;\n this.wake();\n }\n\n take(length: number): Uint8Array {\n const out = new Uint8Array(Math.min(length, this.queued));\n let at = 0;\n while (at < out.length) {\n const head = this.chunks[0]!;\n const take = Math.min(head.length, out.length - at);\n out.set(head.subarray(0, take), at);\n at += take;\n if (take === head.length) this.chunks.shift();\n else this.chunks[0] = head.subarray(take);\n }\n this.queued -= out.length;\n this.wake();\n return out;\n }\n\n /** Anything that may have changed readiness for either end. */\n wake(): void {\n const waiting = this.waiters;\n this.waiters = [];\n for (const resolve of waiting) resolve();\n }\n\n whenReady(): Promise<void> {\n return new Promise((resolve) => this.waiters.push(resolve));\n }\n}\n\nexport class PipeReadEnd implements OpenFileDescription {\n readonly kind = \"pipe\";\n constructor(private readonly buffer: PipeBuffer, public flags: number) {\n buffer.readers += 1;\n }\n read(length: number): Uint8Array {\n if (this.buffer.available === 0) {\n /* No data and no writer left is end of input — zero bytes. No data with a\n * writer still attached is \"not yet\", which a blocking reader must not\n * confuse with EOF. */\n if (this.buffer.writers === 0) return new Uint8Array();\n throw new PosixError(Errno.EAGAIN);\n }\n return this.buffer.take(length);\n }\n write(): number { throw new PosixError(Errno.EBADF); }\n stat(): DescriptionStat { return pipeStat(); }\n readable(): boolean { return this.buffer.available > 0 || this.buffer.writers === 0; }\n writable(): boolean { return false; }\n whenReady(): Promise<void> { return this.buffer.whenReady(); }\n close(): void { this.buffer.readers -= 1; this.buffer.wake(); }\n}\n\nexport class PipeWriteEnd implements OpenFileDescription {\n readonly kind = \"pipe\";\n constructor(private readonly buffer: PipeBuffer, public flags: number) {\n buffer.writers += 1;\n }\n read(): Uint8Array { throw new PosixError(Errno.EBADF); }\n write(data: Uint8Array): number {\n if (this.buffer.readers === 0) throw new PosixError(Errno.EPIPE);\n const space = this.buffer.space;\n if (space === 0) throw new PosixError(Errno.EAGAIN);\n /* Accepting a prefix rather than the whole write is what gives a pipe its\n * backpressure; a writer that ignores the return value is the bug. */\n const accepted = data.subarray(0, space);\n this.buffer.push(accepted.slice());\n return accepted.length;\n }\n stat(): DescriptionStat { return pipeStat(); }\n readable(): boolean { return false; }\n writable(): boolean { return this.buffer.space > 0 || this.buffer.readers === 0; }\n whenReady(): Promise<void> { return this.buffer.whenReady(); }\n close(): void { this.buffer.writers -= 1; this.buffer.wake(); }\n}\n\nfunction pipeStat(): DescriptionStat {\n const now = Date.now();\n return { ino: 0, mode: 0o010600, size: 0, uid: 0, gid: 0, nlink: 1, atimeMs: now, mtimeMs: now, ctimeMs: now };\n}\n\nexport function createPipe(flags = 0): [PipeReadEnd, PipeWriteEnd] {\n const buffer = new PipeBuffer();\n return [new PipeReadEnd(buffer, flags | O_RDONLY), new PipeWriteEnd(buffer, flags | O_WRONLY)];\n}\n\n/* ---------------------------------------------------------------- streams */\n\n/**\n * A process's standard streams.\n *\n * Bytes, not text: the terminal boundary is where multi-byte characters get cut\n * in half, so nothing here decodes. Input arrives from the host asynchronously\n * and is queued; a blocked reader parks on {@link whenReady} rather than\n * spinning.\n */\nexport class StreamDescription implements OpenFileDescription {\n readonly kind = \"stream\";\n private queue: Uint8Array[] = [];\n private queued = 0;\n private ended = false;\n private waiters: (() => void)[] = [];\n\n constructor(\n public flags: number,\n private readonly sink: ((data: Uint8Array) => void) | null,\n readonly isTty = false,\n ) {}\n\n /** Host side: give the guest more input. */\n push(data: Uint8Array): void {\n if (data.length === 0) return;\n this.queue.push(data);\n this.queued += data.length;\n this.wake();\n }\n\n /** Host side: no more input will arrive. */\n end(): void {\n this.ended = true;\n this.wake();\n }\n\n read(length: number): Uint8Array {\n if (this.queued === 0) {\n if (this.ended) return new Uint8Array();\n throw new PosixError(Errno.EAGAIN);\n }\n const out = new Uint8Array(Math.min(length, this.queued));\n let at = 0;\n while (at < out.length) {\n const head = this.queue[0]!;\n const take = Math.min(head.length, out.length - at);\n out.set(head.subarray(0, take), at);\n at += take;\n if (take === head.length) this.queue.shift();\n else this.queue[0] = head.subarray(take);\n }\n this.queued -= out.length;\n return out;\n }\n\n write(data: Uint8Array): number {\n if (!this.sink) throw new PosixError(Errno.EBADF);\n this.sink(data);\n return data.length;\n }\n\n stat(): DescriptionStat {\n const now = Date.now();\n return {\n ino: 0, mode: this.isTty ? 0o020620 : 0o010600, size: 0, uid: 0, gid: 0,\n nlink: 1, atimeMs: now, mtimeMs: now, ctimeMs: now,\n };\n }\n\n readable(): boolean { return this.queued > 0 || this.ended; }\n writable(): boolean { return true; }\n whenReady(): Promise<void> {\n return new Promise((resolve) => this.waiters.push(resolve));\n }\n close(): void { this.wake(); }\n\n private wake(): void {\n const waiting = this.waiters;\n this.waiters = [];\n for (const resolve of waiting) resolve();\n }\n}\n\n/** Translate a volume error into the errno a guest expects. */\nexport function toPosixError(error: unknown): PosixError {\n if (error instanceof PosixError) return error;\n const code = (error as { code?: string } | null)?.code;\n const message = (error as Error | null)?.message;\n const mapped: Record<string, number> = {\n ENOENT: Errno.ENOENT, EEXIST: Errno.EEXIST, ENOTDIR: Errno.ENOTDIR,\n EISDIR: Errno.EISDIR, EACCES: Errno.EACCES, EPERM: Errno.EPERM,\n ENOTEMPTY: Errno.ENOTEMPTY, EINVAL: Errno.EINVAL, ELOOP: Errno.ELOOP,\n EXDEV: Errno.EXDEV, ENOSPC: Errno.ENOSPC, EMFILE: Errno.EMFILE,\n ENAMETOOLONG: Errno.ENAMETOOLONG, EBADF: Errno.EBADF, EPIPE: Errno.EPIPE,\n };\n return new PosixError(code && mapped[code] ? mapped[code]! : Errno.EIO, message);\n}\n","/**\n * Per-process descriptor tables, and the path operations that have to know\n * about them.\n *\n * A descriptor is a small integer plus a close-on-exec bit; everything else\n * lives in the {@link OpenFileDescription} it names. Several descriptors — in\n * one process or across a spawn — may name the same description, and that is\n * how `dup2(fd, 1)` redirects a child's output without copying anything.\n *\n * `unlink` and `rename` live here rather than being left to {@link Vfs}\n * because they are the two operations whose correctness depends on what is\n * currently open: a removed name must not take an open file's contents with\n * it, and a renamed one must not strand it.\n */\n\nimport type { Vfs, Cred } from \"../fs/vfs.js\";\nimport { Errno } from \"../runtime/python/host-abi.js\";\nimport {\n DirectoryDescription, FileDescription, Inode, PosixError, StreamDescription,\n accessMode, createPipe, toPosixError,\n O_APPEND, O_CLOEXEC, O_CREAT, O_DIRECTORY, O_EXCL, O_NONBLOCK, O_RDONLY, O_TRUNC, O_WRONLY,\n type OpenFileDescription,\n} from \"./open-file.js\";\n\n/** The status flags a guest may change after the fact. */\nconst SETTABLE_FLAGS = O_APPEND | O_NONBLOCK;\n\ninterface Slot {\n description: OpenFileDescription;\n cloexec: boolean;\n}\n\n/** Descriptors are handed out lowest-free-first, as POSIX requires. */\nexport class DescriptorTable {\n private readonly slots = new Map<number, Slot>();\n /** Descriptions this table shares with others, so close counts correctly. */\n private static readonly refs = new WeakMap<OpenFileDescription, number>();\n\n /** Install at a chosen number, closing whatever was there. */\n set(fd: number, description: OpenFileDescription, cloexec = false): number {\n if (fd < 0) throw new PosixError(Errno.EBADF);\n const existing = this.slots.get(fd);\n if (existing) this.release(existing.description);\n this.slots.set(fd, { description, cloexec });\n DescriptorTable.refs.set(description, (DescriptorTable.refs.get(description) ?? 0) + 1);\n return fd;\n }\n\n /** Install at the lowest free number at or above `from`. */\n add(description: OpenFileDescription, cloexec = false, from = 0): number {\n let fd = from;\n while (this.slots.has(fd)) fd += 1;\n return this.set(fd, description, cloexec);\n }\n\n get(fd: number): OpenFileDescription {\n const slot = this.slots.get(fd);\n if (!slot) throw new PosixError(Errno.EBADF);\n return slot.description;\n }\n\n has(fd: number): boolean { return this.slots.has(fd); }\n\n cloexec(fd: number): boolean {\n const slot = this.slots.get(fd);\n if (!slot) throw new PosixError(Errno.EBADF);\n return slot.cloexec;\n }\n\n setCloexec(fd: number, value: boolean): void {\n const slot = this.slots.get(fd);\n if (!slot) throw new PosixError(Errno.EBADF);\n slot.cloexec = value;\n }\n\n /** `dup`: a second name for one description, so the offset is shared. */\n dup(fd: number, from = 0): number {\n return this.add(this.get(fd), false, from);\n }\n\n dup2(fd: number, target: number): number {\n const description = this.get(fd);\n if (fd === target) return target;\n return this.set(target, description, false);\n }\n\n close(fd: number): void {\n const slot = this.slots.get(fd);\n if (!slot) throw new PosixError(Errno.EBADF);\n this.slots.delete(fd);\n this.release(slot.description);\n }\n\n /** Everything a child inherits: a spawn keeps all but the close-on-exec ones. */\n inherit(): DescriptorTable {\n const child = new DescriptorTable();\n for (const [fd, slot] of this.slots) {\n if (slot.cloexec) continue;\n child.set(fd, slot.description, false);\n }\n return child;\n }\n\n /** Drop every descriptor. Every resource has an owner and a cleanup path. */\n closeAll(): void {\n for (const fd of [...this.slots.keys()]) {\n try { this.close(fd); } catch { /* already gone */ }\n }\n }\n\n /** The numbers this table currently holds, in ascending order. */\n fds(): number[] {\n return [...this.slots.keys()].sort((a, b) => a - b);\n }\n\n get openCount(): number { return this.slots.size; }\n\n private release(description: OpenFileDescription): void {\n const refs = (DescriptorTable.refs.get(description) ?? 1) - 1;\n if (refs <= 0) {\n DescriptorTable.refs.delete(description);\n description.close();\n } else {\n DescriptorTable.refs.set(description, refs);\n }\n }\n}\n\n/**\n * Path operations bound to one container's volume and one process's credentials.\n *\n * Open inodes are tracked per volume so that two processes opening the same\n * file agree about its identity — which is what makes \"unlink it in one, keep\n * reading it in the other\" behave.\n */\nexport class FileService {\n private readonly openInodes = new Map<number, Inode>();\n\n constructor(private readonly vfs: Vfs, private readonly cred: Cred) {}\n\n open(path: string, flags: number, mode = 0o666): OpenFileDescription {\n const exists = this.vfs.lexists(path);\n if (flags & O_CREAT && flags & O_EXCL && exists) throw new PosixError(Errno.EEXIST);\n if (!exists) {\n if (!(flags & O_CREAT)) throw new PosixError(Errno.ENOENT);\n if (accessMode(flags) === O_RDONLY) throw new PosixError(Errno.EACCES);\n try {\n this.vfs.writeFile(path, new Uint8Array(), { cred: this.cred, mode });\n } catch (error) {\n throw toPosixError(error);\n }\n }\n\n let stat;\n try {\n stat = this.vfs.stat(path, { cred: this.cred });\n } catch (error) {\n throw toPosixError(error);\n }\n\n if (stat.isDirectory()) {\n if (accessMode(flags) !== O_RDONLY) throw new PosixError(Errno.EISDIR);\n return new DirectoryDescription(path, flags, this.vfs, this.cred);\n }\n if (flags & O_DIRECTORY) throw new PosixError(Errno.ENOTDIR);\n\n const inode = this.inodeFor(stat.ino, path);\n const description = new FileDescription(inode, flags);\n if (flags & O_TRUNC && accessMode(flags) !== O_RDONLY) description.truncate(0);\n return description;\n }\n\n /**\n * Remove a name.\n *\n * If something still has the file open, its contents move into the open\n * description first: POSIX guarantees a reader keeps reading, and a volume\n * that only knows about paths cannot provide that on its own.\n */\n unlink(path: string): void {\n let ino: number | null = null;\n try {\n ino = this.vfs.lstat(path).ino;\n } catch (error) {\n throw toPosixError(error);\n }\n const inode = ino === null ? undefined : this.openInodes.get(ino);\n if (inode && inode.refs > 0 && inode.path === path) inode.detach();\n try {\n this.vfs.unlink(path, this.cred);\n } catch (error) {\n throw toPosixError(error);\n }\n if (inode && inode.refs <= 0) this.openInodes.delete(ino!);\n }\n\n /** Rename a name. Anything already open follows the file to its new name. */\n rename(from: string, to: string): void {\n let ino: number | null = null;\n try { ino = this.vfs.lstat(from).ino; } catch { /* the rename will report it */ }\n try {\n this.vfs.rename(from, to, this.cred);\n } catch (error) {\n throw toPosixError(error);\n }\n if (ino === null) return;\n const inode = this.openInodes.get(ino);\n if (inode) inode.path = to;\n }\n\n /** One {@link Inode} per file identity, shared by every open description. */\n private inodeFor(ino: number, path: string): Inode {\n const existing = this.openInodes.get(ino);\n if (existing) {\n existing.path = path;\n return existing;\n }\n const created = new Inode(ino, path, this.vfs, this.cred);\n this.openInodes.set(ino, created);\n return created;\n }\n}\n\nexport { createPipe, StreamDescription, PosixError };\nexport type { OpenFileDescription };\nexport { O_APPEND, O_CLOEXEC, O_CREAT, O_DIRECTORY, O_EXCL, O_NONBLOCK, O_RDONLY, O_TRUNC, O_WRONLY, SETTABLE_FLAGS };\n","import { Errno } from \"../runtime/python/host-abi.js\";\nimport { PosixError } from \"../kernel/open-file.js\";\nimport type { DescriptionStat, OpenFileDescription } from \"../kernel/open-file.js\";\n\nexport interface VirtualSocketAddress {\n address: string;\n port: number;\n}\n\nexport interface VirtualSocketPeer {\n data(bytes: Uint8Array): void;\n close(): void;\n}\n\n/** A bounded byte queue used by one direction of a virtual TCP connection. */\nclass ByteQueue {\n private chunks: Uint8Array[] = [];\n private length = 0;\n private readonly waiters = new Set<() => void>();\n\n push(bytes: Uint8Array): void {\n if (bytes.length === 0) return;\n const copy = bytes.slice();\n this.chunks.push(copy);\n this.length += copy.length;\n this.wake();\n }\n\n take(max: number): Uint8Array {\n if (max <= 0 || this.length === 0) return new Uint8Array();\n const out = new Uint8Array(Math.min(max, this.length));\n let at = 0;\n while (at < out.length) {\n const chunk = this.chunks[0]!;\n const count = Math.min(chunk.length, out.length - at);\n out.set(chunk.subarray(0, count), at);\n at += count;\n this.length -= count;\n if (count === chunk.length) this.chunks.shift();\n else this.chunks[0] = chunk.subarray(count);\n }\n return out;\n }\n\n get size(): number { return this.length; }\n whenChanged(): Promise<void> {\n return new Promise((resolve) => this.waiters.add(resolve));\n }\n wake(): void {\n for (const resolve of this.waiters) resolve();\n this.waiters.clear();\n }\n}\n\n/** One endpoint of a host-owned in-memory TCP stream. */\nexport class VirtualTcpConnection {\n private readonly incoming = new ByteQueue();\n private peer: VirtualTcpConnection | null = null;\n private readClosed = false;\n private writeClosed = false;\n private closed = false;\n\n readonly local: VirtualSocketAddress;\n readonly remote: VirtualSocketAddress;\n\n constructor(local: VirtualSocketAddress, remote: VirtualSocketAddress) {\n this.local = local;\n this.remote = remote;\n }\n\n pairWith(peer: VirtualTcpConnection): void { this.peer = peer; }\n\n get eof(): boolean { return this.readClosed || (this.incoming.size === 0 && this.peer?.writeClosed === true); }\n get readable(): boolean { return this.incoming.size > 0 || this.eof; }\n get writable(): boolean { return !this.writeClosed && !this.closed && this.peer !== null && !this.peer.readClosed; }\n\n read(maxLength: number): Uint8Array {\n if (this.incoming.size > 0) return this.incoming.take(maxLength);\n if (this.eof) return new Uint8Array();\n throw new PosixError(Errno.EAGAIN, \"socket read would block\");\n }\n\n write(bytes: Uint8Array): number {\n if (!this.writable) throw new PosixError(this.closed || this.writeClosed ? Errno.EPIPE : Errno.ECONNRESET);\n this.peer!.incoming.push(bytes);\n return bytes.length;\n }\n\n async waitForChange(): Promise<void> {\n if (this.readable || this.closed) return;\n await this.incoming.whenChanged();\n }\n\n shutdown(read: boolean, write: boolean): void {\n if (read) this.readClosed = true;\n if (write) {\n this.writeClosed = true;\n if (this.peer) this.peer.incoming.wake();\n }\n this.incoming.wake();\n this.peer?.incoming.wake();\n }\n\n close(): void {\n if (this.closed) return;\n this.closed = true;\n this.readClosed = true;\n this.writeClosed = true;\n if (this.peer) {\n this.peer.readClosed = true;\n this.peer.incoming.wake();\n }\n this.incoming.wake();\n }\n}\n\nexport interface VirtualTcpAccepted {\n connection: VirtualTcpConnection;\n peer: VirtualSocketAddress;\n}\n\n/** A host-owned TCP listener with a POSIX-style accept backlog. */\nexport class VirtualTcpListener {\n private readonly pending: VirtualTcpConnection[] = [];\n private readonly waiters = new Set<() => void>();\n private closed = false;\n\n constructor(\n readonly port: number,\n readonly address = \"0.0.0.0\",\n readonly backlog = 128,\n ) {}\n\n enqueue(connection: VirtualTcpConnection): void {\n if (this.closed) {\n connection.close();\n throw new PosixError(Errno.ECONNREFUSED, \"listener is closed\");\n }\n if (this.pending.length >= this.backlog) {\n connection.close();\n throw new PosixError(Errno.EAGAIN, \"listener backlog is full\");\n }\n this.pending.push(connection);\n this.wake();\n }\n\n accept(): VirtualTcpAccepted {\n const connection = this.pending.shift();\n if (!connection) {\n if (this.closed) throw new PosixError(Errno.EBADF, \"listener is closed\");\n throw new PosixError(Errno.EAGAIN, \"listener accept would block\");\n }\n return { connection, peer: connection.remote };\n }\n\n get readable(): boolean { return this.pending.length > 0 || this.closed; }\n get isClosed(): boolean { return this.closed; }\n\n async waitForChange(): Promise<void> {\n if (this.readable) return;\n await new Promise<void>((resolve) => this.waiters.add(resolve));\n }\n\n close(): void {\n if (this.closed) return;\n this.closed = true;\n for (const connection of this.pending.splice(0)) connection.close();\n this.wake();\n }\n\n private wake(): void {\n for (const resolve of this.waiters) resolve();\n this.waiters.clear();\n }\n}\n\n/** POSIX socket lifecycle over the host-owned virtual network. */\nexport class VirtualTcpSocket {\n private listenerValue: VirtualTcpListener | null = null;\n private connectionValue: VirtualTcpConnection | null = null;\n private boundPort = 0;\n private boundAddress = \"0.0.0.0\";\n\n constructor(private readonly network: VirtualTcpNetwork) {}\n\n bind(address: string, port: number): void {\n if (this.listenerValue || this.connectionValue || this.boundPort !== 0) {\n throw new PosixError(Errno.EINVAL, \"socket is already bound\");\n }\n this.boundAddress = address;\n this.boundPort = port;\n }\n\n listen(backlog: number): void {\n if (this.listenerValue) return;\n if (this.boundPort === 0) {\n const port = this.findEphemeralPort();\n this.boundPort = port;\n }\n this.listenerValue = this.network.listen(this.boundPort, this.boundAddress, backlog);\n }\n\n connect(port: number, address = \"127.0.0.1\"): void {\n if (this.listenerValue || this.connectionValue) throw new PosixError(Errno.EISCONN);\n this.connectionValue = this.network.connect(port, this.boundPort, this.boundAddress);\n this.boundPort = this.connectionValue.local.port;\n this.boundAddress = this.connectionValue.local.address;\n void address;\n }\n\n accept(): VirtualTcpSocket {\n if (!this.listenerValue) throw new PosixError(Errno.EINVAL, \"socket is not listening\");\n const accepted = this.listenerValue.accept().connection;\n const socket = new VirtualTcpSocket(this.network);\n socket.connectionValue = accepted;\n socket.boundPort = accepted.local.port;\n socket.boundAddress = accepted.local.address;\n return socket;\n }\n\n get listener(): VirtualTcpListener | null { return this.listenerValue; }\n get connection(): VirtualTcpConnection | null { return this.connectionValue; }\n get local(): VirtualSocketAddress { return { address: this.boundAddress, port: this.boundPort }; }\n get remote(): VirtualSocketAddress | null { return this.connectionValue?.remote ?? null; }\n get readable(): boolean { return this.listenerValue?.readable ?? this.connectionValue?.readable ?? false; }\n get writable(): boolean { return this.connectionValue?.writable ?? false; }\n waitForChange(): Promise<void> { return (this.listenerValue ?? this.connectionValue)?.waitForChange() ?? Promise.resolve(); }\n read(length: number): Uint8Array { if (!this.connectionValue) throw new PosixError(Errno.EINVAL); return this.connectionValue.read(length); }\n write(data: Uint8Array): number { if (!this.connectionValue) throw new PosixError(Errno.EINVAL); return this.connectionValue.write(data); }\n shutdown(read: boolean, write: boolean): void { if (!this.connectionValue) throw new PosixError(Errno.ENOTCONN); this.connectionValue.shutdown(read, write); }\n close(): void {\n if (this.listenerValue) this.network.close(this.listenerValue);\n this.connectionValue?.close();\n this.listenerValue = null;\n this.connectionValue = null;\n }\n\n private findEphemeralPort(): number {\n for (let port = 49152; port <= 65535; port += 1) if (!this.network.hasListener(port)) return port;\n throw new PosixError(Errno.EADDRINUSE, \"no ephemeral ports available\");\n }\n}\n\n/** Descriptor-table view of a POSIX socket. */\nexport class SocketDescription implements OpenFileDescription {\n readonly kind = \"socket\" as const;\n flags: number;\n private readonly resource: VirtualTcpSocket;\n private closed = false;\n private readonly options = new Map<string, Uint8Array>();\n\n constructor(resource: VirtualTcpSocket, flags = 0) {\n this.resource = resource;\n this.flags = flags;\n }\n\n get listener(): VirtualTcpListener | null {\n return this.resource.listener;\n }\n\n get connection(): VirtualTcpConnection | null {\n return this.resource.connection;\n }\n\n read(length: number): Uint8Array {\n return this.resource.read(length);\n }\n\n write(data: Uint8Array): number {\n return this.resource.write(data);\n }\n\n readable(): boolean { return this.resource.readable; }\n writable(): boolean { return this.resource.writable; }\n whenReady(): Promise<void> { return this.resource.waitForChange(); }\n\n stat(): DescriptionStat {\n return {\n ino: 0, mode: 0o140777, size: 0, uid: 0, gid: 0, nlink: 1,\n atimeMs: Date.now(), mtimeMs: Date.now(), ctimeMs: Date.now(),\n };\n }\n\n close(): void {\n if (this.closed) return;\n this.closed = true;\n this.resource.close();\n }\n\n bind(address: string, port: number): void { this.resource.bind(address, port); }\n listen(backlog: number): void { this.resource.listen(backlog); }\n connect(address: string, port: number): void { this.resource.connect(port, address); }\n accept(): SocketDescription { return new SocketDescription(this.resource.accept(), this.flags); }\n shutdown(read: boolean, write: boolean): void { this.resource.shutdown(read, write); }\n setOption(level: number, option: number, value: Uint8Array): void { this.options.set(`${level}:${option}`, value.slice()); }\n getOption(level: number, option: number): Uint8Array { return this.options.get(`${level}:${option}`)?.slice() ?? new Uint8Array(4); }\n localAddress(): VirtualSocketAddress { return this.resource.local; }\n peerAddress(): VirtualSocketAddress {\n const peer = this.resource.remote;\n if (!peer) throw new PosixError(Errno.ENOTCONN);\n return peer;\n }\n}\n\n/** Shared port authority for all in-container TCP listeners. */\nexport class VirtualTcpNetwork {\n private readonly listeners = new Map<number, VirtualTcpListener>();\n\n constructor(private readonly occupied?: (port: number) => boolean) {}\n\n listen(port: number, address = \"0.0.0.0\", backlog = 128): VirtualTcpListener {\n if (this.listeners.has(port) || this.occupied?.(port)) throw new PosixError(Errno.EADDRINUSE, `port ${port} is already in use`);\n const listener = new VirtualTcpListener(port, address, backlog);\n this.listeners.set(port, listener);\n return listener;\n }\n\n close(listener: VirtualTcpListener): void {\n if (this.listeners.get(listener.port) !== listener) return;\n this.listeners.delete(listener.port);\n listener.close();\n }\n\n connect(port: number, localPort = 0, localAddress = \"127.0.0.1\"): VirtualTcpConnection {\n const listener = this.listeners.get(port);\n if (!listener || listener.isClosed) throw new PosixError(Errno.ECONNREFUSED, `port ${port} is not listening`);\n const client = new VirtualTcpConnection(\n { address: localAddress, port: localPort },\n { address: listener.address, port },\n );\n const server = new VirtualTcpConnection(\n { address: listener.address, port },\n { address: localAddress, port: localPort },\n );\n client.pairWith(server);\n server.pairWith(client);\n listener.enqueue(server);\n return client;\n }\n\n hasListener(port: number): boolean { return this.listeners.has(port); }\n ports(): number[] { return [...this.listeners.keys()].sort((a, b) => a - b); }\n closeAll(): void {\n for (const listener of [...this.listeners.values()]) this.close(listener);\n }\n}\n","/**\n * The kernel side of the host ABI: turn frames into real operations.\n *\n * This runs on whichever thread owns the volume and the process table, and it\n * never blocks. A guest that asks to read a terminal with nothing typed yet\n * parks in `Atomics.wait` inside its own worker; the handler here simply\n * awaits {@link OpenFileDescription.whenReady} and answers when input arrives.\n * That asymmetry is the whole reason a synchronous `read()` can exist at all\n * without freezing the host — and it is why keyboard input must be delivered to\n * *this* side rather than to the worker that is blocked waiting for it.\n */\n\nimport type { Vfs, Cred } from \"../../fs/vfs.js\";\nimport { DescriptorTable, FileService } from \"../../kernel/descriptors.js\";\nimport {\n PosixError, SEEK_SET, StreamDescription, createPipe, toPosixError,\n O_CLOEXEC, O_NONBLOCK, accessMode,\n type OpenFileDescription,\n} from \"../../kernel/open-file.js\";\nimport { CAPABILITIES, Errno, Op, SBX_HOST_ABI_VERSION } from \"./host-abi.js\";\nimport { Reader, Writer, decodeRequest, encodeResponse, failure, type RequestHeader } from \"./protocol.js\";\nimport { SocketDescription, VirtualTcpNetwork, VirtualTcpSocket } from \"../../net/virtual-socket.js\";\n\n/** Everything one guest process is allowed to see. */\nexport interface HostAbiProcess {\n readonly pid: number;\n readonly ppid: number;\n readonly generation: number;\n readonly vfs: Vfs;\n readonly cred: Cred;\n readonly table: DescriptorTable;\n readonly env: Record<string, string>;\n cwd: string;\n /** Aborts when the process is killed; wakes anything parked in a call. */\n readonly signal: AbortSignal;\n readonly sockets?: VirtualTcpNetwork;\n /**\n * How this process makes another one.\n *\n * There is no fork in WebAssembly, so process creation cannot be a libc\n * detail the guest performs on its own — it is a service, like the\n * filesystem. A host that does not supply this reports ENOSYS to every\n * spawn, which is the honest answer and not a crash: a container with no\n * process table genuinely cannot start a child.\n */\n readonly processes?: ProcessService;\n}\n\n/** The descriptors a child is to be given, by the numbers it will see. */\nexport interface SpawnRequest {\n readonly argv: string[];\n readonly env: Record<string, string>;\n readonly cwd: string;\n /** `child fd` → the parent's open file description behind it. */\n readonly files: Map<number, OpenFileDescription>;\n}\n\nexport interface ProcessService {\n spawn(request: SpawnRequest): Promise<number>;\n /**\n * Reap one child. Returns the pid and its wait status, or a pid of 0 when\n * `WNOHANG` was asked for and nothing has exited yet.\n */\n wait(pid: number, options: number): Promise<{ pid: number; status: number }>;\n kill(pid: number, signal: number): void;\n}\n\nconst MAX_TRANSFER = 8 * 1024 * 1024;\n\n/* poll(2) event bits, matching the values `_sbx_socket` and musl/emscripten\n * agree on. Module scope because `poll()` below is a hoisted declaration that\n * runs long after `createHostAbiServer` has returned — a `const` placed after\n * that `return` would sit in the temporal dead zone forever and every poll\n * would throw `ReferenceError` (surfacing in the guest as OSError EIO). */\nconst POLLIN = 0x001;\nconst POLLOUT = 0x004;\nconst POLLHUP = 0x010;\n\n/* The only socket this stack is: an IPv4 TCP stream. Named rather than spelled\n * as literals because the check that uses them is what a guest sees as\n * \"unsupported\", and a bare `2` there reads as a magic number. */\nconst AF_INET = 2;\nconst SOCK_STREAM = 1;\nconst IPPROTO_TCP = 6;\n\nexport function createHostAbiServer(proc: HostAbiProcess): (frame: Uint8Array) => Promise<Uint8Array> {\n const files = new FileService(proc.vfs, proc.cred);\n const started = Date.now();\n const monotonicBase = typeof performance === \"object\" ? performance.now() : 0;\n\n return async (frame: Uint8Array): Promise<Uint8Array> => {\n const { header, payload } = decodeRequest(frame);\n if (header.version !== SBX_HOST_ABI_VERSION) {\n return encodeResponse(header, failure(Errno.EPROTO), new Uint8Array());\n }\n if (header.generation !== proc.generation) {\n /* A frame from a previous incarnation of this process. Refusing it is the\n * point: PID reuse must never let a stale completion land on a live\n * descriptor table. */\n return encodeResponse(header, failure(Errno.ESRCH), new Uint8Array());\n }\n try {\n const { status, payload: out } = await dispatch(header, new Reader(payload));\n return encodeResponse(header, status, out ?? new Uint8Array());\n } catch (error) {\n const posix = toPosixError(error);\n return encodeResponse(header, failure(posix.errno), new Uint8Array());\n }\n };\n\n async function dispatch(\n header: RequestHeader,\n r: Reader,\n ): Promise<{ status: number; payload?: Uint8Array }> {\n switch (header.op) {\n case Op.handshake: {\n const w = new Writer().u32(SBX_HOST_ABI_VERSION).u32(CAPABILITIES.length);\n for (const capability of CAPABILITIES) {\n /* Only the families this build actually serves are advertised; a\n * guest must be able to tell \"not implemented\" from \"not present\". */\n w.string(capability).u32(implemented(capability) ? 1 : 0);\n }\n return { status: 0, payload: w.finish() };\n }\n\n /* ------------------------------------------------------------ files */\n case Op.openat: {\n const path = resolve(r.string());\n const flags = r.u32();\n const mode = r.u32();\n const description = files.open(path, flags, mode);\n return { status: proc.table.add(description, (flags & O_CLOEXEC) !== 0) };\n }\n case Op.close: {\n proc.table.close(r.i32());\n return { status: 0 };\n }\n case Op.read: {\n const description = proc.table.get(r.i32());\n const length = clamp(r.u32());\n const data = await readBlocking(description, length);\n return { status: data.length, payload: data };\n }\n case Op.write: {\n const description = proc.table.get(r.i32());\n const data = r.bytes32();\n const written = await writeBlocking(description, data);\n return { status: written };\n }\n case Op.pread: {\n const description = proc.table.get(r.i32());\n const length = clamp(r.u32());\n const offset = r.u64();\n if (!description.pread) throw new PosixError(Errno.ESPIPE);\n const data = description.pread(length, offset);\n return { status: data.length, payload: data };\n }\n case Op.pwrite: {\n const description = proc.table.get(r.i32());\n const data = r.bytes32();\n const offset = r.u64();\n if (!description.pwrite) throw new PosixError(Errno.ESPIPE);\n return { status: description.pwrite(data, offset) };\n }\n case Op.lseek: {\n const description = proc.table.get(r.i32());\n const offset = r.i64();\n const whence = r.u32();\n if (!description.seek) throw new PosixError(Errno.ESPIPE);\n return { status: 0, payload: new Writer().i64(description.seek(offset, whence)).finish() };\n }\n case Op.fstat: {\n return { status: 0, payload: encodeStat(proc.table.get(r.i32()).stat()) };\n }\n case Op.statat: {\n const path = resolve(r.string());\n const followLinks = r.u32() !== 0;\n try {\n const st = followLinks ? proc.vfs.stat(path, { cred: proc.cred }) : proc.vfs.lstat(path);\n return {\n status: 0,\n payload: encodeStat({\n ino: st.ino, mode: st.mode, size: st.size, uid: st.uid, gid: st.gid,\n nlink: st.nlink ?? 1, atimeMs: st.atimeMs, mtimeMs: st.mtimeMs, ctimeMs: st.ctimeMs,\n }),\n };\n } catch (error) {\n throw toPosixError(error);\n }\n }\n case Op.ftruncate: {\n const description = proc.table.get(r.i32());\n const length = r.u64();\n if (!description.truncate) throw new PosixError(Errno.EINVAL);\n description.truncate(length);\n return { status: 0 };\n }\n case Op.renameat: {\n files.rename(resolve(r.string()), resolve(r.string()));\n return { status: 0 };\n }\n case Op.unlinkat: {\n const path = resolve(r.string());\n const removeDirectory = r.u32() !== 0;\n if (removeDirectory) {\n try { proc.vfs.rmdir(path, proc.cred); } catch (error) { throw toPosixError(error); }\n } else {\n files.unlink(path);\n }\n return { status: 0 };\n }\n case Op.mkdirat: {\n const path = resolve(r.string());\n const mode = r.u32();\n try { proc.vfs.mkdir(path, { mode, cred: proc.cred }); } catch (error) { throw toPosixError(error); }\n return { status: 0 };\n }\n case Op.readlinkat: {\n try {\n const target = proc.vfs.readlink(resolve(r.string()), proc.cred);\n return { status: 0, payload: new Writer().string(target).finish() };\n } catch (error) { throw toPosixError(error); }\n }\n case Op.symlinkat: {\n const target = r.string();\n try { proc.vfs.symlink(target, resolve(r.string()), proc.cred); } catch (error) { throw toPosixError(error); }\n return { status: 0 };\n }\n case Op.getdents: {\n const description = proc.table.get(r.i32());\n if (description.kind !== \"dir\") throw new PosixError(Errno.ENOTDIR);\n const data = description.read(clamp(r.u32()));\n return { status: data.length, payload: data };\n }\n case Op.fsync: {\n proc.table.get(r.i32());\n /* The volume commits on write today; when a journalled storage\n * authority lands this becomes a real barrier. */\n return { status: 0 };\n }\n\n /* ------------------------------------------------------ descriptors */\n case Op.dup: return { status: proc.table.dup(r.i32(), r.u32()) };\n case Op.dup2: return { status: proc.table.dup2(r.i32(), r.i32()) };\n case Op.get_flags: {\n const fd = r.i32();\n const description = proc.table.get(fd);\n return { status: 0, payload: new Writer().u32(description.flags).u32(proc.table.cloexec(fd) ? 1 : 0).finish() };\n }\n case Op.set_flags: {\n const fd = r.i32();\n const flags = r.u32();\n const cloexec = r.u32();\n const description = proc.table.get(fd);\n /* Only the status flags may change; the access mode was fixed at open. */\n description.flags = accessMode(description.flags) | (flags & ~0o3);\n proc.table.setCloexec(fd, cloexec !== 0);\n return { status: 0 };\n }\n\n /* ------------------------------------------------------------ pipes */\n case Op.pipe: {\n const flags = r.u32();\n const [readEnd, writeEnd] = createPipe(flags & O_NONBLOCK);\n const cloexec = (flags & O_CLOEXEC) !== 0;\n const readFd = proc.table.add(readEnd, cloexec);\n const writeFd = proc.table.add(writeEnd, cloexec);\n return { status: 0, payload: new Writer().i32(readFd).i32(writeFd).finish() };\n }\n\n /* -------------------------------------------------------- readiness */\n case Op.poll: {\n const count = r.u32();\n const requests: { fd: number; events: number }[] = [];\n for (let i = 0; i < count; i += 1) requests.push({ fd: r.i32(), events: r.u32() });\n const timeoutMs = r.i64();\n const ready = await poll(requests, timeoutMs);\n const w = new Writer().u32(ready.length);\n for (const entry of ready) w.i32(entry.fd).u32(entry.revents);\n return { status: ready.length, payload: w.finish() };\n }\n\n /* ------------------------------------------------------------- time */\n case Op.clock_gettime: {\n const monotonic = r.u32() !== 0;\n const now = monotonic\n ? (typeof performance === \"object\" ? performance.now() : Date.now() - started) - monotonicBase\n : Date.now();\n const nanos = Math.round(now * 1e6);\n return { status: 0, payload: new Writer().i64(Math.floor(nanos / 1e9)).u32(nanos % 1e9).finish() };\n }\n case Op.sleep: {\n const nanos = r.u64();\n await sleep(nanos / 1e6);\n return { status: proc.signal.aborted ? failure(Errno.EINTR) : 0 };\n }\n\n /* --------------------------------------------------------- identity */\n case Op.getpid: {\n const w = new Writer()\n .i32(proc.pid).i32(proc.ppid)\n .u32(proc.cred.uid).u32(proc.cred.gid).u32(proc.cred.umask ?? 0o022);\n return { status: 0, payload: w.finish() };\n }\n case Op.getcwd: return { status: 0, payload: new Writer().string(proc.cwd).finish() };\n case Op.chdir: {\n const path = resolve(r.string());\n let st;\n try { st = proc.vfs.stat(path, { cred: proc.cred }); } catch (error) { throw toPosixError(error); }\n if (!st.isDirectory()) throw new PosixError(Errno.ENOTDIR);\n proc.cwd = path;\n return { status: 0 };\n }\n case Op.environ: {\n const joined = Object.entries(proc.env).map(([key, value]) => `${key}=${value}`).join(\"\\0\");\n return { status: 0, payload: new Writer().string(joined).finish() };\n }\n\n /* --------------------------------------------------------- processes */\n case Op.spawn: {\n const argv: string[] = [];\n for (let i = 0, n = r.u32(); i < n; i++) argv.push(r.string());\n const env: Record<string, string> = {};\n for (let i = 0, n = r.u32(); i < n; i++) {\n const entry = r.string();\n const split = entry.indexOf(\"=\");\n if (split > 0) env[entry.slice(0, split)] = entry.slice(split + 1);\n }\n const cwd = r.string() || proc.cwd;\n const files = new Map<number, OpenFileDescription>();\n for (let i = 0, n = r.u32(); i < n; i++) {\n const childFd = r.u32() | 0;\n const parentFd = r.u32() | 0;\n /* A named descriptor that is not open raises EBADF here rather than\n * starting the child with a hole it has no way to detect. */\n files.set(childFd, proc.table.get(parentFd));\n }\n if (!proc.processes) throw new PosixError(Errno.ENOSYS);\n if (argv.length === 0) throw new PosixError(Errno.EINVAL);\n return { status: await proc.processes.spawn({ argv, env, cwd: resolve(cwd), files }) };\n }\n case Op.waitpid: {\n const pid = r.u32() | 0;\n const options = r.u32() | 0;\n if (!proc.processes) throw new PosixError(Errno.ENOSYS);\n const result = await Promise.race([\n proc.processes.wait(pid, options),\n aborted().then(() => { throw new PosixError(Errno.EINTR); }),\n ]);\n return { status: 0, payload: new Writer().i32(result.pid).i32(result.status).finish() };\n }\n case Op.kill: {\n const pid = r.u32() | 0;\n const signal = r.u32() | 0;\n if (!proc.processes) throw new PosixError(Errno.ENOSYS);\n proc.processes.kill(pid, signal);\n return { status: 0 };\n }\n\n /* ---------------------------------------------------------- entropy */\n case Op.getrandom: {\n const length = Math.min(r.u32(), 65536);\n const bytes = new Uint8Array(length);\n crypto.getRandomValues(bytes);\n return { status: length, payload: bytes };\n }\n\n /* ----------------------------------------------------------- sockets */\n case Op.socket: {\n const family = r.u32();\n const type = r.u32();\n const protocol = r.i32();\n /* `0` means \"the default protocol for this socket type\", and for a\n * stream socket that default *is* TCP — so `IPPROTO_TCP` names the\n * same socket and must be accepted. It is not an exotic request:\n * `getaddrinfo` fills the protocol in, so every address it resolves\n * arrives here as 6, and `asyncio.create_server` passes that straight\n * to `socket()`. Refusing it made every asyncio server fail as\n * \"could not bind on any address\" — create_server swallows the\n * socket() error and only reports the empty list afterwards. */\n if (family !== AF_INET || (type & 0xf) !== SOCK_STREAM) throw new PosixError(Errno.EAFNOSUPPORT);\n if (protocol !== 0 && protocol !== IPPROTO_TCP) throw new PosixError(Errno.EPROTONOSUPPORT);\n if (!proc.sockets) throw new PosixError(Errno.ENOSYS);\n return { status: proc.table.add(new SocketDescription(new VirtualTcpSocket(proc.sockets))) };\n }\n case Op.bind: {\n const description = socketDescription(proc.table.get(r.i32()));\n description.bind(r.string(), r.u32());\n return { status: 0 };\n }\n case Op.listen: {\n const description = socketDescription(proc.table.get(r.i32()));\n description.listen(Math.max(1, Math.min(1024, r.u32())));\n return { status: 0 };\n }\n case Op.accept: {\n const description = socketDescription(proc.table.get(r.i32()));\n const accepted = await acceptBlocking(description);\n const fd = proc.table.add(accepted);\n const peer = accepted.peerAddress();\n return { status: fd, payload: new Writer().string(peer.address).u32(peer.port).finish() };\n }\n case Op.connect: {\n const description = socketDescription(proc.table.get(r.i32()));\n description.connect(r.string(), r.u32());\n return { status: 0 };\n }\n case Op.send: {\n const description = socketDescription(proc.table.get(r.i32()));\n return { status: await writeBlocking(description, r.bytes32()) };\n }\n case Op.recv: {\n const description = socketDescription(proc.table.get(r.i32()));\n const data = await readBlocking(description, clamp(r.u32()));\n return { status: data.length, payload: data };\n }\n case Op.shutdown: {\n const description = socketDescription(proc.table.get(r.i32()));\n const how = r.u32();\n if (how > 2) throw new PosixError(Errno.EINVAL);\n description.shutdown(how === 0 || how === 2, how === 1 || how === 2);\n return { status: 0 };\n }\n case Op.getsockname: {\n const address = socketDescription(proc.table.get(r.i32())).localAddress();\n return { status: 0, payload: new Writer().string(address.address).u32(address.port).finish() };\n }\n case Op.getpeername: {\n const address = socketDescription(proc.table.get(r.i32())).peerAddress();\n return { status: 0, payload: new Writer().string(address.address).u32(address.port).finish() };\n }\n case Op.setsockopt: {\n const description = socketDescription(proc.table.get(r.i32()));\n description.setOption(r.u32(), r.u32(), r.bytes32());\n return { status: 0 };\n }\n case Op.getsockopt: {\n const description = socketDescription(proc.table.get(r.i32()));\n return { status: 0, payload: new Writer().bytes32(description.getOption(r.u32(), r.u32())).finish() };\n }\n\n default:\n return { status: failure(Errno.ENOSYS) };\n }\n }\n\n /** Which capability families this build actually serves. */\n function implemented(capability: string): boolean {\n return [\"files\", \"descriptors\", \"pipes\", \"readiness\", \"time\", \"identity\", \"entropy\"].includes(capability) ||\n (capability === \"sockets\" && proc.sockets !== undefined);\n }\n\n function resolve(path: string): string {\n if (path.startsWith(\"/\")) return proc.vfs.resolvePath(path);\n return proc.vfs.resolvePath(`${proc.cwd.replace(/\\/$/, \"\")}/${path}`);\n }\n\n function clamp(length: number): number {\n return Math.min(length, MAX_TRANSFER);\n }\n\n function socketDescription(description: OpenFileDescription): SocketDescription {\n if (!(description instanceof SocketDescription)) throw new PosixError(Errno.ENOTSOCK, \"descriptor is not a socket\");\n return description;\n }\n\n async function acceptBlocking(description: SocketDescription): Promise<SocketDescription> {\n for (;;) {\n try { return description.accept(); }\n catch (error) {\n const posix = toPosixError(error);\n if (posix.errno !== Errno.EAGAIN || description.flags & O_NONBLOCK) throw posix;\n }\n await Promise.race([description.whenReady(), aborted()]);\n if (proc.signal.aborted) throw new PosixError(Errno.EINTR);\n }\n }\n\n /**\n * A read that waits.\n *\n * `O_NONBLOCK` gets EAGAIN as it should; everything else waits here, on the\n * host's event loop, until the description has something or reaches end of\n * input. The caller is parked in its own worker and pays nothing for it.\n */\n async function readBlocking(description: OpenFileDescription, length: number): Promise<Uint8Array> {\n for (;;) {\n try {\n return description.read(length);\n } catch (error) {\n const posix = toPosixError(error);\n if (posix.errno !== Errno.EAGAIN || description.flags & O_NONBLOCK) throw posix;\n }\n await Promise.race([description.whenReady(), aborted()]);\n if (proc.signal.aborted) throw new PosixError(Errno.EINTR);\n }\n }\n\n async function writeBlocking(description: OpenFileDescription, data: Uint8Array): Promise<number> {\n for (;;) {\n try {\n return description.write(data);\n } catch (error) {\n const posix = toPosixError(error);\n if (posix.errno !== Errno.EAGAIN || description.flags & O_NONBLOCK) throw posix;\n }\n await Promise.race([description.whenReady(), aborted()]);\n if (proc.signal.aborted) throw new PosixError(Errno.EINTR);\n }\n }\n\n async function poll(\n requests: { fd: number; events: number }[],\n timeoutMs: number,\n ): Promise<{ fd: number; revents: number }[]> {\n const deadline = timeoutMs < 0 ? Infinity : Date.now() + timeoutMs;\n for (;;) {\n const ready: { fd: number; revents: number }[] = [];\n const waits: Promise<void>[] = [];\n for (const { fd, events } of requests) {\n let description: OpenFileDescription;\n try {\n description = proc.table.get(fd);\n } catch {\n ready.push({ fd, revents: POLLHUP });\n continue;\n }\n let revents = 0;\n if (events & POLLIN && description.readable()) revents |= POLLIN;\n if (events & POLLOUT && description.writable()) revents |= POLLOUT;\n if (revents) ready.push({ fd, revents });\n else waits.push(description.whenReady());\n }\n if (ready.length > 0) return ready;\n const remaining = deadline - Date.now();\n if (remaining <= 0) return [];\n await Promise.race([...waits, sleep(Math.min(remaining, 50)), aborted()]);\n if (proc.signal.aborted) throw new PosixError(Errno.EINTR);\n }\n }\n\n function aborted(): Promise<void> {\n if (proc.signal.aborted) return Promise.resolve();\n return new Promise((resolve) => proc.signal.addEventListener(\"abort\", () => resolve(), { once: true }));\n }\n}\n\nfunction sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, Math.max(0, ms)));\n}\n\nfunction encodeStat(st: {\n ino: number; mode: number; size: number; uid: number; gid: number; nlink: number;\n atimeMs: number; mtimeMs: number; ctimeMs: number;\n}): Uint8Array {\n return new Writer()\n .u64(st.ino).u32(st.mode).u64(st.size)\n .u32(st.uid).u32(st.gid).u32(st.nlink)\n .i64(Math.round(st.atimeMs * 1e6)).i64(Math.round(st.mtimeMs * 1e6)).i64(Math.round(st.ctimeMs * 1e6))\n .finish();\n}\n\nexport { StreamDescription, DescriptorTable, SEEK_SET };\n","/**\n * The guest side of the host ABI, as the compiled code sees it.\n *\n * Compiled programs reach this through `sbx_host_call` in\n * `python-runtime/native/js/library_sbx.js`, which copies a frame out of the\n * module's memory, calls {@link HostAbiClient.callRaw}, and copies the answer\n * back. The typed methods below are for the JavaScript side of the worker —\n * loaders, the probe harness, and tests — which need the same operations\n * without going through Wasm memory.\n */\n\nimport { Errno, ERRNO_NAMES, OP_NAMES, Op, SBX_HOST_ABI_VERSION } from \"./host-abi.js\";\nimport { Reader, Writer, decodeResponse, encodeRequest, type RequestHeader } from \"./protocol.js\";\nimport type { HostCallClient } from \"./sync-transport.js\";\n\nexport class HostAbiError extends Error {\n errno: number;\n code: string;\n constructor(errno: number, op: number) {\n const name = ERRNO_NAMES[errno] ?? String(errno);\n super(`${OP_NAMES[op] ?? `op ${op}`} failed: ${name}`);\n this.errno = errno;\n this.code = name;\n }\n}\n\nexport interface HostAbiResult {\n status: number;\n payload: Uint8Array;\n}\n\n/**\n * One process's connection to the kernel.\n *\n * `generation` is stamped into every frame and checked on the way back, so a\n * completion belonging to a previous incarnation of this PID is rejected rather\n * than applied to the wrong descriptor table.\n */\nexport class HostAbiClient {\n private transport: HostCallClient;\n private generation: number;\n private nextRequestId = 1;\n\n constructor(transport: HostCallClient, generation: number) {\n this.transport = transport;\n this.generation = generation;\n }\n\n /** Send one frame, blocking. Returns the status and payload verbatim. */\n callRaw(op: number, payload: Uint8Array): HostAbiResult {\n const header: RequestHeader = {\n version: SBX_HOST_ABI_VERSION,\n op,\n requestId: this.nextRequestId++,\n generation: this.generation,\n };\n const frame = this.transport.call(encodeRequest(header, payload));\n const response = decodeResponse(frame, header);\n return { status: response.status, payload: response.payload };\n }\n\n /** As {@link callRaw}, but a negative status becomes an exception. */\n private call(op: number, payload: Uint8Array): HostAbiResult {\n const result = this.callRaw(op, payload);\n if (result.status < 0) throw new HostAbiError(-result.status, op);\n return result;\n }\n\n handshake(): { version: number; capabilities: Record<string, boolean> } {\n const { payload } = this.call(Op.handshake, new Uint8Array());\n const r = new Reader(payload);\n const version = r.u32();\n const count = r.u32();\n const capabilities: Record<string, boolean> = {};\n for (let i = 0; i < count; i += 1) capabilities[r.string()] = r.u32() === 1;\n return { version, capabilities };\n }\n\n open(path: string, flags: number, mode = 0o666): number {\n return this.call(Op.openat, new Writer().string(path).u32(flags).u32(mode).finish()).status;\n }\n\n close(fd: number): void {\n this.call(Op.close, new Writer().i32(fd).finish());\n }\n\n read(fd: number, length: number): Uint8Array {\n return this.call(Op.read, new Writer().i32(fd).u32(length).finish()).payload;\n }\n\n write(fd: number, data: Uint8Array): number {\n return this.call(Op.write, new Writer().i32(fd).bytes32(data).finish()).status;\n }\n\n /** Write every byte, looping over short writes the way a guest's libc must. */\n writeAll(fd: number, data: Uint8Array): void {\n let at = 0;\n while (at < data.length) at += this.write(fd, data.subarray(at));\n }\n\n pread(fd: number, length: number, offset: number): Uint8Array {\n return this.call(Op.pread, new Writer().i32(fd).u32(length).u64(offset).finish()).payload;\n }\n\n pwrite(fd: number, data: Uint8Array, offset: number): number {\n return this.call(Op.pwrite, new Writer().i32(fd).bytes32(data).u64(offset).finish()).status;\n }\n\n seek(fd: number, offset: number, whence: number): number {\n const { payload } = this.call(Op.lseek, new Writer().i32(fd).i64(offset).u32(whence).finish());\n return new Reader(payload).i64();\n }\n\n fstat(fd: number): HostStat {\n return decodeStat(this.call(Op.fstat, new Writer().i32(fd).finish()).payload);\n }\n\n stat(path: string, followLinks = true): HostStat {\n return decodeStat(\n this.call(Op.statat, new Writer().string(path).u32(followLinks ? 1 : 0).finish()).payload,\n );\n }\n\n ftruncate(fd: number, length: number): void {\n this.call(Op.ftruncate, new Writer().i32(fd).u64(length).finish());\n }\n\n rename(from: string, to: string): void {\n this.call(Op.renameat, new Writer().string(from).string(to).finish());\n }\n\n unlink(path: string, removeDirectory = false): void {\n this.call(Op.unlinkat, new Writer().string(path).u32(removeDirectory ? 1 : 0).finish());\n }\n\n mkdir(path: string, mode = 0o777): void {\n this.call(Op.mkdirat, new Writer().string(path).u32(mode).finish());\n }\n\n readlink(path: string): string {\n return new Reader(this.call(Op.readlinkat, new Writer().string(path).finish()).payload).string();\n }\n\n symlink(target: string, path: string): void {\n this.call(Op.symlinkat, new Writer().string(target).string(path).finish());\n }\n\n readdir(fd: number, bufferSize = 4096): string[] {\n const { payload } = this.call(Op.getdents, new Writer().i32(fd).u32(bufferSize).finish());\n const text = new TextDecoder().decode(payload);\n return text.split(\"\\0\").filter((name) => name.length > 0);\n }\n\n dup(fd: number, from = 0): number {\n return this.call(Op.dup, new Writer().i32(fd).u32(from).finish()).status;\n }\n\n dup2(fd: number, target: number): number {\n return this.call(Op.dup2, new Writer().i32(fd).i32(target).finish()).status;\n }\n\n getFlags(fd: number): { flags: number; cloexec: boolean } {\n const r = new Reader(this.call(Op.get_flags, new Writer().i32(fd).finish()).payload);\n return { flags: r.u32(), cloexec: r.u32() === 1 };\n }\n\n setFlags(fd: number, flags: number, cloexec: boolean): void {\n this.call(Op.set_flags, new Writer().i32(fd).u32(flags).u32(cloexec ? 1 : 0).finish());\n }\n\n pipe(flags = 0): [number, number] {\n const r = new Reader(this.call(Op.pipe, new Writer().u32(flags).finish()).payload);\n return [r.i32(), r.i32()];\n }\n\n poll(entries: { fd: number; events: number }[], timeoutMs: number): { fd: number; revents: number }[] {\n const w = new Writer().u32(entries.length);\n for (const entry of entries) w.i32(entry.fd).u32(entry.events);\n w.i64(timeoutMs);\n const r = new Reader(this.call(Op.poll, w.finish()).payload);\n const count = r.u32();\n const out: { fd: number; revents: number }[] = [];\n for (let i = 0; i < count; i += 1) out.push({ fd: r.i32(), revents: r.u32() });\n return out;\n }\n\n clockGettime(monotonic: boolean): { seconds: number; nanos: number } {\n const r = new Reader(this.call(Op.clock_gettime, new Writer().u32(monotonic ? 1 : 0).finish()).payload);\n return { seconds: r.i64(), nanos: r.u32() };\n }\n\n sleep(nanos: number): void {\n this.call(Op.sleep, new Writer().u64(nanos).finish());\n }\n\n identity(): { pid: number; ppid: number; uid: number; gid: number; umask: number } {\n const r = new Reader(this.call(Op.getpid, new Uint8Array()).payload);\n return { pid: r.i32(), ppid: r.i32(), uid: r.u32(), gid: r.u32(), umask: r.u32() };\n }\n\n getcwd(): string {\n return new Reader(this.call(Op.getcwd, new Uint8Array()).payload).string();\n }\n\n chdir(path: string): void {\n this.call(Op.chdir, new Writer().string(path).finish());\n }\n\n environ(): Record<string, string> {\n const joined = new Reader(this.call(Op.environ, new Uint8Array()).payload).string();\n const out: Record<string, string> = {};\n for (const entry of joined.split(\"\\0\")) {\n if (!entry) continue;\n const split = entry.indexOf(\"=\");\n out[entry.slice(0, split)] = entry.slice(split + 1);\n }\n return out;\n }\n\n getrandom(length: number): Uint8Array {\n return this.call(Op.getrandom, new Writer().u32(length).finish()).payload;\n }\n\n socket(family: number, type: number, protocol = 0): number {\n return this.call(Op.socket, new Writer().u32(family).u32(type).i32(protocol).finish()).status;\n }\n\n bind(fd: number, address: string, port: number): void {\n this.call(Op.bind, new Writer().i32(fd).string(address).u32(port).finish());\n }\n\n listen(fd: number, backlog = 128): void {\n this.call(Op.listen, new Writer().i32(fd).u32(backlog).finish());\n }\n\n accept(fd: number): { fd: number; address: string; port: number } {\n const result = this.call(Op.accept, new Writer().i32(fd).finish());\n const r = new Reader(result.payload);\n return { fd: result.status, address: r.string(), port: r.u32() };\n }\n\n connect(fd: number, address: string, port: number): void {\n this.call(Op.connect, new Writer().i32(fd).string(address).u32(port).finish());\n }\n\n send(fd: number, data: Uint8Array): number {\n return this.call(Op.send, new Writer().i32(fd).bytes32(data).finish()).status;\n }\n\n recv(fd: number, length: number): Uint8Array {\n return this.call(Op.recv, new Writer().i32(fd).u32(length).finish()).payload;\n }\n\n shutdown(fd: number, how: number): void {\n this.call(Op.shutdown, new Writer().i32(fd).u32(how).finish());\n }\n\n socketName(fd: number, peer = false): { address: string; port: number } {\n const payload = this.call(peer ? Op.getpeername : Op.getsockname, new Writer().i32(fd).finish()).payload;\n const r = new Reader(payload);\n return { address: r.string(), port: r.u32() };\n }\n}\n\nexport interface HostStat {\n ino: number;\n mode: number;\n size: number;\n uid: number;\n gid: number;\n nlink: number;\n atimeNs: number;\n mtimeNs: number;\n ctimeNs: number;\n}\n\nfunction decodeStat(payload: Uint8Array): HostStat {\n const r = new Reader(payload);\n return {\n ino: r.u64(), mode: r.u32(), size: r.u64(),\n uid: r.u32(), gid: r.u32(), nlink: r.u32(),\n atimeNs: r.i64(), mtimeNs: r.i64(), ctimeNs: r.i64(),\n };\n}\n\nexport { Errno, Op };\n","/**\n * Linux errno numbers and the `SysError` type every syscall-ish helper throws.\n *\n * The numbers match Linux x86-64 so that programs which print `err.errno`\n * (or read `$?` after a failed syscall) see the values they would on a real box.\n */\n\nexport const ERRNO = {\n EPERM: 1,\n ENOENT: 2,\n ESRCH: 3,\n EINTR: 4,\n EIO: 5,\n ENXIO: 6,\n E2BIG: 7,\n ENOEXEC: 8,\n EBADF: 9,\n ECHILD: 10,\n EAGAIN: 11,\n ENOMEM: 12,\n EACCES: 13,\n EFAULT: 14,\n ENOTBLK: 15,\n EBUSY: 16,\n EEXIST: 17,\n EXDEV: 18,\n ENODEV: 19,\n ENOTDIR: 20,\n EISDIR: 21,\n EINVAL: 22,\n ENFILE: 23,\n EMFILE: 24,\n ENOTTY: 25,\n ETXTBSY: 26,\n EFBIG: 27,\n ENOSPC: 28,\n ESPIPE: 29,\n EROFS: 30,\n EMLINK: 31,\n EPIPE: 32,\n EDOM: 33,\n ERANGE: 34,\n EDEADLK: 35,\n ENAMETOOLONG: 36,\n ENOLCK: 37,\n ENOSYS: 38,\n ENOTEMPTY: 39,\n ELOOP: 40,\n ENOMSG: 42,\n ENOTSOCK: 88,\n EADDRINUSE: 98,\n EADDRNOTAVAIL: 99,\n ENETDOWN: 100,\n ECONNRESET: 104,\n ENOTCONN: 107,\n ETIMEDOUT: 110,\n ECONNREFUSED: 111,\n EHOSTUNREACH: 113,\n ENOTSUP: 95,\n} as const;\n\nexport type ErrnoCode = keyof typeof ERRNO;\n\n/** Human strings matching `strerror(3)`, used to build `perror`-style messages. */\nexport const STRERROR: Record<ErrnoCode, string> = {\n EPERM: \"Operation not permitted\",\n ENOENT: \"No such file or directory\",\n ESRCH: \"No such process\",\n EINTR: \"Interrupted system call\",\n EIO: \"Input/output error\",\n ENXIO: \"No such device or address\",\n E2BIG: \"Argument list too long\",\n ENOEXEC: \"Exec format error\",\n EBADF: \"Bad file descriptor\",\n ECHILD: \"No child processes\",\n EAGAIN: \"Resource temporarily unavailable\",\n ENOMEM: \"Cannot allocate memory\",\n EACCES: \"Permission denied\",\n EFAULT: \"Bad address\",\n ENOTBLK: \"Block device required\",\n EBUSY: \"Device or resource busy\",\n EEXIST: \"File exists\",\n EXDEV: \"Invalid cross-device link\",\n ENODEV: \"No such device\",\n ENOTDIR: \"Not a directory\",\n EISDIR: \"Is a directory\",\n EINVAL: \"Invalid argument\",\n ENFILE: \"Too many open files in system\",\n EMFILE: \"Too many open files\",\n ENOTTY: \"Inappropriate ioctl for device\",\n ETXTBSY: \"Text file busy\",\n EFBIG: \"File too large\",\n ENOSPC: \"No space left on device\",\n ESPIPE: \"Illegal seek\",\n EROFS: \"Read-only file system\",\n EMLINK: \"Too many links\",\n EPIPE: \"Broken pipe\",\n EDOM: \"Numerical argument out of domain\",\n ERANGE: \"Numerical result out of range\",\n EDEADLK: \"Resource deadlock avoided\",\n ENAMETOOLONG: \"File name too long\",\n ENOLCK: \"No locks available\",\n ENOSYS: \"Function not implemented\",\n ENOTEMPTY: \"Directory not empty\",\n ELOOP: \"Too many levels of symbolic links\",\n ENOMSG: \"No message of desired type\",\n ENOTSOCK: \"Socket operation on non-socket\",\n EADDRINUSE: \"Address already in use\",\n EADDRNOTAVAIL: \"Cannot assign requested address\",\n ENETDOWN: \"Network is down\",\n ECONNRESET: \"Connection reset by peer\",\n ENOTCONN: \"Transport endpoint is not connected\",\n ETIMEDOUT: \"Connection timed out\",\n ECONNREFUSED: \"Connection refused\",\n EHOSTUNREACH: \"No route to host\",\n ENOTSUP: \"Operation not supported\",\n};\n\n/** An error carrying the same shape Node uses for `fs` failures. */\nexport class SysError extends Error {\n readonly code: ErrnoCode;\n readonly errno: number;\n readonly syscall: string;\n readonly path?: string;\n readonly dest?: string;\n\n constructor(code: ErrnoCode, syscall: string, path?: string, dest?: string) {\n const detail = path === undefined ? \"\" : dest === undefined ? ` '${path}'` : ` '${path}' -> '${dest}'`;\n super(`${code}: ${STRERROR[code]}, ${syscall}${detail}`);\n this.name = \"SysError\";\n this.code = code;\n this.errno = -ERRNO[code];\n this.syscall = syscall;\n if (path !== undefined) this.path = path;\n if (dest !== undefined) this.dest = dest;\n }\n\n /** The message a coreutil prints: `ls: /nope: No such file or directory`. */\n toUserMessage(program: string, subject = this.path): string {\n return subject ? `${program}: ${subject}: ${STRERROR[this.code]}` : `${program}: ${STRERROR[this.code]}`;\n }\n}\n\nexport function isSysError(e: unknown): e is SysError {\n return e instanceof SysError;\n}\n\n/** Translate a raw error from the underlying volume into a `SysError`. */\nexport function toSysError(e: unknown, syscall: string, path?: string, dest?: string): SysError {\n if (e instanceof SysError) return e;\n const code = (e as { code?: string } | null)?.code;\n if (code && code in ERRNO) return new SysError(code as ErrnoCode, syscall, path, dest);\n const msg = e instanceof Error ? e.message : String(e);\n if (/not a directory/i.test(msg)) return new SysError(\"ENOTDIR\", syscall, path);\n if (/no such file|not found/i.test(msg)) return new SysError(\"ENOENT\", syscall, path);\n if (/exists/i.test(msg)) return new SysError(\"EEXIST\", syscall, path);\n if (/directory not empty/i.test(msg)) return new SysError(\"ENOTEMPTY\", syscall, path);\n if (/is a directory/i.test(msg)) return new SysError(\"EISDIR\", syscall, path);\n return new SysError(\"EIO\", syscall, path);\n}\n\nexport function strerror(code: ErrnoCode): string {\n return STRERROR[code];\n}\n","/**\n * POSIX path helpers. Deliberately independent of `node:path` so container\n * paths behave identically no matter what platform the host runs on.\n */\n\nexport const SEP = \"/\";\n\nexport function isAbsolute(p: string): boolean {\n return p.startsWith(\"/\");\n}\n\n/** Split into non-empty segments, dropping the leading/trailing slashes. */\nexport function segments(p: string): string[] {\n return p.split(\"/\").filter((s) => s.length > 0);\n}\n\n/**\n * Lexical normalisation: collapse `//`, resolve `.` and `..` without touching\n * the filesystem. Symlinks are *not* followed — that is `Vfs.realpath`'s job.\n */\nexport function normalize(p: string): string {\n if (p === \"\") return \".\";\n const abs = isAbsolute(p);\n const trailing = p.length > 1 && p.endsWith(\"/\");\n const out: string[] = [];\n for (const seg of p.split(\"/\")) {\n if (seg === \"\" || seg === \".\") continue;\n if (seg === \"..\") {\n if (out.length > 0 && out[out.length - 1] !== \"..\") out.pop();\n else if (!abs) out.push(\"..\");\n continue;\n }\n out.push(seg);\n }\n let result = out.join(\"/\");\n if (abs) result = \"/\" + result;\n else if (result === \"\") result = \".\";\n if (trailing && !result.endsWith(\"/\")) result += \"/\";\n return result === \"\" ? \"/\" : result;\n}\n\n/** Join fragments then normalise, like `path.posix.join`. */\nexport function join(...parts: string[]): string {\n const joined = parts.filter((p) => p !== \"\").join(\"/\");\n return joined === \"\" ? \".\" : normalize(joined);\n}\n\n/** Resolve `p` against `base` (usually a process cwd) to an absolute path. */\nexport function resolve(base: string, ...parts: string[]): string {\n let resolved = \"\";\n let absolute = false;\n for (let i = parts.length - 1; i >= 0 && !absolute; i--) {\n const part = parts[i]!;\n if (part === \"\") continue;\n resolved = resolved === \"\" ? part : `${part}/${resolved}`;\n absolute = isAbsolute(part);\n }\n if (!absolute) {\n resolved = resolved === \"\" ? base : `${base}/${resolved}`;\n }\n const norm = normalize(resolved);\n return isAbsolute(norm) ? stripTrailing(norm) : stripTrailing(normalize(`/${norm}`));\n}\n\nfunction stripTrailing(p: string): string {\n return p.length > 1 && p.endsWith(\"/\") ? p.slice(0, -1) : p;\n}\n\nexport function dirname(p: string): string {\n const norm = stripTrailing(normalize(p));\n if (norm === \"/\") return \"/\";\n const idx = norm.lastIndexOf(\"/\");\n if (idx < 0) return \".\";\n if (idx === 0) return \"/\";\n return norm.slice(0, idx);\n}\n\nexport function basename(p: string, ext?: string): string {\n const norm = stripTrailing(normalize(p));\n if (norm === \"/\") return \"/\";\n const idx = norm.lastIndexOf(\"/\");\n let base = idx < 0 ? norm : norm.slice(idx + 1);\n if (ext && base !== ext && base.endsWith(ext)) base = base.slice(0, -ext.length);\n return base;\n}\n\nexport function extname(p: string): string {\n const base = basename(p);\n const idx = base.lastIndexOf(\".\");\n return idx <= 0 ? \"\" : base.slice(idx);\n}\n\n/** Relative path from `from` to `to`, both assumed absolute + normalised. */\nexport function relative(from: string, to: string): string {\n const a = segments(normalize(from));\n const b = segments(normalize(to));\n let i = 0;\n while (i < a.length && i < b.length && a[i] === b[i]) i++;\n const up = new Array(a.length - i).fill(\"..\");\n const down = b.slice(i);\n const out = [...up, ...down].join(\"/\");\n return out === \"\" ? \".\" : out;\n}\n\n/** True when `child` is `parent` or lives beneath it. */\nexport function contains(parent: string, child: string): boolean {\n const p = stripTrailing(normalize(parent));\n const c = stripTrailing(normalize(child));\n if (p === \"/\") return true;\n return c === p || c.startsWith(p + \"/\");\n}\n\n/** Drop a trailing slash except on the root, for display and map keys. */\nexport function clean(p: string): string {\n return stripTrailing(normalize(p));\n}\n","/**\n * File-mode bit manipulation: the `st_mode` layout, the `-rwxr-xr-x` rendering\n * used by `ls -l`, and the symbolic-mode grammar accepted by `chmod`.\n */\n\nimport { SysError } from \"./errno.js\";\n\nexport const S_IFMT = 0o170000;\nexport const S_IFSOCK = 0o140000;\nexport const S_IFLNK = 0o120000;\nexport const S_IFREG = 0o100000;\nexport const S_IFBLK = 0o060000;\nexport const S_IFDIR = 0o040000;\nexport const S_IFCHR = 0o020000;\nexport const S_IFIFO = 0o010000;\n\nexport const S_ISUID = 0o4000;\nexport const S_ISGID = 0o2000;\nexport const S_ISVTX = 0o1000;\n\nexport const S_IRUSR = 0o400;\nexport const S_IWUSR = 0o200;\nexport const S_IXUSR = 0o100;\nexport const S_IRGRP = 0o040;\nexport const S_IWGRP = 0o020;\nexport const S_IXGRP = 0o010;\nexport const S_IROTH = 0o004;\nexport const S_IWOTH = 0o002;\nexport const S_IXOTH = 0o001;\n\nexport const PERM_MASK = 0o7777;\n\n/** `access(2)` mode flags. */\nexport const F_OK = 0;\nexport const X_OK = 1;\nexport const W_OK = 2;\nexport const R_OK = 4;\n\nexport type FileKind = \"file\" | \"directory\" | \"symlink\" | \"chardev\" | \"blockdev\" | \"fifo\" | \"socket\";\n\nexport function kindOf(mode: number): FileKind {\n switch (mode & S_IFMT) {\n case S_IFDIR:\n return \"directory\";\n case S_IFLNK:\n return \"symlink\";\n case S_IFCHR:\n return \"chardev\";\n case S_IFBLK:\n return \"blockdev\";\n case S_IFIFO:\n return \"fifo\";\n case S_IFSOCK:\n return \"socket\";\n default:\n return \"file\";\n }\n}\n\nexport function ifmtFor(kind: FileKind): number {\n switch (kind) {\n case \"directory\":\n return S_IFDIR;\n case \"symlink\":\n return S_IFLNK;\n case \"chardev\":\n return S_IFCHR;\n case \"blockdev\":\n return S_IFBLK;\n case \"fifo\":\n return S_IFIFO;\n case \"socket\":\n return S_IFSOCK;\n default:\n return S_IFREG;\n }\n}\n\n/** The single leading character `ls -l` prints for a file type. */\nexport function typeChar(mode: number): string {\n switch (kindOf(mode)) {\n case \"directory\":\n return \"d\";\n case \"symlink\":\n return \"l\";\n case \"chardev\":\n return \"c\";\n case \"blockdev\":\n return \"b\";\n case \"fifo\":\n return \"p\";\n case \"socket\":\n return \"s\";\n default:\n return \"-\";\n }\n}\n\n/** Render as `drwxr-xr-x`, honouring setuid/setgid/sticky. */\nexport function formatMode(mode: number): string {\n const p = mode & PERM_MASK;\n const bit = (m: number, ch: string) => ((p & m) !== 0 ? ch : \"-\");\n let s = typeChar(mode);\n s += bit(S_IRUSR, \"r\") + bit(S_IWUSR, \"w\");\n s += (p & S_ISUID) !== 0 ? ((p & S_IXUSR) !== 0 ? \"s\" : \"S\") : bit(S_IXUSR, \"x\");\n s += bit(S_IRGRP, \"r\") + bit(S_IWGRP, \"w\");\n s += (p & S_ISGID) !== 0 ? ((p & S_IXGRP) !== 0 ? \"s\" : \"S\") : bit(S_IXGRP, \"x\");\n s += bit(S_IROTH, \"r\") + bit(S_IWOTH, \"w\");\n s += (p & S_ISVTX) !== 0 ? ((p & S_IXOTH) !== 0 ? \"t\" : \"T\") : bit(S_IXOTH, \"x\");\n return s;\n}\n\n/** Zero-padded octal permissions, as `stat -c %a`/`%04a` would show. */\nexport function octalMode(mode: number, width = 4): string {\n return (mode & PERM_MASK).toString(8).padStart(width, \"0\");\n}\n\nconst CLASS_BITS: Record<string, { r: number; w: number; x: number; s: number }> = {\n u: { r: S_IRUSR, w: S_IWUSR, x: S_IXUSR, s: S_ISUID },\n g: { r: S_IRGRP, w: S_IWGRP, x: S_IXGRP, s: S_ISGID },\n o: { r: S_IROTH, w: S_IWOTH, x: S_IXOTH, s: S_ISVTX },\n};\n\n/**\n * Apply a `chmod` spec to an existing mode. Accepts octal (`755`, `0644`) and\n * the symbolic grammar (`u+rwx,go-w`, `a=r`, `+X`, `u+s`, `o+t`).\n *\n * @param isDir whether the target is a directory — needed for the `X` flag.\n */\nexport function applyChmod(spec: string, current: number, isDir: boolean, umask = 0o022): number {\n if (/^[0-7]{1,4}$/.test(spec)) {\n return (current & ~PERM_MASK) | (parseInt(spec, 8) & PERM_MASK);\n }\n\n let perms = current & PERM_MASK;\n const clauses = spec.split(\",\");\n for (const clause of clauses) {\n const m = /^([ugoa]*)([+\\-=])([ugo]|[rwxXst]*)$/.exec(clause.trim());\n if (!m) throw new SysError(\"EINVAL\", \"chmod\");\n const [, whoRaw, op, permsRaw] = m as unknown as [string, string, string, string];\n const who = whoRaw === \"\" || whoRaw.includes(\"a\") ? \"ugo\" : whoRaw;\n\n let bits = 0;\n let special = 0;\n if (permsRaw === \"u\" || permsRaw === \"g\" || permsRaw === \"o\") {\n // Copy an existing class's rwx bits, e.g. `g=u`.\n const src = CLASS_BITS[permsRaw]!;\n const has = { r: (perms & src.r) !== 0, w: (perms & src.w) !== 0, x: (perms & src.x) !== 0 };\n for (const c of who) {\n const t = CLASS_BITS[c];\n if (!t) continue;\n if (has.r) bits |= t.r;\n if (has.w) bits |= t.w;\n if (has.x) bits |= t.x;\n }\n } else {\n for (const c of who) {\n const t = CLASS_BITS[c];\n if (!t) continue;\n for (const ch of permsRaw) {\n switch (ch) {\n case \"r\":\n bits |= t.r;\n break;\n case \"w\":\n bits |= t.w;\n break;\n case \"x\":\n bits |= t.x;\n break;\n case \"X\":\n // Only set execute when it's a directory or already executable somewhere.\n if (isDir || (perms & (S_IXUSR | S_IXGRP | S_IXOTH)) !== 0) bits |= t.x;\n break;\n case \"s\":\n if (c === \"u\") special |= S_ISUID;\n if (c === \"g\") special |= S_ISGID;\n break;\n case \"t\":\n special |= S_ISVTX;\n break;\n default:\n throw new SysError(\"EINVAL\", \"chmod\");\n }\n }\n }\n // `+t` with no class named still means the sticky bit.\n if (permsRaw.includes(\"t\") && whoRaw === \"\") special |= S_ISVTX;\n }\n\n const all = bits | special;\n if (op === \"+\") perms |= all & (whoRaw === \"\" ? ~umask : ~0);\n else if (op === \"-\") perms &= ~all;\n else {\n // `=` clears the named classes first, then sets.\n let clear = 0;\n for (const c of who) {\n const t = CLASS_BITS[c];\n if (t) clear |= t.r | t.w | t.x;\n }\n if (who.includes(\"u\")) clear |= S_ISUID;\n if (who.includes(\"g\")) clear |= S_ISGID;\n if (who.includes(\"o\")) clear |= S_ISVTX;\n perms = (perms & ~clear) | all;\n }\n }\n return (current & ~PERM_MASK) | (perms & PERM_MASK);\n}\n\n/** Parse the `umask` builtin's argument. */\nexport function parseUmask(spec: string): number {\n if (/^[0-7]{1,4}$/.test(spec)) return parseInt(spec, 8) & PERM_MASK;\n // Symbolic umask describes the bits to *keep*, so invert the chmod result.\n const granted = applyChmod(spec, 0o777, false, 0);\n return ~granted & 0o777;\n}\n\n/** Render a umask symbolically, the way `umask -S` does. */\nexport function formatUmaskSymbolic(umask: number): string {\n const granted = ~umask & 0o777;\n const part = (r: number, w: number, x: number) =>\n ((granted & r) !== 0 ? \"r\" : \"\") + ((granted & w) !== 0 ? \"w\" : \"\") + ((granted & x) !== 0 ? \"x\" : \"\");\n return `u=${part(S_IRUSR, S_IWUSR, S_IXUSR)},g=${part(S_IRGRP, S_IWGRP, S_IXGRP)},o=${part(S_IROTH, S_IWOTH, S_IXOTH)}`;\n}\n","/**\n * The `Stats` object handed back by `Vfs.stat`. Shaped like `fs.Stats` so it\n * feels familiar, but with a real `st_mode` that carries the file-type bits\n * (which the underlying volume stores separately).\n */\n\nimport { kindOf, type FileKind, S_IFMT } from \"./mode.js\";\n\nexport interface StatInit {\n mode: number;\n size: number;\n uid: number;\n gid: number;\n ino: number;\n nlink: number;\n atimeMs: number;\n mtimeMs: number;\n ctimeMs: number;\n birthtimeMs?: number;\n dev?: number;\n rdev?: number;\n blksize?: number;\n}\n\nexport class Stats {\n readonly mode: number;\n readonly size: number;\n readonly uid: number;\n readonly gid: number;\n readonly ino: number;\n readonly nlink: number;\n readonly dev: number;\n readonly rdev: number;\n readonly blksize: number;\n readonly atimeMs: number;\n readonly mtimeMs: number;\n readonly ctimeMs: number;\n readonly birthtimeMs: number;\n\n constructor(init: StatInit) {\n this.mode = init.mode;\n this.size = init.size;\n this.uid = init.uid;\n this.gid = init.gid;\n this.ino = init.ino;\n this.nlink = init.nlink;\n this.dev = init.dev ?? 2049;\n this.rdev = init.rdev ?? 0;\n this.blksize = init.blksize ?? 4096;\n this.atimeMs = init.atimeMs;\n this.mtimeMs = init.mtimeMs;\n this.ctimeMs = init.ctimeMs;\n this.birthtimeMs = init.birthtimeMs ?? init.ctimeMs;\n }\n\n get blocks(): number {\n return Math.ceil(this.size / 512);\n }\n\n get atime(): Date {\n return new Date(this.atimeMs);\n }\n get mtime(): Date {\n return new Date(this.mtimeMs);\n }\n get ctime(): Date {\n return new Date(this.ctimeMs);\n }\n get birthtime(): Date {\n return new Date(this.birthtimeMs);\n }\n\n get kind(): FileKind {\n return kindOf(this.mode);\n }\n\n isFile(): boolean {\n return this.kind === \"file\";\n }\n isDirectory(): boolean {\n return this.kind === \"directory\";\n }\n isSymbolicLink(): boolean {\n return this.kind === \"symlink\";\n }\n isCharacterDevice(): boolean {\n return this.kind === \"chardev\";\n }\n isBlockDevice(): boolean {\n return this.kind === \"blockdev\";\n }\n isFIFO(): boolean {\n return this.kind === \"fifo\";\n }\n isSocket(): boolean {\n return this.kind === \"socket\";\n }\n\n /** Permission bits only, with the type bits masked off. */\n get perms(): number {\n return this.mode & ~S_IFMT & 0o7777;\n }\n}\n\nexport interface DirEntry {\n name: string;\n kind: FileKind;\n}\n","/**\n * The container's virtual filesystem.\n *\n * Real file content lives in the RuntimePod's `MemoryVolume`, deliberately the\n * *same* volume the Node.js worker processes see — so a file written by `echo`\n * is readable by `require('fs')` inside a spawned script, and vice versa.\n *\n * On top of that volume this layer adds the parts a Linux userland expects and\n * the raw volume does not have: file-type bits in `st_mode`, permission and\n * ownership checks, an `O_*` open/fd table, and pluggable *virtual providers*\n * that synthesise `/proc`, `/sys` and `/dev` on demand.\n */\n\nimport type { RuntimeVolume } from \"../runtime/contracts.js\";\nimport { SysError, toSysError } from \"./errno.js\";\nimport * as P from \"./path.js\";\nimport { Stats, type DirEntry } from \"./stat.js\";\nimport {\n F_OK,\n R_OK,\n W_OK,\n X_OK,\n PERM_MASK,\n S_IFDIR,\n S_IFLNK,\n S_IFREG,\n S_IRGRP,\n S_IROTH,\n S_IRUSR,\n S_IWGRP,\n S_IWOTH,\n S_IWUSR,\n S_IXGRP,\n S_IXOTH,\n S_IXUSR,\n ifmtFor,\n kindOf,\n type FileKind,\n} from \"./mode.js\";\n\n/** The identity a filesystem operation runs as. */\nexport interface Cred {\n uid: number;\n gid: number;\n groups: number[];\n umask: number;\n}\n\nexport const ROOT_CRED: Cred = { uid: 0, gid: 0, groups: [0], umask: 0o022 };\n\nexport function makeCred(uid: number, gid: number, groups: number[] = [], umask = 0o022): Cred {\n return { uid, gid, groups: groups.includes(gid) ? groups : [gid, ...groups], umask };\n}\n\n/** A file that does not live in the volume — `/proc/uptime`, `/dev/null`, … */\nexport interface VirtualNode {\n kind: FileKind;\n /** Permission bits only; the type bits are added from `kind`. */\n mode: number;\n uid?: number;\n gid?: number;\n size?: number;\n mtimeMs?: number;\n /** Symlink target, when `kind === \"symlink\"`. */\n target?: string;\n read?(): Uint8Array | string;\n write?(data: Uint8Array, append: boolean): void;\n /** Directory listing, when `kind === \"directory\"`. */\n list?(): string[];\n}\n\n/**\n * Supplies a subtree of synthetic files. `resolve` receives the path *relative*\n * to `root` (\"\" means the mount point itself) and returns null for misses.\n */\nexport interface VirtualProvider {\n root: string;\n resolve(rel: string): VirtualNode | null;\n /**\n * When true (the default) the provider owns its whole subtree and a miss is\n * `ENOENT` — that is what `/proc` wants, so a dead pid does not resolve to a\n * stale on-disk file. `/dev` and `/sys` set this to false so that synthetic\n * nodes overlay a real directory users can still write into.\n */\n exclusive?: boolean;\n}\n\nconst MAX_SYMLINKS = 40;\n\nconst encoder = new TextEncoder();\nconst decoder = new TextDecoder();\n\nexport interface WriteOptions {\n mode?: number;\n append?: boolean;\n cred?: Cred;\n /** Skip the permission check — used by kernel-internal writes. */\n privileged?: boolean;\n}\n\nexport interface ResolveOptions {\n cred?: Cred;\n /** Follow a symlink in the final position. Off for `lstat`, `rm`, `chmod -h`. */\n followFinal?: boolean;\n}\n\nexport class Vfs {\n private readonly providers: VirtualProvider[] = [];\n private nextVirtualIno = 0xf0000;\n private readonly virtualInos = new Map<string, number>();\n\n constructor(readonly volume: RuntimeVolume) {}\n\n // ── virtual providers ────────────────────────────────────────────────────\n\n addProvider(provider: VirtualProvider): void {\n this.providers.push(provider);\n // Longest mount point first so /proc/self beats /proc.\n this.providers.sort((a, b) => b.root.length - a.root.length);\n }\n\n removeProvider(root: string): void {\n const i = this.providers.findIndex((p) => p.root === root);\n if (i >= 0) this.providers.splice(i, 1);\n }\n\n /** The mount points currently served synthetically. */\n get virtualRoots(): string[] {\n return this.providers.map((p) => p.root);\n }\n\n private lookupVirtual(abs: string): VirtualNode | null {\n for (const provider of this.providers) {\n if (abs === provider.root) return provider.resolve(\"\");\n if (abs.startsWith(provider.root === \"/\" ? \"/\" : provider.root + \"/\")) {\n const rel = abs.slice(provider.root === \"/\" ? 1 : provider.root.length + 1);\n const node = provider.resolve(rel);\n if (node) return node;\n if (provider.exclusive !== false) return null;\n }\n }\n return null;\n }\n\n /** True when a miss at `abs` must be ENOENT rather than a volume lookup. */\n private isUnderProvider(abs: string): boolean {\n return this.providers.some(\n (p) => p.exclusive !== false && (abs === p.root || abs.startsWith(p.root + \"/\")),\n );\n }\n\n /** Synthetic children a non-exclusive provider contributes to a directory. */\n private virtualChildren(abs: string): string[] {\n const out: string[] = [];\n for (const p of this.providers) {\n if (p.exclusive !== false) continue;\n if (abs !== p.root && !abs.startsWith(p.root + \"/\")) continue;\n const rel = abs === p.root ? \"\" : abs.slice(p.root.length + 1);\n const node = p.resolve(rel);\n if (node?.kind === \"directory\") out.push(...(node.list?.() ?? []));\n }\n return out;\n }\n\n private virtualIno(abs: string): number {\n let ino = this.virtualInos.get(abs);\n if (ino === undefined) {\n ino = this.nextVirtualIno++;\n this.virtualInos.set(abs, ino);\n }\n return ino;\n }\n\n // ── permission model ─────────────────────────────────────────────────────\n\n /** True when `cred` may perform `mode` (R_OK/W_OK/X_OK) on a stat result. */\n permitted(st: Stats, mode: number, cred: Cred): boolean {\n if (mode === F_OK) return true;\n if (cred.uid === 0) {\n // root skips read/write checks, but still needs *some* execute bit set.\n if ((mode & X_OK) !== 0 && !st.isDirectory()) {\n return (st.mode & (S_IXUSR | S_IXGRP | S_IXOTH)) !== 0;\n }\n return true;\n }\n let bits: number;\n if (st.uid === cred.uid) bits = (st.mode & (S_IRUSR | S_IWUSR | S_IXUSR)) >> 6;\n else if (cred.groups.includes(st.gid)) bits = (st.mode & (S_IRGRP | S_IWGRP | S_IXGRP)) >> 3;\n else bits = st.mode & (S_IROTH | S_IWOTH | S_IXOTH);\n return (bits & mode) === mode;\n }\n\n private require(st: Stats, mode: number, cred: Cred | undefined, syscall: string, path: string): void {\n if (!cred) return;\n if (!this.permitted(st, mode, cred)) throw new SysError(\"EACCES\", syscall, path);\n }\n\n // ── path resolution ──────────────────────────────────────────────────────\n\n /**\n * Walk `abs` component by component, following symlinks and checking search\n * (`+x`) permission on every directory along the way, exactly like `namei`.\n *\n * Returns the fully resolved absolute path. Does *not* require the final\n * component to exist — callers decide whether a miss is fatal.\n */\n resolvePath(abs: string, opts: ResolveOptions = {}): string {\n const { cred, followFinal = true } = opts;\n const parts = P.segments(P.normalize(abs));\n let current = \"\";\n let hops = 0;\n\n for (let i = 0; i < parts.length; i++) {\n const isFinal = i === parts.length - 1;\n const next = `${current}/${parts[i]}`;\n\n // Search permission on the containing directory.\n if (cred && current !== \"\") {\n const parentStat = this.tryLstat(current);\n if (parentStat && parentStat.isDirectory() && !this.permitted(parentStat, X_OK, cred)) {\n throw new SysError(\"EACCES\", \"open\", abs);\n }\n }\n\n const st = this.tryLstat(next);\n if (st?.isSymbolicLink() && (!isFinal || followFinal)) {\n if (++hops > MAX_SYMLINKS) throw new SysError(\"ELOOP\", \"open\", abs);\n const target = this.readlinkRaw(next);\n const resolved = P.isAbsolute(target) ? target : P.resolve(current === \"\" ? \"/\" : current, target);\n // Restart resolution with the link's target spliced in.\n const rest = parts.slice(i + 1);\n const combined = rest.length ? `${resolved}/${rest.join(\"/\")}` : resolved;\n return this.resolvePath(combined, { ...opts, cred });\n }\n\n current = next;\n if (!isFinal && st && !st.isDirectory()) throw new SysError(\"ENOTDIR\", \"open\", abs);\n }\n\n return current === \"\" ? \"/\" : current;\n }\n\n /** lstat that returns null instead of throwing, for internal probing. */\n private tryLstat(abs: string): Stats | null {\n try {\n return this.lstat(abs);\n } catch {\n return null;\n }\n }\n\n private readlinkRaw(abs: string): string {\n const virt = this.lookupVirtual(abs);\n if (virt) {\n if (virt.kind !== \"symlink\" || virt.target === undefined) throw new SysError(\"EINVAL\", \"readlink\", abs);\n return virt.target;\n }\n try {\n return this.volume.readlinkSync(abs);\n } catch (e) {\n throw toSysError(e, \"readlink\", abs);\n }\n }\n\n // ── metadata ─────────────────────────────────────────────────────────────\n\n /** stat(2) — follows symlinks. */\n stat(abs: string, opts: { cred?: Cred } = {}): Stats {\n const real = this.resolvePath(abs, { cred: opts.cred, followFinal: true });\n return this.lstat(real);\n }\n\n /** lstat(2) — does not follow a symlink in the final position. */\n lstat(abs: string): Stats {\n const path = P.clean(abs);\n const virt = this.lookupVirtual(path);\n if (virt) return this.statFromVirtual(path, virt);\n\n if (this.isUnderProvider(path)) throw new SysError(\"ENOENT\", \"lstat\", path);\n\n let raw;\n try {\n raw = this.volume.lstatSync(path);\n } catch (e) {\n throw toSysError(e, \"lstat\", path);\n }\n const kind: FileKind = raw.isSymbolicLink() ? \"symlink\" : raw.isDirectory() ? \"directory\" : \"file\";\n return new Stats({\n mode: ifmtFor(kind) | (raw.mode & PERM_MASK),\n size: raw.size,\n uid: raw.uid ?? 0,\n gid: raw.gid ?? 0,\n ino: raw.ino,\n nlink: raw.nlink,\n atimeMs: raw.atimeMs,\n mtimeMs: raw.mtimeMs,\n ctimeMs: raw.ctimeMs,\n birthtimeMs: raw.birthtimeMs,\n });\n }\n\n private statFromVirtual(abs: string, node: VirtualNode): Stats {\n let size = node.size ?? 0;\n if (size === 0 && node.read && node.kind === \"file\") {\n try {\n const data = node.read();\n size = typeof data === \"string\" ? encoder.encode(data).length : data.length;\n } catch {\n size = 0;\n }\n }\n const now = node.mtimeMs ?? Date.now();\n return new Stats({\n mode: ifmtFor(node.kind) | (node.mode & PERM_MASK),\n size,\n uid: node.uid ?? 0,\n gid: node.gid ?? 0,\n ino: this.virtualIno(abs),\n nlink: node.kind === \"directory\" ? 2 : 1,\n atimeMs: now,\n mtimeMs: now,\n ctimeMs: now,\n });\n }\n\n exists(abs: string, cred?: Cred): boolean {\n try {\n this.stat(abs, { cred });\n return true;\n } catch {\n return false;\n }\n }\n\n lexists(abs: string): boolean {\n try {\n this.lstat(abs);\n return true;\n } catch {\n return false;\n }\n }\n\n access(abs: string, mode: number = F_OK, cred?: Cred): void {\n const st = this.stat(abs, { cred });\n if (cred && !this.permitted(st, mode, cred)) throw new SysError(\"EACCES\", \"access\", abs);\n }\n\n realpath(abs: string, cred?: Cred): string {\n const real = this.resolvePath(abs, { cred, followFinal: true });\n this.lstat(real); // throws ENOENT if the final component is missing\n return real;\n }\n\n // ── reading ──────────────────────────────────────────────────────────────\n\n readFile(abs: string, cred?: Cred): Uint8Array {\n const real = this.resolvePath(abs, { cred });\n const virt = this.lookupVirtual(real);\n if (virt) {\n if (virt.kind === \"directory\") throw new SysError(\"EISDIR\", \"read\", real);\n if (!virt.read) throw new SysError(\"EACCES\", \"read\", real);\n this.require(this.statFromVirtual(real, virt), R_OK, cred, \"open\", real);\n const data = virt.read();\n return typeof data === \"string\" ? encoder.encode(data) : data;\n }\n if (this.isUnderProvider(real)) throw new SysError(\"ENOENT\", \"open\", real);\n\n const st = this.lstat(real);\n if (st.isDirectory()) throw new SysError(\"EISDIR\", \"read\", real);\n this.require(st, R_OK, cred, \"open\", real);\n try {\n return this.volume.readFileSync(real);\n } catch (e) {\n throw toSysError(e, \"open\", real);\n }\n }\n\n readText(abs: string, cred?: Cred): string {\n return decoder.decode(this.readFile(abs, cred));\n }\n\n readdir(abs: string, cred?: Cred): string[] {\n const real = this.resolvePath(abs, { cred });\n const names = new Set<string>();\n const virt = this.lookupVirtual(real);\n\n // A synthetic directory contributes its entries…\n if (virt) {\n if (virt.kind !== \"directory\") throw new SysError(\"ENOTDIR\", \"scandir\", real);\n this.require(this.statFromVirtual(real, virt), R_OK, cred, \"scandir\", real);\n for (const name of virt.list?.() ?? []) names.add(name);\n } else if (this.isUnderProvider(real)) {\n throw new SysError(\"ENOENT\", \"scandir\", real);\n }\n\n // …and the real directory underneath contributes its own, so `/proc` still\n // lists synthetic files even though the mount point exists on disk.\n const hasReal = this.volumeHasDir(real);\n if (hasReal) {\n const st = this.lstat(real);\n if (!virt) {\n if (!st.isDirectory()) throw new SysError(\"ENOTDIR\", \"scandir\", real);\n this.require(st, R_OK, cred, \"scandir\", real);\n }\n try {\n for (const name of this.volume.readdirSync(real)) names.add(name);\n } catch (e) {\n if (!virt) throw toSysError(e, \"scandir\", real);\n }\n } else if (!virt) {\n const st = this.lstat(real);\n if (!st.isDirectory()) throw new SysError(\"ENOTDIR\", \"scandir\", real);\n throw new SysError(\"ENOENT\", \"scandir\", real);\n }\n\n // Provider mount points nested one level down also show up.\n for (const p of this.providers) {\n if (P.dirname(p.root) === real) names.add(P.basename(p.root));\n }\n for (const name of this.virtualChildren(real)) names.add(name);\n\n return [...names].sort();\n }\n\n /** True when the volume itself has a real directory at `abs`. */\n private volumeHasDir(abs: string): boolean {\n try {\n return this.volume.lstatSync(abs).isDirectory();\n } catch {\n return false;\n }\n }\n\n readdirWithTypes(abs: string, cred?: Cred): DirEntry[] {\n const real = this.resolvePath(abs, { cred });\n return this.readdir(real, cred).map((name) => {\n try {\n return { name, kind: this.lstat(P.join(real, name)).kind };\n } catch {\n return { name, kind: \"file\" as FileKind };\n }\n });\n }\n\n readlink(abs: string, cred?: Cred): string {\n const real = this.resolvePath(abs, { cred, followFinal: false });\n const st = this.lstat(real);\n if (!st.isSymbolicLink()) throw new SysError(\"EINVAL\", \"readlink\", real);\n return this.readlinkRaw(real);\n }\n\n // ── writing ──────────────────────────────────────────────────────────────\n\n writeFile(abs: string, data: Uint8Array | string, opts: WriteOptions = {}): void {\n const cred = opts.privileged ? undefined : opts.cred;\n const real = this.resolvePath(abs, { cred });\n const bytes = typeof data === \"string\" ? encoder.encode(data) : data;\n\n const virt = this.lookupVirtual(real);\n if (virt) {\n if (!virt.write) throw new SysError(\"EACCES\", \"write\", real);\n this.require(this.statFromVirtual(real, virt), W_OK, cred, \"open\", real);\n virt.write(bytes, opts.append ?? false);\n return;\n }\n if (this.isUnderProvider(real)) throw new SysError(\"ENOENT\", \"open\", real);\n\n const existing = this.tryLstat(real);\n if (existing) {\n if (existing.isDirectory()) throw new SysError(\"EISDIR\", \"open\", real);\n this.require(existing, W_OK, cred, \"open\", real);\n } else {\n const parent = P.dirname(real);\n const pst = this.lstat(parent);\n if (!pst.isDirectory()) throw new SysError(\"ENOTDIR\", \"open\", real);\n this.require(pst, W_OK | X_OK, cred, \"open\", real);\n }\n\n try {\n if (opts.append && existing) this.volume.appendFileSync(real, bytes);\n else this.volume.writeFileSync(real, bytes);\n } catch (e) {\n throw toSysError(e, \"open\", real);\n }\n\n if (!existing) {\n const mode = (opts.mode ?? 0o666) & ~(opts.cred?.umask ?? 0);\n this.volume.chmodSync(real, mode & PERM_MASK);\n // The underlying volume defaults new files to uid 1000; kernel-internal\n // writes (no cred) are root's, which is what a boot image expects.\n this.volume.chownSync(real, opts.cred?.uid ?? 0, opts.cred?.gid ?? 0);\n } else if (opts.mode !== undefined) {\n this.volume.chmodSync(real, opts.mode & PERM_MASK);\n }\n }\n\n appendFile(abs: string, data: Uint8Array | string, opts: WriteOptions = {}): void {\n this.writeFile(abs, data, { ...opts, append: true });\n }\n\n truncate(abs: string, len = 0, cred?: Cred): void {\n const real = this.resolvePath(abs, { cred });\n const st = this.lstat(real);\n if (st.isDirectory()) throw new SysError(\"EISDIR\", \"truncate\", real);\n this.require(st, W_OK, cred, \"truncate\", real);\n try {\n this.volume.truncateSync(real, len);\n } catch (e) {\n throw toSysError(e, \"truncate\", real);\n }\n }\n\n mkdir(abs: string, opts: { mode?: number; recursive?: boolean; cred?: Cred } = {}): void {\n const cred = opts.cred;\n const mode = ((opts.mode ?? 0o777) & ~(cred?.umask ?? 0)) & PERM_MASK;\n const real = this.resolvePath(abs, { cred, followFinal: false });\n\n if (opts.recursive) {\n const parts = P.segments(real);\n let cur = \"\";\n for (const part of parts) {\n cur += \"/\" + part;\n const st = this.tryLstat(cur);\n if (st) {\n if (!st.isDirectory()) throw new SysError(\"ENOTDIR\", \"mkdir\", cur);\n continue;\n }\n this.mkdirOne(cur, mode, cred);\n }\n return;\n }\n\n if (this.lexists(real)) throw new SysError(\"EEXIST\", \"mkdir\", real);\n this.mkdirOne(real, mode, cred);\n }\n\n private mkdirOne(abs: string, mode: number, cred?: Cred): void {\n const parent = P.dirname(abs);\n const pst = this.lstat(parent);\n if (!pst.isDirectory()) throw new SysError(\"ENOTDIR\", \"mkdir\", abs);\n this.require(pst, W_OK | X_OK, cred, \"mkdir\", abs);\n try {\n this.volume.mkdirSync(abs, { mode });\n } catch (e) {\n throw toSysError(e, \"mkdir\", abs);\n }\n this.volume.chmodSync(abs, mode);\n this.volume.chownSync(abs, cred?.uid ?? 0, cred?.gid ?? 0);\n }\n\n rmdir(abs: string, cred?: Cred): void {\n const real = this.resolvePath(abs, { cred, followFinal: false });\n const st = this.lstat(real);\n if (!st.isDirectory()) throw new SysError(\"ENOTDIR\", \"rmdir\", real);\n if (this.readdir(real).length > 0) throw new SysError(\"ENOTEMPTY\", \"rmdir\", real);\n this.requireParentWrite(real, cred, \"rmdir\");\n try {\n this.volume.rmdirSync(real);\n } catch (e) {\n throw toSysError(e, \"rmdir\", real);\n }\n }\n\n unlink(abs: string, cred?: Cred): void {\n const real = this.resolvePath(abs, { cred, followFinal: false });\n const st = this.lstat(real);\n if (st.isDirectory()) throw new SysError(\"EISDIR\", \"unlink\", real);\n this.requireParentWrite(real, cred, \"unlink\");\n if (this.isUnderProvider(real)) throw new SysError(\"EPERM\", \"unlink\", real);\n try {\n this.volume.unlinkSync(real);\n } catch (e) {\n throw toSysError(e, \"unlink\", real);\n }\n }\n\n /** Recursive delete, the engine behind `rm -r`. */\n rmrf(abs: string, cred?: Cred): void {\n const real = this.resolvePath(abs, { cred, followFinal: false });\n const st = this.lstat(real);\n if (!st.isDirectory()) {\n this.unlink(real, cred);\n return;\n }\n for (const name of this.readdir(real, cred)) {\n this.rmrf(P.join(real, name), cred);\n }\n this.rmdir(real, cred);\n }\n\n private requireParentWrite(abs: string, cred: Cred | undefined, syscall: string): void {\n if (!cred) return;\n const parent = P.dirname(abs);\n const pst = this.lstat(parent);\n this.require(pst, W_OK | X_OK, cred, syscall, abs);\n // Sticky directories (like /tmp) only let owners remove their own entries.\n if ((pst.mode & 0o1000) !== 0 && cred.uid !== 0) {\n const st = this.lstat(abs);\n if (st.uid !== cred.uid && pst.uid !== cred.uid) throw new SysError(\"EPERM\", syscall, abs);\n }\n }\n\n rename(from: string, to: string, cred?: Cred): void {\n const src = this.resolvePath(from, { cred, followFinal: false });\n const dst = this.resolvePath(to, { cred, followFinal: false });\n if (src === dst) return;\n this.lstat(src);\n if (P.contains(src, dst) && src !== dst) throw new SysError(\"EINVAL\", \"rename\", src, dst);\n this.requireParentWrite(src, cred, \"rename\");\n const dstParent = P.dirname(dst);\n const dpst = this.lstat(dstParent);\n this.require(dpst, W_OK | X_OK, cred, \"rename\", dst);\n try {\n this.volume.renameSync(src, dst);\n } catch (e) {\n throw toSysError(e, \"rename\", src);\n }\n }\n\n copyFile(from: string, to: string, cred?: Cred): void {\n const data = this.readFile(from, cred);\n const st = this.stat(from, { cred });\n this.writeFile(to, data, { cred, mode: st.perms });\n this.chmod(to, st.perms, cred);\n }\n\n symlink(target: string, linkPath: string, cred?: Cred): void {\n const real = this.resolvePath(linkPath, { cred, followFinal: false });\n if (this.lexists(real)) throw new SysError(\"EEXIST\", \"symlink\", real);\n const parent = P.dirname(real);\n const pst = this.lstat(parent);\n this.require(pst, W_OK | X_OK, cred, \"symlink\", real);\n try {\n this.volume.symlinkSync(target, real);\n } catch (e) {\n throw toSysError(e, \"symlink\", real);\n }\n this.volume.lchownSync(real, cred?.uid ?? 0, cred?.gid ?? 0);\n }\n\n link(existing: string, newPath: string, cred?: Cred): void {\n const src = this.resolvePath(existing, { cred });\n const dst = this.resolvePath(newPath, { cred, followFinal: false });\n const st = this.lstat(src);\n if (st.isDirectory()) throw new SysError(\"EPERM\", \"link\", src);\n if (this.lexists(dst)) throw new SysError(\"EEXIST\", \"link\", dst);\n const pst = this.lstat(P.dirname(dst));\n this.require(pst, W_OK | X_OK, cred, \"link\", dst);\n try {\n this.volume.linkSync(src, dst);\n } catch (e) {\n throw toSysError(e, \"link\", src, dst);\n }\n }\n\n chmod(abs: string, mode: number, cred?: Cred, follow = true): void {\n const real = this.resolvePath(abs, { cred, followFinal: follow });\n const st = this.lstat(real);\n if (cred && cred.uid !== 0 && st.uid !== cred.uid) throw new SysError(\"EPERM\", \"chmod\", real);\n try {\n if (st.isSymbolicLink()) this.volume.lchmodSync(real, mode & PERM_MASK);\n else this.volume.chmodSync(real, mode & PERM_MASK);\n } catch (e) {\n throw toSysError(e, \"chmod\", real);\n }\n }\n\n chown(abs: string, uid: number, gid: number, cred?: Cred, follow = true): void {\n const real = this.resolvePath(abs, { cred, followFinal: follow });\n const st = this.lstat(real);\n if (cred && cred.uid !== 0) {\n // Unprivileged users may only change the group, and only to one of theirs.\n if (uid !== -1 && uid !== st.uid) throw new SysError(\"EPERM\", \"chown\", real);\n if (gid !== -1 && !cred.groups.includes(gid)) throw new SysError(\"EPERM\", \"chown\", real);\n if (st.uid !== cred.uid) throw new SysError(\"EPERM\", \"chown\", real);\n }\n const nextUid = uid === -1 ? st.uid : uid;\n const nextGid = gid === -1 ? st.gid : gid;\n try {\n if (st.isSymbolicLink()) this.volume.lchownSync(real, nextUid, nextGid);\n else this.volume.chownSync(real, nextUid, nextGid);\n } catch (e) {\n throw toSysError(e, \"chown\", real);\n }\n }\n\n utimes(abs: string, atimeMs: number, mtimeMs: number, cred?: Cred): void {\n const real = this.resolvePath(abs, { cred });\n try {\n this.volume.utimesSync(real, new Date(atimeMs), new Date(mtimeMs));\n } catch (e) {\n throw toSysError(e, \"utimes\", real);\n }\n }\n\n /** `touch` semantics: create when missing, otherwise bump the timestamps. */\n touch(abs: string, cred?: Cred, timeMs = Date.now()): void {\n if (this.lexists(abs)) this.utimes(abs, timeMs, timeMs, cred);\n else this.writeFile(abs, new Uint8Array(0), { cred, mode: 0o666 });\n }\n\n // ── bulk helpers ─────────────────────────────────────────────────────────\n\n /** Depth-first walk yielding absolute paths. Symlinks are not followed. */\n *walk(abs: string, opts: { includeSelf?: boolean; cred?: Cred; maxDepth?: number } = {}): Generator<string> {\n const { includeSelf = true, cred, maxDepth = Infinity } = opts;\n const start = P.clean(abs);\n if (includeSelf) yield start;\n const recurse = (dir: string, depth: number): string[] => {\n if (depth > maxDepth) return [];\n let names: string[];\n try {\n names = this.readdir(dir, cred);\n } catch {\n return [];\n }\n const out: string[] = [];\n for (const name of names) {\n const child = P.join(dir, name);\n out.push(child);\n let st: Stats | null = null;\n try {\n st = this.lstat(child);\n } catch {\n /* vanished mid-walk */\n }\n if (st?.isDirectory()) out.push(...recurse(child, depth + 1));\n }\n return out;\n };\n let st: Stats | null = null;\n try {\n st = this.lstat(start);\n } catch {\n return;\n }\n if (st.isDirectory()) yield* recurse(start, 1);\n }\n\n /** Recursive copy used by `cp -r` and the container's `copyIn` helper. */\n copyTree(from: string, to: string, cred?: Cred): void {\n const st = this.lstat(this.resolvePath(from, { cred, followFinal: false }));\n if (st.isSymbolicLink()) {\n this.symlink(this.readlink(from, cred), to, cred);\n return;\n }\n if (!st.isDirectory()) {\n this.copyFile(from, to, cred);\n return;\n }\n if (!this.lexists(to)) this.mkdir(to, { cred, mode: st.perms, recursive: true });\n for (const name of this.readdir(from, cred)) {\n this.copyTree(P.join(from, name), P.join(to, name), cred);\n }\n }\n\n /** Free/used byte accounting for `df` and `du`. */\n usage(abs = \"/\"): { files: number; dirs: number; bytes: number } {\n let files = 0;\n let dirs = 0;\n let bytes = 0;\n for (const p of this.walk(abs)) {\n let st: Stats | null = null;\n try {\n st = this.lstat(p);\n } catch {\n continue;\n }\n if (st.isDirectory()) dirs++;\n else {\n files++;\n bytes += st.size;\n }\n }\n return { files, dirs, bytes };\n }\n}\n\nexport { F_OK, R_OK, W_OK, X_OK, S_IFDIR, S_IFREG, S_IFLNK, kindOf };\n","import * as P from \"../fs/path.js\";\nimport type { RuntimeVolume, VolumeStat, VolumeStats } from \"./contracts.js\";\n\nexport type NodeKind = \"file\" | \"directory\" | \"symlink\";\n\ninterface Inode {\n ino: number;\n kind: NodeKind;\n mode: number;\n uid: number;\n gid: number;\n nlink: number;\n data: Uint8Array;\n target: string;\n atimeMs: number;\n mtimeMs: number;\n ctimeMs: number;\n birthtimeMs: number;\n}\n\nexport interface MemoryVolumeSnapshotEntry {\n path: string;\n ino: number;\n kind: NodeKind;\n mode: number;\n uid: number;\n gid: number;\n nlink: number;\n data: number[];\n target: string;\n atimeMs: number;\n mtimeMs: number;\n ctimeMs: number;\n birthtimeMs: number;\n}\n\nclass VolumeError extends Error {\n constructor(readonly code: string, operation: string, path: string) {\n super(`${code}: ${operation}, '${path}'`);\n this.name = \"VolumeError\";\n }\n}\n\nclass MemoryStat implements VolumeStat {\n constructor(private readonly inode: Inode) {}\n get mode(): number { return this.inode.mode; }\n get size(): number {\n return this.inode.kind === \"file\"\n ? this.inode.data.length\n : this.inode.kind === \"symlink\" ? new TextEncoder().encode(this.inode.target).length : 0;\n }\n get uid(): number { return this.inode.uid; }\n get gid(): number { return this.inode.gid; }\n get ino(): number { return this.inode.ino; }\n get nlink(): number { return this.inode.nlink; }\n get atimeMs(): number { return this.inode.atimeMs; }\n get mtimeMs(): number { return this.inode.mtimeMs; }\n get ctimeMs(): number { return this.inode.ctimeMs; }\n get birthtimeMs(): number { return this.inode.birthtimeMs; }\n isFile(): boolean { return this.inode.kind === \"file\"; }\n isDirectory(): boolean { return this.inode.kind === \"directory\"; }\n isSymbolicLink(): boolean { return this.inode.kind === \"symlink\"; }\n}\n\nconst encoder = new TextEncoder();\n\n/** Browser-safe, synchronous in-memory filesystem used by the new runtime. */\nexport class MemoryVolume implements RuntimeVolume {\n private readonly entries = new Map<string, Inode>();\n private nextIno = 2;\n\n constructor() {\n this.entries.set(\"/\", this.inode(\"directory\", 0o755));\n }\n\n readFileSync(path: string): Uint8Array {\n const key = this.key(path);\n const node = this.required(key, \"open\");\n if (node.kind === \"directory\") throw new VolumeError(\"EISDIR\", \"read\", key);\n if (node.kind !== \"file\") throw new VolumeError(\"EINVAL\", \"read\", key);\n node.atimeMs = Date.now();\n return node.data.slice();\n }\n\n writeFileSync(path: string, data: string | Uint8Array): void {\n const key = this.key(path);\n this.requireParent(key, \"open\");\n const bytes = typeof data === \"string\" ? encoder.encode(data) : data.slice();\n const current = this.entries.get(key);\n if (current?.kind === \"directory\") throw new VolumeError(\"EISDIR\", \"open\", key);\n if (current?.kind === \"symlink\") throw new VolumeError(\"EINVAL\", \"open\", key);\n if (current) {\n current.data = bytes;\n this.touchChanged(current, true);\n } else {\n this.entries.set(key, this.inode(\"file\", 0o666, bytes));\n }\n }\n\n appendFileSync(path: string, data: string | Uint8Array): void {\n const key = this.key(path);\n const bytes = typeof data === \"string\" ? encoder.encode(data) : data;\n const current = this.entries.get(key);\n if (!current) return this.writeFileSync(key, bytes);\n if (current.kind !== \"file\") throw new VolumeError(current.kind === \"directory\" ? \"EISDIR\" : \"EINVAL\", \"open\", key);\n const next = new Uint8Array(current.data.length + bytes.length);\n next.set(current.data);\n next.set(bytes, current.data.length);\n current.data = next;\n this.touchChanged(current, true);\n }\n\n readdirSync(path: string): string[] {\n const key = this.key(path);\n const node = this.required(key, \"scandir\");\n if (node.kind !== \"directory\") throw new VolumeError(\"ENOTDIR\", \"scandir\", key);\n const prefix = key === \"/\" ? \"/\" : `${key}/`;\n const names = new Set<string>();\n for (const candidate of this.entries.keys()) {\n if (!candidate.startsWith(prefix) || candidate === key) continue;\n const rest = candidate.slice(prefix.length);\n if (rest && !rest.includes(\"/\")) names.add(rest);\n }\n node.atimeMs = Date.now();\n return [...names].sort();\n }\n\n lstatSync(path: string): VolumeStat {\n return new MemoryStat(this.required(this.key(path), \"lstat\"));\n }\n\n readlinkSync(path: string): string {\n const key = this.key(path);\n const node = this.required(key, \"readlink\");\n if (node.kind !== \"symlink\") throw new VolumeError(\"EINVAL\", \"readlink\", key);\n return node.target;\n }\n\n mkdirSync(path: string, options: { mode?: number } = {}): void {\n const key = this.key(path);\n if (this.entries.has(key)) throw new VolumeError(\"EEXIST\", \"mkdir\", key);\n this.requireParent(key, \"mkdir\");\n this.entries.set(key, this.inode(\"directory\", options.mode ?? 0o777));\n }\n\n rmdirSync(path: string): void {\n const key = this.key(path);\n if (key === \"/\") throw new VolumeError(\"EBUSY\", \"rmdir\", key);\n const node = this.required(key, \"rmdir\");\n if (node.kind !== \"directory\") throw new VolumeError(\"ENOTDIR\", \"rmdir\", key);\n const prefix = `${key}/`;\n if ([...this.entries.keys()].some((candidate) => candidate.startsWith(prefix))) {\n throw new VolumeError(\"ENOTEMPTY\", \"rmdir\", key);\n }\n this.entries.delete(key);\n }\n\n unlinkSync(path: string): void {\n const key = this.key(path);\n const node = this.required(key, \"unlink\");\n if (node.kind === \"directory\") throw new VolumeError(\"EISDIR\", \"unlink\", key);\n this.entries.delete(key);\n node.nlink--;\n node.ctimeMs = Date.now();\n }\n\n renameSync(from: string, to: string): void {\n const source = this.key(from);\n const dest = this.key(to);\n const node = this.required(source, \"rename\");\n this.requireParent(dest, \"rename\");\n if (source === \"/\") throw new VolumeError(\"EBUSY\", \"rename\", source);\n if (dest.startsWith(`${source}/`)) throw new VolumeError(\"EINVAL\", \"rename\", source);\n\n const existing = this.entries.get(dest);\n if (existing?.kind === \"directory\" && this.readdirSync(dest).length > 0) {\n throw new VolumeError(\"ENOTEMPTY\", \"rename\", dest);\n }\n if (existing) {\n this.entries.delete(dest);\n existing.nlink--;\n }\n\n const moved = [...this.entries.entries()]\n .filter(([path]) => path === source || path.startsWith(`${source}/`))\n .sort(([a], [b]) => a.length - b.length);\n for (const [path] of moved) this.entries.delete(path);\n for (const [path, value] of moved) {\n this.entries.set(dest + path.slice(source.length), value);\n value.ctimeMs = Date.now();\n }\n node.ctimeMs = Date.now();\n }\n\n symlinkSync(target: string, path: string): void {\n const key = this.key(path);\n if (this.entries.has(key)) throw new VolumeError(\"EEXIST\", \"symlink\", key);\n this.requireParent(key, \"symlink\");\n const node = this.inode(\"symlink\", 0o777);\n node.target = target;\n this.entries.set(key, node);\n }\n\n linkSync(existing: string, path: string): void {\n const source = this.key(existing);\n const dest = this.key(path);\n const node = this.required(source, \"link\");\n if (node.kind === \"directory\") throw new VolumeError(\"EPERM\", \"link\", source);\n if (this.entries.has(dest)) throw new VolumeError(\"EEXIST\", \"link\", dest);\n this.requireParent(dest, \"link\");\n node.nlink++;\n node.ctimeMs = Date.now();\n this.entries.set(dest, node);\n }\n\n truncateSync(path: string, length = 0): void {\n const key = this.key(path);\n const node = this.required(key, \"truncate\");\n if (node.kind !== \"file\") throw new VolumeError(node.kind === \"directory\" ? \"EISDIR\" : \"EINVAL\", \"truncate\", key);\n const data = new Uint8Array(length);\n data.set(node.data.subarray(0, length));\n node.data = data;\n this.touchChanged(node, true);\n }\n\n chmodSync(path: string, mode: number): void { this.setMode(path, mode); }\n lchmodSync(path: string, mode: number): void { this.setMode(path, mode); }\n chownSync(path: string, uid: number, gid: number): void { this.setOwner(path, uid, gid); }\n lchownSync(path: string, uid: number, gid: number): void { this.setOwner(path, uid, gid); }\n\n utimesSync(path: string, atime: Date, mtime: Date): void {\n const node = this.required(this.key(path), \"utimes\");\n node.atimeMs = atime.getTime();\n node.mtimeMs = mtime.getTime();\n node.ctimeMs = Date.now();\n }\n\n getStats(): VolumeStats {\n const seen = new Set<number>();\n let totalBytes = 0;\n let fileCount = 0;\n let directoryCount = 0;\n for (const node of this.entries.values()) {\n if (seen.has(node.ino)) continue;\n seen.add(node.ino);\n if (node.kind === \"directory\") directoryCount++;\n else {\n fileCount++;\n totalBytes += node.kind === \"file\" ? node.data.length : encoder.encode(node.target).length;\n }\n }\n return { totalBytes, fileCount, directoryCount, dirCount: directoryCount };\n }\n\n snapshot(): MemoryVolumeSnapshotEntry[] {\n return [...this.entries.entries()].map(([path, node]) => ({ path, ...node, data: [...node.data] }));\n }\n\n restore(snapshot: MemoryVolumeSnapshotEntry[]): void {\n const inodes = new Map<number, Inode>();\n const entries = new Map<string, Inode>();\n for (const item of snapshot) {\n let inode = inodes.get(item.ino);\n if (!inode) {\n inode = { ...item, data: new Uint8Array(item.data) };\n inodes.set(item.ino, inode);\n }\n entries.set(this.key(item.path), inode);\n }\n if (!entries.has(\"/\")) throw new VolumeError(\"EINVAL\", \"restore\", \"/\");\n this.entries.clear();\n for (const [path, inode] of entries) this.entries.set(path, inode);\n this.nextIno = Math.max(1, ...inodes.keys()) + 1;\n }\n\n /** Serializable representation used by RuntimePod snapshots. */\n export(): Array<{ path: string; kind: NodeKind; mode: number; uid: number; gid: number; data?: number[]; target?: string }> {\n return [...this.entries.entries()].map(([path, node]) => ({\n path, kind: node.kind, mode: node.mode, uid: node.uid, gid: node.gid,\n ...(node.kind === \"file\" ? { data: [...node.data] } : {}),\n ...(node.kind === \"symlink\" ? { target: node.target } : {}),\n }));\n }\n\n private setMode(path: string, mode: number): void {\n const node = this.required(this.key(path), \"chmod\");\n node.mode = mode & 0o7777;\n node.ctimeMs = Date.now();\n }\n\n private setOwner(path: string, uid: number, gid: number): void {\n const node = this.required(this.key(path), \"chown\");\n node.uid = uid;\n node.gid = gid;\n node.ctimeMs = Date.now();\n }\n\n private key(path: string): string {\n const clean = P.clean(path);\n if (!P.isAbsolute(clean)) throw new VolumeError(\"EINVAL\", \"path\", path);\n return clean;\n }\n\n private required(path: string, operation: string): Inode {\n const node = this.entries.get(path);\n if (!node) throw new VolumeError(\"ENOENT\", operation, path);\n return node;\n }\n\n private requireParent(path: string, operation: string): Inode {\n const parent = this.required(P.dirname(path), operation);\n if (parent.kind !== \"directory\") throw new VolumeError(\"ENOTDIR\", operation, path);\n return parent;\n }\n\n private inode(kind: NodeKind, mode: number, data = new Uint8Array(0)): Inode {\n const now = Date.now();\n return {\n ino: kind === \"directory\" && this.entries.size === 0 ? 1 : this.nextIno++,\n kind, mode: mode & 0o7777, uid: 0, gid: 0, nlink: 1,\n data, target: \"\", atimeMs: now, mtimeMs: now, ctimeMs: now, birthtimeMs: now,\n };\n }\n\n private touchChanged(node: Inode, modified: boolean): void {\n const now = Date.now();\n node.ctimeMs = now;\n if (modified) node.mtimeMs = now;\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/python/host-abi.ts","../src/python/protocol.ts","../src/python/sync-transport.ts","../src/kernel/open-file.ts","../src/kernel/descriptors.ts","../src/net/virtual-socket.ts","../src/python/syscall-server.ts","../src/python/syscall-client.ts","../src/fs/errno.ts","../src/fs/path.ts","../src/fs/mode.ts","../src/fs/stat.ts","../src/fs/vfs.ts","../src/fs/memory-volume.ts"],"names":["encoder","resolve","files","st","clean"],"mappings":"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","file":"python-abi.cjs","sourcesContent":["/* Generated by python-runtime/scripts/generate_abi.py from abi/host-v1.json. Do not edit. */\n\n/** Protocol version carried in every frame. */\nexport const SBX_HOST_ABI_VERSION = 1;\n\nexport const SBX_REQUEST_HEADER_BYTES = 16;\nexport const SBX_RESPONSE_HEADER_BYTES = 20;\n\n/** Operation codes. Families are 256 apart so a family stays contiguous. */\nexport const Op = {\n handshake: 0,\n openat: 1,\n close: 2,\n read: 3,\n write: 4,\n pread: 5,\n pwrite: 6,\n lseek: 7,\n fstat: 8,\n statat: 9,\n ftruncate: 10,\n renameat: 11,\n unlinkat: 12,\n mkdirat: 13,\n readlinkat: 14,\n symlinkat: 15,\n getdents: 16,\n fsync: 17,\n dup: 256,\n dup2: 257,\n get_flags: 258,\n set_flags: 259,\n pipe: 512,\n poll: 768,\n clock_gettime: 1024,\n sleep: 1025,\n getpid: 1280,\n getcwd: 1281,\n chdir: 1282,\n environ: 1283,\n getrandom: 1536,\n socket: 1792,\n bind: 1793,\n listen: 1794,\n accept: 1795,\n connect: 1796,\n send: 1797,\n recv: 1798,\n shutdown: 1799,\n getsockname: 1800,\n getpeername: 1801,\n setsockopt: 1802,\n getsockopt: 1803,\n socket_close: 1804,\n spawn: 2048,\n waitpid: 2049,\n kill: 2050,\n} as const;\n\nexport type OpCode = (typeof Op)[keyof typeof Op];\n\n/** Canonical (Linux/musl) errno values. A negative status is `-Errno.X`. */\nexport const Errno = {\n EPERM: 1,\n ENOENT: 2,\n ESRCH: 3,\n EINTR: 4,\n EIO: 5,\n ENXIO: 6,\n E2BIG: 7,\n EBADF: 9,\n ECHILD: 10,\n EAGAIN: 11,\n ENOMEM: 12,\n EACCES: 13,\n EFAULT: 14,\n EBUSY: 16,\n EEXIST: 17,\n EXDEV: 18,\n ENODEV: 19,\n ENOTDIR: 20,\n EISDIR: 21,\n EINVAL: 22,\n ENFILE: 23,\n EMFILE: 24,\n ENOTTY: 25,\n EFBIG: 27,\n ENOSPC: 28,\n ESPIPE: 29,\n EROFS: 30,\n EMLINK: 31,\n EPIPE: 32,\n ERANGE: 34,\n ENAMETOOLONG: 36,\n ENOSYS: 38,\n ENOTEMPTY: 39,\n ELOOP: 40,\n ENODATA: 61,\n ENOTSOCK: 88,\n EPROTONOSUPPORT: 93,\n EAFNOSUPPORT: 97,\n EADDRINUSE: 98,\n EADDRNOTAVAIL: 99,\n ENETUNREACH: 101,\n ECONNRESET: 104,\n EISCONN: 106,\n ENOTCONN: 107,\n ECONNREFUSED: 111,\n EPROTO: 71,\n EOVERFLOW: 75,\n ETIMEDOUT: 110,\n ECANCELED: 125,\n EDQUOT: 122,\n} as const;\n\nexport type ErrnoName = keyof typeof Errno;\n\n/** Capability names a host may advertise in its handshake. */\nexport const CAPABILITIES = [\"files\", \"descriptors\", \"pipes\", \"readiness\", \"time\", \"identity\", \"entropy\", \"sockets\", \"processes\", \"signals\", \"storage\", \"services\", \"threads\"] as const;\n\nexport type Capability = (typeof CAPABILITIES)[number];\n\n/** Names by code, for diagnostics. Never used for dispatch. */\nexport const OP_NAMES: Record<number, string> = Object.fromEntries(\n Object.entries(Op).map(([name, code]) => [code, name]),\n);\n\nexport const ERRNO_NAMES: Record<number, string> = Object.fromEntries(\n Object.entries(Errno).map(([name, code]) => [code, name]),\n);\n","/**\n * Framing for the host ABI.\n *\n * Every field is fixed-width and little-endian, because the two sides are\n * compiled by different toolchains and a shared struct layout is the one thing\n * they cannot negotiate at runtime. Text is UTF-8; file content and network\n * traffic are raw bytes and are never decoded in transit.\n *\n * `request_id` and `process_generation` exist so a late answer can be\n * recognised as late. A worker that exits and is replaced must not have its\n * successor accept a completion addressed to the process before it, and the\n * failure mode for a mismatched frame is an error — never an empty success.\n */\n\nimport {\n Errno, OP_NAMES, SBX_HOST_ABI_VERSION, SBX_REQUEST_HEADER_BYTES, SBX_RESPONSE_HEADER_BYTES,\n} from \"./host-abi.js\";\n\nexport interface RequestHeader {\n version: number;\n op: number;\n requestId: number;\n generation: number;\n}\n\nexport interface ResponseFrame {\n header: RequestHeader;\n status: number;\n payload: Uint8Array;\n}\n\nexport class ProtocolError extends Error {\n readonly code = \"ERR_SBX_ABI_PROTOCOL\";\n}\n\nexport function encodeRequest(header: RequestHeader, payload: Uint8Array): Uint8Array {\n const frame = new Uint8Array(SBX_REQUEST_HEADER_BYTES + payload.length);\n const view = new DataView(frame.buffer);\n view.setUint16(0, header.version, true);\n view.setUint16(2, header.op, true);\n view.setUint32(4, header.requestId, true);\n view.setUint32(8, header.generation, true);\n view.setUint32(12, payload.length, true);\n frame.set(payload, SBX_REQUEST_HEADER_BYTES);\n return frame;\n}\n\nexport function decodeRequest(frame: Uint8Array): { header: RequestHeader; payload: Uint8Array } {\n if (frame.length < SBX_REQUEST_HEADER_BYTES) throw new ProtocolError(\"short request frame\");\n const view = new DataView(frame.buffer, frame.byteOffset, frame.byteLength);\n const header: RequestHeader = {\n version: view.getUint16(0, true),\n op: view.getUint16(2, true),\n requestId: view.getUint32(4, true),\n generation: view.getUint32(8, true),\n };\n const length = view.getUint32(12, true);\n if (frame.length - SBX_REQUEST_HEADER_BYTES < length) {\n throw new ProtocolError(`truncated payload for ${OP_NAMES[header.op] ?? header.op}`);\n }\n return {\n header,\n payload: frame.subarray(SBX_REQUEST_HEADER_BYTES, SBX_REQUEST_HEADER_BYTES + length),\n };\n}\n\nexport function encodeResponse(header: RequestHeader, status: number, payload: Uint8Array): Uint8Array {\n const frame = new Uint8Array(SBX_RESPONSE_HEADER_BYTES + payload.length);\n const view = new DataView(frame.buffer);\n view.setUint16(0, header.version, true);\n view.setUint16(2, header.op, true);\n view.setUint32(4, header.requestId, true);\n view.setUint32(8, header.generation, true);\n view.setInt32(12, status, true);\n view.setUint32(16, payload.length, true);\n frame.set(payload, SBX_RESPONSE_HEADER_BYTES);\n return frame;\n}\n\nexport function decodeResponse(frame: Uint8Array, expected?: RequestHeader): ResponseFrame {\n if (frame.length < SBX_RESPONSE_HEADER_BYTES) {\n /* An empty or short frame means the transport failed. Reporting it as a\n * zero-byte success is how a dead host turns into silent data loss. */\n throw new ProtocolError(\"the host ABI transport returned an incomplete frame\");\n }\n const view = new DataView(frame.buffer, frame.byteOffset, frame.byteLength);\n const header: RequestHeader = {\n version: view.getUint16(0, true),\n op: view.getUint16(2, true),\n requestId: view.getUint32(4, true),\n generation: view.getUint32(8, true),\n };\n const status = view.getInt32(12, true);\n const length = view.getUint32(16, true);\n if (frame.length - SBX_RESPONSE_HEADER_BYTES < length) throw new ProtocolError(\"truncated response payload\");\n if (expected) {\n if (header.requestId !== expected.requestId) throw new ProtocolError(\"stale response: request id mismatch\");\n if (header.generation !== expected.generation) throw new ProtocolError(\"stale response: process generation mismatch\");\n if (header.op !== expected.op) throw new ProtocolError(\"response answers a different operation\");\n }\n if (header.version !== SBX_HOST_ABI_VERSION) {\n throw new ProtocolError(`host ABI version ${header.version}, expected ${SBX_HOST_ABI_VERSION}`);\n }\n return {\n header,\n status,\n payload: frame.subarray(SBX_RESPONSE_HEADER_BYTES, SBX_RESPONSE_HEADER_BYTES + length),\n };\n}\n\n/** Little-endian reader over a payload. Bounds-checked: the guest owns this memory. */\nexport class Reader {\n private at = 0;\n private readonly view: DataView;\n private readonly bytes: Uint8Array;\n\n constructor(bytes: Uint8Array) {\n this.bytes = bytes;\n this.view = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);\n }\n\n private need(count: number): number {\n if (this.at + count > this.bytes.length) throw new ProtocolError(\"payload underrun\");\n const offset = this.at;\n this.at += count;\n return offset;\n }\n\n i32(): number { return this.view.getInt32(this.need(4), true); }\n u32(): number { return this.view.getUint32(this.need(4), true); }\n i64(): number { return Number(this.view.getBigInt64(this.need(8), true)); }\n u64(): number { return Number(this.view.getBigUint64(this.need(8), true)); }\n bytes32(): Uint8Array {\n const length = this.u32();\n const offset = this.need(length);\n return this.bytes.subarray(offset, offset + length);\n }\n string(): string { return new TextDecoder().decode(this.bytes32()); }\n get remaining(): number { return this.bytes.length - this.at; }\n}\n\n/** Little-endian writer. Grows as needed; payload sizes are bounded by the caller. */\nexport class Writer {\n private parts: Uint8Array[] = [];\n\n i32(value: number): this { const b = new Uint8Array(4); new DataView(b.buffer).setInt32(0, value, true); this.parts.push(b); return this; }\n u32(value: number): this { const b = new Uint8Array(4); new DataView(b.buffer).setUint32(0, value >>> 0, true); this.parts.push(b); return this; }\n i64(value: number): this { const b = new Uint8Array(8); new DataView(b.buffer).setBigInt64(0, BigInt(Math.trunc(value)), true); this.parts.push(b); return this; }\n u64(value: number): this { const b = new Uint8Array(8); new DataView(b.buffer).setBigUint64(0, BigInt(Math.trunc(value)), true); this.parts.push(b); return this; }\n bytes32(value: Uint8Array): this { this.u32(value.length); this.parts.push(value); return this; }\n string(value: string): this { return this.bytes32(new TextEncoder().encode(value)); }\n\n finish(): Uint8Array {\n const total = this.parts.reduce((sum, part) => sum + part.length, 0);\n const out = new Uint8Array(total);\n let at = 0;\n for (const part of this.parts) { out.set(part, at); at += part.length; }\n return out;\n }\n}\n\n/** A status the guest reads as `-errno`. */\nexport function failure(errno: number): number {\n return -Math.abs(errno);\n}\n\nexport const EOK = 0;\nexport { Errno };\n","/**\n * The transport under the host ABI: one blocking client, one non-blocking host.\n *\n * This is deliberately not `runtime/sync-channel.ts`. That channel predates the\n * ABI and carries no request identity, so a late or duplicated answer is\n * indistinguishable from the right one; worse, its server answers a failed\n * handler with a zero-length frame, which a caller can only read as a\n * successful empty result. Both are acceptable for `spawnSync`, where the\n * payload is self-describing JSON, and neither is acceptable for `read()`,\n * where an empty result means end of input.\n *\n * So the framing here always carries a full response header, a transport\n * failure is always an error, and the client verifies that the answer it got\n * belongs to the question it asked.\n *\n * Only the client blocks, and the client never owns shared state. The host\n * services requests from its ordinary event loop and may take as long as it\n * likes — which is what lets a guest's synchronous `read()` wait for a\n * keystroke that has not been typed yet.\n */\n\n/* Control-word slots over shared memory. */\nconst STATE = 0;\nconst LENGTH = 1;\nconst MORE = 2;\nconst CONTROL_WORDS = 4;\n\nconst STATE_IDLE = 0;\nconst STATE_REQUEST = 1;\nconst STATE_RESPONSE = 2;\nconst STATE_CONTINUE = 3;\nconst STATE_CLOSED = 4;\n\n/** How long a blocked client sleeps before re-checking for a closed transport. */\nconst WAIT_SLICE_MS = 200;\n\nexport interface HostTransportBuffers {\n control: SharedArrayBuffer;\n data: SharedArrayBuffer;\n}\n\nexport function createHostTransportBuffers(windowBytes = 1 << 20): HostTransportBuffers {\n return {\n control: new SharedArrayBuffer(CONTROL_WORDS * Int32Array.BYTES_PER_ELEMENT),\n data: new SharedArrayBuffer(windowBytes),\n };\n}\n\n/**\n * Can this host support a blocking guest at all?\n *\n * `SharedArrayBuffer` needs cross-origin isolation in a browser, and\n * `Atomics.wait` is forbidden on a browser's main thread — which is why the\n * blocking side is always the worker. Reporting the cause matters: without it\n * the failure surfaces as an interpreter that will not start, with nothing\n * naming the header the host is missing.\n */\nexport function syncTransportUnavailableReason(): string | null {\n if (typeof globalThis.crossOriginIsolated === \"boolean\" && !globalThis.crossOriginIsolated) {\n return \"the page is not cross-origin isolated. Serve it with Cross-Origin-Opener-Policy: same-origin and \" +\n \"Cross-Origin-Embedder-Policy: require-corp.\";\n }\n if (typeof SharedArrayBuffer !== \"function\") return \"SharedArrayBuffer is unavailable in this host.\";\n if (typeof Atomics !== \"object\" || typeof Atomics.wait !== \"function\") return \"Atomics.wait is unavailable in this host.\";\n return null;\n}\n\nexport class HostTransportError extends Error {\n code = \"ERR_SBX_HOST_TRANSPORT\";\n}\n\n/**\n * The guest side. Lives in the worker with the compiled program and blocks.\n *\n * `wake` nudges the host's event loop: the host cannot poll shared memory\n * without spinning, so each window is announced with an ordinary message.\n */\nexport class HostCallClient {\n private control: Int32Array;\n private data: Uint8Array;\n private capacity: number;\n private wake: () => void;\n private closed = false;\n\n constructor(buffers: HostTransportBuffers, wake: () => void) {\n this.control = new Int32Array(buffers.control);\n this.data = new Uint8Array(buffers.data);\n this.capacity = this.data.length;\n this.wake = wake;\n }\n\n /** Send a frame and block until the whole answer is back. Never returns empty. */\n call(request: Uint8Array): Uint8Array {\n /* A transport that has already gone away stays gone. Without this the next\n * call republishes a request over the closed marker and waits for an answer\n * from a host that is no longer listening — a killed process would hang on\n * its way out instead of exiting. */\n if (this.closed || Atomics.load(this.control, STATE) === STATE_CLOSED) {\n this.closed = true;\n throw new HostTransportError(\"the host transport is closed\");\n }\n this.send(request);\n const response = this.receive();\n if (response.length === 0) {\n throw new HostTransportError(\"the host answered with no frame; the kernel side failed or went away\");\n }\n return response;\n }\n\n private send(request: Uint8Array): void {\n let offset = 0;\n for (;;) {\n const size = Math.min(this.capacity, request.length - offset);\n this.data.set(request.subarray(offset, offset + size), 0);\n offset += size;\n Atomics.store(this.control, LENGTH, size);\n Atomics.store(this.control, MORE, offset < request.length ? 1 : 0);\n this.publish(STATE_REQUEST);\n const next = this.waitWhile(STATE_REQUEST);\n if (next === STATE_RESPONSE) return;\n if (next !== STATE_CONTINUE) {\n this.closed = true;\n throw new HostTransportError(\"the host went away mid-request\");\n }\n }\n }\n\n private receive(): Uint8Array {\n const parts: Uint8Array[] = [];\n let total = 0;\n for (;;) {\n const size = Atomics.load(this.control, LENGTH);\n parts.push(this.data.slice(0, size));\n total += size;\n if (Atomics.load(this.control, MORE) === 0) break;\n this.publish(STATE_CONTINUE);\n if (this.waitWhile(STATE_CONTINUE) !== STATE_RESPONSE) {\n this.closed = true;\n throw new HostTransportError(\"the host went away mid-response\");\n }\n }\n Atomics.store(this.control, STATE, STATE_IDLE);\n if (parts.length === 1) return parts[0];\n const joined = new Uint8Array(total);\n let at = 0;\n for (const part of parts) { joined.set(part, at); at += part.length; }\n return joined;\n }\n\n private publish(state: number): void {\n Atomics.store(this.control, STATE, state);\n Atomics.notify(this.control, STATE);\n this.wake();\n }\n\n private waitWhile(state: number): number {\n for (;;) {\n Atomics.wait(this.control, STATE, state, WAIT_SLICE_MS);\n const current = Atomics.load(this.control, STATE);\n if (current !== state) return current;\n }\n }\n}\n\n/**\n * The host side. Lives wherever the volume and the process table do, and never\n * blocks; `handle` is free to be asynchronous.\n */\nexport class HostCallServer {\n private control: Int32Array;\n private data: Uint8Array;\n private capacity: number;\n private handle: (request: Uint8Array) => Promise<Uint8Array> | Uint8Array;\n private onFault: (error: unknown) => void;\n\n private incoming: Uint8Array[] = [];\n private outgoing: Uint8Array | null = null;\n private sent = 0;\n private closed = false;\n\n constructor(\n buffers: HostTransportBuffers,\n handle: (request: Uint8Array) => Promise<Uint8Array> | Uint8Array,\n onFault: (error: unknown) => void = () => {},\n ) {\n this.control = new Int32Array(buffers.control);\n this.data = new Uint8Array(buffers.data);\n this.capacity = this.data.length;\n this.handle = handle;\n this.onFault = onFault;\n }\n\n /** Call on each wake message from the client. */\n async pump(): Promise<void> {\n if (this.closed) return;\n const state = Atomics.load(this.control, STATE);\n if (state === STATE_REQUEST) {\n const size = Atomics.load(this.control, LENGTH);\n this.incoming.push(this.data.slice(0, size));\n if (Atomics.load(this.control, MORE) === 1) {\n this.publish(STATE_CONTINUE);\n return;\n }\n const request = concat(this.incoming);\n this.incoming = [];\n let response: Uint8Array;\n try {\n response = await this.handle(request);\n } catch (error) {\n /* Anything escaping the handler is a bug in the dispatcher. Closing the\n * transport is the honest answer: the client raises, rather than\n * reading a zero-length frame as a successful empty result. */\n this.onFault(error);\n this.close();\n return;\n }\n if (this.closed) return;\n this.outgoing = response;\n this.sent = 0;\n this.sendWindow();\n return;\n }\n if (state === STATE_CONTINUE) this.sendWindow();\n }\n\n /** Release a blocked client — container teardown, or the worker being killed. */\n close(): void {\n if (this.closed) return;\n this.closed = true;\n Atomics.store(this.control, STATE, STATE_CLOSED);\n Atomics.notify(this.control, STATE);\n }\n\n private sendWindow(): void {\n const payload = this.outgoing ?? new Uint8Array();\n const size = Math.min(this.capacity, payload.length - this.sent);\n this.data.set(payload.subarray(this.sent, this.sent + size), 0);\n this.sent += size;\n Atomics.store(this.control, LENGTH, size);\n Atomics.store(this.control, MORE, this.sent < payload.length ? 1 : 0);\n this.publish(STATE_RESPONSE);\n }\n\n private publish(state: number): void {\n Atomics.store(this.control, STATE, state);\n Atomics.notify(this.control, STATE);\n }\n}\n\nfunction concat(parts: Uint8Array[]): Uint8Array {\n if (parts.length === 1) return parts[0];\n const total = parts.reduce((sum, part) => sum + part.length, 0);\n const joined = new Uint8Array(total);\n let at = 0;\n for (const part of parts) { joined.set(part, at); at += part.length; }\n return joined;\n}\n","/**\n * Open-file descriptions: the thing a descriptor points *at*.\n *\n * POSIX has three levels and collapsing any two of them produces bugs that look\n * like something else entirely:\n *\n * - a **pathname** is a directory entry, and may be renamed or removed;\n * - an **inode** is the file's identity and content, and outlives its names;\n * - an **open-file description** holds the offset and the status flags.\n *\n * `dup()` makes two descriptors share one description — so they share an offset.\n * Two separate `open()` calls on the same path make two descriptions, so their\n * offsets are independent. A file stays readable through an open description\n * after its last name is unlinked. None of that is expressible if a descriptor\n * is just a path and a number, which is why this layer exists rather than the\n * path-based {@link Vfs} calls being used directly.\n *\n * The identity used here is the volume's inode number, so a rename moves a name\n * without disturbing anything already open.\n */\n\nimport type { Vfs, Cred } from \"../fs/vfs.js\";\nimport { Errno } from \"../python/host-abi.js\";\n\n/** A failure carrying the errno the guest's libc should see. */\nexport class PosixError extends Error {\n constructor(readonly errno: number, message?: string) {\n super(message ?? `errno ${errno}`);\n this.name = \"PosixError\";\n }\n}\n\nexport const O_RDONLY = 0o0;\nexport const O_WRONLY = 0o1;\nexport const O_RDWR = 0o2;\nexport const O_CREAT = 0o100;\nexport const O_EXCL = 0o200;\nexport const O_TRUNC = 0o1000;\nexport const O_APPEND = 0o2000;\nexport const O_NONBLOCK = 0o4000;\nexport const O_DIRECTORY = 0o200000;\nexport const O_CLOEXEC = 0o2000000;\n\n/** Access mode alone, with the flag bits masked off. */\nexport function accessMode(flags: number): number {\n return flags & 0o3;\n}\n\nexport interface DescriptionStat {\n ino: number;\n mode: number;\n size: number;\n uid: number;\n gid: number;\n nlink: number;\n atimeMs: number;\n mtimeMs: number;\n ctimeMs: number;\n}\n\n/**\n * What every kind of open thing can do.\n *\n * `read` and `write` are permitted to move fewer bytes than asked for: that is\n * ordinary POSIX behaviour, and a guest that assumes otherwise is already\n * broken on Linux.\n */\nexport interface OpenFileDescription {\n readonly kind: \"file\" | \"dir\" | \"pipe\" | \"stream\" | \"socket\";\n flags: number;\n read(length: number): Uint8Array;\n write(data: Uint8Array): number;\n pread?(length: number, offset: number): Uint8Array;\n pwrite?(data: Uint8Array, offset: number): number;\n seek?(offset: number, whence: number): number;\n stat(): DescriptionStat;\n truncate?(length: number): void;\n /** Ready to read now, or at end of input (which is also \"ready\"). */\n readable(): boolean;\n /** Ready to accept at least one byte. */\n writable(): boolean;\n /** Resolves when readiness may have changed; used only to park a poll. */\n whenReady(): Promise<void>;\n /** Last reference dropped. */\n close(): void;\n}\n\nexport const SEEK_SET = 0;\nexport const SEEK_CUR = 1;\nexport const SEEK_END = 2;\n\n/* ------------------------------------------------------------------ files */\n\n/**\n * The bytes behind an open regular file.\n *\n * Content lives in the volume while a name still points at it, and moves into\n * `detached` when the last name goes away with the file still open. That is the\n * only way to honour \"an unlinked file stays readable until the last close\" on\n * top of a path-addressed volume.\n *\n * A name removed by something that does not go through this service — the\n * shell, or the Node side — cannot be intercepted, and the description will\n * then fail with ENOENT rather than reading stale bytes. Documented in\n * docs/python/abi.md; correctness holds for everything using the host ABI.\n */\nexport class Inode {\n detached: Uint8Array | null = null;\n refs = 0;\n\n constructor(\n readonly ino: number,\n public path: string,\n private readonly vfs: Vfs,\n private readonly cred: Cred,\n ) {}\n\n /** Read the whole file, wherever it currently lives. */\n contents(): Uint8Array {\n if (this.detached) return this.detached;\n try {\n return this.vfs.readFile(this.path, this.cred);\n } catch (error) {\n throw toPosixError(error);\n }\n }\n\n replace(data: Uint8Array): void {\n if (this.detached) {\n this.detached = data;\n return;\n }\n try {\n this.vfs.writeFile(this.path, data, { cred: this.cred });\n } catch (error) {\n throw toPosixError(error);\n }\n }\n\n /** Called when the last name is about to be removed. */\n detach(): void {\n if (this.detached) return;\n try {\n this.detached = this.vfs.readFile(this.path, this.cred);\n } catch {\n this.detached = new Uint8Array();\n }\n }\n\n size(): number {\n return this.contents().length;\n }\n\n stat(): DescriptionStat {\n if (this.detached) {\n return {\n ino: this.ino, mode: 0o100644, size: this.detached.length,\n uid: this.cred.uid, gid: this.cred.gid, nlink: 0,\n atimeMs: Date.now(), mtimeMs: Date.now(), ctimeMs: Date.now(),\n };\n }\n try {\n const st = this.vfs.stat(this.path, { cred: this.cred });\n return {\n ino: st.ino, mode: st.mode, size: st.size, uid: st.uid, gid: st.gid,\n nlink: st.nlink ?? 1, atimeMs: st.atimeMs, mtimeMs: st.mtimeMs, ctimeMs: st.ctimeMs,\n };\n } catch (error) {\n throw toPosixError(error);\n }\n }\n}\n\n/** One `open()`: an offset and status flags over an {@link Inode}. */\nexport class FileDescription implements OpenFileDescription {\n readonly kind = \"file\";\n offset = 0;\n\n constructor(readonly inode: Inode, public flags: number) {\n inode.refs += 1;\n }\n\n read(length: number): Uint8Array {\n if (accessMode(this.flags) === O_WRONLY) throw new PosixError(Errno.EBADF);\n const data = this.inode.contents();\n const start = Math.min(this.offset, data.length);\n const end = Math.min(start + length, data.length);\n this.offset = end;\n return data.slice(start, end);\n }\n\n pread(length: number, offset: number): Uint8Array {\n if (accessMode(this.flags) === O_WRONLY) throw new PosixError(Errno.EBADF);\n const data = this.inode.contents();\n const start = Math.min(offset, data.length);\n return data.slice(start, Math.min(start + length, data.length));\n }\n\n write(data: Uint8Array): number {\n if (accessMode(this.flags) === O_RDONLY) throw new PosixError(Errno.EBADF);\n /* O_APPEND is defined as seek-and-write as one atomic step, so the offset\n * is taken now rather than whenever the caller last seeked. */\n const at = this.flags & O_APPEND ? this.inode.size() : this.offset;\n const written = this.writeAt(data, at);\n this.offset = at + written;\n return written;\n }\n\n pwrite(data: Uint8Array, offset: number): number {\n if (accessMode(this.flags) === O_RDONLY) throw new PosixError(Errno.EBADF);\n return this.writeAt(data, offset);\n }\n\n private writeAt(data: Uint8Array, offset: number): number {\n const current = this.inode.contents();\n const end = offset + data.length;\n const next = new Uint8Array(Math.max(current.length, end));\n next.set(current, 0);\n /* A write past the end leaves a hole, which reads back as zeroes — the\n * allocation above already gives that. */\n next.set(data, offset);\n this.inode.replace(next);\n return data.length;\n }\n\n seek(offset: number, whence: number): number {\n const base =\n whence === SEEK_SET ? 0 : whence === SEEK_CUR ? this.offset : this.inode.size();\n const next = base + offset;\n if (next < 0) throw new PosixError(Errno.EINVAL);\n this.offset = next;\n return next;\n }\n\n truncate(length: number): void {\n const current = this.inode.contents();\n const next = new Uint8Array(length);\n next.set(current.subarray(0, Math.min(length, current.length)), 0);\n this.inode.replace(next);\n }\n\n stat(): DescriptionStat {\n return this.inode.stat();\n }\n\n readable(): boolean { return true; }\n writable(): boolean { return true; }\n whenReady(): Promise<void> { return Promise.resolve(); }\n\n close(): void {\n this.inode.refs -= 1;\n if (this.inode.refs <= 0) this.inode.detached = null;\n }\n}\n\n/* ------------------------------------------------------------- directories */\n\n/** An open directory: `getdents` reads from a snapshot at the description's offset. */\nexport class DirectoryDescription implements OpenFileDescription {\n readonly kind = \"dir\";\n private entries: string[] | null = null;\n private index = 0;\n\n constructor(\n readonly path: string,\n public flags: number,\n private readonly vfs: Vfs,\n private readonly cred: Cred,\n ) {}\n\n /** Entry names, NUL-terminated, as many as fit in `length`. */\n read(length: number): Uint8Array {\n if (!this.entries) {\n try {\n this.entries = [\".\", \"..\", ...this.vfs.readdir(this.path, this.cred)];\n } catch (error) {\n throw toPosixError(error);\n }\n }\n const encoder = new TextEncoder();\n const parts: Uint8Array[] = [];\n let total = 0;\n while (this.index < this.entries.length) {\n const encoded = encoder.encode(this.entries[this.index]! + \"\\0\");\n if (total + encoded.length > length) break;\n parts.push(encoded);\n total += encoded.length;\n this.index += 1;\n }\n const joined = new Uint8Array(total);\n let at = 0;\n for (const part of parts) { joined.set(part, at); at += part.length; }\n return joined;\n }\n\n write(): number { throw new PosixError(Errno.EISDIR); }\n seek(offset: number, whence: number): number {\n if (whence === SEEK_SET && offset === 0) { this.index = 0; return 0; }\n throw new PosixError(Errno.EINVAL);\n }\n\n stat(): DescriptionStat {\n try {\n const st = this.vfs.stat(this.path, { cred: this.cred });\n return {\n ino: st.ino, mode: st.mode, size: st.size, uid: st.uid, gid: st.gid,\n nlink: st.nlink ?? 2, atimeMs: st.atimeMs, mtimeMs: st.mtimeMs, ctimeMs: st.ctimeMs,\n };\n } catch (error) {\n throw toPosixError(error);\n }\n }\n\n readable(): boolean { return true; }\n writable(): boolean { return false; }\n whenReady(): Promise<void> { return Promise.resolve(); }\n close(): void {}\n}\n\n/* ------------------------------------------------------------------ pipes */\n\nconst PIPE_CAPACITY = 64 * 1024;\n\n/** The shared buffer between a pipe's two ends. */\nclass PipeBuffer {\n private chunks: Uint8Array[] = [];\n private queued = 0;\n readers = 0;\n writers = 0;\n private waiters: (() => void)[] = [];\n\n get available(): number { return this.queued; }\n get space(): number { return Math.max(0, PIPE_CAPACITY - this.queued); }\n\n push(data: Uint8Array): void {\n this.chunks.push(data);\n this.queued += data.length;\n this.wake();\n }\n\n take(length: number): Uint8Array {\n const out = new Uint8Array(Math.min(length, this.queued));\n let at = 0;\n while (at < out.length) {\n const head = this.chunks[0]!;\n const take = Math.min(head.length, out.length - at);\n out.set(head.subarray(0, take), at);\n at += take;\n if (take === head.length) this.chunks.shift();\n else this.chunks[0] = head.subarray(take);\n }\n this.queued -= out.length;\n this.wake();\n return out;\n }\n\n /** Anything that may have changed readiness for either end. */\n wake(): void {\n const waiting = this.waiters;\n this.waiters = [];\n for (const resolve of waiting) resolve();\n }\n\n whenReady(): Promise<void> {\n return new Promise((resolve) => this.waiters.push(resolve));\n }\n}\n\nexport class PipeReadEnd implements OpenFileDescription {\n readonly kind = \"pipe\";\n constructor(private readonly buffer: PipeBuffer, public flags: number) {\n buffer.readers += 1;\n }\n read(length: number): Uint8Array {\n if (this.buffer.available === 0) {\n /* No data and no writer left is end of input — zero bytes. No data with a\n * writer still attached is \"not yet\", which a blocking reader must not\n * confuse with EOF. */\n if (this.buffer.writers === 0) return new Uint8Array();\n throw new PosixError(Errno.EAGAIN);\n }\n return this.buffer.take(length);\n }\n write(): number { throw new PosixError(Errno.EBADF); }\n stat(): DescriptionStat { return pipeStat(); }\n readable(): boolean { return this.buffer.available > 0 || this.buffer.writers === 0; }\n writable(): boolean { return false; }\n whenReady(): Promise<void> { return this.buffer.whenReady(); }\n close(): void { this.buffer.readers -= 1; this.buffer.wake(); }\n}\n\nexport class PipeWriteEnd implements OpenFileDescription {\n readonly kind = \"pipe\";\n constructor(private readonly buffer: PipeBuffer, public flags: number) {\n buffer.writers += 1;\n }\n read(): Uint8Array { throw new PosixError(Errno.EBADF); }\n write(data: Uint8Array): number {\n if (this.buffer.readers === 0) throw new PosixError(Errno.EPIPE);\n const space = this.buffer.space;\n if (space === 0) throw new PosixError(Errno.EAGAIN);\n /* Accepting a prefix rather than the whole write is what gives a pipe its\n * backpressure; a writer that ignores the return value is the bug. */\n const accepted = data.subarray(0, space);\n this.buffer.push(accepted.slice());\n return accepted.length;\n }\n stat(): DescriptionStat { return pipeStat(); }\n readable(): boolean { return false; }\n writable(): boolean { return this.buffer.space > 0 || this.buffer.readers === 0; }\n whenReady(): Promise<void> { return this.buffer.whenReady(); }\n close(): void { this.buffer.writers -= 1; this.buffer.wake(); }\n}\n\nfunction pipeStat(): DescriptionStat {\n const now = Date.now();\n return { ino: 0, mode: 0o010600, size: 0, uid: 0, gid: 0, nlink: 1, atimeMs: now, mtimeMs: now, ctimeMs: now };\n}\n\nexport function createPipe(flags = 0): [PipeReadEnd, PipeWriteEnd] {\n const buffer = new PipeBuffer();\n return [new PipeReadEnd(buffer, flags | O_RDONLY), new PipeWriteEnd(buffer, flags | O_WRONLY)];\n}\n\n/* ---------------------------------------------------------------- streams */\n\n/**\n * A process's standard streams.\n *\n * Bytes, not text: the terminal boundary is where multi-byte characters get cut\n * in half, so nothing here decodes. Input arrives from the host asynchronously\n * and is queued; a blocked reader parks on {@link whenReady} rather than\n * spinning.\n */\nexport class StreamDescription implements OpenFileDescription {\n readonly kind = \"stream\";\n private queue: Uint8Array[] = [];\n private queued = 0;\n private ended = false;\n private waiters: (() => void)[] = [];\n\n constructor(\n public flags: number,\n private readonly sink: ((data: Uint8Array) => void) | null,\n readonly isTty = false,\n ) {}\n\n /** Host side: give the guest more input. */\n push(data: Uint8Array): void {\n if (data.length === 0) return;\n this.queue.push(data);\n this.queued += data.length;\n this.wake();\n }\n\n /** Host side: no more input will arrive. */\n end(): void {\n this.ended = true;\n this.wake();\n }\n\n read(length: number): Uint8Array {\n if (this.queued === 0) {\n if (this.ended) return new Uint8Array();\n throw new PosixError(Errno.EAGAIN);\n }\n const out = new Uint8Array(Math.min(length, this.queued));\n let at = 0;\n while (at < out.length) {\n const head = this.queue[0]!;\n const take = Math.min(head.length, out.length - at);\n out.set(head.subarray(0, take), at);\n at += take;\n if (take === head.length) this.queue.shift();\n else this.queue[0] = head.subarray(take);\n }\n this.queued -= out.length;\n return out;\n }\n\n write(data: Uint8Array): number {\n if (!this.sink) throw new PosixError(Errno.EBADF);\n this.sink(data);\n return data.length;\n }\n\n stat(): DescriptionStat {\n const now = Date.now();\n return {\n ino: 0, mode: this.isTty ? 0o020620 : 0o010600, size: 0, uid: 0, gid: 0,\n nlink: 1, atimeMs: now, mtimeMs: now, ctimeMs: now,\n };\n }\n\n readable(): boolean { return this.queued > 0 || this.ended; }\n writable(): boolean { return true; }\n whenReady(): Promise<void> {\n return new Promise((resolve) => this.waiters.push(resolve));\n }\n close(): void { this.wake(); }\n\n private wake(): void {\n const waiting = this.waiters;\n this.waiters = [];\n for (const resolve of waiting) resolve();\n }\n}\n\n/** Translate a volume error into the errno a guest expects. */\nexport function toPosixError(error: unknown): PosixError {\n if (error instanceof PosixError) return error;\n const code = (error as { code?: string } | null)?.code;\n const message = (error as Error | null)?.message;\n const mapped: Record<string, number> = {\n ENOENT: Errno.ENOENT, EEXIST: Errno.EEXIST, ENOTDIR: Errno.ENOTDIR,\n EISDIR: Errno.EISDIR, EACCES: Errno.EACCES, EPERM: Errno.EPERM,\n ENOTEMPTY: Errno.ENOTEMPTY, EINVAL: Errno.EINVAL, ELOOP: Errno.ELOOP,\n EXDEV: Errno.EXDEV, ENOSPC: Errno.ENOSPC, EMFILE: Errno.EMFILE,\n ENAMETOOLONG: Errno.ENAMETOOLONG, EBADF: Errno.EBADF, EPIPE: Errno.EPIPE,\n };\n return new PosixError(code && mapped[code] ? mapped[code]! : Errno.EIO, message);\n}\n","/**\n * Per-process descriptor tables, and the path operations that have to know\n * about them.\n *\n * A descriptor is a small integer plus a close-on-exec bit; everything else\n * lives in the {@link OpenFileDescription} it names. Several descriptors — in\n * one process or across a spawn — may name the same description, and that is\n * how `dup2(fd, 1)` redirects a child's output without copying anything.\n *\n * `unlink` and `rename` live here rather than being left to {@link Vfs}\n * because they are the two operations whose correctness depends on what is\n * currently open: a removed name must not take an open file's contents with\n * it, and a renamed one must not strand it.\n */\n\nimport type { Vfs, Cred } from \"../fs/vfs.js\";\nimport { Errno } from \"../python/host-abi.js\";\nimport {\n DirectoryDescription, FileDescription, Inode, PosixError, StreamDescription,\n accessMode, createPipe, toPosixError,\n O_APPEND, O_CLOEXEC, O_CREAT, O_DIRECTORY, O_EXCL, O_NONBLOCK, O_RDONLY, O_TRUNC, O_WRONLY,\n type OpenFileDescription,\n} from \"./open-file.js\";\n\n/** The status flags a guest may change after the fact. */\nconst SETTABLE_FLAGS = O_APPEND | O_NONBLOCK;\n\ninterface Slot {\n description: OpenFileDescription;\n cloexec: boolean;\n}\n\n/** Descriptors are handed out lowest-free-first, as POSIX requires. */\nexport class DescriptorTable {\n private readonly slots = new Map<number, Slot>();\n /** Descriptions this table shares with others, so close counts correctly. */\n private static readonly refs = new WeakMap<OpenFileDescription, number>();\n\n /** Install at a chosen number, closing whatever was there. */\n set(fd: number, description: OpenFileDescription, cloexec = false): number {\n if (fd < 0) throw new PosixError(Errno.EBADF);\n const existing = this.slots.get(fd);\n if (existing) this.release(existing.description);\n this.slots.set(fd, { description, cloexec });\n DescriptorTable.refs.set(description, (DescriptorTable.refs.get(description) ?? 0) + 1);\n return fd;\n }\n\n /** Install at the lowest free number at or above `from`. */\n add(description: OpenFileDescription, cloexec = false, from = 0): number {\n let fd = from;\n while (this.slots.has(fd)) fd += 1;\n return this.set(fd, description, cloexec);\n }\n\n get(fd: number): OpenFileDescription {\n const slot = this.slots.get(fd);\n if (!slot) throw new PosixError(Errno.EBADF);\n return slot.description;\n }\n\n has(fd: number): boolean { return this.slots.has(fd); }\n\n cloexec(fd: number): boolean {\n const slot = this.slots.get(fd);\n if (!slot) throw new PosixError(Errno.EBADF);\n return slot.cloexec;\n }\n\n setCloexec(fd: number, value: boolean): void {\n const slot = this.slots.get(fd);\n if (!slot) throw new PosixError(Errno.EBADF);\n slot.cloexec = value;\n }\n\n /** `dup`: a second name for one description, so the offset is shared. */\n dup(fd: number, from = 0): number {\n return this.add(this.get(fd), false, from);\n }\n\n dup2(fd: number, target: number): number {\n const description = this.get(fd);\n if (fd === target) return target;\n return this.set(target, description, false);\n }\n\n close(fd: number): void {\n const slot = this.slots.get(fd);\n if (!slot) throw new PosixError(Errno.EBADF);\n this.slots.delete(fd);\n this.release(slot.description);\n }\n\n /** Everything a child inherits: a spawn keeps all but the close-on-exec ones. */\n inherit(): DescriptorTable {\n const child = new DescriptorTable();\n for (const [fd, slot] of this.slots) {\n if (slot.cloexec) continue;\n child.set(fd, slot.description, false);\n }\n return child;\n }\n\n /** Drop every descriptor. Every resource has an owner and a cleanup path. */\n closeAll(): void {\n for (const fd of [...this.slots.keys()]) {\n try { this.close(fd); } catch { /* already gone */ }\n }\n }\n\n /** The numbers this table currently holds, in ascending order. */\n fds(): number[] {\n return [...this.slots.keys()].sort((a, b) => a - b);\n }\n\n get openCount(): number { return this.slots.size; }\n\n private release(description: OpenFileDescription): void {\n const refs = (DescriptorTable.refs.get(description) ?? 1) - 1;\n if (refs <= 0) {\n DescriptorTable.refs.delete(description);\n description.close();\n } else {\n DescriptorTable.refs.set(description, refs);\n }\n }\n}\n\n/**\n * Path operations bound to one container's volume and one process's credentials.\n *\n * Open inodes are tracked per volume so that two processes opening the same\n * file agree about its identity — which is what makes \"unlink it in one, keep\n * reading it in the other\" behave.\n */\nexport class FileService {\n private readonly openInodes = new Map<number, Inode>();\n\n constructor(private readonly vfs: Vfs, private readonly cred: Cred) {}\n\n open(path: string, flags: number, mode = 0o666): OpenFileDescription {\n const exists = this.vfs.lexists(path);\n if (flags & O_CREAT && flags & O_EXCL && exists) throw new PosixError(Errno.EEXIST);\n if (!exists) {\n if (!(flags & O_CREAT)) throw new PosixError(Errno.ENOENT);\n if (accessMode(flags) === O_RDONLY) throw new PosixError(Errno.EACCES);\n try {\n this.vfs.writeFile(path, new Uint8Array(), { cred: this.cred, mode });\n } catch (error) {\n throw toPosixError(error);\n }\n }\n\n let stat;\n try {\n stat = this.vfs.stat(path, { cred: this.cred });\n } catch (error) {\n throw toPosixError(error);\n }\n\n if (stat.isDirectory()) {\n if (accessMode(flags) !== O_RDONLY) throw new PosixError(Errno.EISDIR);\n return new DirectoryDescription(path, flags, this.vfs, this.cred);\n }\n if (flags & O_DIRECTORY) throw new PosixError(Errno.ENOTDIR);\n\n const inode = this.inodeFor(stat.ino, path);\n const description = new FileDescription(inode, flags);\n if (flags & O_TRUNC && accessMode(flags) !== O_RDONLY) description.truncate(0);\n return description;\n }\n\n /**\n * Remove a name.\n *\n * If something still has the file open, its contents move into the open\n * description first: POSIX guarantees a reader keeps reading, and a volume\n * that only knows about paths cannot provide that on its own.\n */\n unlink(path: string): void {\n let ino: number | null = null;\n try {\n ino = this.vfs.lstat(path).ino;\n } catch (error) {\n throw toPosixError(error);\n }\n const inode = ino === null ? undefined : this.openInodes.get(ino);\n if (inode && inode.refs > 0 && inode.path === path) inode.detach();\n try {\n this.vfs.unlink(path, this.cred);\n } catch (error) {\n throw toPosixError(error);\n }\n if (inode && inode.refs <= 0) this.openInodes.delete(ino!);\n }\n\n /** Rename a name. Anything already open follows the file to its new name. */\n rename(from: string, to: string): void {\n let ino: number | null = null;\n try { ino = this.vfs.lstat(from).ino; } catch { /* the rename will report it */ }\n try {\n this.vfs.rename(from, to, this.cred);\n } catch (error) {\n throw toPosixError(error);\n }\n if (ino === null) return;\n const inode = this.openInodes.get(ino);\n if (inode) inode.path = to;\n }\n\n /** One {@link Inode} per file identity, shared by every open description. */\n private inodeFor(ino: number, path: string): Inode {\n const existing = this.openInodes.get(ino);\n if (existing) {\n existing.path = path;\n return existing;\n }\n const created = new Inode(ino, path, this.vfs, this.cred);\n this.openInodes.set(ino, created);\n return created;\n }\n}\n\nexport { createPipe, StreamDescription, PosixError };\nexport type { OpenFileDescription };\nexport { O_APPEND, O_CLOEXEC, O_CREAT, O_DIRECTORY, O_EXCL, O_NONBLOCK, O_RDONLY, O_TRUNC, O_WRONLY, SETTABLE_FLAGS };\n","import { Errno } from \"../python/host-abi.js\";\nimport { PosixError } from \"../kernel/open-file.js\";\nimport type { DescriptionStat, OpenFileDescription } from \"../kernel/open-file.js\";\n\nexport interface VirtualSocketAddress {\n address: string;\n port: number;\n}\n\nexport interface VirtualSocketPeer {\n data(bytes: Uint8Array): void;\n close(): void;\n}\n\n/** A bounded byte queue used by one direction of a virtual TCP connection. */\nclass ByteQueue {\n private chunks: Uint8Array[] = [];\n private length = 0;\n private readonly waiters = new Set<() => void>();\n\n push(bytes: Uint8Array): void {\n if (bytes.length === 0) return;\n const copy = bytes.slice();\n this.chunks.push(copy);\n this.length += copy.length;\n this.wake();\n }\n\n take(max: number): Uint8Array {\n if (max <= 0 || this.length === 0) return new Uint8Array();\n const out = new Uint8Array(Math.min(max, this.length));\n let at = 0;\n while (at < out.length) {\n const chunk = this.chunks[0]!;\n const count = Math.min(chunk.length, out.length - at);\n out.set(chunk.subarray(0, count), at);\n at += count;\n this.length -= count;\n if (count === chunk.length) this.chunks.shift();\n else this.chunks[0] = chunk.subarray(count);\n }\n return out;\n }\n\n get size(): number { return this.length; }\n whenChanged(): Promise<void> {\n return new Promise((resolve) => this.waiters.add(resolve));\n }\n wake(): void {\n for (const resolve of this.waiters) resolve();\n this.waiters.clear();\n }\n}\n\n/** One endpoint of a host-owned in-memory TCP stream. */\nexport class VirtualTcpConnection {\n private readonly incoming = new ByteQueue();\n private peer: VirtualTcpConnection | null = null;\n private readClosed = false;\n private writeClosed = false;\n private closed = false;\n\n readonly local: VirtualSocketAddress;\n readonly remote: VirtualSocketAddress;\n\n constructor(local: VirtualSocketAddress, remote: VirtualSocketAddress) {\n this.local = local;\n this.remote = remote;\n }\n\n pairWith(peer: VirtualTcpConnection): void { this.peer = peer; }\n\n get eof(): boolean { return this.readClosed || (this.incoming.size === 0 && this.peer?.writeClosed === true); }\n get readable(): boolean { return this.incoming.size > 0 || this.eof; }\n get writable(): boolean { return !this.writeClosed && !this.closed && this.peer !== null && !this.peer.readClosed; }\n\n read(maxLength: number): Uint8Array {\n if (this.incoming.size > 0) return this.incoming.take(maxLength);\n if (this.eof) return new Uint8Array();\n throw new PosixError(Errno.EAGAIN, \"socket read would block\");\n }\n\n write(bytes: Uint8Array): number {\n if (!this.writable) throw new PosixError(this.closed || this.writeClosed ? Errno.EPIPE : Errno.ECONNRESET);\n this.peer!.incoming.push(bytes);\n return bytes.length;\n }\n\n async waitForChange(): Promise<void> {\n if (this.readable || this.closed) return;\n await this.incoming.whenChanged();\n }\n\n shutdown(read: boolean, write: boolean): void {\n if (read) this.readClosed = true;\n if (write) {\n this.writeClosed = true;\n if (this.peer) this.peer.incoming.wake();\n }\n this.incoming.wake();\n this.peer?.incoming.wake();\n }\n\n close(): void {\n if (this.closed) return;\n this.closed = true;\n this.readClosed = true;\n this.writeClosed = true;\n if (this.peer) {\n this.peer.readClosed = true;\n this.peer.incoming.wake();\n }\n this.incoming.wake();\n }\n}\n\nexport interface VirtualTcpAccepted {\n connection: VirtualTcpConnection;\n peer: VirtualSocketAddress;\n}\n\n/** A host-owned TCP listener with a POSIX-style accept backlog. */\nexport class VirtualTcpListener {\n private readonly pending: VirtualTcpConnection[] = [];\n private readonly waiters = new Set<() => void>();\n private closed = false;\n\n constructor(\n readonly port: number,\n readonly address = \"0.0.0.0\",\n readonly backlog = 128,\n ) {}\n\n enqueue(connection: VirtualTcpConnection): void {\n if (this.closed) {\n connection.close();\n throw new PosixError(Errno.ECONNREFUSED, \"listener is closed\");\n }\n if (this.pending.length >= this.backlog) {\n connection.close();\n throw new PosixError(Errno.EAGAIN, \"listener backlog is full\");\n }\n this.pending.push(connection);\n this.wake();\n }\n\n accept(): VirtualTcpAccepted {\n const connection = this.pending.shift();\n if (!connection) {\n if (this.closed) throw new PosixError(Errno.EBADF, \"listener is closed\");\n throw new PosixError(Errno.EAGAIN, \"listener accept would block\");\n }\n return { connection, peer: connection.remote };\n }\n\n get readable(): boolean { return this.pending.length > 0 || this.closed; }\n get isClosed(): boolean { return this.closed; }\n\n async waitForChange(): Promise<void> {\n if (this.readable) return;\n await new Promise<void>((resolve) => this.waiters.add(resolve));\n }\n\n close(): void {\n if (this.closed) return;\n this.closed = true;\n for (const connection of this.pending.splice(0)) connection.close();\n this.wake();\n }\n\n private wake(): void {\n for (const resolve of this.waiters) resolve();\n this.waiters.clear();\n }\n}\n\n/** POSIX socket lifecycle over the host-owned virtual network. */\nexport class VirtualTcpSocket {\n private listenerValue: VirtualTcpListener | null = null;\n private connectionValue: VirtualTcpConnection | null = null;\n private boundPort = 0;\n private boundAddress = \"0.0.0.0\";\n\n constructor(private readonly network: VirtualTcpNetwork) {}\n\n bind(address: string, port: number): void {\n if (this.listenerValue || this.connectionValue || this.boundPort !== 0) {\n throw new PosixError(Errno.EINVAL, \"socket is already bound\");\n }\n this.boundAddress = address;\n this.boundPort = port;\n }\n\n listen(backlog: number): void {\n if (this.listenerValue) return;\n if (this.boundPort === 0) {\n const port = this.findEphemeralPort();\n this.boundPort = port;\n }\n this.listenerValue = this.network.listen(this.boundPort, this.boundAddress, backlog);\n }\n\n connect(port: number, address = \"127.0.0.1\"): void {\n if (this.listenerValue || this.connectionValue) throw new PosixError(Errno.EISCONN);\n this.connectionValue = this.network.connect(port, this.boundPort, this.boundAddress);\n this.boundPort = this.connectionValue.local.port;\n this.boundAddress = this.connectionValue.local.address;\n void address;\n }\n\n accept(): VirtualTcpSocket {\n if (!this.listenerValue) throw new PosixError(Errno.EINVAL, \"socket is not listening\");\n const accepted = this.listenerValue.accept().connection;\n const socket = new VirtualTcpSocket(this.network);\n socket.connectionValue = accepted;\n socket.boundPort = accepted.local.port;\n socket.boundAddress = accepted.local.address;\n return socket;\n }\n\n get listener(): VirtualTcpListener | null { return this.listenerValue; }\n get connection(): VirtualTcpConnection | null { return this.connectionValue; }\n get local(): VirtualSocketAddress { return { address: this.boundAddress, port: this.boundPort }; }\n get remote(): VirtualSocketAddress | null { return this.connectionValue?.remote ?? null; }\n get readable(): boolean { return this.listenerValue?.readable ?? this.connectionValue?.readable ?? false; }\n get writable(): boolean { return this.connectionValue?.writable ?? false; }\n waitForChange(): Promise<void> { return (this.listenerValue ?? this.connectionValue)?.waitForChange() ?? Promise.resolve(); }\n read(length: number): Uint8Array { if (!this.connectionValue) throw new PosixError(Errno.EINVAL); return this.connectionValue.read(length); }\n write(data: Uint8Array): number { if (!this.connectionValue) throw new PosixError(Errno.EINVAL); return this.connectionValue.write(data); }\n shutdown(read: boolean, write: boolean): void { if (!this.connectionValue) throw new PosixError(Errno.ENOTCONN); this.connectionValue.shutdown(read, write); }\n close(): void {\n if (this.listenerValue) this.network.close(this.listenerValue);\n this.connectionValue?.close();\n this.listenerValue = null;\n this.connectionValue = null;\n }\n\n private findEphemeralPort(): number {\n for (let port = 49152; port <= 65535; port += 1) if (!this.network.hasListener(port)) return port;\n throw new PosixError(Errno.EADDRINUSE, \"no ephemeral ports available\");\n }\n}\n\n/** Descriptor-table view of a POSIX socket. */\nexport class SocketDescription implements OpenFileDescription {\n readonly kind = \"socket\" as const;\n flags: number;\n private readonly resource: VirtualTcpSocket;\n private closed = false;\n private readonly options = new Map<string, Uint8Array>();\n\n constructor(resource: VirtualTcpSocket, flags = 0) {\n this.resource = resource;\n this.flags = flags;\n }\n\n get listener(): VirtualTcpListener | null {\n return this.resource.listener;\n }\n\n get connection(): VirtualTcpConnection | null {\n return this.resource.connection;\n }\n\n read(length: number): Uint8Array {\n return this.resource.read(length);\n }\n\n write(data: Uint8Array): number {\n return this.resource.write(data);\n }\n\n readable(): boolean { return this.resource.readable; }\n writable(): boolean { return this.resource.writable; }\n whenReady(): Promise<void> { return this.resource.waitForChange(); }\n\n stat(): DescriptionStat {\n return {\n ino: 0, mode: 0o140777, size: 0, uid: 0, gid: 0, nlink: 1,\n atimeMs: Date.now(), mtimeMs: Date.now(), ctimeMs: Date.now(),\n };\n }\n\n close(): void {\n if (this.closed) return;\n this.closed = true;\n this.resource.close();\n }\n\n bind(address: string, port: number): void { this.resource.bind(address, port); }\n listen(backlog: number): void { this.resource.listen(backlog); }\n connect(address: string, port: number): void { this.resource.connect(port, address); }\n accept(): SocketDescription { return new SocketDescription(this.resource.accept(), this.flags); }\n shutdown(read: boolean, write: boolean): void { this.resource.shutdown(read, write); }\n setOption(level: number, option: number, value: Uint8Array): void { this.options.set(`${level}:${option}`, value.slice()); }\n getOption(level: number, option: number): Uint8Array { return this.options.get(`${level}:${option}`)?.slice() ?? new Uint8Array(4); }\n localAddress(): VirtualSocketAddress { return this.resource.local; }\n peerAddress(): VirtualSocketAddress {\n const peer = this.resource.remote;\n if (!peer) throw new PosixError(Errno.ENOTCONN);\n return peer;\n }\n}\n\n/** Shared port authority for all in-container TCP listeners. */\nexport class VirtualTcpNetwork {\n private readonly listeners = new Map<number, VirtualTcpListener>();\n\n constructor(private readonly occupied?: (port: number) => boolean) {}\n\n listen(port: number, address = \"0.0.0.0\", backlog = 128): VirtualTcpListener {\n if (this.listeners.has(port) || this.occupied?.(port)) throw new PosixError(Errno.EADDRINUSE, `port ${port} is already in use`);\n const listener = new VirtualTcpListener(port, address, backlog);\n this.listeners.set(port, listener);\n return listener;\n }\n\n close(listener: VirtualTcpListener): void {\n if (this.listeners.get(listener.port) !== listener) return;\n this.listeners.delete(listener.port);\n listener.close();\n }\n\n connect(port: number, localPort = 0, localAddress = \"127.0.0.1\"): VirtualTcpConnection {\n const listener = this.listeners.get(port);\n if (!listener || listener.isClosed) throw new PosixError(Errno.ECONNREFUSED, `port ${port} is not listening`);\n const client = new VirtualTcpConnection(\n { address: localAddress, port: localPort },\n { address: listener.address, port },\n );\n const server = new VirtualTcpConnection(\n { address: listener.address, port },\n { address: localAddress, port: localPort },\n );\n client.pairWith(server);\n server.pairWith(client);\n listener.enqueue(server);\n return client;\n }\n\n hasListener(port: number): boolean { return this.listeners.has(port); }\n ports(): number[] { return [...this.listeners.keys()].sort((a, b) => a - b); }\n closeAll(): void {\n for (const listener of [...this.listeners.values()]) this.close(listener);\n }\n}\n","/**\n * The kernel side of the host ABI: turn frames into real operations.\n *\n * This runs on whichever thread owns the volume and the process table, and it\n * never blocks. A guest that asks to read a terminal with nothing typed yet\n * parks in `Atomics.wait` inside its own worker; the handler here simply\n * awaits {@link OpenFileDescription.whenReady} and answers when input arrives.\n * That asymmetry is the whole reason a synchronous `read()` can exist at all\n * without freezing the host — and it is why keyboard input must be delivered to\n * *this* side rather than to the worker that is blocked waiting for it.\n */\n\nimport type { Vfs, Cred } from \"../fs/vfs.js\";\nimport { DescriptorTable, FileService } from \"../kernel/descriptors.js\";\nimport {\n PosixError, SEEK_SET, StreamDescription, createPipe, toPosixError,\n O_CLOEXEC, O_NONBLOCK, accessMode,\n type OpenFileDescription,\n} from \"../kernel/open-file.js\";\nimport { CAPABILITIES, Errno, Op, SBX_HOST_ABI_VERSION } from \"./host-abi.js\";\nimport { Reader, Writer, decodeRequest, encodeResponse, failure, type RequestHeader } from \"./protocol.js\";\nimport { SocketDescription, VirtualTcpNetwork, VirtualTcpSocket } from \"../net/virtual-socket.js\";\n\n/** Everything one guest process is allowed to see. */\nexport interface HostAbiProcess {\n readonly pid: number;\n readonly ppid: number;\n readonly generation: number;\n readonly vfs: Vfs;\n readonly cred: Cred;\n readonly table: DescriptorTable;\n readonly env: Record<string, string>;\n cwd: string;\n /** Aborts when the process is killed; wakes anything parked in a call. */\n readonly signal: AbortSignal;\n readonly sockets?: VirtualTcpNetwork;\n /**\n * How this process makes another one.\n *\n * There is no fork in WebAssembly, so process creation cannot be a libc\n * detail the guest performs on its own — it is a service, like the\n * filesystem. A host that does not supply this reports ENOSYS to every\n * spawn, which is the honest answer and not a crash: a container with no\n * process table genuinely cannot start a child.\n */\n readonly processes?: ProcessService;\n}\n\n/** The descriptors a child is to be given, by the numbers it will see. */\nexport interface SpawnRequest {\n readonly argv: string[];\n readonly env: Record<string, string>;\n readonly cwd: string;\n /** `child fd` → the parent's open file description behind it. */\n readonly files: Map<number, OpenFileDescription>;\n}\n\nexport interface ProcessService {\n spawn(request: SpawnRequest): Promise<number>;\n /**\n * Reap one child. Returns the pid and its wait status, or a pid of 0 when\n * `WNOHANG` was asked for and nothing has exited yet.\n */\n wait(pid: number, options: number): Promise<{ pid: number; status: number }>;\n kill(pid: number, signal: number): void;\n}\n\nconst MAX_TRANSFER = 8 * 1024 * 1024;\n\n/* poll(2) event bits, matching the values `_sbx_socket` and musl/emscripten\n * agree on. Module scope because `poll()` below is a hoisted declaration that\n * runs long after `createHostAbiServer` has returned — a `const` placed after\n * that `return` would sit in the temporal dead zone forever and every poll\n * would throw `ReferenceError` (surfacing in the guest as OSError EIO). */\nconst POLLIN = 0x001;\nconst POLLOUT = 0x004;\nconst POLLHUP = 0x010;\n\n/* The only socket this stack is: an IPv4 TCP stream. Named rather than spelled\n * as literals because the check that uses them is what a guest sees as\n * \"unsupported\", and a bare `2` there reads as a magic number. */\nconst AF_INET = 2;\nconst SOCK_STREAM = 1;\nconst IPPROTO_TCP = 6;\n\nexport function createHostAbiServer(proc: HostAbiProcess): (frame: Uint8Array) => Promise<Uint8Array> {\n const files = new FileService(proc.vfs, proc.cred);\n const started = Date.now();\n const monotonicBase = typeof performance === \"object\" ? performance.now() : 0;\n\n return async (frame: Uint8Array): Promise<Uint8Array> => {\n const { header, payload } = decodeRequest(frame);\n if (header.version !== SBX_HOST_ABI_VERSION) {\n return encodeResponse(header, failure(Errno.EPROTO), new Uint8Array());\n }\n if (header.generation !== proc.generation) {\n /* A frame from a previous incarnation of this process. Refusing it is the\n * point: PID reuse must never let a stale completion land on a live\n * descriptor table. */\n return encodeResponse(header, failure(Errno.ESRCH), new Uint8Array());\n }\n try {\n const { status, payload: out } = await dispatch(header, new Reader(payload));\n return encodeResponse(header, status, out ?? new Uint8Array());\n } catch (error) {\n const posix = toPosixError(error);\n return encodeResponse(header, failure(posix.errno), new Uint8Array());\n }\n };\n\n async function dispatch(\n header: RequestHeader,\n r: Reader,\n ): Promise<{ status: number; payload?: Uint8Array }> {\n switch (header.op) {\n case Op.handshake: {\n const w = new Writer().u32(SBX_HOST_ABI_VERSION).u32(CAPABILITIES.length);\n for (const capability of CAPABILITIES) {\n /* Only the families this build actually serves are advertised; a\n * guest must be able to tell \"not implemented\" from \"not present\". */\n w.string(capability).u32(implemented(capability) ? 1 : 0);\n }\n return { status: 0, payload: w.finish() };\n }\n\n /* ------------------------------------------------------------ files */\n case Op.openat: {\n const path = resolve(r.string());\n const flags = r.u32();\n const mode = r.u32();\n const description = files.open(path, flags, mode);\n return { status: proc.table.add(description, (flags & O_CLOEXEC) !== 0) };\n }\n case Op.close: {\n proc.table.close(r.i32());\n return { status: 0 };\n }\n case Op.read: {\n const description = proc.table.get(r.i32());\n const length = clamp(r.u32());\n const data = await readBlocking(description, length);\n return { status: data.length, payload: data };\n }\n case Op.write: {\n const description = proc.table.get(r.i32());\n const data = r.bytes32();\n const written = await writeBlocking(description, data);\n return { status: written };\n }\n case Op.pread: {\n const description = proc.table.get(r.i32());\n const length = clamp(r.u32());\n const offset = r.u64();\n if (!description.pread) throw new PosixError(Errno.ESPIPE);\n const data = description.pread(length, offset);\n return { status: data.length, payload: data };\n }\n case Op.pwrite: {\n const description = proc.table.get(r.i32());\n const data = r.bytes32();\n const offset = r.u64();\n if (!description.pwrite) throw new PosixError(Errno.ESPIPE);\n return { status: description.pwrite(data, offset) };\n }\n case Op.lseek: {\n const description = proc.table.get(r.i32());\n const offset = r.i64();\n const whence = r.u32();\n if (!description.seek) throw new PosixError(Errno.ESPIPE);\n return { status: 0, payload: new Writer().i64(description.seek(offset, whence)).finish() };\n }\n case Op.fstat: {\n return { status: 0, payload: encodeStat(proc.table.get(r.i32()).stat()) };\n }\n case Op.statat: {\n const path = resolve(r.string());\n const followLinks = r.u32() !== 0;\n try {\n const st = followLinks ? proc.vfs.stat(path, { cred: proc.cred }) : proc.vfs.lstat(path);\n return {\n status: 0,\n payload: encodeStat({\n ino: st.ino, mode: st.mode, size: st.size, uid: st.uid, gid: st.gid,\n nlink: st.nlink ?? 1, atimeMs: st.atimeMs, mtimeMs: st.mtimeMs, ctimeMs: st.ctimeMs,\n }),\n };\n } catch (error) {\n throw toPosixError(error);\n }\n }\n case Op.ftruncate: {\n const description = proc.table.get(r.i32());\n const length = r.u64();\n if (!description.truncate) throw new PosixError(Errno.EINVAL);\n description.truncate(length);\n return { status: 0 };\n }\n case Op.renameat: {\n files.rename(resolve(r.string()), resolve(r.string()));\n return { status: 0 };\n }\n case Op.unlinkat: {\n const path = resolve(r.string());\n const removeDirectory = r.u32() !== 0;\n if (removeDirectory) {\n try { proc.vfs.rmdir(path, proc.cred); } catch (error) { throw toPosixError(error); }\n } else {\n files.unlink(path);\n }\n return { status: 0 };\n }\n case Op.mkdirat: {\n const path = resolve(r.string());\n const mode = r.u32();\n try { proc.vfs.mkdir(path, { mode, cred: proc.cred }); } catch (error) { throw toPosixError(error); }\n return { status: 0 };\n }\n case Op.readlinkat: {\n try {\n const target = proc.vfs.readlink(resolve(r.string()), proc.cred);\n return { status: 0, payload: new Writer().string(target).finish() };\n } catch (error) { throw toPosixError(error); }\n }\n case Op.symlinkat: {\n const target = r.string();\n try { proc.vfs.symlink(target, resolve(r.string()), proc.cred); } catch (error) { throw toPosixError(error); }\n return { status: 0 };\n }\n case Op.getdents: {\n const description = proc.table.get(r.i32());\n if (description.kind !== \"dir\") throw new PosixError(Errno.ENOTDIR);\n const data = description.read(clamp(r.u32()));\n return { status: data.length, payload: data };\n }\n case Op.fsync: {\n proc.table.get(r.i32());\n /* The volume commits on write today; when a journalled storage\n * authority lands this becomes a real barrier. */\n return { status: 0 };\n }\n\n /* ------------------------------------------------------ descriptors */\n case Op.dup: return { status: proc.table.dup(r.i32(), r.u32()) };\n case Op.dup2: return { status: proc.table.dup2(r.i32(), r.i32()) };\n case Op.get_flags: {\n const fd = r.i32();\n const description = proc.table.get(fd);\n return { status: 0, payload: new Writer().u32(description.flags).u32(proc.table.cloexec(fd) ? 1 : 0).finish() };\n }\n case Op.set_flags: {\n const fd = r.i32();\n const flags = r.u32();\n const cloexec = r.u32();\n const description = proc.table.get(fd);\n /* Only the status flags may change; the access mode was fixed at open. */\n description.flags = accessMode(description.flags) | (flags & ~0o3);\n proc.table.setCloexec(fd, cloexec !== 0);\n return { status: 0 };\n }\n\n /* ------------------------------------------------------------ pipes */\n case Op.pipe: {\n const flags = r.u32();\n const [readEnd, writeEnd] = createPipe(flags & O_NONBLOCK);\n const cloexec = (flags & O_CLOEXEC) !== 0;\n const readFd = proc.table.add(readEnd, cloexec);\n const writeFd = proc.table.add(writeEnd, cloexec);\n return { status: 0, payload: new Writer().i32(readFd).i32(writeFd).finish() };\n }\n\n /* -------------------------------------------------------- readiness */\n case Op.poll: {\n const count = r.u32();\n const requests: { fd: number; events: number }[] = [];\n for (let i = 0; i < count; i += 1) requests.push({ fd: r.i32(), events: r.u32() });\n const timeoutMs = r.i64();\n const ready = await poll(requests, timeoutMs);\n const w = new Writer().u32(ready.length);\n for (const entry of ready) w.i32(entry.fd).u32(entry.revents);\n return { status: ready.length, payload: w.finish() };\n }\n\n /* ------------------------------------------------------------- time */\n case Op.clock_gettime: {\n const monotonic = r.u32() !== 0;\n const now = monotonic\n ? (typeof performance === \"object\" ? performance.now() : Date.now() - started) - monotonicBase\n : Date.now();\n const nanos = Math.round(now * 1e6);\n return { status: 0, payload: new Writer().i64(Math.floor(nanos / 1e9)).u32(nanos % 1e9).finish() };\n }\n case Op.sleep: {\n const nanos = r.u64();\n await sleep(nanos / 1e6);\n return { status: proc.signal.aborted ? failure(Errno.EINTR) : 0 };\n }\n\n /* --------------------------------------------------------- identity */\n case Op.getpid: {\n const w = new Writer()\n .i32(proc.pid).i32(proc.ppid)\n .u32(proc.cred.uid).u32(proc.cred.gid).u32(proc.cred.umask ?? 0o022);\n return { status: 0, payload: w.finish() };\n }\n case Op.getcwd: return { status: 0, payload: new Writer().string(proc.cwd).finish() };\n case Op.chdir: {\n const path = resolve(r.string());\n let st;\n try { st = proc.vfs.stat(path, { cred: proc.cred }); } catch (error) { throw toPosixError(error); }\n if (!st.isDirectory()) throw new PosixError(Errno.ENOTDIR);\n proc.cwd = path;\n return { status: 0 };\n }\n case Op.environ: {\n const joined = Object.entries(proc.env).map(([key, value]) => `${key}=${value}`).join(\"\\0\");\n return { status: 0, payload: new Writer().string(joined).finish() };\n }\n\n /* --------------------------------------------------------- processes */\n case Op.spawn: {\n const argv: string[] = [];\n for (let i = 0, n = r.u32(); i < n; i++) argv.push(r.string());\n const env: Record<string, string> = {};\n for (let i = 0, n = r.u32(); i < n; i++) {\n const entry = r.string();\n const split = entry.indexOf(\"=\");\n if (split > 0) env[entry.slice(0, split)] = entry.slice(split + 1);\n }\n const cwd = r.string() || proc.cwd;\n const files = new Map<number, OpenFileDescription>();\n for (let i = 0, n = r.u32(); i < n; i++) {\n const childFd = r.u32() | 0;\n const parentFd = r.u32() | 0;\n /* A named descriptor that is not open raises EBADF here rather than\n * starting the child with a hole it has no way to detect. */\n files.set(childFd, proc.table.get(parentFd));\n }\n if (!proc.processes) throw new PosixError(Errno.ENOSYS);\n if (argv.length === 0) throw new PosixError(Errno.EINVAL);\n return { status: await proc.processes.spawn({ argv, env, cwd: resolve(cwd), files }) };\n }\n case Op.waitpid: {\n const pid = r.u32() | 0;\n const options = r.u32() | 0;\n if (!proc.processes) throw new PosixError(Errno.ENOSYS);\n const result = await Promise.race([\n proc.processes.wait(pid, options),\n aborted().then(() => { throw new PosixError(Errno.EINTR); }),\n ]);\n return { status: 0, payload: new Writer().i32(result.pid).i32(result.status).finish() };\n }\n case Op.kill: {\n const pid = r.u32() | 0;\n const signal = r.u32() | 0;\n if (!proc.processes) throw new PosixError(Errno.ENOSYS);\n proc.processes.kill(pid, signal);\n return { status: 0 };\n }\n\n /* ---------------------------------------------------------- entropy */\n case Op.getrandom: {\n const length = Math.min(r.u32(), 65536);\n const bytes = new Uint8Array(length);\n crypto.getRandomValues(bytes);\n return { status: length, payload: bytes };\n }\n\n /* ----------------------------------------------------------- sockets */\n case Op.socket: {\n const family = r.u32();\n const type = r.u32();\n const protocol = r.i32();\n /* `0` means \"the default protocol for this socket type\", and for a\n * stream socket that default *is* TCP — so `IPPROTO_TCP` names the\n * same socket and must be accepted. It is not an exotic request:\n * `getaddrinfo` fills the protocol in, so every address it resolves\n * arrives here as 6, and `asyncio.create_server` passes that straight\n * to `socket()`. Refusing it made every asyncio server fail as\n * \"could not bind on any address\" — create_server swallows the\n * socket() error and only reports the empty list afterwards. */\n if (family !== AF_INET || (type & 0xf) !== SOCK_STREAM) throw new PosixError(Errno.EAFNOSUPPORT);\n if (protocol !== 0 && protocol !== IPPROTO_TCP) throw new PosixError(Errno.EPROTONOSUPPORT);\n if (!proc.sockets) throw new PosixError(Errno.ENOSYS);\n return { status: proc.table.add(new SocketDescription(new VirtualTcpSocket(proc.sockets))) };\n }\n case Op.bind: {\n const description = socketDescription(proc.table.get(r.i32()));\n description.bind(r.string(), r.u32());\n return { status: 0 };\n }\n case Op.listen: {\n const description = socketDescription(proc.table.get(r.i32()));\n description.listen(Math.max(1, Math.min(1024, r.u32())));\n return { status: 0 };\n }\n case Op.accept: {\n const description = socketDescription(proc.table.get(r.i32()));\n const accepted = await acceptBlocking(description);\n const fd = proc.table.add(accepted);\n const peer = accepted.peerAddress();\n return { status: fd, payload: new Writer().string(peer.address).u32(peer.port).finish() };\n }\n case Op.connect: {\n const description = socketDescription(proc.table.get(r.i32()));\n description.connect(r.string(), r.u32());\n return { status: 0 };\n }\n case Op.send: {\n const description = socketDescription(proc.table.get(r.i32()));\n return { status: await writeBlocking(description, r.bytes32()) };\n }\n case Op.recv: {\n const description = socketDescription(proc.table.get(r.i32()));\n const data = await readBlocking(description, clamp(r.u32()));\n return { status: data.length, payload: data };\n }\n case Op.shutdown: {\n const description = socketDescription(proc.table.get(r.i32()));\n const how = r.u32();\n if (how > 2) throw new PosixError(Errno.EINVAL);\n description.shutdown(how === 0 || how === 2, how === 1 || how === 2);\n return { status: 0 };\n }\n case Op.getsockname: {\n const address = socketDescription(proc.table.get(r.i32())).localAddress();\n return { status: 0, payload: new Writer().string(address.address).u32(address.port).finish() };\n }\n case Op.getpeername: {\n const address = socketDescription(proc.table.get(r.i32())).peerAddress();\n return { status: 0, payload: new Writer().string(address.address).u32(address.port).finish() };\n }\n case Op.setsockopt: {\n const description = socketDescription(proc.table.get(r.i32()));\n description.setOption(r.u32(), r.u32(), r.bytes32());\n return { status: 0 };\n }\n case Op.getsockopt: {\n const description = socketDescription(proc.table.get(r.i32()));\n return { status: 0, payload: new Writer().bytes32(description.getOption(r.u32(), r.u32())).finish() };\n }\n\n default:\n return { status: failure(Errno.ENOSYS) };\n }\n }\n\n /** Which capability families this build actually serves. */\n function implemented(capability: string): boolean {\n return [\"files\", \"descriptors\", \"pipes\", \"readiness\", \"time\", \"identity\", \"entropy\"].includes(capability) ||\n (capability === \"sockets\" && proc.sockets !== undefined);\n }\n\n function resolve(path: string): string {\n if (path.startsWith(\"/\")) return proc.vfs.resolvePath(path);\n return proc.vfs.resolvePath(`${proc.cwd.replace(/\\/$/, \"\")}/${path}`);\n }\n\n function clamp(length: number): number {\n return Math.min(length, MAX_TRANSFER);\n }\n\n function socketDescription(description: OpenFileDescription): SocketDescription {\n if (!(description instanceof SocketDescription)) throw new PosixError(Errno.ENOTSOCK, \"descriptor is not a socket\");\n return description;\n }\n\n async function acceptBlocking(description: SocketDescription): Promise<SocketDescription> {\n for (;;) {\n try { return description.accept(); }\n catch (error) {\n const posix = toPosixError(error);\n if (posix.errno !== Errno.EAGAIN || description.flags & O_NONBLOCK) throw posix;\n }\n await Promise.race([description.whenReady(), aborted()]);\n if (proc.signal.aborted) throw new PosixError(Errno.EINTR);\n }\n }\n\n /**\n * A read that waits.\n *\n * `O_NONBLOCK` gets EAGAIN as it should; everything else waits here, on the\n * host's event loop, until the description has something or reaches end of\n * input. The caller is parked in its own worker and pays nothing for it.\n */\n async function readBlocking(description: OpenFileDescription, length: number): Promise<Uint8Array> {\n for (;;) {\n try {\n return description.read(length);\n } catch (error) {\n const posix = toPosixError(error);\n if (posix.errno !== Errno.EAGAIN || description.flags & O_NONBLOCK) throw posix;\n }\n await Promise.race([description.whenReady(), aborted()]);\n if (proc.signal.aborted) throw new PosixError(Errno.EINTR);\n }\n }\n\n async function writeBlocking(description: OpenFileDescription, data: Uint8Array): Promise<number> {\n for (;;) {\n try {\n return description.write(data);\n } catch (error) {\n const posix = toPosixError(error);\n if (posix.errno !== Errno.EAGAIN || description.flags & O_NONBLOCK) throw posix;\n }\n await Promise.race([description.whenReady(), aborted()]);\n if (proc.signal.aborted) throw new PosixError(Errno.EINTR);\n }\n }\n\n async function poll(\n requests: { fd: number; events: number }[],\n timeoutMs: number,\n ): Promise<{ fd: number; revents: number }[]> {\n const deadline = timeoutMs < 0 ? Infinity : Date.now() + timeoutMs;\n for (;;) {\n const ready: { fd: number; revents: number }[] = [];\n const waits: Promise<void>[] = [];\n for (const { fd, events } of requests) {\n let description: OpenFileDescription;\n try {\n description = proc.table.get(fd);\n } catch {\n ready.push({ fd, revents: POLLHUP });\n continue;\n }\n let revents = 0;\n if (events & POLLIN && description.readable()) revents |= POLLIN;\n if (events & POLLOUT && description.writable()) revents |= POLLOUT;\n if (revents) ready.push({ fd, revents });\n else waits.push(description.whenReady());\n }\n if (ready.length > 0) return ready;\n const remaining = deadline - Date.now();\n if (remaining <= 0) return [];\n await Promise.race([...waits, sleep(Math.min(remaining, 50)), aborted()]);\n if (proc.signal.aborted) throw new PosixError(Errno.EINTR);\n }\n }\n\n function aborted(): Promise<void> {\n if (proc.signal.aborted) return Promise.resolve();\n return new Promise((resolve) => proc.signal.addEventListener(\"abort\", () => resolve(), { once: true }));\n }\n}\n\nfunction sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, Math.max(0, ms)));\n}\n\nfunction encodeStat(st: {\n ino: number; mode: number; size: number; uid: number; gid: number; nlink: number;\n atimeMs: number; mtimeMs: number; ctimeMs: number;\n}): Uint8Array {\n return new Writer()\n .u64(st.ino).u32(st.mode).u64(st.size)\n .u32(st.uid).u32(st.gid).u32(st.nlink)\n .i64(Math.round(st.atimeMs * 1e6)).i64(Math.round(st.mtimeMs * 1e6)).i64(Math.round(st.ctimeMs * 1e6))\n .finish();\n}\n\nexport { StreamDescription, DescriptorTable, SEEK_SET };\n","/**\n * The guest side of the host ABI, as the compiled code sees it.\n *\n * Compiled programs reach this through `sbx_host_call` in\n * `python-runtime/native/js/library_sbx.js`, which copies a frame out of the\n * module's memory, calls {@link HostAbiClient.callRaw}, and copies the answer\n * back. The typed methods below are for the JavaScript side of the worker —\n * loaders, the probe harness, and tests — which need the same operations\n * without going through Wasm memory.\n */\n\nimport { Errno, ERRNO_NAMES, OP_NAMES, Op, SBX_HOST_ABI_VERSION } from \"./host-abi.js\";\nimport { Reader, Writer, decodeResponse, encodeRequest, type RequestHeader } from \"./protocol.js\";\nimport type { HostCallClient } from \"./sync-transport.js\";\n\nexport class HostAbiError extends Error {\n errno: number;\n code: string;\n constructor(errno: number, op: number) {\n const name = ERRNO_NAMES[errno] ?? String(errno);\n super(`${OP_NAMES[op] ?? `op ${op}`} failed: ${name}`);\n this.errno = errno;\n this.code = name;\n }\n}\n\nexport interface HostAbiResult {\n status: number;\n payload: Uint8Array;\n}\n\n/**\n * One process's connection to the kernel.\n *\n * `generation` is stamped into every frame and checked on the way back, so a\n * completion belonging to a previous incarnation of this PID is rejected rather\n * than applied to the wrong descriptor table.\n */\nexport class HostAbiClient {\n private transport: HostCallClient;\n private generation: number;\n private nextRequestId = 1;\n\n constructor(transport: HostCallClient, generation: number) {\n this.transport = transport;\n this.generation = generation;\n }\n\n /** Send one frame, blocking. Returns the status and payload verbatim. */\n callRaw(op: number, payload: Uint8Array): HostAbiResult {\n const header: RequestHeader = {\n version: SBX_HOST_ABI_VERSION,\n op,\n requestId: this.nextRequestId++,\n generation: this.generation,\n };\n const frame = this.transport.call(encodeRequest(header, payload));\n const response = decodeResponse(frame, header);\n return { status: response.status, payload: response.payload };\n }\n\n /** As {@link callRaw}, but a negative status becomes an exception. */\n private call(op: number, payload: Uint8Array): HostAbiResult {\n const result = this.callRaw(op, payload);\n if (result.status < 0) throw new HostAbiError(-result.status, op);\n return result;\n }\n\n handshake(): { version: number; capabilities: Record<string, boolean> } {\n const { payload } = this.call(Op.handshake, new Uint8Array());\n const r = new Reader(payload);\n const version = r.u32();\n const count = r.u32();\n const capabilities: Record<string, boolean> = {};\n for (let i = 0; i < count; i += 1) capabilities[r.string()] = r.u32() === 1;\n return { version, capabilities };\n }\n\n open(path: string, flags: number, mode = 0o666): number {\n return this.call(Op.openat, new Writer().string(path).u32(flags).u32(mode).finish()).status;\n }\n\n close(fd: number): void {\n this.call(Op.close, new Writer().i32(fd).finish());\n }\n\n read(fd: number, length: number): Uint8Array {\n return this.call(Op.read, new Writer().i32(fd).u32(length).finish()).payload;\n }\n\n write(fd: number, data: Uint8Array): number {\n return this.call(Op.write, new Writer().i32(fd).bytes32(data).finish()).status;\n }\n\n /** Write every byte, looping over short writes the way a guest's libc must. */\n writeAll(fd: number, data: Uint8Array): void {\n let at = 0;\n while (at < data.length) at += this.write(fd, data.subarray(at));\n }\n\n pread(fd: number, length: number, offset: number): Uint8Array {\n return this.call(Op.pread, new Writer().i32(fd).u32(length).u64(offset).finish()).payload;\n }\n\n pwrite(fd: number, data: Uint8Array, offset: number): number {\n return this.call(Op.pwrite, new Writer().i32(fd).bytes32(data).u64(offset).finish()).status;\n }\n\n seek(fd: number, offset: number, whence: number): number {\n const { payload } = this.call(Op.lseek, new Writer().i32(fd).i64(offset).u32(whence).finish());\n return new Reader(payload).i64();\n }\n\n fstat(fd: number): HostStat {\n return decodeStat(this.call(Op.fstat, new Writer().i32(fd).finish()).payload);\n }\n\n stat(path: string, followLinks = true): HostStat {\n return decodeStat(\n this.call(Op.statat, new Writer().string(path).u32(followLinks ? 1 : 0).finish()).payload,\n );\n }\n\n ftruncate(fd: number, length: number): void {\n this.call(Op.ftruncate, new Writer().i32(fd).u64(length).finish());\n }\n\n rename(from: string, to: string): void {\n this.call(Op.renameat, new Writer().string(from).string(to).finish());\n }\n\n unlink(path: string, removeDirectory = false): void {\n this.call(Op.unlinkat, new Writer().string(path).u32(removeDirectory ? 1 : 0).finish());\n }\n\n mkdir(path: string, mode = 0o777): void {\n this.call(Op.mkdirat, new Writer().string(path).u32(mode).finish());\n }\n\n readlink(path: string): string {\n return new Reader(this.call(Op.readlinkat, new Writer().string(path).finish()).payload).string();\n }\n\n symlink(target: string, path: string): void {\n this.call(Op.symlinkat, new Writer().string(target).string(path).finish());\n }\n\n readdir(fd: number, bufferSize = 4096): string[] {\n const { payload } = this.call(Op.getdents, new Writer().i32(fd).u32(bufferSize).finish());\n const text = new TextDecoder().decode(payload);\n return text.split(\"\\0\").filter((name) => name.length > 0);\n }\n\n dup(fd: number, from = 0): number {\n return this.call(Op.dup, new Writer().i32(fd).u32(from).finish()).status;\n }\n\n dup2(fd: number, target: number): number {\n return this.call(Op.dup2, new Writer().i32(fd).i32(target).finish()).status;\n }\n\n getFlags(fd: number): { flags: number; cloexec: boolean } {\n const r = new Reader(this.call(Op.get_flags, new Writer().i32(fd).finish()).payload);\n return { flags: r.u32(), cloexec: r.u32() === 1 };\n }\n\n setFlags(fd: number, flags: number, cloexec: boolean): void {\n this.call(Op.set_flags, new Writer().i32(fd).u32(flags).u32(cloexec ? 1 : 0).finish());\n }\n\n pipe(flags = 0): [number, number] {\n const r = new Reader(this.call(Op.pipe, new Writer().u32(flags).finish()).payload);\n return [r.i32(), r.i32()];\n }\n\n poll(entries: { fd: number; events: number }[], timeoutMs: number): { fd: number; revents: number }[] {\n const w = new Writer().u32(entries.length);\n for (const entry of entries) w.i32(entry.fd).u32(entry.events);\n w.i64(timeoutMs);\n const r = new Reader(this.call(Op.poll, w.finish()).payload);\n const count = r.u32();\n const out: { fd: number; revents: number }[] = [];\n for (let i = 0; i < count; i += 1) out.push({ fd: r.i32(), revents: r.u32() });\n return out;\n }\n\n clockGettime(monotonic: boolean): { seconds: number; nanos: number } {\n const r = new Reader(this.call(Op.clock_gettime, new Writer().u32(monotonic ? 1 : 0).finish()).payload);\n return { seconds: r.i64(), nanos: r.u32() };\n }\n\n sleep(nanos: number): void {\n this.call(Op.sleep, new Writer().u64(nanos).finish());\n }\n\n identity(): { pid: number; ppid: number; uid: number; gid: number; umask: number } {\n const r = new Reader(this.call(Op.getpid, new Uint8Array()).payload);\n return { pid: r.i32(), ppid: r.i32(), uid: r.u32(), gid: r.u32(), umask: r.u32() };\n }\n\n getcwd(): string {\n return new Reader(this.call(Op.getcwd, new Uint8Array()).payload).string();\n }\n\n chdir(path: string): void {\n this.call(Op.chdir, new Writer().string(path).finish());\n }\n\n environ(): Record<string, string> {\n const joined = new Reader(this.call(Op.environ, new Uint8Array()).payload).string();\n const out: Record<string, string> = {};\n for (const entry of joined.split(\"\\0\")) {\n if (!entry) continue;\n const split = entry.indexOf(\"=\");\n out[entry.slice(0, split)] = entry.slice(split + 1);\n }\n return out;\n }\n\n getrandom(length: number): Uint8Array {\n return this.call(Op.getrandom, new Writer().u32(length).finish()).payload;\n }\n\n socket(family: number, type: number, protocol = 0): number {\n return this.call(Op.socket, new Writer().u32(family).u32(type).i32(protocol).finish()).status;\n }\n\n bind(fd: number, address: string, port: number): void {\n this.call(Op.bind, new Writer().i32(fd).string(address).u32(port).finish());\n }\n\n listen(fd: number, backlog = 128): void {\n this.call(Op.listen, new Writer().i32(fd).u32(backlog).finish());\n }\n\n accept(fd: number): { fd: number; address: string; port: number } {\n const result = this.call(Op.accept, new Writer().i32(fd).finish());\n const r = new Reader(result.payload);\n return { fd: result.status, address: r.string(), port: r.u32() };\n }\n\n connect(fd: number, address: string, port: number): void {\n this.call(Op.connect, new Writer().i32(fd).string(address).u32(port).finish());\n }\n\n send(fd: number, data: Uint8Array): number {\n return this.call(Op.send, new Writer().i32(fd).bytes32(data).finish()).status;\n }\n\n recv(fd: number, length: number): Uint8Array {\n return this.call(Op.recv, new Writer().i32(fd).u32(length).finish()).payload;\n }\n\n shutdown(fd: number, how: number): void {\n this.call(Op.shutdown, new Writer().i32(fd).u32(how).finish());\n }\n\n socketName(fd: number, peer = false): { address: string; port: number } {\n const payload = this.call(peer ? Op.getpeername : Op.getsockname, new Writer().i32(fd).finish()).payload;\n const r = new Reader(payload);\n return { address: r.string(), port: r.u32() };\n }\n}\n\nexport interface HostStat {\n ino: number;\n mode: number;\n size: number;\n uid: number;\n gid: number;\n nlink: number;\n atimeNs: number;\n mtimeNs: number;\n ctimeNs: number;\n}\n\nfunction decodeStat(payload: Uint8Array): HostStat {\n const r = new Reader(payload);\n return {\n ino: r.u64(), mode: r.u32(), size: r.u64(),\n uid: r.u32(), gid: r.u32(), nlink: r.u32(),\n atimeNs: r.i64(), mtimeNs: r.i64(), ctimeNs: r.i64(),\n };\n}\n\nexport { Errno, Op };\n","/**\n * Linux errno numbers and the `SysError` type every syscall-ish helper throws.\n *\n * The numbers match Linux x86-64 so that programs which print `err.errno`\n * (or read `$?` after a failed syscall) see the values they would on a real box.\n */\n\nexport const ERRNO = {\n EPERM: 1,\n ENOENT: 2,\n ESRCH: 3,\n EINTR: 4,\n EIO: 5,\n ENXIO: 6,\n E2BIG: 7,\n ENOEXEC: 8,\n EBADF: 9,\n ECHILD: 10,\n EAGAIN: 11,\n ENOMEM: 12,\n EACCES: 13,\n EFAULT: 14,\n ENOTBLK: 15,\n EBUSY: 16,\n EEXIST: 17,\n EXDEV: 18,\n ENODEV: 19,\n ENOTDIR: 20,\n EISDIR: 21,\n EINVAL: 22,\n ENFILE: 23,\n EMFILE: 24,\n ENOTTY: 25,\n ETXTBSY: 26,\n EFBIG: 27,\n ENOSPC: 28,\n ESPIPE: 29,\n EROFS: 30,\n EMLINK: 31,\n EPIPE: 32,\n EDOM: 33,\n ERANGE: 34,\n EDEADLK: 35,\n ENAMETOOLONG: 36,\n ENOLCK: 37,\n ENOSYS: 38,\n ENOTEMPTY: 39,\n ELOOP: 40,\n ENOMSG: 42,\n ENOTSOCK: 88,\n EADDRINUSE: 98,\n EADDRNOTAVAIL: 99,\n ENETDOWN: 100,\n ECONNRESET: 104,\n ENOTCONN: 107,\n ETIMEDOUT: 110,\n ECONNREFUSED: 111,\n EHOSTUNREACH: 113,\n ENOTSUP: 95,\n} as const;\n\nexport type ErrnoCode = keyof typeof ERRNO;\n\n/** Human strings matching `strerror(3)`, used to build `perror`-style messages. */\nexport const STRERROR: Record<ErrnoCode, string> = {\n EPERM: \"Operation not permitted\",\n ENOENT: \"No such file or directory\",\n ESRCH: \"No such process\",\n EINTR: \"Interrupted system call\",\n EIO: \"Input/output error\",\n ENXIO: \"No such device or address\",\n E2BIG: \"Argument list too long\",\n ENOEXEC: \"Exec format error\",\n EBADF: \"Bad file descriptor\",\n ECHILD: \"No child processes\",\n EAGAIN: \"Resource temporarily unavailable\",\n ENOMEM: \"Cannot allocate memory\",\n EACCES: \"Permission denied\",\n EFAULT: \"Bad address\",\n ENOTBLK: \"Block device required\",\n EBUSY: \"Device or resource busy\",\n EEXIST: \"File exists\",\n EXDEV: \"Invalid cross-device link\",\n ENODEV: \"No such device\",\n ENOTDIR: \"Not a directory\",\n EISDIR: \"Is a directory\",\n EINVAL: \"Invalid argument\",\n ENFILE: \"Too many open files in system\",\n EMFILE: \"Too many open files\",\n ENOTTY: \"Inappropriate ioctl for device\",\n ETXTBSY: \"Text file busy\",\n EFBIG: \"File too large\",\n ENOSPC: \"No space left on device\",\n ESPIPE: \"Illegal seek\",\n EROFS: \"Read-only file system\",\n EMLINK: \"Too many links\",\n EPIPE: \"Broken pipe\",\n EDOM: \"Numerical argument out of domain\",\n ERANGE: \"Numerical result out of range\",\n EDEADLK: \"Resource deadlock avoided\",\n ENAMETOOLONG: \"File name too long\",\n ENOLCK: \"No locks available\",\n ENOSYS: \"Function not implemented\",\n ENOTEMPTY: \"Directory not empty\",\n ELOOP: \"Too many levels of symbolic links\",\n ENOMSG: \"No message of desired type\",\n ENOTSOCK: \"Socket operation on non-socket\",\n EADDRINUSE: \"Address already in use\",\n EADDRNOTAVAIL: \"Cannot assign requested address\",\n ENETDOWN: \"Network is down\",\n ECONNRESET: \"Connection reset by peer\",\n ENOTCONN: \"Transport endpoint is not connected\",\n ETIMEDOUT: \"Connection timed out\",\n ECONNREFUSED: \"Connection refused\",\n EHOSTUNREACH: \"No route to host\",\n ENOTSUP: \"Operation not supported\",\n};\n\n/** An error carrying the same shape Node uses for `fs` failures. */\nexport class SysError extends Error {\n readonly code: ErrnoCode;\n readonly errno: number;\n readonly syscall: string;\n readonly path?: string;\n readonly dest?: string;\n\n constructor(code: ErrnoCode, syscall: string, path?: string, dest?: string) {\n const detail = path === undefined ? \"\" : dest === undefined ? ` '${path}'` : ` '${path}' -> '${dest}'`;\n super(`${code}: ${STRERROR[code]}, ${syscall}${detail}`);\n this.name = \"SysError\";\n this.code = code;\n this.errno = -ERRNO[code];\n this.syscall = syscall;\n if (path !== undefined) this.path = path;\n if (dest !== undefined) this.dest = dest;\n }\n\n /** The message a coreutil prints: `ls: /nope: No such file or directory`. */\n toUserMessage(program: string, subject = this.path): string {\n return subject ? `${program}: ${subject}: ${STRERROR[this.code]}` : `${program}: ${STRERROR[this.code]}`;\n }\n}\n\nexport function isSysError(e: unknown): e is SysError {\n return e instanceof SysError;\n}\n\n/** Translate a raw error from the underlying volume into a `SysError`. */\nexport function toSysError(e: unknown, syscall: string, path?: string, dest?: string): SysError {\n if (e instanceof SysError) return e;\n const code = (e as { code?: string } | null)?.code;\n if (code && code in ERRNO) return new SysError(code as ErrnoCode, syscall, path, dest);\n const msg = e instanceof Error ? e.message : String(e);\n if (/not a directory/i.test(msg)) return new SysError(\"ENOTDIR\", syscall, path);\n if (/no such file|not found/i.test(msg)) return new SysError(\"ENOENT\", syscall, path);\n if (/exists/i.test(msg)) return new SysError(\"EEXIST\", syscall, path);\n if (/directory not empty/i.test(msg)) return new SysError(\"ENOTEMPTY\", syscall, path);\n if (/is a directory/i.test(msg)) return new SysError(\"EISDIR\", syscall, path);\n return new SysError(\"EIO\", syscall, path);\n}\n\nexport function strerror(code: ErrnoCode): string {\n return STRERROR[code];\n}\n","/**\n * POSIX path helpers. Deliberately independent of `node:path` so container\n * paths behave identically no matter what platform the host runs on.\n */\n\nexport const SEP = \"/\";\n\nexport function isAbsolute(p: string): boolean {\n return p.startsWith(\"/\");\n}\n\n/** Split into non-empty segments, dropping the leading/trailing slashes. */\nexport function segments(p: string): string[] {\n return p.split(\"/\").filter((s) => s.length > 0);\n}\n\n/**\n * Lexical normalisation: collapse `//`, resolve `.` and `..` without touching\n * the filesystem. Symlinks are *not* followed — that is `Vfs.realpath`'s job.\n */\nexport function normalize(p: string): string {\n if (p === \"\") return \".\";\n const abs = isAbsolute(p);\n const trailing = p.length > 1 && p.endsWith(\"/\");\n const out: string[] = [];\n for (const seg of p.split(\"/\")) {\n if (seg === \"\" || seg === \".\") continue;\n if (seg === \"..\") {\n if (out.length > 0 && out[out.length - 1] !== \"..\") out.pop();\n else if (!abs) out.push(\"..\");\n continue;\n }\n out.push(seg);\n }\n let result = out.join(\"/\");\n if (abs) result = \"/\" + result;\n else if (result === \"\") result = \".\";\n if (trailing && !result.endsWith(\"/\")) result += \"/\";\n return result === \"\" ? \"/\" : result;\n}\n\n/** Join fragments then normalise, like `path.posix.join`. */\nexport function join(...parts: string[]): string {\n const joined = parts.filter((p) => p !== \"\").join(\"/\");\n return joined === \"\" ? \".\" : normalize(joined);\n}\n\n/** Resolve `p` against `base` (usually a process cwd) to an absolute path. */\nexport function resolve(base: string, ...parts: string[]): string {\n let resolved = \"\";\n let absolute = false;\n for (let i = parts.length - 1; i >= 0 && !absolute; i--) {\n const part = parts[i]!;\n if (part === \"\") continue;\n resolved = resolved === \"\" ? part : `${part}/${resolved}`;\n absolute = isAbsolute(part);\n }\n if (!absolute) {\n resolved = resolved === \"\" ? base : `${base}/${resolved}`;\n }\n const norm = normalize(resolved);\n return isAbsolute(norm) ? stripTrailing(norm) : stripTrailing(normalize(`/${norm}`));\n}\n\nfunction stripTrailing(p: string): string {\n return p.length > 1 && p.endsWith(\"/\") ? p.slice(0, -1) : p;\n}\n\nexport function dirname(p: string): string {\n const norm = stripTrailing(normalize(p));\n if (norm === \"/\") return \"/\";\n const idx = norm.lastIndexOf(\"/\");\n if (idx < 0) return \".\";\n if (idx === 0) return \"/\";\n return norm.slice(0, idx);\n}\n\nexport function basename(p: string, ext?: string): string {\n const norm = stripTrailing(normalize(p));\n if (norm === \"/\") return \"/\";\n const idx = norm.lastIndexOf(\"/\");\n let base = idx < 0 ? norm : norm.slice(idx + 1);\n if (ext && base !== ext && base.endsWith(ext)) base = base.slice(0, -ext.length);\n return base;\n}\n\nexport function extname(p: string): string {\n const base = basename(p);\n const idx = base.lastIndexOf(\".\");\n return idx <= 0 ? \"\" : base.slice(idx);\n}\n\n/** Relative path from `from` to `to`, both assumed absolute + normalised. */\nexport function relative(from: string, to: string): string {\n const a = segments(normalize(from));\n const b = segments(normalize(to));\n let i = 0;\n while (i < a.length && i < b.length && a[i] === b[i]) i++;\n const up = new Array(a.length - i).fill(\"..\");\n const down = b.slice(i);\n const out = [...up, ...down].join(\"/\");\n return out === \"\" ? \".\" : out;\n}\n\n/** True when `child` is `parent` or lives beneath it. */\nexport function contains(parent: string, child: string): boolean {\n const p = stripTrailing(normalize(parent));\n const c = stripTrailing(normalize(child));\n if (p === \"/\") return true;\n return c === p || c.startsWith(p + \"/\");\n}\n\n/** Drop a trailing slash except on the root, for display and map keys. */\nexport function clean(p: string): string {\n return stripTrailing(normalize(p));\n}\n","/**\n * File-mode bit manipulation: the `st_mode` layout, the `-rwxr-xr-x` rendering\n * used by `ls -l`, and the symbolic-mode grammar accepted by `chmod`.\n */\n\nimport { SysError } from \"./errno.js\";\n\nexport const S_IFMT = 0o170000;\nexport const S_IFSOCK = 0o140000;\nexport const S_IFLNK = 0o120000;\nexport const S_IFREG = 0o100000;\nexport const S_IFBLK = 0o060000;\nexport const S_IFDIR = 0o040000;\nexport const S_IFCHR = 0o020000;\nexport const S_IFIFO = 0o010000;\n\nexport const S_ISUID = 0o4000;\nexport const S_ISGID = 0o2000;\nexport const S_ISVTX = 0o1000;\n\nexport const S_IRUSR = 0o400;\nexport const S_IWUSR = 0o200;\nexport const S_IXUSR = 0o100;\nexport const S_IRGRP = 0o040;\nexport const S_IWGRP = 0o020;\nexport const S_IXGRP = 0o010;\nexport const S_IROTH = 0o004;\nexport const S_IWOTH = 0o002;\nexport const S_IXOTH = 0o001;\n\nexport const PERM_MASK = 0o7777;\n\n/** `access(2)` mode flags. */\nexport const F_OK = 0;\nexport const X_OK = 1;\nexport const W_OK = 2;\nexport const R_OK = 4;\n\nexport type FileKind = \"file\" | \"directory\" | \"symlink\" | \"chardev\" | \"blockdev\" | \"fifo\" | \"socket\";\n\nexport function kindOf(mode: number): FileKind {\n switch (mode & S_IFMT) {\n case S_IFDIR:\n return \"directory\";\n case S_IFLNK:\n return \"symlink\";\n case S_IFCHR:\n return \"chardev\";\n case S_IFBLK:\n return \"blockdev\";\n case S_IFIFO:\n return \"fifo\";\n case S_IFSOCK:\n return \"socket\";\n default:\n return \"file\";\n }\n}\n\nexport function ifmtFor(kind: FileKind): number {\n switch (kind) {\n case \"directory\":\n return S_IFDIR;\n case \"symlink\":\n return S_IFLNK;\n case \"chardev\":\n return S_IFCHR;\n case \"blockdev\":\n return S_IFBLK;\n case \"fifo\":\n return S_IFIFO;\n case \"socket\":\n return S_IFSOCK;\n default:\n return S_IFREG;\n }\n}\n\n/** The single leading character `ls -l` prints for a file type. */\nexport function typeChar(mode: number): string {\n switch (kindOf(mode)) {\n case \"directory\":\n return \"d\";\n case \"symlink\":\n return \"l\";\n case \"chardev\":\n return \"c\";\n case \"blockdev\":\n return \"b\";\n case \"fifo\":\n return \"p\";\n case \"socket\":\n return \"s\";\n default:\n return \"-\";\n }\n}\n\n/** Render as `drwxr-xr-x`, honouring setuid/setgid/sticky. */\nexport function formatMode(mode: number): string {\n const p = mode & PERM_MASK;\n const bit = (m: number, ch: string) => ((p & m) !== 0 ? ch : \"-\");\n let s = typeChar(mode);\n s += bit(S_IRUSR, \"r\") + bit(S_IWUSR, \"w\");\n s += (p & S_ISUID) !== 0 ? ((p & S_IXUSR) !== 0 ? \"s\" : \"S\") : bit(S_IXUSR, \"x\");\n s += bit(S_IRGRP, \"r\") + bit(S_IWGRP, \"w\");\n s += (p & S_ISGID) !== 0 ? ((p & S_IXGRP) !== 0 ? \"s\" : \"S\") : bit(S_IXGRP, \"x\");\n s += bit(S_IROTH, \"r\") + bit(S_IWOTH, \"w\");\n s += (p & S_ISVTX) !== 0 ? ((p & S_IXOTH) !== 0 ? \"t\" : \"T\") : bit(S_IXOTH, \"x\");\n return s;\n}\n\n/** Zero-padded octal permissions, as `stat -c %a`/`%04a` would show. */\nexport function octalMode(mode: number, width = 4): string {\n return (mode & PERM_MASK).toString(8).padStart(width, \"0\");\n}\n\nconst CLASS_BITS: Record<string, { r: number; w: number; x: number; s: number }> = {\n u: { r: S_IRUSR, w: S_IWUSR, x: S_IXUSR, s: S_ISUID },\n g: { r: S_IRGRP, w: S_IWGRP, x: S_IXGRP, s: S_ISGID },\n o: { r: S_IROTH, w: S_IWOTH, x: S_IXOTH, s: S_ISVTX },\n};\n\n/**\n * Apply a `chmod` spec to an existing mode. Accepts octal (`755`, `0644`) and\n * the symbolic grammar (`u+rwx,go-w`, `a=r`, `+X`, `u+s`, `o+t`).\n *\n * @param isDir whether the target is a directory — needed for the `X` flag.\n */\nexport function applyChmod(spec: string, current: number, isDir: boolean, umask = 0o022): number {\n if (/^[0-7]{1,4}$/.test(spec)) {\n return (current & ~PERM_MASK) | (parseInt(spec, 8) & PERM_MASK);\n }\n\n let perms = current & PERM_MASK;\n const clauses = spec.split(\",\");\n for (const clause of clauses) {\n const m = /^([ugoa]*)([+\\-=])([ugo]|[rwxXst]*)$/.exec(clause.trim());\n if (!m) throw new SysError(\"EINVAL\", \"chmod\");\n const [, whoRaw, op, permsRaw] = m as unknown as [string, string, string, string];\n const who = whoRaw === \"\" || whoRaw.includes(\"a\") ? \"ugo\" : whoRaw;\n\n let bits = 0;\n let special = 0;\n if (permsRaw === \"u\" || permsRaw === \"g\" || permsRaw === \"o\") {\n // Copy an existing class's rwx bits, e.g. `g=u`.\n const src = CLASS_BITS[permsRaw]!;\n const has = { r: (perms & src.r) !== 0, w: (perms & src.w) !== 0, x: (perms & src.x) !== 0 };\n for (const c of who) {\n const t = CLASS_BITS[c];\n if (!t) continue;\n if (has.r) bits |= t.r;\n if (has.w) bits |= t.w;\n if (has.x) bits |= t.x;\n }\n } else {\n for (const c of who) {\n const t = CLASS_BITS[c];\n if (!t) continue;\n for (const ch of permsRaw) {\n switch (ch) {\n case \"r\":\n bits |= t.r;\n break;\n case \"w\":\n bits |= t.w;\n break;\n case \"x\":\n bits |= t.x;\n break;\n case \"X\":\n // Only set execute when it's a directory or already executable somewhere.\n if (isDir || (perms & (S_IXUSR | S_IXGRP | S_IXOTH)) !== 0) bits |= t.x;\n break;\n case \"s\":\n if (c === \"u\") special |= S_ISUID;\n if (c === \"g\") special |= S_ISGID;\n break;\n case \"t\":\n special |= S_ISVTX;\n break;\n default:\n throw new SysError(\"EINVAL\", \"chmod\");\n }\n }\n }\n // `+t` with no class named still means the sticky bit.\n if (permsRaw.includes(\"t\") && whoRaw === \"\") special |= S_ISVTX;\n }\n\n const all = bits | special;\n if (op === \"+\") perms |= all & (whoRaw === \"\" ? ~umask : ~0);\n else if (op === \"-\") perms &= ~all;\n else {\n // `=` clears the named classes first, then sets.\n let clear = 0;\n for (const c of who) {\n const t = CLASS_BITS[c];\n if (t) clear |= t.r | t.w | t.x;\n }\n if (who.includes(\"u\")) clear |= S_ISUID;\n if (who.includes(\"g\")) clear |= S_ISGID;\n if (who.includes(\"o\")) clear |= S_ISVTX;\n perms = (perms & ~clear) | all;\n }\n }\n return (current & ~PERM_MASK) | (perms & PERM_MASK);\n}\n\n/** Parse the `umask` builtin's argument. */\nexport function parseUmask(spec: string): number {\n if (/^[0-7]{1,4}$/.test(spec)) return parseInt(spec, 8) & PERM_MASK;\n // Symbolic umask describes the bits to *keep*, so invert the chmod result.\n const granted = applyChmod(spec, 0o777, false, 0);\n return ~granted & 0o777;\n}\n\n/** Render a umask symbolically, the way `umask -S` does. */\nexport function formatUmaskSymbolic(umask: number): string {\n const granted = ~umask & 0o777;\n const part = (r: number, w: number, x: number) =>\n ((granted & r) !== 0 ? \"r\" : \"\") + ((granted & w) !== 0 ? \"w\" : \"\") + ((granted & x) !== 0 ? \"x\" : \"\");\n return `u=${part(S_IRUSR, S_IWUSR, S_IXUSR)},g=${part(S_IRGRP, S_IWGRP, S_IXGRP)},o=${part(S_IROTH, S_IWOTH, S_IXOTH)}`;\n}\n","/**\n * The `Stats` object handed back by `Vfs.stat`. Shaped like `fs.Stats` so it\n * feels familiar, but with a real `st_mode` that carries the file-type bits\n * (which the underlying volume stores separately).\n */\n\nimport { kindOf, type FileKind, S_IFMT } from \"./mode.js\";\n\nexport interface StatInit {\n mode: number;\n size: number;\n uid: number;\n gid: number;\n ino: number;\n nlink: number;\n atimeMs: number;\n mtimeMs: number;\n ctimeMs: number;\n birthtimeMs?: number;\n dev?: number;\n rdev?: number;\n blksize?: number;\n}\n\nexport class Stats {\n readonly mode: number;\n readonly size: number;\n readonly uid: number;\n readonly gid: number;\n readonly ino: number;\n readonly nlink: number;\n readonly dev: number;\n readonly rdev: number;\n readonly blksize: number;\n readonly atimeMs: number;\n readonly mtimeMs: number;\n readonly ctimeMs: number;\n readonly birthtimeMs: number;\n\n constructor(init: StatInit) {\n this.mode = init.mode;\n this.size = init.size;\n this.uid = init.uid;\n this.gid = init.gid;\n this.ino = init.ino;\n this.nlink = init.nlink;\n this.dev = init.dev ?? 2049;\n this.rdev = init.rdev ?? 0;\n this.blksize = init.blksize ?? 4096;\n this.atimeMs = init.atimeMs;\n this.mtimeMs = init.mtimeMs;\n this.ctimeMs = init.ctimeMs;\n this.birthtimeMs = init.birthtimeMs ?? init.ctimeMs;\n }\n\n get blocks(): number {\n return Math.ceil(this.size / 512);\n }\n\n get atime(): Date {\n return new Date(this.atimeMs);\n }\n get mtime(): Date {\n return new Date(this.mtimeMs);\n }\n get ctime(): Date {\n return new Date(this.ctimeMs);\n }\n get birthtime(): Date {\n return new Date(this.birthtimeMs);\n }\n\n get kind(): FileKind {\n return kindOf(this.mode);\n }\n\n isFile(): boolean {\n return this.kind === \"file\";\n }\n isDirectory(): boolean {\n return this.kind === \"directory\";\n }\n isSymbolicLink(): boolean {\n return this.kind === \"symlink\";\n }\n isCharacterDevice(): boolean {\n return this.kind === \"chardev\";\n }\n isBlockDevice(): boolean {\n return this.kind === \"blockdev\";\n }\n isFIFO(): boolean {\n return this.kind === \"fifo\";\n }\n isSocket(): boolean {\n return this.kind === \"socket\";\n }\n\n /** Permission bits only, with the type bits masked off. */\n get perms(): number {\n return this.mode & ~S_IFMT & 0o7777;\n }\n}\n\nexport interface DirEntry {\n name: string;\n kind: FileKind;\n}\n","/**\n * The container's virtual filesystem.\n *\n * Real file content lives in the RuntimePod's `MemoryVolume`, deliberately the\n * *same* volume the Node.js worker processes see — so a file written by `echo`\n * is readable by `require('fs')` inside a spawned script, and vice versa.\n *\n * On top of that volume this layer adds the parts a Linux userland expects and\n * the raw volume does not have: file-type bits in `st_mode`, permission and\n * ownership checks, an `O_*` open/fd table, and pluggable *virtual providers*\n * that synthesise `/proc`, `/sys` and `/dev` on demand.\n */\n\nimport type { RuntimeVolume } from \"../worker/contracts.js\";\nimport { SysError, toSysError } from \"./errno.js\";\nimport * as P from \"./path.js\";\nimport { Stats, type DirEntry } from \"./stat.js\";\nimport {\n F_OK,\n R_OK,\n W_OK,\n X_OK,\n PERM_MASK,\n S_IFDIR,\n S_IFLNK,\n S_IFREG,\n S_IRGRP,\n S_IROTH,\n S_IRUSR,\n S_IWGRP,\n S_IWOTH,\n S_IWUSR,\n S_IXGRP,\n S_IXOTH,\n S_IXUSR,\n ifmtFor,\n kindOf,\n type FileKind,\n} from \"./mode.js\";\n\n/** The identity a filesystem operation runs as. */\nexport interface Cred {\n uid: number;\n gid: number;\n groups: number[];\n umask: number;\n}\n\nexport const ROOT_CRED: Cred = { uid: 0, gid: 0, groups: [0], umask: 0o022 };\n\nexport function makeCred(uid: number, gid: number, groups: number[] = [], umask = 0o022): Cred {\n return { uid, gid, groups: groups.includes(gid) ? groups : [gid, ...groups], umask };\n}\n\n/** A file that does not live in the volume — `/proc/uptime`, `/dev/null`, … */\nexport interface VirtualNode {\n kind: FileKind;\n /** Permission bits only; the type bits are added from `kind`. */\n mode: number;\n uid?: number;\n gid?: number;\n size?: number;\n mtimeMs?: number;\n /** Symlink target, when `kind === \"symlink\"`. */\n target?: string;\n read?(): Uint8Array | string;\n write?(data: Uint8Array, append: boolean): void;\n /** Directory listing, when `kind === \"directory\"`. */\n list?(): string[];\n}\n\n/**\n * Supplies a subtree of synthetic files. `resolve` receives the path *relative*\n * to `root` (\"\" means the mount point itself) and returns null for misses.\n */\nexport interface VirtualProvider {\n root: string;\n resolve(rel: string): VirtualNode | null;\n /**\n * When true (the default) the provider owns its whole subtree and a miss is\n * `ENOENT` — that is what `/proc` wants, so a dead pid does not resolve to a\n * stale on-disk file. `/dev` and `/sys` set this to false so that synthetic\n * nodes overlay a real directory users can still write into.\n */\n exclusive?: boolean;\n}\n\nconst MAX_SYMLINKS = 40;\n\nconst encoder = new TextEncoder();\nconst decoder = new TextDecoder();\n\nexport interface WriteOptions {\n mode?: number;\n append?: boolean;\n cred?: Cred;\n /** Skip the permission check — used by kernel-internal writes. */\n privileged?: boolean;\n}\n\nexport interface ResolveOptions {\n cred?: Cred;\n /** Follow a symlink in the final position. Off for `lstat`, `rm`, `chmod -h`. */\n followFinal?: boolean;\n}\n\nexport class Vfs {\n private readonly providers: VirtualProvider[] = [];\n private nextVirtualIno = 0xf0000;\n private readonly virtualInos = new Map<string, number>();\n\n constructor(readonly volume: RuntimeVolume) {}\n\n // ── virtual providers ────────────────────────────────────────────────────\n\n addProvider(provider: VirtualProvider): void {\n this.providers.push(provider);\n // Longest mount point first so /proc/self beats /proc.\n this.providers.sort((a, b) => b.root.length - a.root.length);\n }\n\n removeProvider(root: string): void {\n const i = this.providers.findIndex((p) => p.root === root);\n if (i >= 0) this.providers.splice(i, 1);\n }\n\n /** The mount points currently served synthetically. */\n get virtualRoots(): string[] {\n return this.providers.map((p) => p.root);\n }\n\n private lookupVirtual(abs: string): VirtualNode | null {\n for (const provider of this.providers) {\n if (abs === provider.root) return provider.resolve(\"\");\n if (abs.startsWith(provider.root === \"/\" ? \"/\" : provider.root + \"/\")) {\n const rel = abs.slice(provider.root === \"/\" ? 1 : provider.root.length + 1);\n const node = provider.resolve(rel);\n if (node) return node;\n if (provider.exclusive !== false) return null;\n }\n }\n return null;\n }\n\n /** True when a miss at `abs` must be ENOENT rather than a volume lookup. */\n private isUnderProvider(abs: string): boolean {\n return this.providers.some(\n (p) => p.exclusive !== false && (abs === p.root || abs.startsWith(p.root + \"/\")),\n );\n }\n\n /** Synthetic children a non-exclusive provider contributes to a directory. */\n private virtualChildren(abs: string): string[] {\n const out: string[] = [];\n for (const p of this.providers) {\n if (p.exclusive !== false) continue;\n if (abs !== p.root && !abs.startsWith(p.root + \"/\")) continue;\n const rel = abs === p.root ? \"\" : abs.slice(p.root.length + 1);\n const node = p.resolve(rel);\n if (node?.kind === \"directory\") out.push(...(node.list?.() ?? []));\n }\n return out;\n }\n\n private virtualIno(abs: string): number {\n let ino = this.virtualInos.get(abs);\n if (ino === undefined) {\n ino = this.nextVirtualIno++;\n this.virtualInos.set(abs, ino);\n }\n return ino;\n }\n\n // ── permission model ─────────────────────────────────────────────────────\n\n /** True when `cred` may perform `mode` (R_OK/W_OK/X_OK) on a stat result. */\n permitted(st: Stats, mode: number, cred: Cred): boolean {\n if (mode === F_OK) return true;\n if (cred.uid === 0) {\n // root skips read/write checks, but still needs *some* execute bit set.\n if ((mode & X_OK) !== 0 && !st.isDirectory()) {\n return (st.mode & (S_IXUSR | S_IXGRP | S_IXOTH)) !== 0;\n }\n return true;\n }\n let bits: number;\n if (st.uid === cred.uid) bits = (st.mode & (S_IRUSR | S_IWUSR | S_IXUSR)) >> 6;\n else if (cred.groups.includes(st.gid)) bits = (st.mode & (S_IRGRP | S_IWGRP | S_IXGRP)) >> 3;\n else bits = st.mode & (S_IROTH | S_IWOTH | S_IXOTH);\n return (bits & mode) === mode;\n }\n\n private require(st: Stats, mode: number, cred: Cred | undefined, syscall: string, path: string): void {\n if (!cred) return;\n if (!this.permitted(st, mode, cred)) throw new SysError(\"EACCES\", syscall, path);\n }\n\n // ── path resolution ──────────────────────────────────────────────────────\n\n /**\n * Walk `abs` component by component, following symlinks and checking search\n * (`+x`) permission on every directory along the way, exactly like `namei`.\n *\n * Returns the fully resolved absolute path. Does *not* require the final\n * component to exist — callers decide whether a miss is fatal.\n */\n resolvePath(abs: string, opts: ResolveOptions = {}): string {\n const { cred, followFinal = true } = opts;\n const parts = P.segments(P.normalize(abs));\n let current = \"\";\n let hops = 0;\n\n for (let i = 0; i < parts.length; i++) {\n const isFinal = i === parts.length - 1;\n const next = `${current}/${parts[i]}`;\n\n // Search permission on the containing directory.\n if (cred && current !== \"\") {\n const parentStat = this.tryLstat(current);\n if (parentStat && parentStat.isDirectory() && !this.permitted(parentStat, X_OK, cred)) {\n throw new SysError(\"EACCES\", \"open\", abs);\n }\n }\n\n const st = this.tryLstat(next);\n if (st?.isSymbolicLink() && (!isFinal || followFinal)) {\n if (++hops > MAX_SYMLINKS) throw new SysError(\"ELOOP\", \"open\", abs);\n const target = this.readlinkRaw(next);\n const resolved = P.isAbsolute(target) ? target : P.resolve(current === \"\" ? \"/\" : current, target);\n // Restart resolution with the link's target spliced in.\n const rest = parts.slice(i + 1);\n const combined = rest.length ? `${resolved}/${rest.join(\"/\")}` : resolved;\n return this.resolvePath(combined, { ...opts, cred });\n }\n\n current = next;\n if (!isFinal && st && !st.isDirectory()) throw new SysError(\"ENOTDIR\", \"open\", abs);\n }\n\n return current === \"\" ? \"/\" : current;\n }\n\n /** lstat that returns null instead of throwing, for internal probing. */\n private tryLstat(abs: string): Stats | null {\n try {\n return this.lstat(abs);\n } catch {\n return null;\n }\n }\n\n private readlinkRaw(abs: string): string {\n const virt = this.lookupVirtual(abs);\n if (virt) {\n if (virt.kind !== \"symlink\" || virt.target === undefined) throw new SysError(\"EINVAL\", \"readlink\", abs);\n return virt.target;\n }\n try {\n return this.volume.readlinkSync(abs);\n } catch (e) {\n throw toSysError(e, \"readlink\", abs);\n }\n }\n\n // ── metadata ─────────────────────────────────────────────────────────────\n\n /** stat(2) — follows symlinks. */\n stat(abs: string, opts: { cred?: Cred } = {}): Stats {\n const real = this.resolvePath(abs, { cred: opts.cred, followFinal: true });\n return this.lstat(real);\n }\n\n /** lstat(2) — does not follow a symlink in the final position. */\n lstat(abs: string): Stats {\n const path = P.clean(abs);\n const virt = this.lookupVirtual(path);\n if (virt) return this.statFromVirtual(path, virt);\n\n if (this.isUnderProvider(path)) throw new SysError(\"ENOENT\", \"lstat\", path);\n\n let raw;\n try {\n raw = this.volume.lstatSync(path);\n } catch (e) {\n throw toSysError(e, \"lstat\", path);\n }\n const kind: FileKind = raw.isSymbolicLink() ? \"symlink\" : raw.isDirectory() ? \"directory\" : \"file\";\n return new Stats({\n mode: ifmtFor(kind) | (raw.mode & PERM_MASK),\n size: raw.size,\n uid: raw.uid ?? 0,\n gid: raw.gid ?? 0,\n ino: raw.ino,\n nlink: raw.nlink,\n atimeMs: raw.atimeMs,\n mtimeMs: raw.mtimeMs,\n ctimeMs: raw.ctimeMs,\n birthtimeMs: raw.birthtimeMs,\n });\n }\n\n private statFromVirtual(abs: string, node: VirtualNode): Stats {\n let size = node.size ?? 0;\n if (size === 0 && node.read && node.kind === \"file\") {\n try {\n const data = node.read();\n size = typeof data === \"string\" ? encoder.encode(data).length : data.length;\n } catch {\n size = 0;\n }\n }\n const now = node.mtimeMs ?? Date.now();\n return new Stats({\n mode: ifmtFor(node.kind) | (node.mode & PERM_MASK),\n size,\n uid: node.uid ?? 0,\n gid: node.gid ?? 0,\n ino: this.virtualIno(abs),\n nlink: node.kind === \"directory\" ? 2 : 1,\n atimeMs: now,\n mtimeMs: now,\n ctimeMs: now,\n });\n }\n\n exists(abs: string, cred?: Cred): boolean {\n try {\n this.stat(abs, { cred });\n return true;\n } catch {\n return false;\n }\n }\n\n lexists(abs: string): boolean {\n try {\n this.lstat(abs);\n return true;\n } catch {\n return false;\n }\n }\n\n access(abs: string, mode: number = F_OK, cred?: Cred): void {\n const st = this.stat(abs, { cred });\n if (cred && !this.permitted(st, mode, cred)) throw new SysError(\"EACCES\", \"access\", abs);\n }\n\n realpath(abs: string, cred?: Cred): string {\n const real = this.resolvePath(abs, { cred, followFinal: true });\n this.lstat(real); // throws ENOENT if the final component is missing\n return real;\n }\n\n // ── reading ──────────────────────────────────────────────────────────────\n\n readFile(abs: string, cred?: Cred): Uint8Array {\n const real = this.resolvePath(abs, { cred });\n const virt = this.lookupVirtual(real);\n if (virt) {\n if (virt.kind === \"directory\") throw new SysError(\"EISDIR\", \"read\", real);\n if (!virt.read) throw new SysError(\"EACCES\", \"read\", real);\n this.require(this.statFromVirtual(real, virt), R_OK, cred, \"open\", real);\n const data = virt.read();\n return typeof data === \"string\" ? encoder.encode(data) : data;\n }\n if (this.isUnderProvider(real)) throw new SysError(\"ENOENT\", \"open\", real);\n\n const st = this.lstat(real);\n if (st.isDirectory()) throw new SysError(\"EISDIR\", \"read\", real);\n this.require(st, R_OK, cred, \"open\", real);\n try {\n return this.volume.readFileSync(real);\n } catch (e) {\n throw toSysError(e, \"open\", real);\n }\n }\n\n readText(abs: string, cred?: Cred): string {\n return decoder.decode(this.readFile(abs, cred));\n }\n\n readdir(abs: string, cred?: Cred): string[] {\n const real = this.resolvePath(abs, { cred });\n const names = new Set<string>();\n const virt = this.lookupVirtual(real);\n\n // A synthetic directory contributes its entries…\n if (virt) {\n if (virt.kind !== \"directory\") throw new SysError(\"ENOTDIR\", \"scandir\", real);\n this.require(this.statFromVirtual(real, virt), R_OK, cred, \"scandir\", real);\n for (const name of virt.list?.() ?? []) names.add(name);\n } else if (this.isUnderProvider(real)) {\n throw new SysError(\"ENOENT\", \"scandir\", real);\n }\n\n // …and the real directory underneath contributes its own, so `/proc` still\n // lists synthetic files even though the mount point exists on disk.\n const hasReal = this.volumeHasDir(real);\n if (hasReal) {\n const st = this.lstat(real);\n if (!virt) {\n if (!st.isDirectory()) throw new SysError(\"ENOTDIR\", \"scandir\", real);\n this.require(st, R_OK, cred, \"scandir\", real);\n }\n try {\n for (const name of this.volume.readdirSync(real)) names.add(name);\n } catch (e) {\n if (!virt) throw toSysError(e, \"scandir\", real);\n }\n } else if (!virt) {\n const st = this.lstat(real);\n if (!st.isDirectory()) throw new SysError(\"ENOTDIR\", \"scandir\", real);\n throw new SysError(\"ENOENT\", \"scandir\", real);\n }\n\n // Provider mount points nested one level down also show up.\n for (const p of this.providers) {\n if (P.dirname(p.root) === real) names.add(P.basename(p.root));\n }\n for (const name of this.virtualChildren(real)) names.add(name);\n\n return [...names].sort();\n }\n\n /** True when the volume itself has a real directory at `abs`. */\n private volumeHasDir(abs: string): boolean {\n try {\n return this.volume.lstatSync(abs).isDirectory();\n } catch {\n return false;\n }\n }\n\n readdirWithTypes(abs: string, cred?: Cred): DirEntry[] {\n const real = this.resolvePath(abs, { cred });\n return this.readdir(real, cred).map((name) => {\n try {\n return { name, kind: this.lstat(P.join(real, name)).kind };\n } catch {\n return { name, kind: \"file\" as FileKind };\n }\n });\n }\n\n readlink(abs: string, cred?: Cred): string {\n const real = this.resolvePath(abs, { cred, followFinal: false });\n const st = this.lstat(real);\n if (!st.isSymbolicLink()) throw new SysError(\"EINVAL\", \"readlink\", real);\n return this.readlinkRaw(real);\n }\n\n // ── writing ──────────────────────────────────────────────────────────────\n\n writeFile(abs: string, data: Uint8Array | string, opts: WriteOptions = {}): void {\n const cred = opts.privileged ? undefined : opts.cred;\n const real = this.resolvePath(abs, { cred });\n const bytes = typeof data === \"string\" ? encoder.encode(data) : data;\n\n const virt = this.lookupVirtual(real);\n if (virt) {\n if (!virt.write) throw new SysError(\"EACCES\", \"write\", real);\n this.require(this.statFromVirtual(real, virt), W_OK, cred, \"open\", real);\n virt.write(bytes, opts.append ?? false);\n return;\n }\n if (this.isUnderProvider(real)) throw new SysError(\"ENOENT\", \"open\", real);\n\n const existing = this.tryLstat(real);\n if (existing) {\n if (existing.isDirectory()) throw new SysError(\"EISDIR\", \"open\", real);\n this.require(existing, W_OK, cred, \"open\", real);\n } else {\n const parent = P.dirname(real);\n const pst = this.lstat(parent);\n if (!pst.isDirectory()) throw new SysError(\"ENOTDIR\", \"open\", real);\n this.require(pst, W_OK | X_OK, cred, \"open\", real);\n }\n\n try {\n if (opts.append && existing) this.volume.appendFileSync(real, bytes);\n else this.volume.writeFileSync(real, bytes);\n } catch (e) {\n throw toSysError(e, \"open\", real);\n }\n\n if (!existing) {\n const mode = (opts.mode ?? 0o666) & ~(opts.cred?.umask ?? 0);\n this.volume.chmodSync(real, mode & PERM_MASK);\n // The underlying volume defaults new files to uid 1000; kernel-internal\n // writes (no cred) are root's, which is what a boot image expects.\n this.volume.chownSync(real, opts.cred?.uid ?? 0, opts.cred?.gid ?? 0);\n } else if (opts.mode !== undefined) {\n this.volume.chmodSync(real, opts.mode & PERM_MASK);\n }\n }\n\n appendFile(abs: string, data: Uint8Array | string, opts: WriteOptions = {}): void {\n this.writeFile(abs, data, { ...opts, append: true });\n }\n\n truncate(abs: string, len = 0, cred?: Cred): void {\n const real = this.resolvePath(abs, { cred });\n const st = this.lstat(real);\n if (st.isDirectory()) throw new SysError(\"EISDIR\", \"truncate\", real);\n this.require(st, W_OK, cred, \"truncate\", real);\n try {\n this.volume.truncateSync(real, len);\n } catch (e) {\n throw toSysError(e, \"truncate\", real);\n }\n }\n\n mkdir(abs: string, opts: { mode?: number; recursive?: boolean; cred?: Cred } = {}): void {\n const cred = opts.cred;\n const mode = ((opts.mode ?? 0o777) & ~(cred?.umask ?? 0)) & PERM_MASK;\n const real = this.resolvePath(abs, { cred, followFinal: false });\n\n if (opts.recursive) {\n const parts = P.segments(real);\n let cur = \"\";\n for (const part of parts) {\n cur += \"/\" + part;\n const st = this.tryLstat(cur);\n if (st) {\n if (!st.isDirectory()) throw new SysError(\"ENOTDIR\", \"mkdir\", cur);\n continue;\n }\n this.mkdirOne(cur, mode, cred);\n }\n return;\n }\n\n if (this.lexists(real)) throw new SysError(\"EEXIST\", \"mkdir\", real);\n this.mkdirOne(real, mode, cred);\n }\n\n private mkdirOne(abs: string, mode: number, cred?: Cred): void {\n const parent = P.dirname(abs);\n const pst = this.lstat(parent);\n if (!pst.isDirectory()) throw new SysError(\"ENOTDIR\", \"mkdir\", abs);\n this.require(pst, W_OK | X_OK, cred, \"mkdir\", abs);\n try {\n this.volume.mkdirSync(abs, { mode });\n } catch (e) {\n throw toSysError(e, \"mkdir\", abs);\n }\n this.volume.chmodSync(abs, mode);\n this.volume.chownSync(abs, cred?.uid ?? 0, cred?.gid ?? 0);\n }\n\n rmdir(abs: string, cred?: Cred): void {\n const real = this.resolvePath(abs, { cred, followFinal: false });\n const st = this.lstat(real);\n if (!st.isDirectory()) throw new SysError(\"ENOTDIR\", \"rmdir\", real);\n if (this.readdir(real).length > 0) throw new SysError(\"ENOTEMPTY\", \"rmdir\", real);\n this.requireParentWrite(real, cred, \"rmdir\");\n try {\n this.volume.rmdirSync(real);\n } catch (e) {\n throw toSysError(e, \"rmdir\", real);\n }\n }\n\n unlink(abs: string, cred?: Cred): void {\n const real = this.resolvePath(abs, { cred, followFinal: false });\n const st = this.lstat(real);\n if (st.isDirectory()) throw new SysError(\"EISDIR\", \"unlink\", real);\n this.requireParentWrite(real, cred, \"unlink\");\n if (this.isUnderProvider(real)) throw new SysError(\"EPERM\", \"unlink\", real);\n try {\n this.volume.unlinkSync(real);\n } catch (e) {\n throw toSysError(e, \"unlink\", real);\n }\n }\n\n /** Recursive delete, the engine behind `rm -r`. */\n rmrf(abs: string, cred?: Cred): void {\n const real = this.resolvePath(abs, { cred, followFinal: false });\n const st = this.lstat(real);\n if (!st.isDirectory()) {\n this.unlink(real, cred);\n return;\n }\n for (const name of this.readdir(real, cred)) {\n this.rmrf(P.join(real, name), cred);\n }\n this.rmdir(real, cred);\n }\n\n private requireParentWrite(abs: string, cred: Cred | undefined, syscall: string): void {\n if (!cred) return;\n const parent = P.dirname(abs);\n const pst = this.lstat(parent);\n this.require(pst, W_OK | X_OK, cred, syscall, abs);\n // Sticky directories (like /tmp) only let owners remove their own entries.\n if ((pst.mode & 0o1000) !== 0 && cred.uid !== 0) {\n const st = this.lstat(abs);\n if (st.uid !== cred.uid && pst.uid !== cred.uid) throw new SysError(\"EPERM\", syscall, abs);\n }\n }\n\n rename(from: string, to: string, cred?: Cred): void {\n const src = this.resolvePath(from, { cred, followFinal: false });\n const dst = this.resolvePath(to, { cred, followFinal: false });\n if (src === dst) return;\n this.lstat(src);\n if (P.contains(src, dst) && src !== dst) throw new SysError(\"EINVAL\", \"rename\", src, dst);\n this.requireParentWrite(src, cred, \"rename\");\n const dstParent = P.dirname(dst);\n const dpst = this.lstat(dstParent);\n this.require(dpst, W_OK | X_OK, cred, \"rename\", dst);\n try {\n this.volume.renameSync(src, dst);\n } catch (e) {\n throw toSysError(e, \"rename\", src);\n }\n }\n\n copyFile(from: string, to: string, cred?: Cred): void {\n const data = this.readFile(from, cred);\n const st = this.stat(from, { cred });\n this.writeFile(to, data, { cred, mode: st.perms });\n this.chmod(to, st.perms, cred);\n }\n\n symlink(target: string, linkPath: string, cred?: Cred): void {\n const real = this.resolvePath(linkPath, { cred, followFinal: false });\n if (this.lexists(real)) throw new SysError(\"EEXIST\", \"symlink\", real);\n const parent = P.dirname(real);\n const pst = this.lstat(parent);\n this.require(pst, W_OK | X_OK, cred, \"symlink\", real);\n try {\n this.volume.symlinkSync(target, real);\n } catch (e) {\n throw toSysError(e, \"symlink\", real);\n }\n this.volume.lchownSync(real, cred?.uid ?? 0, cred?.gid ?? 0);\n }\n\n link(existing: string, newPath: string, cred?: Cred): void {\n const src = this.resolvePath(existing, { cred });\n const dst = this.resolvePath(newPath, { cred, followFinal: false });\n const st = this.lstat(src);\n if (st.isDirectory()) throw new SysError(\"EPERM\", \"link\", src);\n if (this.lexists(dst)) throw new SysError(\"EEXIST\", \"link\", dst);\n const pst = this.lstat(P.dirname(dst));\n this.require(pst, W_OK | X_OK, cred, \"link\", dst);\n try {\n this.volume.linkSync(src, dst);\n } catch (e) {\n throw toSysError(e, \"link\", src, dst);\n }\n }\n\n chmod(abs: string, mode: number, cred?: Cred, follow = true): void {\n const real = this.resolvePath(abs, { cred, followFinal: follow });\n const st = this.lstat(real);\n if (cred && cred.uid !== 0 && st.uid !== cred.uid) throw new SysError(\"EPERM\", \"chmod\", real);\n try {\n if (st.isSymbolicLink()) this.volume.lchmodSync(real, mode & PERM_MASK);\n else this.volume.chmodSync(real, mode & PERM_MASK);\n } catch (e) {\n throw toSysError(e, \"chmod\", real);\n }\n }\n\n chown(abs: string, uid: number, gid: number, cred?: Cred, follow = true): void {\n const real = this.resolvePath(abs, { cred, followFinal: follow });\n const st = this.lstat(real);\n if (cred && cred.uid !== 0) {\n // Unprivileged users may only change the group, and only to one of theirs.\n if (uid !== -1 && uid !== st.uid) throw new SysError(\"EPERM\", \"chown\", real);\n if (gid !== -1 && !cred.groups.includes(gid)) throw new SysError(\"EPERM\", \"chown\", real);\n if (st.uid !== cred.uid) throw new SysError(\"EPERM\", \"chown\", real);\n }\n const nextUid = uid === -1 ? st.uid : uid;\n const nextGid = gid === -1 ? st.gid : gid;\n try {\n if (st.isSymbolicLink()) this.volume.lchownSync(real, nextUid, nextGid);\n else this.volume.chownSync(real, nextUid, nextGid);\n } catch (e) {\n throw toSysError(e, \"chown\", real);\n }\n }\n\n utimes(abs: string, atimeMs: number, mtimeMs: number, cred?: Cred): void {\n const real = this.resolvePath(abs, { cred });\n try {\n this.volume.utimesSync(real, new Date(atimeMs), new Date(mtimeMs));\n } catch (e) {\n throw toSysError(e, \"utimes\", real);\n }\n }\n\n /** `touch` semantics: create when missing, otherwise bump the timestamps. */\n touch(abs: string, cred?: Cred, timeMs = Date.now()): void {\n if (this.lexists(abs)) this.utimes(abs, timeMs, timeMs, cred);\n else this.writeFile(abs, new Uint8Array(0), { cred, mode: 0o666 });\n }\n\n // ── bulk helpers ─────────────────────────────────────────────────────────\n\n /** Depth-first walk yielding absolute paths. Symlinks are not followed. */\n *walk(abs: string, opts: { includeSelf?: boolean; cred?: Cred; maxDepth?: number } = {}): Generator<string> {\n const { includeSelf = true, cred, maxDepth = Infinity } = opts;\n const start = P.clean(abs);\n if (includeSelf) yield start;\n const recurse = (dir: string, depth: number): string[] => {\n if (depth > maxDepth) return [];\n let names: string[];\n try {\n names = this.readdir(dir, cred);\n } catch {\n return [];\n }\n const out: string[] = [];\n for (const name of names) {\n const child = P.join(dir, name);\n out.push(child);\n let st: Stats | null = null;\n try {\n st = this.lstat(child);\n } catch {\n /* vanished mid-walk */\n }\n if (st?.isDirectory()) out.push(...recurse(child, depth + 1));\n }\n return out;\n };\n let st: Stats | null = null;\n try {\n st = this.lstat(start);\n } catch {\n return;\n }\n if (st.isDirectory()) yield* recurse(start, 1);\n }\n\n /** Recursive copy used by `cp -r` and the container's `copyIn` helper. */\n copyTree(from: string, to: string, cred?: Cred): void {\n const st = this.lstat(this.resolvePath(from, { cred, followFinal: false }));\n if (st.isSymbolicLink()) {\n this.symlink(this.readlink(from, cred), to, cred);\n return;\n }\n if (!st.isDirectory()) {\n this.copyFile(from, to, cred);\n return;\n }\n if (!this.lexists(to)) this.mkdir(to, { cred, mode: st.perms, recursive: true });\n for (const name of this.readdir(from, cred)) {\n this.copyTree(P.join(from, name), P.join(to, name), cred);\n }\n }\n\n /** Free/used byte accounting for `df` and `du`. */\n usage(abs = \"/\"): { files: number; dirs: number; bytes: number } {\n let files = 0;\n let dirs = 0;\n let bytes = 0;\n for (const p of this.walk(abs)) {\n let st: Stats | null = null;\n try {\n st = this.lstat(p);\n } catch {\n continue;\n }\n if (st.isDirectory()) dirs++;\n else {\n files++;\n bytes += st.size;\n }\n }\n return { files, dirs, bytes };\n }\n}\n\nexport { F_OK, R_OK, W_OK, X_OK, S_IFDIR, S_IFREG, S_IFLNK, kindOf };\n","import * as P from \"./path.js\";\nimport type { RuntimeVolume, VolumeStat, VolumeStats } from \"../worker/contracts.js\";\n\nexport type NodeKind = \"file\" | \"directory\" | \"symlink\";\n\ninterface Inode {\n ino: number;\n kind: NodeKind;\n mode: number;\n uid: number;\n gid: number;\n nlink: number;\n data: Uint8Array;\n target: string;\n atimeMs: number;\n mtimeMs: number;\n ctimeMs: number;\n birthtimeMs: number;\n}\n\nexport interface MemoryVolumeSnapshotEntry {\n path: string;\n ino: number;\n kind: NodeKind;\n mode: number;\n uid: number;\n gid: number;\n nlink: number;\n data: number[];\n target: string;\n atimeMs: number;\n mtimeMs: number;\n ctimeMs: number;\n birthtimeMs: number;\n}\n\nclass VolumeError extends Error {\n constructor(readonly code: string, operation: string, path: string) {\n super(`${code}: ${operation}, '${path}'`);\n this.name = \"VolumeError\";\n }\n}\n\nclass MemoryStat implements VolumeStat {\n constructor(private readonly inode: Inode) {}\n get mode(): number { return this.inode.mode; }\n get size(): number {\n return this.inode.kind === \"file\"\n ? this.inode.data.length\n : this.inode.kind === \"symlink\" ? new TextEncoder().encode(this.inode.target).length : 0;\n }\n get uid(): number { return this.inode.uid; }\n get gid(): number { return this.inode.gid; }\n get ino(): number { return this.inode.ino; }\n get nlink(): number { return this.inode.nlink; }\n get atimeMs(): number { return this.inode.atimeMs; }\n get mtimeMs(): number { return this.inode.mtimeMs; }\n get ctimeMs(): number { return this.inode.ctimeMs; }\n get birthtimeMs(): number { return this.inode.birthtimeMs; }\n isFile(): boolean { return this.inode.kind === \"file\"; }\n isDirectory(): boolean { return this.inode.kind === \"directory\"; }\n isSymbolicLink(): boolean { return this.inode.kind === \"symlink\"; }\n}\n\nconst encoder = new TextEncoder();\n\n/** Browser-safe, synchronous in-memory filesystem used by the new runtime. */\nexport class MemoryVolume implements RuntimeVolume {\n private readonly entries = new Map<string, Inode>();\n private nextIno = 2;\n\n constructor() {\n this.entries.set(\"/\", this.inode(\"directory\", 0o755));\n }\n\n readFileSync(path: string): Uint8Array {\n const key = this.key(path);\n const node = this.required(key, \"open\");\n if (node.kind === \"directory\") throw new VolumeError(\"EISDIR\", \"read\", key);\n if (node.kind !== \"file\") throw new VolumeError(\"EINVAL\", \"read\", key);\n node.atimeMs = Date.now();\n return node.data.slice();\n }\n\n writeFileSync(path: string, data: string | Uint8Array): void {\n const key = this.key(path);\n this.requireParent(key, \"open\");\n const bytes = typeof data === \"string\" ? encoder.encode(data) : data.slice();\n const current = this.entries.get(key);\n if (current?.kind === \"directory\") throw new VolumeError(\"EISDIR\", \"open\", key);\n if (current?.kind === \"symlink\") throw new VolumeError(\"EINVAL\", \"open\", key);\n if (current) {\n current.data = bytes;\n this.touchChanged(current, true);\n } else {\n this.entries.set(key, this.inode(\"file\", 0o666, bytes));\n }\n }\n\n appendFileSync(path: string, data: string | Uint8Array): void {\n const key = this.key(path);\n const bytes = typeof data === \"string\" ? encoder.encode(data) : data;\n const current = this.entries.get(key);\n if (!current) return this.writeFileSync(key, bytes);\n if (current.kind !== \"file\") throw new VolumeError(current.kind === \"directory\" ? \"EISDIR\" : \"EINVAL\", \"open\", key);\n const next = new Uint8Array(current.data.length + bytes.length);\n next.set(current.data);\n next.set(bytes, current.data.length);\n current.data = next;\n this.touchChanged(current, true);\n }\n\n readdirSync(path: string): string[] {\n const key = this.key(path);\n const node = this.required(key, \"scandir\");\n if (node.kind !== \"directory\") throw new VolumeError(\"ENOTDIR\", \"scandir\", key);\n const prefix = key === \"/\" ? \"/\" : `${key}/`;\n const names = new Set<string>();\n for (const candidate of this.entries.keys()) {\n if (!candidate.startsWith(prefix) || candidate === key) continue;\n const rest = candidate.slice(prefix.length);\n if (rest && !rest.includes(\"/\")) names.add(rest);\n }\n node.atimeMs = Date.now();\n return [...names].sort();\n }\n\n lstatSync(path: string): VolumeStat {\n return new MemoryStat(this.required(this.key(path), \"lstat\"));\n }\n\n readlinkSync(path: string): string {\n const key = this.key(path);\n const node = this.required(key, \"readlink\");\n if (node.kind !== \"symlink\") throw new VolumeError(\"EINVAL\", \"readlink\", key);\n return node.target;\n }\n\n mkdirSync(path: string, options: { mode?: number } = {}): void {\n const key = this.key(path);\n if (this.entries.has(key)) throw new VolumeError(\"EEXIST\", \"mkdir\", key);\n this.requireParent(key, \"mkdir\");\n this.entries.set(key, this.inode(\"directory\", options.mode ?? 0o777));\n }\n\n rmdirSync(path: string): void {\n const key = this.key(path);\n if (key === \"/\") throw new VolumeError(\"EBUSY\", \"rmdir\", key);\n const node = this.required(key, \"rmdir\");\n if (node.kind !== \"directory\") throw new VolumeError(\"ENOTDIR\", \"rmdir\", key);\n const prefix = `${key}/`;\n if ([...this.entries.keys()].some((candidate) => candidate.startsWith(prefix))) {\n throw new VolumeError(\"ENOTEMPTY\", \"rmdir\", key);\n }\n this.entries.delete(key);\n }\n\n unlinkSync(path: string): void {\n const key = this.key(path);\n const node = this.required(key, \"unlink\");\n if (node.kind === \"directory\") throw new VolumeError(\"EISDIR\", \"unlink\", key);\n this.entries.delete(key);\n node.nlink--;\n node.ctimeMs = Date.now();\n }\n\n renameSync(from: string, to: string): void {\n const source = this.key(from);\n const dest = this.key(to);\n const node = this.required(source, \"rename\");\n this.requireParent(dest, \"rename\");\n if (source === \"/\") throw new VolumeError(\"EBUSY\", \"rename\", source);\n if (dest.startsWith(`${source}/`)) throw new VolumeError(\"EINVAL\", \"rename\", source);\n\n const existing = this.entries.get(dest);\n if (existing?.kind === \"directory\" && this.readdirSync(dest).length > 0) {\n throw new VolumeError(\"ENOTEMPTY\", \"rename\", dest);\n }\n if (existing) {\n this.entries.delete(dest);\n existing.nlink--;\n }\n\n const moved = [...this.entries.entries()]\n .filter(([path]) => path === source || path.startsWith(`${source}/`))\n .sort(([a], [b]) => a.length - b.length);\n for (const [path] of moved) this.entries.delete(path);\n for (const [path, value] of moved) {\n this.entries.set(dest + path.slice(source.length), value);\n value.ctimeMs = Date.now();\n }\n node.ctimeMs = Date.now();\n }\n\n symlinkSync(target: string, path: string): void {\n const key = this.key(path);\n if (this.entries.has(key)) throw new VolumeError(\"EEXIST\", \"symlink\", key);\n this.requireParent(key, \"symlink\");\n const node = this.inode(\"symlink\", 0o777);\n node.target = target;\n this.entries.set(key, node);\n }\n\n linkSync(existing: string, path: string): void {\n const source = this.key(existing);\n const dest = this.key(path);\n const node = this.required(source, \"link\");\n if (node.kind === \"directory\") throw new VolumeError(\"EPERM\", \"link\", source);\n if (this.entries.has(dest)) throw new VolumeError(\"EEXIST\", \"link\", dest);\n this.requireParent(dest, \"link\");\n node.nlink++;\n node.ctimeMs = Date.now();\n this.entries.set(dest, node);\n }\n\n truncateSync(path: string, length = 0): void {\n const key = this.key(path);\n const node = this.required(key, \"truncate\");\n if (node.kind !== \"file\") throw new VolumeError(node.kind === \"directory\" ? \"EISDIR\" : \"EINVAL\", \"truncate\", key);\n const data = new Uint8Array(length);\n data.set(node.data.subarray(0, length));\n node.data = data;\n this.touchChanged(node, true);\n }\n\n chmodSync(path: string, mode: number): void { this.setMode(path, mode); }\n lchmodSync(path: string, mode: number): void { this.setMode(path, mode); }\n chownSync(path: string, uid: number, gid: number): void { this.setOwner(path, uid, gid); }\n lchownSync(path: string, uid: number, gid: number): void { this.setOwner(path, uid, gid); }\n\n utimesSync(path: string, atime: Date, mtime: Date): void {\n const node = this.required(this.key(path), \"utimes\");\n node.atimeMs = atime.getTime();\n node.mtimeMs = mtime.getTime();\n node.ctimeMs = Date.now();\n }\n\n getStats(): VolumeStats {\n const seen = new Set<number>();\n let totalBytes = 0;\n let fileCount = 0;\n let directoryCount = 0;\n for (const node of this.entries.values()) {\n if (seen.has(node.ino)) continue;\n seen.add(node.ino);\n if (node.kind === \"directory\") directoryCount++;\n else {\n fileCount++;\n totalBytes += node.kind === \"file\" ? node.data.length : encoder.encode(node.target).length;\n }\n }\n return { totalBytes, fileCount, directoryCount, dirCount: directoryCount };\n }\n\n snapshot(): MemoryVolumeSnapshotEntry[] {\n return [...this.entries.entries()].map(([path, node]) => ({ path, ...node, data: [...node.data] }));\n }\n\n restore(snapshot: MemoryVolumeSnapshotEntry[]): void {\n const inodes = new Map<number, Inode>();\n const entries = new Map<string, Inode>();\n for (const item of snapshot) {\n let inode = inodes.get(item.ino);\n if (!inode) {\n inode = { ...item, data: new Uint8Array(item.data) };\n inodes.set(item.ino, inode);\n }\n entries.set(this.key(item.path), inode);\n }\n if (!entries.has(\"/\")) throw new VolumeError(\"EINVAL\", \"restore\", \"/\");\n this.entries.clear();\n for (const [path, inode] of entries) this.entries.set(path, inode);\n this.nextIno = Math.max(1, ...inodes.keys()) + 1;\n }\n\n /** Serializable representation used by RuntimePod snapshots. */\n export(): Array<{ path: string; kind: NodeKind; mode: number; uid: number; gid: number; data?: number[]; target?: string }> {\n return [...this.entries.entries()].map(([path, node]) => ({\n path, kind: node.kind, mode: node.mode, uid: node.uid, gid: node.gid,\n ...(node.kind === \"file\" ? { data: [...node.data] } : {}),\n ...(node.kind === \"symlink\" ? { target: node.target } : {}),\n }));\n }\n\n private setMode(path: string, mode: number): void {\n const node = this.required(this.key(path), \"chmod\");\n node.mode = mode & 0o7777;\n node.ctimeMs = Date.now();\n }\n\n private setOwner(path: string, uid: number, gid: number): void {\n const node = this.required(this.key(path), \"chown\");\n node.uid = uid;\n node.gid = gid;\n node.ctimeMs = Date.now();\n }\n\n private key(path: string): string {\n const clean = P.clean(path);\n if (!P.isAbsolute(clean)) throw new VolumeError(\"EINVAL\", \"path\", path);\n return clean;\n }\n\n private required(path: string, operation: string): Inode {\n const node = this.entries.get(path);\n if (!node) throw new VolumeError(\"ENOENT\", operation, path);\n return node;\n }\n\n private requireParent(path: string, operation: string): Inode {\n const parent = this.required(P.dirname(path), operation);\n if (parent.kind !== \"directory\") throw new VolumeError(\"ENOTDIR\", operation, path);\n return parent;\n }\n\n private inode(kind: NodeKind, mode: number, data = new Uint8Array(0)): Inode {\n const now = Date.now();\n return {\n ino: kind === \"directory\" && this.entries.size === 0 ? 1 : this.nextIno++,\n kind, mode: mode & 0o7777, uid: 0, gid: 0, nlink: 1,\n data, target: \"\", atimeMs: now, mtimeMs: now, ctimeMs: now, birthtimeMs: now,\n };\n }\n\n private touchChanged(node: Inode, modified: boolean): void {\n const now = Date.now();\n node.ctimeMs = now;\n if (modified) node.mtimeMs = now;\n }\n}\n"]}