sandboxedjs 0.1.0

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.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/fs/errno.ts","../src/fs/path.ts","../src/fs/mode.ts","../src/kernel/signals.ts","../src/shell/variables.ts","../src/fs/glob.ts","../src/shell/arith.ts","../src/shell/expand.ts","../src/shell/test.ts","../src/util/printf.ts","../src/shell/builtins/core.ts","../src/shell/builtins/vars.ts","../src/shell/builtins/misc.ts","../src/shell/builtins/index.ts","../src/fs/vfs.ts","../src/fs/stat.ts","../src/kernel/kernel.ts","../src/fs/streams.ts","../src/kernel/process.ts","../src/kernel/users.ts","../src/kernel/command.ts","../src/util/args.ts","../src/kernel/uname.ts","../src/image/rootfs.ts","../src/kernel/devfs.ts","../src/kernel/procfs.ts","../src/kernel/sysfs.ts","../src/net/stack.ts","../src/shell/interpreter.ts","../src/shell/lexer.ts","../src/shell/parser.ts","../src/container/container.ts","../src/bin/shell-bin.ts","../src/bin/fs-basic.ts","../src/bin/helpers.ts","../src/bin/system.ts","../src/bin/sed.ts","../src/bin/awk.ts","../src/bin/text.ts","../src/bin/search.ts","../src/bin/archive.ts","../src/bin/hash.ts","../src/net/commands.ts","../src/bin/admin.ts","../src/bin/docs.ts","../src/runtime/node.ts","../src/runtime/python-fs.ts","../src/runtime/python.ts","../src/pkg/index.ts","../src/bin/index.ts","../src/container/fs.ts","../src/container/session.ts","../src/container/terminal.ts","../src/index.ts"],"names":["clear","dir","seq","tail","home","range","matches","pad","fmt","key","resolve","parts","getBuiltin","action","top","file","node","st","encoder","decoder","out","head","proc","env","passwd","free","host","clean","ip","commands","body","tree","status","redirected","quote","readStdin","source","split","diff","stat","pick","basename","dirname","mount","MONTHS","substitute","BUILTINS","OPERATORS","tokenize","cmp","a","b","line","program","count","plus","normalize","column","cut","join","i","j","entries","bytes","bits","value","response","concat","stdinPath","printHelp","stdin","outcome","runRepl","mkdir","ps"],"mappings":"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","file":"index.js","sourcesContent":["/**\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","/** POSIX signal numbers, names and default dispositions. */\n\nexport const SIGNALS: Record<string, number> = {\n SIGHUP: 1,\n SIGINT: 2,\n SIGQUIT: 3,\n SIGILL: 4,\n SIGTRAP: 5,\n SIGABRT: 6,\n SIGBUS: 7,\n SIGFPE: 8,\n SIGKILL: 9,\n SIGUSR1: 10,\n SIGSEGV: 11,\n SIGUSR2: 12,\n SIGPIPE: 13,\n SIGALRM: 14,\n SIGTERM: 15,\n SIGSTKFLT: 16,\n SIGCHLD: 17,\n SIGCONT: 18,\n SIGSTOP: 19,\n SIGTSTP: 20,\n SIGTTIN: 21,\n SIGTTOU: 22,\n SIGURG: 23,\n SIGXCPU: 24,\n SIGXFSZ: 25,\n SIGVTALRM: 26,\n SIGPROF: 27,\n SIGWINCH: 28,\n SIGIO: 29,\n SIGPWR: 30,\n SIGSYS: 31,\n};\n\nexport const SIGNAL_NAMES: Record<number, string> = Object.fromEntries(\n Object.entries(SIGNALS).map(([name, num]) => [num, name]),\n);\n\n/** Signals whose default action terminates the process. */\nexport const FATAL_SIGNALS = new Set([\n \"SIGHUP\",\n \"SIGINT\",\n \"SIGQUIT\",\n \"SIGILL\",\n \"SIGABRT\",\n \"SIGBUS\",\n \"SIGFPE\",\n \"SIGKILL\",\n \"SIGUSR1\",\n \"SIGSEGV\",\n \"SIGUSR2\",\n \"SIGPIPE\",\n \"SIGALRM\",\n \"SIGTERM\",\n \"SIGSTKFLT\",\n \"SIGXCPU\",\n \"SIGXFSZ\",\n \"SIGVTALRM\",\n \"SIGPROF\",\n \"SIGSYS\",\n \"SIGTRAP\",\n]);\n\nexport const STOP_SIGNALS = new Set([\"SIGSTOP\", \"SIGTSTP\", \"SIGTTIN\", \"SIGTTOU\"]);\n\n/** Signals a process cannot catch or ignore. */\nexport const UNCATCHABLE = new Set([\"SIGKILL\", \"SIGSTOP\"]);\n\n/**\n * Normalise anything `kill` might be handed — `9`, `TERM`, `SIGTERM`, `-9` —\n * into a canonical `SIGxxx` name. Returns null when unrecognised.\n */\nexport function normalizeSignal(spec: string | number): string | null {\n if (typeof spec === \"number\") return SIGNAL_NAMES[spec] ?? null;\n const s = spec.trim().replace(/^-/, \"\");\n if (/^\\d+$/.test(s)) return SIGNAL_NAMES[Number(s)] ?? null;\n const upper = s.toUpperCase();\n const withPrefix = upper.startsWith(\"SIG\") ? upper : \"SIG\" + upper;\n return withPrefix in SIGNALS ? withPrefix : null;\n}\n\nexport function signalNumber(name: string): number {\n return SIGNALS[name] ?? 0;\n}\n\n/** The `$?` value a shell reports for a process killed by `sig`. */\nexport function exitCodeForSignal(sig: string): number {\n return 128 + (SIGNALS[sig] ?? 0);\n}\n\n/** Short description used by `kill -l` and `trap -l`. */\nexport const SIGNAL_DESCRIPTIONS: Record<string, string> = {\n SIGHUP: \"Hangup\",\n SIGINT: \"Interrupt\",\n SIGQUIT: \"Quit\",\n SIGILL: \"Illegal instruction\",\n SIGTRAP: \"Trace/breakpoint trap\",\n SIGABRT: \"Aborted\",\n SIGBUS: \"Bus error\",\n SIGFPE: \"Floating point exception\",\n SIGKILL: \"Killed\",\n SIGUSR1: \"User defined signal 1\",\n SIGSEGV: \"Segmentation fault\",\n SIGUSR2: \"User defined signal 2\",\n SIGPIPE: \"Broken pipe\",\n SIGALRM: \"Alarm clock\",\n SIGTERM: \"Terminated\",\n SIGSTKFLT: \"Stack fault\",\n SIGCHLD: \"Child exited\",\n SIGCONT: \"Continued\",\n SIGSTOP: \"Stopped (signal)\",\n SIGTSTP: \"Stopped\",\n SIGTTIN: \"Stopped (tty input)\",\n SIGTTOU: \"Stopped (tty output)\",\n SIGURG: \"Urgent I/O condition\",\n SIGXCPU: \"CPU time limit exceeded\",\n SIGXFSZ: \"File size limit exceeded\",\n SIGVTALRM: \"Virtual timer expired\",\n SIGPROF: \"Profiling timer expired\",\n SIGWINCH: \"Window changed\",\n SIGIO: \"I/O possible\",\n SIGPWR: \"Power failure\",\n SIGSYS: \"Bad system call\",\n};\n","/**\n * Shell variable table: scalars, indexed arrays, export/readonly attributes,\n * and the function-local scoping that `local` introduces.\n */\n\nexport interface VarAttributes {\n exported?: boolean;\n readonly?: boolean;\n integer?: boolean;\n /** `declare -l` / `-u` case folding. */\n lower?: boolean;\n upper?: boolean;\n}\n\nexport interface VarEntry extends VarAttributes {\n value: string;\n array?: string[];\n assoc?: Map<string, string>;\n}\n\nexport class ReadonlyVariableError extends Error {\n constructor(readonly variable: string) {\n super(`${variable}: readonly variable`);\n this.name = \"ReadonlyVariableError\";\n }\n}\n\nexport class Variables {\n /** Innermost scope last; index 0 is the global scope. */\n private readonly scopes: Array<Map<string, VarEntry>> = [new Map()];\n\n constructor(initial: Record<string, string> = {}) {\n for (const [k, v] of Object.entries(initial)) {\n this.scopes[0]!.set(k, { value: v, exported: true });\n }\n }\n\n pushScope(): void {\n this.scopes.push(new Map());\n }\n\n popScope(): void {\n if (this.scopes.length > 1) this.scopes.pop();\n }\n\n get depth(): number {\n return this.scopes.length;\n }\n\n private find(name: string): { scope: Map<string, VarEntry>; entry: VarEntry } | undefined {\n for (let i = this.scopes.length - 1; i >= 0; i--) {\n const entry = this.scopes[i]!.get(name);\n if (entry) return { scope: this.scopes[i]!, entry };\n }\n return undefined;\n }\n\n has(name: string): boolean {\n return this.find(name) !== undefined;\n }\n\n get(name: string): string | undefined {\n const found = this.find(name);\n if (!found) return undefined;\n if (found.entry.array) return found.entry.array[0] ?? \"\";\n return found.entry.value;\n }\n\n entry(name: string): VarEntry | undefined {\n return this.find(name)?.entry;\n }\n\n getArray(name: string): string[] | undefined {\n const found = this.find(name);\n if (!found) return undefined;\n return found.entry.array ?? [found.entry.value];\n }\n\n isArray(name: string): boolean {\n return this.find(name)?.entry.array !== undefined;\n }\n\n set(name: string, value: string, attrs: VarAttributes = {}): void {\n const found = this.find(name);\n if (found?.entry.readonly) throw new ReadonlyVariableError(name);\n let next = value;\n if (found?.entry.upper || attrs.upper) next = next.toUpperCase();\n if (found?.entry.lower || attrs.lower) next = next.toLowerCase();\n if (found) {\n found.entry.value = next;\n delete found.entry.array;\n Object.assign(found.entry, attrs);\n } else {\n this.scopes[this.scopes.length - 1]!.set(name, { value: next, ...attrs });\n }\n }\n\n /** Declare in the innermost scope, shadowing outer definitions (`local`). */\n setLocal(name: string, value: string, attrs: VarAttributes = {}): void {\n this.scopes[this.scopes.length - 1]!.set(name, { value, ...attrs });\n }\n\n setArray(name: string, values: string[], attrs: VarAttributes = {}): void {\n const found = this.find(name);\n if (found?.entry.readonly) throw new ReadonlyVariableError(name);\n if (found) {\n found.entry.array = values.slice();\n found.entry.value = values[0] ?? \"\";\n Object.assign(found.entry, attrs);\n } else {\n this.scopes[this.scopes.length - 1]!.set(name, { value: values[0] ?? \"\", array: values.slice(), ...attrs });\n }\n }\n\n setIndex(name: string, index: number, value: string): void {\n const found = this.find(name);\n if (found?.entry.readonly) throw new ReadonlyVariableError(name);\n const arr = found?.entry.array ?? (found ? [found.entry.value] : []);\n while (arr.length < index) arr.push(\"\");\n arr[index] = value;\n this.setArray(name, arr);\n }\n\n append(name: string, value: string): void {\n const found = this.find(name);\n if (found?.entry.array) {\n this.setArray(name, [...found.entry.array, value]);\n return;\n }\n this.set(name, (this.get(name) ?? \"\") + value);\n }\n\n unset(name: string): boolean {\n for (let i = this.scopes.length - 1; i >= 0; i--) {\n const entry = this.scopes[i]!.get(name);\n if (entry) {\n if (entry.readonly) throw new ReadonlyVariableError(name);\n this.scopes[i]!.delete(name);\n return true;\n }\n }\n return false;\n }\n\n export(name: string, exported = true): void {\n const found = this.find(name);\n if (found) found.entry.exported = exported;\n else this.scopes[this.scopes.length - 1]!.set(name, { value: \"\", exported });\n }\n\n markReadonly(name: string): void {\n const found = this.find(name);\n if (found) found.entry.readonly = true;\n else this.scopes[this.scopes.length - 1]!.set(name, { value: \"\", readonly: true });\n }\n\n names(): string[] {\n const out = new Set<string>();\n for (const scope of this.scopes) for (const k of scope.keys()) out.add(k);\n return [...out].sort();\n }\n\n /** The environment handed to a child process. */\n environment(): Record<string, string> {\n const out: Record<string, string> = {};\n for (const scope of this.scopes) {\n for (const [name, entry] of scope) {\n if (entry.exported) out[name] = entry.array ? entry.array.join(\" \") : entry.value;\n }\n }\n return out;\n }\n\n /** Every variable with its attributes, for `declare -p` / `set`. */\n all(): Array<{ name: string; entry: VarEntry }> {\n const seen = new Map<string, VarEntry>();\n for (const scope of this.scopes) for (const [name, entry] of scope) seen.set(name, entry);\n return [...seen.entries()]\n .map(([name, entry]) => ({ name, entry }))\n .sort((a, b) => (a.name < b.name ? -1 : 1));\n }\n}\n","/**\n * Pattern matching: `fnmatch(3)` semantics for `case`/`find -name`, plus the\n * pathname expansion the shell performs on unquoted words.\n */\n\nimport type { Vfs, Cred } from \"./vfs.js\";\nimport * as P from \"./path.js\";\n\nexport interface MatchOptions {\n /** `*` and `?` stop at `/` (shell pathname expansion). */\n pathname?: boolean;\n /** Match leading dots with wildcards (shell `dotglob`). */\n dot?: boolean;\n /** Case-insensitive comparison. */\n nocase?: boolean;\n /** Enable ksh-style `?(a|b)`, `*(a|b)`, `+(...)`, `@(...)`, `!(...)`. */\n extglob?: boolean;\n}\n\nconst POSIX_CLASSES: Record<string, string> = {\n alpha: \"A-Za-z\",\n digit: \"0-9\",\n alnum: \"A-Za-z0-9\",\n upper: \"A-Z\",\n lower: \"a-z\",\n space: \" \\\\t\\\\n\\\\r\\\\f\\\\v\",\n blank: \" \\\\t\",\n punct: \"!-/:-@\\\\[-`{-~\",\n print: \" -~\",\n graph: \"!-~\",\n cntrl: \"\\\\x00-\\\\x1f\\\\x7f\",\n xdigit: \"0-9A-Fa-f\",\n word: \"A-Za-z0-9_\",\n};\n\nfunction escapeRe(ch: string): string {\n return /[.+^${}()|[\\]\\\\]/.test(ch) ? \"\\\\\" + ch : ch;\n}\n\n/**\n * Compile a glob to a RegExp source string.\n *\n * `**` is only special as a whole path segment; elsewhere it degrades to `*`,\n * matching bash's globstar rules.\n */\nexport function globToRegexSource(pattern: string, opts: MatchOptions = {}): string {\n const { pathname = true, dot = false, extglob = true } = opts;\n const anyChar = pathname ? \"[^/]\" : \"[\\\\s\\\\S]\";\n let out = \"\";\n let i = 0;\n // A leading dot is only matched by an explicit dot unless `dot` is set.\n let atSegmentStart = true;\n\n const guardDot = () => (!dot && atSegmentStart ? \"(?!\\\\.)\" : \"\");\n\n while (i < pattern.length) {\n const c = pattern[i]!;\n\n if (c === \"\\\\\" && i + 1 < pattern.length) {\n out += escapeRe(pattern[i + 1]!);\n i += 2;\n atSegmentStart = false;\n continue;\n }\n\n if (extglob && \"?*+@!\".includes(c) && pattern[i + 1] === \"(\") {\n const close = findClosingParen(pattern, i + 1);\n if (close > 0) {\n const inner = pattern.slice(i + 2, close);\n const alts = splitTopLevel(inner, \"|\").map((a) => globToRegexSource(a, { ...opts, dot: true }));\n const body = alts.join(\"|\");\n switch (c) {\n case \"?\":\n out += `(?:${body})?`;\n break;\n case \"*\":\n out += `(?:${body})*`;\n break;\n case \"+\":\n out += `(?:${body})+`;\n break;\n case \"@\":\n out += `(?:${body})`;\n break;\n case \"!\":\n out += `(?!(?:${body})$)${anyChar}*`;\n break;\n }\n i = close + 1;\n atSegmentStart = false;\n continue;\n }\n }\n\n if (c === \"*\") {\n const isGlobstar =\n pathname &&\n pattern[i + 1] === \"*\" &&\n (i === 0 || pattern[i - 1] === \"/\") &&\n (i + 2 === pattern.length || pattern[i + 2] === \"/\");\n if (isGlobstar) {\n if (i + 2 === pattern.length) out += \"(?:.*)?\";\n else out += \"(?:[^/]*(?:/[^/]*)*/)?\"; // consumes `**/`\n i += pattern[i + 2] === \"/\" ? 3 : 2;\n atSegmentStart = true;\n continue;\n }\n out += guardDot() + anyChar + \"*\";\n while (pattern[i] === \"*\") i++;\n atSegmentStart = false;\n continue;\n }\n\n if (c === \"?\") {\n out += guardDot() + anyChar;\n i++;\n atSegmentStart = false;\n continue;\n }\n\n if (c === \"[\") {\n const compiled = compileBracket(pattern, i);\n if (compiled) {\n out += guardDot() + compiled.source;\n i = compiled.next;\n atSegmentStart = false;\n continue;\n }\n out += \"\\\\[\";\n i++;\n atSegmentStart = false;\n continue;\n }\n\n out += escapeRe(c);\n atSegmentStart = c === \"/\";\n i++;\n }\n\n return out;\n}\n\nfunction findClosingParen(s: string, open: number): number {\n let depth = 0;\n for (let i = open; i < s.length; i++) {\n if (s[i] === \"\\\\\") {\n i++;\n continue;\n }\n if (s[i] === \"(\") depth++;\n else if (s[i] === \")\") {\n depth--;\n if (depth === 0) return i;\n }\n }\n return -1;\n}\n\nfunction splitTopLevel(s: string, sep: string): string[] {\n const out: string[] = [];\n let depth = 0;\n let cur = \"\";\n for (let i = 0; i < s.length; i++) {\n const c = s[i]!;\n if (c === \"\\\\\") {\n cur += c + (s[i + 1] ?? \"\");\n i++;\n continue;\n }\n if (c === \"(\") depth++;\n if (c === \")\") depth--;\n if (c === sep && depth === 0) {\n out.push(cur);\n cur = \"\";\n continue;\n }\n cur += c;\n }\n out.push(cur);\n return out;\n}\n\nfunction compileBracket(pattern: string, start: number): { source: string; next: number } | null {\n let i = start + 1;\n let negate = false;\n if (pattern[i] === \"!\" || pattern[i] === \"^\") {\n negate = true;\n i++;\n }\n let body = \"\";\n let first = true;\n while (i < pattern.length) {\n const c = pattern[i]!;\n if (c === \"]\" && !first) {\n const source = `[${negate ? \"^\" : \"\"}${body}]`;\n return { source, next: i + 1 };\n }\n first = false;\n if (c === \"[\" && pattern[i + 1] === \":\") {\n const end = pattern.indexOf(\":]\", i + 2);\n if (end > 0) {\n const name = pattern.slice(i + 2, end);\n const cls = POSIX_CLASSES[name];\n if (cls) {\n body += cls;\n i = end + 2;\n continue;\n }\n }\n }\n if (c === \"\\\\\" && i + 1 < pattern.length) {\n body += \"\\\\\" + pattern[i + 1];\n i += 2;\n continue;\n }\n if (c === \"]\" ) { body += \"\\\\]\"; i++; continue; }\n if (c === \"^\" ) { body += \"\\\\^\"; i++; continue; }\n if (c === \"-\" && pattern[i + 1] !== \"]\" && body !== \"\") {\n body += \"-\";\n i++;\n continue;\n }\n body += c.replace(/[\\\\\\]]/g, \"\\\\$&\");\n i++;\n }\n return null;\n}\n\nconst regexCache = new Map<string, RegExp>();\n\nexport function globToRegex(pattern: string, opts: MatchOptions = {}): RegExp {\n const key = `${pattern}\u0000${opts.pathname !== false}${opts.dot ? 1 : 0}${opts.nocase ? 1 : 0}${opts.extglob === false ? 0 : 1}`;\n let re = regexCache.get(key);\n if (!re) {\n re = new RegExp(`^${globToRegexSource(pattern, opts)}$`, opts.nocase ? \"i\" : \"\");\n if (regexCache.size > 2000) regexCache.clear();\n regexCache.set(key, re);\n }\n return re;\n}\n\n/** `fnmatch(3)`. */\nexport function fnmatch(pattern: string, str: string, opts: MatchOptions = {}): boolean {\n return globToRegex(pattern, opts).test(str);\n}\n\n/** True when the word contains an unescaped glob metacharacter. */\nexport function hasMagic(word: string, extglob = true): boolean {\n for (let i = 0; i < word.length; i++) {\n const c = word[i]!;\n if (c === \"\\\\\") {\n i++;\n continue;\n }\n if (c === \"*\" || c === \"?\" || c === \"[\") return true;\n if (extglob && \"?*+@!\".includes(c) && word[i + 1] === \"(\") return true;\n }\n return false;\n}\n\nexport interface GlobOptions extends MatchOptions {\n cwd?: string;\n cred?: Cred;\n /** Only return paths that are directories (trailing `/` in the pattern). */\n onlyDirs?: boolean;\n /** Cap on results, to keep a runaway `/**` from exhausting memory. */\n limit?: number;\n}\n\n/**\n * Pathname expansion against the container filesystem. Returns absolute paths\n * when the pattern is absolute, otherwise paths relative to `cwd` — matching\n * how the shell substitutes the results back into the command line.\n */\nexport function glob(vfs: Vfs, pattern: string, opts: GlobOptions = {}): string[] {\n const { cwd = \"/\", cred, limit = 100_000 } = opts;\n const absolute = P.isAbsolute(pattern);\n const onlyDirs = opts.onlyDirs ?? pattern.endsWith(\"/\");\n const cleaned = pattern.replace(/\\/+$/, \"\") || \"/\";\n\n const parts = cleaned.split(\"/\").filter((s, idx) => s !== \"\" || idx === 0);\n const startDir = absolute ? \"/\" : P.clean(cwd);\n const segs = absolute ? parts.filter((s) => s !== \"\") : parts;\n\n let frontier: string[] = [startDir];\n const results: string[] = [];\n\n for (let depth = 0; depth < segs.length; depth++) {\n const seg = segs[depth]!;\n const isLast = depth === segs.length - 1;\n const next: string[] = [];\n\n if (seg === \"**\") {\n // Globstar: every descendant directory, including the current one.\n const seen = new Set<string>();\n for (const dir of frontier) {\n const stack = [dir];\n while (stack.length) {\n const d = stack.pop()!;\n if (seen.has(d)) continue;\n seen.add(d);\n next.push(d);\n let entries;\n try {\n entries = vfs.readdirWithTypes(d, cred);\n } catch {\n continue;\n }\n for (const e of entries) {\n if (!opts.dot && e.name.startsWith(\".\")) continue;\n if (e.kind === \"directory\") stack.push(P.join(d, e.name));\n else if (isLast) next.push(P.join(d, e.name));\n }\n }\n }\n frontier = next;\n continue;\n }\n\n if (!hasMagic(seg, opts.extglob !== false)) {\n const literal = unescapeGlob(seg);\n for (const dir of frontier) {\n const child = literal === \".\" ? dir : literal === \"..\" ? P.dirname(dir) : P.join(dir, literal);\n if (vfs.lexists(child)) next.push(child);\n }\n frontier = next;\n continue;\n }\n\n const re = globToRegex(seg, { ...opts, pathname: true });\n for (const dir of frontier) {\n let entries;\n try {\n entries = vfs.readdirWithTypes(dir, cred);\n } catch {\n continue;\n }\n for (const e of entries) {\n if (!opts.dot && e.name.startsWith(\".\") && !seg.startsWith(\".\")) continue;\n if (!re.test(e.name)) continue;\n if (!isLast && e.kind !== \"directory\") {\n // Intermediate segments must be traversable; follow symlinks to dirs.\n try {\n if (!vfs.stat(P.join(dir, e.name), { cred }).isDirectory()) continue;\n } catch {\n continue;\n }\n }\n next.push(P.join(dir, e.name));\n if (next.length > limit) break;\n }\n }\n frontier = next;\n }\n\n for (const p of frontier) {\n if (onlyDirs) {\n try {\n if (!vfs.stat(p, { cred }).isDirectory()) continue;\n } catch {\n continue;\n }\n }\n results.push(p);\n }\n\n const rendered = absolute ? results : results.map((p) => (p === startDir ? \".\" : P.relative(startDir, p)));\n return [...new Set(rendered)].sort();\n}\n\nfunction unescapeGlob(s: string): string {\n return s.replace(/\\\\(.)/g, \"$1\");\n}\n","/**\n * Arithmetic expansion — the `$(( ... ))` and `(( ... ))` evaluator.\n *\n * Implements the C-like operator set bash supports, including assignment,\n * pre/post increment, the ternary, comma, and `base#digits` literals. Values\n * are integers; division by zero is an error, as it is in bash.\n */\n\nexport interface ArithScope {\n get(name: string): string | undefined;\n set(name: string, value: string): void;\n}\n\nexport class ArithError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"ArithError\";\n }\n}\n\ntype TokenKind = \"num\" | \"name\" | \"op\" | \"eof\";\n\ninterface Tok {\n kind: TokenKind;\n value: string;\n num?: number;\n}\n\nconst MULTI_CHAR_OPS = [\n \"<<=\",\n \">>=\",\n \"**=\",\n \"&&\",\n \"||\",\n \"==\",\n \"!=\",\n \"<=\",\n \">=\",\n \"<<\",\n \">>\",\n \"++\",\n \"--\",\n \"+=\",\n \"-=\",\n \"*=\",\n \"/=\",\n \"%=\",\n \"&=\",\n \"|=\",\n \"^=\",\n \"**\",\n];\n\nfunction tokenize(src: string): Tok[] {\n const out: Tok[] = [];\n let i = 0;\n while (i < src.length) {\n const c = src[i]!;\n if (c === \" \" || c === \"\\t\" || c === \"\\n\" || c === \"\\r\") {\n i++;\n continue;\n }\n\n if (/[0-9]/.test(c)) {\n // 0x…, 0…, base#digits, or plain decimal.\n const rest = src.slice(i);\n const baseMatch = /^(\\d+)#([0-9a-zA-Z@_]+)/.exec(rest);\n if (baseMatch) {\n const base = Number(baseMatch[1]);\n if (base < 2 || base > 64) throw new ArithError(`invalid arithmetic base (error token is \"${baseMatch[1]}\")`);\n out.push({ kind: \"num\", value: baseMatch[0]!, num: parseInBase(baseMatch[2]!, base) });\n i += baseMatch[0]!.length;\n continue;\n }\n const hex = /^0[xX][0-9a-fA-F]+/.exec(rest);\n if (hex) {\n out.push({ kind: \"num\", value: hex[0], num: parseInt(hex[0], 16) });\n i += hex[0].length;\n continue;\n }\n const oct = /^0[0-7]+/.exec(rest);\n if (oct) {\n out.push({ kind: \"num\", value: oct[0], num: parseInt(oct[0], 8) });\n i += oct[0].length;\n continue;\n }\n const dec = /^\\d+/.exec(rest)!;\n out.push({ kind: \"num\", value: dec[0], num: Number(dec[0]) });\n i += dec[0].length;\n continue;\n }\n\n if (/[A-Za-z_]/.test(c)) {\n const m = /^[A-Za-z_][A-Za-z0-9_]*/.exec(src.slice(i))!;\n out.push({ kind: \"name\", value: m[0] });\n i += m[0].length;\n continue;\n }\n\n if (c === \"$\") {\n // `$x` inside arithmetic is the same as `x`; the expander usually strips\n // these first, but tolerate them.\n i++;\n continue;\n }\n\n const multi = MULTI_CHAR_OPS.find((op) => src.startsWith(op, i));\n if (multi) {\n out.push({ kind: \"op\", value: multi });\n i += multi.length;\n continue;\n }\n\n if (\"+-*/%&|^~!<>()?:,=\".includes(c)) {\n out.push({ kind: \"op\", value: c });\n i++;\n continue;\n }\n\n throw new ArithError(`syntax error: invalid arithmetic operator (error token is \"${src.slice(i)}\")`);\n }\n out.push({ kind: \"eof\", value: \"\" });\n return out;\n}\n\nconst DIGITS = \"0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ@_\";\n\nfunction parseInBase(text: string, base: number): number {\n let value = 0;\n for (const ch of text) {\n let digit: number;\n if (base <= 36) {\n digit = DIGITS.toLowerCase().indexOf(ch.toLowerCase());\n } else {\n digit = DIGITS.indexOf(ch);\n }\n if (digit < 0 || digit >= base) throw new ArithError(`value too great for base (error token is \"${text}\")`);\n value = value * base + digit;\n }\n return value;\n}\n\nclass ArithParser {\n private i = 0;\n\n constructor(\n private readonly toks: Tok[],\n private readonly scope: ArithScope,\n ) {}\n\n private peek(): Tok {\n return this.toks[this.i]!;\n }\n\n private at(op: string): boolean {\n const t = this.peek();\n return t.kind === \"op\" && t.value === op;\n }\n\n private eat(op: string): boolean {\n if (this.at(op)) {\n this.i++;\n return true;\n }\n return false;\n }\n\n private expect(op: string): void {\n if (!this.eat(op)) throw new ArithError(`syntax error: expected \\`${op}'`);\n }\n\n private readVar(name: string): number {\n const raw = this.scope.get(name);\n if (raw === undefined || raw.trim() === \"\") return 0;\n // A variable holding an expression is evaluated recursively, like bash.\n if (/^-?\\d+$/.test(raw.trim())) return Number(raw.trim());\n return evalArith(raw, this.scope);\n }\n\n private writeVar(name: string, value: number): number {\n this.scope.set(name, String(value));\n return value;\n }\n\n parse(): number {\n if (this.peek().kind === \"eof\") return 0;\n const value = this.comma();\n if (this.peek().kind !== \"eof\") {\n throw new ArithError(`syntax error near \\`${this.peek().value}'`);\n }\n return value;\n }\n\n private comma(): number {\n let value = this.assignment();\n while (this.eat(\",\")) value = this.assignment();\n return value;\n }\n\n private assignment(): number {\n const start = this.i;\n const t = this.peek();\n if (t.kind === \"name\") {\n const next = this.toks[this.i + 1];\n const assignOps = [\"=\", \"+=\", \"-=\", \"*=\", \"/=\", \"%=\", \"<<=\", \">>=\", \"&=\", \"^=\", \"|=\", \"**=\"];\n if (next?.kind === \"op\" && assignOps.includes(next.value)) {\n this.i += 2;\n const rhs = this.assignment();\n const current = this.readVar(t.value);\n let result: number;\n switch (next.value) {\n case \"=\":\n result = rhs;\n break;\n case \"+=\":\n result = current + rhs;\n break;\n case \"-=\":\n result = current - rhs;\n break;\n case \"*=\":\n result = current * rhs;\n break;\n case \"/=\":\n result = this.divide(current, rhs);\n break;\n case \"%=\":\n result = this.modulo(current, rhs);\n break;\n case \"<<=\":\n result = current << rhs;\n break;\n case \">>=\":\n result = current >> rhs;\n break;\n case \"&=\":\n result = current & rhs;\n break;\n case \"^=\":\n result = current ^ rhs;\n break;\n case \"|=\":\n result = current | rhs;\n break;\n default:\n result = Math.pow(current, rhs);\n }\n return this.writeVar(t.value, Math.trunc(result));\n }\n }\n this.i = start;\n return this.ternary();\n }\n\n private ternary(): number {\n const cond = this.logicalOr();\n if (this.eat(\"?\")) {\n const whenTrue = this.assignment();\n this.expect(\":\");\n const whenFalse = this.assignment();\n return cond !== 0 ? whenTrue : whenFalse;\n }\n return cond;\n }\n\n private logicalOr(): number {\n let left = this.logicalAnd();\n while (this.eat(\"||\")) {\n const right = this.logicalAnd();\n left = left !== 0 || right !== 0 ? 1 : 0;\n }\n return left;\n }\n\n private logicalAnd(): number {\n let left = this.bitOr();\n while (this.eat(\"&&\")) {\n const right = this.bitOr();\n left = left !== 0 && right !== 0 ? 1 : 0;\n }\n return left;\n }\n\n private bitOr(): number {\n let left = this.bitXor();\n while (this.at(\"|\") && !this.at(\"||\")) {\n this.i++;\n left |= this.bitXor();\n }\n return left;\n }\n\n private bitXor(): number {\n let left = this.bitAnd();\n while (this.eat(\"^\")) left ^= this.bitAnd();\n return left;\n }\n\n private bitAnd(): number {\n let left = this.equality();\n while (this.at(\"&\") && !this.at(\"&&\")) {\n this.i++;\n left &= this.equality();\n }\n return left;\n }\n\n private equality(): number {\n let left = this.relational();\n for (;;) {\n if (this.eat(\"==\")) left = left === this.relational() ? 1 : 0;\n else if (this.eat(\"!=\")) left = left !== this.relational() ? 1 : 0;\n else return left;\n }\n }\n\n private relational(): number {\n let left = this.shift();\n for (;;) {\n if (this.eat(\"<=\")) left = left <= this.shift() ? 1 : 0;\n else if (this.eat(\">=\")) left = left >= this.shift() ? 1 : 0;\n else if (this.eat(\"<\")) left = left < this.shift() ? 1 : 0;\n else if (this.eat(\">\")) left = left > this.shift() ? 1 : 0;\n else return left;\n }\n }\n\n private shift(): number {\n let left = this.additive();\n for (;;) {\n if (this.eat(\"<<\")) left = left << this.additive();\n else if (this.eat(\">>\")) left = left >> this.additive();\n else return left;\n }\n }\n\n private additive(): number {\n let left = this.multiplicative();\n for (;;) {\n if (this.eat(\"+\")) left += this.multiplicative();\n else if (this.eat(\"-\")) left -= this.multiplicative();\n else return left;\n }\n }\n\n private multiplicative(): number {\n let left = this.power();\n for (;;) {\n if (this.eat(\"*\")) left *= this.power();\n else if (this.eat(\"/\")) left = this.divide(left, this.power());\n else if (this.eat(\"%\")) left = this.modulo(left, this.power());\n else return Math.trunc(left);\n }\n }\n\n private power(): number {\n const base = this.unary();\n if (this.eat(\"**\")) {\n const exp = this.power(); // right-associative\n return Math.trunc(Math.pow(base, exp));\n }\n return base;\n }\n\n private unary(): number {\n if (this.eat(\"+\")) return this.unary();\n if (this.eat(\"-\")) return -this.unary();\n if (this.eat(\"!\")) return this.unary() === 0 ? 1 : 0;\n if (this.eat(\"~\")) return ~this.unary();\n if (this.at(\"++\") || this.at(\"--\")) {\n const op = this.peek().value;\n this.i++;\n const t = this.peek();\n if (t.kind !== \"name\") throw new ArithError(\"syntax error: operand expected\");\n this.i++;\n const value = this.readVar(t.value) + (op === \"++\" ? 1 : -1);\n return this.writeVar(t.value, value);\n }\n return this.postfix();\n }\n\n private postfix(): number {\n const t = this.peek();\n if (t.kind === \"name\") {\n const next = this.toks[this.i + 1];\n if (next?.kind === \"op\" && (next.value === \"++\" || next.value === \"--\")) {\n this.i += 2;\n const old = this.readVar(t.value);\n this.writeVar(t.value, old + (next.value === \"++\" ? 1 : -1));\n return old;\n }\n }\n return this.primary();\n }\n\n private primary(): number {\n const t = this.peek();\n if (t.kind === \"num\") {\n this.i++;\n return t.num!;\n }\n if (t.kind === \"name\") {\n this.i++;\n return this.readVar(t.value);\n }\n if (this.eat(\"(\")) {\n const value = this.comma();\n this.expect(\")\");\n return value;\n }\n throw new ArithError(`syntax error: operand expected (error token is \"${t.value}\")`);\n }\n\n private divide(a: number, b: number): number {\n if (b === 0) throw new ArithError(\"division by 0\");\n return Math.trunc(a / b);\n }\n\n private modulo(a: number, b: number): number {\n if (b === 0) throw new ArithError(\"division by 0\");\n return a % b;\n }\n}\n\nexport function evalArith(expression: string, scope: ArithScope): number {\n const value = new ArithParser(tokenize(expression), scope).parse();\n return Number.isFinite(value) ? Math.trunc(value) : 0;\n}\n","/**\n * Word expansion, in the order POSIX specifies:\n *\n * brace → tilde → parameter/command/arithmetic → field splitting →\n * pathname → quote removal\n *\n * The tricky part is that only text produced by *unquoted* expansions may be\n * field-split, and only unquoted text may be globbed. Each fragment therefore\n * carries `split` and `glob` flags through the pipeline, and quote removal is\n * the last thing that happens.\n */\n\nimport type { Cred, Vfs } from \"../fs/vfs.js\";\nimport { glob, hasMagic, fnmatch } from \"../fs/glob.js\";\nimport * as P from \"../fs/path.js\";\nimport { evalArith, type ArithScope } from \"./arith.js\";\nimport type { Variables } from \"./variables.js\";\n\nexport interface ExpandContext {\n vars: Variables;\n /** `$1`, `$2`, … */\n positional: string[];\n /** `$0` */\n scriptName: string;\n /** `$?` */\n lastStatus: number;\n /** `$$` */\n shellPid: number;\n /** `$!` */\n lastBackgroundPid: number;\n /** `$-` */\n optionFlags: string;\n cwd: string;\n vfs: Vfs;\n cred: Cred;\n /** Home directory lookup for `~user`. */\n homeFor(user: string): string | undefined;\n /** Runs a command substitution and returns its stdout. */\n runSubstitution(command: string): Promise<string>;\n /** Materialises `<(cmd)` / `>(cmd)` as a path. Optional. */\n processSubstitution?(command: string, direction: \"in\" | \"out\"): Promise<string>;\n /** `set -u` */\n nounset?: boolean;\n /** `set -f` */\n noglob?: boolean;\n /** Extended globbing (`shopt -s extglob`). */\n extglob?: boolean;\n /** Include dotfiles in globs (`shopt -s dotglob`). */\n dotglob?: boolean;\n /** Leave an unmatched glob as-is (bash default) or drop it (`nullglob`). */\n nullglob?: boolean;\n /** Error out on an unmatched glob (`failglob`). */\n failglob?: boolean;\n}\n\nexport class ExpansionError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"ExpansionError\";\n }\n}\n\ninterface Fragment {\n text: string;\n /** Eligible for IFS field splitting. */\n split: boolean;\n /** Glob metacharacters in `text` are active. */\n glob: boolean;\n /**\n * Forces a field boundary after this fragment even though it is unsplittable.\n * This is what makes `\"$@\"` and `\"${arr[@]}\"` produce one field per element\n * while still protecting each element from splitting.\n */\n endsField?: boolean;\n}\n\nconst IFS_DEFAULT = \" \\t\\n\";\n\n// ── entry points ────────────────────────────────────────────────────────────\n\n/** Full expansion of a list of words, as used for command arguments. */\nexport async function expandWords(words: string[], ctx: ExpandContext): Promise<string[]> {\n const out: string[] = [];\n for (const word of words) {\n out.push(...(await expandWord(word, ctx)));\n }\n return out;\n}\n\n/** Expand one word into zero or more fields. */\nexport async function expandWord(word: string, ctx: ExpandContext): Promise<string[]> {\n const braced = braceExpand(word);\n const results: string[] = [];\n for (const candidate of braced) {\n const tilded = expandTilde(candidate, ctx);\n const fragments = await expandFragments(tilded, ctx);\n const fields = fieldSplit(fragments, ifsOf(ctx));\n for (const field of fields) {\n results.push(...(await pathnameExpand(field, ctx)));\n }\n }\n return results;\n}\n\n/**\n * Expand a word that must yield exactly one field — redirect targets,\n * `case` subjects, assignment right-hand sides.\n */\nexport async function expandWordToString(word: string, ctx: ExpandContext): Promise<string> {\n const braced = braceExpand(word);\n const first = braced[0] ?? word;\n const fragments = await expandFragments(expandTilde(first, ctx), ctx);\n return fragments.map((f) => f.text).join(\"\");\n}\n\n/**\n * Expand while *keeping* glob metacharacters live — used for `case` patterns\n * and the right-hand side of `==` inside `[[ ]]`.\n */\nexport async function expandPattern(word: string, ctx: ExpandContext): Promise<string> {\n const fragments = await expandFragments(word, ctx, { keepPatternQuotes: true });\n return fragments\n .map((f) => (f.glob ? f.text : escapeGlob(f.text)))\n .join(\"\");\n}\n\nfunction ifsOf(ctx: ExpandContext): string {\n const raw = ctx.vars.get(\"IFS\");\n return raw === undefined ? IFS_DEFAULT : raw;\n}\n\nfunction escapeGlob(text: string): string {\n return text.replace(/[*?[\\]\\\\]/g, \"\\\\$&\");\n}\n\n// ── brace expansion ─────────────────────────────────────────────────────────\n\n/** `a{b,c}d` → `abd acd`; `{1..5}` and `{a..e}` sequences too. */\nexport function braceExpand(word: string): string[] {\n const open = findUnquotedBrace(word);\n if (open < 0) return [word];\n\n const close = matchBrace(word, open);\n if (close < 0) return [word];\n\n const prefix = word.slice(0, open);\n const body = word.slice(open + 1, close);\n const suffix = word.slice(close + 1);\n\n const seq = expandSequence(body);\n const parts = seq ?? splitBraceAlternatives(body);\n if (!seq && parts.length < 2) {\n // A single alternative is not a brace expansion; keep the braces literal.\n const rest = braceExpand(suffix);\n return rest.map((r) => `${prefix}{${body}}${r}`);\n }\n\n const out: string[] = [];\n for (const part of parts) {\n for (const expandedPart of seq ? [part] : braceExpand(part)) {\n for (const tail of braceExpand(suffix)) {\n out.push(prefix + expandedPart + tail);\n }\n }\n }\n return out;\n}\n\nfunction findUnquotedBrace(word: string): number {\n let inSingle = false;\n let inDouble = false;\n for (let i = 0; i < word.length; i++) {\n const c = word[i]!;\n if (c === \"\\\\\") {\n i++;\n continue;\n }\n if (c === \"'\" && !inDouble) inSingle = !inSingle;\n else if (c === '\"' && !inSingle) inDouble = !inDouble;\n else if (c === \"{\" && !inSingle && !inDouble) {\n // `${...}` is parameter expansion, not a brace list.\n if (i > 0 && word[i - 1] === \"$\") continue;\n return i;\n }\n }\n return -1;\n}\n\nfunction matchBrace(word: string, open: number): number {\n let depth = 0;\n let inSingle = false;\n let inDouble = false;\n for (let i = open; i < word.length; i++) {\n const c = word[i]!;\n if (c === \"\\\\\") {\n i++;\n continue;\n }\n if (c === \"'\" && !inDouble) inSingle = !inSingle;\n else if (c === '\"' && !inSingle) inDouble = !inDouble;\n else if (!inSingle && !inDouble) {\n if (c === \"{\") depth++;\n else if (c === \"}\") {\n depth--;\n if (depth === 0) return i;\n }\n }\n }\n return -1;\n}\n\nfunction splitBraceAlternatives(body: string): string[] {\n const out: string[] = [];\n let depth = 0;\n let current = \"\";\n let inSingle = false;\n let inDouble = false;\n for (let i = 0; i < body.length; i++) {\n const c = body[i]!;\n if (c === \"\\\\\") {\n current += c + (body[i + 1] ?? \"\");\n i++;\n continue;\n }\n if (c === \"'\" && !inDouble) inSingle = !inSingle;\n if (c === '\"' && !inSingle) inDouble = !inDouble;\n if (!inSingle && !inDouble) {\n if (c === \"{\") depth++;\n else if (c === \"}\") depth--;\n else if (c === \",\" && depth === 0) {\n out.push(current);\n current = \"\";\n continue;\n }\n }\n current += c;\n }\n out.push(current);\n return out;\n}\n\nfunction expandSequence(body: string): string[] | null {\n const numeric = /^(-?\\d+)\\.\\.(-?\\d+)(?:\\.\\.(-?\\d+))?$/.exec(body);\n if (numeric) {\n const start = Number(numeric[1]);\n const end = Number(numeric[2]);\n let step = numeric[3] !== undefined ? Math.abs(Number(numeric[3])) : 1;\n if (step === 0) step = 1;\n // Preserve zero padding when either endpoint is padded.\n const width = Math.max(\n /^-?0\\d/.test(numeric[1]!) ? numeric[1]!.replace(\"-\", \"\").length : 0,\n /^-?0\\d/.test(numeric[2]!) ? numeric[2]!.replace(\"-\", \"\").length : 0,\n );\n const out: string[] = [];\n if (start <= end) for (let i = start; i <= end; i += step) out.push(padNumber(i, width));\n else for (let i = start; i >= end; i -= step) out.push(padNumber(i, width));\n return out;\n }\n\n const alpha = /^([A-Za-z])\\.\\.([A-Za-z])(?:\\.\\.(-?\\d+))?$/.exec(body);\n if (alpha) {\n const start = alpha[1]!.charCodeAt(0);\n const end = alpha[2]!.charCodeAt(0);\n const step = alpha[3] !== undefined ? Math.abs(Number(alpha[3])) || 1 : 1;\n const out: string[] = [];\n if (start <= end) for (let i = start; i <= end; i += step) out.push(String.fromCharCode(i));\n else for (let i = start; i >= end; i -= step) out.push(String.fromCharCode(i));\n return out;\n }\n\n return null;\n}\n\nfunction padNumber(value: number, width: number): string {\n if (width === 0) return String(value);\n const negative = value < 0;\n const digits = String(Math.abs(value)).padStart(negative ? width - 1 : width, \"0\");\n return (negative ? \"-\" : \"\") + digits;\n}\n\n// ── tilde expansion ─────────────────────────────────────────────────────────\n\nexport function expandTilde(word: string, ctx: ExpandContext): string {\n if (!word.startsWith(\"~\")) return word;\n const slash = word.indexOf(\"/\");\n const spec = slash < 0 ? word.slice(1) : word.slice(1, slash);\n const rest = slash < 0 ? \"\" : word.slice(slash);\n\n if (spec === \"\") {\n const home = ctx.vars.get(\"HOME\") ?? ctx.homeFor(\"root\") ?? \"/root\";\n return home + rest;\n }\n if (spec === \"+\") return (ctx.vars.get(\"PWD\") ?? ctx.cwd) + rest;\n if (spec === \"-\") return (ctx.vars.get(\"OLDPWD\") ?? ctx.cwd) + rest;\n if (/^['\"\\\\$]/.test(spec)) return word;\n\n const home = ctx.homeFor(spec);\n return home === undefined ? word : home + rest;\n}\n\n// ── parameter / command / arithmetic expansion ──────────────────────────────\n\ninterface FragmentOptions {\n keepPatternQuotes?: boolean;\n}\n\nasync function expandFragments(\n word: string,\n ctx: ExpandContext,\n opts: FragmentOptions = {},\n): Promise<Fragment[]> {\n const out: Fragment[] = [];\n let i = 0;\n let literal = \"\";\n let literalGlob = true;\n\n const flushLiteral = () => {\n if (literal !== \"\") {\n out.push({ text: literal, split: false, glob: literalGlob });\n literal = \"\";\n literalGlob = true;\n }\n };\n\n const pushLiteral = (text: string, globActive: boolean) => {\n if (globActive !== literalGlob) {\n flushLiteral();\n literalGlob = globActive;\n }\n literal += text;\n };\n\n while (i < word.length) {\n const c = word[i]!;\n\n if (c === \"\\\\\") {\n const next = word[i + 1];\n if (next === undefined) {\n pushLiteral(\"\\\\\", false);\n i++;\n continue;\n }\n pushLiteral(next, false);\n i += 2;\n continue;\n }\n\n if (c === \"'\") {\n const end = word.indexOf(\"'\", i + 1);\n const body = end < 0 ? word.slice(i + 1) : word.slice(i + 1, end);\n pushLiteral(body, false);\n i = end < 0 ? word.length : end + 1;\n continue;\n }\n\n if (c === '\"') {\n const { fragments, next } = await expandDoubleQuoted(word, i + 1, ctx, opts);\n flushLiteral();\n out.push(...fragments);\n i = next;\n continue;\n }\n\n if (c === \"$\") {\n const result = await expandDollar(word, i, ctx, false);\n if (result) {\n flushLiteral();\n out.push(...result.fragments);\n i = result.next;\n continue;\n }\n pushLiteral(\"$\", false);\n i++;\n continue;\n }\n\n if (c === \"`\") {\n const end = findBacktick(word, i);\n const command = unescapeBacktick(word.slice(i + 1, end));\n const output = stripTrailingNewlines(await ctx.runSubstitution(command));\n flushLiteral();\n out.push({ text: output, split: true, glob: true });\n i = end + 1;\n continue;\n }\n\n if ((c === \"<\" || c === \">\") && word[i + 1] === \"(\" && ctx.processSubstitution) {\n const end = matchParen(word, i + 1);\n if (end > 0) {\n const command = word.slice(i + 2, end);\n const path = await ctx.processSubstitution(command, c === \"<\" ? \"in\" : \"out\");\n flushLiteral();\n out.push({ text: path, split: false, glob: false });\n i = end + 1;\n continue;\n }\n }\n\n pushLiteral(c, true);\n i++;\n }\n\n flushLiteral();\n return out;\n}\n\nasync function expandDoubleQuoted(\n word: string,\n start: number,\n ctx: ExpandContext,\n opts: FragmentOptions,\n): Promise<{ fragments: Fragment[]; next: number }> {\n const out: Fragment[] = [];\n let literal = \"\";\n let i = start;\n\n const flush = () => {\n if (literal !== \"\") {\n out.push({ text: literal, split: false, glob: false });\n literal = \"\";\n }\n };\n\n while (i < word.length) {\n const c = word[i]!;\n if (c === \"\\\\\") {\n const next = word[i + 1];\n if (next !== undefined && '$`\"\\\\\\n'.includes(next)) {\n if (next !== \"\\n\") literal += next;\n i += 2;\n continue;\n }\n literal += c;\n i++;\n continue;\n }\n if (c === '\"') {\n i++;\n break;\n }\n if (c === \"$\") {\n const result = await expandDollar(word, i, ctx, true);\n if (result) {\n flush();\n // Inside quotes, `\"$@\"` still yields multiple fields; everything else\n // is a single unsplit fragment.\n out.push(...result.fragments.map((f) => ({ ...f, glob: false })));\n i = result.next;\n continue;\n }\n literal += \"$\";\n i++;\n continue;\n }\n if (c === \"`\") {\n const end = findBacktick(word, i);\n const command = unescapeBacktick(word.slice(i + 1, end));\n literal += stripTrailingNewlines(await ctx.runSubstitution(command));\n i = end + 1;\n continue;\n }\n literal += c;\n i++;\n }\n\n flush();\n if (out.length === 0) out.push({ text: \"\", split: false, glob: false });\n void opts;\n return { fragments: out, next: i };\n}\n\ninterface DollarResult {\n fragments: Fragment[];\n next: number;\n}\n\nasync function expandDollar(\n word: string,\n at: number,\n ctx: ExpandContext,\n quoted: boolean,\n): Promise<DollarResult | null> {\n const rest = word.slice(at);\n\n // $((expr))\n if (rest.startsWith(\"$((\")) {\n const end = matchDoubleParen(word, at + 1);\n if (end > 0) {\n const expr = word.slice(at + 3, end - 1);\n const expanded = await expandWordToString(expr, ctx);\n const value = evalArith(expanded, arithScope(ctx));\n return { fragments: [{ text: String(value), split: !quoted, glob: false }], next: end + 1 };\n }\n }\n\n // $(command)\n if (rest.startsWith(\"$(\")) {\n const end = matchParen(word, at + 1);\n if (end > 0) {\n const command = word.slice(at + 2, end);\n const output = stripTrailingNewlines(await ctx.runSubstitution(command));\n return { fragments: [{ text: output, split: !quoted, glob: !quoted }], next: end + 1 };\n }\n }\n\n // ${...}\n if (rest.startsWith(\"${\")) {\n const end = matchBrace(word, at + 1);\n if (end > 0) {\n const body = word.slice(at + 2, end);\n const fragments = await expandBracedParameter(body, ctx, quoted);\n return { fragments, next: end + 1 };\n }\n }\n\n // $name / $1 / $? / $$ / $! / $# / $@ / $* / $-\n const simple = /^\\$([A-Za-z_][A-Za-z0-9_]*|[0-9]|[?$!#@*\\-_])/.exec(rest);\n if (simple) {\n const name = simple[1]!;\n const fragments = await valueFragments(name, ctx, quoted);\n return { fragments, next: at + simple[0].length };\n }\n\n return null;\n}\n\nfunction arithScope(ctx: ExpandContext): ArithScope {\n return {\n get: (name) => ctx.vars.get(name),\n set: (name, value) => ctx.vars.set(name, value),\n };\n}\n\nasync function valueFragments(name: string, ctx: ExpandContext, quoted: boolean): Promise<Fragment[]> {\n if (name === \"@\" || name === \"*\") {\n const items = ctx.positional;\n if (name === \"@\" && quoted) {\n // \"$@\" expands to one field per positional parameter.\n if (items.length === 0) return [];\n return items.map((v, i) => ({ text: v, split: false, glob: false, endsField: i < items.length - 1 }));\n }\n if (name === \"*\" && quoted) {\n const sep = (ctx.vars.get(\"IFS\") ?? IFS_DEFAULT)[0] ?? \"\";\n return [{ text: items.join(sep), split: false, glob: false }];\n }\n return items.map((v) => ({ text: v, split: true, glob: true }));\n }\n\n const value = lookupScalar(name, ctx);\n if (value === undefined) {\n if (ctx.nounset && !/^[0-9]$/.test(name)) throw new ExpansionError(`${name}: unbound variable`);\n return [{ text: \"\", split: false, glob: false }];\n }\n return [{ text: value, split: !quoted, glob: !quoted }];\n}\n\nfunction lookupScalar(name: string, ctx: ExpandContext): string | undefined {\n switch (name) {\n case \"?\":\n return String(ctx.lastStatus);\n case \"$\":\n return String(ctx.shellPid);\n case \"!\":\n return String(ctx.lastBackgroundPid);\n case \"#\":\n return String(ctx.positional.length);\n case \"-\":\n return ctx.optionFlags;\n case \"0\":\n return ctx.scriptName;\n case \"_\":\n return ctx.vars.get(\"_\") ?? \"\";\n default:\n break;\n }\n if (/^[0-9]+$/.test(name)) return ctx.positional[Number(name) - 1];\n return ctx.vars.get(name);\n}\n\n/** `${ ... }` in all its forms. */\nasync function expandBracedParameter(body: string, ctx: ExpandContext, quoted: boolean): Promise<Fragment[]> {\n // ${#name} / ${#@} / ${#arr[@]}\n if (body.startsWith(\"#\") && body.length > 1) {\n const target = body.slice(1);\n if (target === \"@\" || target === \"*\") return [frag(String(ctx.positional.length), quoted)];\n const arrayMatch = /^([A-Za-z_][A-Za-z0-9_]*)\\[[@*]\\]$/.exec(target);\n if (arrayMatch) {\n return [frag(String(ctx.vars.getArray(arrayMatch[1]!)?.length ?? 0), quoted)];\n }\n const value = lookupScalar(target, ctx) ?? \"\";\n return [frag(String([...value].length), quoted)];\n }\n\n // ${!name} indirect, ${!prefix*} name listing, ${!arr[@]} indices\n if (body.startsWith(\"!\") && body.length > 1) {\n const target = body.slice(1);\n if (target.endsWith(\"*\") || target.endsWith(\"@\")) {\n const prefix = target.slice(0, -1);\n const arrayIdx = /^([A-Za-z_][A-Za-z0-9_]*)\\[$/.exec(prefix);\n if (arrayIdx) {\n const arr = ctx.vars.getArray(arrayIdx[1]!) ?? [];\n return arr.map((_, idx) => frag(String(idx), quoted));\n }\n const names = ctx.vars.names().filter((n) => n.startsWith(prefix));\n return names.map((n) => frag(n, quoted));\n }\n const indirectName = lookupScalar(target, ctx);\n if (indirectName === undefined || indirectName === \"\") return [frag(\"\", quoted)];\n return valueFragments(indirectName, ctx, quoted);\n }\n\n // ${arr[@]} / ${arr[*]} / ${arr[i]}\n const indexed = /^([A-Za-z_][A-Za-z0-9_]*)\\[([^\\]]*)\\](.*)$/.exec(body);\n if (indexed && indexed[3] === \"\") {\n const arr = ctx.vars.getArray(indexed[1]!) ?? [];\n const idx = indexed[2]!;\n if (idx === \"@\") {\n if (quoted) {\n return arr.map((v, i) => ({ text: v, split: false, glob: false, endsField: i < arr.length - 1 }));\n }\n return arr.map((v) => ({ text: v, split: true, glob: true }));\n }\n if (idx === \"*\") {\n const sep = (ctx.vars.get(\"IFS\") ?? IFS_DEFAULT)[0] ?? \"\";\n return [frag(arr.join(sep), quoted)];\n }\n const n = evalArith(idx, arithScope(ctx));\n return [frag(arr[n < 0 ? arr.length + n : n] ?? \"\", quoted)];\n }\n\n // ${name<op>word}\n const opMatch = /^([A-Za-z_][A-Za-z0-9_]*|[0-9]+|[@*?$!#\\-])(.*)$/s.exec(body);\n if (!opMatch) return [frag(\"\", quoted)];\n const name = opMatch[1]!;\n const rest = opMatch[2]!;\n\n if (rest === \"\") return valueFragments(name, ctx, quoted);\n\n const current = name === \"@\" || name === \"*\" ? ctx.positional.join(\" \") : lookupScalar(name, ctx);\n\n // ${name:-word} ${name:=word} ${name:?word} ${name:+word} (and colon-less forms)\n const defaults = /^(:?)([-=?+])([\\s\\S]*)$/.exec(rest);\n if (defaults) {\n const colon = defaults[1] === \":\";\n const op = defaults[2]!;\n const wordText = defaults[3]!;\n const unset = current === undefined || (colon && current === \"\");\n switch (op) {\n case \"-\":\n if (unset) return await expandFragments(wordText, ctx);\n return valueFragments(name, ctx, quoted);\n case \"=\": {\n if (unset) {\n const value = await expandWordToString(wordText, ctx);\n ctx.vars.set(name, value);\n return [frag(value, quoted)];\n }\n return valueFragments(name, ctx, quoted);\n }\n case \"?\": {\n if (unset) {\n const message = wordText === \"\" ? \"parameter null or not set\" : await expandWordToString(wordText, ctx);\n throw new ExpansionError(`${name}: ${message}`);\n }\n return valueFragments(name, ctx, quoted);\n }\n default: {\n if (!unset) return await expandFragments(wordText, ctx);\n return [frag(\"\", quoted)];\n }\n }\n }\n\n // ${name:offset:length}\n if (rest.startsWith(\":\")) {\n const spec = rest.slice(1);\n const parts = splitOnUnquotedColon(spec);\n const value = current ?? \"\";\n const chars = [...value];\n let offset = Math.trunc(evalArith(parts[0] || \"0\", arithScope(ctx)));\n if (offset < 0) offset = Math.max(0, chars.length + offset);\n let length = parts.length > 1 ? Math.trunc(evalArith(parts[1] || \"0\", arithScope(ctx))) : chars.length - offset;\n if (length < 0) length = Math.max(0, chars.length + length - offset);\n return [frag(chars.slice(offset, offset + length).join(\"\"), quoted)];\n }\n\n // ${name#pat} ${name##pat} ${name%pat} ${name%%pat}\n const strip = /^(#{1,2}|%{1,2})([\\s\\S]*)$/.exec(rest);\n if (strip) {\n const op = strip[1]!;\n const pattern = await expandPattern(strip[2]!, ctx);\n const apply = (value: string) => stripAffix(value, pattern, op, ctx);\n if ((name === \"@\" || name === \"*\") && quoted) {\n return ctx.positional.map((v, i) => ({ text: apply(v), split: false, glob: false, endsField: i < ctx.positional.length - 1 }));\n }\n return [frag(apply(current ?? \"\"), quoted)];\n }\n\n // ${name/pat/rep} ${name//pat/rep} ${name/#pat/rep} ${name/%pat/rep}\n if (rest.startsWith(\"/\")) {\n const spec = rest.slice(1);\n const all = spec.startsWith(\"/\");\n const anchorStart = spec.startsWith(\"#\");\n const anchorEnd = spec.startsWith(\"%\");\n const inner = all || anchorStart || anchorEnd ? spec.slice(1) : spec;\n const sep = findUnescaped(inner, \"/\");\n const patternRaw = sep < 0 ? inner : inner.slice(0, sep);\n const replacementRaw = sep < 0 ? \"\" : inner.slice(sep + 1);\n const pattern = await expandPattern(patternRaw, ctx);\n const replacement = await expandWordToString(replacementRaw, ctx);\n const apply = (value: string) =>\n substitute(value, pattern, replacement, { all, anchorStart, anchorEnd, extglob: ctx.extglob !== false });\n if ((name === \"@\" || name === \"*\") && quoted) {\n return ctx.positional.map((v, i) => ({ text: apply(v), split: false, glob: false, endsField: i < ctx.positional.length - 1 }));\n }\n return [frag(apply(current ?? \"\"), quoted)];\n }\n\n // ${name^} ${name^^} ${name,} ${name,,}\n const caseOp = /^(\\^{1,2}|,{1,2})([\\s\\S]*)$/.exec(rest);\n if (caseOp) {\n const op = caseOp[1]!;\n const value = current ?? \"\";\n const upper = op.startsWith(\"^\");\n const all = op.length === 2;\n const transformed = all\n ? upper\n ? value.toUpperCase()\n : value.toLowerCase()\n : value.length === 0\n ? value\n : (upper ? value[0]!.toUpperCase() : value[0]!.toLowerCase()) + value.slice(1);\n return [frag(transformed, quoted)];\n }\n\n // ${name@Q} and friends\n const transform = /^@([QEPAaULK])$/.exec(rest);\n if (transform) {\n const value = current ?? \"\";\n switch (transform[1]) {\n case \"Q\":\n return [frag(shellQuote(value), quoted)];\n case \"U\":\n return [frag(value.toUpperCase(), quoted)];\n case \"L\":\n return [frag(value.toLowerCase(), quoted)];\n case \"E\":\n return [frag(value.replace(/\\\\n/g, \"\\n\").replace(/\\\\t/g, \"\\t\"), quoted)];\n default:\n return [frag(value, quoted)];\n }\n }\n\n return valueFragments(name, ctx, quoted);\n}\n\nfunction frag(text: string, quoted: boolean): Fragment {\n return { text, split: !quoted, glob: false };\n}\n\nfunction stripAffix(value: string, pattern: string, op: string, ctx: ExpandContext): string {\n const opts = { pathname: false, dot: true, extglob: ctx.extglob !== false };\n const chars = [...value];\n if (op === \"#\" || op === \"##\") {\n const range = op === \"#\" ? [...chars.keys()].map((i) => i + 1) : [...chars.keys()].map((i) => chars.length - i);\n for (const len of range) {\n if (fnmatch(pattern, chars.slice(0, len).join(\"\"), opts)) return chars.slice(len).join(\"\");\n }\n if (fnmatch(pattern, \"\", opts)) return value;\n return value;\n }\n const range = op === \"%\" ? [...chars.keys()].map((i) => i + 1) : [...chars.keys()].map((i) => chars.length - i);\n for (const len of range) {\n if (fnmatch(pattern, chars.slice(chars.length - len).join(\"\"), opts)) return chars.slice(0, chars.length - len).join(\"\");\n }\n return value;\n}\n\nfunction substitute(\n value: string,\n pattern: string,\n replacement: string,\n opts: { all: boolean; anchorStart: boolean; anchorEnd: boolean; extglob: boolean },\n): string {\n const matchOpts = { pathname: false, dot: true, extglob: opts.extglob };\n const chars = [...value];\n\n const matchAt = (start: number): number => {\n // Longest match wins, as in bash.\n for (let end = chars.length; end >= start; end--) {\n if (fnmatch(pattern, chars.slice(start, end).join(\"\"), matchOpts)) return end;\n }\n return -1;\n };\n\n if (opts.anchorStart) {\n const end = matchAt(0);\n return end < 0 ? value : replacement + chars.slice(end).join(\"\");\n }\n if (opts.anchorEnd) {\n for (let start = 0; start <= chars.length; start++) {\n if (fnmatch(pattern, chars.slice(start).join(\"\"), matchOpts)) {\n return chars.slice(0, start).join(\"\") + replacement;\n }\n }\n return value;\n }\n\n let out = \"\";\n let i = 0;\n let replaced = false;\n while (i <= chars.length) {\n if (replaced && !opts.all) {\n out += chars.slice(i).join(\"\");\n return out;\n }\n const end = matchAt(i);\n if (end > i) {\n out += replacement;\n i = end;\n replaced = true;\n continue;\n }\n if (end === i && !replaced) {\n // An empty match: emit the replacement once and advance to avoid looping.\n out += replacement;\n replaced = true;\n if (!opts.all) {\n out += chars.slice(i).join(\"\");\n return out;\n }\n }\n if (i < chars.length) out += chars[i];\n i++;\n }\n return out;\n}\n\nexport function shellQuote(value: string): string {\n if (value === \"\") return \"''\";\n if (/^[A-Za-z0-9_@%+=:,./-]+$/.test(value)) return value;\n return \"'\" + value.replace(/'/g, `'\\\\''`) + \"'\";\n}\n\nfunction splitOnUnquotedColon(spec: string): string[] {\n const out: string[] = [];\n let depth = 0;\n let current = \"\";\n for (let i = 0; i < spec.length; i++) {\n const c = spec[i]!;\n if (c === \"\\\\\") {\n current += c + (spec[i + 1] ?? \"\");\n i++;\n continue;\n }\n if (c === \"(\" || c === \"[\") depth++;\n if (c === \")\" || c === \"]\") depth--;\n if (c === \":\" && depth === 0) {\n out.push(current);\n current = \"\";\n continue;\n }\n current += c;\n }\n out.push(current);\n return out;\n}\n\nfunction findUnescaped(text: string, ch: string): number {\n for (let i = 0; i < text.length; i++) {\n if (text[i] === \"\\\\\") {\n i++;\n continue;\n }\n if (text[i] === ch) return i;\n }\n return -1;\n}\n\nfunction matchParen(text: string, open: number): number {\n let depth = 0;\n for (let i = open; i < text.length; i++) {\n const c = text[i]!;\n if (c === \"\\\\\") {\n i++;\n continue;\n }\n if (c === \"'\") {\n const end = text.indexOf(\"'\", i + 1);\n if (end < 0) return -1;\n i = end;\n continue;\n }\n if (c === \"(\") depth++;\n else if (c === \")\") {\n depth--;\n if (depth === 0) return i;\n }\n }\n return -1;\n}\n\n/** `open` points at the first `(` of `((`; returns the index of the last `)`. */\nfunction matchDoubleParen(text: string, open: number): number {\n let depth = 0;\n for (let i = open; i < text.length; i++) {\n const c = text[i]!;\n if (c === \"\\\\\") {\n i++;\n continue;\n }\n if (c === \"(\") depth++;\n else if (c === \")\") {\n depth--;\n if (depth === 0) return i;\n }\n }\n return -1;\n}\n\nfunction findBacktick(text: string, from: number): number {\n for (let i = from + 1; i < text.length; i++) {\n if (text[i] === \"\\\\\") {\n i++;\n continue;\n }\n if (text[i] === \"`\") return i;\n }\n return text.length;\n}\n\nfunction unescapeBacktick(text: string): string {\n return text.replace(/\\\\([`$\\\\])/g, \"$1\");\n}\n\nfunction stripTrailingNewlines(text: string): string {\n return text.replace(/\\n+$/, \"\");\n}\n\n// ── field splitting ─────────────────────────────────────────────────────────\n\nfunction fieldSplit(fragments: Fragment[], ifs: string): Fragment[][] {\n if (fragments.length === 0) return [];\n if (ifs === \"\") return [fragments];\n\n const whitespace = [...ifs].filter((c) => \" \\t\\n\".includes(c));\n const others = [...ifs].filter((c) => !\" \\t\\n\".includes(c));\n\n const fields: Fragment[][] = [];\n let current: Fragment[] = [];\n let sawAnything = false;\n\n const endField = () => {\n fields.push(current);\n current = [];\n };\n\n for (const fragment of fragments) {\n if (!fragment.split) {\n current.push(fragment);\n sawAnything = true;\n // `\"$@\"` marks a boundary after each element but the last.\n if (fragment.endsField) endField();\n continue;\n }\n\n let buffer = \"\";\n let i = 0;\n const text = fragment.text;\n while (i < text.length) {\n const c = text[i]!;\n if (whitespace.includes(c) || others.includes(c)) {\n if (buffer !== \"\" || current.length > 0) {\n if (buffer !== \"\") current.push({ ...fragment, text: buffer });\n buffer = \"\";\n endField();\n sawAnything = true;\n }\n // Consume a run of IFS whitespace, plus at most one non-whitespace\n // delimiter, exactly as the standard describes.\n let consumedNonWs = others.includes(c);\n i++;\n while (i < text.length) {\n const d = text[i]!;\n if (whitespace.includes(d)) {\n i++;\n continue;\n }\n if (others.includes(d) && !consumedNonWs) {\n consumedNonWs = true;\n i++;\n continue;\n }\n break;\n }\n continue;\n }\n buffer += c;\n i++;\n }\n if (buffer !== \"\") {\n current.push({ ...fragment, text: buffer });\n sawAnything = true;\n }\n }\n\n if (current.length > 0 || (!sawAnything && fields.length === 0)) fields.push(current);\n return fields.filter((f, idx) => f.length > 0 || (idx === 0 && fields.length === 1 && fragments.some((x) => !x.split)));\n}\n\n// ── pathname expansion + quote removal ──────────────────────────────────────\n\nasync function pathnameExpand(field: Fragment[], ctx: ExpandContext): Promise<string[]> {\n const literal = field.map((f) => f.text).join(\"\");\n if (ctx.noglob) return [literal];\n\n const pattern = field.map((f) => (f.glob ? f.text : escapeGlob(f.text))).join(\"\");\n if (!hasMagic(pattern, ctx.extglob !== false)) return [literal];\n\n const matches = glob(ctx.vfs, pattern, {\n cwd: ctx.cwd,\n cred: ctx.cred,\n dot: ctx.dotglob ?? false,\n extglob: ctx.extglob !== false,\n });\n\n if (matches.length === 0) {\n if (ctx.failglob) throw new ExpansionError(`no match: ${literal}`);\n if (ctx.nullglob) return [];\n return [literal];\n }\n return matches;\n}\n\n/** Exposed for `[[ str == pat ]]`, which matches without globbing the fs. */\nexport function matchesPattern(value: string, pattern: string, extglob = true): boolean {\n return fnmatch(pattern, value, { pathname: false, dot: true, extglob });\n}\n\nexport { P as posixPath };\n","/**\n * `test` / `[` / the primaries inside `[[ ]]`.\n *\n * Returns a shell exit status: 0 for true, 1 for false, 2 for a usage error.\n */\n\nimport type { Shell } from \"./interpreter.js\";\nimport type { Stats } from \"../fs/stat.js\";\nimport { R_OK, W_OK, X_OK, S_ISGID, S_ISUID, S_ISVTX } from \"../fs/mode.js\";\nimport * as P from \"../fs/path.js\";\n\nconst UNARY_OPS = new Set([\n \"-a\", \"-b\", \"-c\", \"-d\", \"-e\", \"-f\", \"-g\", \"-h\", \"-k\", \"-p\", \"-r\", \"-s\",\n \"-t\", \"-u\", \"-w\", \"-x\", \"-z\", \"-n\", \"-L\", \"-S\", \"-N\", \"-O\", \"-G\", \"-o\", \"-v\", \"-R\",\n]);\n\nconst BINARY_OPS = new Set([\n \"=\", \"==\", \"!=\", \"<\", \">\", \"-eq\", \"-ne\", \"-lt\", \"-le\", \"-gt\", \"-ge\",\n \"-nt\", \"-ot\", \"-ef\",\n]);\n\nexport class TestError extends Error {}\n\nexport function evaluateTest(args: string[], shell: Shell): number {\n try {\n const parser = new TestParser(args, shell);\n const result = parser.parse();\n return result ? 0 : 1;\n } catch (e) {\n if (e instanceof TestError) throw e;\n throw e;\n }\n}\n\nclass TestParser {\n private i = 0;\n\n constructor(\n private readonly args: string[],\n private readonly shell: Shell,\n ) {}\n\n parse(): boolean {\n if (this.args.length === 0) return false;\n const value = this.parseOr();\n if (this.i < this.args.length) {\n throw new TestError(`too many arguments`);\n }\n return value;\n }\n\n private peek(offset = 0): string | undefined {\n return this.args[this.i + offset];\n }\n\n private take(): string {\n const value = this.args[this.i];\n if (value === undefined) throw new TestError(\"argument expected\");\n this.i++;\n return value;\n }\n\n private parseOr(): boolean {\n let left = this.parseAnd();\n while (this.peek() === \"-o\" || this.peek() === \"||\") {\n this.take();\n const right = this.parseAnd();\n left = left || right;\n }\n return left;\n }\n\n private parseAnd(): boolean {\n let left = this.parseUnaryExpr();\n while (this.peek() === \"-a\" || this.peek() === \"&&\") {\n this.take();\n const right = this.parseUnaryExpr();\n left = left && right;\n }\n return left;\n }\n\n private parseUnaryExpr(): boolean {\n if (this.peek() === \"!\") {\n this.take();\n return !this.parseUnaryExpr();\n }\n if (this.peek() === \"(\") {\n this.take();\n const value = this.parseOr();\n if (this.peek() !== \")\") throw new TestError(\"missing `)'\");\n this.take();\n return value;\n }\n return this.parsePrimary();\n }\n\n private parsePrimary(): boolean {\n const remaining = this.args.length - this.i;\n\n // Binary form: WORD OP WORD.\n const op = this.peek(1);\n if (remaining >= 3 && op !== undefined && BINARY_OPS.has(op)) {\n const left = this.take();\n this.take();\n const right = this.take();\n return this.binary(left, op, right);\n }\n\n const first = this.peek();\n if (first !== undefined && UNARY_OPS.has(first) && remaining >= 2) {\n this.take();\n return this.unary(first, this.take());\n }\n\n // A lone word is true when non-empty.\n return this.take() !== \"\";\n }\n\n private statOf(path: string, follow = true): Stats | null {\n const abs = P.resolve(this.shell.cwd, path);\n try {\n return follow ? this.shell.kernel.vfs.stat(abs, { cred: this.shell.cred }) : this.shell.kernel.vfs.lstat(abs);\n } catch {\n return null;\n }\n }\n\n private unary(op: string, operand: string): boolean {\n switch (op) {\n case \"-z\":\n return operand.length === 0;\n case \"-n\":\n return operand.length > 0;\n case \"-t\":\n // No real terminals; report true only for the streams marked as TTYs.\n return isTtyFd(this.shell, Number(operand));\n case \"-o\":\n return isOptionSet(this.shell, operand);\n case \"-v\":\n return this.shell.vars.has(operand);\n case \"-R\":\n return false;\n default:\n break;\n }\n\n const follow = op !== \"-h\" && op !== \"-L\";\n const st = this.statOf(operand, follow);\n if (!st) return false;\n\n switch (op) {\n case \"-e\":\n case \"-a\":\n return true;\n case \"-f\":\n return st.isFile();\n case \"-d\":\n return st.isDirectory();\n case \"-h\":\n case \"-L\":\n return st.isSymbolicLink();\n case \"-b\":\n return st.isBlockDevice();\n case \"-c\":\n return st.isCharacterDevice();\n case \"-p\":\n return st.isFIFO();\n case \"-S\":\n return st.isSocket();\n case \"-s\":\n return st.size > 0;\n case \"-r\":\n return this.shell.kernel.vfs.permitted(st, R_OK, this.shell.cred);\n case \"-w\":\n return this.shell.kernel.vfs.permitted(st, W_OK, this.shell.cred);\n case \"-x\":\n return this.shell.kernel.vfs.permitted(st, X_OK, this.shell.cred);\n case \"-u\":\n return (st.mode & S_ISUID) !== 0;\n case \"-g\":\n return (st.mode & S_ISGID) !== 0;\n case \"-k\":\n return (st.mode & S_ISVTX) !== 0;\n case \"-O\":\n return st.uid === this.shell.cred.uid;\n case \"-G\":\n return this.shell.cred.groups.includes(st.gid);\n case \"-N\":\n return st.mtimeMs > st.atimeMs;\n default:\n return false;\n }\n }\n\n private binary(left: string, op: string, right: string): boolean {\n switch (op) {\n case \"=\":\n case \"==\":\n return left === right;\n case \"!=\":\n return left !== right;\n case \"<\":\n return left < right;\n case \">\":\n return left > right;\n case \"-eq\":\n case \"-ne\":\n case \"-lt\":\n case \"-le\":\n case \"-gt\":\n case \"-ge\": {\n const a = toInteger(left);\n const b = toInteger(right);\n switch (op) {\n case \"-eq\":\n return a === b;\n case \"-ne\":\n return a !== b;\n case \"-lt\":\n return a < b;\n case \"-le\":\n return a <= b;\n case \"-gt\":\n return a > b;\n default:\n return a >= b;\n }\n }\n case \"-nt\": {\n const a = this.statOf(left);\n const b = this.statOf(right);\n if (!a) return false;\n if (!b) return true;\n return a.mtimeMs > b.mtimeMs;\n }\n case \"-ot\": {\n const a = this.statOf(left);\n const b = this.statOf(right);\n if (!b) return false;\n if (!a) return true;\n return a.mtimeMs < b.mtimeMs;\n }\n case \"-ef\": {\n const a = this.statOf(left);\n const b = this.statOf(right);\n return !!a && !!b && a.ino === b.ino && a.dev === b.dev;\n }\n default:\n return false;\n }\n }\n}\n\nfunction toInteger(value: string): number {\n const trimmed = value.trim();\n if (!/^[+-]?\\d+$/.test(trimmed)) throw new TestError(`integer expression expected: ${value}`);\n return Number(trimmed);\n}\n\nfunction isTtyFd(shell: Shell, fd: number): boolean {\n if (fd === 0) return shell.proc.stdin.isTTY;\n if (fd === 1) return shell.proc.stdout.isTTY;\n if (fd === 2) return shell.proc.stderr.isTTY;\n return false;\n}\n\nfunction isOptionSet(shell: Shell, name: string): boolean {\n const map: Record<string, boolean> = {\n errexit: shell.options.errexit,\n nounset: shell.options.nounset,\n xtrace: shell.options.xtrace,\n verbose: shell.options.verbose,\n noglob: shell.options.noglob,\n pipefail: shell.options.pipefail,\n noexec: shell.options.noexec,\n monitor: shell.options.monitor,\n noclobber: shell.options.noclobber,\n allexport: shell.options.allexport,\n };\n return map[name] ?? false;\n}\n","/**\n * `printf(1)` formatting and the backslash-escape decoder shared by\n * `echo -e`, `printf`, `$'...'` and the `printf` coreutil.\n */\n\n/** Decode C-style escapes. `stopOnNul` implements `echo`'s `\\c`. */\nexport function decodeEscapes(input: string, opts: { stopAtC?: boolean } = {}): { text: string; stopped: boolean } {\n let out = \"\";\n let i = 0;\n while (i < input.length) {\n const c = input[i]!;\n if (c !== \"\\\\\") {\n out += c;\n i++;\n continue;\n }\n const next = input[i + 1];\n if (next === undefined) {\n out += \"\\\\\";\n break;\n }\n i += 2;\n switch (next) {\n case \"a\":\n out += \"\\x07\";\n break;\n case \"b\":\n out += \"\\b\";\n break;\n case \"e\":\n case \"E\":\n out += \"\\x1b\";\n break;\n case \"f\":\n out += \"\\f\";\n break;\n case \"n\":\n out += \"\\n\";\n break;\n case \"r\":\n out += \"\\r\";\n break;\n case \"t\":\n out += \"\\t\";\n break;\n case \"v\":\n out += \"\\v\";\n break;\n case \"\\\\\":\n out += \"\\\\\";\n break;\n case \"'\":\n out += \"'\";\n break;\n case '\"':\n out += '\"';\n break;\n case \"?\":\n out += \"?\";\n break;\n case \"c\":\n if (opts.stopAtC) return { text: out, stopped: true };\n break;\n case \"0\": {\n const m = /^[0-7]{1,3}/.exec(input.slice(i));\n const digits = m?.[0] ?? \"\";\n out += String.fromCharCode(parseInt(digits || \"0\", 8));\n i += digits.length;\n break;\n }\n case \"x\": {\n const m = /^[0-9a-fA-F]{1,2}/.exec(input.slice(i));\n if (m) {\n out += String.fromCharCode(parseInt(m[0], 16));\n i += m[0].length;\n } else out += \"\\\\x\";\n break;\n }\n case \"u\": {\n const m = /^[0-9a-fA-F]{1,4}/.exec(input.slice(i));\n if (m) {\n out += String.fromCodePoint(parseInt(m[0], 16));\n i += m[0].length;\n } else out += \"\\\\u\";\n break;\n }\n case \"U\": {\n const m = /^[0-9a-fA-F]{1,8}/.exec(input.slice(i));\n if (m) {\n out += String.fromCodePoint(parseInt(m[0], 16));\n i += m[0].length;\n } else out += \"\\\\U\";\n break;\n }\n default:\n if (/[1-7]/.test(next)) {\n const m = /^[0-7]{0,2}/.exec(input.slice(i));\n const digits = next + (m?.[0] ?? \"\");\n out += String.fromCharCode(parseInt(digits, 8));\n i += m?.[0].length ?? 0;\n } else {\n out += \"\\\\\" + next;\n }\n break;\n }\n }\n return { text: out, stopped: false };\n}\n\nexport class PrintfError extends Error {}\n\n/**\n * Format `args` with `format`, recycling the format string until the arguments\n * are exhausted — the behaviour `printf` is actually specified to have.\n */\nexport function formatPrintf(format: string, args: string[]): string {\n let out = \"\";\n let argIndex = 0;\n let consumedAny = false;\n\n do {\n const pass = formatOnce(format, args, argIndex);\n out += pass.text;\n if (pass.stopped) return out;\n consumedAny = pass.nextIndex > argIndex;\n argIndex = pass.nextIndex;\n if (!pass.hasConversions) break;\n } while (argIndex < args.length && consumedAny);\n\n return out;\n}\n\ninterface PassResult {\n text: string;\n nextIndex: number;\n hasConversions: boolean;\n stopped: boolean;\n}\n\nfunction formatOnce(format: string, args: string[], startIndex: number): PassResult {\n let out = \"\";\n let i = 0;\n let argIndex = startIndex;\n let hasConversions = false;\n\n const nextArg = (): string => args[argIndex++] ?? \"\";\n\n while (i < format.length) {\n const c = format[i]!;\n\n if (c === \"\\\\\") {\n const decoded = decodeEscapes(format.slice(i, i + 12), { stopAtC: true });\n // Decode just this escape: find how much of the source it consumed.\n const single = decodeSingleEscape(format, i);\n if (single.stopped) return { text: out, nextIndex: argIndex, hasConversions, stopped: true };\n out += single.text;\n i = single.next;\n void decoded;\n continue;\n }\n\n if (c !== \"%\") {\n out += c;\n i++;\n continue;\n }\n\n if (format[i + 1] === \"%\") {\n out += \"%\";\n i += 2;\n continue;\n }\n\n const spec = /^%([-+ #0']*)(\\*|\\d+)?(?:\\.(\\*|\\d+))?([diouxXeEfgGaAcsbq])/.exec(format.slice(i));\n if (!spec) {\n out += c;\n i++;\n continue;\n }\n\n hasConversions = true;\n const [whole, flagsRaw, widthRaw, precisionRaw, conv] = spec as unknown as [\n string,\n string,\n string | undefined,\n string | undefined,\n string,\n ];\n const flags = flagsRaw ?? \"\";\n const width = widthRaw === \"*\" ? Number(nextArg()) : widthRaw ? Number(widthRaw) : undefined;\n const precision = precisionRaw === \"*\" ? Number(nextArg()) : precisionRaw !== undefined ? Number(precisionRaw) : undefined;\n\n out += convert(conv, nextArg(), flags, width, precision);\n i += whole.length;\n }\n\n return { text: out, nextIndex: argIndex, hasConversions, stopped: false };\n}\n\nfunction decodeSingleEscape(input: string, at: number): { text: string; next: number; stopped: boolean } {\n const rest = input.slice(at);\n // Consume the shortest prefix that forms one escape.\n const m = /^\\\\(x[0-9a-fA-F]{1,2}|u[0-9a-fA-F]{1,4}|U[0-9a-fA-F]{1,8}|[0-7]{1,3}|.)/.exec(rest);\n if (!m) return { text: \"\\\\\", next: at + 1, stopped: false };\n if (m[1] === \"c\") return { text: \"\", next: at + m[0].length, stopped: true };\n const decoded = decodeEscapes(m[0]);\n return { text: decoded.text, next: at + m[0].length, stopped: false };\n}\n\nfunction convert(conv: string, raw: string, flags: string, width?: number, precision?: number): string {\n let body: string;\n\n switch (conv) {\n case \"d\":\n case \"i\": {\n const value = toInt(raw);\n body = Math.abs(value).toFixed(0);\n if (precision !== undefined) body = body.padStart(precision, \"0\");\n if (value < 0) body = \"-\" + body;\n else if (flags.includes(\"+\")) body = \"+\" + body;\n else if (flags.includes(\" \")) body = \" \" + body;\n break;\n }\n case \"u\": {\n const value = toInt(raw);\n body = String(value < 0 ? value >>> 0 : value);\n break;\n }\n case \"o\": {\n body = Math.abs(toInt(raw)).toString(8);\n if (flags.includes(\"#\") && !body.startsWith(\"0\")) body = \"0\" + body;\n break;\n }\n case \"x\":\n case \"X\": {\n const value = toInt(raw);\n body = (value < 0 ? value >>> 0 : value).toString(16);\n if (conv === \"X\") body = body.toUpperCase();\n if (precision !== undefined) body = body.padStart(precision, \"0\");\n if (flags.includes(\"#\") && toInt(raw) !== 0) body = (conv === \"X\" ? \"0X\" : \"0x\") + body;\n break;\n }\n case \"e\":\n case \"E\": {\n const value = toFloat(raw);\n body = value.toExponential(precision ?? 6);\n if (conv === \"E\") body = body.toUpperCase();\n if (value >= 0 && flags.includes(\"+\")) body = \"+\" + body;\n break;\n }\n case \"f\": {\n const value = toFloat(raw);\n body = value.toFixed(precision ?? 6);\n if (value >= 0 && flags.includes(\"+\")) body = \"+\" + body;\n break;\n }\n case \"g\":\n case \"G\": {\n const value = toFloat(raw);\n const p = precision ?? 6;\n body = String(Number(value.toPrecision(p === 0 ? 1 : p)));\n if (conv === \"G\") body = body.toUpperCase();\n break;\n }\n case \"a\":\n case \"A\": {\n body = toFloat(raw).toString(16);\n break;\n }\n case \"c\": {\n body = raw.slice(0, 1);\n break;\n }\n case \"b\": {\n body = decodeEscapes(raw, { stopAtC: true }).text;\n break;\n }\n case \"q\": {\n body = quoteForShell(raw);\n break;\n }\n default: {\n body = raw;\n if (precision !== undefined) body = body.slice(0, precision);\n break;\n }\n }\n\n if (conv === \"s\" || conv === undefined) {\n body = raw;\n if (precision !== undefined) body = body.slice(0, precision);\n }\n\n if (width !== undefined && Number.isFinite(width)) {\n const pad = Math.abs(width) - body.length;\n if (pad > 0) {\n const leftAlign = flags.includes(\"-\") || width < 0;\n if (leftAlign) body = body + \" \".repeat(pad);\n else if (flags.includes(\"0\") && \"dioxXeEfgG\".includes(conv)) {\n const sign = /^[+\\- ]/.test(body) ? body[0]! : \"\";\n const rest = sign ? body.slice(1) : body;\n body = sign + \"0\".repeat(pad) + rest;\n } else body = \" \".repeat(pad) + body;\n }\n }\n\n return body;\n}\n\nfunction toInt(raw: string): number {\n const trimmed = raw.trim();\n if (trimmed === \"\") return 0;\n if (trimmed.startsWith(\"'\") || trimmed.startsWith('\"')) return trimmed.charCodeAt(1) || 0;\n if (/^0[xX]/.test(trimmed)) return parseInt(trimmed, 16) || 0;\n if (/^0[0-7]+$/.test(trimmed)) return parseInt(trimmed, 8) || 0;\n const n = Number(trimmed);\n if (!Number.isFinite(n)) throw new PrintfError(`invalid number: ${raw}`);\n return Math.trunc(n);\n}\n\nfunction toFloat(raw: string): number {\n const trimmed = raw.trim();\n if (trimmed === \"\") return 0;\n const n = Number(trimmed);\n if (!Number.isFinite(n)) throw new PrintfError(`invalid number: ${raw}`);\n return n;\n}\n\nexport function quoteForShell(value: string): string {\n if (value === \"\") return \"''\";\n if (/^[A-Za-z0-9_@%+=:,./-]+$/.test(value)) return value;\n return \"'\" + value.replace(/'/g, `'\\\\''`) + \"'\";\n}\n","/**\n * Builtins that must run inside the shell because they change its state or\n * its control flow: `cd`, `exit`, `eval`, `source`, `exec`, the loop keywords,\n * and the ones POSIX simply requires to be builtin (`:`, `true`, `test`).\n */\n\nimport type { BuiltinContext } from \"./index.js\";\nimport { evaluateTest, TestError } from \"../test.js\";\nimport { decodeEscapes, formatPrintf, PrintfError } from \"../../util/printf.js\";\nimport { formatUmaskSymbolic, parseUmask } from \"../../fs/mode.js\";\nimport { isSysError } from \"../../fs/errno.js\";\nimport * as P from \"../../fs/path.js\";\nimport { evalArith, ArithError } from \"../arith.js\";\nimport { expandWordToString } from \"../expand.js\";\n\nexport async function builtinCd({ shell, argv, io }: BuiltinContext): Promise<number> {\n const args = argv.slice(1).filter((a) => a !== \"-P\" && a !== \"-L\" && a !== \"-e\" && a !== \"-@\");\n let target = args[0];\n\n if (target === undefined) {\n target = shell.vars.get(\"HOME\") ?? \"/\";\n } else if (target === \"-\") {\n const previous = shell.vars.get(\"OLDPWD\");\n if (previous === undefined) {\n io.stderr.write(\"cd: OLDPWD not set\\n\");\n return 1;\n }\n target = previous;\n io.stdout.write(target + \"\\n\");\n }\n\n try {\n shell.changeDirectory(target);\n return 0;\n } catch (e) {\n if (isSysError(e)) {\n const reason = e.code === \"ENOTDIR\" ? \"Not a directory\" : e.code === \"EACCES\" ? \"Permission denied\" : \"No such file or directory\";\n io.stderr.write(`cd: ${target}: ${reason}\\n`);\n return 1;\n }\n throw e;\n }\n}\n\nexport function builtinPwd({ shell, argv, io }: BuiltinContext): number {\n void argv;\n io.stdout.write(shell.cwd + \"\\n\");\n return 0;\n}\n\nexport function builtinEcho({ argv, io }: BuiltinContext): number {\n let args = argv.slice(1);\n let newline = true;\n let interpret = false;\n\n while (args.length > 0 && /^-[neE]+$/.test(args[0]!)) {\n for (const flag of args[0]!.slice(1)) {\n if (flag === \"n\") newline = false;\n else if (flag === \"e\") interpret = true;\n else if (flag === \"E\") interpret = false;\n }\n args = args.slice(1);\n }\n\n let text = args.join(\" \");\n if (interpret) {\n const decoded = decodeEscapes(text, { stopAtC: true });\n text = decoded.text;\n if (decoded.stopped) newline = false;\n }\n io.stdout.write(newline ? text + \"\\n\" : text);\n return 0;\n}\n\nexport function builtinPrintf({ argv, io }: BuiltinContext): number {\n const args = argv.slice(1);\n let varName: string | undefined;\n let start = 0;\n if (args[0] === \"-v\" && args[1] !== undefined) {\n varName = args[1];\n start = 2;\n }\n const format = args[start];\n if (format === undefined) {\n io.stderr.write(\"printf: usage: printf [-v var] format [arguments]\\n\");\n return 2;\n }\n try {\n const text = formatPrintf(format, args.slice(start + 1));\n if (varName) return 0;\n io.stdout.write(text);\n return 0;\n } catch (e) {\n io.stderr.write(`printf: ${e instanceof PrintfError ? e.message : String(e)}\\n`);\n return 1;\n }\n}\n\nexport function builtinTrue(): number {\n return 0;\n}\n\nexport function builtinFalse(): number {\n return 1;\n}\n\nexport function builtinColon(): number {\n return 0;\n}\n\nexport function builtinTest({ shell, argv, io }: BuiltinContext): number {\n let args = argv.slice(1);\n if (argv[0] === \"[\") {\n if (args[args.length - 1] !== \"]\") {\n io.stderr.write(\"[: missing `]'\\n\");\n return 2;\n }\n args = args.slice(0, -1);\n }\n try {\n return evaluateTest(args, shell);\n } catch (e) {\n io.stderr.write(`${argv[0]}: ${e instanceof TestError ? e.message : String(e)}\\n`);\n return 2;\n }\n}\n\nexport function builtinExit({ shell, argv, io }: BuiltinContext): number {\n const code = argv[1] !== undefined ? Number(argv[1]) : shell.lastStatus;\n if (argv[1] !== undefined && !Number.isFinite(code)) {\n io.stderr.write(`exit: ${argv[1]}: numeric argument required\\n`);\n return shell.throwExit(2);\n }\n return shell.throwExit((code | 0) & 0xff);\n}\n\nexport function builtinReturn({ shell, argv }: BuiltinContext): number {\n const code = argv[1] !== undefined ? Number(argv[1]) : shell.lastStatus;\n return shell.throwReturn((Number.isFinite(code) ? code : 0) & 0xff);\n}\n\nexport function builtinBreak({ shell, argv }: BuiltinContext): number {\n const levels = argv[1] !== undefined ? Math.max(1, Number(argv[1]) || 1) : 1;\n return shell.throwBreak(levels);\n}\n\nexport function builtinContinue({ shell, argv }: BuiltinContext): number {\n const levels = argv[1] !== undefined ? Math.max(1, Number(argv[1]) || 1) : 1;\n return shell.throwContinue(levels);\n}\n\nexport function builtinShift({ shell, argv, io }: BuiltinContext): number {\n const n = argv[1] !== undefined ? Number(argv[1]) : 1;\n if (!Number.isFinite(n) || n < 0) {\n io.stderr.write(`shift: ${argv[1]}: numeric argument required\\n`);\n return 1;\n }\n if (n > shell.positional.length) return 1;\n shell.positional = shell.positional.slice(n);\n return 0;\n}\n\nexport async function builtinEval({ shell, argv, io }: BuiltinContext): Promise<number> {\n const source = argv.slice(1).join(\" \");\n if (source.trim() === \"\") return 0;\n return await shell.execute(source, io);\n}\n\nexport async function builtinSource({ shell, argv, io }: BuiltinContext): Promise<number> {\n const target = argv[1];\n if (target === undefined) {\n io.stderr.write(`${argv[0]}: filename argument required\\n`);\n return 2;\n }\n\n let path = P.resolve(shell.cwd, target);\n if (!target.includes(\"/\")) {\n const found = shell.kernel.which(target, shell.cwd, shell.vars.environment(), shell.cred);\n if (found) path = found;\n }\n\n let text: string;\n try {\n text = shell.kernel.vfs.readText(path, shell.cred);\n } catch {\n io.stderr.write(`${argv[0]}: ${target}: No such file or directory\\n`);\n return 1;\n }\n\n const savedPositional = shell.positional;\n if (argv.length > 2) shell.positional = argv.slice(2);\n try {\n return await shell.execute(text, io);\n } finally {\n shell.positional = savedPositional;\n }\n}\n\nexport async function builtinExec({ shell, argv, io }: BuiltinContext): Promise<number> {\n const args = argv.slice(1);\n if (args.length === 0) return 0;\n const code = await shell.kernel\n .spawn(args, {\n cwd: shell.cwd,\n env: shell.vars.environment(),\n cred: shell.cred,\n ppid: shell.proc.pid,\n stdin: io.stdin,\n stdout: io.stdout,\n stderr: io.stderr,\n })\n .wait();\n // `exec` replaces the shell: once the command finishes, the shell is done.\n return shell.throwExit(code);\n}\n\nexport function builtinUmask({ shell, argv, io }: BuiltinContext): number {\n const args = argv.slice(1);\n const symbolic = args[0] === \"-S\";\n const spec = symbolic ? args[1] : args[0];\n\n if (spec === undefined) {\n io.stdout.write(symbolic ? formatUmaskSymbolic(shell.cred.umask) + \"\\n\" : \"0\" + shell.cred.umask.toString(8).padStart(3, \"0\") + \"\\n\");\n return 0;\n }\n try {\n shell.cred.umask = parseUmask(spec);\n shell.proc.cred.umask = shell.cred.umask;\n return 0;\n } catch {\n io.stderr.write(`umask: ${spec}: invalid mode\\n`);\n return 1;\n }\n}\n\nexport function builtinTimes({ shell, io }: BuiltinContext): number {\n const ms = Date.now() - shell.proc.startTime;\n const fmt = (v: number) => `${Math.floor(v / 60000)}m${((v % 60000) / 1000).toFixed(3)}s`;\n io.stdout.write(`${fmt(Math.floor(ms * 0.4))} ${fmt(Math.floor(ms * 0.1))}\\n${fmt(Math.floor(ms * 0.3))} ${fmt(Math.floor(ms * 0.2))}\\n`);\n return 0;\n}\n\nexport async function builtinLet({ shell, argv, io }: BuiltinContext): Promise<number> {\n const scope = { get: (n: string) => shell.vars.get(n), set: (n: string, v: string) => shell.vars.set(n, v) };\n let last = 0;\n for (const expr of argv.slice(1)) {\n try {\n last = evalArith(await expandWordToString(expr, shell.expandContext()), scope);\n } catch (e) {\n io.stderr.write(`let: ${e instanceof ArithError ? e.message : String(e)}\\n`);\n return 1;\n }\n }\n return last !== 0 ? 0 : 1;\n}\n\nexport function builtinUlimit({ argv, io }: BuiltinContext): number {\n const flag = argv[1] ?? \"-f\";\n const limits: Record<string, string> = {\n \"-a\": \"\",\n \"-c\": \"0\",\n \"-d\": \"unlimited\",\n \"-f\": \"unlimited\",\n \"-l\": \"8192\",\n \"-m\": \"unlimited\",\n \"-n\": \"1048576\",\n \"-p\": \"8\",\n \"-s\": \"8192\",\n \"-t\": \"unlimited\",\n \"-u\": \"unlimited\",\n \"-v\": \"unlimited\",\n };\n if (flag === \"-a\") {\n io.stdout.write(\n [\n \"core file size (blocks, -c) 0\",\n \"data seg size (kbytes, -d) unlimited\",\n \"file size (blocks, -f) unlimited\",\n \"max locked memory (kbytes, -l) 8192\",\n \"open files (-n) 1048576\",\n \"stack size (kbytes, -s) 8192\",\n \"cpu time (seconds, -t) unlimited\",\n \"max user processes (-u) unlimited\",\n \"virtual memory (kbytes, -v) unlimited\",\n \"\",\n ].join(\"\\n\"),\n );\n return 0;\n }\n io.stdout.write((limits[flag] ?? \"unlimited\") + \"\\n\");\n return 0;\n}\n","/**\n * Builtins that manipulate the variable table, the option flags, and the\n * positional parameters: `export`, `set`, `declare`, `read`, `getopts`, …\n */\n\nimport type { BuiltinContext } from \"./index.js\";\nimport { ReadonlyVariableError } from \"../variables.js\";\nimport { expandWordToString, shellQuote } from \"../expand.js\";\nimport { decodeEscapes } from \"../../util/printf.js\";\nimport type { ShellOptions } from \"../interpreter.js\";\n\nconst LONG_OPTIONS: Record<string, keyof ShellOptions> = {\n errexit: \"errexit\",\n nounset: \"nounset\",\n xtrace: \"xtrace\",\n verbose: \"verbose\",\n noglob: \"noglob\",\n pipefail: \"pipefail\",\n noexec: \"noexec\",\n monitor: \"monitor\",\n noclobber: \"noclobber\",\n allexport: \"allexport\",\n};\n\nconst SHORT_OPTIONS: Record<string, keyof ShellOptions> = {\n e: \"errexit\",\n u: \"nounset\",\n x: \"xtrace\",\n v: \"verbose\",\n f: \"noglob\",\n n: \"noexec\",\n m: \"monitor\",\n C: \"noclobber\",\n a: \"allexport\",\n};\n\nexport async function builtinExport({ shell, argv, io }: BuiltinContext): Promise<number> {\n const args = argv.slice(1);\n if (args.length === 0 || args[0] === \"-p\") {\n for (const { name, entry } of shell.vars.all()) {\n if (entry.exported) io.stdout.write(`declare -x ${name}=\"${entry.value}\"\\n`);\n }\n return 0;\n }\n let status = 0;\n for (const arg of args) {\n if (arg === \"-n\") continue;\n const unexport = args.includes(\"-n\");\n const eq = arg.indexOf(\"=\");\n try {\n if (eq < 0) {\n shell.vars.export(arg, !unexport);\n } else {\n const name = arg.slice(0, eq);\n const value = await expandWordToString(arg.slice(eq + 1), shell.expandContext());\n shell.vars.set(name, value, { exported: true });\n }\n } catch (e) {\n io.stderr.write(`export: ${e instanceof ReadonlyVariableError ? e.message : String(e)}\\n`);\n status = 1;\n }\n }\n return status;\n}\n\nexport function builtinUnset({ shell, argv, io }: BuiltinContext): number {\n let status = 0;\n for (const arg of argv.slice(1)) {\n if (arg === \"-v\" || arg === \"-f\") continue;\n if (argv.includes(\"-f\")) {\n shell.functions.delete(arg);\n continue;\n }\n try {\n shell.vars.unset(arg);\n shell.functions.delete(arg);\n } catch (e) {\n io.stderr.write(`unset: ${e instanceof ReadonlyVariableError ? e.message : String(e)}\\n`);\n status = 1;\n }\n }\n return status;\n}\n\nexport function builtinReadonly({ shell, argv, io }: BuiltinContext): number {\n const args = argv.slice(1);\n if (args.length === 0 || args[0] === \"-p\") {\n for (const { name, entry } of shell.vars.all()) {\n if (entry.readonly) io.stdout.write(`declare -r ${name}=\"${entry.value}\"\\n`);\n }\n return 0;\n }\n for (const arg of args) {\n const eq = arg.indexOf(\"=\");\n if (eq < 0) shell.vars.markReadonly(arg);\n else {\n shell.vars.set(arg.slice(0, eq), arg.slice(eq + 1));\n shell.vars.markReadonly(arg.slice(0, eq));\n }\n }\n return 0;\n}\n\nexport function builtinSet({ shell, argv, io }: BuiltinContext): number {\n const args = argv.slice(1);\n\n if (args.length === 0) {\n for (const { name, entry } of shell.vars.all()) {\n io.stdout.write(`${name}=${entry.array ? `(${entry.array.map(shellQuote).join(\" \")})` : shellQuote(entry.value)}\\n`);\n }\n return 0;\n }\n\n let i = 0;\n let sawPositional = false;\n for (; i < args.length; i++) {\n const arg = args[i]!;\n\n if (arg === \"--\") {\n shell.positional = args.slice(i + 1);\n return 0;\n }\n if (arg === \"-\") {\n continue;\n }\n if (arg === \"-o\" || arg === \"+o\") {\n const enable = arg === \"-o\";\n const name = args[i + 1];\n if (name === undefined) {\n for (const [long, key] of Object.entries(LONG_OPTIONS)) {\n io.stdout.write(`${long.padEnd(15)}${shell.options[key] ? \"on\" : \"off\"}\\n`);\n }\n continue;\n }\n i++;\n const key = LONG_OPTIONS[name];\n if (!key) {\n io.stderr.write(`set: ${name}: invalid option name\\n`);\n return 2;\n }\n shell.options[key] = enable;\n continue;\n }\n if ((arg.startsWith(\"-\") || arg.startsWith(\"+\")) && arg.length > 1 && !sawPositional) {\n const enable = arg.startsWith(\"-\");\n for (const flag of arg.slice(1)) {\n const key = SHORT_OPTIONS[flag];\n if (key) shell.options[key] = enable;\n }\n continue;\n }\n sawPositional = true;\n break;\n }\n\n if (sawPositional) shell.positional = args.slice(i);\n return 0;\n}\n\nexport function builtinShopt({ shell, argv, io }: BuiltinContext): number {\n const args = argv.slice(1);\n const set = args.includes(\"-s\");\n const unset = args.includes(\"-u\");\n const quiet = args.includes(\"-q\");\n const names = args.filter((a) => !a.startsWith(\"-\"));\n\n if (names.length === 0) {\n const known = [\n \"extglob\",\n \"nullglob\",\n \"failglob\",\n \"dotglob\",\n \"globstar\",\n \"nocaseglob\",\n \"expand_aliases\",\n \"histappend\",\n \"checkwinsize\",\n \"sourcepath\",\n \"promptvars\",\n \"xpg_echo\",\n \"huponexit\",\n ];\n for (const name of known.sort()) {\n io.stdout.write(`${name.padEnd(20)}${shell.shopts.has(name) ? \"on\" : \"off\"}\\n`);\n }\n return 0;\n }\n\n let status = 0;\n for (const name of names) {\n if (set) shell.shopts.add(name);\n else if (unset) shell.shopts.delete(name);\n else {\n const on = shell.shopts.has(name);\n if (!quiet) io.stdout.write(`${name.padEnd(20)}${on ? \"on\" : \"off\"}\\n`);\n if (!on) status = 1;\n }\n }\n return status;\n}\n\nexport async function builtinDeclare({ shell, argv, io }: BuiltinContext): Promise<number> {\n const args = argv.slice(1);\n const flags = new Set<string>();\n let i = 0;\n for (; i < args.length; i++) {\n const arg = args[i]!;\n if (!arg.startsWith(\"-\") && !arg.startsWith(\"+\")) break;\n if (arg === \"--\") {\n i++;\n break;\n }\n for (const ch of arg.slice(1)) flags.add((arg[0] === \"+\" ? \"+\" : \"\") + ch);\n }\n const rest = args.slice(i);\n const isLocal = argv[0] === \"local\" || flags.has(\"g\") === false && argv[0] === \"local\";\n\n if (rest.length === 0) {\n if (flags.has(\"f\") || flags.has(\"F\")) {\n for (const name of [...shell.functions.keys()].sort()) io.stdout.write(`declare -f ${name}\\n`);\n return 0;\n }\n for (const { name, entry } of shell.vars.all()) {\n const attrs = `${entry.exported ? \"x\" : \"\"}${entry.readonly ? \"r\" : \"\"}${entry.integer ? \"i\" : \"\"}${entry.array ? \"a\" : \"\"}`;\n io.stdout.write(`declare -${attrs || \"-\"} ${name}=\"${entry.array ? entry.array.join(\" \") : entry.value}\"\\n`);\n }\n return 0;\n }\n\n for (const item of rest) {\n const eq = item.indexOf(\"=\");\n const name = eq < 0 ? item : item.slice(0, eq);\n const rawValue = eq < 0 ? undefined : item.slice(eq + 1);\n const attrs = {\n exported: flags.has(\"x\"),\n readonly: flags.has(\"r\"),\n integer: flags.has(\"i\"),\n upper: flags.has(\"u\"),\n lower: flags.has(\"l\"),\n };\n\n try {\n if (flags.has(\"a\") && rawValue !== undefined) {\n const inner = rawValue.replace(/^\\(|\\)$/g, \"\");\n const values = inner === \"\" ? [] : inner.split(/\\s+/);\n shell.vars.setArray(name, values, attrs);\n continue;\n }\n const value = rawValue === undefined ? undefined : await expandWordToString(rawValue, shell.expandContext());\n if (isLocal || argv[0] === \"local\") {\n shell.vars.setLocal(name, value ?? shell.vars.get(name) ?? \"\", attrs);\n } else if (value === undefined) {\n if (!shell.vars.has(name)) shell.vars.set(name, \"\", attrs);\n else {\n if (attrs.exported) shell.vars.export(name);\n if (attrs.readonly) shell.vars.markReadonly(name);\n }\n } else {\n shell.vars.set(name, value, attrs);\n }\n } catch (e) {\n io.stderr.write(`${argv[0]}: ${e instanceof ReadonlyVariableError ? e.message : String(e)}\\n`);\n return 1;\n }\n }\n return 0;\n}\n\nexport async function builtinLocal(ctx: BuiltinContext): Promise<number> {\n const { shell, argv, io } = ctx;\n if (shell.vars.depth <= 1) {\n io.stderr.write(\"local: can only be used in a function\\n\");\n return 1;\n }\n for (const item of argv.slice(1)) {\n if (item.startsWith(\"-\")) continue;\n const eq = item.indexOf(\"=\");\n const name = eq < 0 ? item : item.slice(0, eq);\n const value = eq < 0 ? \"\" : await expandWordToString(item.slice(eq + 1), shell.expandContext());\n shell.vars.setLocal(name, value);\n }\n return 0;\n}\n\nexport async function builtinRead({ shell, argv, io }: BuiltinContext): Promise<number> {\n const args = argv.slice(1);\n const names: string[] = [];\n let raw = false;\n let silent = false;\n let delimiter = \"\\n\";\n let prompt: string | undefined;\n let nchars: number | undefined;\n let timeoutSeconds: number | undefined;\n let intoArray: string | undefined;\n\n for (let i = 0; i < args.length; i++) {\n const arg = args[i]!;\n if (arg === \"-r\") raw = true;\n else if (arg === \"-s\") silent = true;\n else if (arg === \"-p\") prompt = args[++i];\n else if (arg === \"-d\") delimiter = args[++i] ?? \"\\n\";\n else if (arg === \"-n\" || arg === \"-N\") nchars = Number(args[++i]);\n else if (arg === \"-t\") timeoutSeconds = Number(args[++i]);\n else if (arg === \"-a\") intoArray = args[++i];\n else if (arg.startsWith(\"-\")) continue;\n else names.push(arg);\n }\n void silent;\n\n if (prompt !== undefined) io.stderr.write(prompt);\n\n let line: string | null;\n const readOnce = async (): Promise<string | null> => {\n if (nchars !== undefined && Number.isFinite(nchars)) {\n const chunk = await io.stdin.read(nchars);\n return chunk === null ? null : new TextDecoder().decode(chunk);\n }\n if (delimiter === \"\\n\") return io.stdin.readLine();\n // Custom delimiter: accumulate until we see it.\n let buffer = \"\";\n for (;;) {\n const chunk = await io.stdin.read(1);\n if (chunk === null) return buffer === \"\" ? null : buffer;\n const ch = new TextDecoder().decode(chunk);\n if (ch === delimiter) return buffer;\n buffer += ch;\n }\n };\n\n if (timeoutSeconds !== undefined && Number.isFinite(timeoutSeconds)) {\n line = await Promise.race([\n readOnce(),\n new Promise<null>((resolve) => setTimeout(() => resolve(null), timeoutSeconds * 1000)),\n ]);\n } else {\n line = await readOnce();\n }\n\n if (line === null) return 1;\n if (!raw) line = line.replace(/\\\\(.)/g, \"$1\");\n\n const ifs = shell.vars.get(\"IFS\") ?? \" \\t\\n\";\n\n if (intoArray) {\n const parts = ifs === \"\" ? [line] : line.split(new RegExp(`[${escapeForClass(ifs)}]+`)).filter((p) => p !== \"\");\n shell.vars.setArray(intoArray, parts);\n return 0;\n }\n\n if (names.length === 0) {\n shell.vars.set(\"REPLY\", line);\n return 0;\n }\n\n const parts = splitByIfs(line, ifs, names.length);\n names.forEach((name, idx) => shell.vars.set(name, parts[idx] ?? \"\"));\n return 0;\n}\n\nfunction escapeForClass(ifs: string): string {\n return ifs.replace(/[\\]\\\\^-]/g, \"\\\\$&\");\n}\n\nfunction splitByIfs(line: string, ifs: string, max: number): string[] {\n if (ifs === \"\") return [line];\n const chars = new Set([...ifs]);\n const out: string[] = [];\n let current = \"\";\n let i = 0;\n // Leading IFS whitespace is ignored.\n while (i < line.length && chars.has(line[i]!) && \" \\t\\n\".includes(line[i]!)) i++;\n\n for (; i < line.length; i++) {\n if (out.length === max - 1) {\n // The last name absorbs the remainder, trailing whitespace trimmed.\n current = line.slice(i).replace(new RegExp(`[${escapeForClass(ifs)}]+$`), \"\");\n break;\n }\n const c = line[i]!;\n if (chars.has(c)) {\n out.push(current);\n current = \"\";\n while (i + 1 < line.length && chars.has(line[i + 1]!) && \" \\t\\n\".includes(line[i + 1]!)) i++;\n continue;\n }\n current += c;\n }\n out.push(current);\n return out;\n}\n\nexport async function builtinMapfile({ shell, argv, io }: BuiltinContext): Promise<number> {\n const args = argv.slice(1);\n let name = \"MAPFILE\";\n let stripNewlines = false;\n let count = Infinity;\n for (let i = 0; i < args.length; i++) {\n const arg = args[i]!;\n if (arg === \"-t\") stripNewlines = true;\n else if (arg === \"-n\") count = Number(args[++i]);\n else if (!arg.startsWith(\"-\")) name = arg;\n }\n const lines: string[] = [];\n for (;;) {\n if (lines.length >= count) break;\n const line = await io.stdin.readLine();\n if (line === null) break;\n lines.push(stripNewlines ? line : line + \"\\n\");\n }\n shell.vars.setArray(name, lines);\n return 0;\n}\n\nexport function builtinGetopts({ shell, argv, io }: BuiltinContext): number {\n const optstring = argv[1];\n const name = argv[2];\n if (optstring === undefined || name === undefined) {\n io.stderr.write(\"getopts: usage: getopts optstring name [arg ...]\\n\");\n return 2;\n }\n const args = argv.length > 3 ? argv.slice(3) : shell.positional;\n const silent = optstring.startsWith(\":\");\n const spec = silent ? optstring.slice(1) : optstring;\n\n let optind = Number(shell.vars.get(\"OPTIND\") ?? \"1\");\n if (!Number.isFinite(optind) || optind < 1) optind = 1;\n let charIndex = Number(shell.vars.get(\"_OPTCHAR\") ?? \"1\");\n\n for (;;) {\n const current = args[optind - 1];\n if (current === undefined || current === \"--\" || !current.startsWith(\"-\") || current === \"-\") {\n if (current === \"--\") shell.vars.set(\"OPTIND\", String(optind + 1));\n else shell.vars.set(\"OPTIND\", String(optind));\n shell.vars.set(\"_OPTCHAR\", \"1\");\n shell.vars.set(name, \"?\");\n return 1;\n }\n\n const flag = current[charIndex];\n if (flag === undefined) {\n optind++;\n charIndex = 1;\n continue;\n }\n\n const specIndex = spec.indexOf(flag);\n if (specIndex < 0) {\n shell.vars.set(name, \"?\");\n shell.vars.set(\"OPTARG\", silent ? flag : \"\");\n if (!silent) io.stderr.write(`${shell.scriptName}: illegal option -- ${flag}\\n`);\n advance(shell, current, optind, charIndex);\n return 0;\n }\n\n if (spec[specIndex + 1] === \":\") {\n const inline = current.slice(charIndex + 1);\n if (inline !== \"\") {\n shell.vars.set(\"OPTARG\", inline);\n shell.vars.set(\"OPTIND\", String(optind + 1));\n shell.vars.set(\"_OPTCHAR\", \"1\");\n } else {\n const value = args[optind];\n if (value === undefined) {\n shell.vars.set(name, silent ? \":\" : \"?\");\n shell.vars.set(\"OPTARG\", flag);\n if (!silent) io.stderr.write(`${shell.scriptName}: option requires an argument -- ${flag}\\n`);\n shell.vars.set(\"OPTIND\", String(optind + 1));\n return 0;\n }\n shell.vars.set(\"OPTARG\", value);\n shell.vars.set(\"OPTIND\", String(optind + 2));\n shell.vars.set(\"_OPTCHAR\", \"1\");\n }\n shell.vars.set(name, flag);\n return 0;\n }\n\n shell.vars.set(name, flag);\n shell.vars.unset(\"OPTARG\");\n advance(shell, current, optind, charIndex);\n return 0;\n }\n}\n\nfunction advance(shell: BuiltinContext[\"shell\"], current: string, optind: number, charIndex: number): void {\n if (charIndex + 1 < current.length) {\n shell.vars.set(\"OPTIND\", String(optind));\n shell.vars.set(\"_OPTCHAR\", String(charIndex + 1));\n } else {\n shell.vars.set(\"OPTIND\", String(optind + 1));\n shell.vars.set(\"_OPTCHAR\", \"1\");\n }\n}\n\n/** `$'...'` style decoding exposed for the `echo`/`printf` builtins. */\nexport { decodeEscapes };\n","/**\n * The rest of the builtin set: aliases, job control, traps, the directory\n * stack, command lookup (`type`/`command`/`hash`) and `help`.\n */\n\nimport type { BuiltinContext } from \"./index.js\";\nimport { builtinNames, isBuiltinName } from \"./index.js\";\nimport { shellQuote } from \"../expand.js\";\nimport { SIGNALS, SIGNAL_NAMES, normalizeSignal } from \"../../kernel/signals.js\";\nimport * as P from \"../../fs/path.js\";\n\nexport function builtinAlias({ shell, argv, io }: BuiltinContext): number {\n const args = argv.slice(1).filter((a) => a !== \"-p\");\n if (args.length === 0) {\n for (const [name, value] of [...shell.aliases.entries()].sort()) {\n io.stdout.write(`alias ${name}=${shellQuote(value)}\\n`);\n }\n return 0;\n }\n let status = 0;\n for (const arg of args) {\n const eq = arg.indexOf(\"=\");\n if (eq < 0) {\n const value = shell.aliases.get(arg);\n if (value === undefined) {\n io.stderr.write(`alias: ${arg}: not found\\n`);\n status = 1;\n } else {\n io.stdout.write(`alias ${arg}=${shellQuote(value)}\\n`);\n }\n continue;\n }\n shell.aliases.set(arg.slice(0, eq), arg.slice(eq + 1));\n }\n return status;\n}\n\nexport function builtinUnalias({ shell, argv, io }: BuiltinContext): number {\n const args = argv.slice(1);\n if (args.includes(\"-a\")) {\n shell.aliases.clear();\n return 0;\n }\n let status = 0;\n for (const name of args) {\n if (!shell.aliases.delete(name)) {\n io.stderr.write(`unalias: ${name}: not found\\n`);\n status = 1;\n }\n }\n return status;\n}\n\nexport function builtinType({ shell, argv, io }: BuiltinContext): number {\n const args = argv.slice(1);\n const pathOnly = args.includes(\"-p\");\n const typeOnly = args.includes(\"-t\");\n const all = args.includes(\"-a\");\n const names = args.filter((a) => !a.startsWith(\"-\"));\n\n let status = 0;\n for (const name of names) {\n const found: string[] = [];\n\n if (shell.aliases.has(name)) {\n if (typeOnly) found.push(\"alias\");\n else if (!pathOnly) found.push(`${name} is aliased to \\`${shell.aliases.get(name)}'`);\n }\n if (shell.functions.has(name)) {\n if (typeOnly) found.push(\"function\");\n else if (!pathOnly) found.push(`${name} is a function`);\n }\n if (isBuiltinName(name)) {\n if (typeOnly) found.push(\"builtin\");\n else if (!pathOnly) found.push(`${name} is a shell builtin`);\n }\n const path = shell.kernel.which(name, shell.cwd, shell.vars.environment(), shell.cred);\n if (path) {\n if (typeOnly) found.push(\"file\");\n else if (pathOnly) found.push(path);\n else found.push(`${name} is ${path}`);\n }\n\n if (found.length === 0) {\n if (!pathOnly && !typeOnly) io.stderr.write(`type: ${name}: not found\\n`);\n status = 1;\n continue;\n }\n for (const line of all ? found : [found[0]!]) io.stdout.write(line + \"\\n\");\n }\n return status;\n}\n\nexport async function builtinCommand({ shell, argv, io }: BuiltinContext): Promise<number> {\n const args = argv.slice(1);\n const describe = args.includes(\"-v\") || args.includes(\"-V\");\n const verbose = args.includes(\"-V\");\n const rest = args.filter((a) => a !== \"-v\" && a !== \"-V\" && a !== \"-p\");\n\n if (describe) {\n let status = 0;\n for (const name of rest) {\n if (isBuiltinName(name)) {\n io.stdout.write(verbose ? `${name} is a shell builtin\\n` : `${name}\\n`);\n continue;\n }\n if (shell.functions.has(name)) {\n io.stdout.write(verbose ? `${name} is a function\\n` : `${name}\\n`);\n continue;\n }\n const path = shell.kernel.which(name, shell.cwd, shell.vars.environment(), shell.cred);\n if (path) io.stdout.write(verbose ? `${name} is ${path}\\n` : `${path}\\n`);\n else status = 1;\n }\n return status;\n }\n\n if (rest.length === 0) return 0;\n // Bypass functions and aliases: go straight to builtin or file.\n return await shell.kernel\n .spawn(rest, {\n cwd: shell.cwd,\n env: shell.vars.environment(),\n cred: shell.cred,\n ppid: shell.proc.pid,\n stdin: io.stdin,\n stdout: io.stdout,\n stderr: io.stderr,\n })\n .wait();\n}\n\nexport async function builtinBuiltin(ctx: BuiltinContext): Promise<number> {\n const { shell, argv, io } = ctx;\n const name = argv[1];\n if (name === undefined) return 0;\n const { getBuiltin } = await import(\"./index.js\");\n const fn = getBuiltin(name);\n if (!fn) {\n io.stderr.write(`builtin: ${name}: not a shell builtin\\n`);\n return 1;\n }\n return await fn({ shell, argv: argv.slice(1), io });\n}\n\nexport function builtinHash({ shell, argv, io }: BuiltinContext): number {\n const names = argv.slice(1).filter((a) => !a.startsWith(\"-\"));\n if (names.length === 0) {\n io.stdout.write(\"hits\\tcommand\\n\");\n return 0;\n }\n let status = 0;\n for (const name of names) {\n if (!shell.kernel.which(name, shell.cwd, shell.vars.environment(), shell.cred)) {\n io.stderr.write(`hash: ${name}: not found\\n`);\n status = 1;\n }\n }\n return status;\n}\n\nexport function builtinTrap({ shell, argv, io }: BuiltinContext): number {\n const args = argv.slice(1);\n\n if (args.length === 0 || args[0] === \"-p\") {\n for (const [signal, action] of shell.traps) {\n io.stdout.write(`trap -- ${shellQuote(action)} ${signal}\\n`);\n }\n return 0;\n }\n if (args[0] === \"-l\") {\n const entries = Object.entries(SIGNALS).sort((a, b) => a[1] - b[1]);\n let line = \"\";\n entries.forEach(([name, num], idx) => {\n line += `${String(num).padStart(2)}) ${name.padEnd(12)}`;\n if ((idx + 1) % 4 === 0) {\n io.stdout.write(line.trimEnd() + \"\\n\");\n line = \"\";\n }\n });\n if (line !== \"\") io.stdout.write(line.trimEnd() + \"\\n\");\n return 0;\n }\n\n const action = args[0]!;\n const signals = args.slice(1);\n if (signals.length === 0) {\n io.stderr.write(\"trap: usage: trap [-lp] [[arg] signal_spec ...]\\n\");\n return 2;\n }\n for (const signal of signals) {\n shell.setTrap(signal, action);\n }\n return 0;\n}\n\nexport function builtinJobs({ shell, argv, io }: BuiltinContext): number {\n const idsOnly = argv.includes(\"-p\");\n shell.jobs.forEach((job, index) => {\n const current = index === shell.jobs.length - 1 ? \"+\" : index === shell.jobs.length - 2 ? \"-\" : \" \";\n if (idsOnly) io.stdout.write(`${job.pgid}\\n`);\n else io.stdout.write(`[${job.id}]${current} ${job.state.padEnd(8)} ${job.command}\\n`);\n });\n return 0;\n}\n\nexport async function builtinWait({ shell, argv, io }: BuiltinContext): Promise<number> {\n void io;\n const specs = argv.slice(1).filter((a) => !a.startsWith(\"-\"));\n if (specs.length === 0) {\n const results = await Promise.all(shell.jobs.map((j) => j.promise));\n shell.reapJobs();\n return results.length ? 0 : 0;\n }\n let status = 0;\n for (const spec of specs) {\n const id = Number(spec.replace(/^%/, \"\"));\n const job = shell.jobs.find((j) => j.id === id || j.pgid === id);\n if (job) {\n status = await job.promise;\n continue;\n }\n const proc = shell.kernel.procs.get(id);\n if (proc) status = await proc.wait();\n }\n shell.reapJobs();\n return status;\n}\n\nexport async function builtinFg({ shell, argv, io }: BuiltinContext): Promise<number> {\n const spec = argv[1]?.replace(/^%/, \"\");\n const job = spec ? shell.jobs.find((j) => j.id === Number(spec)) : shell.jobs[shell.jobs.length - 1];\n if (!job) {\n io.stderr.write(\"fg: current: no such job\\n\");\n return 1;\n }\n io.stdout.write(job.command + \"\\n\");\n const status = await job.promise;\n shell.reapJobs();\n return status;\n}\n\nexport function builtinBg({ shell, argv, io }: BuiltinContext): number {\n const spec = argv[1]?.replace(/^%/, \"\");\n const job = spec ? shell.jobs.find((j) => j.id === Number(spec)) : shell.jobs[shell.jobs.length - 1];\n if (!job) {\n io.stderr.write(\"bg: current: no such job\\n\");\n return 1;\n }\n io.stdout.write(`[${job.id}] ${job.command} &\\n`);\n return 0;\n}\n\nexport function builtinDisown({ shell, argv }: BuiltinContext): number {\n const spec = argv[1]?.replace(/^%/, \"\");\n if (spec === undefined) {\n shell.jobs.length = 0;\n return 0;\n }\n const idx = shell.jobs.findIndex((j) => j.id === Number(spec));\n if (idx >= 0) shell.jobs.splice(idx, 1);\n return 0;\n}\n\nexport function builtinKill({ shell, argv, io }: BuiltinContext): number {\n const args = argv.slice(1);\n if (args.length === 0 || args[0] === \"-l\") {\n if (args[0] === \"-l\" && args[1] !== undefined) {\n const num = Number(args[1]);\n const name = Number.isFinite(num) ? SIGNAL_NAMES[num & 0x7f] : normalizeSignal(args[1]!);\n if (!name) {\n io.stderr.write(`kill: ${args[1]}: invalid signal specification\\n`);\n return 1;\n }\n io.stdout.write(name.replace(/^SIG/, \"\") + \"\\n\");\n return 0;\n }\n const names = Object.entries(SIGNALS)\n .sort((a, b) => a[1] - b[1])\n .map(([name, num]) => `${String(num).padStart(2)}) ${name}`);\n let line = \"\";\n names.forEach((entry, idx) => {\n line += entry.padEnd(16);\n if ((idx + 1) % 4 === 0) {\n io.stdout.write(line.trimEnd() + \"\\n\");\n line = \"\";\n }\n });\n if (line !== \"\") io.stdout.write(line.trimEnd() + \"\\n\");\n return 0;\n }\n\n let signal = \"SIGTERM\";\n let i = 0;\n if (args[0]!.startsWith(\"-\")) {\n const spec = args[0]!.slice(1);\n if (spec === \"s\" || spec === \"n\") {\n i = 1;\n const named = normalizeSignal(args[1] ?? \"\");\n if (named) signal = named;\n i = 2;\n } else {\n const named = normalizeSignal(spec);\n if (!named) {\n io.stderr.write(`kill: ${args[0]}: invalid signal specification\\n`);\n return 1;\n }\n signal = named;\n i = 1;\n }\n }\n\n let status = 0;\n for (const target of args.slice(i)) {\n if (target.startsWith(\"%\")) {\n const job = shell.jobs.find((j) => j.id === Number(target.slice(1)));\n if (job) continue;\n io.stderr.write(`kill: ${target}: no such job\\n`);\n status = 1;\n continue;\n }\n const pid = Number(target);\n if (!Number.isFinite(pid)) {\n io.stderr.write(`kill: ${target}: arguments must be process or job IDs\\n`);\n status = 1;\n continue;\n }\n if (shell.kernel.procs.signal(pid, signal) === 0) {\n io.stderr.write(`kill: (${pid}) - No such process\\n`);\n status = 1;\n }\n }\n return status;\n}\n\nexport function builtinDirs({ shell, argv, io }: BuiltinContext): number {\n if (argv.includes(\"-c\")) {\n shell.dirStack.length = 0;\n return 0;\n }\n const entries = [shell.cwd, ...shell.dirStack];\n const home = shell.vars.get(\"HOME\");\n const render = (p: string) => (home && p.startsWith(home) ? \"~\" + p.slice(home.length) : p);\n if (argv.includes(\"-v\")) {\n entries.forEach((entry, idx) => io.stdout.write(`${String(idx).padStart(2)} ${render(entry)}\\n`));\n return 0;\n }\n io.stdout.write(entries.map(render).join(\" \") + \"\\n\");\n return 0;\n}\n\nexport function builtinPushd({ shell, argv, io }: BuiltinContext): number {\n const target = argv[1];\n if (target === undefined) {\n const top = shell.dirStack[0];\n if (top === undefined) {\n io.stderr.write(\"pushd: no other directory\\n\");\n return 1;\n }\n const current = shell.cwd;\n try {\n shell.changeDirectory(top);\n } catch {\n io.stderr.write(`pushd: ${top}: No such file or directory\\n`);\n return 1;\n }\n shell.dirStack[0] = current;\n return builtinDirs({ shell, argv: [\"dirs\"], io });\n }\n const previous = shell.cwd;\n try {\n shell.changeDirectory(target);\n } catch {\n io.stderr.write(`pushd: ${target}: No such file or directory\\n`);\n return 1;\n }\n shell.dirStack.unshift(previous);\n return builtinDirs({ shell, argv: [\"dirs\"], io });\n}\n\nexport function builtinPopd({ shell, argv, io }: BuiltinContext): number {\n const top = shell.dirStack.shift();\n if (top === undefined) {\n io.stderr.write(\"popd: directory stack empty\\n\");\n return 1;\n }\n try {\n shell.changeDirectory(top);\n } catch {\n io.stderr.write(`popd: ${top}: No such file or directory\\n`);\n return 1;\n }\n return builtinDirs({ shell, argv: [\"dirs\"], io });\n}\n\nexport function builtinHistory({ shell, argv, io }: BuiltinContext): number {\n const args = argv.slice(1);\n if (args.includes(\"-c\")) {\n shell.history.length = 0;\n return 0;\n }\n if (args.includes(\"-w\")) {\n const file = shell.vars.get(\"HISTFILE\") ?? P.join(shell.vars.get(\"HOME\") ?? \"/root\", \".sh_history\");\n shell.kernel.vfs.writeFile(file, shell.history.join(\"\\n\") + \"\\n\", { cred: shell.cred, mode: 0o600 });\n return 0;\n }\n const limit = Number(args.find((a) => /^\\d+$/.test(a)) ?? shell.history.length);\n const start = Math.max(0, shell.history.length - limit);\n shell.history.slice(start).forEach((entry, idx) => {\n io.stdout.write(`${String(start + idx + 1).padStart(5)} ${entry}\\n`);\n });\n return 0;\n}\n\nexport function builtinHelp({ argv, io }: BuiltinContext): number {\n const topic = argv[1];\n if (topic) {\n if (isBuiltinName(topic)) {\n io.stdout.write(`${topic}: ${topic} [arguments]\\n A shell builtin. See the SandboxedJS README for details.\\n`);\n return 0;\n }\n io.stderr.write(`help: no help topics match \\`${topic}'\\n`);\n return 1;\n }\n\n io.stdout.write(\"SandboxedJS shell, a POSIX-compatible shell running inside Node.js.\\n\");\n io.stdout.write(\"These shell commands are defined internally. Type `help name' to find out more.\\n\\n\");\n const names = builtinNames();\n const columns = 4;\n const width = Math.max(...names.map((n) => n.length)) + 2;\n for (let i = 0; i < names.length; i += columns) {\n io.stdout.write(\n names\n .slice(i, i + columns)\n .map((n) => n.padEnd(width))\n .join(\"\")\n .trimEnd() + \"\\n\",\n );\n }\n io.stdout.write(\"\\nRun `ls /usr/bin' to see the external commands available.\\n\");\n return 0;\n}\n\nexport function builtinEnable({ argv, io }: BuiltinContext): number {\n const names = argv.slice(1).filter((a) => !a.startsWith(\"-\"));\n if (names.length === 0) {\n for (const name of builtinNames()) io.stdout.write(`enable ${name}\\n`);\n }\n return 0;\n}\n\nexport function builtinLogout({ shell }: BuiltinContext): number {\n return shell.throwExit(0);\n}\n","/** Registry of shell builtins. Lookup order in the interpreter is: function, builtin, then `$PATH`. */\n\nimport type { Shell, ShellIO } from \"../interpreter.js\";\nimport * as core from \"./core.js\";\nimport * as vars from \"./vars.js\";\nimport * as misc from \"./misc.js\";\n\nexport interface BuiltinContext {\n shell: Shell;\n /** Full argv, including argv[0]. */\n argv: string[];\n io: ShellIO;\n}\n\nexport type Builtin = (ctx: BuiltinContext) => Promise<number> | number;\n\nconst BUILTINS: Record<string, Builtin> = {\n // Control flow and shell state.\n \":\": core.builtinColon,\n \".\": core.builtinSource,\n source: core.builtinSource,\n cd: core.builtinCd,\n pwd: core.builtinPwd,\n echo: core.builtinEcho,\n printf: core.builtinPrintf,\n true: core.builtinTrue,\n false: core.builtinFalse,\n test: core.builtinTest,\n \"[\": core.builtinTest,\n exit: core.builtinExit,\n return: core.builtinReturn,\n break: core.builtinBreak,\n continue: core.builtinContinue,\n shift: core.builtinShift,\n eval: core.builtinEval,\n exec: core.builtinExec,\n umask: core.builtinUmask,\n times: core.builtinTimes,\n let: core.builtinLet,\n ulimit: core.builtinUlimit,\n\n // Variables and options.\n export: vars.builtinExport,\n unset: vars.builtinUnset,\n readonly: vars.builtinReadonly,\n set: vars.builtinSet,\n shopt: vars.builtinShopt,\n declare: vars.builtinDeclare,\n typeset: vars.builtinDeclare,\n local: vars.builtinLocal,\n read: vars.builtinRead,\n mapfile: vars.builtinMapfile,\n readarray: vars.builtinMapfile,\n getopts: vars.builtinGetopts,\n\n // Everything else.\n alias: misc.builtinAlias,\n unalias: misc.builtinUnalias,\n type: misc.builtinType,\n command: misc.builtinCommand,\n builtin: misc.builtinBuiltin,\n hash: misc.builtinHash,\n trap: misc.builtinTrap,\n jobs: misc.builtinJobs,\n wait: misc.builtinWait,\n fg: misc.builtinFg,\n bg: misc.builtinBg,\n disown: misc.builtinDisown,\n kill: misc.builtinKill,\n dirs: misc.builtinDirs,\n pushd: misc.builtinPushd,\n popd: misc.builtinPopd,\n history: misc.builtinHistory,\n help: misc.builtinHelp,\n enable: misc.builtinEnable,\n logout: misc.builtinLogout,\n};\n\n/**\n * POSIX \"special builtins\": a variable assignment on one of these persists\n * after the command, and an error in one is fatal to a non-interactive shell.\n */\nconst SPECIAL = new Set([\n \":\",\n \".\",\n \"source\",\n \"break\",\n \"continue\",\n \"eval\",\n \"exec\",\n \"exit\",\n \"export\",\n \"readonly\",\n \"return\",\n \"set\",\n \"shift\",\n \"times\",\n \"trap\",\n \"unset\",\n]);\n\nexport function getBuiltin(name: string): Builtin | undefined {\n return BUILTINS[name];\n}\n\nexport function isBuiltinName(name: string): boolean {\n return name in BUILTINS;\n}\n\nexport function isSpecialBuiltin(name: string): boolean {\n return SPECIAL.has(name);\n}\n\nexport function builtinNames(): string[] {\n return Object.keys(BUILTINS).sort();\n}\n","/**\n * The container's virtual filesystem.\n *\n * Real file content lives in a Nodepod `MemoryVolume`, which is 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 { MemoryVolume } from \"@scelar/nodepod/headless\";\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: MemoryVolume) {}\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","/**\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 kernel: the object that owns the filesystem, the process table, the user\n * database and the executable namespace, and knows how to turn an `argv` into\n * a running process.\n *\n * Executables in `$PATH` are real files. Built-in programs are installed as\n * tiny stub files whose shebang points at the in-kernel implementation, so\n * `ls -l /usr/bin/grep`, `which grep` and `file /usr/bin/grep` all behave, and\n * a user-written script in `/usr/local/bin` is dispatched by exactly the same\n * lookup path.\n */\n\nimport type { Nodepod } from \"@scelar/nodepod/headless\";\nimport { Vfs, ROOT_CRED, type Cred } from \"../fs/vfs.js\";\nimport { X_OK, R_OK } from \"../fs/mode.js\";\nimport { SysError } from \"../fs/errno.js\";\nimport * as P from \"../fs/path.js\";\nimport {\n BufferSink,\n NullInput,\n NullOutput,\n Pipe,\n type InputStream,\n type OutputStream,\n type Stdio,\n} from \"../fs/streams.js\";\nimport { Process, ProcessTable, type Env, type ProcessKind } from \"./process.js\";\nimport { UserDatabase } from \"./users.js\";\nimport { CommandRegistry, createContext, EXIT_NOT_EXECUTABLE, EXIT_NOT_FOUND, type Command } from \"./command.js\";\nimport type { NetworkStack } from \"../net/stack.js\";\n\n/** Marker interpreter used by the stub files that stand in for built-ins. */\nexport const BUILTIN_INTERPRETER = \"/proc/self/exe\";\n\nexport interface KernelOptions {\n pod: Nodepod;\n hostname?: string;\n /** Login user for interactive sessions. Defaults to `root`. */\n user?: string;\n env?: Env;\n /** Total \"RAM\" reported by `free`, `/proc/meminfo` and `top`. */\n memoryBytes?: number;\n /** Simulated CPU count for `nproc` and `/proc/cpuinfo`. */\n cpus?: number;\n now?: () => number;\n}\n\nexport interface RunOptions {\n cwd?: string;\n env?: Env;\n cred?: Cred;\n stdin?: InputStream | string | Uint8Array;\n stdout?: OutputStream;\n stderr?: OutputStream;\n ppid?: number;\n pgid?: number;\n kind?: ProcessKind;\n tty?: string | null;\n /** Wall-clock budget; the process is sent SIGKILL when it expires. */\n timeoutMs?: number;\n}\n\nexport interface RunResult {\n exitCode: number;\n stdout: string;\n stderr: string;\n pid: number;\n signal: string | null;\n timedOut: boolean;\n}\n\nexport type ExecutableKind = \"builtin\" | \"script\" | \"unknown\";\n\nexport interface ResolvedExecutable {\n kind: ExecutableKind;\n /** Absolute path of the file that was found. */\n path: string;\n /** Present when `kind === \"builtin\"`. */\n command?: Command;\n /** Interpreter argv from a `#!` line, when `kind === \"script\"`. */\n interpreter?: string[];\n}\n\nexport interface MountEntry {\n device: string;\n mountpoint: string;\n fstype: string;\n options: string;\n totalBytes: number;\n}\n\nexport class Kernel {\n readonly vfs: Vfs;\n readonly procs = new ProcessTable();\n readonly commands = new CommandRegistry();\n readonly users: UserDatabase;\n readonly pod: Nodepod;\n readonly bootTime: number;\n readonly memoryBytes: number;\n readonly cpus: number;\n readonly now: () => number;\n\n /** Populated by the network module once it is attached. */\n net!: NetworkStack;\n\n /** init — pid 1, the ancestor of everything. */\n readonly init: Process;\n\n private readonly builtinByPath = new Map<string, string>();\n private readonly mounts: MountEntry[] = [];\n private disposed = false;\n private _current: Process | null = null;\n\n /**\n * The process whose builtin is currently on the stack. `/proc/self` resolves\n * through this. It is set around each dispatch, so a command that reads\n * `/proc/self/...` synchronously always sees itself.\n */\n get currentProcess(): Process | null {\n return this._current;\n }\n\n constructor(opts: KernelOptions) {\n this.pod = opts.pod;\n this.vfs = new Vfs(opts.pod.volume);\n this.users = new UserDatabase(this.vfs);\n this.now = opts.now ?? Date.now;\n this.bootTime = this.now();\n this.memoryBytes = opts.memoryBytes ?? 2 * 1024 * 1024 * 1024;\n this.cpus = opts.cpus ?? 4;\n\n this.init = this.procs.create({\n argv: [\"/sbin/init\"],\n cwd: \"/\",\n env: opts.env ?? {},\n cred: ROOT_CRED,\n ppid: 0,\n kind: \"init\",\n });\n this.init.state = \"S\";\n\n this.addMount({ device: \"sandboxedjs\", mountpoint: \"/\", fstype: \"overlay\", options: \"rw,relatime\", totalBytes: 8 * 1024 * 1024 * 1024 });\n this.addMount({ device: \"proc\", mountpoint: \"/proc\", fstype: \"proc\", options: \"rw,nosuid,nodev,noexec,relatime\", totalBytes: 0 });\n this.addMount({ device: \"sysfs\", mountpoint: \"/sys\", fstype: \"sysfs\", options: \"rw,nosuid,nodev,noexec,relatime\", totalBytes: 0 });\n this.addMount({ device: \"devtmpfs\", mountpoint: \"/dev\", fstype: \"devtmpfs\", options: \"rw,nosuid,relatime\", totalBytes: 64 * 1024 * 1024 });\n this.addMount({ device: \"tmpfs\", mountpoint: \"/tmp\", fstype: \"tmpfs\", options: \"rw,nosuid,nodev\", totalBytes: 512 * 1024 * 1024 });\n }\n\n // ── system identity ──────────────────────────────────────────────────────\n\n get hostname(): string {\n try {\n return this.vfs.readText(\"/etc/hostname\").trim() || \"sandbox\";\n } catch {\n return \"sandbox\";\n }\n }\n\n set hostname(value: string) {\n this.vfs.writeFile(\"/etc/hostname\", value + \"\\n\", { privileged: true });\n }\n\n get uptimeMs(): number {\n return this.now() - this.bootTime;\n }\n\n addMount(entry: MountEntry): void {\n const existing = this.mounts.findIndex((m) => m.mountpoint === entry.mountpoint);\n if (existing >= 0) this.mounts[existing] = entry;\n else this.mounts.push(entry);\n }\n\n removeMount(mountpoint: string): boolean {\n const i = this.mounts.findIndex((m) => m.mountpoint === mountpoint);\n if (i < 0) return false;\n this.mounts.splice(i, 1);\n return true;\n }\n\n mountTable(): MountEntry[] {\n return this.mounts.slice();\n }\n\n // ── executable namespace ─────────────────────────────────────────────────\n\n /**\n * Install a command as a real file in `$PATH`. The file holds a shebang that\n * points at the in-kernel dispatcher, which is what `resolve` looks for.\n */\n installCommand(cmd: Command, dir = \"/usr/bin\"): void {\n this.commands.register(cmd);\n const names = [cmd.name, ...(cmd.aliases ?? [])];\n for (const name of names) {\n const path = cmd.path && name === cmd.name ? cmd.path : P.join(dir, name);\n const parent = P.dirname(path);\n if (!this.vfs.lexists(parent)) this.vfs.mkdir(parent, { recursive: true, mode: 0o755 });\n this.vfs.writeFile(path, `#!${BUILTIN_INTERPRETER} ${cmd.name}\\n`, { privileged: true, mode: 0o755 });\n this.vfs.chmod(path, 0o755);\n this.builtinByPath.set(path, cmd.name);\n }\n }\n\n installCommands(cmds: Command[], dir = \"/usr/bin\"): void {\n for (const c of cmds) this.installCommand(c, dir);\n }\n\n /** Directories from `$PATH`, with a sane fallback. */\n pathDirs(env: Env): string[] {\n const raw = env.PATH ?? \"/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin\";\n return raw.split(\":\").filter((d) => d !== \"\");\n }\n\n /**\n * Find `name` the way `execvp` does. Returns null when nothing matches.\n */\n resolveExecutable(name: string, cwd: string, env: Env, cred: Cred = ROOT_CRED): ResolvedExecutable | null {\n const candidates: string[] = [];\n if (name.includes(\"/\")) {\n candidates.push(P.resolve(cwd, name));\n } else {\n for (const dir of this.pathDirs(env)) candidates.push(P.join(dir, name));\n }\n\n for (const candidate of candidates) {\n let real: string;\n try {\n real = this.vfs.realpath(candidate, cred);\n } catch {\n continue;\n }\n let st;\n try {\n st = this.vfs.stat(real, { cred });\n } catch {\n continue;\n }\n if (st.isDirectory()) continue;\n if (!this.vfs.permitted(st, X_OK, cred)) continue;\n\n const builtinName = this.builtinByPath.get(real) ?? this.builtinByPath.get(candidate);\n if (builtinName) {\n const command = this.commands.get(builtinName);\n if (command) return { kind: \"builtin\", path: candidate, command };\n }\n\n // Read the shebang.\n let head = \"\";\n try {\n if (this.vfs.permitted(st, R_OK, cred)) {\n head = new TextDecoder().decode(this.vfs.readFile(real, cred).subarray(0, 256));\n }\n } catch {\n /* unreadable but executable — fall through */\n }\n\n if (head.startsWith(\"#!\")) {\n const lineEnd = head.indexOf(\"\\n\");\n const line = (lineEnd >= 0 ? head.slice(2, lineEnd) : head.slice(2)).trim();\n const parts = line.split(/\\s+/).filter(Boolean);\n if (parts[0] === BUILTIN_INTERPRETER && parts[1]) {\n const command = this.commands.get(parts[1]);\n if (command) return { kind: \"builtin\", path: candidate, command };\n }\n if (parts.length) return { kind: \"script\", path: real, interpreter: parts };\n }\n\n // No shebang: pick an interpreter from the extension, as a shell would.\n const ext = P.extname(real);\n if (ext === \".js\" || ext === \".mjs\" || ext === \".cjs\") return { kind: \"script\", path: real, interpreter: [\"/usr/bin/node\"] };\n if (ext === \".py\") return { kind: \"script\", path: real, interpreter: [\"/usr/bin/python3\"] };\n return { kind: \"script\", path: real, interpreter: [\"/bin/sh\"] };\n }\n\n return null;\n }\n\n /** `which`-style lookup that only reports the path. */\n which(name: string, cwd: string, env: Env, cred: Cred = ROOT_CRED): string | null {\n if (name.includes(\"/\")) {\n const abs = P.resolve(cwd, name);\n try {\n const st = this.vfs.stat(abs, { cred });\n return !st.isDirectory() && this.vfs.permitted(st, X_OK, cred) ? abs : null;\n } catch {\n return null;\n }\n }\n for (const dir of this.pathDirs(env)) {\n const candidate = P.join(dir, name);\n try {\n const st = this.vfs.stat(candidate, { cred });\n if (!st.isDirectory() && this.vfs.permitted(st, X_OK, cred)) return candidate;\n } catch {\n /* keep looking */\n }\n }\n return null;\n }\n\n /** Every executable name reachable through `$PATH`, for tab completion. */\n executableNames(env: Env, cred: Cred = ROOT_CRED): string[] {\n const out = new Set<string>();\n for (const dir of this.pathDirs(env)) {\n let names: string[];\n try {\n names = this.vfs.readdir(dir, cred);\n } catch {\n continue;\n }\n for (const n of names) out.add(n);\n }\n return [...out].sort();\n }\n\n // ── process creation ─────────────────────────────────────────────────────\n\n private toInputStream(stdin: RunOptions[\"stdin\"]): InputStream {\n if (stdin === undefined) return new NullInput();\n if (typeof stdin === \"string\" || stdin instanceof Uint8Array) return Pipe.from(stdin);\n return stdin;\n }\n\n /**\n * Create a process for `argv` and start it. Returns the process immediately;\n * `proc.wait()` resolves with the exit code.\n */\n spawn(argv: string[], opts: RunOptions = {}): Process {\n const parent = opts.ppid !== undefined ? this.procs.get(opts.ppid) : this.init;\n const cwd = opts.cwd ?? parent?.cwd ?? \"/\";\n const env = opts.env ?? { ...(parent?.env ?? {}) };\n const cred = opts.cred ?? parent?.cred ?? ROOT_CRED;\n\n const proc = this.procs.create({\n argv,\n cwd,\n env,\n cred,\n ppid: opts.ppid ?? parent?.pid ?? 1,\n pgid: opts.pgid,\n kind: opts.kind ?? \"command\",\n tty: opts.tty ?? null,\n stdio: {\n stdin: this.toInputStream(opts.stdin),\n stdout: opts.stdout ?? new NullOutput(),\n stderr: opts.stderr ?? new NullOutput(),\n },\n });\n\n let timer: ReturnType<typeof setTimeout> | undefined;\n if (opts.timeoutMs !== undefined) {\n timer = setTimeout(() => {\n proc.deliver(\"SIGKILL\");\n }, opts.timeoutMs);\n }\n\n void this.dispatch(proc)\n .then((code) => {\n proc.exit(code);\n })\n .catch((e) => {\n try {\n proc.stderr.write(`${proc.comm}: ${e instanceof Error ? e.message : String(e)}\\n`);\n } catch {\n /* stderr gone */\n }\n proc.exit(1);\n })\n .finally(() => {\n if (timer) clearTimeout(timer);\n // Reap after the waiters have run, so `ps` shows live processes only\n // rather than an ever-growing list of zombies.\n queueMicrotask(() => {\n if (proc.children.size === 0) this.procs.remove(proc.pid);\n });\n });\n\n return proc;\n }\n\n /** Run to completion and collect stdout/stderr. */\n async run(argv: string[], opts: RunOptions = {}): Promise<RunResult> {\n const out = opts.stdout ?? new BufferSink();\n const err = opts.stderr ?? new BufferSink();\n const proc = this.spawn(argv, { ...opts, stdout: out, stderr: err });\n const exitCode = await proc.wait();\n out.end();\n err.end();\n return {\n exitCode,\n stdout: out instanceof BufferSink ? out.text() : \"\",\n stderr: err instanceof BufferSink ? err.text() : \"\",\n pid: proc.pid,\n signal: proc.termSignal,\n timedOut: proc.termSignal === \"SIGKILL\" && opts.timeoutMs !== undefined,\n };\n }\n\n /**\n * Resolve `proc.argv` and execute it in-process. Interpreted scripts are\n * dispatched by re-entering with the interpreter's argv, up to a small depth\n * so a self-referential shebang cannot loop forever.\n */\n private async dispatch(proc: Process, depth = 0): Promise<number> {\n if (depth > 8) {\n proc.stderr.write(`${proc.comm}: too many levels of interpreter indirection\\n`);\n return EXIT_NOT_EXECUTABLE;\n }\n\n const name = proc.argv[0] ?? \"\";\n if (name === \"\") return 0;\n\n const resolved = this.resolveExecutable(name, proc.cwd, proc.env, proc.cred);\n if (!resolved) {\n // Distinguish \"not found\" from \"found but not executable\", like bash.\n const direct = name.includes(\"/\") ? P.resolve(proc.cwd, name) : null;\n if (direct && this.vfs.lexists(direct)) {\n proc.stderr.write(`${name}: Permission denied\\n`);\n return EXIT_NOT_EXECUTABLE;\n }\n proc.stderr.write(`${name}: command not found\\n`);\n return EXIT_NOT_FOUND;\n }\n\n if (resolved.kind === \"builtin\" && resolved.command) {\n const ctx = createContext({ argv: proc.argv, proc, kernel: this });\n const previous = this._current;\n this._current = proc;\n try {\n return await resolved.command.run(ctx);\n } finally {\n this._current = previous;\n }\n }\n\n if (resolved.kind === \"script\" && resolved.interpreter) {\n const [interp, ...interpArgs] = resolved.interpreter;\n proc.argv = [interp!, ...interpArgs, resolved.path, ...proc.argv.slice(1)];\n return await this.dispatch(proc, depth + 1);\n }\n\n proc.stderr.write(`${name}: cannot execute binary file: Exec format error\\n`);\n return EXIT_NOT_EXECUTABLE;\n }\n\n /** Convenience for internal callers that just want the text output. */\n async capture(argv: string[], opts: RunOptions = {}): Promise<string> {\n const res = await this.run(argv, opts);\n return res.stdout;\n }\n\n // ── lifecycle ────────────────────────────────────────────────────────────\n\n dispose(): void {\n if (this.disposed) return;\n this.disposed = true;\n for (const proc of this.procs.list()) {\n if (proc.pid !== 1) proc.deliver(\"SIGKILL\");\n }\n this.procs.clear();\n }\n\n get isDisposed(): boolean {\n return this.disposed;\n }\n\n assertActive(): void {\n if (this.disposed) throw new SysError(\"ENODEV\", \"kernel\", \"/\");\n }\n}\n\nexport type { Stdio };\n","/**\n * Byte streams for stdin/stdout/stderr, pipelines and redirections.\n *\n * Everything here is promise-based rather than Node-stream based: commands are\n * plain async functions, a pipeline is just a chain of `Pipe` objects, and a\n * closed reader turns further writes into `EPIPE` the way a real pipe does.\n */\n\nimport type { Vfs, Cred } from \"./vfs.js\";\nimport { SysError } from \"./errno.js\";\n\nconst encoder = new TextEncoder();\nconst decoder = new TextDecoder();\n\nexport function toBytes(data: Uint8Array | string): Uint8Array {\n return typeof data === \"string\" ? encoder.encode(data) : data;\n}\n\nexport function toText(data: Uint8Array | string): string {\n return typeof data === \"string\" ? data : decoder.decode(data);\n}\n\nexport interface OutputStream {\n write(data: Uint8Array | string): void;\n end(): void;\n /** True once the far end went away — producers should stop. */\n readonly closed: boolean;\n isTTY: boolean;\n /** Terminal width, when this is a TTY. */\n columns?: number;\n rows?: number;\n}\n\nexport interface InputStream {\n /** Resolves to null at EOF. `size` is a maximum, not a guarantee. */\n read(size?: number): Promise<Uint8Array | null>;\n readAll(): Promise<Uint8Array>;\n /** One line without its terminator; null at EOF. */\n readLine(): Promise<string | null>;\n /** Bytes already buffered, for non-blocking peeks. */\n readonly available: number;\n close(): void;\n isTTY: boolean;\n /**\n * True when the far end is a live caller who may never signal EOF — a\n * terminal, or the `stdin` pipe of `Container.spawn`. Programs that would\n * otherwise slurp stdin before starting must not block on these.\n */\n readonly interactive?: boolean;\n}\n\nexport interface Stdio {\n stdin: InputStream;\n stdout: OutputStream;\n stderr: OutputStream;\n}\n\nfunction concat(chunks: Uint8Array[], total: number): Uint8Array {\n const out = new Uint8Array(total);\n let off = 0;\n for (const c of chunks) {\n out.set(c, off);\n off += c.length;\n }\n return out;\n}\n\n/** An in-memory pipe: writable on one end, readable on the other. */\nexport class Pipe implements InputStream, OutputStream {\n private chunks: Uint8Array[] = [];\n private buffered = 0;\n private writerClosed = false;\n private readerClosed = false;\n private wakers: Array<() => void> = [];\n\n isTTY = false;\n /** Set on pipes owned by an outside caller, who may never call `end()`. */\n interactive = false;\n columns: number | undefined;\n rows: number | undefined;\n\n get closed(): boolean {\n return this.readerClosed;\n }\n\n get ended(): boolean {\n return this.writerClosed;\n }\n\n get available(): number {\n return this.buffered;\n }\n\n write(data: Uint8Array | string): void {\n if (this.readerClosed) throw new SysError(\"EPIPE\", \"write\");\n if (this.writerClosed) return;\n const bytes = toBytes(data);\n if (bytes.length === 0) return;\n this.chunks.push(bytes);\n this.buffered += bytes.length;\n this.wake();\n }\n\n end(): void {\n if (this.writerClosed) return;\n this.writerClosed = true;\n this.wake();\n }\n\n close(): void {\n this.readerClosed = true;\n this.chunks = [];\n this.buffered = 0;\n this.wake();\n }\n\n private wake(): void {\n const w = this.wakers;\n this.wakers = [];\n for (const fn of w) fn();\n }\n\n private waitForData(): Promise<void> {\n if (this.buffered > 0 || this.writerClosed || this.readerClosed) return Promise.resolve();\n return new Promise<void>((resolve) => this.wakers.push(resolve));\n }\n\n async read(size = Infinity): Promise<Uint8Array | null> {\n await this.waitForData();\n if (this.buffered === 0) return null;\n if (size === Infinity || size >= this.buffered) {\n const out = concat(this.chunks, this.buffered);\n this.chunks = [];\n this.buffered = 0;\n return out;\n }\n const out = new Uint8Array(size);\n let filled = 0;\n while (filled < size && this.chunks.length) {\n const head = this.chunks[0]!;\n const take = Math.min(head.length, size - filled);\n out.set(head.subarray(0, take), filled);\n filled += take;\n if (take === head.length) this.chunks.shift();\n else this.chunks[0] = head.subarray(take);\n }\n this.buffered -= filled;\n return out;\n }\n\n async readAll(): Promise<Uint8Array> {\n const parts: Uint8Array[] = [];\n let total = 0;\n for (;;) {\n const chunk = await this.read();\n if (chunk === null) break;\n parts.push(chunk);\n total += chunk.length;\n }\n return concat(parts, total);\n }\n\n private lineRemainder = \"\";\n\n async readLine(): Promise<string | null> {\n for (;;) {\n const idx = this.lineRemainder.indexOf(\"\\n\");\n if (idx >= 0) {\n const line = this.lineRemainder.slice(0, idx);\n this.lineRemainder = this.lineRemainder.slice(idx + 1);\n return line;\n }\n const chunk = await this.read();\n if (chunk === null) {\n if (this.lineRemainder.length > 0) {\n const line = this.lineRemainder;\n this.lineRemainder = \"\";\n return line;\n }\n return null;\n }\n this.lineRemainder += decoder.decode(chunk);\n }\n }\n\n /** Seed the pipe with content then close it — handy for here-docs. */\n static from(data: Uint8Array | string): Pipe {\n const p = new Pipe();\n p.write(data);\n p.end();\n return p;\n }\n\n static empty(): Pipe {\n const p = new Pipe();\n p.end();\n return p;\n }\n}\n\n/** Discards everything; `/dev/null` as an output stream. */\nexport class NullOutput implements OutputStream {\n readonly closed = false;\n isTTY = false;\n write(): void {}\n end(): void {}\n}\n\n/** Always at EOF; `/dev/null` as an input stream. */\nexport class NullInput implements InputStream {\n readonly available = 0;\n isTTY = false;\n async read(): Promise<null> {\n return null;\n }\n async readAll(): Promise<Uint8Array> {\n return new Uint8Array(0);\n }\n async readLine(): Promise<null> {\n return null;\n }\n close(): void {}\n}\n\n/** Collects everything written, for `exec()` and command substitution. */\nexport class BufferSink implements OutputStream {\n private chunks: Uint8Array[] = [];\n private total = 0;\n private _closed = false;\n isTTY = false;\n columns: number | undefined;\n rows: number | undefined;\n\n constructor(private readonly onWrite?: (chunk: Uint8Array) => void) {}\n\n get closed(): boolean {\n return this._closed;\n }\n\n write(data: Uint8Array | string): void {\n if (this._closed) return;\n const bytes = toBytes(data);\n if (bytes.length === 0) return;\n this.chunks.push(bytes);\n this.total += bytes.length;\n this.onWrite?.(bytes);\n }\n\n end(): void {\n this._closed = true;\n }\n\n bytes(): Uint8Array {\n return concat(this.chunks, this.total);\n }\n\n text(): string {\n return decoder.decode(this.bytes());\n }\n\n get length(): number {\n return this.total;\n }\n\n reset(): void {\n this.chunks = [];\n this.total = 0;\n }\n}\n\n/** Forwards each write to a callback — used to stream into a terminal. */\nexport class CallbackSink implements OutputStream {\n private _closed = false;\n isTTY: boolean;\n columns: number | undefined;\n rows: number | undefined;\n\n constructor(\n private readonly sink: (text: string) => void,\n opts: { isTTY?: boolean; columns?: number; rows?: number } = {},\n ) {\n this.isTTY = opts.isTTY ?? false;\n this.columns = opts.columns;\n this.rows = opts.rows;\n }\n\n get closed(): boolean {\n return this._closed;\n }\n\n write(data: Uint8Array | string): void {\n if (this._closed) return;\n this.sink(toText(data));\n }\n\n end(): void {\n this._closed = true;\n }\n}\n\n/** Fan-out, for `tee` and for `2>&1`-style duplication. */\nexport class TeeOutput implements OutputStream {\n constructor(private readonly targets: OutputStream[]) {}\n get closed(): boolean {\n return this.targets.every((t) => t.closed);\n }\n isTTY = false;\n write(data: Uint8Array | string): void {\n for (const t of this.targets) {\n if (!t.closed) t.write(data);\n }\n }\n end(): void {\n for (const t of this.targets) t.end();\n }\n}\n\n/**\n * Writes into a VFS file. Buffers in memory and flushes on every write so a\n * long-running redirect (`cmd > log &`) is observable while it runs.\n */\nexport class FileOutput implements OutputStream {\n private _closed = false;\n isTTY = false;\n\n constructor(\n private readonly vfs: Vfs,\n private readonly path: string,\n private readonly opts: { append?: boolean; cred?: Cred; mode?: number } = {},\n ) {\n if (!opts.append) {\n this.vfs.writeFile(path, new Uint8Array(0), { cred: opts.cred, mode: opts.mode ?? 0o666 });\n } else if (!this.vfs.lexists(path)) {\n this.vfs.writeFile(path, new Uint8Array(0), { cred: opts.cred, mode: opts.mode ?? 0o666 });\n }\n }\n\n get closed(): boolean {\n return this._closed;\n }\n\n write(data: Uint8Array | string): void {\n if (this._closed) return;\n this.vfs.appendFile(this.path, toBytes(data), { cred: this.opts.cred });\n }\n\n end(): void {\n this._closed = true;\n }\n}\n\n/** Reads a VFS file as an input stream, for `cmd < file`. */\nexport class FileInput implements InputStream {\n private pipe: Pipe;\n isTTY = false;\n\n constructor(vfs: Vfs, path: string, cred?: Cred) {\n this.pipe = Pipe.from(vfs.readFile(path, cred));\n }\n\n get available(): number {\n return this.pipe.available;\n }\n read(size?: number): Promise<Uint8Array | null> {\n return this.pipe.read(size);\n }\n readAll(): Promise<Uint8Array> {\n return this.pipe.readAll();\n }\n readLine(): Promise<string | null> {\n return this.pipe.readLine();\n }\n close(): void {\n this.pipe.close();\n }\n}\n\n/** Convenience factory for a fully buffered stdio triple. */\nexport function captureStdio(stdin?: Uint8Array | string): {\n stdio: Stdio;\n out: BufferSink;\n err: BufferSink;\n} {\n const out = new BufferSink();\n const err = new BufferSink();\n const input = stdin === undefined ? new NullInput() : Pipe.from(stdin);\n return { stdio: { stdin: input, stdout: out, stderr: err }, out, err };\n}\n\n/** Read every line of a stream, handling a missing trailing newline. */\nexport async function* lines(input: InputStream): AsyncGenerator<string> {\n for (;;) {\n const line = await input.readLine();\n if (line === null) return;\n yield line;\n }\n}\n","/**\n * The process table.\n *\n * Processes here are cooperative JavaScript tasks, not OS processes, but they\n * carry the state Linux tooling expects to see: pid/ppid/pgid/sid, a state\n * letter, credentials, a cwd, an environment, and an exit status that encodes\n * the killing signal. `ps`, `kill`, `jobs` and `/proc` all read from here.\n */\n\nimport type { Cred } from \"../fs/vfs.js\";\nimport type { InputStream, OutputStream, Stdio } from \"../fs/streams.js\";\nimport { NullInput, NullOutput } from \"../fs/streams.js\";\nimport { FATAL_SIGNALS, STOP_SIGNALS, UNCATCHABLE, exitCodeForSignal, normalizeSignal } from \"./signals.js\";\n\nexport type ProcessState = \"R\" | \"S\" | \"D\" | \"T\" | \"Z\" | \"X\";\n\nexport type Env = Record<string, string>;\n\nexport interface ProcessOptions {\n argv: string[];\n cwd: string;\n env: Env;\n cred: Cred;\n ppid?: number;\n pgid?: number;\n sid?: number;\n stdio?: Partial<Stdio>;\n tty?: string | null;\n /** Marks the process as a shell builtin frame rather than a real command. */\n kind?: ProcessKind;\n}\n\nexport type ProcessKind = \"init\" | \"shell\" | \"builtin\" | \"command\" | \"node\" | \"python\" | \"script\";\n\nlet nextPid = 1;\n\nexport class Process {\n readonly pid: number;\n ppid: number;\n pgid: number;\n sid: number;\n argv: string[];\n cwd: string;\n env: Env;\n cred: Cred;\n kind: ProcessKind;\n tty: string | null;\n\n state: ProcessState = \"R\";\n exitCode: number | null = null;\n /** Signal that terminated the process, if any. */\n termSignal: string | null = null;\n readonly startTime = Date.now();\n cpuMs = 0;\n\n stdin: InputStream;\n stdout: OutputStream;\n stderr: OutputStream;\n\n readonly children = new Set<Process>();\n private readonly aborter = new AbortController();\n private readonly exitWaiters: Array<(code: number) => void> = [];\n private readonly signalHandlers = new Map<string, \"default\" | \"ignore\" | ((sig: string) => void)>();\n\n constructor(opts: ProcessOptions) {\n this.pid = nextPid++;\n this.ppid = opts.ppid ?? 0;\n this.pgid = opts.pgid ?? this.pid;\n this.sid = opts.sid ?? this.pid;\n this.argv = opts.argv.slice();\n this.cwd = opts.cwd;\n this.env = { ...opts.env };\n this.cred = { ...opts.cred, groups: [...opts.cred.groups] };\n this.kind = opts.kind ?? \"command\";\n this.tty = opts.tty ?? null;\n this.stdin = opts.stdio?.stdin ?? new NullInput();\n this.stdout = opts.stdio?.stdout ?? new NullOutput();\n this.stderr = opts.stdio?.stderr ?? new NullOutput();\n }\n\n /** Basename of argv[0], the `comm` field in `ps`. */\n get comm(): string {\n const a0 = this.argv[0] ?? \"\";\n const idx = a0.lastIndexOf(\"/\");\n return idx >= 0 ? a0.slice(idx + 1) : a0;\n }\n\n get cmdline(): string {\n return this.argv.join(\" \");\n }\n\n get running(): boolean {\n return this.state !== \"Z\" && this.state !== \"X\";\n }\n\n get signal(): AbortSignal {\n return this.aborter.signal;\n }\n\n /** Seconds since the process started, for `ps etime`. */\n get elapsedMs(): number {\n return Date.now() - this.startTime;\n }\n\n setStdio(stdio: Partial<Stdio>): void {\n if (stdio.stdin) this.stdin = stdio.stdin;\n if (stdio.stdout) this.stdout = stdio.stdout;\n if (stdio.stderr) this.stderr = stdio.stderr;\n }\n\n onSignal(sig: string, handler: \"default\" | \"ignore\" | ((sig: string) => void)): void {\n if (UNCATCHABLE.has(sig)) return;\n this.signalHandlers.set(sig, handler);\n }\n\n /**\n * Deliver a signal. Returns true when the process handled or died from it.\n * Catchable signals run the installed handler; uncatchable ones always kill.\n */\n deliver(sigSpec: string | number): boolean {\n const sig = normalizeSignal(sigSpec);\n if (!sig) return false;\n if (!this.running) return false;\n\n if (sig === \"SIGCONT\") {\n if (this.state === \"T\") this.state = \"R\";\n return true;\n }\n\n if (!UNCATCHABLE.has(sig)) {\n const handler = this.signalHandlers.get(sig);\n if (handler === \"ignore\") return true;\n if (typeof handler === \"function\") {\n handler(sig);\n return true;\n }\n }\n\n if (STOP_SIGNALS.has(sig)) {\n this.state = \"T\";\n return true;\n }\n\n if (FATAL_SIGNALS.has(sig) || sig === \"SIGKILL\") {\n this.termSignal = sig;\n this.aborter.abort(new Error(sig));\n this.exit(exitCodeForSignal(sig));\n return true;\n }\n return true;\n }\n\n exit(code: number): void {\n if (this.exitCode !== null) return;\n this.exitCode = code & 0xff;\n this.state = \"Z\";\n if (!this.aborter.signal.aborted) this.aborter.abort(new Error(\"exited\"));\n const waiters = this.exitWaiters.splice(0);\n for (const w of waiters) w(this.exitCode);\n }\n\n /** Remove from the table entirely — the parent has reaped us. */\n reap(): void {\n this.state = \"X\";\n }\n\n wait(): Promise<number> {\n if (this.exitCode !== null) return Promise.resolve(this.exitCode);\n return new Promise<number>((resolve) => this.exitWaiters.push(resolve));\n }\n}\n\nexport interface ProcessFilter {\n pid?: number;\n pgid?: number;\n uid?: number;\n comm?: string;\n includeDead?: boolean;\n}\n\nexport class ProcessTable {\n private readonly map = new Map<number, Process>();\n\n create(opts: ProcessOptions): Process {\n const proc = new Process(opts);\n this.map.set(proc.pid, proc);\n if (proc.ppid) this.get(proc.ppid)?.children.add(proc);\n return proc;\n }\n\n get(pid: number): Process | undefined {\n return this.map.get(pid);\n }\n\n has(pid: number): boolean {\n return this.map.has(pid);\n }\n\n remove(pid: number): void {\n const proc = this.map.get(pid);\n if (!proc) return;\n const parent = this.get(proc.ppid);\n parent?.children.delete(proc);\n // Orphans are re-parented to init, exactly as on Linux.\n for (const child of proc.children) child.ppid = 1;\n this.map.delete(pid);\n }\n\n list(filter: ProcessFilter = {}): Process[] {\n const out: Process[] = [];\n for (const proc of this.map.values()) {\n if (!filter.includeDead && proc.state === \"X\") continue;\n if (filter.pid !== undefined && proc.pid !== filter.pid) continue;\n if (filter.pgid !== undefined && proc.pgid !== filter.pgid) continue;\n if (filter.uid !== undefined && proc.cred.uid !== filter.uid) continue;\n if (filter.comm !== undefined && proc.comm !== filter.comm) continue;\n out.push(proc);\n }\n return out.sort((a, b) => a.pid - b.pid);\n }\n\n get size(): number {\n return this.map.size;\n }\n\n /** Send a signal to a pid, a process group (negative pid), or everything (-1). */\n signal(target: number, sig: string | number): number {\n let delivered = 0;\n if (target === -1) {\n for (const proc of this.list()) {\n if (proc.pid !== 1 && proc.deliver(sig)) delivered++;\n }\n return delivered;\n }\n if (target < 0) {\n const pgid = -target;\n for (const proc of this.list({ pgid })) {\n if (proc.deliver(sig)) delivered++;\n }\n return delivered;\n }\n const proc = this.get(target);\n if (proc?.deliver(sig)) delivered++;\n return delivered;\n }\n\n /** Drop finished processes so the table does not grow without bound. */\n gc(keepMs = 5000): void {\n const now = Date.now();\n for (const proc of [...this.map.values()]) {\n if (proc.state === \"Z\" && proc.exitCode !== null && now - proc.startTime > keepMs && proc.children.size === 0) {\n this.remove(proc.pid);\n }\n }\n }\n\n clear(): void {\n this.map.clear();\n }\n}\n\n/** Reset the pid counter — used by tests and by `Container.reset()`. */\nexport function resetPidCounter(start = 1): void {\n nextPid = start;\n}\n","/**\n * The user and group database, backed by real `/etc/passwd`, `/etc/group` and\n * `/etc/shadow` files so `cat /etc/passwd` and `id` agree with each other and\n * `useradd` is just a file edit.\n */\n\nimport type { Vfs } from \"../fs/vfs.js\";\nimport { ROOT_CRED, makeCred, type Cred } from \"../fs/vfs.js\";\n\nexport interface PasswdEntry {\n name: string;\n passwd: string;\n uid: number;\n gid: number;\n gecos: string;\n home: string;\n shell: string;\n}\n\nexport interface GroupEntry {\n name: string;\n passwd: string;\n gid: number;\n members: string[];\n}\n\nconst PASSWD = \"/etc/passwd\";\nconst GROUP = \"/etc/group\";\nconst SHADOW = \"/etc/shadow\";\n\nexport class UserDatabase {\n constructor(private readonly vfs: Vfs) {}\n\n private readLines(path: string): string[] {\n try {\n return this.vfs\n .readText(path)\n .split(\"\\n\")\n .filter((l) => l.trim() !== \"\" && !l.startsWith(\"#\"));\n } catch {\n return [];\n }\n }\n\n users(): PasswdEntry[] {\n return this.readLines(PASSWD).flatMap((line) => {\n const f = line.split(\":\");\n if (f.length < 7) return [];\n return [\n {\n name: f[0]!,\n passwd: f[1]!,\n uid: Number(f[2]),\n gid: Number(f[3]),\n gecos: f[4]!,\n home: f[5]!,\n shell: f[6]!,\n },\n ];\n });\n }\n\n groups(): GroupEntry[] {\n return this.readLines(GROUP).flatMap((line) => {\n const f = line.split(\":\");\n if (f.length < 4) return [];\n return [\n {\n name: f[0]!,\n passwd: f[1]!,\n gid: Number(f[2]),\n members: f[3]!.split(\",\").filter(Boolean),\n },\n ];\n });\n }\n\n userByName(name: string): PasswdEntry | undefined {\n return this.users().find((u) => u.name === name);\n }\n\n userByUid(uid: number): PasswdEntry | undefined {\n return this.users().find((u) => u.uid === uid);\n }\n\n groupByName(name: string): GroupEntry | undefined {\n return this.groups().find((g) => g.name === name);\n }\n\n groupByGid(gid: number): GroupEntry | undefined {\n return this.groups().find((g) => g.gid === gid);\n }\n\n /** Accepts a name or a numeric id, the way `chown` arguments do. */\n resolveUid(spec: string): number | undefined {\n if (/^\\d+$/.test(spec)) return Number(spec);\n return this.userByName(spec)?.uid;\n }\n\n resolveGid(spec: string): number | undefined {\n if (/^\\d+$/.test(spec)) return Number(spec);\n return this.groupByName(spec)?.gid;\n }\n\n nameForUid(uid: number): string {\n return this.userByUid(uid)?.name ?? String(uid);\n }\n\n nameForGid(gid: number): string {\n return this.groupByGid(gid)?.name ?? String(gid);\n }\n\n /** Every group id a user belongs to, primary first. */\n groupsFor(name: string): number[] {\n const user = this.userByName(name);\n const out: number[] = [];\n if (user) out.push(user.gid);\n for (const g of this.groups()) {\n if (g.members.includes(name) && !out.includes(g.gid)) out.push(g.gid);\n }\n return out;\n }\n\n credFor(nameOrUid: string | number, umask = 0o022): Cred {\n const user = typeof nameOrUid === \"number\" ? this.userByUid(nameOrUid) : this.userByName(nameOrUid);\n if (!user) return { ...ROOT_CRED, umask };\n return makeCred(user.uid, user.gid, this.groupsFor(user.name), umask);\n }\n\n nextFreeUid(min = 1000, max = 60000): number {\n const taken = new Set(this.users().map((u) => u.uid));\n for (let i = min; i < max; i++) if (!taken.has(i)) return i;\n throw new Error(\"no free uid\");\n }\n\n nextFreeGid(min = 1000, max = 60000): number {\n const taken = new Set(this.groups().map((g) => g.gid));\n for (let i = min; i < max; i++) if (!taken.has(i)) return i;\n throw new Error(\"no free gid\");\n }\n\n addUser(entry: PasswdEntry, opts: { createHome?: boolean; password?: string } = {}): void {\n const line = `${entry.name}:${entry.passwd}:${entry.uid}:${entry.gid}:${entry.gecos}:${entry.home}:${entry.shell}`;\n this.vfs.appendFile(PASSWD, line + \"\\n\", { privileged: true });\n const shadowLine = `${entry.name}:${opts.password ?? \"!\"}:${Math.floor(Date.now() / 86400000)}:0:99999:7:::`;\n if (this.vfs.lexists(SHADOW)) this.vfs.appendFile(SHADOW, shadowLine + \"\\n\", { privileged: true });\n if (opts.createHome !== false) {\n if (!this.vfs.lexists(entry.home)) {\n this.vfs.mkdir(entry.home, { recursive: true, mode: 0o755 });\n this.vfs.chown(entry.home, entry.uid, entry.gid);\n }\n }\n }\n\n addGroup(entry: GroupEntry): void {\n const line = `${entry.name}:${entry.passwd}:${entry.gid}:${entry.members.join(\",\")}`;\n this.vfs.appendFile(GROUP, line + \"\\n\", { privileged: true });\n }\n\n removeUser(name: string): boolean {\n const before = this.vfs.readText(PASSWD);\n const after = before\n .split(\"\\n\")\n .filter((l) => !l.startsWith(name + \":\"))\n .join(\"\\n\");\n if (after === before) return false;\n this.vfs.writeFile(PASSWD, after, { privileged: true });\n if (this.vfs.lexists(SHADOW)) {\n const s = this.vfs.readText(SHADOW);\n this.vfs.writeFile(\n SHADOW,\n s\n .split(\"\\n\")\n .filter((l) => !l.startsWith(name + \":\"))\n .join(\"\\n\"),\n { privileged: true },\n );\n }\n return true;\n }\n\n removeGroup(name: string): boolean {\n const before = this.vfs.readText(GROUP);\n const after = before\n .split(\"\\n\")\n .filter((l) => !l.startsWith(name + \":\"))\n .join(\"\\n\");\n if (after === before) return false;\n this.vfs.writeFile(GROUP, after, { privileged: true });\n return true;\n }\n\n /** Add `user` to the supplementary members of `group`. */\n addUserToGroup(user: string, group: string): boolean {\n const lines = this.vfs.readText(GROUP).split(\"\\n\");\n let changed = false;\n const out = lines.map((line) => {\n const f = line.split(\":\");\n if (f[0] !== group || f.length < 4) return line;\n const members = f[3]!.split(\",\").filter(Boolean);\n if (members.includes(user)) return line;\n members.push(user);\n changed = true;\n return `${f[0]}:${f[1]}:${f[2]}:${members.join(\",\")}`;\n });\n if (changed) this.vfs.writeFile(GROUP, out.join(\"\\n\"), { privileged: true });\n return changed;\n }\n}\n","/**\n * The contract every in-container program implements.\n *\n * A \"binary\" is an async function over an `ExecContext`, returning an exit\n * code. The shell, the coreutils and the language runtimes all speak this one\n * interface, which is what lets `node`, `python3` and `grep` sit side by side\n * in `$PATH` and be pipelined together.\n */\n\nimport type { InputStream, OutputStream } from \"../fs/streams.js\";\nimport type { Cred, Vfs } from \"../fs/vfs.js\";\nimport type { Process, Env } from \"./process.js\";\nimport type { Kernel } from \"./kernel.js\";\nimport * as P from \"../fs/path.js\";\nimport { SysError, isSysError } from \"../fs/errno.js\";\nimport { UsageError } from \"../util/args.js\";\n\nexport interface ExecContext {\n /** argv[0] is the command name as invoked. */\n readonly argv: string[];\n readonly stdin: InputStream;\n readonly stdout: OutputStream;\n readonly stderr: OutputStream;\n readonly env: Env;\n readonly cwd: string;\n readonly vfs: Vfs;\n readonly kernel: Kernel;\n readonly proc: Process;\n readonly cred: Cred;\n readonly signal: AbortSignal;\n\n /** Command name, for error prefixes. */\n readonly name: string;\n /** argv without argv[0]. */\n readonly args: string[];\n\n /** Resolve a possibly relative path against the process cwd. */\n path(p: string): string;\n /** Write to stdout verbatim. */\n write(text: string | Uint8Array): void;\n /** Write a line to stdout. */\n line(text?: string): void;\n /** Write `name: message` to stderr, followed by a newline. */\n warn(message: string): void;\n /** Report an error and produce an exit code in one expression. */\n fail(message: string, code?: number): number;\n /** Turn a caught filesystem error into the message coreutils would print. */\n reportError(e: unknown, subject?: string): number;\n /** Change the calling process's directory (used by `cd`, `chroot`). */\n chdir(dir: string): void;\n}\n\nexport interface Command {\n readonly name: string;\n /** One-line summary shown by `help` and `whatis`. */\n readonly summary?: string;\n /** Usage string shown on `--help` and on a `UsageError`. */\n readonly usage?: string;\n /** Longer text shown by `man`. */\n readonly manual?: string;\n /** Aliases registered into the same PATH entry, e.g. `egrep` → `grep`. */\n readonly aliases?: string[];\n /** Where the binary claims to live, for `which` and `type`. */\n readonly path?: string;\n run(ctx: ExecContext): Promise<number> | number;\n}\n\nexport function defineCommand(cmd: Command): Command {\n return cmd;\n}\n\nexport class CommandRegistry {\n private readonly commands = new Map<string, Command>();\n\n register(cmd: Command): void {\n this.commands.set(cmd.name, cmd);\n for (const alias of cmd.aliases ?? []) {\n if (!this.commands.has(alias)) {\n this.commands.set(alias, { ...cmd, name: alias });\n }\n }\n }\n\n registerAll(cmds: Command[]): void {\n for (const c of cmds) this.register(c);\n }\n\n get(name: string): Command | undefined {\n return this.commands.get(name);\n }\n\n has(name: string): boolean {\n return this.commands.has(name);\n }\n\n names(): string[] {\n return [...this.commands.keys()].sort();\n }\n\n all(): Command[] {\n return [...new Set(this.commands.values())];\n }\n\n /** Default install location, used when populating `/bin` and `/usr/bin`. */\n binPath(name: string): string {\n return this.commands.get(name)?.path ?? `/usr/bin/${name}`;\n }\n}\n\nconst encoder = new TextEncoder();\n\nexport interface ContextInit {\n argv: string[];\n proc: Process;\n kernel: Kernel;\n stdin?: InputStream;\n stdout?: OutputStream;\n stderr?: OutputStream;\n env?: Env;\n cwd?: string;\n cred?: Cred;\n}\n\nexport function createContext(init: ContextInit): ExecContext {\n const { proc, kernel } = init;\n const argv = init.argv;\n const stdin = init.stdin ?? proc.stdin;\n const stdout = init.stdout ?? proc.stdout;\n const stderr = init.stderr ?? proc.stderr;\n const env = init.env ?? proc.env;\n const cred = init.cred ?? proc.cred;\n let cwd = init.cwd ?? proc.cwd;\n const name = argv[0] ?? \"\";\n\n const ctx: ExecContext = {\n argv,\n stdin,\n stdout,\n stderr,\n env,\n get cwd() {\n return cwd;\n },\n vfs: kernel.vfs,\n kernel,\n proc,\n cred,\n signal: proc.signal,\n name,\n args: argv.slice(1),\n path(p: string): string {\n return P.resolve(cwd, p);\n },\n write(text: string | Uint8Array): void {\n try {\n stdout.write(text);\n } catch (e) {\n // A closed pipe is a normal way for `head` to stop `yes`.\n if (isSysError(e) && e.code === \"EPIPE\") proc.deliver(\"SIGPIPE\");\n else throw e;\n }\n },\n line(text = \"\"): void {\n ctx.write(encoder.encode(text + \"\\n\"));\n },\n warn(message: string): void {\n try {\n stderr.write(`${name}: ${message}\\n`);\n } catch {\n /* stderr closed */\n }\n },\n fail(message: string, code = 1): number {\n ctx.warn(message);\n return code;\n },\n reportError(e: unknown, subject?: string): number {\n if (e instanceof UsageError) {\n ctx.warn(e.message);\n return 2;\n }\n if (isSysError(e)) {\n const target = subject ?? e.path;\n ctx.warn(target ? `${target}: ${strerrorOf(e)}` : strerrorOf(e));\n return 1;\n }\n ctx.warn(e instanceof Error ? e.message : String(e));\n return 1;\n },\n chdir(dir: string): void {\n const abs = P.resolve(cwd, dir);\n const st = kernel.vfs.stat(abs, { cred });\n if (!st.isDirectory()) throw new SysError(\"ENOTDIR\", \"chdir\", abs);\n kernel.vfs.access(abs, 1 /* X_OK */, cred);\n cwd = abs;\n proc.cwd = abs;\n },\n };\n return ctx;\n}\n\nfunction strerrorOf(e: SysError): string {\n const idx = e.message.indexOf(\": \");\n const rest = idx >= 0 ? e.message.slice(idx + 2) : e.message;\n const comma = rest.indexOf(\", \");\n return comma >= 0 ? rest.slice(0, comma) : rest;\n}\n\n/** Exit code convention shared by the whole userland. */\nexport const EXIT_OK = 0;\nexport const EXIT_FAIL = 1;\nexport const EXIT_USAGE = 2;\nexport const EXIT_NOT_EXECUTABLE = 126;\nexport const EXIT_NOT_FOUND = 127;\n","/**\n * A small getopt-style parser shared by every builtin.\n *\n * Handles the shapes coreutils actually use: clustered short flags (`-lah`),\n * attached and detached option arguments (`-n5`, `-n 5`, `--lines=5`,\n * `--lines 5`), `--` as an end-of-options marker, and GNU-style unambiguous\n * long-option abbreviation.\n */\n\nexport interface OptionSpec {\n /** Single-letter form, without the dash. */\n short?: string;\n /** Long form, without the dashes. */\n long?: string;\n /** Does this option take a value? */\n arg?: boolean;\n /**\n * The value may only be attached (`-i.bak`, `--suffix=.bak`), never taken\n * from the next argument. This is how `sed -i` works: `sed -i 's/a/b/'` must\n * treat the script as an operand, not as the suffix.\n */\n attachedOnly?: boolean;\n /** Collect every occurrence instead of keeping the last. */\n multiple?: boolean;\n /** Value when the flag is absent. */\n default?: string | boolean | string[];\n}\n\nexport class UsageError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"UsageError\";\n }\n}\n\nexport interface ParsedArgs {\n /** Flag name (long form when available, else short) → value. */\n opts: Record<string, string | boolean | string[]>;\n /** Everything that was not an option. */\n positional: string[];\n /** True when `--` appeared. */\n sawDoubleDash: boolean;\n /** True when the flag was set to a truthy value. */\n has(name: string): boolean;\n /**\n * True when the option appeared at all, even with an empty value. Needed for\n * options whose value is optional, such as `sed -i` versus `sed -i.bak`.\n */\n present(name: string): boolean;\n str(name: string, fallback?: string): string | undefined;\n num(name: string, fallback?: number): number | undefined;\n list(name: string): string[];\n}\n\nfunction keyFor(spec: OptionSpec): string {\n return spec.long ?? spec.short!;\n}\n\n/**\n * @param argv arguments *after* argv[0]\n * @param specs accepted options\n * @param opts.stopAtFirstPositional mimics `env`/`nice`/`xargs`, where the\n * first non-option ends option parsing so the child's own flags survive.\n * @param opts.numericShortcut accepts bare `-5` as a count (`head -5`).\n */\nexport function parseArgs(\n argv: string[],\n specs: OptionSpec[],\n opts: { stopAtFirstPositional?: boolean; numericShortcut?: string; allowUnknown?: boolean } = {},\n): ParsedArgs {\n const byShort = new Map<string, OptionSpec>();\n const byLong = new Map<string, OptionSpec>();\n for (const s of specs) {\n if (s.short) byShort.set(s.short, s);\n if (s.long) byLong.set(s.long, s);\n }\n\n const result: Record<string, string | boolean | string[]> = {};\n for (const s of specs) {\n if (s.default !== undefined) result[keyFor(s)] = s.default;\n else if (s.multiple) result[keyFor(s)] = [];\n }\n\n const positional: string[] = [];\n const seen = new Set<string>();\n let sawDoubleDash = false;\n let i = 0;\n\n const setValue = (spec: OptionSpec, value: string | boolean) => {\n const key = keyFor(spec);\n seen.add(key);\n if (spec.multiple) {\n const cur = (result[key] as string[]) ?? [];\n cur.push(String(value));\n result[key] = cur;\n } else {\n result[key] = value;\n }\n };\n\n const resolveLong = (name: string): OptionSpec | undefined => {\n const exact = byLong.get(name);\n if (exact) return exact;\n const candidates = [...byLong.keys()].filter((k) => k.startsWith(name));\n if (candidates.length === 1) return byLong.get(candidates[0]!);\n if (candidates.length > 1) throw new UsageError(`option '--${name}' is ambiguous`);\n return undefined;\n };\n\n for (; i < argv.length; i++) {\n const arg = argv[i]!;\n\n if (sawDoubleDash || arg === \"-\" || !arg.startsWith(\"-\")) {\n positional.push(arg);\n if (opts.stopAtFirstPositional) {\n positional.push(...argv.slice(i + 1));\n break;\n }\n continue;\n }\n\n if (arg === \"--\") {\n sawDoubleDash = true;\n continue;\n }\n\n if (arg.startsWith(\"--\")) {\n const eq = arg.indexOf(\"=\");\n const name = eq >= 0 ? arg.slice(2, eq) : arg.slice(2);\n const inline = eq >= 0 ? arg.slice(eq + 1) : undefined;\n const spec = resolveLong(name);\n if (!spec) {\n if (opts.allowUnknown) {\n positional.push(arg);\n continue;\n }\n throw new UsageError(`unrecognized option '--${name}'`);\n }\n if (spec.arg) {\n if (inline !== undefined) setValue(spec, inline);\n else if (spec.attachedOnly) setValue(spec, \"\");\n else {\n const next = argv[++i];\n if (next === undefined) throw new UsageError(`option '--${name}' requires an argument`);\n setValue(spec, next);\n }\n } else {\n if (inline !== undefined) throw new UsageError(`option '--${name}' doesn't allow an argument`);\n setValue(spec, true);\n }\n continue;\n }\n\n // Short cluster.\n let j = 1;\n let consumed = false;\n while (j < arg.length) {\n const ch = arg[j]!;\n if (opts.numericShortcut && /[0-9]/.test(ch) && j === 1) {\n const digits = /^[0-9]+/.exec(arg.slice(1))![0];\n result[opts.numericShortcut] = digits;\n j = 1 + digits.length;\n continue;\n }\n const spec = byShort.get(ch);\n if (!spec) {\n if (opts.allowUnknown) {\n positional.push(arg);\n consumed = true;\n break;\n }\n throw new UsageError(`invalid option -- '${ch}'`);\n }\n if (spec.arg) {\n const rest = arg.slice(j + 1);\n if (rest !== \"\") setValue(spec, rest);\n else if (spec.attachedOnly) {\n setValue(spec, \"\");\n j++;\n continue;\n } else {\n const next = argv[++i];\n if (next === undefined) throw new UsageError(`option requires an argument -- '${ch}'`);\n setValue(spec, next);\n }\n consumed = true;\n break;\n }\n setValue(spec, true);\n j++;\n }\n if (consumed) continue;\n }\n\n return {\n opts: result,\n positional,\n sawDoubleDash,\n has(name: string): boolean {\n const v = result[name];\n return Array.isArray(v) ? v.length > 0 : Boolean(v);\n },\n present(name: string): boolean {\n return seen.has(name);\n },\n str(name: string, fallback?: string): string | undefined {\n const v = result[name];\n if (typeof v === \"string\") return v;\n if (Array.isArray(v) && v.length) return v[v.length - 1];\n return fallback;\n },\n num(name: string, fallback?: number): number | undefined {\n const v = this.str(name);\n if (v === undefined) return fallback;\n const n = Number(v);\n return Number.isFinite(n) ? n : fallback;\n },\n list(name: string): string[] {\n const v = result[name];\n if (Array.isArray(v)) return v;\n if (typeof v === \"string\") return [v];\n return [];\n },\n };\n}\n\n/** Parse a size like `10`, `4K`, `2MiB`, `1G` into bytes. */\nexport function parseSize(spec: string): number | null {\n const m = /^([0-9]*\\.?[0-9]+)\\s*([kKmMgGtTpP]?)([iI]?)([bB]?)$/.exec(spec.trim());\n if (!m) return null;\n const value = Number(m[1]);\n const unit = (m[2] ?? \"\").toLowerCase();\n const binary = m[3] !== \"\" || unit === \"\";\n const base = binary ? 1024 : 1000;\n const exp = { \"\": 0, k: 1, m: 2, g: 3, t: 4, p: 5 }[unit] ?? 0;\n return Math.round(value * Math.pow(base, exp));\n}\n","/**\n * The identity the container reports for itself.\n *\n * The release string deliberately matches what Nodepod's `os.release()` returns\n * inside a spawned Node process, so `uname -r` and\n * `node -p \"os.release()\"` agree.\n */\n\nexport const KERNEL_NAME = \"Linux\";\nexport const KERNEL_RELEASE = \"5.10.0\";\nexport const KERNEL_VERSION = `Linux version ${KERNEL_RELEASE} (sandboxedjs@nodepod) (gcc version 12.2.0) #1 SMP PREEMPT_DYNAMIC`;\nexport const MACHINE = \"x86_64\";\nexport const PROCESSOR = \"x86_64\";\nexport const HARDWARE_PLATFORM = \"x86_64\";\nexport const OPERATING_SYSTEM = \"GNU/Linux\";\n\nexport const OS_RELEASE = `PRETTY_NAME=\"SandboxedJS 1.0 (nodepod)\"\nNAME=\"SandboxedJS\"\nVERSION_ID=\"1.0\"\nVERSION=\"1.0 (nodepod)\"\nVERSION_CODENAME=nodepod\nID=sandboxedjs\nID_LIKE=debian\nHOME_URL=\"https://github.com/R1ck404/Nodepod\"\nSUPPORT_URL=\"https://www.npmjs.com/package/sandboxedjs\"\n`;\n\nexport const LSB_RELEASE = `DISTRIB_ID=SandboxedJS\nDISTRIB_RELEASE=1.0\nDISTRIB_CODENAME=nodepod\nDISTRIB_DESCRIPTION=\"SandboxedJS 1.0\"\n`;\n\nexport interface UnameInfo {\n sysname: string;\n nodename: string;\n release: string;\n version: string;\n machine: string;\n processor: string;\n hardwarePlatform: string;\n operatingSystem: string;\n}\n\nexport function unameInfo(hostname: string): UnameInfo {\n return {\n sysname: KERNEL_NAME,\n nodename: hostname,\n release: KERNEL_RELEASE,\n version: KERNEL_VERSION.replace(/^Linux version \\S+ /, \"\"),\n machine: MACHINE,\n processor: PROCESSOR,\n hardwarePlatform: HARDWARE_PLATFORM,\n operatingSystem: OPERATING_SYSTEM,\n };\n}\n","/**\n * The root filesystem image.\n *\n * Everything here is a real file in the volume, not a special case in code —\n * `/etc/passwd` is what `id` reads, `/etc/profile` is what a login shell\n * sources, and `/etc/os-release` is what `lsb_release` parses. Editing them\n * inside the container changes behaviour, exactly as it would on a real box.\n */\n\nimport type { Vfs } from \"../fs/vfs.js\";\nimport { LSB_RELEASE, OS_RELEASE } from \"../kernel/uname.js\";\n\nexport interface RootfsOptions {\n hostname?: string;\n /** Non-root login user created at boot. Pass null for a root-only image. */\n user?: { name: string; uid?: number; gid?: number; home?: string; shell?: string } | null;\n timezone?: string;\n}\n\ninterface DirSpec {\n path: string;\n mode?: number;\n}\n\nconst DIRECTORIES: DirSpec[] = [\n { path: \"/bin\", mode: 0o755 },\n { path: \"/boot\", mode: 0o755 },\n { path: \"/dev\", mode: 0o755 },\n { path: \"/dev/shm\", mode: 0o1777 },\n { path: \"/dev/pts\", mode: 0o755 },\n { path: \"/etc\", mode: 0o755 },\n { path: \"/etc/default\", mode: 0o755 },\n { path: \"/etc/init.d\", mode: 0o755 },\n { path: \"/etc/profile.d\", mode: 0o755 },\n { path: \"/etc/skel\", mode: 0o755 },\n { path: \"/etc/ssl/certs\", mode: 0o755 },\n { path: \"/home\", mode: 0o755 },\n { path: \"/lib\", mode: 0o755 },\n { path: \"/lib64\", mode: 0o755 },\n { path: \"/media\", mode: 0o755 },\n { path: \"/mnt\", mode: 0o755 },\n { path: \"/opt\", mode: 0o755 },\n { path: \"/proc\", mode: 0o555 },\n { path: \"/root\", mode: 0o700 },\n { path: \"/run\", mode: 0o755 },\n { path: \"/run/lock\", mode: 0o1777 },\n { path: \"/sbin\", mode: 0o755 },\n { path: \"/srv\", mode: 0o755 },\n { path: \"/sys\", mode: 0o555 },\n { path: \"/tmp\", mode: 0o1777 },\n { path: \"/usr\", mode: 0o755 },\n { path: \"/usr/bin\", mode: 0o755 },\n { path: \"/usr/games\", mode: 0o755 },\n { path: \"/usr/include\", mode: 0o755 },\n { path: \"/usr/lib\", mode: 0o755 },\n { path: \"/usr/local\", mode: 0o755 },\n { path: \"/usr/local/bin\", mode: 0o755 },\n { path: \"/usr/local/lib\", mode: 0o755 },\n { path: \"/usr/local/share\", mode: 0o755 },\n { path: \"/usr/sbin\", mode: 0o755 },\n { path: \"/usr/share\", mode: 0o755 },\n { path: \"/usr/share/man/man1\", mode: 0o755 },\n { path: \"/usr/share/doc\", mode: 0o755 },\n { path: \"/usr/share/zoneinfo\", mode: 0o755 },\n { path: \"/var\", mode: 0o755 },\n { path: \"/var/cache\", mode: 0o755 },\n { path: \"/var/lib\", mode: 0o755 },\n { path: \"/var/lib/sandboxedjs\", mode: 0o755 },\n { path: \"/var/log\", mode: 0o755 },\n { path: \"/var/mail\", mode: 0o1777 },\n { path: \"/var/run\", mode: 0o755 },\n { path: \"/var/spool\", mode: 0o755 },\n { path: \"/var/tmp\", mode: 0o1777 },\n];\n\nconst PROFILE = `# /etc/profile: system-wide .profile file for the Bourne shell\n\nif [ \"\\`id -u\\`\" = \"0\" ]; then\n PATH=\"/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin\"\nelse\n PATH=\"/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games\"\nfi\nexport PATH\n\nif [ \"\\${PS1-}\" ]; then\n if [ \"\\`id -u\\`\" = \"0\" ]; then\n PS1='\\\\u@\\\\h:\\\\w# '\n else\n PS1='\\\\u@\\\\h:\\\\w$ '\n fi\nfi\n\numask 022\n\nfor i in /etc/profile.d/*.sh; do\n if [ -r \"$i\" ]; then\n . \"$i\"\n fi\ndone\nunset i\n`;\n\nconst BASHRC = `# ~/.bashrc: executed by the shell for non-login interactive shells.\n\ncase $- in\n *i*) ;;\n *) return;;\nesac\n\nHISTSIZE=1000\nHISTFILESIZE=2000\n\nalias ll='ls -alF'\nalias la='ls -A'\nalias l='ls -CF'\nalias grep='grep --color=auto'\nalias ..='cd ..'\nalias ...='cd ../..'\n`;\n\nconst PROFILE_SKEL = `# ~/.profile: executed by the command interpreter for login shells.\n\nif [ -n \"$BASH_VERSION\" ]; then\n if [ -f \"$HOME/.bashrc\" ]; then\n . \"$HOME/.bashrc\"\n fi\nfi\n\nif [ -d \"$HOME/bin\" ] ; then\n PATH=\"$HOME/bin:$PATH\"\nfi\n`;\n\nconst MOTD = `Welcome to SandboxedJS — a Linux-like container running inside Node.js.\n\n * Node.js, npm and MicroPython are preinstalled.\n * The filesystem is virtual: nothing here touches your host.\n * Run 'help' for the list of built-in commands.\n\n`;\n\nconst INPUTRC = `set enable-bracketed-paste on\nset completion-ignore-case on\nset show-all-if-ambiguous on\n\"\\\\e[A\": history-search-backward\n\"\\\\e[B\": history-search-forward\n`;\n\nconst SERVICES = `# Network services, Internet style\nftp\\t\\t21/tcp\nssh\\t\\t22/tcp\ntelnet\\t\\t23/tcp\nsmtp\\t\\t25/tcp\ndomain\\t\\t53/tcp\ndomain\\t\\t53/udp\nhttp\\t\\t80/tcp\\t\\twww\nhttps\\t\\t443/tcp\npostgresql\\t5432/tcp\nredis\\t\\t6379/tcp\nmysql\\t\\t3306/tcp\n`;\n\nconst MIME_TYPES = `text/html\\t\\t\\t\\thtml htm\ntext/plain\\t\\t\\t\\ttxt\ntext/css\\t\\t\\t\\tcss\ntext/markdown\\t\\t\\t\\tmd\napplication/javascript\\t\\t\\tjs mjs cjs\napplication/json\\t\\t\\tjson\napplication/wasm\\t\\t\\twasm\nimage/png\\t\\t\\t\\tpng\nimage/jpeg\\t\\t\\t\\tjpeg jpg\nimage/svg+xml\\t\\t\\t\\tsvg\napplication/x-tar\\t\\t\\ttar\napplication/gzip\\t\\t\\tgz\n`;\n\nexport function buildRootfs(vfs: Vfs, opts: RootfsOptions = {}): void {\n const hostname = opts.hostname ?? \"sandbox\";\n // The volume creates / owned by uid 1000; a boot image wants root.\n vfs.chown(\"/\", 0, 0);\n vfs.chmod(\"/\", 0o755);\n const timezone = opts.timezone ?? \"UTC\";\n\n for (const d of DIRECTORIES) {\n if (!vfs.lexists(d.path)) vfs.mkdir(d.path, { recursive: true, mode: d.mode ?? 0o755 });\n else vfs.chmod(d.path, d.mode ?? 0o755);\n }\n\n const write = (path: string, content: string, mode = 0o644) => {\n vfs.writeFile(path, content, { privileged: true, mode });\n vfs.chmod(path, mode);\n };\n\n // ── identity ───────────────────────────────────────────────────────────\n write(\"/etc/hostname\", hostname + \"\\n\");\n write(\n \"/etc/hosts\",\n `127.0.0.1\\tlocalhost\\n127.0.1.1\\t${hostname}\\n\\n# The following lines are desirable for IPv6 capable hosts\\n::1\\tlocalhost ip6-localhost ip6-loopback\\nff02::1\\tip6-allnodes\\nff02::2\\tip6-allrouters\\n`,\n );\n write(\"/etc/resolv.conf\", \"nameserver 127.0.0.11\\noptions ndots:0\\n\");\n write(\"/etc/os-release\", OS_RELEASE);\n write(\"/etc/lsb-release\", LSB_RELEASE);\n write(\"/etc/issue\", \"SandboxedJS 1.0 \\\\n \\\\l\\n\\n\");\n write(\"/etc/motd\", MOTD);\n write(\"/etc/timezone\", timezone + \"\\n\");\n write(\"/etc/machine-id\", \"5b1c9f2ea4d0472fa1e3c8b7d6094e21\\n\");\n write(\"/etc/nsswitch.conf\", \"passwd:\\tfiles\\ngroup:\\tfiles\\nshadow:\\tfiles\\nhosts:\\tfiles dns\\n\");\n write(\"/etc/services\", SERVICES);\n write(\"/etc/mime.types\", MIME_TYPES);\n write(\"/etc/inputrc\", INPUTRC);\n write(\n \"/etc/fstab\",\n \"# <file system>\\t<mount point>\\t<type>\\t<options>\\t<dump>\\t<pass>\\noverlay\\t/\\toverlay\\tdefaults\\t0\\t1\\nproc\\t/proc\\tproc\\tdefaults\\t0\\t0\\nsysfs\\t/sys\\tsysfs\\tdefaults\\t0\\t0\\ntmpfs\\t/tmp\\ttmpfs\\tdefaults\\t0\\t0\\n\",\n );\n write(\"/etc/shells\", \"/bin/sh\\n/bin/bash\\n\");\n\n // ── users ──────────────────────────────────────────────────────────────\n const passwd: string[] = [\n \"root:x:0:0:root:/root:/bin/sh\",\n \"daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin\",\n \"bin:x:2:2:bin:/bin:/usr/sbin/nologin\",\n \"sys:x:3:3:sys:/dev:/usr/sbin/nologin\",\n \"nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin\",\n ];\n const group: string[] = [\n \"root:x:0:\",\n \"daemon:x:1:\",\n \"bin:x:2:\",\n \"sys:x:3:\",\n \"adm:x:4:\",\n \"tty:x:5:\",\n \"sudo:x:27:\",\n \"users:x:100:\",\n \"nogroup:x:65534:\",\n ];\n const shadow: string[] = [\"root:*:19000:0:99999:7:::\", \"daemon:*:19000:0:99999:7:::\", \"nobody:*:19000:0:99999:7:::\"];\n\n const user = opts.user === null ? null : (opts.user ?? { name: \"user\" });\n if (user) {\n const uid = user.uid ?? 1000;\n const gid = user.gid ?? 1000;\n const home = user.home ?? `/home/${user.name}`;\n const shell = user.shell ?? \"/bin/sh\";\n passwd.push(`${user.name}:x:${uid}:${gid}:${user.name},,,:${home}:${shell}`);\n group.push(`${user.name}:x:${gid}:`);\n // Give the login user sudo, so `sudo` is meaningful in the container.\n const sudoIdx = group.findIndex((g) => g.startsWith(\"sudo:\"));\n if (sudoIdx >= 0) group[sudoIdx] = `sudo:x:27:${user.name}`;\n shadow.push(`${user.name}:*:19000:0:99999:7:::`);\n }\n\n write(\"/etc/passwd\", passwd.join(\"\\n\") + \"\\n\");\n write(\"/etc/group\", group.join(\"\\n\") + \"\\n\");\n write(\"/etc/shadow\", shadow.join(\"\\n\") + \"\\n\", 0o640);\n write(\"/etc/sudoers\", \"root ALL=(ALL:ALL) ALL\\n%sudo ALL=(ALL:ALL) ALL\\n\", 0o440);\n\n // ── shell environment ──────────────────────────────────────────────────\n write(\"/etc/profile\", PROFILE);\n write(\"/etc/bash.bashrc\", BASHRC);\n write(\"/etc/skel/.bashrc\", BASHRC);\n write(\"/etc/skel/.profile\", PROFILE_SKEL);\n write(\"/etc/profile.d/01-locale.sh\", \"export LANG=C.UTF-8\\nexport LC_ALL=C.UTF-8\\n\");\n\n // ── home directories ───────────────────────────────────────────────────\n const seedHome = (home: string, uid: number, gid: number) => {\n if (!vfs.lexists(home)) vfs.mkdir(home, { recursive: true, mode: 0o755 });\n for (const dotfile of [\".bashrc\", \".profile\"]) {\n const target = `${home}/${dotfile}`;\n if (!vfs.lexists(target)) {\n vfs.writeFile(target, vfs.readText(`/etc/skel/${dotfile}`), { privileged: true, mode: 0o644 });\n }\n vfs.chown(target, uid, gid);\n }\n vfs.chown(home, uid, gid);\n };\n seedHome(\"/root\", 0, 0);\n if (user) seedHome(user.home ?? `/home/${user.name}`, user.uid ?? 1000, user.gid ?? 1000);\n\n // ── var ────────────────────────────────────────────────────────────────\n write(\"/var/log/wtmp\", \"\");\n write(\"/var/log/lastlog\", \"\");\n write(\"/var/log/syslog\", `${new Date().toISOString()} ${hostname} kernel: [ 0.000000] SandboxedJS booted\\n`);\n\n // ── symlinks a real distro has ─────────────────────────────────────────\n const symlink = (target: string, link: string) => {\n if (!vfs.lexists(link)) vfs.symlink(target, link);\n };\n symlink(\"/proc/self/mounts\", \"/etc/mtab\");\n symlink(`/usr/share/zoneinfo/${timezone}`, \"/etc/localtime\");\n if (!vfs.lexists(`/usr/share/zoneinfo/${timezone}`)) {\n write(`/usr/share/zoneinfo/${timezone}`, \"TZif2\\n\");\n }\n}\n","/**\n * `/dev` — the character devices programs reach for: `/dev/null`, `/dev/zero`,\n * `/dev/urandom`, and the `stdin`/`stdout`/`stderr` symlinks.\n *\n * The provider overlays a real directory, so `mkdir /dev/shm` and writing into\n * it still works while the synthetic nodes take precedence.\n */\n\nimport type { VirtualNode, VirtualProvider } from \"../fs/vfs.js\";\nimport { SysError } from \"../fs/errno.js\";\n\n/** Nodes that can yield arbitrarily many bytes expose this for `dd`/`head`. */\nexport interface StreamingNode extends VirtualNode {\n readChunk(size: number): Uint8Array;\n infinite: true;\n}\n\nexport function isStreamingNode(node: VirtualNode | null): node is StreamingNode {\n return !!node && (node as StreamingNode).infinite === true;\n}\n\n/** Bounded default so a stray `cat /dev/zero` cannot exhaust memory. */\nconst DEFAULT_CHUNK = 64 * 1024;\n\nfunction randomBytes(n: number): Uint8Array {\n const out = new Uint8Array(n);\n // Fill in 64 KiB slices: crypto.getRandomValues caps each call at 65536.\n for (let off = 0; off < n; off += 65536) {\n crypto.getRandomValues(out.subarray(off, Math.min(off + 65536, n)));\n }\n return out;\n}\n\nexport function createDevProvider(opts: {\n ttyName?: () => string | null;\n columns?: () => number;\n rows?: () => number;\n}): VirtualProvider {\n const nodes = new Map<string, () => VirtualNode>();\n\n nodes.set(\"null\", () => ({\n kind: \"chardev\",\n mode: 0o666,\n size: 0,\n read: () => new Uint8Array(0),\n write: () => {},\n }));\n\n nodes.set(\"zero\", () => {\n const node: StreamingNode = {\n kind: \"chardev\",\n mode: 0o666,\n size: 0,\n infinite: true,\n read: () => new Uint8Array(DEFAULT_CHUNK),\n readChunk: (n: number) => new Uint8Array(n),\n write: () => {},\n };\n return node;\n });\n\n nodes.set(\"full\", () => ({\n kind: \"chardev\",\n mode: 0o666,\n size: 0,\n read: () => new Uint8Array(DEFAULT_CHUNK),\n write: () => {\n throw new SysError(\"ENOSPC\", \"write\", \"/dev/full\");\n },\n }));\n\n const randomNode = (): VirtualNode => {\n const node: StreamingNode = {\n kind: \"chardev\",\n mode: 0o666,\n size: 0,\n infinite: true,\n read: () => randomBytes(DEFAULT_CHUNK),\n readChunk: (n: number) => randomBytes(n),\n write: () => {},\n };\n return node;\n };\n nodes.set(\"random\", randomNode);\n nodes.set(\"urandom\", randomNode);\n\n nodes.set(\"tty\", () => ({\n kind: \"chardev\",\n mode: 0o666,\n size: 0,\n read: () => new Uint8Array(0),\n write: () => {},\n }));\n nodes.set(\"console\", () => ({\n kind: \"chardev\",\n mode: 0o600,\n size: 0,\n read: () => new Uint8Array(0),\n write: () => {},\n }));\n nodes.set(\"ptmx\", () => ({ kind: \"chardev\", mode: 0o666, size: 0, read: () => new Uint8Array(0), write: () => {} }));\n\n const link = (target: string): VirtualNode => ({ kind: \"symlink\", mode: 0o777, target });\n nodes.set(\"stdin\", () => link(\"/proc/self/fd/0\"));\n nodes.set(\"stdout\", () => link(\"/proc/self/fd/1\"));\n nodes.set(\"stderr\", () => link(\"/proc/self/fd/2\"));\n nodes.set(\"fd\", () => link(\"/proc/self/fd\"));\n\n return {\n root: \"/dev\",\n exclusive: false,\n resolve(rel: string): VirtualNode | null {\n if (rel === \"\") {\n return {\n kind: \"directory\",\n mode: 0o755,\n list: () => [...nodes.keys()],\n };\n }\n const factory = nodes.get(rel);\n return factory ? factory() : null;\n },\n };\n}\n","/**\n * `/proc` — synthesised live from the process table and kernel state.\n *\n * This is what makes `ps`, `top`, `free`, `uptime` and `cat /proc/self/status`\n * agree with each other: they all read the same files rather than each holding\n * a private view of the system.\n */\n\nimport type { VirtualNode, VirtualProvider } from \"../fs/vfs.js\";\nimport type { Kernel } from \"./kernel.js\";\nimport type { Process } from \"./process.js\";\nimport { KERNEL_RELEASE, KERNEL_VERSION, MACHINE } from \"./uname.js\";\n\nfunction textFile(body: string | (() => string), mode = 0o444): VirtualNode {\n return {\n kind: \"file\",\n mode,\n read: () => (typeof body === \"string\" ? body : body()),\n };\n}\n\nfunction dir(list: () => string[], mode = 0o555): VirtualNode {\n return { kind: \"directory\", mode, list };\n}\n\nfunction pad(n: number, width: number): string {\n return String(n).padStart(width, \" \");\n}\n\nexport function createProcProvider(kernel: Kernel): VirtualProvider {\n const memTotalKb = Math.floor(kernel.memoryBytes / 1024);\n\n const usedBytes = (): number => {\n // Approximate RSS with the size of everything living in the VFS plus a\n // fixed base, which is enough for `free`/`top` to look sane and move.\n try {\n const stats = kernel.vfs.volume.getStats();\n return stats.totalBytes + 96 * 1024 * 1024;\n } catch {\n return 96 * 1024 * 1024;\n }\n };\n\n const uptimeSeconds = (): number => kernel.uptimeMs / 1000;\n\n const procStatus = (proc: Process): string => {\n const rss = 4096 + proc.argv.join(\" \").length * 8;\n return [\n `Name:\\t${proc.comm}`,\n `Umask:\\t0${(proc.cred.umask & 0o777).toString(8).padStart(3, \"0\")}`,\n `State:\\t${proc.state} (${stateName(proc.state)})`,\n `Tgid:\\t${proc.pid}`,\n `Pid:\\t${proc.pid}`,\n `PPid:\\t${proc.ppid}`,\n `TracerPid:\\t0`,\n `Uid:\\t${proc.cred.uid}\\t${proc.cred.uid}\\t${proc.cred.uid}\\t${proc.cred.uid}`,\n `Gid:\\t${proc.cred.gid}\\t${proc.cred.gid}\\t${proc.cred.gid}\\t${proc.cred.gid}`,\n `Groups:\\t${proc.cred.groups.join(\" \")}`,\n `VmSize:\\t${pad(Math.ceil(rss / 1024) + 2048, 8)} kB`,\n `VmRSS:\\t${pad(Math.ceil(rss / 1024), 8)} kB`,\n `Threads:\\t1`,\n \"\",\n ].join(\"\\n\");\n };\n\n const procStat = (proc: Process): string => {\n const ticks = Math.floor(proc.cpuMs / 10);\n const startTicks = Math.floor((proc.startTime - kernel.bootTime) / 10);\n return (\n [\n proc.pid,\n `(${proc.comm})`,\n proc.state,\n proc.ppid,\n proc.pgid,\n proc.sid,\n 0,\n -1,\n 0,\n 0,\n 0,\n 0,\n 0,\n ticks,\n 0,\n 0,\n 0,\n 20,\n 0,\n 1,\n 0,\n startTicks,\n ].join(\" \") + \"\\n\"\n );\n };\n\n const pidNodes = (proc: Process, rest: string): VirtualNode | null => {\n switch (rest) {\n case \"\":\n return dir(() => [\"cmdline\", \"comm\", \"cwd\", \"environ\", \"exe\", \"fd\", \"root\", \"stat\", \"status\"]);\n case \"cmdline\":\n return textFile(() => proc.argv.join(\"\\0\") + \"\\0\");\n case \"comm\":\n return textFile(() => proc.comm + \"\\n\");\n case \"cwd\":\n return { kind: \"symlink\", mode: 0o777, target: proc.cwd };\n case \"root\":\n return { kind: \"symlink\", mode: 0o777, target: \"/\" };\n case \"exe\":\n return { kind: \"symlink\", mode: 0o777, target: proc.argv[0] ?? \"/sbin/init\" };\n case \"environ\":\n return textFile(\n () =>\n Object.entries(proc.env)\n .map(([k, v]) => `${k}=${v}\\0`)\n .join(\"\"),\n 0o400,\n );\n case \"status\":\n return textFile(() => procStatus(proc));\n case \"stat\":\n return textFile(() => procStat(proc));\n case \"fd\":\n return dir(() => [\"0\", \"1\", \"2\"]);\n case \"fd/0\":\n return { kind: \"symlink\", mode: 0o777, target: \"/dev/tty\" };\n case \"fd/1\":\n return { kind: \"symlink\", mode: 0o777, target: \"/dev/tty\" };\n case \"fd/2\":\n return { kind: \"symlink\", mode: 0o777, target: \"/dev/tty\" };\n default:\n return null;\n }\n };\n\n const topLevel: Record<string, () => VirtualNode> = {\n version: () => textFile(`${KERNEL_VERSION}\\n`),\n uptime: () => textFile(() => `${uptimeSeconds().toFixed(2)} ${(uptimeSeconds() * kernel.cpus).toFixed(2)}\\n`),\n loadavg: () =>\n textFile(() => {\n const running = kernel.procs.list().filter((p) => p.state === \"R\").length;\n const total = kernel.procs.list().length;\n const load = (running / kernel.cpus).toFixed(2);\n return `${load} ${load} ${load} ${running}/${total} ${kernel.procs.list().length + 1}\\n`;\n }),\n meminfo: () =>\n textFile(() => {\n const used = Math.floor(usedBytes() / 1024);\n const free = Math.max(0, memTotalKb - used);\n return [\n `MemTotal: ${pad(memTotalKb, 8)} kB`,\n `MemFree: ${pad(free, 8)} kB`,\n `MemAvailable: ${pad(Math.floor(free * 1.15), 8)} kB`,\n `Buffers: ${pad(16384, 8)} kB`,\n `Cached: ${pad(Math.floor(used / 3), 8)} kB`,\n `SwapCached: ${pad(0, 8)} kB`,\n `SwapTotal: ${pad(0, 8)} kB`,\n `SwapFree: ${pad(0, 8)} kB`,\n \"\",\n ].join(\"\\n\");\n }),\n cpuinfo: () =>\n textFile(() => {\n let out = \"\";\n for (let i = 0; i < kernel.cpus; i++) {\n out +=\n [\n `processor\\t: ${i}`,\n `vendor_id\\t: SandboxedJS`,\n `cpu family\\t: 6`,\n `model\\t\\t: 158`,\n `model name\\t: SandboxedJS Virtual CPU @ 3.00GHz`,\n `stepping\\t: 1`,\n `cpu MHz\\t\\t: 3000.000`,\n `cache size\\t: 8192 KB`,\n `physical id\\t: 0`,\n `siblings\\t: ${kernel.cpus}`,\n `core id\\t\\t: ${i}`,\n `cpu cores\\t: ${kernel.cpus}`,\n `flags\\t\\t: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov`,\n `bogomips\\t: 6000.00`,\n \"\",\n \"\",\n ].join(\"\\n\");\n }\n return out;\n }),\n stat: () =>\n textFile(() => {\n const jiffies = Math.floor(kernel.uptimeMs / 10);\n let out = `cpu ${jiffies} 0 ${Math.floor(jiffies / 4)} ${jiffies * 4} 0 0 0 0 0 0\\n`;\n for (let i = 0; i < kernel.cpus; i++) {\n out += `cpu${i} ${Math.floor(jiffies / kernel.cpus)} 0 ${Math.floor(jiffies / 16)} ${jiffies} 0 0 0 0 0 0\\n`;\n }\n out += `btime ${Math.floor(kernel.bootTime / 1000)}\\n`;\n out += `processes ${kernel.procs.size + 32}\\n`;\n out += `procs_running ${kernel.procs.list().filter((p) => p.state === \"R\").length}\\n`;\n out += `procs_blocked 0\\n`;\n return out;\n }),\n mounts: () =>\n textFile(() =>\n kernel\n .mountTable()\n .map((m) => `${m.device} ${m.mountpoint} ${m.fstype} ${m.options} 0 0`)\n .join(\"\\n\") + \"\\n\",\n ),\n filesystems: () => textFile(\"nodev\\tproc\\nnodev\\tsysfs\\nnodev\\tdevtmpfs\\nnodev\\ttmpfs\\nnodev\\toverlay\\n\"),\n cmdline: () => textFile(\"BOOT_IMAGE=/boot/sandboxedjs root=/dev/vda1 ro quiet\\n\"),\n devices: () => textFile(\"Character devices:\\n 1 mem\\n 5 /dev/tty\\n\\nBlock devices:\\n254 virtblk\\n\"),\n hostname: () => textFile(() => kernel.hostname + \"\\n\"),\n modules: () => textFile(\"\"),\n swaps: () => textFile(\"Filename\\t\\t\\t\\tType\\t\\tSize\\t\\tUsed\\t\\tPriority\\n\"),\n };\n\n return {\n root: \"/proc\",\n exclusive: true,\n resolve(rel: string): VirtualNode | null {\n if (rel === \"\") {\n return dir(() => [\n ...Object.keys(topLevel),\n \"self\",\n ...kernel.procs.list().map((p) => String(p.pid)),\n ]);\n }\n\n const [head, ...tail] = rel.split(\"/\");\n const rest = tail.join(\"/\");\n\n if (head === \"self\") {\n const current = kernel.currentProcess ?? kernel.init;\n if (rest === \"\") return { kind: \"symlink\", mode: 0o777, target: `/proc/${current.pid}` };\n return pidNodes(current, rest);\n }\n\n if (head && /^\\d+$/.test(head)) {\n const proc = kernel.procs.get(Number(head));\n if (!proc) return null;\n return pidNodes(proc, rest);\n }\n\n if (rest === \"\" && head && head in topLevel) return topLevel[head]!();\n\n // A couple of nested paths programs commonly poke at.\n if (rel === \"sys/kernel/hostname\") return textFile(() => kernel.hostname + \"\\n\", 0o644);\n if (rel === \"sys/kernel/ostype\") return textFile(\"Linux\\n\");\n if (rel === \"sys/kernel/osrelease\") return textFile(`${KERNEL_RELEASE}\\n`);\n if (rel === \"sys/kernel/version\") return textFile(`${KERNEL_VERSION}\\n`);\n if (rel === \"sys\") return dir(() => [\"kernel\"]);\n if (rel === \"sys/kernel\") return dir(() => [\"hostname\", \"ostype\", \"osrelease\", \"version\"]);\n if (rel === \"net\") return dir(() => [\"dev\", \"route\"]);\n if (rel === \"net/dev\") return textFile(() => kernel.net?.procNetDev() ?? \"\");\n if (rel === \"net/route\") return textFile(() => kernel.net?.procNetRoute() ?? \"\");\n if (rel === \"self/mounts\") return topLevel.mounts!();\n\n return null;\n },\n };\n}\n\nfunction stateName(state: string): string {\n switch (state) {\n case \"R\":\n return \"running\";\n case \"S\":\n return \"sleeping\";\n case \"D\":\n return \"disk sleep\";\n case \"T\":\n return \"stopped\";\n case \"Z\":\n return \"zombie\";\n default:\n return \"dead\";\n }\n}\n\nexport { MACHINE };\n","/**\n * A minimal `/sys` — enough for the handful of paths tools actually read\n * (hostname, cpu topology, network interface addresses).\n */\n\nimport type { VirtualNode, VirtualProvider } from \"../fs/vfs.js\";\nimport type { Kernel } from \"./kernel.js\";\nimport { KERNEL_RELEASE, KERNEL_VERSION } from \"./uname.js\";\n\nfunction file(body: () => string, mode = 0o444): VirtualNode {\n return { kind: \"file\", mode, read: body };\n}\n\nfunction dir(list: () => string[]): VirtualNode {\n return { kind: \"directory\", mode: 0o555, list };\n}\n\nexport function createSysProvider(kernel: Kernel): VirtualProvider {\n return {\n root: \"/sys\",\n exclusive: false,\n resolve(rel: string): VirtualNode | null {\n switch (rel) {\n case \"\":\n return dir(() => [\"block\", \"class\", \"devices\", \"kernel\", \"fs\"]);\n case \"kernel\":\n return dir(() => [\"hostname\", \"ostype\", \"osrelease\", \"version\", \"mm\"]);\n case \"kernel/hostname\":\n return file(() => kernel.hostname + \"\\n\");\n case \"kernel/ostype\":\n return file(() => \"Linux\\n\");\n case \"kernel/osrelease\":\n return file(() => KERNEL_RELEASE + \"\\n\");\n case \"kernel/version\":\n return file(() => KERNEL_VERSION + \"\\n\");\n case \"devices\":\n return dir(() => [\"system\"]);\n case \"devices/system\":\n return dir(() => [\"cpu\"]);\n case \"devices/system/cpu\":\n return dir(() => [\n ...Array.from({ length: kernel.cpus }, (_, i) => `cpu${i}`),\n \"online\",\n \"possible\",\n \"present\",\n ]);\n case \"devices/system/cpu/online\":\n case \"devices/system/cpu/possible\":\n case \"devices/system/cpu/present\":\n return file(() => (kernel.cpus === 1 ? \"0\\n\" : `0-${kernel.cpus - 1}\\n`));\n case \"class\":\n return dir(() => [\"net\"]);\n case \"class/net\":\n return dir(() => kernel.net?.interfaces().map((i) => i.name) ?? [\"lo\"]);\n default:\n break;\n }\n\n const cpuMatch = /^devices\\/system\\/cpu\\/cpu(\\d+)$/.exec(rel);\n if (cpuMatch && Number(cpuMatch[1]) < kernel.cpus) return dir(() => [\"online\", \"topology\"]);\n\n const netMatch = /^class\\/net\\/([^/]+)(?:\\/(.*))?$/.exec(rel);\n if (netMatch) {\n const iface = kernel.net?.interfaces().find((i) => i.name === netMatch[1]);\n if (!iface) return null;\n const leaf = netMatch[2] ?? \"\";\n if (leaf === \"\") return dir(() => [\"address\", \"mtu\", \"operstate\", \"flags\"]);\n if (leaf === \"address\") return file(() => iface.mac + \"\\n\");\n if (leaf === \"mtu\") return file(() => iface.mtu + \"\\n\");\n if (leaf === \"operstate\") return file(() => (iface.up ? \"up\\n\" : \"down\\n\"));\n if (leaf === \"flags\") return file(() => \"0x1003\\n\");\n }\n\n return null;\n },\n };\n}\n","/**\n * The container's network stack.\n *\n * There is no real socket layer: HTTP servers started inside the container are\n * registered with Nodepod's request proxy, and this module is the routing and\n * name-resolution layer on top — interfaces for `ip`/`ifconfig`, a hosts file\n * resolver, a listening-port table for `ss`/`netstat`, and an outbound policy\n * that decides whether `curl https://example.com` is allowed to touch the real\n * network.\n */\n\nimport type { Nodepod } from \"@scelar/nodepod/headless\";\nimport type { Vfs } from \"../fs/vfs.js\";\n\nexport interface NetInterface {\n name: string;\n mac: string;\n ipv4: string;\n netmask: string;\n broadcast?: string;\n ipv6?: string;\n mtu: number;\n up: boolean;\n loopback: boolean;\n rxBytes: number;\n txBytes: number;\n rxPackets: number;\n txPackets: number;\n}\n\nexport interface ListeningPort {\n port: number;\n proto: \"tcp\" | \"udp\";\n address: string;\n pid: number;\n program: string;\n since: number;\n}\n\nexport interface NetworkOptions {\n /**\n * Allow outbound requests to the real internet. When false (the default),\n * `curl`/`wget`/`fetch` only reach servers running inside the container.\n */\n allowOutbound?: boolean;\n /** Host allowlist applied when `allowOutbound` is on. `null` means any host. */\n allowedHosts?: string[] | null;\n /** Address handed to eth0. */\n ipv4?: string;\n gateway?: string;\n}\n\nexport interface FetchLike {\n (input: string, init?: RequestInit): Promise<Response>;\n}\n\nexport class NetworkStack {\n private readonly ifaces: NetInterface[] = [];\n private readonly listeners = new Map<number, ListeningPort>();\n readonly options: Required<Pick<NetworkOptions, \"allowOutbound\">> & NetworkOptions;\n\n constructor(\n private readonly pod: Nodepod,\n private readonly vfs: Vfs,\n options: NetworkOptions = {},\n ) {\n this.options = {\n allowOutbound: options.allowOutbound ?? false,\n allowedHosts: options.allowedHosts ?? null,\n ipv4: options.ipv4 ?? \"172.17.0.2\",\n gateway: options.gateway ?? \"172.17.0.1\",\n };\n\n this.ifaces.push({\n name: \"lo\",\n mac: \"00:00:00:00:00:00\",\n ipv4: \"127.0.0.1\",\n netmask: \"255.0.0.0\",\n ipv6: \"::1\",\n mtu: 65536,\n up: true,\n loopback: true,\n rxBytes: 0,\n txBytes: 0,\n rxPackets: 0,\n txPackets: 0,\n });\n this.ifaces.push({\n name: \"eth0\",\n mac: randomMac(),\n ipv4: this.options.ipv4!,\n netmask: \"255.255.0.0\",\n broadcast: \"172.17.255.255\",\n ipv6: \"fe80::42:acff:fe11:2\",\n mtu: 1500,\n up: true,\n loopback: false,\n rxBytes: 0,\n txBytes: 0,\n rxPackets: 0,\n txPackets: 0,\n });\n }\n\n interfaces(): NetInterface[] {\n return this.ifaces;\n }\n\n interface(name: string): NetInterface | undefined {\n return this.ifaces.find((i) => i.name === name);\n }\n\n setInterfaceUp(name: string, up: boolean): boolean {\n const iface = this.interface(name);\n if (!iface) return false;\n iface.up = up;\n return true;\n }\n\n get gateway(): string {\n return this.options.gateway!;\n }\n\n // ── name resolution ──────────────────────────────────────────────────────\n\n /** Resolve through `/etc/hosts`; returns null when the name is not local. */\n resolve(host: string): string | null {\n if (/^\\d+\\.\\d+\\.\\d+\\.\\d+$/.test(host)) return host;\n let text = \"\";\n try {\n text = this.vfs.readText(\"/etc/hosts\");\n } catch {\n return null;\n }\n for (const line of text.split(\"\\n\")) {\n const clean = line.split(\"#\")[0]!.trim();\n if (clean === \"\") continue;\n const [addr, ...names] = clean.split(/\\s+/);\n if (addr && names.includes(host)) return addr;\n }\n return null;\n }\n\n isLocal(host: string): boolean {\n const addr = this.resolve(host);\n if (host === \"localhost\" || host === \"127.0.0.1\" || host === \"::1\" || host === \"0.0.0.0\") return true;\n if (addr && (addr.startsWith(\"127.\") || addr === \"::1\")) return true;\n return this.ifaces.some((i) => i.ipv4 === addr);\n }\n\n // ── listening ports ──────────────────────────────────────────────────────\n\n registerListener(port: number, info: Omit<ListeningPort, \"port\" | \"since\">): void {\n this.listeners.set(port, { port, since: Date.now(), ...info });\n }\n\n unregisterListener(port: number): void {\n this.listeners.delete(port);\n }\n\n listening(): ListeningPort[] {\n // Ports Nodepod knows about count as listening even if we never saw the\n // `listen()` call, e.g. a server started from inside a spawned script.\n const out = new Map(this.listeners);\n for (const port of this.knownPodPorts()) {\n if (!out.has(port)) {\n out.set(port, { port, proto: \"tcp\", address: \"0.0.0.0\", pid: 0, program: \"node\", since: Date.now() });\n }\n }\n return [...out.values()].sort((a, b) => a.port - b.port);\n }\n\n /** Ports Nodepod's proxy has registered for this instance. */\n private knownPodPorts(): number[] {\n try {\n return this.pod.proxy.activePorts(this.pod.instanceId) ?? [];\n } catch {\n try {\n return this.pod.proxy.activePorts() ?? [];\n } catch {\n return [];\n }\n }\n }\n\n /** True when something inside the container answers on `port`. */\n async isPortOpen(port: number, timeoutMs = 1500): Promise<boolean> {\n try {\n const res = await Promise.race([\n this.pod.request(port, { path: \"/\", method: \"GET\" }),\n new Promise<null>((resolve) => setTimeout(() => resolve(null), timeoutMs)),\n ]);\n if (res === null) return false;\n // 503 is what the proxy returns when no server is bound.\n return res.statusCode !== 503;\n } catch {\n return false;\n }\n }\n\n /** Wait for an in-container server to start answering on `port`. */\n async waitForPort(port: number, opts: { timeoutMs?: number; intervalMs?: number } = {}): Promise<boolean> {\n const timeoutMs = opts.timeoutMs ?? 30_000;\n const intervalMs = opts.intervalMs ?? 200;\n const deadline = Date.now() + timeoutMs;\n while (Date.now() < deadline) {\n if (await this.isPortOpen(port, Math.min(1000, intervalMs * 4))) return true;\n await new Promise((r) => setTimeout(r, intervalMs));\n }\n return false;\n }\n\n // ── outbound policy ──────────────────────────────────────────────────────\n\n outboundAllowed(url: string): boolean {\n if (!this.options.allowOutbound) return false;\n const hosts = this.options.allowedHosts;\n if (hosts === null || hosts === undefined) return true;\n try {\n const { hostname } = new URL(url);\n return hosts.some((h) => hostname === h || hostname.endsWith(\".\" + h));\n } catch {\n return false;\n }\n }\n\n // ── /proc plumbing ───────────────────────────────────────────────────────\n\n procNetDev(): string {\n let out = \"Inter-| Receive | Transmit\\n\";\n out += \" face |bytes packets errs drop fifo frame compressed multicast|bytes packets errs drop fifo colls carrier compressed\\n\";\n for (const i of this.ifaces) {\n out += `${i.name.padStart(6)}: ${i.rxBytes} ${i.rxPackets} 0 0 0 0 0 0 ${i.txBytes} ${i.txPackets} 0 0 0 0 0 0\\n`;\n }\n return out;\n }\n\n procNetRoute(): string {\n let out = \"Iface\\tDestination\\tGateway \\tFlags\\tRefCnt\\tUse\\tMetric\\tMask\\t\\tMTU\\tWindow\\tIRTT\\n\";\n out += `eth0\\t00000000\\t${hexIp(this.gateway)}\\t0003\\t0\\t0\\t0\\t00000000\\t0\\t0\\t0\\n`;\n out += `eth0\\t0011ACL0\\t00000000\\t0001\\t0\\t0\\t0\\t0000FFFF\\t0\\t0\\t0\\n`;\n return out;\n }\n\n countTx(bytes: number, iface = \"eth0\"): void {\n const i = this.interface(iface);\n if (!i) return;\n i.txBytes += bytes;\n i.txPackets += Math.max(1, Math.ceil(bytes / 1400));\n }\n\n countRx(bytes: number, iface = \"eth0\"): void {\n const i = this.interface(iface);\n if (!i) return;\n i.rxBytes += bytes;\n i.rxPackets += Math.max(1, Math.ceil(bytes / 1400));\n }\n}\n\nfunction randomMac(): string {\n const bytes = [0x02, 0x42, 0xac, 0x11, 0x00, 0x02];\n return bytes.map((b) => b.toString(16).padStart(2, \"0\")).join(\":\");\n}\n\nfunction hexIp(ip: string): string {\n return ip\n .split(\".\")\n .reverse()\n .map((o) => Number(o).toString(16).padStart(2, \"0\").toUpperCase())\n .join(\"\");\n}\n","/**\n * The shell interpreter.\n *\n * Walks the syntax tree, applies redirections, wires pipelines together, and\n * dispatches each simple command to a function, a builtin, or the kernel's\n * executable lookup — in that order, which is the order bash uses.\n */\n\nimport type { Kernel } from \"../kernel/kernel.js\";\nimport type { Process } from \"../kernel/process.js\";\nimport type { Cred } from \"../fs/vfs.js\";\nimport {\n BufferSink,\n FileInput,\n FileOutput,\n NullInput,\n NullOutput,\n Pipe,\n TeeOutput,\n type InputStream,\n type OutputStream,\n} from \"../fs/streams.js\";\nimport { SysError, isSysError } from \"../fs/errno.js\";\nimport * as P from \"../fs/path.js\";\nimport {\n type CaseNode,\n type CondExpr,\n type CondNode,\n type ForArithNode,\n type ForNode,\n type FunctionNode,\n type GroupNode,\n type IfNode,\n type ListNode,\n type Node,\n type PipelineNode,\n type Redirect,\n type SimpleCommandNode,\n type SubshellNode,\n type WhileNode,\n} from \"./ast.js\";\nimport { IncompleteInputError, ShellSyntaxError, parse } from \"./parser.js\";\nimport { Variables, ReadonlyVariableError } from \"./variables.js\";\nimport {\n ExpansionError,\n expandPattern,\n expandWord,\n expandWordToString,\n expandWords,\n matchesPattern,\n shellQuote,\n type ExpandContext,\n} from \"./expand.js\";\nimport { ArithError, evalArith } from \"./arith.js\";\nimport { getBuiltin, isSpecialBuiltin, type Builtin } from \"./builtins/index.js\";\nimport { evaluateTest } from \"./test.js\";\nimport { normalizeSignal } from \"../kernel/signals.js\";\n\nexport interface ShellIO {\n stdin: InputStream;\n stdout: OutputStream;\n stderr: OutputStream;\n}\n\nexport interface ShellOptions {\n /** `set -e` */\n errexit: boolean;\n /** `set -u` */\n nounset: boolean;\n /** `set -x` */\n xtrace: boolean;\n /** `set -v` */\n verbose: boolean;\n /** `set -f` */\n noglob: boolean;\n /** `set -o pipefail` */\n pipefail: boolean;\n /** `set -n` */\n noexec: boolean;\n /** `set -m` */\n monitor: boolean;\n /** `set -C` */\n noclobber: boolean;\n /** `set -a` */\n allexport: boolean;\n /** Interactive shells print prompts and keep history. */\n interactive: boolean;\n /** Login shells source `/etc/profile`. */\n login: boolean;\n}\n\nexport interface Job {\n id: number;\n pgid: number;\n command: string;\n state: \"running\" | \"done\" | \"stopped\";\n exitCode: number | null;\n promise: Promise<number>;\n pids: number[];\n}\n\n// ── control flow ────────────────────────────────────────────────────────────\n\nclass LoopBreak {\n constructor(readonly levels: number) {}\n}\nclass LoopContinue {\n constructor(readonly levels: number) {}\n}\nclass FunctionReturn {\n constructor(readonly code: number) {}\n}\nexport class ShellExit {\n constructor(readonly code: number) {}\n}\n\nexport interface ShellInit {\n kernel: Kernel;\n proc: Process;\n cwd?: string;\n env?: Record<string, string>;\n cred?: Cred;\n options?: Partial<ShellOptions>;\n positional?: string[];\n scriptName?: string;\n}\n\nexport class Shell {\n readonly kernel: Kernel;\n readonly proc: Process;\n readonly vars: Variables;\n readonly functions = new Map<string, Node>();\n readonly aliases = new Map<string, string>();\n readonly traps = new Map<string, string>();\n readonly dirStack: string[] = [];\n readonly jobs: Job[] = [];\n readonly history: string[] = [];\n\n options: ShellOptions = {\n errexit: false,\n nounset: false,\n xtrace: false,\n verbose: false,\n noglob: false,\n pipefail: false,\n noexec: false,\n monitor: false,\n noclobber: false,\n allexport: false,\n interactive: false,\n login: false,\n };\n\n shopts = new Set<string>([\"extglob\", \"sourcepath\", \"promptvars\", \"expand_aliases\", \"checkwinsize\"]);\n\n positional: string[];\n scriptName: string;\n lastStatus = 0;\n lastBackgroundPid = 0;\n cwd: string;\n cred: Cred;\n /** Pipeline exit statuses, exposed as `PIPESTATUS`. */\n pipeStatus: number[] = [];\n private nextJobId = 1;\n private functionDepth = 0;\n private tempFileCounter = 0;\n private exiting = false;\n\n constructor(init: ShellInit) {\n this.kernel = init.kernel;\n this.proc = init.proc;\n this.cwd = init.cwd ?? init.proc.cwd;\n this.cred = init.cred ?? init.proc.cred;\n this.positional = init.positional ?? [];\n this.scriptName = init.scriptName ?? \"sh\";\n this.vars = new Variables(init.env ?? init.proc.env);\n Object.assign(this.options, init.options ?? {});\n\n this.vars.set(\"PWD\", this.cwd, { exported: true });\n this.vars.set(\"SHELL\", \"/bin/sh\", { exported: true });\n this.vars.set(\"PPID\", String(this.proc.ppid));\n if (!this.vars.has(\"IFS\")) this.vars.set(\"IFS\", \" \\t\\n\");\n if (!this.vars.has(\"PS1\")) this.vars.set(\"PS1\", \"\\\\u@\\\\h:\\\\w\\\\$ \");\n if (!this.vars.has(\"PS2\")) this.vars.set(\"PS2\", \"> \");\n if (!this.vars.has(\"HOSTNAME\")) this.vars.set(\"HOSTNAME\", this.kernel.hostname, { exported: true });\n if (!this.vars.has(\"HISTFILE\")) this.vars.set(\"HISTFILE\", (this.vars.get(\"HOME\") ?? \"/root\") + \"/.sh_history\");\n }\n\n // ── public entry points ──────────────────────────────────────────────────\n\n /** Parse and run a script fragment. Returns the last exit status. */\n async execute(source: string, io: ShellIO): Promise<number> {\n let tree: Node;\n try {\n tree = parse(source);\n } catch (e) {\n if (e instanceof ShellSyntaxError) {\n io.stderr.write(`${this.scriptName}: ${e.message}\\n`);\n return 2;\n }\n throw e;\n }\n if (this.options.noexec) return 0;\n try {\n this.lastStatus = await this.run(tree, io);\n } catch (e) {\n if (e instanceof ShellExit) {\n this.exiting = true;\n this.lastStatus = e.code;\n await this.runTrap(\"EXIT\", io);\n return e.code;\n }\n if (e instanceof FunctionReturn) return e.code;\n if (e instanceof LoopBreak || e instanceof LoopContinue) return this.lastStatus;\n throw e;\n }\n return this.lastStatus;\n }\n\n get isExiting(): boolean {\n return this.exiting;\n }\n\n /** True when `source` is not yet a complete command (for REPL continuation). */\n static isIncomplete(source: string): boolean {\n try {\n parse(source);\n return false;\n } catch (e) {\n return e instanceof IncompleteInputError;\n }\n }\n\n // ── expansion context ────────────────────────────────────────────────────\n\n expandContext(): ExpandContext {\n const shell = this;\n return {\n vars: this.vars,\n positional: this.positional,\n scriptName: this.scriptName,\n lastStatus: this.lastStatus,\n shellPid: this.proc.pid,\n lastBackgroundPid: this.lastBackgroundPid,\n optionFlags: this.optionFlagString(),\n cwd: this.cwd,\n vfs: this.kernel.vfs,\n cred: this.cred,\n nounset: this.options.nounset,\n noglob: this.options.noglob,\n extglob: this.shopts.has(\"extglob\"),\n dotglob: this.shopts.has(\"dotglob\"),\n nullglob: this.shopts.has(\"nullglob\"),\n failglob: this.shopts.has(\"failglob\"),\n homeFor(user: string): string | undefined {\n return shell.kernel.users.userByName(user)?.home;\n },\n async runSubstitution(command: string): Promise<string> {\n return shell.captureSubshell(command);\n },\n async processSubstitution(command: string, direction: \"in\" | \"out\"): Promise<string> {\n return shell.makeProcessSubstitution(command, direction);\n },\n };\n }\n\n optionFlagString(): string {\n let flags = \"\";\n if (this.options.errexit) flags += \"e\";\n if (this.options.nounset) flags += \"u\";\n if (this.options.xtrace) flags += \"x\";\n if (this.options.noglob) flags += \"f\";\n if (this.options.verbose) flags += \"v\";\n if (this.options.monitor) flags += \"m\";\n if (this.options.interactive) flags += \"i\";\n if (this.options.noclobber) flags += \"C\";\n if (this.options.allexport) flags += \"a\";\n return flags || \"hB\";\n }\n\n /** Run `command` in a subshell and return its stdout. */\n async captureSubshell(command: string): Promise<string> {\n const sub = this.fork();\n const out = new BufferSink();\n const io: ShellIO = { stdin: new NullInput(), stdout: out, stderr: this.currentIO.stderr };\n try {\n await sub.execute(command, io);\n } catch (e) {\n if (!(e instanceof ShellExit)) throw e;\n }\n this.lastStatus = sub.lastStatus;\n return out.text();\n }\n\n /** `<(cmd)` — run the command now and hand back a path holding its output. */\n private async makeProcessSubstitution(command: string, direction: \"in\" | \"out\"): Promise<string> {\n const path = `/tmp/.sbx-procsub-${this.proc.pid}-${this.tempFileCounter++}`;\n if (direction === \"in\") {\n const text = await this.captureSubshell(command);\n this.kernel.vfs.writeFile(path, text, { cred: this.cred, mode: 0o600 });\n } else {\n this.kernel.vfs.writeFile(path, \"\", { cred: this.cred, mode: 0o600 });\n }\n return path;\n }\n\n /** A copy that shares nothing mutable with this shell. */\n fork(): Shell {\n const sub = new Shell({\n kernel: this.kernel,\n proc: this.proc,\n cwd: this.cwd,\n cred: this.cred,\n env: {},\n positional: [...this.positional],\n scriptName: this.scriptName,\n });\n for (const { name, entry } of this.vars.all()) {\n if (entry.array) sub.vars.setArray(name, [...entry.array], { exported: entry.exported });\n else sub.vars.set(name, entry.value, { exported: entry.exported });\n }\n for (const [name, body] of this.functions) sub.functions.set(name, body);\n for (const [name, value] of this.aliases) sub.aliases.set(name, value);\n sub.options = { ...this.options, interactive: false };\n sub.shopts = new Set(this.shopts);\n sub.lastStatus = this.lastStatus;\n return sub;\n }\n\n // ── traversal ────────────────────────────────────────────────────────────\n\n private currentIO: ShellIO = { stdin: new NullInput(), stdout: new NullOutput(), stderr: new NullOutput() };\n\n async run(node: Node, io: ShellIO): Promise<number> {\n this.currentIO = io;\n switch (node.type) {\n case \"list\":\n return this.runList(node, io);\n case \"pipeline\":\n return this.runPipeline(node, io);\n case \"command\":\n return this.runSimpleCommand(node, io);\n case \"subshell\":\n return this.runSubshell(node, io);\n case \"group\":\n return this.runGroup(node, io);\n case \"if\":\n return this.runIf(node, io);\n case \"for\":\n return this.runFor(node, io);\n case \"for-arith\":\n return this.runForArith(node, io);\n case \"while\":\n return this.runWhile(node, io);\n case \"case\":\n return this.runCase(node, io);\n case \"function\":\n return this.runFunctionDefinition(node);\n case \"arith\":\n return this.runArithCommand(node, io);\n case \"cond\":\n return this.runCond(node, io);\n default:\n return 0;\n }\n }\n\n private async runList(node: ListNode, io: ShellIO): Promise<number> {\n let status = this.lastStatus;\n for (let i = 0; i < node.items.length; i++) {\n const item = node.items[i]!;\n\n if (item.op === \"&\") {\n this.startBackgroundJob(item.node, io);\n status = 0;\n this.lastStatus = 0;\n continue;\n }\n\n status = await this.run(item.node, io);\n this.lastStatus = status;\n\n const next = node.items[i + 1];\n if (item.op === \"&&\" && status !== 0) {\n // Skip the right-hand side, and any further `&&` in the chain.\n i = this.skipChain(node.items, i, status);\n status = this.lastStatus;\n continue;\n }\n if (item.op === \"||\" && status === 0) {\n i = this.skipChain(node.items, i, status);\n status = this.lastStatus;\n continue;\n }\n void next;\n\n if (this.options.errexit && status !== 0 && item.op !== \"&&\" && item.op !== \"||\") {\n throw new ShellExit(status);\n }\n }\n return status;\n }\n\n /** Skip past short-circuited members of an `&&`/`||` chain. */\n private skipChain(items: ListNode[\"items\"], from: number, status: number): number {\n let i = from + 1;\n while (i < items.length) {\n const item = items[i]!;\n const shortCircuits =\n (items[from]!.op === \"&&\" && status !== 0 && (item.op === \"&&\" || item.op === \";\")) ||\n (items[from]!.op === \"||\" && status === 0 && (item.op === \"||\" || item.op === \";\"));\n if (!shortCircuits) break;\n if (item.op === \";\") return i;\n i++;\n }\n return i - 1;\n }\n\n private async runPipeline(node: PipelineNode, io: ShellIO): Promise<number> {\n const started = Date.now();\n const n = node.commands.length;\n if (n === 1) {\n let status = await this.run(node.commands[0]!, io);\n if (node.negated) status = status === 0 ? 1 : 0;\n this.pipeStatus = [status];\n if (node.timed) this.reportTime(io, started);\n return status;\n }\n\n const pipes: Pipe[] = [];\n for (let i = 0; i < n - 1; i++) pipes.push(new Pipe());\n\n const tasks: Array<Promise<number>> = [];\n for (let i = 0; i < n; i++) {\n const stdin = i === 0 ? io.stdin : pipes[i - 1]!;\n const stdout = i === n - 1 ? io.stdout : pipes[i]!;\n const mergeStderr = i < n - 1 && node.stderrToo[i] === true;\n const stderr = mergeStderr ? (pipes[i]! as OutputStream) : io.stderr;\n\n const stage = this.forkForPipeline();\n tasks.push(\n (async () => {\n try {\n return await stage.run(node.commands[i]!, { stdin, stdout, stderr });\n } catch (e) {\n if (e instanceof ShellExit) return e.code;\n if (e instanceof FunctionReturn) return e.code;\n throw e;\n } finally {\n if (i < n - 1) pipes[i]!.end();\n if (i > 0) pipes[i - 1]!.close();\n }\n })(),\n );\n }\n\n const statuses = await Promise.all(tasks);\n this.pipeStatus = statuses;\n let status = this.options.pipefail ? (statuses.find((s) => s !== 0) ?? 0) : statuses[statuses.length - 1]!;\n if (node.negated) status = status === 0 ? 1 : 0;\n if (node.timed) this.reportTime(io, started);\n return status;\n }\n\n /**\n * Every stage of a pipeline runs in its own subshell in bash. Sharing the\n * variable table would let `echo x | read v` leak `v` into the parent.\n */\n private forkForPipeline(): Shell {\n const stage = this.fork();\n stage.functions.clear();\n for (const [k, v] of this.functions) stage.functions.set(k, v);\n return stage;\n }\n\n private reportTime(io: ShellIO, started: number): void {\n const ms = Date.now() - started;\n const fmt = (v: number) => `${Math.floor(v / 60000)}m${((v % 60000) / 1000).toFixed(3)}s`;\n io.stderr.write(`\\nreal\\t${fmt(ms)}\\nuser\\t${fmt(Math.floor(ms * 0.6))}\\nsys\\t${fmt(Math.floor(ms * 0.2))}\\n`);\n }\n\n private startBackgroundJob(node: Node, io: ShellIO): void {\n const sub = this.fork();\n const id = this.nextJobId++;\n const command = describeNode(node);\n const job: Job = {\n id,\n pgid: this.proc.pid + id,\n command,\n state: \"running\",\n exitCode: null,\n pids: [],\n promise: Promise.resolve(0),\n };\n job.promise = (async () => {\n try {\n const code = await sub.run(node, { stdin: new NullInput(), stdout: io.stdout, stderr: io.stderr });\n job.exitCode = code;\n job.state = \"done\";\n return code;\n } catch (e) {\n job.state = \"done\";\n job.exitCode = e instanceof ShellExit ? e.code : 1;\n return job.exitCode;\n }\n })();\n this.jobs.push(job);\n this.lastBackgroundPid = job.pgid;\n if (this.options.interactive) io.stderr.write(`[${id}] ${job.pgid}\\n`);\n }\n\n // ── compound commands ────────────────────────────────────────────────────\n\n private async runSubshell(node: SubshellNode, io: ShellIO): Promise<number> {\n const redirected = await this.applyRedirects(node.redirects, io);\n try {\n const sub = this.fork();\n try {\n return await sub.run(node.body, redirected.io);\n } catch (e) {\n if (e instanceof ShellExit) return e.code;\n throw e;\n }\n } finally {\n redirected.cleanup();\n }\n }\n\n private async runGroup(node: GroupNode, io: ShellIO): Promise<number> {\n const redirected = await this.applyRedirects(node.redirects, io);\n try {\n return await this.run(node.body, redirected.io);\n } finally {\n redirected.cleanup();\n }\n }\n\n private async runIf(node: IfNode, io: ShellIO): Promise<number> {\n const redirected = await this.applyRedirects(node.redirects, io);\n try {\n for (const clause of node.clauses) {\n const condition = await this.runCondition(clause.condition, redirected.io);\n if (condition === 0) return await this.run(clause.body, redirected.io);\n }\n if (node.elseBody) return await this.run(node.elseBody, redirected.io);\n return 0;\n } finally {\n redirected.cleanup();\n }\n }\n\n /** Conditions are exempt from `set -e`. */\n private async runCondition(node: Node, io: ShellIO): Promise<number> {\n const previous = this.options.errexit;\n this.options.errexit = false;\n try {\n return await this.run(node, io);\n } finally {\n this.options.errexit = previous;\n }\n }\n\n private async runFor(node: ForNode, io: ShellIO): Promise<number> {\n const redirected = await this.applyRedirects(node.redirects, io);\n try {\n const items = node.words === undefined ? [...this.positional] : await expandWords(node.words, this.expandContext());\n let status = 0;\n if (node.select) return await this.runSelect(node, items, redirected.io);\n for (const item of items) {\n this.vars.set(node.name, item);\n try {\n status = await this.run(node.body, redirected.io);\n } catch (e) {\n if (e instanceof LoopBreak) {\n if (e.levels > 1) throw new LoopBreak(e.levels - 1);\n break;\n }\n if (e instanceof LoopContinue) {\n if (e.levels > 1) throw new LoopContinue(e.levels - 1);\n continue;\n }\n throw e;\n }\n }\n return status;\n } finally {\n redirected.cleanup();\n }\n }\n\n private async runSelect(node: ForNode, items: string[], io: ShellIO): Promise<number> {\n let status = 0;\n for (;;) {\n const ps3 = this.vars.get(\"PS3\") ?? \"#? \";\n items.forEach((item, idx) => io.stderr.write(`${idx + 1}) ${item}\\n`));\n io.stderr.write(ps3);\n const line = await io.stdin.readLine();\n if (line === null) break;\n this.vars.set(\"REPLY\", line);\n const index = Number(line.trim());\n this.vars.set(node.name, Number.isFinite(index) && index >= 1 && index <= items.length ? items[index - 1]! : \"\");\n try {\n status = await this.run(node.body, io);\n } catch (e) {\n if (e instanceof LoopBreak) break;\n if (e instanceof LoopContinue) continue;\n throw e;\n }\n }\n return status;\n }\n\n private async runForArith(node: ForArithNode, io: ShellIO): Promise<number> {\n const redirected = await this.applyRedirects(node.redirects, io);\n const scope = { get: (n: string) => this.vars.get(n), set: (n: string, v: string) => this.vars.set(n, v) };\n try {\n let status = 0;\n if (node.init.trim() !== \"\") evalArith(node.init, scope);\n for (let guard = 0; guard < 10_000_000; guard++) {\n if (node.condition.trim() !== \"\" && evalArith(node.condition, scope) === 0) break;\n try {\n status = await this.run(node.body, redirected.io);\n } catch (e) {\n if (e instanceof LoopBreak) {\n if (e.levels > 1) throw new LoopBreak(e.levels - 1);\n break;\n }\n if (e instanceof LoopContinue) {\n if (e.levels > 1) throw new LoopContinue(e.levels - 1);\n } else throw e;\n }\n if (node.step.trim() !== \"\") evalArith(node.step, scope);\n }\n return status;\n } catch (e) {\n if (e instanceof ArithError) {\n io.stderr.write(`${this.scriptName}: ${e.message}\\n`);\n return 1;\n }\n throw e;\n } finally {\n redirected.cleanup();\n }\n }\n\n private async runWhile(node: WhileNode, io: ShellIO): Promise<number> {\n const redirected = await this.applyRedirects(node.redirects, io);\n try {\n let status = 0;\n for (;;) {\n if (this.proc.signal.aborted) break;\n const condition = await this.runCondition(node.condition, redirected.io);\n const proceed = node.until ? condition !== 0 : condition === 0;\n if (!proceed) break;\n try {\n status = await this.run(node.body, redirected.io);\n } catch (e) {\n if (e instanceof LoopBreak) {\n if (e.levels > 1) throw new LoopBreak(e.levels - 1);\n break;\n }\n if (e instanceof LoopContinue) {\n if (e.levels > 1) throw new LoopContinue(e.levels - 1);\n continue;\n }\n throw e;\n }\n }\n return status;\n } finally {\n redirected.cleanup();\n }\n }\n\n private async runCase(node: CaseNode, io: ShellIO): Promise<number> {\n const redirected = await this.applyRedirects(node.redirects, io);\n try {\n const subject = await expandWordToString(node.word, this.expandContext());\n let status = 0;\n let fallingThrough = false;\n for (const item of node.items) {\n let matched = fallingThrough;\n if (!matched) {\n for (const pattern of item.patterns) {\n const expanded = await expandPattern(pattern, this.expandContext());\n if (matchesPattern(subject, expanded, this.shopts.has(\"extglob\"))) {\n matched = true;\n break;\n }\n }\n }\n if (!matched) continue;\n if (item.body) status = await this.run(item.body, redirected.io);\n if (item.terminator === \";&\") {\n fallingThrough = true;\n continue;\n }\n if (item.terminator === \";;&\") {\n fallingThrough = false;\n continue;\n }\n return status;\n }\n return status;\n } finally {\n redirected.cleanup();\n }\n }\n\n private runFunctionDefinition(node: FunctionNode): number {\n this.functions.set(node.name, node.body);\n return 0;\n }\n\n private async runArithCommand(node: Node & { expression: string }, io: ShellIO): Promise<number> {\n try {\n const expanded = await expandWordToString(node.expression, this.expandContext());\n const value = evalArith(expanded, {\n get: (n) => this.vars.get(n),\n set: (n, v) => this.vars.set(n, v),\n });\n return value !== 0 ? 0 : 1;\n } catch (e) {\n if (e instanceof ArithError) {\n io.stderr.write(`${this.scriptName}: ${e.message}\\n`);\n return 1;\n }\n throw e;\n }\n }\n\n private async runCond(node: CondNode, io: ShellIO): Promise<number> {\n try {\n const result = await this.evalCond(node.expression);\n return result ? 0 : 1;\n } catch (e) {\n io.stderr.write(`${this.scriptName}: ${e instanceof Error ? e.message : String(e)}\\n`);\n return 2;\n }\n }\n\n private async evalCond(expr: CondExpr): Promise<boolean> {\n const ctx = this.expandContext();\n switch (expr.type) {\n case \"not\":\n return !(await this.evalCond(expr.operand));\n case \"and\":\n return (await this.evalCond(expr.left)) && (await this.evalCond(expr.right));\n case \"or\":\n return (await this.evalCond(expr.left)) || (await this.evalCond(expr.right));\n case \"word\": {\n const value = await expandWordToString(expr.value, ctx);\n return value !== \"\";\n }\n case \"unary\": {\n const operand = await expandWordToString(expr.operand, ctx);\n return evaluateTest([expr.op, operand], this) === 0;\n }\n case \"binary\": {\n const left = await expandWordToString(expr.left, ctx);\n if (expr.op === \"=~\") {\n const pattern = await expandWordToString(expr.right, ctx);\n try {\n const re = new RegExp(pattern);\n const m = re.exec(left);\n this.vars.setArray(\"BASH_REMATCH\", m ? [...m] : []);\n return m !== null;\n } catch {\n return false;\n }\n }\n if (expr.op === \"==\" || expr.op === \"=\" || expr.op === \"!=\") {\n const pattern = await expandPattern(expr.right, ctx);\n const matched = matchesPattern(left, pattern, this.shopts.has(\"extglob\"));\n return expr.op === \"!=\" ? !matched : matched;\n }\n const right = await expandWordToString(expr.right, ctx);\n if (expr.op === \"<\") return left < right;\n if (expr.op === \">\") return left > right;\n return evaluateTest([left, expr.op, right], this) === 0;\n }\n }\n }\n\n // ── simple commands ──────────────────────────────────────────────────────\n\n private async runSimpleCommand(node: SimpleCommandNode, io: ShellIO): Promise<number> {\n const ctx = this.expandContext();\n\n // Assignments with no command word mutate the shell.\n if (node.words.length === 0) {\n const redirected = await this.applyRedirects(node.redirects, io);\n try {\n for (const assignment of node.assignments) {\n await this.applyAssignment(assignment, false);\n }\n return 0;\n } catch (e) {\n return this.reportCommandError(e, io);\n } finally {\n redirected.cleanup();\n }\n }\n\n let words: string[];\n try {\n words = await expandWords(this.substituteAlias(node.words), ctx);\n } catch (e) {\n return this.reportCommandError(e, io);\n }\n if (words.length === 0) {\n for (const assignment of node.assignments) await this.applyAssignment(assignment, false);\n return 0;\n }\n\n if (this.options.xtrace) {\n const ps4 = this.vars.get(\"PS4\") ?? \"+ \";\n io.stderr.write(ps4 + words.map(shellQuote).join(\" \") + \"\\n\");\n }\n\n const redirected = await this.applyRedirects(node.redirects, io);\n try {\n return await this.invoke(words, node.assignments, redirected.io);\n } catch (e) {\n return this.reportCommandError(e, redirected.io);\n } finally {\n redirected.cleanup();\n }\n }\n\n private reportCommandError(e: unknown, io: ShellIO): number {\n if (e instanceof ShellExit || e instanceof FunctionReturn || e instanceof LoopBreak || e instanceof LoopContinue) {\n throw e;\n }\n if (e instanceof ExpansionError || e instanceof ArithError || e instanceof ReadonlyVariableError) {\n io.stderr.write(`${this.scriptName}: ${e.message}\\n`);\n return 1;\n }\n if (isSysError(e)) {\n io.stderr.write(`${this.scriptName}: ${e.message}\\n`);\n return 1;\n }\n throw e;\n }\n\n /** One level of alias substitution on the command word. */\n private substituteAlias(words: string[]): string[] {\n if (!this.shopts.has(\"expand_aliases\") || words.length === 0) return words;\n const seen = new Set<string>();\n let current = words;\n for (let i = 0; i < 8; i++) {\n const head = current[0]!;\n if (seen.has(head)) break;\n const replacement = this.aliases.get(head);\n if (replacement === undefined) break;\n seen.add(head);\n const parts = splitAliasWords(replacement);\n if (parts.length === 0) break;\n current = [...parts, ...current.slice(1)];\n }\n return current;\n }\n\n private async invoke(words: string[], assignments: SimpleCommandNode[\"assignments\"], io: ShellIO): Promise<number> {\n const [name, ...args] = words as [string, ...string[]];\n\n // 1. Functions.\n const fn = this.functions.get(name);\n if (fn) return await this.callFunction(name, fn, args, assignments, io);\n\n // 2. Builtins.\n const builtin = getBuiltin(name);\n if (builtin) {\n const restore = await this.applyTemporaryAssignments(assignments, isSpecialBuiltin(name));\n try {\n return await builtin({ shell: this, argv: words, io });\n } finally {\n restore();\n }\n }\n\n // 3. External programs.\n return await this.runExternal(words, assignments, io);\n }\n\n private async callFunction(\n name: string,\n body: Node,\n args: string[],\n assignments: SimpleCommandNode[\"assignments\"],\n io: ShellIO,\n ): Promise<number> {\n if (this.functionDepth > 200) {\n io.stderr.write(`${this.scriptName}: ${name}: maximum function nesting level exceeded\\n`);\n return 1;\n }\n const savedPositional = this.positional;\n const savedName = this.scriptName;\n const restore = await this.applyTemporaryAssignments(assignments, true);\n this.positional = args;\n this.vars.pushScope();\n this.functionDepth++;\n this.vars.set(\"FUNCNAME\", name);\n try {\n return await this.run(body, io);\n } catch (e) {\n if (e instanceof FunctionReturn) return e.code;\n throw e;\n } finally {\n this.functionDepth--;\n this.vars.popScope();\n this.positional = savedPositional;\n this.scriptName = savedName;\n restore();\n }\n }\n\n private async runExternal(words: string[], assignments: SimpleCommandNode[\"assignments\"], io: ShellIO): Promise<number> {\n const env: Record<string, string> = { ...this.vars.environment(), PWD: this.cwd };\n for (const assignment of assignments) {\n env[assignment.name] = await expandWordToString(assignment.value, this.expandContext());\n }\n\n const proc = this.kernel.spawn(words, {\n cwd: this.cwd,\n env,\n cred: this.cred,\n ppid: this.proc.pid,\n stdin: io.stdin,\n stdout: io.stdout,\n stderr: io.stderr,\n });\n const code = await proc.wait();\n // Keep the shell's cwd in step when a builtin-backed command changed it.\n if (proc.cwd !== this.cwd && this.kernel.vfs.lexists(proc.cwd)) {\n // Only `cd`-like builtins do this, and those run in-shell; ignore.\n }\n return code;\n }\n\n /** `VAR=x cmd` — set for the duration, then restore. */\n private async applyTemporaryAssignments(\n assignments: SimpleCommandNode[\"assignments\"],\n persist: boolean,\n ): Promise<() => void> {\n if (assignments.length === 0) return () => {};\n const saved: Array<{ name: string; had: boolean; value: string; exported: boolean }> = [];\n for (const assignment of assignments) {\n const entry = this.vars.entry(assignment.name);\n saved.push({\n name: assignment.name,\n had: entry !== undefined,\n value: entry?.value ?? \"\",\n exported: entry?.exported ?? false,\n });\n await this.applyAssignment(assignment, true);\n }\n if (persist) return () => {};\n return () => {\n for (const s of saved) {\n if (s.had) this.vars.set(s.name, s.value, { exported: s.exported });\n else this.vars.unset(s.name);\n }\n };\n }\n\n async applyAssignment(assignment: SimpleCommandNode[\"assignments\"][number], exported: boolean): Promise<void> {\n const ctx = this.expandContext();\n if (assignment.arrayWords) {\n const values = await expandWords(assignment.arrayWords, ctx);\n this.vars.setArray(assignment.name, values, { exported: exported || this.options.allexport });\n return;\n }\n const value = await expandWordToString(assignment.value, ctx);\n if (assignment.append) this.vars.append(assignment.name, value);\n else this.vars.set(assignment.name, value, { exported: exported || this.options.allexport });\n }\n\n // ── redirections ─────────────────────────────────────────────────────────\n\n async applyRedirects(redirects: Redirect[], io: ShellIO): Promise<{ io: ShellIO; cleanup: () => void }> {\n if (redirects.length === 0) return { io, cleanup: () => {} };\n\n const result: ShellIO = { ...io };\n const closers: Array<() => void> = [];\n const ctx = this.expandContext();\n\n for (const redirect of redirects) {\n const target = redirect.heredoc ? redirect.target : await expandWordToString(redirect.target, ctx);\n\n switch (redirect.op) {\n case \"<\": {\n const path = P.resolve(this.cwd, target);\n const input = this.openInput(path);\n result.stdin = input;\n closers.push(() => input.close());\n break;\n }\n case \"<<\": {\n const body = redirect.heredoc!.expand\n ? await this.expandHeredoc(redirect.heredoc!.body)\n : redirect.heredoc!.body;\n result.stdin = Pipe.from(body);\n break;\n }\n case \"<<<\": {\n result.stdin = Pipe.from(target + \"\\n\");\n break;\n }\n case \">\":\n case \">|\":\n case \">>\": {\n const path = P.resolve(this.cwd, target);\n const append = redirect.op === \">>\";\n if (this.options.noclobber && redirect.op === \">\" && this.kernel.vfs.lexists(path)) {\n throw new SysError(\"EEXIST\", \"open\", path);\n }\n const out = this.openOutput(path, append);\n if ((redirect.fd ?? 1) === 2) result.stderr = out;\n else result.stdout = out;\n closers.push(() => out.end());\n break;\n }\n case \"&>\":\n case \"&>>\": {\n const path = P.resolve(this.cwd, target);\n const out = this.openOutput(path, redirect.op === \"&>>\");\n result.stdout = out;\n result.stderr = out;\n closers.push(() => out.end());\n break;\n }\n case \">&\": {\n const fd = redirect.fd ?? 1;\n if (target === \"1\") {\n if (fd === 2) result.stderr = result.stdout;\n else result.stdout = result.stdout;\n } else if (target === \"2\") {\n if (fd === 1) result.stdout = result.stderr;\n else result.stderr = result.stderr;\n } else if (target === \"-\") {\n if (fd === 2) result.stderr = new NullOutput();\n else result.stdout = new NullOutput();\n } else {\n const path = P.resolve(this.cwd, target);\n const out = this.openOutput(path, false);\n if (fd === 2) result.stderr = out;\n else result.stdout = out;\n closers.push(() => out.end());\n }\n break;\n }\n case \"<&\": {\n if (target === \"-\") result.stdin = new NullInput();\n else if (target !== \"0\") {\n const path = P.resolve(this.cwd, target);\n const input = this.openInput(path);\n result.stdin = input;\n closers.push(() => input.close());\n }\n break;\n }\n case \"<>\": {\n const path = P.resolve(this.cwd, target);\n if (!this.kernel.vfs.lexists(path)) {\n this.kernel.vfs.writeFile(path, \"\", { cred: this.cred, mode: 0o666 });\n }\n const input = this.openInput(path);\n result.stdin = input;\n closers.push(() => input.close());\n break;\n }\n }\n }\n\n return { io: result, cleanup: () => closers.forEach((c) => c()) };\n }\n\n private openInput(path: string): InputStream {\n return new FileInput(this.kernel.vfs, path, this.cred);\n }\n\n private openOutput(path: string, append: boolean): OutputStream {\n if (path === \"/dev/null\") return new NullOutput();\n if (path === \"/dev/stdout\") return this.currentIO.stdout;\n if (path === \"/dev/stderr\") return this.currentIO.stderr;\n return new FileOutput(this.kernel.vfs, path, { append, cred: this.cred });\n }\n\n private async expandHeredoc(body: string): Promise<string> {\n // A here-doc body is expanded like a double-quoted string.\n const fragments = await expandWordToString(`\"${body.replace(/\\\\/g, \"\\\\\\\\\").replace(/\"/g, '\\\\\"')}\"`, this.expandContext());\n return fragments;\n }\n\n // ── traps and signals ────────────────────────────────────────────────────\n\n setTrap(signal: string, action: string): void {\n const canonical = signal.toUpperCase() === \"EXIT\" || signal === \"0\" ? \"EXIT\" : (normalizeSignal(signal) ?? signal);\n if (action === \"-\") this.traps.delete(canonical);\n else this.traps.set(canonical, action);\n }\n\n async runTrap(signal: string, io: ShellIO): Promise<void> {\n const action = this.traps.get(signal);\n if (!action || action === \"\") return;\n const saved = this.lastStatus;\n try {\n await this.execute(action, io);\n } catch (e) {\n if (!(e instanceof ShellExit)) throw e;\n }\n this.lastStatus = saved;\n }\n\n // ── helpers used by builtins ─────────────────────────────────────────────\n\n changeDirectory(target: string): void {\n const abs = P.resolve(this.cwd, target);\n const st = this.kernel.vfs.stat(abs, { cred: this.cred });\n if (!st.isDirectory()) throw new SysError(\"ENOTDIR\", \"chdir\", abs);\n this.kernel.vfs.access(abs, 1, this.cred);\n this.vars.set(\"OLDPWD\", this.cwd, { exported: true });\n this.cwd = abs;\n this.proc.cwd = abs;\n this.vars.set(\"PWD\", abs, { exported: true });\n }\n\n throwBreak(levels: number): never {\n throw new LoopBreak(levels);\n }\n throwContinue(levels: number): never {\n throw new LoopContinue(levels);\n }\n throwReturn(code: number): never {\n throw new FunctionReturn(code);\n }\n throwExit(code: number): never {\n throw new ShellExit(code);\n }\n\n addJob(job: Job): void {\n this.jobs.push(job);\n }\n\n reapJobs(): Job[] {\n const finished = this.jobs.filter((j) => j.state === \"done\");\n for (const job of finished) {\n const idx = this.jobs.indexOf(job);\n if (idx >= 0) this.jobs.splice(idx, 1);\n }\n return finished;\n }\n}\n\nfunction splitAliasWords(text: string): string[] {\n const out: string[] = [];\n let current = \"\";\n let quote: string | null = null;\n for (let i = 0; i < text.length; i++) {\n const c = text[i]!;\n if (quote) {\n if (c === quote) quote = null;\n else current += c;\n continue;\n }\n if (c === \"'\" || c === '\"') {\n quote = c;\n continue;\n }\n if (c === \" \" || c === \"\\t\") {\n if (current !== \"\") out.push(current);\n current = \"\";\n continue;\n }\n current += c;\n }\n if (current !== \"\") out.push(current);\n return out;\n}\n\nfunction describeNode(node: Node): string {\n switch (node.type) {\n case \"command\":\n return node.words.join(\" \") || node.assignments.map((a) => `${a.name}=${a.value}`).join(\" \");\n case \"pipeline\":\n return node.commands.map(describeNode).join(\" | \");\n case \"list\":\n return node.items.map((i) => describeNode(i.node)).join(\"; \");\n case \"subshell\":\n return `( ${describeNode(node.body)} )`;\n case \"group\":\n return `{ ${describeNode(node.body)}; }`;\n default:\n return node.type;\n }\n}\n\nexport type { Builtin };\n","/**\n * Shell tokenizer.\n *\n * Words are kept as *raw* text with their quotes intact — expansion happens\n * later, in `expand.ts`, which is the only stage that needs to distinguish\n * `\"$x\"` from `$x`. The lexer's job is to find word boundaries correctly in the\n * presence of quoting, `$(...)`, backticks and `${...}`, and to pull here-doc\n * bodies out of the stream at the right moment.\n */\n\nexport type TokenType = \"word\" | \"op\" | \"newline\" | \"eof\" | \"io_number\";\n\nexport interface HeredocInfo {\n tag: string;\n /** `<<-` strips leading tabs from the body and the delimiter line. */\n stripTabs: boolean;\n /** A quoted tag disables expansion inside the body. */\n quoted: boolean;\n body: string;\n}\n\nexport interface Token {\n type: TokenType;\n value: string;\n pos: number;\n /** Attached to the `<<` operator token once the body has been collected. */\n heredoc?: HeredocInfo;\n}\n\nexport class ShellSyntaxError extends Error {\n constructor(\n message: string,\n readonly pos: number,\n ) {\n super(message);\n this.name = \"ShellSyntaxError\";\n }\n}\n\n/** Thrown when input ends mid-construct, so a REPL can ask for another line. */\nexport class IncompleteInputError extends ShellSyntaxError {\n constructor(message: string, pos: number) {\n super(message, pos);\n this.name = \"IncompleteInputError\";\n }\n}\n\nconst OPERATORS = [\n \"<<<\",\n \"&>>\",\n \"<<-\",\n \";;&\",\n \"||\",\n \"&&\",\n \";;\",\n \";&\",\n \">>\",\n \"<<\",\n \"<&\",\n \">&\",\n \"<>\",\n \">|\",\n \"|&\",\n \"&>\",\n \"|\",\n \"&\",\n \";\",\n \"(\",\n \")\",\n \"<\",\n \">\",\n];\n\nconst OPERATOR_STARTS = new Set(OPERATORS.map((o) => o[0]!));\n\nexport function isOperatorChar(ch: string): boolean {\n return OPERATOR_STARTS.has(ch);\n}\n\nexport class Lexer {\n private pos = 0;\n private readonly tokens: Token[] = [];\n /** Here-docs whose bodies are collected when the current line ends. */\n private pendingHeredocs: Token[] = [];\n\n constructor(private readonly src: string) {}\n\n static tokenize(src: string): Token[] {\n return new Lexer(src).run();\n }\n\n run(): Token[] {\n for (;;) {\n this.skipBlanks();\n if (this.pos >= this.src.length) break;\n\n const ch = this.src[this.pos]!;\n\n if (ch === \"#\") {\n while (this.pos < this.src.length && this.src[this.pos] !== \"\\n\") this.pos++;\n continue;\n }\n\n if (ch === \"\\n\") {\n this.pos++;\n this.push({ type: \"newline\", value: \"\\n\", pos: this.pos - 1 });\n this.collectHeredocs();\n continue;\n }\n\n if (ch === \"\\\\\" && this.src[this.pos + 1] === \"\\n\") {\n // Line continuation: the newline disappears entirely.\n this.pos += 2;\n continue;\n }\n\n if (isOperatorChar(ch)) {\n const op = this.matchOperator();\n if (op) {\n // An IO number is digits glued to the front of a redirection.\n const prev = this.tokens[this.tokens.length - 1];\n if (\n prev &&\n prev.type === \"word\" &&\n /^\\d+$/.test(prev.value) &&\n (op === \"<\" || op === \">\" || op === \">>\" || op === \"<&\" || op === \">&\" || op === \"<>\" || op === \">|\") &&\n this.adjacent(prev)\n ) {\n prev.type = \"io_number\";\n }\n const token: Token = { type: \"op\", value: op, pos: this.pos };\n this.pos += op.length;\n this.push(token);\n if (op === \"<<\" || op === \"<<-\") this.pendingHeredocs.push(token);\n continue;\n }\n }\n\n this.readWord();\n }\n\n this.push({ type: \"eof\", value: \"\", pos: this.pos });\n return this.tokens;\n }\n\n private push(t: Token): void {\n this.tokens.push(t);\n }\n\n /** True when `prev` ends exactly where the current operator begins. */\n private adjacent(prev: Token): boolean {\n return prev.pos + prev.value.length === this.pos;\n }\n\n private skipBlanks(): void {\n while (this.pos < this.src.length) {\n const c = this.src[this.pos]!;\n if (c === \" \" || c === \"\\t\" || c === \"\\r\") this.pos++;\n else break;\n }\n }\n\n private matchOperator(): string | null {\n for (const op of OPERATORS) {\n if (this.src.startsWith(op, this.pos)) {\n // `<<` is only a here-doc when not followed by `<` (that is `<<<`).\n return op;\n }\n }\n return null;\n }\n\n private readWord(): void {\n const start = this.pos;\n let out = \"\";\n\n while (this.pos < this.src.length) {\n const ch = this.src[this.pos]!;\n\n if (ch === \"\\\\\") {\n if (this.src[this.pos + 1] === \"\\n\") {\n this.pos += 2;\n continue;\n }\n out += ch + (this.src[this.pos + 1] ?? \"\");\n this.pos += 2;\n continue;\n }\n\n if (ch === \"'\") {\n const end = this.src.indexOf(\"'\", this.pos + 1);\n if (end < 0) throw new IncompleteInputError(\"unexpected EOF while looking for matching `''\", this.pos);\n out += this.src.slice(this.pos, end + 1);\n this.pos = end + 1;\n continue;\n }\n\n if (ch === '\"') {\n const segment = this.readDoubleQuoted();\n out += segment;\n continue;\n }\n\n if (ch === \"$\" && this.src[this.pos + 1] === \"(\") {\n out += this.readBalanced(\"(\", \")\", this.pos + 1, \"$\");\n continue;\n }\n\n if (ch === \"$\" && this.src[this.pos + 1] === \"{\") {\n out += this.readBalanced(\"{\", \"}\", this.pos + 1, \"$\");\n continue;\n }\n\n if (ch === \"`\") {\n const end = this.findBacktickEnd(this.pos);\n out += this.src.slice(this.pos, end + 1);\n this.pos = end + 1;\n continue;\n }\n\n if (ch === \" \" || ch === \"\\t\" || ch === \"\\r\" || ch === \"\\n\") break;\n\n if (isOperatorChar(ch)) {\n // `(` and `)` only break a word when they are not part of one.\n if (this.matchOperator()) break;\n }\n\n out += ch;\n this.pos++;\n }\n\n if (out === \"\") {\n // Nothing consumed — avoid an infinite loop on an unexpected character.\n out = this.src[this.pos] ?? \"\";\n this.pos++;\n }\n\n this.push({ type: \"word\", value: out, pos: start });\n }\n\n private readDoubleQuoted(): string {\n const start = this.pos;\n this.pos++; // opening quote\n let out = '\"';\n while (this.pos < this.src.length) {\n const ch = this.src[this.pos]!;\n if (ch === \"\\\\\") {\n out += ch + (this.src[this.pos + 1] ?? \"\");\n this.pos += 2;\n continue;\n }\n if (ch === '\"') {\n this.pos++;\n return out + '\"';\n }\n if (ch === \"$\" && this.src[this.pos + 1] === \"(\") {\n out += this.readBalanced(\"(\", \")\", this.pos + 1, \"$\");\n continue;\n }\n if (ch === \"$\" && this.src[this.pos + 1] === \"{\") {\n out += this.readBalanced(\"{\", \"}\", this.pos + 1, \"$\");\n continue;\n }\n if (ch === \"`\") {\n const end = this.findBacktickEnd(this.pos);\n out += this.src.slice(this.pos, end + 1);\n this.pos = end + 1;\n continue;\n }\n out += ch;\n this.pos++;\n }\n throw new IncompleteInputError('unexpected EOF while looking for matching `\"\\'', start);\n }\n\n /**\n * Consume a balanced `$( ... )` or `${ ... }`, honouring nesting and quotes\n * inside. `prefix` is emitted before the opening delimiter.\n */\n private readBalanced(open: string, close: string, openIdx: number, prefix: string): string {\n const start = this.pos;\n let depth = 0;\n let i = openIdx;\n for (; i < this.src.length; i++) {\n const c = this.src[i]!;\n if (c === \"\\\\\") {\n i++;\n continue;\n }\n if (c === \"'\" && open === \"(\") {\n const end = this.src.indexOf(\"'\", i + 1);\n if (end < 0) throw new IncompleteInputError(\"unexpected EOF in command substitution\", start);\n i = end;\n continue;\n }\n if (c === '\"') {\n i = this.skipDoubleQuoted(i);\n continue;\n }\n if (c === \"`\") {\n i = this.findBacktickEnd(i);\n continue;\n }\n if (c === open) depth++;\n else if (c === close) {\n depth--;\n if (depth === 0) break;\n }\n }\n if (i >= this.src.length) throw new IncompleteInputError(`unexpected EOF while looking for matching \\`${close}'`, start);\n const text = prefix + this.src.slice(openIdx, i + 1);\n this.pos = i + 1;\n return text;\n }\n\n private skipDoubleQuoted(from: number): number {\n for (let i = from + 1; i < this.src.length; i++) {\n if (this.src[i] === \"\\\\\") {\n i++;\n continue;\n }\n if (this.src[i] === '\"') return i;\n }\n throw new IncompleteInputError('unexpected EOF while looking for matching `\"\\'', from);\n }\n\n private findBacktickEnd(from: number): number {\n for (let i = from + 1; i < this.src.length; i++) {\n if (this.src[i] === \"\\\\\") {\n i++;\n continue;\n }\n if (this.src[i] === \"`\") return i;\n }\n throw new IncompleteInputError(\"unexpected EOF while looking for matching ``'\", from);\n }\n\n /**\n * Called right after a newline: read the bodies of every here-doc whose\n * operator appeared on the line just finished.\n */\n private collectHeredocs(): void {\n if (this.pendingHeredocs.length === 0) return;\n const pending = this.pendingHeredocs;\n this.pendingHeredocs = [];\n\n for (const opToken of pending) {\n // The delimiter is the word token that followed the operator.\n const idx = this.tokens.indexOf(opToken);\n const tagToken = this.tokens[idx + 1];\n if (!tagToken || tagToken.type !== \"word\") {\n throw new ShellSyntaxError(\"expected here-document delimiter\", opToken.pos);\n }\n const stripTabs = opToken.value === \"<<-\";\n const rawTag = tagToken.value;\n const quoted = /['\"\\\\]/.test(rawTag);\n const tag = rawTag.replace(/['\"\\\\]/g, \"\");\n\n const lines: string[] = [];\n let found = false;\n while (this.pos < this.src.length) {\n let eol = this.src.indexOf(\"\\n\", this.pos);\n if (eol < 0) eol = this.src.length;\n const rawLine = this.src.slice(this.pos, eol);\n this.pos = eol + 1;\n const compare = stripTabs ? rawLine.replace(/^\\t+/, \"\") : rawLine;\n if (compare === tag) {\n found = true;\n break;\n }\n lines.push(stripTabs ? rawLine.replace(/^\\t+/, \"\") : rawLine);\n if (eol >= this.src.length) break;\n }\n if (!found) {\n throw new IncompleteInputError(`here-document delimited by end-of-file (wanted \\`${tag}')`, opToken.pos);\n }\n opToken.heredoc = { tag, stripTabs, quoted, body: lines.length ? lines.join(\"\\n\") + \"\\n\" : \"\" };\n }\n }\n}\n\n/** Reserved words the parser treats specially when they start a command. */\nexport const RESERVED_WORDS = new Set([\n \"if\",\n \"then\",\n \"elif\",\n \"else\",\n \"fi\",\n \"for\",\n \"while\",\n \"until\",\n \"do\",\n \"done\",\n \"case\",\n \"esac\",\n \"in\",\n \"function\",\n \"select\",\n \"{\",\n \"}\",\n \"!\",\n \"[[\",\n \"]]\",\n \"time\",\n \"coproc\",\n]);\n","/**\n * Recursive-descent parser for the shell grammar.\n *\n * Covers the POSIX command language plus the bash extensions that scripts in\n * the wild actually depend on: `[[ ]]`, `(( ))`, `function name { }`,\n * `for ((;;))`, `select`, `|&`, `&>`, `<<<`, and `;&`/`;;&` in `case`.\n */\n\nimport {\n type Assignment,\n type CaseItem,\n type CondExpr,\n type IfClause,\n type ListItem,\n type ListOperator,\n type Node,\n type Redirect,\n type RedirectOp,\n} from \"./ast.js\";\nimport { IncompleteInputError, Lexer, ShellSyntaxError, type Token } from \"./lexer.js\";\n\nconst REDIRECT_OPS = new Set<string>([\">\", \">>\", \"<\", \"<>\", \">|\", \">&\", \"<&\", \"&>\", \"&>>\", \"<<\", \"<<-\", \"<<<\"]);\n\nconst COMMAND_TERMINATORS = new Set([\";\", \"&\", \"&&\", \"||\", \"|\", \"|&\", \")\", \"\\n\"]);\n\nexport function parse(source: string): Node {\n return new Parser(Lexer.tokenize(source)).parseProgram();\n}\n\nexport class Parser {\n private i = 0;\n\n constructor(private readonly tokens: Token[]) {}\n\n // ── token helpers ────────────────────────────────────────────────────────\n\n private peek(offset = 0): Token {\n return this.tokens[Math.min(this.i + offset, this.tokens.length - 1)]!;\n }\n\n private next(): Token {\n return this.tokens[this.i++] ?? this.tokens[this.tokens.length - 1]!;\n }\n\n private atEof(): boolean {\n return this.peek().type === \"eof\";\n }\n\n private isOp(value: string, offset = 0): boolean {\n const t = this.peek(offset);\n return t.type === \"op\" && t.value === value;\n }\n\n private isWord(value: string, offset = 0): boolean {\n const t = this.peek(offset);\n return t.type === \"word\" && t.value === value;\n }\n\n private expectWord(value: string): void {\n if (!this.isWord(value)) {\n const t = this.peek();\n if (t.type === \"eof\") throw new IncompleteInputError(`syntax error: expected \\`${value}'`, t.pos);\n throw new ShellSyntaxError(`syntax error near unexpected token \\`${t.value || \"newline\"}'`, t.pos);\n }\n this.next();\n }\n\n private expectOp(value: string): void {\n if (!this.isOp(value)) {\n const t = this.peek();\n if (t.type === \"eof\") throw new IncompleteInputError(`syntax error: expected \\`${value}'`, t.pos);\n throw new ShellSyntaxError(`syntax error near unexpected token \\`${t.value || \"newline\"}'`, t.pos);\n }\n this.next();\n }\n\n private skipNewlines(): void {\n while (this.peek().type === \"newline\") this.next();\n }\n\n private skipSeparators(): void {\n while (this.peek().type === \"newline\" || this.isOp(\";\")) this.next();\n }\n\n // ── program / lists ──────────────────────────────────────────────────────\n\n parseProgram(): Node {\n const items: ListItem[] = [];\n this.skipSeparators();\n while (!this.atEof()) {\n const before = this.i;\n const item = this.parseAndOr();\n const op = this.readListOperator();\n items.push({ node: item, op });\n if (this.i === before) {\n const t = this.peek();\n throw new ShellSyntaxError(`syntax error near unexpected token \\`${t.value || \"newline\"}'`, t.pos);\n }\n this.skipSeparators();\n }\n return { type: \"list\", items };\n }\n\n /** `;;`, `;&` and `;;&` end a `case` branch and must not be parsed as commands. */\n private atCaseTerminator(): boolean {\n const t = this.peek();\n return t.type === \"op\" && (t.value === \";;\" || t.value === \";&\" || t.value === \";;&\");\n }\n\n /** Parse until one of `stopWords` (a reserved word) is the next token. */\n private parseCompoundList(stopWords: string[]): Node {\n const items: ListItem[] = [];\n this.skipSeparators();\n while (!this.atEof() && !this.atStopWord(stopWords) && !this.isOp(\")\") && !this.atCaseTerminator()) {\n const before = this.i;\n const node = this.parseAndOr();\n const op = this.readListOperator();\n items.push({ node, op });\n // A construct that consumed nothing would loop forever; treat the token\n // as unexpected instead of hanging.\n if (this.i === before) {\n const t = this.peek();\n throw new ShellSyntaxError(`syntax error near unexpected token \\`${t.value || \"newline\"}'`, t.pos);\n }\n this.skipSeparators();\n }\n return { type: \"list\", items };\n }\n\n private atStopWord(stopWords: string[]): boolean {\n const t = this.peek();\n return t.type === \"word\" && stopWords.includes(t.value);\n }\n\n private readListOperator(): ListOperator {\n if (this.isOp(\"&\")) {\n this.next();\n return \"&\";\n }\n if (this.isOp(\";\")) {\n this.next();\n return \";\";\n }\n return \";\";\n }\n\n private parseAndOr(): Node {\n let left: Node = this.parsePipeline();\n for (;;) {\n if (this.isOp(\"&&\") || this.isOp(\"||\")) {\n const op = this.next().value as \"&&\" | \"||\";\n this.skipNewlines();\n const right = this.parsePipeline();\n left = { type: \"list\", items: [{ node: left, op }, { node: right, op: \";\" }] };\n continue;\n }\n return left;\n }\n }\n\n private parsePipeline(): Node {\n let negated = false;\n let timed = false;\n while (this.isWord(\"!\") || this.isWord(\"time\")) {\n if (this.isWord(\"!\")) {\n negated = !negated;\n this.next();\n } else {\n timed = true;\n this.next();\n if (this.isWord(\"-p\")) this.next();\n }\n }\n\n const commands: Node[] = [this.parseCommand()];\n const stderrToo: boolean[] = [];\n while (this.isOp(\"|\") || this.isOp(\"|&\")) {\n stderrToo.push(this.next().value === \"|&\");\n this.skipNewlines();\n commands.push(this.parseCommand());\n }\n\n if (commands.length === 1 && !negated && !timed) return commands[0]!;\n return { type: \"pipeline\", commands, negated, stderrToo, timed };\n }\n\n // ── commands ─────────────────────────────────────────────────────────────\n\n private parseCommand(): Node {\n const t = this.peek();\n\n // `((expr))` looks like a nested subshell to the lexer; distinguish by\n // checking whether the parenthesised text could be a command list.\n if (this.isOp(\"(\") && this.isOp(\"(\", 1) && this.looksLikeArithmetic()) return this.parseArithCommand();\n if (t.type === \"op\" && t.value === \"(\") return this.parseSubshell();\n\n if (t.type === \"word\") {\n switch (t.value) {\n case \"{\":\n return this.parseGroup();\n case \"if\":\n return this.parseIf();\n case \"for\":\n return this.parseFor();\n case \"while\":\n case \"until\":\n return this.parseWhile(t.value === \"until\");\n case \"case\":\n return this.parseCase();\n case \"select\":\n return this.parseSelect();\n case \"function\":\n return this.parseFunctionKeyword();\n case \"[[\":\n return this.parseCond();\n default:\n break;\n }\n if (t.value.startsWith(\"((\") && t.value.endsWith(\"))\")) {\n this.next();\n return { type: \"arith\", expression: t.value.slice(2, -2), redirects: this.parseRedirects() };\n }\n\n // Function definition: `name () compound`.\n if (this.isFunctionDefinition()) return this.parseFunctionDefinition();\n }\n\n return this.parseSimpleCommand();\n }\n\n /**\n * True when the tokens after `((` run to a matching `))` without anything\n * that only makes sense in a command list, which is how bash disambiguates\n * `((i++))` from `( (subshell) )`.\n */\n private looksLikeArithmetic(): boolean {\n let depth = 0;\n for (let i = this.i; i < this.tokens.length; i++) {\n const t = this.tokens[i]!;\n if (t.type === \"eof\") return false;\n if (t.type === \"newline\") return false;\n if (t.type === \"op\") {\n if (t.value === \"(\") {\n depth++;\n continue;\n }\n if (t.value === \")\") {\n depth--;\n if (depth === 0) {\n // A single `)` closing everything means it was a subshell.\n return false;\n }\n if (depth === 1 && this.tokens[i + 1]?.type === \"op\" && this.tokens[i + 1]!.value === \")\") {\n return true;\n }\n continue;\n }\n if ([\";\", \"&\", \"&&\", \"||\", \"|\", \"|&\", \"<\", \">\", \">>\", \"<<\"].includes(t.value)) return false;\n }\n }\n return false;\n }\n\n private isFunctionDefinition(): boolean {\n const name = this.peek();\n if (name.type !== \"word\" || !/^[A-Za-z_][A-Za-z0-9_]*$/.test(name.value)) return false;\n return this.isOp(\"(\", 1) && this.isOp(\")\", 2);\n }\n\n private parseFunctionDefinition(): Node {\n const name = this.next().value;\n this.expectOp(\"(\");\n this.expectOp(\")\");\n this.skipNewlines();\n const body = this.parseCommand();\n return { type: \"function\", name, body, redirects: [] };\n }\n\n private parseFunctionKeyword(): Node {\n this.expectWord(\"function\");\n const name = this.next().value;\n if (this.isOp(\"(\")) {\n this.next();\n this.expectOp(\")\");\n }\n this.skipNewlines();\n const body = this.parseCommand();\n return { type: \"function\", name, body, redirects: [] };\n }\n\n private parseSubshell(): Node {\n this.expectOp(\"(\");\n const body = this.parseCompoundList([]);\n this.expectOp(\")\");\n return { type: \"subshell\", body, redirects: this.parseRedirects() };\n }\n\n private parseGroup(): Node {\n this.expectWord(\"{\");\n const body = this.parseCompoundList([\"}\"]);\n this.expectWord(\"}\");\n return { type: \"group\", body, redirects: this.parseRedirects() };\n }\n\n private parseArithCommand(): Node {\n // Consume `((`, capture the raw text through the matching `))`.\n this.expectOp(\"(\");\n this.expectOp(\"(\");\n let depth = 1;\n const parts: string[] = [];\n while (!this.atEof()) {\n if (this.isOp(\"(\")) depth++;\n if (this.isOp(\")\")) {\n depth--;\n if (depth === 0) {\n this.next();\n this.expectOp(\")\");\n break;\n }\n }\n const tok = this.next();\n parts.push(tok.type === \"newline\" ? \" \" : tok.value);\n }\n return { type: \"arith\", expression: parts.join(\" \"), redirects: this.parseRedirects() };\n }\n\n private parseIf(): Node {\n this.expectWord(\"if\");\n const clauses: IfClause[] = [];\n let elseBody: Node | undefined;\n\n const condition = this.parseCompoundList([\"then\"]);\n this.expectWord(\"then\");\n const body = this.parseCompoundList([\"elif\", \"else\", \"fi\"]);\n clauses.push({ condition, body });\n\n for (;;) {\n if (this.isWord(\"elif\")) {\n this.next();\n const c = this.parseCompoundList([\"then\"]);\n this.expectWord(\"then\");\n const b = this.parseCompoundList([\"elif\", \"else\", \"fi\"]);\n clauses.push({ condition: c, body: b });\n continue;\n }\n if (this.isWord(\"else\")) {\n this.next();\n elseBody = this.parseCompoundList([\"fi\"]);\n }\n break;\n }\n this.expectWord(\"fi\");\n const node: Node = { type: \"if\", clauses, redirects: this.parseRedirects() };\n if (elseBody) (node as { elseBody?: Node }).elseBody = elseBody;\n return node;\n }\n\n private parseFor(): Node {\n this.expectWord(\"for\");\n\n // `for (( init; cond; step ))`\n if (this.isOp(\"(\") && this.isOp(\"(\", 1)) {\n this.next();\n this.next();\n const raw: string[] = [];\n let depth = 1;\n while (!this.atEof()) {\n if (this.isOp(\"(\")) depth++;\n if (this.isOp(\")\")) {\n depth--;\n if (depth === 0) {\n this.next();\n this.expectOp(\")\");\n break;\n }\n }\n const tok = this.next();\n raw.push(tok.type === \"newline\" ? \" \" : tok.value);\n }\n const [init = \"\", condition = \"\", step = \"\"] = raw.join(\" \").split(\";\");\n this.skipSeparators();\n this.expectWord(\"do\");\n const body = this.parseCompoundList([\"done\"]);\n this.expectWord(\"done\");\n return { type: \"for-arith\", init, condition, step, body, redirects: this.parseRedirects() };\n }\n\n const name = this.next().value;\n let words: string[] | undefined;\n this.skipNewlines();\n if (this.isWord(\"in\")) {\n this.next();\n words = [];\n while (this.peek().type === \"word\" && !COMMAND_TERMINATORS.has(this.peek().value)) {\n if (this.isWord(\"do\")) break;\n words.push(this.next().value);\n }\n }\n this.skipSeparators();\n this.expectWord(\"do\");\n const body = this.parseCompoundList([\"done\"]);\n this.expectWord(\"done\");\n const node: Node = { type: \"for\", name, body, redirects: this.parseRedirects() };\n if (words) (node as { words?: string[] }).words = words;\n return node;\n }\n\n private parseSelect(): Node {\n this.expectWord(\"select\");\n const name = this.next().value;\n let words: string[] | undefined;\n this.skipNewlines();\n if (this.isWord(\"in\")) {\n this.next();\n words = [];\n while (this.peek().type === \"word\" && !this.isWord(\"do\")) words.push(this.next().value);\n }\n this.skipSeparators();\n this.expectWord(\"do\");\n const body = this.parseCompoundList([\"done\"]);\n this.expectWord(\"done\");\n const node: Node = { type: \"for\", name, body, redirects: this.parseRedirects(), select: true };\n if (words) (node as { words?: string[] }).words = words;\n return node;\n }\n\n private parseWhile(until: boolean): Node {\n this.next();\n const condition = this.parseCompoundList([\"do\"]);\n this.expectWord(\"do\");\n const body = this.parseCompoundList([\"done\"]);\n this.expectWord(\"done\");\n return { type: \"while\", condition, body, until, redirects: this.parseRedirects() };\n }\n\n private parseCase(): Node {\n this.expectWord(\"case\");\n const word = this.next().value;\n this.skipNewlines();\n this.expectWord(\"in\");\n this.skipSeparators();\n\n const items: CaseItem[] = [];\n while (!this.atEof() && !this.isWord(\"esac\")) {\n if (this.isOp(\"(\")) this.next();\n const patterns: string[] = [];\n for (;;) {\n const t = this.next();\n patterns.push(t.value);\n if (this.isOp(\"|\")) {\n this.next();\n continue;\n }\n break;\n }\n this.expectOp(\")\");\n const body = this.parseCompoundList([\"esac\"]);\n let terminator: CaseItem[\"terminator\"] = \";;\";\n if (this.isOp(\";;&\")) {\n terminator = \";;&\";\n this.next();\n } else if (this.isOp(\";&\")) {\n terminator = \";&\";\n this.next();\n } else if (this.isOp(\";;\")) {\n this.next();\n }\n items.push({ patterns, body, terminator });\n this.skipSeparators();\n }\n this.expectWord(\"esac\");\n return { type: \"case\", word, items, redirects: this.parseRedirects() };\n }\n\n private parseCond(): Node {\n this.expectWord(\"[[\");\n const tokens: string[] = [];\n let depth = 0;\n while (!this.atEof()) {\n const t = this.peek();\n if (t.type === \"word\" && t.value === \"]]\" && depth === 0) {\n this.next();\n break;\n }\n if (t.type === \"newline\") {\n this.next();\n continue;\n }\n if (t.type === \"op\" && t.value === \"(\") depth++;\n if (t.type === \"op\" && t.value === \")\") depth--;\n tokens.push(this.next().value);\n }\n return { type: \"cond\", expression: parseCondExpression(tokens), redirects: this.parseRedirects() };\n }\n\n private parseSimpleCommand(): Node {\n const assignments: Assignment[] = [];\n const words: string[] = [];\n const redirects: Redirect[] = [];\n let sawWord = false;\n\n for (;;) {\n const t = this.peek();\n\n if (t.type === \"newline\" || t.type === \"eof\") break;\n if (t.type === \"op\") {\n if (REDIRECT_OPS.has(t.value)) {\n redirects.push(this.parseOneRedirect());\n continue;\n }\n break;\n }\n if (t.type === \"io_number\") {\n redirects.push(this.parseOneRedirect());\n continue;\n }\n\n // Assignments only count before the first real word.\n if (!sawWord) {\n const m = /^([A-Za-z_][A-Za-z0-9_]*)(\\+?)=([\\s\\S]*)$/.exec(t.value);\n if (m) {\n this.next();\n const value = m[3]!;\n if (value === \"(\" || (value === \"\" && this.isOp(\"(\"))) {\n // `name=( a b c )`\n if (value === \"\") this.expectOp(\"(\");\n const arrayWords: string[] = [];\n while (!this.atEof() && !this.isOp(\")\")) {\n if (this.peek().type === \"newline\") {\n this.next();\n continue;\n }\n arrayWords.push(this.next().value);\n }\n this.expectOp(\")\");\n assignments.push({ name: m[1]!, value: \"\", append: m[2] === \"+\", arrayWords });\n } else {\n assignments.push({ name: m[1]!, value, append: m[2] === \"+\" });\n }\n continue;\n }\n }\n\n sawWord = true;\n words.push(this.next().value);\n }\n\n return { type: \"command\", assignments, words, redirects };\n }\n\n private parseRedirects(): Redirect[] {\n const out: Redirect[] = [];\n for (;;) {\n const t = this.peek();\n if (t.type === \"io_number\" || (t.type === \"op\" && REDIRECT_OPS.has(t.value))) {\n out.push(this.parseOneRedirect());\n continue;\n }\n return out;\n }\n }\n\n private parseOneRedirect(): Redirect {\n let fd: number | undefined;\n if (this.peek().type === \"io_number\") fd = Number(this.next().value);\n\n const opToken = this.next();\n const raw = opToken.value;\n const op: RedirectOp = raw === \"<<-\" ? \"<<\" : (raw as RedirectOp);\n\n const targetToken = this.peek();\n if (targetToken.type !== \"word\") {\n throw new ShellSyntaxError(`syntax error near unexpected token \\`${targetToken.value || \"newline\"}'`, targetToken.pos);\n }\n const target = this.next().value;\n\n const redirect: Redirect = { op, target };\n if (fd !== undefined) redirect.fd = fd;\n if (opToken.heredoc) {\n redirect.heredoc = { body: opToken.heredoc.body, expand: !opToken.heredoc.quoted };\n }\n return redirect;\n }\n}\n\n// ── [[ ]] expression parsing ───────────────────────────────────────────────\n\nconst COND_UNARY = new Set([\n \"-a\", \"-b\", \"-c\", \"-d\", \"-e\", \"-f\", \"-g\", \"-h\", \"-k\", \"-p\", \"-r\", \"-s\", \"-t\",\n \"-u\", \"-w\", \"-x\", \"-G\", \"-L\", \"-N\", \"-O\", \"-S\", \"-z\", \"-n\", \"-o\", \"-v\",\n]);\n\nconst COND_BINARY = new Set([\n \"=\", \"==\", \"!=\", \"=~\", \"<\", \">\", \"-eq\", \"-ne\", \"-lt\", \"-le\", \"-gt\", \"-ge\",\n \"-nt\", \"-ot\", \"-ef\",\n]);\n\nexport function parseCondExpression(tokens: string[]): CondExpr {\n let i = 0;\n\n const peek = (): string | undefined => tokens[i];\n const take = (): string => tokens[i++] ?? \"\";\n\n const parsePrimary = (): CondExpr => {\n const t = peek();\n if (t === undefined) return { type: \"word\", value: \"\" };\n if (t === \"!\") {\n take();\n return { type: \"not\", operand: parsePrimary() };\n }\n if (t === \"(\") {\n take();\n const inner = parseOr();\n if (peek() === \")\") take();\n return inner;\n }\n if (COND_UNARY.has(t) && tokens.length > i + 1) {\n take();\n return { type: \"unary\", op: t, operand: take() };\n }\n const left = take();\n const op = peek();\n if (op !== undefined && COND_BINARY.has(op)) {\n take();\n return { type: \"binary\", op, left, right: take() };\n }\n return { type: \"word\", value: left };\n };\n\n const parseAnd = (): CondExpr => {\n let left = parsePrimary();\n while (peek() === \"&&\" || peek() === \"-a\") {\n take();\n left = { type: \"and\", left, right: parsePrimary() };\n }\n return left;\n };\n\n const parseOr = (): CondExpr => {\n let left = parseAnd();\n while (peek() === \"||\" || peek() === \"-o\") {\n take();\n left = { type: \"or\", left, right: parseAnd() };\n }\n return left;\n };\n\n return parseOr();\n}\n\nexport { ShellSyntaxError, IncompleteInputError };\n","/**\n * The public surface: a Linux-like container you can boot inside any Node\n * process, run commands in, and throw away.\n *\n * ```ts\n * const box = await createContainer({ files: { \"/app/index.js\": \"console.log(1)\" } });\n * await box.exec(\"node /app/index.js\");\n * ```\n */\n\nimport { Nodepod } from \"@scelar/nodepod/headless\";\nimport { Kernel } from \"../kernel/kernel.js\";\nimport { Process } from \"../kernel/process.js\";\nimport { ROOT_CRED, type Cred } from \"../fs/vfs.js\";\nimport { buildRootfs } from \"../image/rootfs.js\";\nimport { createDevProvider } from \"../kernel/devfs.js\";\nimport { createProcProvider } from \"../kernel/procfs.js\";\nimport { createSysProvider } from \"../kernel/sysfs.js\";\nimport { NetworkStack, type NetworkOptions } from \"../net/stack.js\";\nimport { Shell, type ShellIO } from \"../shell/interpreter.js\";\nimport {\n BufferSink,\n CallbackSink,\n NullInput,\n NullOutput,\n Pipe,\n type InputStream,\n type OutputStream,\n} from \"../fs/streams.js\";\nimport * as P from \"../fs/path.js\";\nimport { installUserland } from \"../bin/index.js\";\nimport { ContainerFs } from \"./fs.js\";\nimport { Session } from \"./session.js\";\n\nexport interface ContainerOptions {\n /**\n * Files to seed the filesystem with, keyed by absolute (or `cwd`-relative)\n * path. Parent directories are created automatically — this is the fast way\n * to drop a whole project in and run it.\n */\n files?: Record<string, string | Uint8Array>;\n /** Directory `files` keys are resolved against, and the default cwd. Default `/`. */\n cwd?: string;\n hostname?: string;\n /**\n * Login user. `\"root\"` (default) runs privileged; any other name is created\n * with uid 1000 and sudo rights. Pass `null` for a root-only image.\n */\n user?: string | null;\n env?: Record<string, string>;\n /** RAM reported by `free`, `top` and `/proc/meminfo`. Default 2 GiB. */\n memory?: number;\n /** CPU count reported by `nproc` and `/proc/cpuinfo`. Default 4. */\n cpus?: number;\n network?: NetworkOptions;\n timezone?: string;\n /** Default wall-clock limit for `exec`. Omit for no limit. */\n timeoutMs?: number;\n /** Called for every byte any command writes to stdout, across the container. */\n onStdout?: (chunk: string) => void;\n onStderr?: (chunk: string) => void;\n /** Invoked when an in-container HTTP server starts listening. */\n onServerReady?: (port: number, url: string) => void;\n}\n\nexport interface ExecOptions {\n cwd?: string;\n env?: Record<string, string>;\n /** Run as this user instead of the container default. */\n user?: string;\n stdin?: string | Uint8Array;\n /** Stream output as it is produced, in addition to buffering it. */\n onStdout?: (chunk: string) => void;\n onStderr?: (chunk: string) => void;\n timeoutMs?: number;\n /** Report the command as running on a terminal (affects `ls` colour, `-t`). */\n tty?: boolean;\n columns?: number;\n rows?: number;\n}\n\nexport interface ExecResult {\n exitCode: number;\n stdout: string;\n stderr: string;\n /** stdout and stderr interleaved in write order. */\n output: string;\n timedOut: boolean;\n durationMs: number;\n}\n\nexport interface SpawnHandle {\n pid: number;\n stdin: Pipe;\n stdout: Pipe;\n stderr: Pipe;\n /** Resolves with the exit code. */\n wait(): Promise<number>;\n kill(signal?: string): void;\n readonly exitCode: number | null;\n}\n\nexport interface HttpResponse {\n status: number;\n statusText: string;\n headers: Record<string, string>;\n body: string;\n bytes: Uint8Array;\n json<T = unknown>(): T;\n}\n\nexport class Container {\n readonly kernel: Kernel;\n readonly pod: Nodepod;\n readonly fs: ContainerFs;\n readonly net: NetworkStack;\n\n private readonly defaults: {\n cwd: string;\n env: Record<string, string>;\n cred: Cred;\n user: string;\n timeoutMs?: number;\n };\n private readonly hooks: Pick<ContainerOptions, \"onStdout\" | \"onStderr\">;\n private disposed = false;\n private defaultSession: Session | null = null;\n\n private constructor(kernel: Kernel, pod: Nodepod, opts: ContainerOptions) {\n this.kernel = kernel;\n this.pod = pod;\n this.fs = new ContainerFs(kernel);\n this.net = kernel.net;\n\n const userName = opts.user === null ? \"root\" : (opts.user ?? \"root\");\n const user = kernel.users.userByName(userName) ?? kernel.users.userByName(\"root\")!;\n const cred = kernel.users.credFor(user.name);\n const home = user.home;\n\n this.defaults = {\n cwd: opts.cwd ?? \"/\",\n cred,\n user: user.name,\n env: {\n PATH: \"/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin\",\n HOME: home,\n USER: user.name,\n LOGNAME: user.name,\n SHELL: user.shell,\n TERM: \"xterm-256color\",\n LANG: \"C.UTF-8\",\n HOSTNAME: kernel.hostname,\n PWD: opts.cwd ?? \"/\",\n ...opts.env,\n },\n };\n if (opts.timeoutMs !== undefined) this.defaults.timeoutMs = opts.timeoutMs;\n this.hooks = { onStdout: opts.onStdout, onStderr: opts.onStderr };\n }\n\n // ── boot ──────────────────────────────────────────────────────────────────\n\n static async create(opts: ContainerOptions = {}): Promise<Container> {\n const pod = await Nodepod.boot({\n headless: true,\n serviceWorker: false,\n env: opts.env ?? {},\n workdir: opts.cwd ?? \"/\",\n ...(opts.onServerReady ? { onServerReady: opts.onServerReady } : {}),\n });\n\n const kernel = new Kernel({\n pod,\n hostname: opts.hostname ?? \"sandbox\",\n memoryBytes: opts.memory ?? 2 * 1024 * 1024 * 1024,\n cpus: opts.cpus ?? 4,\n });\n\n // Root filesystem first: the user database has to exist before anything\n // resolves credentials or home directories.\n buildRootfs(kernel.vfs, {\n hostname: opts.hostname ?? \"sandbox\",\n user: opts.user === null ? null : opts.user && opts.user !== \"root\" ? { name: opts.user } : { name: \"user\" },\n timezone: opts.timezone ?? \"UTC\",\n });\n\n kernel.net = new NetworkStack(pod, kernel.vfs, opts.network ?? {});\n kernel.vfs.addProvider(createDevProvider({}));\n kernel.vfs.addProvider(createProcProvider(kernel));\n kernel.vfs.addProvider(createSysProvider(kernel));\n\n installUserland(kernel);\n\n const container = new Container(kernel, pod, opts);\n if (opts.files) container.mountSync(opts.files, { cwd: opts.cwd ?? \"/\" });\n return container;\n }\n\n // ── file seeding ──────────────────────────────────────────────────────────\n\n /**\n * Drop a map of files into the container. Keys may be absolute or relative\n * to `opts.cwd`; parent directories are created as needed.\n */\n mount(files: Record<string, string | Uint8Array>, opts: { cwd?: string; mode?: number } = {}): this {\n return this.mountSync(files, opts);\n }\n\n private mountSync(files: Record<string, string | Uint8Array>, opts: { cwd?: string; mode?: number }): this {\n this.assertActive();\n const base = opts.cwd ?? this.defaults.cwd;\n for (const [key, content] of Object.entries(files)) {\n const abs = P.resolve(base, key);\n const parent = P.dirname(abs);\n if (!this.kernel.vfs.lexists(parent)) {\n this.kernel.vfs.mkdir(parent, { recursive: true, mode: 0o755, cred: this.defaults.cred });\n }\n this.kernel.vfs.writeFile(abs, content, { cred: this.defaults.cred, mode: opts.mode ?? 0o644 });\n }\n return this;\n }\n\n /** Copy a directory tree from the host filesystem into the container. */\n async copyIn(hostPath: string, containerPath: string): Promise<void> {\n this.assertActive();\n const { readdir, readFile, stat } = await import(\"node:fs/promises\");\n const nodePath = await import(\"node:path\");\n\n const walk = async (src: string, dest: string): Promise<void> => {\n const st = await stat(src);\n if (st.isDirectory()) {\n if (!this.kernel.vfs.lexists(dest)) {\n this.kernel.vfs.mkdir(dest, { recursive: true, mode: 0o755, cred: this.defaults.cred });\n }\n for (const name of await readdir(src)) {\n await walk(nodePath.join(src, name), P.join(dest, name));\n }\n return;\n }\n const data = await readFile(src);\n const parent = P.dirname(dest);\n if (!this.kernel.vfs.lexists(parent)) {\n this.kernel.vfs.mkdir(parent, { recursive: true, mode: 0o755, cred: this.defaults.cred });\n }\n this.kernel.vfs.writeFile(dest, new Uint8Array(data), {\n cred: this.defaults.cred,\n mode: st.mode & 0o777,\n });\n };\n\n await walk(hostPath, P.resolve(this.defaults.cwd, containerPath));\n }\n\n /** Copy a file or directory out of the container onto the host. */\n async copyOut(containerPath: string, hostPath: string): Promise<void> {\n this.assertActive();\n const { mkdir, writeFile } = await import(\"node:fs/promises\");\n const nodePath = await import(\"node:path\");\n const src = P.resolve(this.defaults.cwd, containerPath);\n\n const walk = async (from: string, to: string): Promise<void> => {\n const st = this.kernel.vfs.lstat(from);\n if (st.isDirectory()) {\n await mkdir(to, { recursive: true });\n for (const name of this.kernel.vfs.readdir(from)) {\n await walk(P.join(from, name), nodePath.join(to, name));\n }\n return;\n }\n await mkdir(nodePath.dirname(to), { recursive: true });\n await writeFile(to, this.kernel.vfs.readFile(from));\n };\n\n await walk(src, hostPath);\n }\n\n // ── running commands ──────────────────────────────────────────────────────\n\n /** Run a shell command line and collect its output. */\n async exec(command: string, opts: ExecOptions = {}): Promise<ExecResult> {\n this.assertActive();\n const started = Date.now();\n const { io, stdout, stderr, combined } = this.makeStdio(opts);\n\n const cred = opts.user ? this.kernel.users.credFor(opts.user) : this.defaults.cred;\n const env = { ...this.defaults.env, ...opts.env };\n const cwd = opts.cwd ? P.resolve(this.defaults.cwd, opts.cwd) : this.defaults.cwd;\n env.PWD = cwd;\n\n const proc = this.kernel.procs.create({\n argv: [\"/bin/sh\", \"-c\", command],\n cwd,\n env,\n cred,\n ppid: 1,\n kind: \"shell\",\n stdio: { stdin: io.stdin, stdout: io.stdout, stderr: io.stderr },\n });\n\n const timeoutMs = opts.timeoutMs ?? this.defaults.timeoutMs;\n let timedOut = false;\n const timer =\n timeoutMs === undefined\n ? undefined\n : setTimeout(() => {\n timedOut = true;\n proc.deliver(\"SIGKILL\");\n }, timeoutMs);\n\n const shell = new Shell({ kernel: this.kernel, proc, cwd, env, cred, scriptName: \"sh\" });\n let exitCode: number;\n try {\n // A command that ignores its kill signal must still let `exec` settle,\n // so the timeout resolves the call even if the process lingers.\n exitCode =\n timeoutMs === undefined\n ? await shell.execute(command, io)\n : await Promise.race([\n shell.execute(command, io),\n new Promise<number>((resolve) => setTimeout(() => resolve(137), timeoutMs + 500)),\n ]);\n } finally {\n if (timer) clearTimeout(timer);\n proc.exit(0);\n this.kernel.procs.remove(proc.pid);\n }\n\n return {\n exitCode: timedOut ? 137 : exitCode,\n stdout: stdout.text(),\n stderr: stderr.text(),\n output: combined.join(\"\"),\n timedOut,\n durationMs: Date.now() - started,\n };\n }\n\n /** Run a program directly, without a shell parsing the arguments. */\n async run(argv: string[], opts: ExecOptions = {}): Promise<ExecResult> {\n this.assertActive();\n const started = Date.now();\n const { io, stdout, stderr, combined } = this.makeStdio(opts);\n const cred = opts.user ? this.kernel.users.credFor(opts.user) : this.defaults.cred;\n const cwd = opts.cwd ? P.resolve(this.defaults.cwd, opts.cwd) : this.defaults.cwd;\n\n const result = await this.kernel.run(argv, {\n cwd,\n env: { ...this.defaults.env, ...opts.env, PWD: cwd },\n cred,\n stdin: io.stdin,\n stdout: io.stdout,\n stderr: io.stderr,\n ...(opts.timeoutMs ?? this.defaults.timeoutMs !== undefined\n ? { timeoutMs: opts.timeoutMs ?? this.defaults.timeoutMs! }\n : {}),\n });\n\n return {\n exitCode: result.exitCode,\n stdout: stdout.text(),\n stderr: stderr.text(),\n output: combined.join(\"\"),\n timedOut: result.timedOut,\n durationMs: Date.now() - started,\n };\n }\n\n /**\n * Start a command and get streams back, for long-running processes such as a\n * dev server that you want to watch and later kill.\n */\n spawn(command: string, opts: ExecOptions = {}): SpawnHandle {\n this.assertActive();\n const stdin = new Pipe();\n // The caller owns the write end and may never close it, so programs that\n // would otherwise read stdin to EOF have to treat it as a live terminal.\n stdin.interactive = true;\n const stdout = new Pipe();\n const stderr = new Pipe();\n if (opts.tty) {\n stdout.isTTY = true;\n stderr.isTTY = true;\n stdout.columns = opts.columns ?? 80;\n stderr.columns = opts.columns ?? 80;\n }\n\n const cred = opts.user ? this.kernel.users.credFor(opts.user) : this.defaults.cred;\n const cwd = opts.cwd ? P.resolve(this.defaults.cwd, opts.cwd) : this.defaults.cwd;\n const env = { ...this.defaults.env, ...opts.env, PWD: cwd };\n\n const proc = this.kernel.procs.create({\n argv: [\"/bin/sh\", \"-c\", command],\n cwd,\n env,\n cred,\n ppid: 1,\n kind: \"shell\",\n stdio: { stdin, stdout, stderr },\n });\n\n const shell = new Shell({ kernel: this.kernel, proc, cwd, env, cred, scriptName: \"sh\" });\n const io: ShellIO = { stdin, stdout, stderr };\n\n const finished = (async () => {\n try {\n const code = await shell.execute(command, io);\n proc.exit(code);\n return code;\n } catch {\n proc.exit(1);\n return 1;\n } finally {\n stdout.end();\n stderr.end();\n }\n })();\n\n return {\n pid: proc.pid,\n stdin,\n stdout,\n stderr,\n wait: () => finished,\n kill: (signal = \"SIGTERM\") => {\n proc.deliver(signal);\n stdout.end();\n stderr.end();\n },\n get exitCode() {\n return proc.exitCode;\n },\n };\n }\n\n /**\n * A stateful shell session: `cd`, variables and functions persist between\n * calls, the way a terminal behaves.\n */\n session(opts: { cwd?: string; env?: Record<string, string>; user?: string } = {}): Session {\n this.assertActive();\n const cred = opts.user ? this.kernel.users.credFor(opts.user) : this.defaults.cred;\n const cwd = opts.cwd ? P.resolve(this.defaults.cwd, opts.cwd) : this.defaults.cwd;\n return new Session(this.kernel, {\n cwd,\n env: { ...this.defaults.env, ...opts.env, PWD: cwd },\n cred,\n hooks: this.hooks,\n });\n }\n\n /** The container-wide session used by `shell()` shorthand helpers. */\n get shell(): Session {\n if (!this.defaultSession) this.defaultSession = this.session();\n return this.defaultSession;\n }\n\n private makeStdio(opts: ExecOptions): {\n io: ShellIO;\n stdout: BufferSink;\n stderr: BufferSink;\n combined: string[];\n } {\n const combined: string[] = [];\n const decoder = new TextDecoder();\n\n const stdout = new BufferSink((chunk) => {\n const text = decoder.decode(chunk, { stream: true });\n combined.push(text);\n opts.onStdout?.(text);\n this.hooks.onStdout?.(text);\n });\n const stderr = new BufferSink((chunk) => {\n const text = decoder.decode(chunk, { stream: true });\n combined.push(text);\n opts.onStderr?.(text);\n this.hooks.onStderr?.(text);\n });\n\n if (opts.tty) {\n stdout.isTTY = true;\n stderr.isTTY = true;\n stdout.columns = opts.columns ?? 80;\n stdout.rows = opts.rows ?? 24;\n }\n\n const stdin: InputStream = opts.stdin === undefined ? new NullInput() : Pipe.from(opts.stdin);\n return { io: { stdin, stdout, stderr }, stdout, stderr, combined };\n }\n\n // ── networking ────────────────────────────────────────────────────────────\n\n /** Send an HTTP request to a server running inside the container. */\n async request(\n port: number,\n init: { method?: string; path?: string; headers?: Record<string, string>; body?: string | Uint8Array } = {},\n ): Promise<HttpResponse> {\n this.assertActive();\n const res = await this.pod.request(port, {\n method: init.method ?? \"GET\",\n path: init.path ?? \"/\",\n headers: init.headers ?? {},\n body: init.body ?? null,\n });\n\n const bodyRaw = (res as { body?: unknown }).body;\n const bytes =\n bodyRaw instanceof Uint8Array\n ? bodyRaw\n : typeof bodyRaw === \"string\"\n ? new TextEncoder().encode(bodyRaw)\n : new Uint8Array(0);\n const body = typeof bodyRaw === \"string\" ? bodyRaw : new TextDecoder().decode(bytes);\n\n return {\n status: res.statusCode ?? 200,\n statusText: res.statusMessage ?? \"\",\n headers: (res.headers ?? {}) as Record<string, string>,\n body,\n bytes,\n json<T = unknown>(): T {\n return JSON.parse(body) as T;\n },\n };\n }\n\n /** Wait until something inside the container answers on `port`. */\n waitForPort(port: number, opts: { timeoutMs?: number; intervalMs?: number } = {}): Promise<boolean> {\n return this.net.waitForPort(port, opts);\n }\n\n /**\n * Bridge a container port onto a real host port, so a browser (or anything\n * else on your machine) can reach a dev server running inside the sandbox.\n */\n async expose(port: number, opts: { hostPort?: number; hostname?: string } = {}): Promise<{\n url: string;\n port: number;\n close(): Promise<void>;\n }> {\n this.assertActive();\n const http = await import(\"node:http\");\n const container = this;\n\n const server = http.createServer((req, res) => {\n const chunks: Buffer[] = [];\n req.on(\"data\", (chunk: Buffer) => chunks.push(chunk));\n req.on(\"end\", () => {\n const body = chunks.length ? Buffer.concat(chunks) : null;\n container\n .request(port, {\n method: req.method ?? \"GET\",\n path: req.url ?? \"/\",\n headers: normalizeHeaders(req.headers),\n ...(body ? { body: new Uint8Array(body) } : {}),\n })\n .then((response) => {\n res.writeHead(response.status, response.headers);\n res.end(Buffer.from(response.bytes));\n })\n .catch((e: unknown) => {\n res.writeHead(502, { \"Content-Type\": \"text/plain\" });\n res.end(`sandboxedjs: ${e instanceof Error ? e.message : String(e)}`);\n });\n });\n });\n\n const hostPort = opts.hostPort ?? 0;\n const hostname = opts.hostname ?? \"127.0.0.1\";\n await new Promise<void>((resolve, reject) => {\n server.once(\"error\", reject);\n server.listen(hostPort, hostname, () => resolve());\n });\n const address = server.address();\n const actualPort = typeof address === \"object\" && address ? address.port : hostPort;\n\n return {\n url: `http://${hostname}:${actualPort}`,\n port: actualPort,\n close: () => new Promise<void>((resolve) => server.close(() => resolve())),\n };\n }\n\n // ── persistence ───────────────────────────────────────────────────────────\n\n /** A serialisable snapshot of the whole filesystem. */\n snapshot(opts: { shallow?: boolean } = {}): unknown {\n this.assertActive();\n return this.pod.snapshot({ shallow: opts.shallow ?? false, autoInstall: false });\n }\n\n async restore(snapshot: unknown): Promise<void> {\n this.assertActive();\n await this.pod.restore(snapshot as never, { autoInstall: false });\n }\n\n // ── lifecycle ─────────────────────────────────────────────────────────────\n\n get hostname(): string {\n return this.kernel.hostname;\n }\n\n get user(): string {\n return this.defaults.user;\n }\n\n get cwd(): string {\n return this.defaults.cwd;\n }\n\n get env(): Record<string, string> {\n return { ...this.defaults.env };\n }\n\n private assertActive(): void {\n if (this.disposed) throw new Error(\"container has been disposed\");\n }\n\n /** Tear down every process and release the Nodepod instance. */\n dispose(): void {\n if (this.disposed) return;\n this.disposed = true;\n this.kernel.dispose();\n try {\n this.pod.teardown();\n } catch {\n /* already gone */\n }\n }\n\n get isDisposed(): boolean {\n return this.disposed;\n }\n}\n\nfunction normalizeHeaders(headers: Record<string, string | string[] | undefined>): Record<string, string> {\n const out: Record<string, string> = {};\n for (const [key, value] of Object.entries(headers)) {\n if (value === undefined) continue;\n out[key] = Array.isArray(value) ? value.join(\", \") : value;\n }\n return out;\n}\n\n/** Boot a container. The one function most callers need. */\nexport async function createContainer(opts: ContainerOptions = {}): Promise<Container> {\n return Container.create(opts);\n}\n\nexport type { NetworkOptions };\nexport { Process, Kernel, Shell, NullOutput, CallbackSink, OutputStream };\n","/**\n * `/bin/sh` — the shell as an ordinary executable, so `sh -c`, `#!/bin/sh`\n * scripts and `bash script.sh` all go through the same interpreter.\n */\n\nimport { defineCommand, type Command } from \"../kernel/command.js\";\nimport { Shell } from \"../shell/interpreter.js\";\nimport type { ShellIO } from \"../shell/interpreter.js\";\nimport * as P from \"../fs/path.js\";\n\nasync function runShell(ctxName: string, ctx: Parameters<Command[\"run\"]>[0]): Promise<number> {\n const args = ctx.args.slice();\n let command: string | undefined;\n let scriptPath: string | undefined;\n let readStdin = false;\n let interactive = false;\n let login = ctxName.startsWith(\"-\");\n const options: Record<string, boolean> = {};\n\n let i = 0;\n for (; i < args.length; i++) {\n const arg = args[i]!;\n if (arg === \"-c\") {\n command = args[++i];\n i++;\n break;\n }\n if (arg === \"-s\") {\n readStdin = true;\n continue;\n }\n if (arg === \"-i\") {\n interactive = true;\n continue;\n }\n if (arg === \"-l\" || arg === \"--login\") {\n login = true;\n continue;\n }\n if (arg === \"--version\") {\n ctx.line(\"SandboxedJS shell, version 1.0.0 (x86_64-sandboxedjs-linux-gnu)\");\n return 0;\n }\n if (arg === \"--help\") {\n ctx.line(`Usage: ${ctxName} [option] [command_string | file]`);\n return 0;\n }\n if (arg === \"--\") {\n i++;\n break;\n }\n if (arg.startsWith(\"-\") && arg.length > 1) {\n for (const flag of arg.slice(1)) {\n if (flag === \"e\") options.errexit = true;\n if (flag === \"u\") options.nounset = true;\n if (flag === \"x\") options.xtrace = true;\n if (flag === \"v\") options.verbose = true;\n if (flag === \"f\") options.noglob = true;\n if (flag === \"n\") options.noexec = true;\n }\n continue;\n }\n break;\n }\n\n const rest = args.slice(i);\n if (command === undefined && !readStdin && rest.length > 0) {\n scriptPath = rest[0];\n }\n\n const positional = command !== undefined ? rest.slice(1) : scriptPath !== undefined ? rest.slice(1) : rest;\n const scriptName = command !== undefined ? (rest[0] ?? ctxName) : (scriptPath ?? ctxName);\n\n const shell = new Shell({\n kernel: ctx.kernel,\n proc: ctx.proc,\n cwd: ctx.cwd,\n env: ctx.env,\n cred: ctx.cred,\n positional,\n scriptName,\n options: { ...options, interactive, login },\n });\n\n const io: ShellIO = { stdin: ctx.stdin, stdout: ctx.stdout, stderr: ctx.stderr };\n\n if (login) {\n for (const rc of [\"/etc/profile\", P.join(ctx.env.HOME ?? \"/root\", \".profile\")]) {\n if (ctx.vfs.lexists(rc)) {\n await shell.execute(ctx.vfs.readText(rc, ctx.cred), io);\n }\n }\n } else if (interactive) {\n const rc = ctx.env.ENV ?? P.join(ctx.env.HOME ?? \"/root\", \".bashrc\");\n if (ctx.vfs.lexists(rc)) await shell.execute(ctx.vfs.readText(rc, ctx.cred), io);\n }\n\n if (command !== undefined) {\n return shell.execute(command, io);\n }\n\n if (scriptPath !== undefined) {\n const abs = ctx.path(scriptPath);\n let source: string;\n try {\n source = ctx.vfs.readText(abs, ctx.cred);\n } catch {\n ctx.warn(`${scriptPath}: No such file or directory`);\n return 127;\n }\n return shell.execute(source, io);\n }\n\n // Read a script (or an interactive stream) from stdin.\n const source = new TextDecoder().decode(await ctx.stdin.readAll());\n if (source.trim() === \"\") return 0;\n return shell.execute(source, io);\n}\n\nexport const sh: Command = defineCommand({\n name: \"sh\",\n path: \"/bin/sh\",\n aliases: [\"bash\", \"dash\"],\n summary: \"command interpreter (shell)\",\n usage: \"sh [-c command] [file] [arguments]\",\n run: (ctx) => runShell(ctx.name, ctx),\n});\n\nexport const commands: Command[] = [sh];\n","/** File and directory utilities: ls, cp, mv, rm, mkdir, ln, stat, du, … */\n\nimport { defineCommand, type Command, type ExecContext } from \"../kernel/command.js\";\nimport { parseArgs, UsageError } from \"../util/args.js\";\nimport { SysError, isSysError } from \"../fs/errno.js\";\nimport { applyChmod, formatMode, octalMode, kindOf } from \"../fs/mode.js\";\nimport * as P from \"../fs/path.js\";\nimport type { Stats } from \"../fs/stat.js\";\nimport {\n columnize,\n humanSize,\n lsTime,\n statEntry,\n terminalWidth,\n versionCompare,\n type Entry,\n} from \"./helpers.js\";\n\n// ── ls ──────────────────────────────────────────────────────────────────────\n\nconst LS_COLORS: Record<string, string> = {\n directory: \"\u001b[1;34m\",\n symlink: \"\u001b[1;36m\",\n chardev: \"\u001b[1;33m\",\n blockdev: \"\u001b[1;33m\",\n fifo: \"\u001b[33m\",\n socket: \"\u001b[1;35m\",\n executable: \"\u001b[1;32m\",\n};\n\nexport const ls: Command = defineCommand({\n name: \"ls\",\n path: \"/bin/ls\",\n summary: \"list directory contents\",\n usage: \"ls [OPTION]... [FILE]...\",\n async run(ctx) {\n const args = parseArgs(ctx.args, [\n { short: \"l\" },\n { short: \"a\", long: \"all\" },\n { short: \"A\", long: \"almost-all\" },\n { short: \"h\", long: \"human-readable\" },\n { short: \"R\", long: \"recursive\" },\n { short: \"r\", long: \"reverse\" },\n { short: \"t\" },\n { short: \"S\" },\n { short: \"v\" },\n { short: \"d\", long: \"directory\" },\n { short: \"1\" },\n { short: \"i\", long: \"inode\" },\n { short: \"n\", long: \"numeric-uid-gid\" },\n { short: \"F\", long: \"classify\" },\n { short: \"p\" },\n { short: \"s\", long: \"size\" },\n { long: \"color\", arg: true, default: \"auto\" },\n { long: \"help\" },\n ]);\n\n if (args.has(\"help\")) {\n ctx.line(`Usage: ${ls.usage}`);\n return 0;\n }\n\n const showHidden = args.has(\"all\");\n const almostAll = args.has(\"almost-all\");\n const longFormat = args.has(\"l\") || args.has(\"numeric-uid-gid\");\n const colorMode = args.str(\"color\", \"auto\")!;\n const useColor = colorMode === \"always\" || (colorMode === \"auto\" && ctx.stdout.isTTY);\n const operands = args.positional.length ? args.positional : [\".\"];\n\n let status = 0;\n const files: Entry[] = [];\n const dirs: string[] = [];\n\n for (const operand of operands) {\n try {\n // Command-line operands are followed: `ls link-to-dir` lists the\n // directory, as it does on a real system. `-d` suppresses that.\n const entry = statEntry(ctx, operand, !args.has(\"directory\"));\n if (entry.stat.isDirectory() && !args.has(\"directory\")) dirs.push(operand);\n else files.push({ ...statEntry(ctx, operand, false), name: operand });\n } catch (e) {\n status = ctx.reportError(e, operand);\n }\n }\n\n const printGroup = (entries: Entry[], showTotal: boolean) => {\n sortEntries(entries, args);\n if (longFormat) printLong(ctx, entries, args, useColor, showTotal);\n else printShort(ctx, entries, args, useColor);\n };\n\n // A bare file operand has no `total` line; only directory listings do.\n if (files.length) printGroup(files, false);\n\n const multiple = dirs.length + files.length > 1 || args.has(\"recursive\");\n const visit = (dir: string, first: boolean) => {\n if (multiple) {\n if (!first || files.length) ctx.line();\n ctx.line(`${dir}:`);\n }\n let names: string[];\n try {\n names = ctx.vfs.readdir(ctx.path(dir), ctx.cred);\n } catch (e) {\n status = ctx.reportError(e, dir);\n return;\n }\n if (!showHidden && !almostAll) names = names.filter((n) => !n.startsWith(\".\"));\n\n const entries: Entry[] = [];\n // `.` and `..` are synthesised: they are not real directory entries here,\n // and they must keep those names rather than resolving to the target.\n if (showHidden) {\n for (const [label, target] of [\n [\".\", ctx.path(dir)],\n [\"..\", P.dirname(ctx.path(dir))],\n ] as const) {\n try {\n entries.push({ ...statEntry(ctx, target, false), name: label });\n } catch {\n /* unreadable parent */\n }\n }\n }\n for (const name of names) {\n try {\n entries.push(statEntry(ctx, P.join(dir, name), false));\n } catch {\n /* raced away */\n }\n }\n printGroup(entries, true);\n\n if (args.has(\"recursive\")) {\n for (const e of entries) {\n if (e.stat.isDirectory() && e.name !== \".\" && e.name !== \"..\") visit(P.join(dir, e.name), false);\n }\n }\n };\n\n dirs.forEach((dir, idx) => visit(dir, idx === 0));\n return status;\n },\n});\n\nfunction sortEntries(entries: Entry[], args: ReturnType<typeof parseArgs>): void {\n if (args.has(\"t\")) entries.sort((a, b) => b.stat.mtimeMs - a.stat.mtimeMs || (a.name < b.name ? -1 : 1));\n else if (args.has(\"S\")) entries.sort((a, b) => b.stat.size - a.stat.size || (a.name < b.name ? -1 : 1));\n else if (args.has(\"v\")) entries.sort((a, b) => versionCompare(a.name, b.name));\n else entries.sort((a, b) => (a.name < b.name ? -1 : a.name > b.name ? 1 : 0));\n if (args.has(\"reverse\")) entries.reverse();\n}\n\nfunction classify(entry: Entry): string {\n if (entry.stat.isDirectory()) return \"/\";\n if (entry.stat.isSymbolicLink()) return \"@\";\n if (entry.stat.isFIFO()) return \"|\";\n if (entry.stat.isSocket()) return \"=\";\n if ((entry.stat.mode & 0o111) !== 0) return \"*\";\n return \"\";\n}\n\nfunction colorize(entry: Entry, name: string, useColor: boolean): string {\n if (!useColor) return name;\n const kind = kindOf(entry.stat.mode);\n const color = LS_COLORS[kind] ?? ((entry.stat.mode & 0o111) !== 0 ? LS_COLORS.executable : undefined);\n return color ? `${color}${name}\u001b[0m` : name;\n}\n\nfunction printShort(ctx: ExecContext, entries: Entry[], args: ReturnType<typeof parseArgs>, useColor: boolean): void {\n const suffixed = entries.map((e) => {\n const suffix = args.has(\"classify\") ? classify(e) : args.has(\"p\") && e.stat.isDirectory() ? \"/\" : \"\";\n const prefix = args.has(\"inode\") ? `${e.stat.ino} ` : \"\";\n return prefix + colorize(e, e.name, useColor) + suffix;\n });\n if (args.has(\"1\") || !ctx.stdout.isTTY) {\n for (const line of suffixed) ctx.line(line);\n return;\n }\n for (const line of columnize(suffixed, terminalWidth(ctx))) ctx.line(line);\n}\n\nfunction printLong(\n ctx: ExecContext,\n entries: Entry[],\n args: ReturnType<typeof parseArgs>,\n useColor: boolean,\n showTotal: boolean,\n): void {\n const human = args.has(\"human-readable\");\n const numeric = args.has(\"numeric-uid-gid\");\n const totalBlocks = entries.reduce((sum, e) => sum + Math.ceil(e.stat.size / 1024), 0);\n if (showTotal) ctx.line(`total ${totalBlocks}`);\n\n const rows = entries.map((e) => {\n const owner = numeric ? String(e.stat.uid) : ctx.kernel.users.nameForUid(e.stat.uid);\n const group = numeric ? String(e.stat.gid) : ctx.kernel.users.nameForGid(e.stat.gid);\n const size = human ? humanSize(e.stat.size) : String(e.stat.size);\n return {\n mode: formatMode(e.stat.mode),\n nlink: String(e.stat.nlink),\n owner,\n group,\n size,\n time: lsTime(e.stat.mtimeMs, ctx.kernel.now()),\n name: colorize(e, e.name, useColor) + (args.has(\"classify\") ? classify(e) : \"\"),\n link: e.linkTarget,\n inode: String(e.stat.ino),\n };\n });\n\n const width = (pick: (r: (typeof rows)[number]) => string) => Math.max(0, ...rows.map((r) => pick(r).length));\n const wNlink = width((r) => r.nlink);\n const wOwner = width((r) => r.owner);\n const wGroup = width((r) => r.group);\n const wSize = width((r) => r.size);\n const wIno = width((r) => r.inode);\n\n for (const r of rows) {\n const inode = args.has(\"inode\") ? r.inode.padStart(wIno) + \" \" : \"\";\n const link = r.link ? ` -> ${r.link}` : \"\";\n ctx.line(\n `${inode}${r.mode} ${r.nlink.padStart(wNlink)} ${r.owner.padEnd(wOwner)} ${r.group.padEnd(wGroup)} ${r.size.padStart(wSize)} ${r.time} ${r.name}${link}`,\n );\n }\n}\n\n// ── cat ─────────────────────────────────────────────────────────────────────\n\nexport const cat: Command = defineCommand({\n name: \"cat\",\n path: \"/bin/cat\",\n summary: \"concatenate files and print on the standard output\",\n usage: \"cat [OPTION]... [FILE]...\",\n async run(ctx) {\n const args = parseArgs(ctx.args, [\n { short: \"n\", long: \"number\" },\n { short: \"b\", long: \"number-nonblank\" },\n { short: \"E\", long: \"show-ends\" },\n { short: \"T\", long: \"show-tabs\" },\n { short: \"s\", long: \"squeeze-blank\" },\n { short: \"A\", long: \"show-all\" },\n { short: \"v\" },\n ]);\n\n const operands = args.positional.length ? args.positional : [\"-\"];\n const plain = !args.has(\"number\") && !args.has(\"number-nonblank\") && !args.has(\"show-ends\") && !args.has(\"show-tabs\") && !args.has(\"squeeze-blank\") && !args.has(\"show-all\");\n\n let status = 0;\n let lineNumber = 1;\n let lastWasBlank = false;\n\n for (const operand of operands) {\n let bytes: Uint8Array;\n if (operand === \"-\") {\n // Stream stdin rather than slurping it, so `cat` behaves like a filter\n // on a live pipe instead of waiting for the writer to disappear.\n if (plain) {\n for (;;) {\n const chunk = await ctx.stdin.read();\n if (chunk === null) break;\n ctx.write(chunk);\n if (ctx.stdout.closed || ctx.signal.aborted) break;\n }\n continue;\n }\n bytes = await ctx.stdin.readAll();\n } else {\n try {\n const abs = ctx.path(operand);\n const st = ctx.vfs.stat(abs, { cred: ctx.cred });\n if (st.isDirectory()) {\n ctx.warn(`${operand}: Is a directory`);\n status = 1;\n continue;\n }\n bytes = ctx.vfs.readFile(abs, ctx.cred);\n } catch (e) {\n status = ctx.reportError(e, operand);\n continue;\n }\n }\n\n if (plain) {\n ctx.write(bytes);\n continue;\n }\n\n const text = new TextDecoder().decode(bytes);\n const hadTrailing = text.endsWith(\"\\n\");\n const parts = (hadTrailing ? text.slice(0, -1) : text).split(\"\\n\");\n for (const raw of parts) {\n if (args.has(\"squeeze-blank\")) {\n if (raw === \"\" && lastWasBlank) continue;\n lastWasBlank = raw === \"\";\n }\n let line = raw;\n if (args.has(\"show-tabs\") || args.has(\"show-all\")) line = line.replace(/\\t/g, \"^I\");\n if (args.has(\"show-ends\") || args.has(\"show-all\")) line = line + \"$\";\n if (args.has(\"number-nonblank\")) {\n line = raw === \"\" ? line : `${String(lineNumber++).padStart(6)}\\t${line}`;\n } else if (args.has(\"number\")) {\n line = `${String(lineNumber++).padStart(6)}\\t${line}`;\n }\n ctx.line(line);\n }\n }\n return status;\n },\n});\n\n// ── cp / mv / rm ────────────────────────────────────────────────────────────\n\nexport const cp: Command = defineCommand({\n name: \"cp\",\n path: \"/bin/cp\",\n summary: \"copy files and directories\",\n usage: \"cp [OPTION]... SOURCE... DEST\",\n async run(ctx) {\n const args = parseArgs(ctx.args, [\n { short: \"r\", long: \"recursive\" },\n { short: \"R\" },\n { short: \"f\", long: \"force\" },\n { short: \"i\", long: \"interactive\" },\n { short: \"n\", long: \"no-clobber\" },\n { short: \"p\", long: \"preserve\" },\n { short: \"a\", long: \"archive\" },\n { short: \"v\", long: \"verbose\" },\n { short: \"L\", long: \"dereference\" },\n { short: \"t\", long: \"target-directory\", arg: true },\n { short: \"T\", long: \"no-target-directory\" },\n ]);\n\n const recursive = args.has(\"recursive\") || args.has(\"R\") || args.has(\"archive\");\n const verbose = args.has(\"verbose\");\n const noClobber = args.has(\"no-clobber\");\n\n const targetDir = args.str(\"target-directory\");\n const sources = targetDir ? args.positional : args.positional.slice(0, -1);\n const destRaw = targetDir ?? args.positional[args.positional.length - 1];\n\n if (sources.length === 0 || destRaw === undefined) {\n ctx.warn(\"missing file operand\");\n return 1;\n }\n\n const dest = ctx.path(destRaw);\n const destIsDir = ctx.vfs.lexists(dest) && ctx.vfs.stat(dest, { cred: ctx.cred }).isDirectory();\n if (sources.length > 1 && !destIsDir) {\n ctx.warn(`target '${destRaw}' is not a directory`);\n return 1;\n }\n\n let status = 0;\n for (const source of sources) {\n const src = ctx.path(source);\n const target = destIsDir && !args.has(\"no-target-directory\") ? P.join(dest, P.basename(src)) : dest;\n try {\n const st = ctx.vfs.lstat(src);\n if (st.isDirectory() && !recursive) {\n ctx.warn(`-r not specified; omitting directory '${source}'`);\n status = 1;\n continue;\n }\n if (noClobber && ctx.vfs.lexists(target)) continue;\n if (P.contains(src, target) && st.isDirectory()) {\n ctx.warn(`cannot copy a directory, '${source}', into itself, '${destRaw}'`);\n status = 1;\n continue;\n }\n ctx.vfs.copyTree(src, target, ctx.cred);\n if (args.has(\"preserve\") || args.has(\"archive\")) {\n ctx.vfs.utimes(target, st.atimeMs, st.mtimeMs, ctx.cred);\n try {\n ctx.vfs.chown(target, st.uid, st.gid, ctx.cred);\n } catch {\n /* not permitted, matching cp's behaviour */\n }\n }\n if (verbose) ctx.line(`'${source}' -> '${destIsDir ? P.join(destRaw, P.basename(src)) : destRaw}'`);\n } catch (e) {\n status = ctx.reportError(e, source);\n }\n }\n return status;\n },\n});\n\nexport const mv: Command = defineCommand({\n name: \"mv\",\n path: \"/bin/mv\",\n summary: \"move (rename) files\",\n usage: \"mv [OPTION]... SOURCE... DEST\",\n async run(ctx) {\n const args = parseArgs(ctx.args, [\n { short: \"f\", long: \"force\" },\n { short: \"i\", long: \"interactive\" },\n { short: \"n\", long: \"no-clobber\" },\n { short: \"v\", long: \"verbose\" },\n { short: \"t\", long: \"target-directory\", arg: true },\n { short: \"T\", long: \"no-target-directory\" },\n ]);\n\n const targetDir = args.str(\"target-directory\");\n const sources = targetDir ? args.positional : args.positional.slice(0, -1);\n const destRaw = targetDir ?? args.positional[args.positional.length - 1];\n if (sources.length === 0 || destRaw === undefined) {\n ctx.warn(\"missing file operand\");\n return 1;\n }\n\n const dest = ctx.path(destRaw);\n const destIsDir = ctx.vfs.lexists(dest) && ctx.vfs.stat(dest, { cred: ctx.cred }).isDirectory();\n\n let status = 0;\n for (const source of sources) {\n const src = ctx.path(source);\n const target = destIsDir && !args.has(\"no-target-directory\") ? P.join(dest, P.basename(src)) : dest;\n try {\n if (args.has(\"no-clobber\") && ctx.vfs.lexists(target)) continue;\n if (ctx.vfs.lexists(target)) {\n const targetStat = ctx.vfs.lstat(target);\n if (targetStat.isDirectory() && !ctx.vfs.lstat(src).isDirectory()) {\n ctx.warn(`cannot overwrite directory '${destRaw}' with non-directory`);\n status = 1;\n continue;\n }\n if (targetStat.isDirectory()) ctx.vfs.rmrf(target, ctx.cred);\n else ctx.vfs.unlink(target, ctx.cred);\n }\n ctx.vfs.rename(src, target, ctx.cred);\n if (args.has(\"verbose\")) ctx.line(`'${source}' -> '${destIsDir ? P.join(destRaw, P.basename(src)) : destRaw}'`);\n } catch (e) {\n status = ctx.reportError(e, source);\n }\n }\n return status;\n },\n});\n\nexport const rm: Command = defineCommand({\n name: \"rm\",\n path: \"/bin/rm\",\n summary: \"remove files or directories\",\n usage: \"rm [OPTION]... [FILE]...\",\n async run(ctx) {\n const args = parseArgs(ctx.args, [\n { short: \"r\", long: \"recursive\" },\n { short: \"R\" },\n { short: \"f\", long: \"force\" },\n { short: \"i\", long: \"interactive\" },\n { short: \"d\", long: \"dir\" },\n { short: \"v\", long: \"verbose\" },\n { long: \"no-preserve-root\" },\n ]);\n\n const recursive = args.has(\"recursive\") || args.has(\"R\");\n const force = args.has(\"force\");\n\n if (args.positional.length === 0) {\n if (force) return 0;\n ctx.warn(\"missing operand\");\n return 1;\n }\n\n let status = 0;\n for (const operand of args.positional) {\n const abs = ctx.path(operand);\n if (abs === \"/\" && !args.has(\"no-preserve-root\")) {\n ctx.warn(\"it is dangerous to operate recursively on '/'\");\n ctx.warn(\"use --no-preserve-root to override this failsafe\");\n status = 1;\n continue;\n }\n try {\n const st = ctx.vfs.lstat(abs);\n if (st.isDirectory()) {\n if (recursive) ctx.vfs.rmrf(abs, ctx.cred);\n else if (args.has(\"dir\")) ctx.vfs.rmdir(abs, ctx.cred);\n else {\n ctx.warn(`cannot remove '${operand}': Is a directory`);\n status = 1;\n continue;\n }\n } else {\n ctx.vfs.unlink(abs, ctx.cred);\n }\n if (args.has(\"verbose\")) ctx.line(`removed '${operand}'`);\n } catch (e) {\n if (force && isSysError(e) && e.code === \"ENOENT\") continue;\n ctx.warn(`cannot remove '${operand}': ${describeError(e)}`);\n status = 1;\n }\n }\n return status;\n },\n});\n\nfunction describeError(e: unknown): string {\n if (isSysError(e)) {\n const m = /: ([^,]+),/.exec(e.message);\n return m?.[1] ?? e.code;\n }\n return e instanceof Error ? e.message : String(e);\n}\n\n// ── mkdir / rmdir / touch ───────────────────────────────────────────────────\n\nexport const mkdir: Command = defineCommand({\n name: \"mkdir\",\n path: \"/bin/mkdir\",\n summary: \"make directories\",\n usage: \"mkdir [OPTION]... DIRECTORY...\",\n async run(ctx) {\n const args = parseArgs(ctx.args, [\n { short: \"p\", long: \"parents\" },\n { short: \"m\", long: \"mode\", arg: true },\n { short: \"v\", long: \"verbose\" },\n ]);\n if (args.positional.length === 0) {\n ctx.warn(\"missing operand\");\n return 1;\n }\n const modeSpec = args.str(\"mode\");\n let status = 0;\n for (const operand of args.positional) {\n try {\n const abs = ctx.path(operand);\n if (args.has(\"parents\") && ctx.vfs.lexists(abs)) continue;\n ctx.vfs.mkdir(abs, {\n recursive: args.has(\"parents\"),\n cred: ctx.cred,\n mode: modeSpec ? applyChmod(modeSpec, 0o777, true, 0) : 0o777,\n });\n if (modeSpec) ctx.vfs.chmod(abs, applyChmod(modeSpec, 0o777, true, 0), ctx.cred);\n if (args.has(\"verbose\")) ctx.line(`created directory '${operand}'`);\n } catch (e) {\n ctx.warn(`cannot create directory '${operand}': ${describeError(e)}`);\n status = 1;\n }\n }\n return status;\n },\n});\n\nexport const rmdir: Command = defineCommand({\n name: \"rmdir\",\n path: \"/bin/rmdir\",\n summary: \"remove empty directories\",\n usage: \"rmdir [OPTION]... DIRECTORY...\",\n async run(ctx) {\n const args = parseArgs(ctx.args, [\n { short: \"p\", long: \"parents\" },\n { short: \"v\", long: \"verbose\" },\n { long: \"ignore-fail-on-non-empty\" },\n ]);\n let status = 0;\n for (const operand of args.positional) {\n let abs = ctx.path(operand);\n try {\n ctx.vfs.rmdir(abs, ctx.cred);\n if (args.has(\"verbose\")) ctx.line(`removing directory, '${operand}'`);\n if (args.has(\"parents\")) {\n for (;;) {\n abs = P.dirname(abs);\n if (abs === \"/\" || abs === \".\") break;\n try {\n ctx.vfs.rmdir(abs, ctx.cred);\n } catch {\n break;\n }\n }\n }\n } catch (e) {\n if (args.has(\"ignore-fail-on-non-empty\") && isSysError(e) && e.code === \"ENOTEMPTY\") continue;\n ctx.warn(`failed to remove '${operand}': ${describeError(e)}`);\n status = 1;\n }\n }\n return status;\n },\n});\n\nexport const touch: Command = defineCommand({\n name: \"touch\",\n path: \"/bin/touch\",\n summary: \"change file timestamps\",\n usage: \"touch [OPTION]... FILE...\",\n async run(ctx) {\n const args = parseArgs(ctx.args, [\n { short: \"c\", long: \"no-create\" },\n { short: \"a\" },\n { short: \"m\" },\n { short: \"d\", long: \"date\", arg: true },\n { short: \"r\", long: \"reference\", arg: true },\n { short: \"t\", arg: true },\n ]);\n if (args.positional.length === 0) {\n ctx.warn(\"missing file operand\");\n return 1;\n }\n\n let timeMs = ctx.kernel.now();\n const dateSpec = args.str(\"date\");\n if (dateSpec) {\n const parsed = Date.parse(dateSpec);\n if (Number.isFinite(parsed)) timeMs = parsed;\n }\n const reference = args.str(\"reference\");\n if (reference) {\n try {\n timeMs = ctx.vfs.stat(ctx.path(reference), { cred: ctx.cred }).mtimeMs;\n } catch (e) {\n return ctx.reportError(e, reference);\n }\n }\n\n let status = 0;\n for (const operand of args.positional) {\n const abs = ctx.path(operand);\n try {\n if (!ctx.vfs.lexists(abs)) {\n if (args.has(\"no-create\")) continue;\n ctx.vfs.writeFile(abs, new Uint8Array(0), { cred: ctx.cred, mode: 0o666 });\n }\n ctx.vfs.utimes(abs, timeMs, timeMs, ctx.cred);\n } catch (e) {\n status = ctx.reportError(e, operand);\n }\n }\n return status;\n },\n});\n\n// ── ln / readlink / realpath ────────────────────────────────────────────────\n\nexport const ln: Command = defineCommand({\n name: \"ln\",\n path: \"/bin/ln\",\n summary: \"make links between files\",\n usage: \"ln [OPTION]... TARGET [LINK_NAME]\",\n async run(ctx) {\n const args = parseArgs(ctx.args, [\n { short: \"s\", long: \"symbolic\" },\n { short: \"f\", long: \"force\" },\n { short: \"n\", long: \"no-dereference\" },\n { short: \"v\", long: \"verbose\" },\n { short: \"t\", long: \"target-directory\", arg: true },\n ]);\n const [target, linkNameRaw] = args.positional;\n if (target === undefined) {\n ctx.warn(\"missing file operand\");\n return 1;\n }\n const targetDir = args.str(\"target-directory\");\n let linkPath = linkNameRaw ?? P.basename(target);\n if (targetDir) linkPath = P.join(targetDir, P.basename(target));\n\n const abs = ctx.path(linkPath);\n try {\n if (ctx.vfs.lexists(abs)) {\n const st = ctx.vfs.lstat(abs);\n if (st.isDirectory() && !args.has(\"no-dereference\")) {\n return await linkInto(ctx, target, abs, args.has(\"symbolic\"), args.has(\"force\"));\n }\n if (args.has(\"force\")) ctx.vfs.unlink(abs, ctx.cred);\n }\n if (args.has(\"symbolic\")) ctx.vfs.symlink(target, abs, ctx.cred);\n else ctx.vfs.link(ctx.path(target), abs, ctx.cred);\n if (args.has(\"verbose\")) ctx.line(`'${linkPath}' -> '${target}'`);\n return 0;\n } catch (e) {\n return ctx.reportError(e, linkPath);\n }\n },\n});\n\nasync function linkInto(ctx: ExecContext, target: string, dir: string, symbolic: boolean, force: boolean): Promise<number> {\n const abs = P.join(dir, P.basename(target));\n if (force && ctx.vfs.lexists(abs)) ctx.vfs.unlink(abs, ctx.cred);\n if (symbolic) ctx.vfs.symlink(target, abs, ctx.cred);\n else ctx.vfs.link(ctx.path(target), abs, ctx.cred);\n return 0;\n}\n\nexport const readlink: Command = defineCommand({\n name: \"readlink\",\n path: \"/bin/readlink\",\n summary: \"print resolved symbolic links\",\n usage: \"readlink [OPTION]... FILE...\",\n async run(ctx) {\n const args = parseArgs(ctx.args, [\n { short: \"f\", long: \"canonicalize\" },\n { short: \"e\", long: \"canonicalize-existing\" },\n { short: \"m\", long: \"canonicalize-missing\" },\n { short: \"n\", long: \"no-newline\" },\n { short: \"q\", long: \"quiet\" },\n ]);\n let status = 0;\n for (const operand of args.positional) {\n try {\n const abs = ctx.path(operand);\n const value =\n args.has(\"canonicalize\") || args.has(\"canonicalize-existing\") || args.has(\"canonicalize-missing\")\n ? ctx.vfs.realpath(abs, ctx.cred)\n : ctx.vfs.readlink(abs, ctx.cred);\n if (args.has(\"no-newline\")) ctx.write(value);\n else ctx.line(value);\n } catch (e) {\n if (!args.has(\"quiet\")) status = 1;\n else status = 1;\n void e;\n }\n }\n return status;\n },\n});\n\nexport const realpath: Command = defineCommand({\n name: \"realpath\",\n path: \"/bin/realpath\",\n summary: \"print the resolved absolute file name\",\n usage: \"realpath [OPTION]... FILE...\",\n async run(ctx) {\n const args = parseArgs(ctx.args, [\n { short: \"e\", long: \"canonicalize-existing\" },\n { short: \"m\", long: \"canonicalize-missing\" },\n { short: \"q\", long: \"quiet\" },\n { short: \"s\", long: \"no-symlinks\" },\n { long: \"relative-to\", arg: true },\n ]);\n let status = 0;\n for (const operand of args.positional) {\n try {\n const abs = ctx.path(operand);\n const resolved = args.has(\"no-symlinks\") ? abs : ctx.vfs.realpath(abs, ctx.cred);\n const relativeTo = args.str(\"relative-to\");\n ctx.line(relativeTo ? P.relative(ctx.path(relativeTo), resolved) : resolved);\n } catch (e) {\n if (args.has(\"canonicalize-missing\")) {\n ctx.line(ctx.path(operand));\n continue;\n }\n if (!args.has(\"quiet\")) ctx.warn(`${operand}: No such file or directory`);\n status = 1;\n }\n }\n return status;\n },\n});\n\nexport const basename: Command = defineCommand({\n name: \"basename\",\n path: \"/usr/bin/basename\",\n summary: \"strip directory and suffix from filenames\",\n usage: \"basename NAME [SUFFIX]\",\n async run(ctx) {\n const args = parseArgs(ctx.args, [\n { short: \"a\", long: \"multiple\" },\n { short: \"s\", long: \"suffix\", arg: true },\n { short: \"z\", long: \"zero\" },\n ]);\n const suffix = args.str(\"suffix\");\n const terminator = args.has(\"zero\") ? \"\\0\" : \"\\n\";\n if (args.positional.length === 0) {\n ctx.warn(\"missing operand\");\n return 1;\n }\n const names = args.has(\"multiple\") || suffix !== undefined ? args.positional : [args.positional[0]!];\n const trailingSuffix = suffix ?? (args.positional.length > 1 && !args.has(\"multiple\") ? args.positional[1] : undefined);\n for (const name of names) {\n ctx.write(P.basename(name, trailingSuffix) + terminator);\n }\n return 0;\n },\n});\n\nexport const dirname: Command = defineCommand({\n name: \"dirname\",\n path: \"/usr/bin/dirname\",\n summary: \"strip last component from file name\",\n usage: \"dirname NAME...\",\n async run(ctx) {\n const args = parseArgs(ctx.args, [{ short: \"z\", long: \"zero\" }]);\n if (args.positional.length === 0) {\n ctx.warn(\"missing operand\");\n return 1;\n }\n const terminator = args.has(\"zero\") ? \"\\0\" : \"\\n\";\n for (const name of args.positional) ctx.write(P.dirname(name) + terminator);\n return 0;\n },\n});\n\n// ── permissions ─────────────────────────────────────────────────────────────\n\nexport const chmod: Command = defineCommand({\n name: \"chmod\",\n path: \"/bin/chmod\",\n summary: \"change file mode bits\",\n usage: \"chmod [OPTION]... MODE FILE...\",\n async run(ctx) {\n const args = parseArgs(ctx.args, [\n { short: \"R\", long: \"recursive\" },\n { short: \"v\", long: \"verbose\" },\n { short: \"c\", long: \"changes\" },\n { short: \"f\", long: \"silent\" },\n ]);\n const [modeSpec, ...targets] = args.positional;\n if (modeSpec === undefined || targets.length === 0) {\n ctx.warn(\"missing operand\");\n return 1;\n }\n\n let status = 0;\n const apply = (abs: string) => {\n const st = ctx.vfs.lstat(abs);\n const next = applyChmod(modeSpec, st.mode & 0o7777, st.isDirectory(), 0);\n ctx.vfs.chmod(abs, next, ctx.cred);\n if (args.has(\"verbose\")) ctx.line(`mode of '${abs}' changed to ${octalMode(next)} (${formatMode(next)})`);\n };\n\n for (const target of targets) {\n try {\n const abs = ctx.path(target);\n apply(abs);\n if (args.has(\"recursive\")) {\n for (const child of ctx.vfs.walk(abs, { includeSelf: false, cred: ctx.cred })) apply(child);\n }\n } catch (e) {\n if (!args.has(\"silent\")) status = ctx.reportError(e, target);\n else status = 1;\n }\n }\n return status;\n },\n});\n\nexport const chown: Command = defineCommand({\n name: \"chown\",\n path: \"/bin/chown\",\n summary: \"change file owner and group\",\n usage: \"chown [OPTION]... [OWNER][:[GROUP]] FILE...\",\n async run(ctx) {\n const args = parseArgs(ctx.args, [\n { short: \"R\", long: \"recursive\" },\n { short: \"v\", long: \"verbose\" },\n { short: \"h\", long: \"no-dereference\" },\n ]);\n const [spec, ...targets] = args.positional;\n if (spec === undefined || targets.length === 0) {\n ctx.warn(\"missing operand\");\n return 1;\n }\n\n const [ownerSpec, groupSpec] = spec.split(\":\");\n let uid = -1;\n let gid = -1;\n if (ownerSpec) {\n const resolved = ctx.kernel.users.resolveUid(ownerSpec);\n if (resolved === undefined) return ctx.fail(`invalid user: '${spec}'`);\n uid = resolved;\n }\n if (groupSpec !== undefined && groupSpec !== \"\") {\n const resolved = ctx.kernel.users.resolveGid(groupSpec);\n if (resolved === undefined) return ctx.fail(`invalid group: '${spec}'`);\n gid = resolved;\n } else if (groupSpec === \"\" && ownerSpec) {\n gid = ctx.kernel.users.userByName(ownerSpec)?.gid ?? -1;\n }\n\n let status = 0;\n const apply = (abs: string) => {\n ctx.vfs.chown(abs, uid, gid, ctx.cred, !args.has(\"no-dereference\"));\n if (args.has(\"verbose\")) ctx.line(`changed ownership of '${abs}'`);\n };\n for (const target of targets) {\n try {\n const abs = ctx.path(target);\n apply(abs);\n if (args.has(\"recursive\")) {\n for (const child of ctx.vfs.walk(abs, { includeSelf: false, cred: ctx.cred })) apply(child);\n }\n } catch (e) {\n status = ctx.reportError(e, target);\n }\n }\n return status;\n },\n});\n\nexport const chgrp: Command = defineCommand({\n name: \"chgrp\",\n path: \"/bin/chgrp\",\n summary: \"change group ownership\",\n usage: \"chgrp [OPTION]... GROUP FILE...\",\n async run(ctx) {\n const rewritten = [...ctx.args];\n const idx = rewritten.findIndex((a) => !a.startsWith(\"-\"));\n if (idx >= 0) rewritten[idx] = \":\" + rewritten[idx]!;\n return chown.run({ ...ctx, argv: [\"chown\", ...rewritten], args: rewritten, name: \"chgrp\" } as ExecContext);\n },\n});\n\n// ── stat / du / df ──────────────────────────────────────────────────────────\n\nexport const stat: Command = defineCommand({\n name: \"stat\",\n path: \"/usr/bin/stat\",\n summary: \"display file or file system status\",\n usage: \"stat [OPTION]... FILE...\",\n async run(ctx) {\n const args = parseArgs(ctx.args, [\n { short: \"c\", long: \"format\", arg: true },\n { long: \"printf\", arg: true },\n { short: \"L\", long: \"dereference\" },\n { short: \"t\", long: \"terse\" },\n { short: \"f\", long: \"file-system\" },\n ]);\n if (args.positional.length === 0) {\n ctx.warn(\"missing operand\");\n return 1;\n }\n\n let status = 0;\n for (const operand of args.positional) {\n try {\n const abs = ctx.path(operand);\n const st = args.has(\"dereference\") ? ctx.vfs.stat(abs, { cred: ctx.cred }) : ctx.vfs.lstat(abs);\n const format = args.str(\"format\") ?? args.str(\"printf\");\n if (format) {\n ctx.write(expandStatFormat(format, abs, st, ctx) + (args.str(\"printf\") ? \"\" : \"\\n\"));\n continue;\n }\n if (args.has(\"terse\")) {\n ctx.line(\n [abs, st.size, st.blocks, st.mode.toString(16), st.uid, st.gid, st.dev, st.ino, st.nlink, 0, 0, Math.floor(st.atimeMs / 1000), Math.floor(st.mtimeMs / 1000), Math.floor(st.ctimeMs / 1000), st.blksize].join(\" \"),\n );\n continue;\n }\n const kind = st.isDirectory() ? \"directory\" : st.isSymbolicLink() ? \"symbolic link\" : st.isCharacterDevice() ? \"character special file\" : st.size === 0 ? \"regular empty file\" : \"regular file\";\n const linkSuffix = st.isSymbolicLink() ? ` -> ${ctx.vfs.readlink(abs, ctx.cred)}` : \"\";\n ctx.line(` File: ${abs}${linkSuffix}`);\n ctx.line(` Size: ${String(st.size).padEnd(11)}Blocks: ${String(st.blocks).padEnd(8)}IO Block: ${st.blksize} ${kind}`);\n ctx.line(`Device: ${st.dev.toString(16)}h/${st.dev}d\\tInode: ${st.ino}\\tLinks: ${st.nlink}`);\n ctx.line(\n `Access: (${octalMode(st.mode)}/${formatMode(st.mode)}) Uid: (${String(st.uid).padStart(5)}/${ctx.kernel.users.nameForUid(st.uid).padStart(8)}) Gid: (${String(st.gid).padStart(5)}/${ctx.kernel.users.nameForGid(st.gid).padStart(8)})`,\n );\n ctx.line(`Access: ${isoTime(st.atimeMs)}`);\n ctx.line(`Modify: ${isoTime(st.mtimeMs)}`);\n ctx.line(`Change: ${isoTime(st.ctimeMs)}`);\n ctx.line(` Birth: ${isoTime(st.birthtimeMs)}`);\n } catch (e) {\n ctx.warn(`cannot stat '${operand}': No such file or directory`);\n void e;\n status = 1;\n }\n }\n return status;\n },\n});\n\nfunction isoTime(ms: number): string {\n return new Date(ms).toISOString().replace(\"T\", \" \").replace(\"Z\", \" +0000\");\n}\n\nfunction expandStatFormat(format: string, path: string, st: Stats, ctx: ExecContext): string {\n return format.replace(/%(.)/g, (_, ch: string) => {\n switch (ch) {\n case \"n\":\n return path;\n case \"s\":\n return String(st.size);\n case \"b\":\n return String(st.blocks);\n case \"f\":\n return st.mode.toString(16);\n case \"a\":\n return octalMode(st.mode, 3);\n case \"A\":\n return formatMode(st.mode);\n case \"u\":\n return String(st.uid);\n case \"U\":\n return ctx.kernel.users.nameForUid(st.uid);\n case \"g\":\n return String(st.gid);\n case \"G\":\n return ctx.kernel.users.nameForGid(st.gid);\n case \"i\":\n return String(st.ino);\n case \"h\":\n return String(st.nlink);\n case \"X\":\n return String(Math.floor(st.atimeMs / 1000));\n case \"Y\":\n return String(Math.floor(st.mtimeMs / 1000));\n case \"Z\":\n return String(Math.floor(st.ctimeMs / 1000));\n case \"F\":\n return st.isDirectory() ? \"directory\" : st.isSymbolicLink() ? \"symbolic link\" : \"regular file\";\n case \"%\":\n return \"%\";\n default:\n return \"%\" + ch;\n }\n });\n}\n\nexport const du: Command = defineCommand({\n name: \"du\",\n path: \"/usr/bin/du\",\n summary: \"estimate file space usage\",\n usage: \"du [OPTION]... [FILE]...\",\n async run(ctx) {\n const args = parseArgs(ctx.args, [\n { short: \"h\", long: \"human-readable\" },\n { short: \"s\", long: \"summarize\" },\n { short: \"a\", long: \"all\" },\n { short: \"b\", long: \"bytes\" },\n { short: \"c\", long: \"total\" },\n { short: \"k\" },\n { short: \"d\", long: \"max-depth\", arg: true },\n ]);\n const operands = args.positional.length ? args.positional : [\".\"];\n const maxDepth = args.num(\"max-depth\", args.has(\"summarize\") ? 0 : Infinity)!;\n const asBytes = args.has(\"bytes\");\n\n const render = (value: number) => (args.has(\"human-readable\") ? humanSize(value) : String(asBytes ? value : Math.max(1, Math.ceil(value / 1024))));\n\n let total = 0;\n let status = 0;\n\n const walk = (abs: string, depth: number): number => {\n let st: Stats;\n try {\n st = ctx.vfs.lstat(abs);\n } catch (e) {\n status = ctx.reportError(e, abs);\n return 0;\n }\n if (!st.isDirectory()) {\n if (args.has(\"all\") && depth <= maxDepth) ctx.line(`${render(st.size)}\\t${abs}`);\n return st.size;\n }\n let sum = 4096;\n for (const name of safeReaddir(ctx, abs)) {\n sum += walk(P.join(abs, name), depth + 1);\n }\n if (depth <= maxDepth) ctx.line(`${render(sum)}\\t${abs}`);\n return sum;\n };\n\n for (const operand of operands) {\n total += walk(ctx.path(operand), 0);\n }\n if (args.has(\"total\")) ctx.line(`${render(total)}\\ttotal`);\n return status;\n },\n});\n\nfunction safeReaddir(ctx: ExecContext, abs: string): string[] {\n try {\n return ctx.vfs.readdir(abs, ctx.cred);\n } catch {\n return [];\n }\n}\n\nexport const df: Command = defineCommand({\n name: \"df\",\n path: \"/bin/df\",\n summary: \"report file system disk space usage\",\n usage: \"df [OPTION]... [FILE]...\",\n async run(ctx) {\n const args = parseArgs(ctx.args, [\n { short: \"h\", long: \"human-readable\" },\n { short: \"T\", long: \"print-type\" },\n { short: \"i\", long: \"inodes\" },\n { short: \"a\", long: \"all\" },\n { short: \"k\" },\n ]);\n const human = args.has(\"human-readable\");\n const usage = ctx.vfs.usage(\"/\");\n let mounts = ctx.kernel.mountTable();\n\n // With path operands, report only the filesystem each path lives on —\n // the longest matching mount point wins, as with a real mount table.\n if (args.positional.length > 0) {\n const selected = new Map<string, (typeof mounts)[number]>();\n for (const operand of args.positional) {\n const abs = ctx.path(operand);\n if (!ctx.vfs.lexists(abs)) {\n ctx.warn(`${operand}: No such file or directory`);\n continue;\n }\n const match = mounts\n .filter((m) => P.contains(m.mountpoint, abs))\n .sort((a, b) => b.mountpoint.length - a.mountpoint.length)[0];\n if (match) selected.set(match.mountpoint, match);\n }\n mounts = [...selected.values()];\n }\n\n const header = args.has(\"print-type\")\n ? [\"Filesystem\", \"Type\", human ? \"Size\" : \"1K-blocks\", \"Used\", \"Avail\", \"Use%\", \"Mounted on\"]\n : [\"Filesystem\", human ? \"Size\" : \"1K-blocks\", \"Used\", \"Avail\", \"Use%\", \"Mounted on\"];\n\n const rows: string[][] = [header];\n for (const mount of mounts) {\n if (mount.totalBytes === 0 && !args.has(\"all\")) continue;\n const usedBytes = mount.mountpoint === \"/\" ? usage.bytes : 0;\n const total = mount.totalBytes;\n const avail = Math.max(0, total - usedBytes);\n const pct = total === 0 ? 0 : Math.round((usedBytes / total) * 100);\n const fmt = (v: number) => (human ? humanSize(v) : String(Math.ceil(v / 1024)));\n const row = [mount.device, fmt(total), fmt(usedBytes), fmt(avail), `${pct}%`, mount.mountpoint];\n if (args.has(\"print-type\")) row.splice(1, 0, mount.fstype);\n rows.push(row);\n }\n\n const widths = rows[0]!.map((_, i) => Math.max(...rows.map((r) => (r[i] ?? \"\").length)));\n for (const row of rows) {\n ctx.line(\n row\n .map((cell, i) => (i === 0 || i === row.length - 1 ? cell.padEnd(widths[i]!) : cell.padStart(widths[i]!)))\n .join(\" \")\n .trimEnd(),\n );\n }\n return 0;\n },\n});\n\n// ── tree / file ─────────────────────────────────────────────────────────────\n\nexport const tree: Command = defineCommand({\n name: \"tree\",\n path: \"/usr/bin/tree\",\n summary: \"list contents of directories in a tree-like format\",\n usage: \"tree [OPTION]... [DIRECTORY]\",\n async run(ctx) {\n const args = parseArgs(ctx.args, [\n { short: \"a\" },\n { short: \"d\" },\n { short: \"L\", arg: true },\n { short: \"f\" },\n ]);\n const root = ctx.path(args.positional[0] ?? \".\");\n const maxDepth = args.num(\"L\", Infinity)!;\n let dirs = 0;\n let files = 0;\n\n ctx.line(args.positional[0] ?? \".\");\n const walk = (dir: string, prefix: string, depth: number) => {\n if (depth > maxDepth) return;\n let names: string[];\n try {\n names = ctx.vfs.readdir(dir, ctx.cred);\n } catch {\n return;\n }\n if (!args.has(\"a\")) names = names.filter((n) => !n.startsWith(\".\"));\n const entries = names.map((name) => {\n const abs = P.join(dir, name);\n let isDir = false;\n try {\n isDir = ctx.vfs.lstat(abs).isDirectory();\n } catch {\n /* ignore */\n }\n return { name, abs, isDir };\n });\n const visible = args.has(\"d\") ? entries.filter((e) => e.isDir) : entries;\n visible.forEach((entry, idx) => {\n const last = idx === visible.length - 1;\n ctx.line(`${prefix}${last ? \"└── \" : \"├── \"}${args.has(\"f\") ? entry.abs : entry.name}`);\n if (entry.isDir) {\n dirs++;\n walk(entry.abs, prefix + (last ? \" \" : \"│ \"), depth + 1);\n } else {\n files++;\n }\n });\n };\n walk(root, \"\", 1);\n ctx.line(\"\");\n ctx.line(`${dirs} ${dirs === 1 ? \"directory\" : \"directories\"}${args.has(\"d\") ? \"\" : `, ${files} ${files === 1 ? \"file\" : \"files\"}`}`);\n return 0;\n },\n});\n\nexport const file: Command = defineCommand({\n name: \"file\",\n path: \"/usr/bin/file\",\n summary: \"determine file type\",\n usage: \"file [OPTION]... FILE...\",\n async run(ctx) {\n const args = parseArgs(ctx.args, [{ short: \"b\", long: \"brief\" }, { short: \"i\", long: \"mime\" }]);\n let status = 0;\n for (const operand of args.positional) {\n try {\n const abs = ctx.path(operand);\n const st = ctx.vfs.lstat(abs);\n const description = describeFile(ctx, abs, st, args.has(\"mime\"));\n ctx.line(args.has(\"brief\") ? description : `${operand}: ${description}`);\n } catch {\n ctx.line(`${operand}: cannot open '${operand}' (No such file or directory)`);\n status = 1;\n }\n }\n return status;\n },\n});\n\nfunction describeFile(ctx: ExecContext, abs: string, st: Stats, mime: boolean): string {\n if (st.isDirectory()) return mime ? \"inode/directory\" : \"directory\";\n if (st.isSymbolicLink()) {\n const target = ctx.vfs.readlink(abs, ctx.cred);\n return mime ? \"inode/symlink\" : `symbolic link to ${target}`;\n }\n if (st.isCharacterDevice()) return mime ? \"inode/chardevice\" : \"character special\";\n if (st.size === 0) return mime ? \"inode/x-empty\" : \"empty\";\n\n const bytes = ctx.vfs.readFile(abs, ctx.cred).subarray(0, 512);\n const magic = [...bytes.subarray(0, 4)];\n if (magic[0] === 0x7f && magic[1] === 0x45 && magic[2] === 0x4c && magic[3] === 0x46) {\n return mime ? \"application/x-executable\" : \"ELF 64-bit LSB executable, x86-64\";\n }\n if (magic[0] === 0x1f && magic[1] === 0x8b) return mime ? \"application/gzip\" : \"gzip compressed data\";\n if (magic[0] === 0x50 && magic[1] === 0x4b) return mime ? \"application/zip\" : \"Zip archive data\";\n if (magic[0] === 0x89 && magic[1] === 0x50) return mime ? \"image/png\" : \"PNG image data\";\n\n const text = new TextDecoder().decode(bytes);\n const printable = [...text].every((c) => c === \"\\n\" || c === \"\\t\" || c === \"\\r\" || (c >= \" \" && c <= \"~\") || c.charCodeAt(0) > 127);\n if (!printable) return mime ? \"application/octet-stream\" : \"data\";\n if (text.startsWith(\"#!\")) {\n const interp = text.slice(2, text.indexOf(\"\\n\")).trim();\n return mime ? \"text/x-shellscript\" : `a ${interp} script, ASCII text executable`;\n }\n const ext = P.extname(abs);\n if (ext === \".json\") return mime ? \"application/json\" : \"JSON text data\";\n if (ext === \".js\" || ext === \".mjs\" || ext === \".cjs\") return mime ? \"text/javascript\" : \"JavaScript source, ASCII text\";\n if (ext === \".py\") return mime ? \"text/x-python\" : \"Python script, ASCII text\";\n return mime ? \"text/plain\" : \"ASCII text\";\n}\n\nexport const commands: Command[] = [\n ls,\n cat,\n cp,\n mv,\n rm,\n mkdir,\n rmdir,\n touch,\n ln,\n readlink,\n realpath,\n basename,\n dirname,\n chmod,\n chown,\n chgrp,\n stat,\n du,\n df,\n tree,\n file,\n];\n","/** Shared plumbing for the coreutils: input handling, formatting, sorting. */\n\nimport type { ExecContext } from \"../kernel/command.js\";\nimport { lines as streamLines, toText } from \"../fs/streams.js\";\nimport type { Stats } from \"../fs/stat.js\";\nimport { SysError } from \"../fs/errno.js\";\nimport * as P from \"../fs/path.js\";\n\nconst decoder = new TextDecoder();\n\nexport interface InputSource {\n /** Display name: the operand, or `-` / `(standard input)` for stdin. */\n name: string;\n bytes: Uint8Array;\n}\n\n/**\n * Read every operand as a file, falling back to stdin when there are none or\n * the operand is `-`. Errors are reported and skipped, with `ok` reflecting\n * whether everything could be read — the shape almost every text tool wants.\n */\nexport async function readInputs(\n ctx: ExecContext,\n operands: string[],\n opts: { stdinName?: string } = {},\n): Promise<{ sources: InputSource[]; ok: boolean }> {\n const stdinName = opts.stdinName ?? \"-\";\n if (operands.length === 0) {\n const bytes = await ctx.stdin.readAll();\n return { sources: [{ name: stdinName, bytes }], ok: true };\n }\n\n const sources: InputSource[] = [];\n let ok = true;\n for (const operand of operands) {\n if (operand === \"-\") {\n sources.push({ name: stdinName, bytes: await ctx.stdin.readAll() });\n continue;\n }\n try {\n const abs = ctx.path(operand);\n const st = ctx.vfs.stat(abs, { cred: ctx.cred });\n if (st.isDirectory()) {\n ctx.warn(`${operand}: Is a directory`);\n ok = false;\n continue;\n }\n sources.push({ name: operand, bytes: ctx.vfs.readFile(abs, ctx.cred) });\n } catch (e) {\n ctx.reportError(e, operand);\n ok = false;\n }\n }\n return { sources, ok };\n}\n\n/** Split bytes into lines, remembering whether the input ended with a newline. */\nexport function splitLines(bytes: Uint8Array): { lines: string[]; trailingNewline: boolean } {\n const text = decoder.decode(bytes);\n if (text === \"\") return { lines: [], trailingNewline: true };\n const trailingNewline = text.endsWith(\"\\n\");\n const body = trailingNewline ? text.slice(0, -1) : text;\n return { lines: body.split(\"\\n\"), trailingNewline };\n}\n\n/** Join lines back, restoring the trailing-newline convention. */\nexport function joinLines(lines: string[], trailingNewline = true): string {\n if (lines.length === 0) return \"\";\n return lines.join(\"\\n\") + (trailingNewline ? \"\\n\" : \"\");\n}\n\n/** Stream stdin line by line — for filters that must not buffer everything. */\nexport async function* eachLine(ctx: ExecContext): AsyncGenerator<string> {\n yield* streamLines(ctx.stdin);\n}\n\n// ── formatting ──────────────────────────────────────────────────────────────\n\nconst SI_UNITS = [\"\", \"k\", \"M\", \"G\", \"T\", \"P\", \"E\"];\nconst IEC_UNITS = [\"\", \"K\", \"M\", \"G\", \"T\", \"P\", \"E\"];\n\n/** `--human-readable` sizing, matching coreutils' rounding. */\nexport function humanSize(bytes: number, opts: { si?: boolean } = {}): string {\n const base = opts.si ? 1000 : 1024;\n const units = opts.si ? SI_UNITS : IEC_UNITS;\n if (bytes < base) return String(bytes);\n let value = bytes;\n let unit = 0;\n while (value >= base && unit < units.length - 1) {\n value /= base;\n unit++;\n }\n const rounded = value < 10 ? Math.ceil(value * 10) / 10 : Math.ceil(value);\n return `${value < 10 ? rounded.toFixed(1) : String(Math.round(rounded))}${units[unit]}`;\n}\n\nconst MONTHS = [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"];\n\n/** The date column `ls -l` prints: recent files show a time, older ones a year. */\nexport function lsTime(ms: number, now = Date.now()): string {\n const d = new Date(ms);\n const month = MONTHS[d.getUTCMonth()]!;\n const day = String(d.getUTCDate()).padStart(2, \" \");\n const sixMonths = 15778476000;\n if (Math.abs(now - ms) > sixMonths) {\n return `${month} ${day} ${d.getUTCFullYear()}`;\n }\n const hh = String(d.getUTCHours()).padStart(2, \"0\");\n const mm = String(d.getUTCMinutes()).padStart(2, \"0\");\n return `${month} ${day} ${hh}:${mm}`;\n}\n\n/** Lay names out in columns the way `ls` does when stdout is a terminal. */\nexport function columnize(items: string[], width: number, gap = 2): string[] {\n if (items.length === 0) return [];\n const longest = Math.max(...items.map((i) => displayWidth(i)));\n const columnWidth = longest + gap;\n const columns = Math.max(1, Math.floor(width / columnWidth));\n if (columns === 1) return items.slice();\n const rows = Math.ceil(items.length / columns);\n const out: string[] = [];\n for (let r = 0; r < rows; r++) {\n let line = \"\";\n for (let c = 0; c < columns; c++) {\n const idx = c * rows + r;\n if (idx >= items.length) continue;\n const item = items[idx]!;\n const isLast = (c + 1) * rows + r >= items.length;\n line += isLast ? item : item + \" \".repeat(columnWidth - displayWidth(item));\n }\n out.push(line.replace(/\\s+$/, \"\"));\n }\n return out;\n}\n\n/** Approximate display width, counting East Asian wide characters as two. */\nexport function displayWidth(text: string): number {\n let width = 0;\n for (const ch of text) {\n const code = ch.codePointAt(0)!;\n if (code >= 0x1100 && (code <= 0x115f || (code >= 0x2e80 && code <= 0xa4cf) || (code >= 0xac00 && code <= 0xd7a3) || (code >= 0xf900 && code <= 0xfaff) || (code >= 0xfe30 && code <= 0xfe6f) || (code >= 0xff00 && code <= 0xff60) || (code >= 0xffe0 && code <= 0xffe6))) {\n width += 2;\n } else if (code >= 0x300 && code <= 0x36f) {\n width += 0;\n } else {\n width += 1;\n }\n }\n return width;\n}\n\nexport function terminalWidth(ctx: ExecContext, fallback = 80): number {\n const columns = ctx.stdout.columns ?? Number(ctx.env.COLUMNS);\n return Number.isFinite(columns) && columns! > 0 ? columns! : fallback;\n}\n\n// ── sorting ─────────────────────────────────────────────────────────────────\n\n/** Natural \"version\" ordering, used by `ls -v` and `sort -V`. */\nexport function versionCompare(a: string, b: string): number {\n const split = (s: string) => s.match(/(\\d+|\\D+)/g) ?? [];\n const pa = split(a);\n const pb = split(b);\n for (let i = 0; i < Math.max(pa.length, pb.length); i++) {\n const x = pa[i];\n const y = pb[i];\n if (x === undefined) return -1;\n if (y === undefined) return 1;\n const nx = /^\\d+$/.test(x);\n const ny = /^\\d+$/.test(y);\n if (nx && ny) {\n const diff = Number(x) - Number(y);\n if (diff !== 0) return diff;\n } else if (x !== y) {\n return x < y ? -1 : 1;\n }\n }\n return 0;\n}\n\n// ── filesystem helpers ──────────────────────────────────────────────────────\n\nexport interface Entry {\n name: string;\n path: string;\n stat: Stats;\n /** Present for symlinks. */\n linkTarget?: string;\n}\n\nexport function statEntry(ctx: ExecContext, path: string, follow: boolean): Entry {\n const abs = ctx.path(path);\n const stat = follow ? ctx.vfs.stat(abs, { cred: ctx.cred }) : ctx.vfs.lstat(abs);\n const entry: Entry = { name: P.basename(abs), path: abs, stat };\n if (stat.isSymbolicLink()) {\n try {\n entry.linkTarget = ctx.vfs.readlink(abs, ctx.cred);\n } catch {\n /* dangling */\n }\n }\n return entry;\n}\n\n/** Create parent directories for `path`, as `install -D`/`cp --parents` need. */\nexport function ensureParent(ctx: ExecContext, path: string): void {\n const parent = P.dirname(path);\n if (!ctx.vfs.lexists(parent)) ctx.vfs.mkdir(parent, { recursive: true, cred: ctx.cred, mode: 0o777 });\n}\n\n/** True when `target` is an existing directory — decides `cp a b` semantics. */\nexport function isDirectory(ctx: ExecContext, path: string): boolean {\n try {\n return ctx.vfs.stat(ctx.path(path), { cred: ctx.cred }).isDirectory();\n } catch {\n return false;\n }\n}\n\nexport function assertOperand(ctx: ExecContext, operands: string[], usage: string): void {\n if (operands.length === 0) {\n throw new SysError(\"EINVAL\", ctx.name, undefined);\n }\n void usage;\n}\n\nexport { toText, P as path };\n","/** System information and process utilities: uname, ps, id, date, env, free, … */\n\nimport { defineCommand, type Command } from \"../kernel/command.js\";\nimport { parseArgs } from \"../util/args.js\";\nimport { formatPrintf, decodeEscapes } from \"../util/printf.js\";\nimport { humanSize } from \"./helpers.js\";\nimport { unameInfo, KERNEL_RELEASE } from \"../kernel/uname.js\";\nimport { SIGNALS, SIGNAL_NAMES, normalizeSignal } from \"../kernel/signals.js\";\nimport { formatUmaskSymbolic } from \"../fs/mode.js\";\nimport * as P from \"../fs/path.js\";\n\n// ── trivial ones ────────────────────────────────────────────────────────────\n\nexport const echo: Command = defineCommand({\n name: \"echo\",\n path: \"/bin/echo\",\n summary: \"display a line of text\",\n usage: \"echo [-neE] [STRING]...\",\n run(ctx) {\n let args = ctx.args;\n let newline = true;\n let interpret = false;\n while (args.length > 0 && /^-[neE]+$/.test(args[0]!)) {\n for (const flag of args[0]!.slice(1)) {\n if (flag === \"n\") newline = false;\n else if (flag === \"e\") interpret = true;\n else if (flag === \"E\") interpret = false;\n }\n args = args.slice(1);\n }\n let text = args.join(\" \");\n if (interpret) {\n const decoded = decodeEscapes(text, { stopAtC: true });\n text = decoded.text;\n if (decoded.stopped) newline = false;\n }\n ctx.write(newline ? text + \"\\n\" : text);\n return 0;\n },\n});\n\nexport const printfCmd: Command = defineCommand({\n name: \"printf\",\n path: \"/usr/bin/printf\",\n summary: \"format and print data\",\n usage: \"printf FORMAT [ARGUMENT]...\",\n run(ctx) {\n const format = ctx.args[0];\n if (format === undefined) return ctx.fail(\"usage: printf FORMAT [ARGUMENT]...\", 2);\n try {\n ctx.write(formatPrintf(format, ctx.args.slice(1)));\n return 0;\n } catch (e) {\n return ctx.fail(e instanceof Error ? e.message : String(e));\n }\n },\n});\n\nexport const pwd: Command = defineCommand({\n name: \"pwd\",\n path: \"/bin/pwd\",\n summary: \"print name of current/working directory\",\n run(ctx) {\n ctx.line(ctx.cwd);\n return 0;\n },\n});\n\nexport const trueCmd: Command = defineCommand({\n name: \"true\",\n path: \"/bin/true\",\n summary: \"do nothing, successfully\",\n run: () => 0,\n});\n\nexport const falseCmd: Command = defineCommand({\n name: \"false\",\n path: \"/bin/false\",\n summary: \"do nothing, unsuccessfully\",\n run: () => 1,\n});\n\nexport const sleepCmd: Command = defineCommand({\n name: \"sleep\",\n path: \"/bin/sleep\",\n summary: \"delay for a specified amount of time\",\n usage: \"sleep NUMBER[SUFFIX]...\",\n async run(ctx) {\n if (ctx.args.length === 0) return ctx.fail(\"missing operand\", 1);\n let totalMs = 0;\n for (const arg of ctx.args) {\n const m = /^([0-9]*\\.?[0-9]+)([smhd]?)$/.exec(arg);\n if (!m) return ctx.fail(`invalid time interval '${arg}'`);\n const value = Number(m[1]);\n const multiplier = { \"\": 1000, s: 1000, m: 60_000, h: 3_600_000, d: 86_400_000 }[m[2] ?? \"\"]!;\n totalMs += value * multiplier;\n }\n await new Promise<void>((resolve) => {\n const timer = setTimeout(resolve, totalMs);\n ctx.signal.addEventListener(\"abort\", () => {\n clearTimeout(timer);\n resolve();\n });\n });\n return ctx.signal.aborted ? 130 : 0;\n },\n});\n\nexport const yesCmd: Command = defineCommand({\n name: \"yes\",\n path: \"/usr/bin/yes\",\n summary: \"output a string repeatedly until killed\",\n async run(ctx) {\n const text = (ctx.args.length ? ctx.args.join(\" \") : \"y\") + \"\\n\";\n // Emit in blocks and yield, so a downstream `head` can close the pipe.\n const block = text.repeat(512);\n for (let i = 0; i < 100_000 && !ctx.signal.aborted && !ctx.stdout.closed; i++) {\n ctx.write(block);\n await new Promise((r) => setTimeout(r, 0));\n }\n return 0;\n },\n});\n\nexport const seq: Command = defineCommand({\n name: \"seq\",\n path: \"/usr/bin/seq\",\n summary: \"print a sequence of numbers\",\n usage: \"seq [OPTION]... LAST | FIRST LAST | FIRST INCREMENT LAST\",\n run(ctx) {\n const args = parseArgs(ctx.args, [\n { short: \"s\", long: \"separator\", arg: true },\n { short: \"w\", long: \"equal-width\" },\n { short: \"f\", long: \"format\", arg: true },\n ]);\n const nums = args.positional.map(Number);\n if (nums.length === 0 || nums.some((n) => !Number.isFinite(n))) {\n return ctx.fail(\"invalid floating point argument\", 1);\n }\n let first = 1;\n let increment = 1;\n let last: number;\n if (nums.length === 1) last = nums[0]!;\n else if (nums.length === 2) {\n first = nums[0]!;\n last = nums[1]!;\n } else {\n first = nums[0]!;\n increment = nums[1]!;\n last = nums[2]!;\n }\n if (increment === 0) return ctx.fail(\"zero increment\", 1);\n\n const separator = args.str(\"separator\", \"\\n\")!;\n const format = args.str(\"format\");\n const values: number[] = [];\n if (increment > 0) for (let v = first; v <= last + 1e-9; v += increment) values.push(v);\n else for (let v = first; v >= last - 1e-9; v += increment) values.push(v);\n\n const rendered = values.map((v) => {\n const text = Number.isInteger(v) ? String(v) : String(Number(v.toFixed(10)));\n return format ? formatPrintf(format, [String(v)]) : text;\n });\n const width = args.has(\"equal-width\") ? Math.max(0, ...rendered.map((r) => r.length)) : 0;\n const out = rendered.map((r) => (width ? r.padStart(width, \"0\") : r));\n if (out.length) ctx.write(out.join(separator) + \"\\n\");\n return 0;\n },\n});\n\n// ── identity ────────────────────────────────────────────────────────────────\n\nexport const uname: Command = defineCommand({\n name: \"uname\",\n path: \"/bin/uname\",\n summary: \"print system information\",\n usage: \"uname [OPTION]...\",\n run(ctx) {\n const args = parseArgs(ctx.args, [\n { short: \"a\", long: \"all\" },\n { short: \"s\", long: \"kernel-name\" },\n { short: \"n\", long: \"nodename\" },\n { short: \"r\", long: \"kernel-release\" },\n { short: \"v\", long: \"kernel-version\" },\n { short: \"m\", long: \"machine\" },\n { short: \"p\", long: \"processor\" },\n { short: \"i\", long: \"hardware-platform\" },\n { short: \"o\", long: \"operating-system\" },\n ]);\n const info = unameInfo(ctx.kernel.hostname);\n if (args.has(\"all\")) {\n ctx.line(`${info.sysname} ${info.nodename} ${info.release} ${info.version} ${info.machine} ${info.operatingSystem}`);\n return 0;\n }\n const parts: string[] = [];\n if (args.has(\"kernel-name\")) parts.push(info.sysname);\n if (args.has(\"nodename\")) parts.push(info.nodename);\n if (args.has(\"kernel-release\")) parts.push(info.release);\n if (args.has(\"kernel-version\")) parts.push(info.version);\n if (args.has(\"machine\")) parts.push(info.machine);\n if (args.has(\"processor\")) parts.push(info.processor);\n if (args.has(\"hardware-platform\")) parts.push(info.hardwarePlatform);\n if (args.has(\"operating-system\")) parts.push(info.operatingSystem);\n ctx.line(parts.length ? parts.join(\" \") : info.sysname);\n return 0;\n },\n});\n\nexport const hostnameCmd: Command = defineCommand({\n name: \"hostname\",\n path: \"/bin/hostname\",\n summary: \"show or set the system's host name\",\n run(ctx) {\n const args = parseArgs(ctx.args, [\n { short: \"f\", long: \"fqdn\" },\n { short: \"i\", long: \"ip-address\" },\n { short: \"s\", long: \"short\" },\n ]);\n if (args.has(\"ip-address\")) {\n ctx.line(ctx.kernel.net.interface(\"eth0\")?.ipv4 ?? \"127.0.0.1\");\n return 0;\n }\n if (args.positional.length) {\n if (ctx.cred.uid !== 0) return ctx.fail(\"you must be root to change the host name\");\n ctx.kernel.hostname = args.positional[0]!;\n return 0;\n }\n const name = ctx.kernel.hostname;\n ctx.line(args.has(\"short\") ? name.split(\".\")[0]! : name);\n return 0;\n },\n});\n\nexport const whoami: Command = defineCommand({\n name: \"whoami\",\n path: \"/usr/bin/whoami\",\n summary: \"print effective user name\",\n run(ctx) {\n ctx.line(ctx.kernel.users.nameForUid(ctx.cred.uid));\n return 0;\n },\n});\n\nexport const idCmd: Command = defineCommand({\n name: \"id\",\n path: \"/usr/bin/id\",\n summary: \"print real and effective user and group IDs\",\n usage: \"id [OPTION]... [USER]\",\n run(ctx) {\n const args = parseArgs(ctx.args, [\n { short: \"u\", long: \"user\" },\n { short: \"g\", long: \"group\" },\n { short: \"G\", long: \"groups\" },\n { short: \"n\", long: \"name\" },\n { short: \"r\", long: \"real\" },\n ]);\n const users = ctx.kernel.users;\n const target = args.positional[0];\n let uid = ctx.cred.uid;\n let gid = ctx.cred.gid;\n let groups = ctx.cred.groups;\n\n if (target !== undefined) {\n const user = users.userByName(target) ?? users.userByUid(Number(target));\n if (!user) return ctx.fail(`'${target}': no such user`);\n uid = user.uid;\n gid = user.gid;\n groups = users.groupsFor(user.name);\n }\n\n const name = args.has(\"name\");\n if (args.has(\"user\")) {\n ctx.line(name ? users.nameForUid(uid) : String(uid));\n return 0;\n }\n if (args.has(\"group\")) {\n ctx.line(name ? users.nameForGid(gid) : String(gid));\n return 0;\n }\n if (args.has(\"groups\")) {\n ctx.line(groups.map((g) => (name ? users.nameForGid(g) : String(g))).join(\" \"));\n return 0;\n }\n const groupText = groups.map((g) => `${g}(${users.nameForGid(g)})`).join(\",\");\n ctx.line(`uid=${uid}(${users.nameForUid(uid)}) gid=${gid}(${users.nameForGid(gid)}) groups=${groupText}`);\n return 0;\n },\n});\n\nexport const groupsCmd: Command = defineCommand({\n name: \"groups\",\n path: \"/usr/bin/groups\",\n summary: \"print the groups a user is in\",\n run(ctx) {\n const users = ctx.kernel.users;\n const target = ctx.args[0] ?? users.nameForUid(ctx.cred.uid);\n const gids = users.groupsFor(target);\n ctx.line(gids.map((g) => users.nameForGid(g)).join(\" \"));\n return 0;\n },\n});\n\nexport const whoCmd: Command = defineCommand({\n name: \"who\",\n path: \"/usr/bin/who\",\n summary: \"show who is logged on\",\n run(ctx) {\n const name = ctx.kernel.users.nameForUid(ctx.cred.uid);\n const when = new Date(ctx.kernel.bootTime);\n const stamp = `${when.getUTCFullYear()}-${String(when.getUTCMonth() + 1).padStart(2, \"0\")}-${String(when.getUTCDate()).padStart(2, \"0\")} ${String(when.getUTCHours()).padStart(2, \"0\")}:${String(when.getUTCMinutes()).padStart(2, \"0\")}`;\n ctx.line(`${name.padEnd(8)} pts/0 ${stamp}`);\n return 0;\n },\n});\n\nexport const wCmd: Command = defineCommand({\n name: \"w\",\n path: \"/usr/bin/w\",\n summary: \"show who is logged on and what they are doing\",\n run(ctx) {\n const uptimeSeconds = Math.floor(ctx.kernel.uptimeMs / 1000);\n ctx.line(\n ` ${clockTime(ctx.kernel.now())} up ${formatUptime(uptimeSeconds)}, 1 user, load average: 0.00, 0.01, 0.05`,\n );\n ctx.line(\"USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT\");\n const name = ctx.kernel.users.nameForUid(ctx.cred.uid);\n ctx.line(`${name.padEnd(8)} pts/0 - ${clockTime(ctx.kernel.bootTime)} 0.00s 0.01s 0.00s w`);\n return 0;\n },\n});\n\n// ── environment ─────────────────────────────────────────────────────────────\n\nexport const env: Command = defineCommand({\n name: \"env\",\n path: \"/usr/bin/env\",\n summary: \"run a program in a modified environment\",\n usage: \"env [OPTION]... [NAME=VALUE]... [COMMAND [ARG]...]\",\n async run(ctx) {\n const args = [...ctx.args];\n let ignoreEnvironment = false;\n let chdir: string | undefined;\n const unsetNames: string[] = [];\n\n let i = 0;\n for (; i < args.length; i++) {\n const arg = args[i]!;\n if (arg === \"-i\" || arg === \"--ignore-environment\") {\n ignoreEnvironment = true;\n continue;\n }\n if (arg === \"-u\" || arg === \"--unset\") {\n const name = args[++i];\n if (name) unsetNames.push(name);\n continue;\n }\n if (arg === \"-C\" || arg === \"--chdir\") {\n chdir = args[++i];\n continue;\n }\n if (arg === \"-0\" || arg === \"--null\") continue;\n if (arg === \"--\") {\n i++;\n break;\n }\n break;\n }\n\n const assignments: Record<string, string> = {};\n for (; i < args.length; i++) {\n const m = /^([A-Za-z_][A-Za-z0-9_]*)=([\\s\\S]*)$/.exec(args[i]!);\n if (!m) break;\n assignments[m[1]!] = m[2]!;\n }\n\n const nextEnv: Record<string, string> = ignoreEnvironment ? {} : { ...ctx.env };\n for (const name of unsetNames) delete nextEnv[name];\n Object.assign(nextEnv, assignments);\n\n const command = args.slice(i);\n if (command.length === 0) {\n for (const [key, value] of Object.entries(nextEnv)) ctx.line(`${key}=${value}`);\n return 0;\n }\n\n return await ctx.kernel\n .spawn(command, {\n cwd: chdir ? ctx.path(chdir) : ctx.cwd,\n env: nextEnv,\n cred: ctx.cred,\n ppid: ctx.proc.pid,\n stdin: ctx.stdin,\n stdout: ctx.stdout,\n stderr: ctx.stderr,\n })\n .wait();\n },\n});\n\nexport const printenv: Command = defineCommand({\n name: \"printenv\",\n path: \"/usr/bin/printenv\",\n summary: \"print all or part of environment\",\n run(ctx) {\n if (ctx.args.length === 0) {\n for (const [key, value] of Object.entries(ctx.env)) ctx.line(`${key}=${value}`);\n return 0;\n }\n let status = 0;\n for (const name of ctx.args) {\n const value = ctx.env[name];\n if (value === undefined) status = 1;\n else ctx.line(value);\n }\n return status;\n },\n});\n\nexport const which: Command = defineCommand({\n name: \"which\",\n path: \"/usr/bin/which\",\n summary: \"locate a command\",\n usage: \"which [-a] COMMAND...\",\n run(ctx) {\n const args = parseArgs(ctx.args, [{ short: \"a\" }, { short: \"s\" }]);\n let status = 0;\n for (const name of args.positional) {\n const path = ctx.kernel.which(name, ctx.cwd, ctx.env, ctx.cred);\n if (path) {\n if (!args.has(\"s\")) ctx.line(path);\n } else {\n status = 1;\n }\n }\n return status;\n },\n});\n\nexport const nproc: Command = defineCommand({\n name: \"nproc\",\n path: \"/usr/bin/nproc\",\n summary: \"print the number of processing units available\",\n run(ctx) {\n ctx.line(String(ctx.kernel.cpus));\n return 0;\n },\n});\n\n// ── time ────────────────────────────────────────────────────────────────────\n\nconst WEEKDAYS = [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"];\nconst MONTHS = [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"];\n\nexport const date: Command = defineCommand({\n name: \"date\",\n path: \"/bin/date\",\n summary: \"print or set the system date and time\",\n usage: \"date [OPTION]... [+FORMAT]\",\n run(ctx) {\n const args = parseArgs(ctx.args, [\n { short: \"u\", long: \"utc\" },\n { short: \"d\", long: \"date\", arg: true },\n { short: \"r\", long: \"reference\", arg: true },\n { short: \"I\", long: \"iso-8601\", arg: false },\n { short: \"R\", long: \"rfc-email\" },\n { long: \"rfc-3339\", arg: true },\n ]);\n\n let ms = ctx.kernel.now();\n const spec = args.str(\"date\");\n if (spec) {\n if (/^@\\d+$/.test(spec)) ms = Number(spec.slice(1)) * 1000;\n else {\n const parsed = Date.parse(spec);\n if (Number.isFinite(parsed)) ms = parsed;\n else return ctx.fail(`invalid date '${spec}'`);\n }\n }\n const reference = args.str(\"reference\");\n if (reference) {\n try {\n ms = ctx.vfs.stat(ctx.path(reference), { cred: ctx.cred }).mtimeMs;\n } catch (e) {\n return ctx.reportError(e, reference);\n }\n }\n\n const d = new Date(ms);\n if (args.has(\"iso-8601\")) {\n ctx.line(d.toISOString().slice(0, 10));\n return 0;\n }\n if (args.has(\"rfc-email\")) {\n ctx.line(d.toUTCString().replace(\"GMT\", \"+0000\"));\n return 0;\n }\n if (args.has(\"rfc-3339\")) {\n ctx.line(d.toISOString().replace(\"T\", \" \").replace(/\\.\\d+Z$/, \"+00:00\"));\n return 0;\n }\n\n const formatArg = args.positional.find((a) => a.startsWith(\"+\"));\n if (formatArg) {\n ctx.line(strftime(formatArg.slice(1), d));\n return 0;\n }\n ctx.line(strftime(\"%a %b %e %H:%M:%S %Z %Y\", d));\n return 0;\n },\n});\n\nfunction strftime(format: string, d: Date): string {\n const pad = (n: number, w = 2, c = \"0\") => String(n).padStart(w, c);\n return format.replace(/%([-_0^#]?)(\\d*)([a-zA-Z%])/g, (_, flag: string, width: string, ch: string) => {\n const value = (() => {\n switch (ch) {\n case \"Y\":\n return String(d.getUTCFullYear());\n case \"y\":\n return pad(d.getUTCFullYear() % 100);\n case \"m\":\n return pad(d.getUTCMonth() + 1);\n case \"d\":\n return pad(d.getUTCDate());\n case \"e\":\n return String(d.getUTCDate()).padStart(2, \" \");\n case \"H\":\n return pad(d.getUTCHours());\n case \"I\":\n return pad(d.getUTCHours() % 12 || 12);\n case \"M\":\n return pad(d.getUTCMinutes());\n case \"S\":\n return pad(d.getUTCSeconds());\n case \"N\":\n return pad(d.getUTCMilliseconds() * 1_000_000, 9);\n case \"j\":\n return pad(Math.floor((d.getTime() - Date.UTC(d.getUTCFullYear(), 0, 0)) / 86400000), 3);\n case \"a\":\n return WEEKDAYS[d.getUTCDay()]!;\n case \"A\":\n return [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"][d.getUTCDay()]!;\n case \"b\":\n case \"h\":\n return MONTHS[d.getUTCMonth()]!;\n case \"B\":\n return [\n \"January\", \"February\", \"March\", \"April\", \"May\", \"June\",\n \"July\", \"August\", \"September\", \"October\", \"November\", \"December\",\n ][d.getUTCMonth()]!;\n case \"p\":\n return d.getUTCHours() < 12 ? \"AM\" : \"PM\";\n case \"Z\":\n return \"UTC\";\n case \"z\":\n return \"+0000\";\n case \"s\":\n return String(Math.floor(d.getTime() / 1000));\n case \"F\":\n return d.toISOString().slice(0, 10);\n case \"T\":\n return d.toISOString().slice(11, 19);\n case \"D\":\n return `${pad(d.getUTCMonth() + 1)}/${pad(d.getUTCDate())}/${pad(d.getUTCFullYear() % 100)}`;\n case \"R\":\n return `${pad(d.getUTCHours())}:${pad(d.getUTCMinutes())}`;\n case \"c\":\n return strftime(\"%a %b %e %H:%M:%S %Y\", d);\n case \"n\":\n return \"\\n\";\n case \"t\":\n return \"\\t\";\n case \"%\":\n return \"%\";\n default:\n return \"%\" + ch;\n }\n })();\n if (flag === \"-\") return value.replace(/^0+(?=\\d)/, \"\");\n if (flag === \"_\") return value.replace(/^0+(?=\\d)/, (m) => \" \".repeat(m.length));\n if (width) return value.padStart(Number(width), \"0\");\n return value;\n });\n}\n\nfunction clockTime(ms: number): string {\n const d = new Date(ms);\n return `${String(d.getUTCHours()).padStart(2, \"0\")}:${String(d.getUTCMinutes()).padStart(2, \"0\")}:${String(d.getUTCSeconds()).padStart(2, \"0\")}`;\n}\n\nfunction formatUptime(seconds: number): string {\n const days = Math.floor(seconds / 86400);\n const hours = Math.floor((seconds % 86400) / 3600);\n const minutes = Math.floor((seconds % 3600) / 60);\n if (days > 0) return `${days} day${days === 1 ? \"\" : \"s\"}, ${hours}:${String(minutes).padStart(2, \"0\")}`;\n if (hours > 0) return `${hours}:${String(minutes).padStart(2, \"0\")}`;\n return `${minutes} min`;\n}\n\nexport const uptimeCmd: Command = defineCommand({\n name: \"uptime\",\n path: \"/usr/bin/uptime\",\n summary: \"tell how long the system has been running\",\n run(ctx) {\n const seconds = Math.floor(ctx.kernel.uptimeMs / 1000);\n if (ctx.args.includes(\"-p\")) {\n ctx.line(`up ${formatUptime(seconds)}`);\n return 0;\n }\n if (ctx.args.includes(\"-s\")) {\n ctx.line(new Date(ctx.kernel.bootTime).toISOString().replace(\"T\", \" \").slice(0, 19));\n return 0;\n }\n ctx.line(` ${clockTime(ctx.kernel.now())} up ${formatUptime(seconds)}, 1 user, load average: 0.00, 0.01, 0.05`);\n return 0;\n },\n});\n\n// ── processes ───────────────────────────────────────────────────────────────\n\nexport const ps: Command = defineCommand({\n name: \"ps\",\n path: \"/bin/ps\",\n summary: \"report a snapshot of the current processes\",\n usage: \"ps [OPTION]...\",\n run(ctx) {\n const flags = ctx.args.join(\"\");\n const showAll = flags.includes(\"a\") || flags.includes(\"e\") || flags.includes(\"A\") || flags.includes(\"x\");\n const longFormat = flags.includes(\"u\") || flags.includes(\"f\") || flags.includes(\"l\");\n\n const procs = ctx.kernel.procs.list().filter((p) => showAll || p.cred.uid === ctx.cred.uid);\n\n if (longFormat) {\n ctx.line(\"USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND\");\n for (const proc of procs) {\n const user = ctx.kernel.users.nameForUid(proc.cred.uid);\n const rss = 2048 + proc.cmdline.length * 8;\n ctx.line(\n [\n user.padEnd(9),\n String(proc.pid).padStart(5),\n \" 0.0\",\n \" 0.1\",\n String(rss * 3).padStart(7),\n String(rss).padStart(5),\n (proc.tty ?? \"?\").padEnd(8),\n (proc.state + (proc.pid === 1 ? \"s\" : \"\")).padEnd(4),\n startTime(proc.startTime),\n \" 0:00\",\n proc.cmdline,\n ].join(\" \"),\n );\n }\n return 0;\n }\n\n ctx.line(\" PID TTY TIME CMD\");\n for (const proc of procs) {\n ctx.line(`${String(proc.pid).padStart(7)} ${(proc.tty ?? \"?\").padEnd(8)} 00:00:00 ${proc.comm}`);\n }\n return 0;\n },\n});\n\nfunction startTime(ms: number): string {\n const d = new Date(ms);\n return `${String(d.getUTCHours()).padStart(2, \"0\")}:${String(d.getUTCMinutes()).padStart(2, \"0\")}`;\n}\n\nexport const killCmd: Command = defineCommand({\n name: \"kill\",\n path: \"/bin/kill\",\n summary: \"send a signal to a process\",\n usage: \"kill [-s SIGNAL | -SIGNAL] PID...\",\n run(ctx) {\n const args = ctx.args;\n if (args.length === 0) return ctx.fail(\"usage: kill [-s sigspec | -n signum | -sigspec] pid\", 2);\n\n if (args[0] === \"-l\") {\n const entries = Object.entries(SIGNALS).sort((a, b) => a[1] - b[1]);\n let line = \"\";\n entries.forEach(([name, num], idx) => {\n line += `${String(num).padStart(2)}) ${name.padEnd(12)}`;\n if ((idx + 1) % 4 === 0) {\n ctx.line(line.trimEnd());\n line = \"\";\n }\n });\n if (line) ctx.line(line.trimEnd());\n return 0;\n }\n\n let signal = \"SIGTERM\";\n let i = 0;\n if (args[0]!.startsWith(\"-\")) {\n const spec = args[0]!.slice(1);\n if (spec === \"s\" || spec === \"n\") {\n const named = normalizeSignal(args[1] ?? \"\");\n if (!named) return ctx.fail(`${args[1]}: invalid signal specification`);\n signal = named;\n i = 2;\n } else {\n const named = normalizeSignal(spec);\n if (!named) return ctx.fail(`${args[0]}: invalid signal specification`);\n signal = named;\n i = 1;\n }\n }\n\n let status = 0;\n for (const target of args.slice(i)) {\n const pid = Number(target);\n if (!Number.isFinite(pid)) {\n ctx.warn(`${target}: arguments must be process or job IDs`);\n status = 1;\n continue;\n }\n if (ctx.kernel.procs.signal(pid, signal) === 0) {\n ctx.warn(`(${pid}) - No such process`);\n status = 1;\n }\n }\n return status;\n },\n});\n\nexport const killall: Command = defineCommand({\n name: \"killall\",\n path: \"/usr/bin/killall\",\n summary: \"kill processes by name\",\n run(ctx) {\n const args = ctx.args.filter((a) => !a.startsWith(\"-\"));\n const signalArg = ctx.args.find((a) => a.startsWith(\"-\"));\n const signal = signalArg ? (normalizeSignal(signalArg.slice(1)) ?? \"SIGTERM\") : \"SIGTERM\";\n let status = 0;\n for (const name of args) {\n const matches = ctx.kernel.procs.list({ comm: name });\n if (matches.length === 0) {\n ctx.warn(`${name}: no process found`);\n status = 1;\n continue;\n }\n for (const proc of matches) proc.deliver(signal);\n }\n return status;\n },\n});\n\nexport const pgrep: Command = defineCommand({\n name: \"pgrep\",\n path: \"/usr/bin/pgrep\",\n summary: \"look up processes by name\",\n run(ctx) {\n const args = parseArgs(ctx.args, [{ short: \"l\" }, { short: \"f\" }, { short: \"a\" }]);\n const pattern = args.positional[0];\n if (pattern === undefined) return ctx.fail(\"no matching criteria specified\", 2);\n const re = new RegExp(pattern);\n const matches = ctx.kernel.procs.list().filter((p) => re.test(args.has(\"f\") ? p.cmdline : p.comm));\n for (const proc of matches) {\n if (args.has(\"a\")) ctx.line(`${proc.pid} ${proc.cmdline}`);\n else if (args.has(\"l\")) ctx.line(`${proc.pid} ${proc.comm}`);\n else ctx.line(String(proc.pid));\n }\n return matches.length ? 0 : 1;\n },\n});\n\nexport const top: Command = defineCommand({\n name: \"top\",\n path: \"/usr/bin/top\",\n summary: \"display system processes (snapshot)\",\n run(ctx) {\n const seconds = Math.floor(ctx.kernel.uptimeMs / 1000);\n const procs = ctx.kernel.procs.list();\n const memTotal = Math.floor(ctx.kernel.memoryBytes / 1024);\n const used = Math.floor(ctx.vfs.usage(\"/\").bytes / 1024) + 98304;\n\n ctx.line(`top - ${clockTime(ctx.kernel.now())} up ${formatUptime(seconds)}, 1 user, load average: 0.00, 0.01, 0.05`);\n ctx.line(`Tasks: ${String(procs.length).padStart(3)} total, 1 running, ${String(procs.length - 1).padStart(3)} sleeping, 0 stopped, 0 zombie`);\n ctx.line(`%Cpu(s): 0.7 us, 0.3 sy, 0.0 ni, 99.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st`);\n ctx.line(`MiB Mem : ${(memTotal / 1024).toFixed(1)} total, ${((memTotal - used) / 1024).toFixed(1)} free, ${(used / 1024).toFixed(1)} used`);\n ctx.line(`MiB Swap: 0.0 total, 0.0 free, 0.0 used.`);\n ctx.line(\"\");\n ctx.line(\" PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND\");\n for (const proc of procs.slice(0, 20)) {\n const rss = 2048 + proc.cmdline.length * 8;\n ctx.line(\n [\n String(proc.pid).padStart(7),\n ctx.kernel.users.nameForUid(proc.cred.uid).padEnd(9),\n \"20\",\n \" 0\",\n String(rss * 3).padStart(7),\n String(rss).padStart(6),\n String(Math.floor(rss / 2)).padStart(6),\n proc.state,\n \" 0.0\",\n \" 0.1\",\n \" 0:00.0\",\n proc.comm,\n ].join(\" \"),\n );\n }\n return 0;\n },\n});\n\nexport const free: Command = defineCommand({\n name: \"free\",\n path: \"/usr/bin/free\",\n summary: \"display amount of free and used memory\",\n run(ctx) {\n const args = parseArgs(ctx.args, [\n { short: \"h\", long: \"human\" },\n { short: \"m\", long: \"mebi\" },\n { short: \"g\", long: \"gibi\" },\n { short: \"b\", long: \"bytes\" },\n { short: \"k\", long: \"kibi\" },\n ]);\n const total = ctx.kernel.memoryBytes;\n const used = ctx.vfs.usage(\"/\").bytes + 96 * 1024 * 1024;\n const free = Math.max(0, total - used);\n const buffers = 16 * 1024 * 1024;\n\n const scale = args.has(\"human\")\n ? (v: number) => humanSize(v).padStart(6)\n : args.has(\"bytes\")\n ? (v: number) => String(v).padStart(11)\n : args.has(\"gibi\")\n ? (v: number) => String(Math.floor(v / 1024 ** 3)).padStart(11)\n : args.has(\"mebi\")\n ? (v: number) => String(Math.floor(v / 1024 ** 2)).padStart(11)\n : (v: number) => String(Math.floor(v / 1024)).padStart(11);\n\n ctx.line(\n ` ${\"total\".padStart(args.has(\"human\") ? 6 : 11)} ${\"used\".padStart(args.has(\"human\") ? 6 : 11)} ${\"free\".padStart(args.has(\"human\") ? 6 : 11)} ${\"shared\".padStart(args.has(\"human\") ? 6 : 11)} ${\"buff/cache\".padStart(args.has(\"human\") ? 6 : 11)} ${\"available\".padStart(args.has(\"human\") ? 6 : 11)}`,\n );\n ctx.line(`Mem: ${scale(total)} ${scale(used)} ${scale(free)} ${scale(0)} ${scale(buffers)} ${scale(free + buffers)}`);\n ctx.line(`Swap: ${scale(0)} ${scale(0)} ${scale(0)}`);\n return 0;\n },\n});\n\nexport const dmesg: Command = defineCommand({\n name: \"dmesg\",\n path: \"/bin/dmesg\",\n summary: \"print the kernel ring buffer\",\n run(ctx) {\n const lines = [\n `[ 0.000000] Linux version ${KERNEL_RELEASE} (sandboxedjs@nodepod)`,\n \"[ 0.000000] Command line: BOOT_IMAGE=/boot/sandboxedjs root=/dev/vda1 ro quiet\",\n `[ 0.004000] Memory: ${Math.floor(ctx.kernel.memoryBytes / 1024)}K available`,\n `[ 0.008000] smp: Brought up 1 node, ${ctx.kernel.cpus} CPUs`,\n \"[ 0.120000] devtmpfs: mounted\",\n \"[ 0.240000] EXT4-fs (vda1): mounted filesystem with ordered data mode\",\n \"[ 0.310000] Freeing unused kernel image memory\",\n `[ 0.400000] sandboxedjs: userland ready (${ctx.kernel.commands.names().length} commands)`,\n ];\n for (const line of lines) ctx.line(line);\n return 0;\n },\n});\n\nexport const mount: Command = defineCommand({\n name: \"mount\",\n path: \"/bin/mount\",\n summary: \"show mounted filesystems\",\n run(ctx) {\n for (const m of ctx.kernel.mountTable()) {\n ctx.line(`${m.device} on ${m.mountpoint} type ${m.fstype} (${m.options})`);\n }\n return 0;\n },\n});\n\nexport const umountCmd: Command = defineCommand({\n name: \"umount\",\n path: \"/bin/umount\",\n summary: \"unmount filesystems\",\n run(ctx) {\n if (ctx.cred.uid !== 0) return ctx.fail(\"only root can unmount\");\n let status = 0;\n for (const target of ctx.args.filter((a) => !a.startsWith(\"-\"))) {\n if (!ctx.kernel.removeMount(ctx.path(target))) {\n ctx.warn(`${target}: not mounted`);\n status = 1;\n }\n }\n return status;\n },\n});\n\nexport const clear: Command = defineCommand({\n name: \"clear\",\n path: \"/usr/bin/clear\",\n summary: \"clear the terminal screen\",\n run(ctx) {\n ctx.write(\"\\x1b[H\\x1b[2J\\x1b[3J\");\n return 0;\n },\n});\n\nexport const sync: Command = defineCommand({\n name: \"sync\",\n path: \"/bin/sync\",\n summary: \"flush filesystem buffers\",\n run: () => 0,\n});\n\nexport const commands: Command[] = [\n echo,\n printfCmd,\n pwd,\n trueCmd,\n falseCmd,\n sleepCmd,\n yesCmd,\n seq,\n uname,\n hostnameCmd,\n whoami,\n idCmd,\n groupsCmd,\n whoCmd,\n wCmd,\n env,\n printenv,\n which,\n nproc,\n date,\n uptimeCmd,\n ps,\n killCmd,\n killall,\n pgrep,\n top,\n free,\n dmesg,\n mount,\n umountCmd,\n clear,\n sync,\n];\n\nexport { formatUptime, strftime, SIGNAL_NAMES, formatUmaskSymbolic, P };\n","/**\n * `sed` — a real stream editor, not a `s///` wrapper.\n *\n * Supports addresses (line numbers, `$`, `/re/`, ranges, `first~step`,\n * `addr,+N`), negation with `!`, blocks with `{}`, and the commands\n * `s y p P d D a i c r w n N h H g G x q Q = l b t T :` plus `-n`, `-e`, `-f`,\n * `-i`, `-E`/`-r` and `-s`.\n */\n\nimport type { Command, ExecContext } from \"../kernel/command.js\";\nimport { parseArgs } from \"../util/args.js\";\nimport { readInputs, splitLines, joinLines } from \"./helpers.js\";\n\ninterface Address {\n kind: \"line\" | \"last\" | \"regex\" | \"step\" | \"zero\";\n line?: number;\n step?: number;\n regex?: RegExp;\n}\n\ninterface Range {\n start?: Address;\n end?: Address;\n /** `addr,+N` */\n relativeEnd?: number;\n /** `addr,~N` */\n multipleEnd?: number;\n negated: boolean;\n /** Runtime state for a two-address range. */\n active?: boolean;\n activeUntilLine?: number;\n}\n\ntype SedCommand =\n | { type: \"s\"; range: Range; regex: RegExp; replacement: string; flags: string; writeFile?: string }\n | { type: \"y\"; range: Range; from: string[]; to: string[] }\n | { type: \"p\" | \"P\" | \"d\" | \"D\" | \"n\" | \"N\" | \"h\" | \"H\" | \"g\" | \"G\" | \"x\" | \"=\" | \"l\" | \"F\"; range: Range }\n | { type: \"a\" | \"i\" | \"c\"; range: Range; text: string }\n | { type: \"q\" | \"Q\"; range: Range; exitCode: number }\n | { type: \"r\" | \"R\" | \"w\" | \"W\"; range: Range; file: string }\n | { type: \"b\" | \"t\" | \"T\"; range: Range; label: string }\n | { type: \":\"; range: Range; label: string }\n | { type: \"{\"; range: Range; body: SedCommand[] }\n | { type: \"#\"; range: Range };\n\nclass SedParseError extends Error {}\n\nclass ScriptParser {\n private i = 0;\n\n constructor(\n private readonly src: string,\n private readonly extended: boolean,\n ) {}\n\n parse(): SedCommand[] {\n return this.parseBlock(false);\n }\n\n private parseBlock(inBrace: boolean): SedCommand[] {\n const out: SedCommand[] = [];\n for (;;) {\n this.skipSeparators();\n if (this.i >= this.src.length) break;\n if (this.src[this.i] === \"}\") {\n if (inBrace) {\n this.i++;\n return out;\n }\n throw new SedParseError(\"unexpected `}'\");\n }\n out.push(this.parseCommand());\n }\n if (inBrace) throw new SedParseError(\"unexpected `,' or unmatched `{'\");\n return out;\n }\n\n private skipSeparators(): void {\n while (this.i < this.src.length && /[\\s;]/.test(this.src[this.i]!)) this.i++;\n }\n\n private skipBlanks(): void {\n while (this.i < this.src.length && /[ \\t]/.test(this.src[this.i]!)) this.i++;\n }\n\n private parseCommand(): SedCommand {\n const range = this.parseRange();\n this.skipBlanks();\n const ch = this.src[this.i];\n if (ch === undefined) throw new SedParseError(\"missing command\");\n this.i++;\n\n switch (ch) {\n case \"#\": {\n while (this.i < this.src.length && this.src[this.i] !== \"\\n\") this.i++;\n return { type: \"#\", range };\n }\n case \"{\":\n return { type: \"{\", range, body: this.parseBlock(true) };\n case \"s\":\n return this.parseSubstitute(range);\n case \"y\":\n return this.parseTransliterate(range);\n case \"p\":\n case \"P\":\n case \"d\":\n case \"D\":\n case \"n\":\n case \"N\":\n case \"h\":\n case \"H\":\n case \"g\":\n case \"G\":\n case \"x\":\n case \"=\":\n case \"l\":\n case \"F\":\n return { type: ch, range };\n case \"a\":\n case \"i\":\n case \"c\":\n return { type: ch, range, text: this.parseText() };\n case \"q\":\n case \"Q\": {\n this.skipBlanks();\n const digits = /^\\d+/.exec(this.src.slice(this.i));\n if (digits) this.i += digits[0].length;\n return { type: ch, range, exitCode: digits ? Number(digits[0]) : 0 };\n }\n case \"r\":\n case \"R\":\n case \"w\":\n case \"W\":\n return { type: ch, range, file: this.parseUntilEol().trim() };\n case \"b\":\n case \"t\":\n case \"T\":\n return { type: ch, range, label: this.parseUntilEol().trim() };\n case \":\":\n return { type: \":\", range, label: this.parseUntilEol().trim() };\n default:\n throw new SedParseError(`unknown command: \\`${ch}'`);\n }\n }\n\n private parseUntilEol(): string {\n let out = \"\";\n while (this.i < this.src.length && this.src[this.i] !== \"\\n\" && this.src[this.i] !== \";\" && this.src[this.i] !== \"}\") {\n out += this.src[this.i++];\n }\n return out;\n }\n\n private parseText(): string {\n // `a text`, `a\\` + newline + text, or `a\\text`.\n this.skipBlanks();\n if (this.src[this.i] === \"\\\\\") {\n this.i++;\n if (this.src[this.i] === \"\\n\") this.i++;\n }\n let out = \"\";\n while (this.i < this.src.length) {\n const c = this.src[this.i]!;\n if (c === \"\\\\\" && this.src[this.i + 1] === \"\\n\") {\n out += \"\\n\";\n this.i += 2;\n continue;\n }\n if (c === \"\\n\") break;\n out += c;\n this.i++;\n }\n return out;\n }\n\n private parseRange(): Range {\n this.skipBlanks();\n const start = this.parseAddress();\n if (!start) return { negated: this.parseNegation() };\n\n let range: Range = { start, negated: false };\n if (this.src[this.i] === \",\") {\n this.i++;\n this.skipBlanks();\n if (this.src[this.i] === \"+\") {\n this.i++;\n const digits = /^\\d+/.exec(this.src.slice(this.i))!;\n this.i += digits[0].length;\n range.relativeEnd = Number(digits[0]);\n } else if (this.src[this.i] === \"~\") {\n this.i++;\n const digits = /^\\d+/.exec(this.src.slice(this.i))!;\n this.i += digits[0].length;\n range.multipleEnd = Number(digits[0]);\n } else {\n const end = this.parseAddress();\n if (end) range.end = end;\n }\n }\n range.negated = this.parseNegation();\n return range;\n }\n\n private parseNegation(): boolean {\n this.skipBlanks();\n let negated = false;\n while (this.src[this.i] === \"!\") {\n negated = !negated;\n this.i++;\n this.skipBlanks();\n }\n return negated;\n }\n\n private parseAddress(): Address | undefined {\n this.skipBlanks();\n const c = this.src[this.i];\n if (c === undefined) return undefined;\n\n if (c === \"$\") {\n this.i++;\n return { kind: \"last\" };\n }\n if (/\\d/.test(c)) {\n const digits = /^\\d+/.exec(this.src.slice(this.i))!;\n this.i += digits[0].length;\n if (this.src[this.i] === \"~\") {\n this.i++;\n const step = /^\\d+/.exec(this.src.slice(this.i))!;\n this.i += step[0].length;\n return { kind: \"step\", line: Number(digits[0]), step: Number(step[0]) };\n }\n const line = Number(digits[0]);\n return line === 0 ? { kind: \"zero\", line: 0 } : { kind: \"line\", line };\n }\n if (c === \"/\" || c === \"\\\\\") {\n let delimiter = \"/\";\n if (c === \"\\\\\") {\n this.i++;\n delimiter = this.src[this.i]!;\n }\n this.i++;\n const pattern = this.readUntilDelimiter(delimiter);\n let flags = \"\";\n while (this.i < this.src.length && /[IM]/.test(this.src[this.i]!)) {\n flags += this.src[this.i] === \"I\" ? \"i\" : \"m\";\n this.i++;\n }\n return { kind: \"regex\", regex: new RegExp(toJsRegex(pattern, this.extended), flags) };\n }\n return undefined;\n }\n\n private readUntilDelimiter(delimiter: string): string {\n let out = \"\";\n while (this.i < this.src.length) {\n const c = this.src[this.i]!;\n if (c === \"\\\\\") {\n const next = this.src[this.i + 1];\n if (next === delimiter) {\n out += delimiter === \"/\" ? \"/\" : \"\\\\\" + delimiter;\n this.i += 2;\n continue;\n }\n out += c + (next ?? \"\");\n this.i += 2;\n continue;\n }\n if (c === delimiter) {\n this.i++;\n return out;\n }\n out += c;\n this.i++;\n }\n throw new SedParseError(`unterminated address regex`);\n }\n\n private parseSubstitute(range: Range): SedCommand {\n const delimiter = this.src[this.i];\n if (delimiter === undefined) throw new SedParseError(\"unterminated `s' command\");\n this.i++;\n const pattern = this.readUntilDelimiter(delimiter);\n const replacement = this.readUntilDelimiter(delimiter);\n\n let flags = \"\";\n let writeFile: string | undefined;\n while (this.i < this.src.length) {\n const c = this.src[this.i]!;\n if (/[gpiIemM0-9]/.test(c)) {\n flags += c;\n this.i++;\n continue;\n }\n if (c === \"w\") {\n this.i++;\n writeFile = this.parseUntilEol().trim();\n break;\n }\n break;\n }\n\n const jsFlags = (flags.includes(\"g\") ? \"g\" : \"\") + (flags.includes(\"i\") || flags.includes(\"I\") ? \"i\" : \"\") + (flags.includes(\"m\") || flags.includes(\"M\") ? \"m\" : \"\");\n const cmd: SedCommand = {\n type: \"s\",\n range,\n regex: new RegExp(toJsRegex(pattern, this.extended), jsFlags.includes(\"g\") ? jsFlags : jsFlags + \"g\"),\n replacement,\n flags,\n };\n if (writeFile) (cmd as { writeFile?: string }).writeFile = writeFile;\n return cmd;\n }\n\n private parseTransliterate(range: Range): SedCommand {\n const delimiter = this.src[this.i]!;\n this.i++;\n const from = this.readUntilDelimiter(delimiter);\n const to = this.readUntilDelimiter(delimiter);\n return { type: \"y\", range, from: [...unescape(from)], to: [...unescape(to)] };\n }\n}\n\nfunction unescape(text: string): string {\n return text.replace(/\\\\(.)/g, (_, c: string) => ({ n: \"\\n\", t: \"\\t\", r: \"\\r\", \"\\\\\": \"\\\\\" })[c] ?? c);\n}\n\n/** Translate a POSIX BRE/ERE into JavaScript regex source. */\nexport function toJsRegex(pattern: string, extended: boolean): string {\n let out = \"\";\n let i = 0;\n while (i < pattern.length) {\n const c = pattern[i]!;\n\n if (c === \"\\\\\") {\n const next = pattern[i + 1];\n if (next === undefined) {\n out += \"\\\\\\\\\";\n i++;\n continue;\n }\n if (!extended && \"(){}|+?\".includes(next)) {\n // In BRE these are the *special* forms.\n out += next;\n i += 2;\n continue;\n }\n if (next === \"n\") {\n out += \"\\\\n\";\n i += 2;\n continue;\n }\n if (next === \"t\") {\n out += \"\\\\t\";\n i += 2;\n continue;\n }\n if (next === \"w\" || next === \"W\" || next === \"s\" || next === \"S\" || next === \"b\" || next === \"B\" || next === \"d\" || next === \"D\") {\n out += \"\\\\\" + next;\n i += 2;\n continue;\n }\n if (/\\d/.test(next)) {\n out += \"\\\\\" + next;\n i += 2;\n continue;\n }\n if (next === \"<\") {\n out += \"\\\\b(?=\\\\w)\";\n i += 2;\n continue;\n }\n if (next === \">\") {\n out += \"\\\\b(?<=\\\\w)\";\n i += 2;\n continue;\n }\n out += \"\\\\\" + next;\n i += 2;\n continue;\n }\n\n if (!extended && \"(){}|+?\".includes(c)) {\n // Literal in BRE.\n out += \"\\\\\" + c;\n i++;\n continue;\n }\n\n if (c === \"[\") {\n const end = findBracketEnd(pattern, i);\n if (end > 0) {\n out += translateBracket(pattern.slice(i, end + 1));\n i = end + 1;\n continue;\n }\n out += \"\\\\[\";\n i++;\n continue;\n }\n\n out += c;\n i++;\n }\n return out;\n}\n\nfunction findBracketEnd(pattern: string, start: number): number {\n let i = start + 1;\n if (pattern[i] === \"^\") i++;\n if (pattern[i] === \"]\") i++;\n while (i < pattern.length) {\n if (pattern.startsWith(\"[:\", i)) {\n const close = pattern.indexOf(\":]\", i);\n if (close > 0) {\n i = close + 2;\n continue;\n }\n }\n if (pattern[i] === \"]\") return i;\n i++;\n }\n return -1;\n}\n\nconst BRACKET_CLASSES: Record<string, string> = {\n alpha: \"A-Za-z\",\n digit: \"0-9\",\n alnum: \"A-Za-z0-9\",\n upper: \"A-Z\",\n lower: \"a-z\",\n space: \" \\\\t\\\\n\\\\r\\\\f\\\\v\",\n blank: \" \\\\t\",\n punct: \"!-/:-@\\\\[-`{-~\",\n print: \" -~\",\n graph: \"!-~\",\n cntrl: \"\\\\x00-\\\\x1f\\\\x7f\",\n xdigit: \"0-9A-Fa-f\",\n word: \"A-Za-z0-9_\",\n};\n\nfunction translateBracket(text: string): string {\n return text.replace(/\\[:([a-z]+):\\]/g, (_, name: string) => BRACKET_CLASSES[name] ?? \"\");\n}\n\n/** Convert a sed replacement (`\\1`, `&`, `\\n`, `\\U`…) into a JS replacement. */\nfunction applyReplacement(replacement: string, match: RegExpExecArray): string {\n let out = \"\";\n let caseMode: \"U\" | \"L\" | null = null;\n let oneShot: \"u\" | \"l\" | null = null;\n\n const emit = (text: string) => {\n let value = text;\n if (oneShot && value.length > 0) {\n value = (oneShot === \"u\" ? value[0]!.toUpperCase() : value[0]!.toLowerCase()) + value.slice(1);\n oneShot = null;\n }\n if (caseMode === \"U\") value = value.toUpperCase();\n if (caseMode === \"L\") value = value.toLowerCase();\n out += value;\n };\n\n for (let i = 0; i < replacement.length; i++) {\n const c = replacement[i]!;\n if (c === \"&\") {\n emit(match[0]);\n continue;\n }\n if (c !== \"\\\\\") {\n emit(c);\n continue;\n }\n const next = replacement[++i];\n if (next === undefined) break;\n if (/\\d/.test(next)) {\n emit(match[Number(next)] ?? \"\");\n continue;\n }\n switch (next) {\n case \"n\":\n emit(\"\\n\");\n break;\n case \"t\":\n emit(\"\\t\");\n break;\n case \"r\":\n emit(\"\\r\");\n break;\n case \"U\":\n caseMode = \"U\";\n break;\n case \"L\":\n caseMode = \"L\";\n break;\n case \"E\":\n caseMode = null;\n break;\n case \"u\":\n oneShot = \"u\";\n break;\n case \"l\":\n oneShot = \"l\";\n break;\n default:\n emit(next);\n break;\n }\n }\n return out;\n}\n\n// ── execution ───────────────────────────────────────────────────────────────\n\ninterface SedState {\n pattern: string;\n hold: string;\n lineNumber: number;\n lastLine: boolean;\n substituted: boolean;\n quit: number | null;\n suppressAutoPrint: boolean;\n appendQueue: string[];\n output: string[];\n}\n\nexport async function runSed(ctx: ExecContext): Promise<number> {\n const args = parseArgs(ctx.args, [\n { short: \"n\", long: \"quiet\" },\n { long: \"silent\" },\n { short: \"e\", long: \"expression\", arg: true, multiple: true },\n { short: \"f\", long: \"file\", arg: true, multiple: true },\n { short: \"i\", long: \"in-place\", arg: true, attachedOnly: true },\n { short: \"E\", long: \"regexp-extended\" },\n { short: \"r\" },\n { short: \"s\", long: \"separate\" },\n { short: \"z\", long: \"null-data\" },\n { long: \"posix\" },\n { long: \"help\" },\n ]);\n\n if (args.has(\"help\")) {\n ctx.line(\"Usage: sed [OPTION]... {script} [input-file]...\");\n return 0;\n }\n\n const extended = args.has(\"regexp-extended\") || args.has(\"r\");\n const scripts: string[] = [...args.list(\"expression\")];\n for (const file of args.list(\"file\")) {\n try {\n scripts.push(ctx.vfs.readText(ctx.path(file), ctx.cred));\n } catch (e) {\n return ctx.reportError(e, file);\n }\n }\n\n let operands = args.positional;\n if (scripts.length === 0) {\n const script = operands[0];\n if (script === undefined) return ctx.fail(\"no script specified\", 1);\n scripts.push(script);\n operands = operands.slice(1);\n }\n\n let program: SedCommand[];\n try {\n program = new ScriptParser(scripts.join(\"\\n\"), extended).parse();\n } catch (e) {\n return ctx.fail(`-e expression #1, char ${scripts.join(\"\\n\").length}: ${e instanceof Error ? e.message : String(e)}`, 1);\n }\n\n const inPlace = args.present(\"in-place\");\n const suffix = args.str(\"in-place\") ?? \"\";\n const suppress = args.has(\"quiet\") || args.has(\"silent\");\n\n const { sources, ok } = await readInputs(ctx, operands);\n let status = ok ? 0 : 1;\n\n for (const source of sources) {\n const { lines, trailingNewline } = splitLines(source.bytes);\n const state: SedState = {\n pattern: \"\",\n hold: \"\",\n lineNumber: 0,\n lastLine: false,\n substituted: false,\n quit: null,\n suppressAutoPrint: suppress,\n appendQueue: [],\n output: [],\n };\n\n resetRanges(program);\n\n for (let index = 0; index < lines.length; index++) {\n state.pattern = lines[index]!;\n state.lineNumber = index + 1;\n state.lastLine = index === lines.length - 1;\n state.substituted = false;\n\n const control = executeProgram(ctx, program, state, lines, () => index, (n) => (index = n));\n if (control === \"delete\") {\n flushAppends(state);\n continue;\n }\n if (!state.suppressAutoPrint) state.output.push(state.pattern);\n flushAppends(state);\n if (state.quit !== null) break;\n }\n\n const text = joinLines(state.output, trailingNewline || state.output.length > 0);\n if (inPlace && source.name !== \"-\" && source.name !== \"standard input\") {\n const abs = ctx.path(source.name);\n if (suffix) ctx.vfs.writeFile(ctx.path(source.name + suffix), source.bytes, { cred: ctx.cred });\n ctx.vfs.writeFile(abs, text, { cred: ctx.cred });\n } else {\n ctx.write(text);\n }\n if (state.quit !== null && state.quit !== 0) status = state.quit;\n }\n\n return status;\n}\n\nfunction flushAppends(state: SedState): void {\n for (const text of state.appendQueue) state.output.push(text);\n state.appendQueue = [];\n}\n\nfunction resetRanges(program: SedCommand[]): void {\n for (const cmd of program) {\n cmd.range.active = false;\n delete cmd.range.activeUntilLine;\n if (cmd.type === \"{\") resetRanges(cmd.body);\n }\n}\n\ntype Control = \"next\" | \"delete\" | \"restart\";\n\nfunction executeProgram(\n ctx: ExecContext,\n program: SedCommand[],\n state: SedState,\n lines: string[],\n getIndex: () => number,\n setIndex: (n: number) => void,\n): Control {\n let pc = 0;\n let iterations = 0;\n\n while (pc < program.length) {\n if (++iterations > 1_000_000) break;\n const cmd = program[pc]!;\n\n if (!matches(cmd.range, state, lines.length)) {\n pc++;\n continue;\n }\n\n switch (cmd.type) {\n case \"#\":\n break;\n case \"{\": {\n const control = executeProgram(ctx, cmd.body, state, lines, getIndex, setIndex);\n if (control === \"delete\") return \"delete\";\n break;\n }\n case \"s\": {\n const global = cmd.flags.includes(\"g\");\n const occurrence = Number(/\\d+/.exec(cmd.flags)?.[0] ?? \"0\");\n const result = substitute(state.pattern, cmd.regex, cmd.replacement, global, occurrence);\n if (result.changed) {\n state.pattern = result.text;\n state.substituted = true;\n if (cmd.flags.includes(\"p\")) state.output.push(state.pattern);\n if (cmd.writeFile) {\n try {\n ctx.vfs.appendFile(ctx.path(cmd.writeFile), state.pattern + \"\\n\", { cred: ctx.cred });\n } catch {\n /* ignore */\n }\n }\n }\n break;\n }\n case \"y\": {\n state.pattern = [...state.pattern]\n .map((ch) => {\n const idx = cmd.from.indexOf(ch);\n return idx >= 0 ? (cmd.to[idx] ?? ch) : ch;\n })\n .join(\"\");\n break;\n }\n case \"p\":\n state.output.push(state.pattern);\n break;\n case \"P\":\n state.output.push(state.pattern.split(\"\\n\")[0]!);\n break;\n case \"d\":\n return \"delete\";\n case \"D\": {\n const idx = state.pattern.indexOf(\"\\n\");\n if (idx < 0) return \"delete\";\n state.pattern = state.pattern.slice(idx + 1);\n pc = 0;\n continue;\n }\n case \"n\": {\n if (!state.suppressAutoPrint) state.output.push(state.pattern);\n const next = getIndex() + 1;\n if (next >= lines.length) return \"delete\";\n setIndex(next);\n state.pattern = lines[next]!;\n state.lineNumber = next + 1;\n state.lastLine = next === lines.length - 1;\n break;\n }\n case \"N\": {\n const next = getIndex() + 1;\n if (next >= lines.length) {\n state.quit = 0;\n return \"next\";\n }\n setIndex(next);\n state.pattern += \"\\n\" + lines[next]!;\n state.lineNumber = next + 1;\n state.lastLine = next === lines.length - 1;\n break;\n }\n case \"h\":\n state.hold = state.pattern;\n break;\n case \"H\":\n state.hold = state.hold + \"\\n\" + state.pattern;\n break;\n case \"g\":\n state.pattern = state.hold;\n break;\n case \"G\":\n state.pattern = state.pattern + \"\\n\" + state.hold;\n break;\n case \"x\": {\n const tmp = state.pattern;\n state.pattern = state.hold;\n state.hold = tmp;\n break;\n }\n case \"=\":\n state.output.push(String(state.lineNumber));\n break;\n case \"F\":\n state.output.push(\"-\");\n break;\n case \"l\":\n state.output.push(escapeForL(state.pattern) + \"$\");\n break;\n case \"a\":\n state.appendQueue.push(cmd.text);\n break;\n case \"i\":\n state.output.push(cmd.text);\n break;\n case \"c\":\n state.output.push(cmd.text);\n return \"delete\";\n case \"q\":\n if (!state.suppressAutoPrint) state.output.push(state.pattern);\n state.quit = cmd.exitCode;\n return \"delete\";\n case \"Q\":\n state.quit = cmd.exitCode;\n return \"delete\";\n case \"r\":\n case \"R\":\n try {\n state.appendQueue.push(ctx.vfs.readText(ctx.path(cmd.file), ctx.cred).replace(/\\n$/, \"\"));\n } catch {\n /* missing file is silently ignored, as in sed */\n }\n break;\n case \"w\":\n case \"W\":\n try {\n ctx.vfs.appendFile(ctx.path(cmd.file), state.pattern + \"\\n\", { cred: ctx.cred });\n } catch {\n /* ignore */\n }\n break;\n case \":\":\n break;\n case \"b\":\n case \"t\":\n case \"T\": {\n const shouldJump =\n cmd.type === \"b\" || (cmd.type === \"t\" && state.substituted) || (cmd.type === \"T\" && !state.substituted);\n if (!shouldJump) break;\n if (cmd.label === \"\") return \"next\";\n const target = program.findIndex((c) => c.type === \":\" && c.label === cmd.label);\n if (target < 0) break;\n if (cmd.type === \"t\") state.substituted = false;\n pc = target;\n continue;\n }\n }\n pc++;\n }\n return \"next\";\n}\n\nfunction substitute(\n input: string,\n regex: RegExp,\n replacement: string,\n global: boolean,\n occurrence: number,\n): { text: string; changed: boolean } {\n const re = new RegExp(regex.source, regex.flags.includes(\"g\") ? regex.flags : regex.flags + \"g\");\n let out = \"\";\n let last = 0;\n let count = 0;\n let changed = false;\n let match: RegExpExecArray | null;\n\n while ((match = re.exec(input)) !== null) {\n count++;\n const wanted = occurrence > 0 ? count >= occurrence && (global || count === occurrence) : true;\n if (wanted) {\n out += input.slice(last, match.index) + applyReplacement(replacement, match);\n last = match.index + match[0].length;\n changed = true;\n if (!global) break;\n }\n if (match[0] === \"\") re.lastIndex++;\n }\n out += input.slice(last);\n return { text: out, changed };\n}\n\nfunction escapeForL(text: string): string {\n return [...text]\n .map((ch) => {\n const code = ch.charCodeAt(0);\n if (ch === \"\\\\\") return \"\\\\\\\\\";\n if (ch === \"\\t\") return \"\\\\t\";\n if (ch === \"\\n\") return \"\\\\n\";\n if (code < 32 || code === 127) return \"\\\\\" + code.toString(8).padStart(3, \"0\");\n return ch;\n })\n .join(\"\");\n}\n\nfunction matchAddress(address: Address, state: SedState, totalLines: number): boolean {\n switch (address.kind) {\n case \"line\":\n return state.lineNumber === address.line;\n case \"zero\":\n return false;\n case \"last\":\n return state.lineNumber === totalLines;\n case \"step\":\n return state.lineNumber >= address.line! && (state.lineNumber - address.line!) % (address.step || 1) === 0;\n case \"regex\":\n return address.regex!.test(state.pattern);\n }\n}\n\nfunction matches(range: Range, state: SedState, totalLines: number): boolean {\n const result = matchesInner(range, state, totalLines);\n return range.negated ? !result : result;\n}\n\nfunction matchesInner(range: Range, state: SedState, totalLines: number): boolean {\n if (!range.start) return true;\n\n if (!range.end && range.relativeEnd === undefined && range.multipleEnd === undefined) {\n return matchAddress(range.start, state, totalLines);\n }\n\n if (range.active) {\n if (range.activeUntilLine !== undefined) {\n if (state.lineNumber >= range.activeUntilLine) range.active = false;\n return true;\n }\n if (range.end && matchAddress(range.end, state, totalLines)) {\n range.active = false;\n // The end line is still part of the range.\n return true;\n }\n if (range.end?.kind === \"line\" && state.lineNumber > range.end.line!) {\n range.active = false;\n return false;\n }\n return true;\n }\n\n if (matchAddress(range.start, state, totalLines)) {\n range.active = true;\n if (range.relativeEnd !== undefined) range.activeUntilLine = state.lineNumber + range.relativeEnd;\n else if (range.multipleEnd !== undefined) {\n const multiple = range.multipleEnd;\n range.activeUntilLine = Math.ceil(state.lineNumber / multiple) * multiple;\n } else if (range.end?.kind === \"line\" && range.end.line! <= state.lineNumber) {\n range.active = false;\n }\n return true;\n }\n\n // `0,/re/` starts matching before the first line.\n if (range.start.kind === \"zero\") {\n range.active = true;\n return true;\n }\n return false;\n}\n\nexport const sedCommand: Pick<Command, \"name\" | \"run\"> = { name: \"sed\", run: runSed };\n","/**\n * `awk` — a real implementation of the language, not a line-splitting helper.\n *\n * Covers the POSIX language: BEGIN/END, pattern-action rules and range\n * patterns, fields with assignment and `NF` recomputation, arrays (including\n * `SUBSEP` multi-dimensional subscripts and `for (k in a)`), user-defined\n * functions with local parameters, `getline`, output redirection, and the\n * standard built-in function set.\n */\n\nimport type { ExecContext } from \"../kernel/command.js\";\nimport { parseArgs } from \"../util/args.js\";\nimport { formatPrintf } from \"../util/printf.js\";\nimport { splitLines } from \"./helpers.js\";\n\n// ── lexer ───────────────────────────────────────────────────────────────────\n\ntype TokKind = \"num\" | \"str\" | \"ere\" | \"name\" | \"func_name\" | \"builtin\" | \"keyword\" | \"op\" | \"newline\" | \"eof\";\n\ninterface Tok {\n kind: TokKind;\n value: string;\n num?: number;\n}\n\nconst KEYWORDS = new Set([\n \"BEGIN\", \"END\", \"function\", \"func\", \"if\", \"else\", \"while\", \"for\", \"do\",\n \"break\", \"continue\", \"next\", \"nextfile\", \"exit\", \"return\", \"delete\", \"in\",\n \"getline\", \"print\", \"printf\",\n]);\n\nconst BUILTINS = new Set([\n \"length\", \"substr\", \"index\", \"split\", \"sub\", \"gsub\", \"match\", \"sprintf\",\n \"sin\", \"cos\", \"atan2\", \"exp\", \"log\", \"sqrt\", \"int\", \"rand\", \"srand\",\n \"tolower\", \"toupper\", \"system\", \"close\", \"fflush\", \"gensub\", \"toupper\",\n]);\n\nconst OPERATORS = [\n \"**=\", \"...\", \">>=\", \"<<=\",\n \"+=\", \"-=\", \"*=\", \"/=\", \"%=\", \"^=\", \"**\",\n \"==\", \"!=\", \"<=\", \">=\", \"&&\", \"||\", \"++\", \"--\", \">>\", \"!~\",\n \"{\", \"}\", \"(\", \")\", \"[\", \"]\", \";\", \",\", \"+\", \"-\", \"*\", \"/\", \"%\", \"^\",\n \"<\", \">\", \"=\", \"!\", \"?\", \":\", \"~\", \"$\", \"|\", \"&\",\n];\n\nclass AwkError extends Error {}\n\nfunction tokenize(src: string): Tok[] {\n const out: Tok[] = [];\n let i = 0;\n\n const lastMeaningful = (): Tok | undefined => out[out.length - 1];\n\n /** A `/` starts a regex unless the previous token could end an expression. */\n const regexAllowed = (): boolean => {\n const prev = lastMeaningful();\n if (!prev) return true;\n if (prev.kind === \"num\" || prev.kind === \"str\" || prev.kind === \"name\" || prev.kind === \"ere\") return false;\n if (prev.kind === \"op\" && (prev.value === \")\" || prev.value === \"]\" || prev.value === \"++\" || prev.value === \"--\")) return false;\n return true;\n };\n\n while (i < src.length) {\n const c = src[i]!;\n\n if (c === \"\\\\\" && src[i + 1] === \"\\n\") {\n i += 2;\n continue;\n }\n if (c === \"\\n\") {\n out.push({ kind: \"newline\", value: \"\\n\" });\n i++;\n continue;\n }\n if (c === \" \" || c === \"\\t\" || c === \"\\r\") {\n i++;\n continue;\n }\n if (c === \"#\") {\n while (i < src.length && src[i] !== \"\\n\") i++;\n continue;\n }\n\n if (/[0-9]/.test(c) || (c === \".\" && /[0-9]/.test(src[i + 1] ?? \"\"))) {\n const m = /^(?:0[xX][0-9a-fA-F]+|\\d+\\.?\\d*(?:[eE][+-]?\\d+)?|\\.\\d+(?:[eE][+-]?\\d+)?)/.exec(src.slice(i))!;\n out.push({ kind: \"num\", value: m[0], num: Number(m[0]) });\n i += m[0].length;\n continue;\n }\n\n if (c === '\"') {\n let value = \"\";\n i++;\n while (i < src.length && src[i] !== '\"') {\n if (src[i] === \"\\\\\") {\n const next = src[i + 1]!;\n const map: Record<string, string> = { n: \"\\n\", t: \"\\t\", r: \"\\r\", \"\\\\\": \"\\\\\", '\"': '\"', \"/\": \"/\", a: \"\\x07\", b: \"\\b\", f: \"\\f\", v: \"\\v\" };\n if (next in map) {\n value += map[next];\n i += 2;\n continue;\n }\n const octal = /^[0-7]{1,3}/.exec(src.slice(i + 1));\n if (octal) {\n value += String.fromCharCode(parseInt(octal[0], 8));\n i += 1 + octal[0].length;\n continue;\n }\n value += next;\n i += 2;\n continue;\n }\n value += src[i];\n i++;\n }\n i++;\n out.push({ kind: \"str\", value });\n continue;\n }\n\n if (c === \"/\" && regexAllowed()) {\n let value = \"\";\n i++;\n while (i < src.length && src[i] !== \"/\") {\n if (src[i] === \"\\\\\") {\n value += src[i]! + (src[i + 1] ?? \"\");\n i += 2;\n continue;\n }\n if (src[i] === \"\\n\") throw new AwkError(\"newline in regex\");\n value += src[i];\n i++;\n }\n i++;\n out.push({ kind: \"ere\", value });\n continue;\n }\n\n if (/[A-Za-z_]/.test(c)) {\n const m = /^[A-Za-z_][A-Za-z0-9_]*/.exec(src.slice(i))!;\n const name = m[0];\n i += name.length;\n if (KEYWORDS.has(name)) out.push({ kind: \"keyword\", value: name === \"func\" ? \"function\" : name });\n else if (BUILTINS.has(name)) out.push({ kind: \"builtin\", value: name });\n else if (src[i] === \"(\") out.push({ kind: \"func_name\", value: name });\n else out.push({ kind: \"name\", value: name });\n continue;\n }\n\n const op = OPERATORS.find((o) => src.startsWith(o, i));\n if (op) {\n out.push({ kind: \"op\", value: op });\n i += op.length;\n continue;\n }\n\n throw new AwkError(`syntax error at or near ${c}`);\n }\n\n out.push({ kind: \"eof\", value: \"\" });\n return out;\n}\n\n// ── AST ─────────────────────────────────────────────────────────────────────\n\ntype Expr =\n | { t: \"num\"; v: number }\n | { t: \"str\"; v: string }\n | { t: \"regex\"; v: string }\n | { t: \"var\"; name: string }\n | { t: \"field\"; index: Expr }\n | { t: \"index\"; name: string; subscripts: Expr[] }\n | { t: \"assign\"; target: Expr; op: string; value: Expr }\n | { t: \"binary\"; op: string; left: Expr; right: Expr }\n | { t: \"unary\"; op: string; operand: Expr }\n | { t: \"incdec\"; op: string; prefix: boolean; target: Expr }\n | { t: \"ternary\"; cond: Expr; yes: Expr; no: Expr }\n | { t: \"match\"; negated: boolean; left: Expr; right: Expr }\n | { t: \"in\"; subscripts: Expr[]; array: string }\n | { t: \"concat\"; parts: Expr[] }\n | { t: \"call\"; name: string; args: Expr[] }\n | { t: \"builtin\"; name: string; args: Expr[] }\n | { t: \"getline\"; target?: Expr; source?: Expr; mode: \"plain\" | \"file\" | \"cmd\" }\n | { t: \"grouping\"; expr: Expr };\n\ntype Stmt =\n | { t: \"expr\"; expr: Expr }\n | { t: \"print\"; args: Expr[]; redirect?: { op: \">\" | \">>\" | \"|\"; target: Expr } }\n | { t: \"printf\"; args: Expr[]; redirect?: { op: \">\" | \">>\" | \"|\"; target: Expr } }\n | { t: \"if\"; cond: Expr; then: Stmt; else?: Stmt }\n | { t: \"while\"; cond: Expr; body: Stmt }\n | { t: \"do\"; body: Stmt; cond: Expr }\n | { t: \"for\"; init?: Stmt; cond?: Expr; step?: Stmt; body: Stmt }\n | { t: \"forin\"; name: string; array: string; body: Stmt }\n | { t: \"block\"; body: Stmt[] }\n | { t: \"next\" }\n | { t: \"nextfile\" }\n | { t: \"exit\"; code?: Expr }\n | { t: \"return\"; value?: Expr }\n | { t: \"break\" }\n | { t: \"continue\" }\n | { t: \"delete\"; name: string; subscripts: Expr[] }\n | { t: \"getline\"; expr: Expr }\n | { t: \"empty\" };\n\ninterface Rule {\n kind: \"BEGIN\" | \"END\" | \"pattern\";\n pattern?: Expr;\n rangeEnd?: Expr;\n rangeActive?: boolean;\n action?: Stmt;\n}\n\ninterface FunctionDef {\n name: string;\n params: string[];\n body: Stmt;\n}\n\ninterface Program {\n rules: Rule[];\n functions: Map<string, FunctionDef>;\n}\n\n// ── parser ──────────────────────────────────────────────────────────────────\n\nclass AwkParser {\n private i = 0;\n\n constructor(private readonly toks: Tok[]) {}\n\n parse(): Program {\n const rules: Rule[] = [];\n const functions = new Map<string, FunctionDef>();\n\n this.skipTerminators();\n while (!this.atEof()) {\n if (this.isKeyword(\"function\")) {\n const fn = this.parseFunction();\n functions.set(fn.name, fn);\n } else {\n rules.push(this.parseRule());\n }\n this.skipTerminators();\n }\n return { rules, functions };\n }\n\n // token helpers\n\n private peek(offset = 0): Tok {\n return this.toks[Math.min(this.i + offset, this.toks.length - 1)]!;\n }\n private next(): Tok {\n return this.toks[this.i++]!;\n }\n private atEof(): boolean {\n return this.peek().kind === \"eof\";\n }\n private isOp(value: string, offset = 0): boolean {\n const t = this.peek(offset);\n return t.kind === \"op\" && t.value === value;\n }\n private isKeyword(value: string, offset = 0): boolean {\n const t = this.peek(offset);\n return t.kind === \"keyword\" && t.value === value;\n }\n private eatOp(value: string): boolean {\n if (this.isOp(value)) {\n this.i++;\n return true;\n }\n return false;\n }\n private expectOp(value: string): void {\n if (!this.eatOp(value)) throw new AwkError(`syntax error: expected '${value}' near '${this.peek().value}'`);\n }\n private eatKeyword(value: string): boolean {\n if (this.isKeyword(value)) {\n this.i++;\n return true;\n }\n return false;\n }\n private skipNewlines(): void {\n while (this.peek().kind === \"newline\") this.i++;\n }\n private skipTerminators(): void {\n while (this.peek().kind === \"newline\" || this.isOp(\";\")) this.i++;\n }\n\n private parseFunction(): FunctionDef {\n this.eatKeyword(\"function\");\n const nameTok = this.next();\n const name = nameTok.value;\n this.expectOp(\"(\");\n const params: string[] = [];\n while (!this.isOp(\")\")) {\n const p = this.next();\n if (p.kind === \"name\") params.push(p.value);\n if (!this.eatOp(\",\")) break;\n this.skipNewlines();\n }\n this.expectOp(\")\");\n this.skipNewlines();\n return { name, params, body: this.parseBlock() };\n }\n\n private parseRule(): Rule {\n if (this.eatKeyword(\"BEGIN\")) {\n this.skipNewlines();\n return { kind: \"BEGIN\", action: this.parseBlock() };\n }\n if (this.eatKeyword(\"END\")) {\n this.skipNewlines();\n return { kind: \"END\", action: this.parseBlock() };\n }\n if (this.isOp(\"{\")) {\n return { kind: \"pattern\", action: this.parseBlock() };\n }\n\n const pattern = this.parseExpr();\n let rangeEnd: Expr | undefined;\n if (this.eatOp(\",\")) {\n this.skipNewlines();\n rangeEnd = this.parseExpr();\n }\n const rule: Rule = { kind: \"pattern\", pattern };\n if (rangeEnd) rule.rangeEnd = rangeEnd;\n if (this.isOp(\"{\")) rule.action = this.parseBlock();\n return rule;\n }\n\n private parseBlock(): Stmt {\n this.expectOp(\"{\");\n const body: Stmt[] = [];\n this.skipTerminators();\n while (!this.isOp(\"}\") && !this.atEof()) {\n body.push(this.parseStatement());\n this.skipTerminators();\n }\n this.expectOp(\"}\");\n return { t: \"block\", body };\n }\n\n private parseStatement(): Stmt {\n if (this.isOp(\"{\")) return this.parseBlock();\n if (this.isOp(\";\")) {\n this.i++;\n return { t: \"empty\" };\n }\n\n if (this.eatKeyword(\"if\")) {\n this.expectOp(\"(\");\n const cond = this.parseExpr();\n this.expectOp(\")\");\n this.skipNewlines();\n const then = this.parseStatement();\n this.skipTerminators();\n if (this.eatKeyword(\"else\")) {\n this.skipNewlines();\n return { t: \"if\", cond, then, else: this.parseStatement() };\n }\n return { t: \"if\", cond, then };\n }\n\n if (this.eatKeyword(\"while\")) {\n this.expectOp(\"(\");\n const cond = this.parseExpr();\n this.expectOp(\")\");\n this.skipNewlines();\n return { t: \"while\", cond, body: this.parseStatement() };\n }\n\n if (this.eatKeyword(\"do\")) {\n this.skipNewlines();\n const body = this.parseStatement();\n this.skipTerminators();\n if (!this.eatKeyword(\"while\")) throw new AwkError(\"expected 'while' after 'do'\");\n this.expectOp(\"(\");\n const cond = this.parseExpr();\n this.expectOp(\")\");\n return { t: \"do\", body, cond };\n }\n\n if (this.eatKeyword(\"for\")) {\n this.expectOp(\"(\");\n // `for (k in array)`\n if (this.peek().kind === \"name\" && this.isKeyword(\"in\", 1)) {\n const name = this.next().value;\n this.eatKeyword(\"in\");\n const array = this.next().value;\n this.expectOp(\")\");\n this.skipNewlines();\n return { t: \"forin\", name, array, body: this.parseStatement() };\n }\n if (this.isOp(\"(\") && this.peek(1).kind === \"name\" && this.isKeyword(\"in\", 2)) {\n this.expectOp(\"(\");\n const name = this.next().value;\n this.eatKeyword(\"in\");\n const array = this.next().value;\n this.expectOp(\")\");\n this.expectOp(\")\");\n this.skipNewlines();\n return { t: \"forin\", name, array, body: this.parseStatement() };\n }\n\n const init = this.isOp(\";\") ? undefined : { t: \"expr\" as const, expr: this.parseExpr() };\n this.expectOp(\";\");\n this.skipNewlines();\n const cond = this.isOp(\";\") ? undefined : this.parseExpr();\n this.expectOp(\";\");\n this.skipNewlines();\n const step = this.isOp(\")\") ? undefined : { t: \"expr\" as const, expr: this.parseExpr() };\n this.expectOp(\")\");\n this.skipNewlines();\n const node: Stmt = { t: \"for\", body: this.parseStatement() };\n if (init) (node as { init?: Stmt }).init = init;\n if (cond) (node as { cond?: Expr }).cond = cond;\n if (step) (node as { step?: Stmt }).step = step;\n return node;\n }\n\n if (this.eatKeyword(\"break\")) return { t: \"break\" };\n if (this.eatKeyword(\"continue\")) return { t: \"continue\" };\n if (this.eatKeyword(\"next\")) return { t: \"next\" };\n if (this.eatKeyword(\"nextfile\")) return { t: \"nextfile\" };\n if (this.eatKeyword(\"exit\")) {\n if (this.endOfStatement()) return { t: \"exit\" };\n return { t: \"exit\", code: this.parseExpr() };\n }\n if (this.eatKeyword(\"return\")) {\n if (this.endOfStatement()) return { t: \"return\" };\n return { t: \"return\", value: this.parseExpr() };\n }\n if (this.eatKeyword(\"delete\")) {\n const name = this.next().value;\n const subscripts: Expr[] = [];\n if (this.eatOp(\"[\")) {\n do {\n subscripts.push(this.parseExpr());\n } while (this.eatOp(\",\"));\n this.expectOp(\"]\");\n }\n return { t: \"delete\", name, subscripts };\n }\n\n if (this.isKeyword(\"print\") || this.isKeyword(\"printf\")) {\n const kind = this.next().value as \"print\" | \"printf\";\n const args: Expr[] = [];\n if (!this.endOfStatement() && !this.isOp(\">\") && !this.isOp(\">>\") && !this.isOp(\"|\")) {\n args.push(...this.parseExprList(true));\n }\n let redirect: { op: \">\" | \">>\" | \"|\"; target: Expr } | undefined;\n if (this.isOp(\">\") || this.isOp(\">>\") || this.isOp(\"|\")) {\n const op = this.next().value as \">\" | \">>\" | \"|\";\n redirect = { op, target: this.parseTernary(false) };\n }\n const node = { t: kind, args } as Stmt;\n if (redirect) (node as { redirect?: typeof redirect }).redirect = redirect;\n return node;\n }\n\n return { t: \"expr\", expr: this.parseExpr() };\n }\n\n private endOfStatement(): boolean {\n const t = this.peek();\n return t.kind === \"newline\" || t.kind === \"eof\" || (t.kind === \"op\" && (t.value === \";\" || t.value === \"}\"));\n }\n\n /** `print a, b` — a comma list where `>` means redirection, not comparison. */\n private parseExprList(noGt: boolean): Expr[] {\n // A parenthesised list `print (a, b)` is also legal.\n if (this.isOp(\"(\")) {\n const save = this.i;\n this.i++;\n const items: Expr[] = [];\n try {\n do {\n items.push(this.parseTernary(noGt));\n } while (this.eatOp(\",\"));\n if (this.eatOp(\")\") && (this.endOfStatement() || this.isOp(\">\") || this.isOp(\">>\") || this.isOp(\"|\"))) {\n return items;\n }\n } catch {\n /* fall through to normal parsing */\n }\n this.i = save;\n }\n\n const out: Expr[] = [this.parseTernary(noGt)];\n while (this.eatOp(\",\")) {\n this.skipNewlines();\n out.push(this.parseTernary(noGt));\n }\n return out;\n }\n\n private parseExpr(): Expr {\n return this.parseTernary(false);\n }\n\n private parseTernary(noGt: boolean): Expr {\n const cond = this.parseOr(noGt);\n if (this.eatOp(\"?\")) {\n this.skipNewlines();\n const yes = this.parseTernary(noGt);\n this.expectOp(\":\");\n this.skipNewlines();\n const no = this.parseTernary(noGt);\n return { t: \"ternary\", cond, yes, no };\n }\n // Assignment is right-associative and binds loosest after ternary.\n if (isLvalue(cond) && this.peekAssignOp()) {\n const op = this.next().value;\n this.skipNewlines();\n return { t: \"assign\", target: cond, op, value: this.parseTernary(noGt) };\n }\n return cond;\n }\n\n private peekAssignOp(): boolean {\n const t = this.peek();\n return t.kind === \"op\" && [\"=\", \"+=\", \"-=\", \"*=\", \"/=\", \"%=\", \"^=\", \"**=\"].includes(t.value);\n }\n\n private parseOr(noGt: boolean): Expr {\n let left = this.parseAnd(noGt);\n while (this.isOp(\"||\")) {\n this.i++;\n this.skipNewlines();\n left = { t: \"binary\", op: \"||\", left, right: this.parseAnd(noGt) };\n }\n return left;\n }\n\n private parseAnd(noGt: boolean): Expr {\n let left = this.parseIn(noGt);\n while (this.isOp(\"&&\")) {\n this.i++;\n this.skipNewlines();\n left = { t: \"binary\", op: \"&&\", left, right: this.parseIn(noGt) };\n }\n return left;\n }\n\n private parseIn(noGt: boolean): Expr {\n let left = this.parseMatch(noGt);\n while (this.isKeyword(\"in\")) {\n this.i++;\n const array = this.next().value;\n left = { t: \"in\", subscripts: [left], array };\n }\n return left;\n }\n\n private parseMatch(noGt: boolean): Expr {\n let left = this.parseCompare(noGt);\n for (;;) {\n if (this.isOp(\"~\")) {\n this.i++;\n left = { t: \"match\", negated: false, left, right: this.parseCompare(noGt) };\n continue;\n }\n if (this.isOp(\"!~\")) {\n this.i++;\n left = { t: \"match\", negated: true, left, right: this.parseCompare(noGt) };\n continue;\n }\n return left;\n }\n }\n\n private parseCompare(noGt: boolean): Expr {\n const left = this.parseConcat(noGt);\n const t = this.peek();\n if (t.kind === \"op\" && [\"<\", \"<=\", \"==\", \"!=\", \">=\", \">\"].includes(t.value)) {\n if (noGt && (t.value === \">\" || t.value === \">>\")) return left;\n this.i++;\n return { t: \"binary\", op: t.value, left, right: this.parseConcat(noGt) };\n }\n return left;\n }\n\n private parseConcat(noGt: boolean): Expr {\n const parts: Expr[] = [this.parseAdditive(noGt)];\n for (;;) {\n const t = this.peek();\n const startsValue =\n t.kind === \"num\" ||\n t.kind === \"str\" ||\n t.kind === \"ere\" ||\n t.kind === \"name\" ||\n t.kind === \"func_name\" ||\n t.kind === \"builtin\" ||\n (t.kind === \"op\" && [\"$\", \"(\", \"!\", \"++\", \"--\"].includes(t.value)) ||\n (t.kind === \"op\" && t.value === \"-\" && false);\n if (!startsValue) break;\n parts.push(this.parseAdditive(noGt));\n }\n return parts.length === 1 ? parts[0]! : { t: \"concat\", parts };\n }\n\n private parseAdditive(noGt: boolean): Expr {\n let left = this.parseMultiplicative(noGt);\n for (;;) {\n if (this.isOp(\"+\")) {\n this.i++;\n left = { t: \"binary\", op: \"+\", left, right: this.parseMultiplicative(noGt) };\n continue;\n }\n if (this.isOp(\"-\")) {\n this.i++;\n left = { t: \"binary\", op: \"-\", left, right: this.parseMultiplicative(noGt) };\n continue;\n }\n return left;\n }\n }\n\n private parseMultiplicative(noGt: boolean): Expr {\n let left = this.parseUnary(noGt);\n for (;;) {\n const t = this.peek();\n if (t.kind === \"op\" && (t.value === \"*\" || t.value === \"/\" || t.value === \"%\")) {\n this.i++;\n left = { t: \"binary\", op: t.value, left, right: this.parseUnary(noGt) };\n continue;\n }\n return left;\n }\n }\n\n private parseUnary(noGt: boolean): Expr {\n if (this.isOp(\"!\")) {\n this.i++;\n return { t: \"unary\", op: \"!\", operand: this.parseUnary(noGt) };\n }\n if (this.isOp(\"-\")) {\n this.i++;\n return { t: \"unary\", op: \"-\", operand: this.parseUnary(noGt) };\n }\n if (this.isOp(\"+\")) {\n this.i++;\n return { t: \"unary\", op: \"+\", operand: this.parseUnary(noGt) };\n }\n return this.parsePower(noGt);\n }\n\n private parsePower(noGt: boolean): Expr {\n const base = this.parsePostfix(noGt);\n if (this.isOp(\"^\") || this.isOp(\"**\")) {\n this.i++;\n return { t: \"binary\", op: \"^\", left: base, right: this.parseUnary(noGt) };\n }\n return base;\n }\n\n private parsePostfix(noGt: boolean): Expr {\n if (this.isOp(\"++\") || this.isOp(\"--\")) {\n const op = this.next().value;\n const target = this.parsePostfix(noGt);\n return { t: \"incdec\", op, prefix: true, target };\n }\n let value = this.parsePrimary(noGt);\n while ((this.isOp(\"++\") || this.isOp(\"--\")) && isLvalue(value)) {\n const op = this.next().value;\n value = { t: \"incdec\", op, prefix: false, target: value };\n }\n return value;\n }\n\n private parsePrimary(noGt: boolean): Expr {\n const t = this.peek();\n\n if (t.kind === \"num\") {\n this.i++;\n return { t: \"num\", v: t.num! };\n }\n if (t.kind === \"str\") {\n this.i++;\n return { t: \"str\", v: t.value };\n }\n if (t.kind === \"ere\") {\n this.i++;\n return { t: \"regex\", v: t.value };\n }\n\n if (t.kind === \"op\" && t.value === \"$\") {\n this.i++;\n return { t: \"field\", index: this.parsePostfix(noGt) };\n }\n\n if (t.kind === \"op\" && t.value === \"(\") {\n this.i++;\n const first = this.parseExpr();\n if (this.isOp(\",\")) {\n const subscripts = [first];\n while (this.eatOp(\",\")) subscripts.push(this.parseExpr());\n this.expectOp(\")\");\n if (this.isKeyword(\"in\")) {\n this.i++;\n const array = this.next().value;\n return { t: \"in\", subscripts, array };\n }\n return { t: \"grouping\", expr: first };\n }\n this.expectOp(\")\");\n return { t: \"grouping\", expr: first };\n }\n\n if (t.kind === \"keyword\" && t.value === \"getline\") {\n this.i++;\n let target: Expr | undefined;\n if (this.peek().kind === \"name\" || this.isOp(\"$\")) target = this.parsePostfix(noGt);\n if (this.isOp(\"<\")) {\n this.i++;\n const source = this.parseConcat(noGt);\n const node: Expr = { t: \"getline\", mode: \"file\", source };\n if (target) (node as { target?: Expr }).target = target;\n return node;\n }\n const node: Expr = { t: \"getline\", mode: \"plain\" };\n if (target) (node as { target?: Expr }).target = target;\n return node;\n }\n\n if (t.kind === \"builtin\") {\n this.i++;\n const args: Expr[] = [];\n if (this.eatOp(\"(\")) {\n if (!this.isOp(\")\")) {\n do {\n this.skipNewlines();\n args.push(this.parseTernary(false));\n } while (this.eatOp(\",\"));\n }\n this.expectOp(\")\");\n }\n return { t: \"builtin\", name: t.value, args };\n }\n\n if (t.kind === \"func_name\") {\n this.i++;\n this.expectOp(\"(\");\n const args: Expr[] = [];\n if (!this.isOp(\")\")) {\n do {\n this.skipNewlines();\n args.push(this.parseTernary(false));\n } while (this.eatOp(\",\"));\n }\n this.expectOp(\")\");\n return { t: \"call\", name: t.value, args };\n }\n\n if (t.kind === \"name\") {\n this.i++;\n if (this.eatOp(\"[\")) {\n const subscripts: Expr[] = [];\n do {\n subscripts.push(this.parseExpr());\n } while (this.eatOp(\",\"));\n this.expectOp(\"]\");\n return { t: \"index\", name: t.value, subscripts };\n }\n return { t: \"var\", name: t.value };\n }\n\n throw new AwkError(`syntax error at or near '${t.value || \"end of input\"}'`);\n }\n}\n\nfunction isLvalue(expr: Expr): boolean {\n return expr.t === \"var\" || expr.t === \"field\" || expr.t === \"index\";\n}\n\n// ── runtime values ──────────────────────────────────────────────────────────\n\n/** An awk value is a number, a string, or a \"strnum\" from input. */\nclass Value {\n constructor(\n readonly num: number,\n readonly str: string,\n readonly isNum: boolean,\n /** Came from input/field/getline and looks numeric — compares numerically. */\n readonly strnum = false,\n ) {}\n\n static fromNumber(n: number): Value {\n return new Value(n, \"\", true);\n }\n static fromString(s: string): Value {\n return new Value(0, s, false);\n }\n /** Field/input values: numeric-looking strings compare as numbers. */\n static fromInput(s: string): Value {\n const trimmed = s.trim();\n const looksNumeric = trimmed !== \"\" && /^[+-]?(\\d+\\.?\\d*|\\.\\d+)([eE][+-]?\\d+)?$/.test(trimmed);\n return new Value(looksNumeric ? Number(trimmed) : 0, s, false, looksNumeric);\n }\n static readonly uninitialized = new Value(0, \"\", false, true);\n}\n\n// ── interpreter ─────────────────────────────────────────────────────────────\n\nclass NextSignal {}\nclass NextFileSignal {}\nclass ExitSignal {\n constructor(readonly code: number) {}\n}\nclass ReturnSignal {\n constructor(readonly value: Value) {}\n}\nclass BreakSignal {}\nclass ContinueSignal {}\n\ninterface OutputTarget {\n write(text: string): void;\n close(): void;\n}\n\nclass Interpreter {\n private readonly globals = new Map<string, Value>();\n private readonly arrays = new Map<string, Map<string, Value>>();\n private locals: Array<Map<string, Value | Map<string, Value>>> = [];\n private fields: string[] = [];\n private record = \"\";\n private fieldsValid = false;\n private recordValid = true;\n private readonly outputs = new Map<string, OutputTarget>();\n private readonly inputs = new Map<string, { lines: string[]; index: number }>();\n private exitCode = 0;\n private randomSeed = 1;\n private pendingOutput = \"\";\n\n constructor(\n private readonly program: Program,\n private readonly ctx: ExecContext,\n ) {\n this.setGlobal(\"FS\", Value.fromString(\" \"));\n this.setGlobal(\"OFS\", Value.fromString(\" \"));\n this.setGlobal(\"ORS\", Value.fromString(\"\\n\"));\n this.setGlobal(\"RS\", Value.fromString(\"\\n\"));\n this.setGlobal(\"NR\", Value.fromNumber(0));\n this.setGlobal(\"NF\", Value.fromNumber(0));\n this.setGlobal(\"FNR\", Value.fromNumber(0));\n this.setGlobal(\"FILENAME\", Value.fromString(\"\"));\n this.setGlobal(\"SUBSEP\", Value.fromString(\"\\x1c\"));\n this.setGlobal(\"RSTART\", Value.fromNumber(0));\n this.setGlobal(\"RLENGTH\", Value.fromNumber(-1));\n this.setGlobal(\"CONVFMT\", Value.fromString(\"%.6g\"));\n this.setGlobal(\"OFMT\", Value.fromString(\"%.6g\"));\n\n const environ = new Map<string, Value>();\n for (const [key, value] of Object.entries(ctx.env)) environ.set(key, Value.fromInput(value));\n this.arrays.set(\"ENVIRON\", environ);\n }\n\n // ── variable access ───────────────────────────────────────────────────────\n\n private setGlobal(name: string, value: Value): void {\n this.globals.set(name, value);\n }\n\n private getVar(name: string): Value {\n for (let i = this.locals.length - 1; i >= 0; i--) {\n const scope = this.locals[i]!;\n if (scope.has(name)) {\n const found = scope.get(name)!;\n return found instanceof Map ? Value.uninitialized : found;\n }\n }\n if (name === \"NF\") {\n this.ensureFields();\n return Value.fromNumber(this.fields.length);\n }\n return this.globals.get(name) ?? Value.uninitialized;\n }\n\n private setVar(name: string, value: Value): void {\n for (let i = this.locals.length - 1; i >= 0; i--) {\n const scope = this.locals[i]!;\n if (scope.has(name)) {\n scope.set(name, value);\n return;\n }\n }\n if (name === \"NF\") {\n this.ensureFields();\n const n = Math.max(0, Math.trunc(this.toNum(value)));\n while (this.fields.length > n) this.fields.pop();\n while (this.fields.length < n) this.fields.push(\"\");\n this.recordValid = false;\n this.globals.set(\"NF\", Value.fromNumber(n));\n return;\n }\n this.globals.set(name, value);\n }\n\n private getArray(name: string): Map<string, Value> {\n for (let i = this.locals.length - 1; i >= 0; i--) {\n const scope = this.locals[i]!;\n if (scope.has(name)) {\n const found = scope.get(name)!;\n if (found instanceof Map) return found;\n const created = new Map<string, Value>();\n scope.set(name, created);\n return created;\n }\n }\n let array = this.arrays.get(name);\n if (!array) {\n array = new Map();\n this.arrays.set(name, array);\n }\n return array;\n }\n\n // ── record and fields ─────────────────────────────────────────────────────\n\n setRecord(line: string): void {\n this.record = line;\n this.recordValid = true;\n this.fieldsValid = false;\n }\n\n private ensureFields(): void {\n if (this.fieldsValid) return;\n if (!this.recordValid) this.rebuildRecord();\n this.fields = splitRecord(this.record, this.toStr(this.getVar(\"FS\")));\n this.fieldsValid = true;\n this.globals.set(\"NF\", Value.fromNumber(this.fields.length));\n }\n\n private rebuildRecord(): void {\n this.record = this.fields.join(this.toStr(this.getVar(\"OFS\")));\n this.recordValid = true;\n }\n\n private getField(index: number): Value {\n if (index === 0) {\n if (!this.recordValid) this.rebuildRecord();\n return Value.fromInput(this.record);\n }\n this.ensureFields();\n return Value.fromInput(this.fields[index - 1] ?? \"\");\n }\n\n private setField(index: number, value: Value): void {\n if (index === 0) {\n this.setRecord(this.toStr(value));\n return;\n }\n this.ensureFields();\n while (this.fields.length < index) this.fields.push(\"\");\n this.fields[index - 1] = this.toStr(value);\n this.recordValid = false;\n this.globals.set(\"NF\", Value.fromNumber(this.fields.length));\n }\n\n // ── conversions ───────────────────────────────────────────────────────────\n\n private toNum(v: Value): number {\n if (v.isNum || v.strnum) return v.num;\n const m = /^[ \\t\\n]*[+-]?(\\d+\\.?\\d*|\\.\\d+)([eE][+-]?\\d+)?/.exec(v.str);\n return m ? Number(m[0]) : 0;\n }\n\n private toStr(v: Value): string {\n if (!v.isNum) return v.str;\n return this.numToStr(v.num, this.toStrRaw(this.globals.get(\"CONVFMT\")));\n }\n\n private toStrRaw(v: Value | undefined): string {\n return v === undefined ? \"%.6g\" : v.isNum ? String(v.num) : v.str;\n }\n\n private numToStr(n: number, format: string): string {\n if (Number.isInteger(n) && Math.abs(n) < 1e16) return String(n);\n if (!Number.isFinite(n)) return n > 0 ? \"inf\" : Number.isNaN(n) ? \"nan\" : \"-inf\";\n try {\n return formatPrintf(format, [String(n)]);\n } catch {\n return String(n);\n }\n }\n\n private toBool(v: Value): boolean {\n if (v.isNum) return v.num !== 0;\n if (v.strnum) return v.num !== 0;\n return v.str !== \"\";\n }\n\n private outputStr(v: Value): string {\n if (!v.isNum) return v.str;\n return this.numToStr(v.num, this.toStrRaw(this.globals.get(\"OFMT\")));\n }\n\n // ── output ────────────────────────────────────────────────────────────────\n\n private emit(text: string, redirect?: { op: \">\" | \">>\" | \"|\"; target: Expr }): void {\n if (!redirect) {\n this.pendingOutput += text;\n if (this.pendingOutput.length > 8192) this.flush();\n return;\n }\n const name = this.toStr(this.evaluate(redirect.target));\n let target = this.outputs.get(name);\n if (!target) {\n target = this.openOutput(name, redirect.op);\n this.outputs.set(name, target);\n }\n target.write(text);\n }\n\n flush(): void {\n if (this.pendingOutput !== \"\") {\n this.ctx.write(this.pendingOutput);\n this.pendingOutput = \"\";\n }\n }\n\n private openOutput(name: string, op: \">\" | \">>\" | \"|\"): OutputTarget {\n if (op === \"|\") {\n // Pipe to a command: buffer, then run it once on close.\n let buffer = \"\";\n const ctx = this.ctx;\n const self = this;\n return {\n write: (text) => {\n buffer += text;\n },\n close: () => {\n self.flush();\n const proc = ctx.kernel.spawn([\"/bin/sh\", \"-c\", name], {\n cwd: ctx.cwd,\n env: ctx.env,\n cred: ctx.cred,\n ppid: ctx.proc.pid,\n stdin: buffer,\n stdout: ctx.stdout,\n stderr: ctx.stderr,\n });\n void proc.wait();\n },\n };\n }\n\n if (name === \"/dev/stdout\" || name === \"-\") {\n return { write: (text) => this.ctx.write(text), close: () => {} };\n }\n if (name === \"/dev/stderr\") {\n return { write: (text) => this.ctx.stderr.write(text), close: () => {} };\n }\n\n const abs = this.ctx.path(name);\n if (op === \">\") this.ctx.vfs.writeFile(abs, \"\", { cred: this.ctx.cred });\n else if (!this.ctx.vfs.lexists(abs)) this.ctx.vfs.writeFile(abs, \"\", { cred: this.ctx.cred });\n return {\n write: (text) => this.ctx.vfs.appendFile(abs, text, { cred: this.ctx.cred }),\n close: () => {},\n };\n }\n\n closeAll(): void {\n for (const target of this.outputs.values()) target.close();\n this.outputs.clear();\n this.flush();\n }\n\n // ── evaluation ────────────────────────────────────────────────────────────\n\n evaluate(expr: Expr): Value {\n switch (expr.t) {\n case \"num\":\n return Value.fromNumber(expr.v);\n case \"str\":\n return Value.fromString(expr.v);\n case \"regex\":\n // A bare regex in value position matches $0.\n return Value.fromNumber(this.regexOf(expr.v).test(this.toStr(this.getField(0))) ? 1 : 0);\n case \"grouping\":\n return this.evaluate(expr.expr);\n case \"var\":\n return this.getVar(expr.name);\n case \"field\":\n return this.getField(Math.trunc(this.toNum(this.evaluate(expr.index))));\n case \"index\": {\n const key = this.subscriptKey(expr.subscripts);\n const array = this.getArray(expr.name);\n if (!array.has(key)) array.set(key, Value.uninitialized);\n return array.get(key)!;\n }\n case \"assign\":\n return this.assign(expr);\n case \"incdec\": {\n const old = this.toNum(this.readLvalue(expr.target));\n const next = expr.op === \"++\" ? old + 1 : old - 1;\n this.writeLvalue(expr.target, Value.fromNumber(next));\n return Value.fromNumber(expr.prefix ? next : old);\n }\n case \"unary\": {\n const operand = this.evaluate(expr.operand);\n if (expr.op === \"!\") return Value.fromNumber(this.toBool(operand) ? 0 : 1);\n if (expr.op === \"-\") return Value.fromNumber(-this.toNum(operand));\n return Value.fromNumber(+this.toNum(operand));\n }\n case \"binary\":\n return this.binary(expr);\n case \"ternary\":\n return this.toBool(this.evaluate(expr.cond)) ? this.evaluate(expr.yes) : this.evaluate(expr.no);\n case \"concat\":\n return Value.fromString(expr.parts.map((p) => this.toStr(this.evaluate(p))).join(\"\"));\n case \"match\": {\n const subject = this.toStr(this.evaluate(expr.left));\n const pattern = expr.right.t === \"regex\" ? expr.right.v : this.toStr(this.evaluate(expr.right));\n const matched = this.regexOf(pattern).test(subject);\n return Value.fromNumber(expr.negated ? (matched ? 0 : 1) : matched ? 1 : 0);\n }\n case \"in\": {\n const key = this.subscriptKey(expr.subscripts);\n return Value.fromNumber(this.getArray(expr.array).has(key) ? 1 : 0);\n }\n case \"builtin\":\n return this.callBuiltin(expr.name, expr.args);\n case \"call\":\n return this.callFunction(expr.name, expr.args);\n case \"getline\":\n return this.doGetline(expr);\n }\n }\n\n private binary(expr: Extract<Expr, { t: \"binary\" }>): Value {\n if (expr.op === \"&&\") {\n return Value.fromNumber(this.toBool(this.evaluate(expr.left)) && this.toBool(this.evaluate(expr.right)) ? 1 : 0);\n }\n if (expr.op === \"||\") {\n return Value.fromNumber(this.toBool(this.evaluate(expr.left)) || this.toBool(this.evaluate(expr.right)) ? 1 : 0);\n }\n\n const left = this.evaluate(expr.left);\n const right = this.evaluate(expr.right);\n\n if ([\"<\", \"<=\", \">\", \">=\", \"==\", \"!=\"].includes(expr.op)) {\n // Numeric comparison when both sides are numbers or numeric-looking input.\n const numeric = (left.isNum || left.strnum) && (right.isNum || right.strnum);\n let cmp: number;\n if (numeric) {\n const a = this.toNum(left);\n const b = this.toNum(right);\n cmp = a < b ? -1 : a > b ? 1 : 0;\n } else {\n const a = this.toStr(left);\n const b = this.toStr(right);\n cmp = a < b ? -1 : a > b ? 1 : 0;\n }\n const result =\n expr.op === \"<\" ? cmp < 0 : expr.op === \"<=\" ? cmp <= 0 : expr.op === \">\" ? cmp > 0 : expr.op === \">=\" ? cmp >= 0 : expr.op === \"==\" ? cmp === 0 : cmp !== 0;\n return Value.fromNumber(result ? 1 : 0);\n }\n\n const a = this.toNum(left);\n const b = this.toNum(right);\n switch (expr.op) {\n case \"+\":\n return Value.fromNumber(a + b);\n case \"-\":\n return Value.fromNumber(a - b);\n case \"*\":\n return Value.fromNumber(a * b);\n case \"/\":\n if (b === 0) throw new AwkError(\"division by zero\");\n return Value.fromNumber(a / b);\n case \"%\":\n if (b === 0) throw new AwkError(\"division by zero in %\");\n return Value.fromNumber(a % b);\n case \"^\":\n return Value.fromNumber(Math.pow(a, b));\n default:\n throw new AwkError(`unknown operator ${expr.op}`);\n }\n }\n\n private assign(expr: Extract<Expr, { t: \"assign\" }>): Value {\n const value = this.evaluate(expr.value);\n if (expr.op === \"=\") {\n this.writeLvalue(expr.target, value);\n return value;\n }\n const current = this.toNum(this.readLvalue(expr.target));\n const operand = this.toNum(value);\n let next: number;\n switch (expr.op) {\n case \"+=\":\n next = current + operand;\n break;\n case \"-=\":\n next = current - operand;\n break;\n case \"*=\":\n next = current * operand;\n break;\n case \"/=\":\n if (operand === 0) throw new AwkError(\"division by zero in /=\");\n next = current / operand;\n break;\n case \"%=\":\n if (operand === 0) throw new AwkError(\"division by zero in %=\");\n next = current % operand;\n break;\n default:\n next = Math.pow(current, operand);\n break;\n }\n const result = Value.fromNumber(next);\n this.writeLvalue(expr.target, result);\n return result;\n }\n\n private readLvalue(target: Expr): Value {\n return this.evaluate(target);\n }\n\n private writeLvalue(target: Expr, value: Value): void {\n switch (target.t) {\n case \"var\":\n this.setVar(target.name, value);\n return;\n case \"field\":\n this.setField(Math.trunc(this.toNum(this.evaluate(target.index))), value);\n return;\n case \"index\":\n this.getArray(target.name).set(this.subscriptKey(target.subscripts), value);\n return;\n case \"grouping\":\n this.writeLvalue(target.expr, value);\n return;\n default:\n throw new AwkError(\"assignment to a non-lvalue\");\n }\n }\n\n private subscriptKey(subscripts: Expr[]): string {\n const separator = this.toStr(this.getVar(\"SUBSEP\"));\n return subscripts.map((s) => this.toStr(this.evaluate(s))).join(separator);\n }\n\n private readonly regexCache = new Map<string, RegExp>();\n\n private regexOf(pattern: string): RegExp {\n let re = this.regexCache.get(pattern);\n if (!re) {\n re = new RegExp(translateEre(pattern));\n this.regexCache.set(pattern, re);\n }\n return re;\n }\n\n // ── built-in functions ────────────────────────────────────────────────────\n\n private callBuiltin(name: string, args: Expr[]): Value {\n const arg = (i: number): Value => (args[i] === undefined ? Value.uninitialized : this.evaluate(args[i]!));\n const num = (i: number) => this.toNum(arg(i));\n const str = (i: number) => this.toStr(arg(i));\n\n switch (name) {\n case \"length\": {\n if (args.length === 0) return Value.fromNumber([...this.toStr(this.getField(0))].length);\n const target = args[0]!;\n if (target.t === \"var\" && this.hasArray(target.name)) {\n return Value.fromNumber(this.getArray(target.name).size);\n }\n return Value.fromNumber([...str(0)].length);\n }\n case \"substr\": {\n const source = [...str(0)];\n let start = Math.round(num(1));\n let length = args.length > 2 ? Math.round(num(2)) : Infinity;\n if (start < 1) {\n if (Number.isFinite(length)) length += start - 1;\n start = 1;\n }\n if (length <= 0) return Value.fromString(\"\");\n return Value.fromString(source.slice(start - 1, Number.isFinite(length) ? start - 1 + length : undefined).join(\"\"));\n }\n case \"index\": {\n const haystack = [...str(0)];\n const needle = str(1);\n const idx = haystack.join(\"\").indexOf(needle);\n return Value.fromNumber(idx < 0 ? 0 : [...haystack.join(\"\").slice(0, idx)].length + 1);\n }\n case \"split\": {\n const source = str(0);\n const arrayName = args[1];\n if (!arrayName || (arrayName.t !== \"var\" && arrayName.t !== \"index\")) throw new AwkError(\"split: second argument must be an array\");\n const separator = args.length > 2 ? (args[2]!.t === \"regex\" ? args[2]!.v : this.toStr(this.evaluate(args[2]!))) : this.toStr(this.getVar(\"FS\"));\n const parts = splitRecord(source, separator);\n const array = this.getArray(arrayName.t === \"var\" ? arrayName.name : arrayName.name);\n array.clear();\n parts.forEach((part, idx) => array.set(String(idx + 1), Value.fromInput(part)));\n return Value.fromNumber(parts.length);\n }\n case \"sub\":\n case \"gsub\": {\n const pattern = args[0]!.t === \"regex\" ? args[0]!.v : str(0);\n const replacement = str(1);\n const target = args[2] ?? ({ t: \"field\", index: { t: \"num\", v: 0 } } as Expr);\n const subject = this.toStr(this.readLvalue(target));\n const re = new RegExp(translateEre(pattern), name === \"gsub\" ? \"g\" : \"\");\n let count = 0;\n const result = subject.replace(re, (...groups) => {\n count++;\n const match = groups[0] as string;\n return replacement.replace(/\\\\?&|\\\\\\\\/g, (token) => {\n if (token === \"&\") return match;\n if (token === \"\\\\&\") return \"&\";\n return \"\\\\\";\n });\n });\n if (count > 0) this.writeLvalue(target, Value.fromString(result));\n return Value.fromNumber(count);\n }\n case \"match\": {\n const subject = str(0);\n const pattern = args[1]!.t === \"regex\" ? args[1]!.v : this.toStr(this.evaluate(args[1]!));\n const m = new RegExp(translateEre(pattern)).exec(subject);\n if (!m) {\n this.setGlobal(\"RSTART\", Value.fromNumber(0));\n this.setGlobal(\"RLENGTH\", Value.fromNumber(-1));\n return Value.fromNumber(0);\n }\n this.setGlobal(\"RSTART\", Value.fromNumber(m.index + 1));\n this.setGlobal(\"RLENGTH\", Value.fromNumber(m[0].length));\n return Value.fromNumber(m.index + 1);\n }\n case \"sprintf\": {\n const format = str(0);\n const rest = args.slice(1).map((a) => this.outputStr(this.evaluate(a)));\n return Value.fromString(formatPrintf(format, rest));\n }\n case \"sin\":\n return Value.fromNumber(Math.sin(num(0)));\n case \"cos\":\n return Value.fromNumber(Math.cos(num(0)));\n case \"atan2\":\n return Value.fromNumber(Math.atan2(num(0), num(1)));\n case \"exp\":\n return Value.fromNumber(Math.exp(num(0)));\n case \"log\":\n return Value.fromNumber(Math.log(num(0)));\n case \"sqrt\":\n return Value.fromNumber(Math.sqrt(num(0)));\n case \"int\":\n return Value.fromNumber(Math.trunc(num(0)));\n case \"rand\": {\n // A small deterministic PRNG, so `srand(1)` reproduces a run.\n this.randomSeed = (this.randomSeed * 1103515245 + 12345) & 0x7fffffff;\n return Value.fromNumber(this.randomSeed / 0x7fffffff);\n }\n case \"srand\": {\n const previous = this.randomSeed;\n this.randomSeed = args.length ? Math.trunc(num(0)) : Math.trunc(Date.now() / 1000);\n return Value.fromNumber(previous);\n }\n case \"tolower\":\n return Value.fromString(str(0).toLowerCase());\n case \"toupper\":\n return Value.fromString(str(0).toUpperCase());\n case \"system\": {\n this.flush();\n this.closeAll();\n // Synchronous execution is not available here; report success and note\n // that the command was queued, matching the \"cannot block\" reality.\n const command = str(0);\n void this.ctx.kernel\n .spawn([\"/bin/sh\", \"-c\", command], {\n cwd: this.ctx.cwd,\n env: this.ctx.env,\n cred: this.ctx.cred,\n ppid: this.ctx.proc.pid,\n stdout: this.ctx.stdout,\n stderr: this.ctx.stderr,\n })\n .wait();\n return Value.fromNumber(0);\n }\n case \"close\": {\n const target = this.outputs.get(str(0));\n if (target) {\n target.close();\n this.outputs.delete(str(0));\n return Value.fromNumber(0);\n }\n this.inputs.delete(str(0));\n return Value.fromNumber(-1);\n }\n case \"fflush\":\n this.flush();\n return Value.fromNumber(0);\n default:\n throw new AwkError(`calling undefined function ${name}`);\n }\n }\n\n private hasArray(name: string): boolean {\n for (let i = this.locals.length - 1; i >= 0; i--) {\n const scope = this.locals[i]!;\n if (scope.has(name)) return scope.get(name) instanceof Map;\n }\n return this.arrays.has(name);\n }\n\n private callFunction(name: string, args: Expr[]): Value {\n const fn = this.program.functions.get(name);\n if (!fn) throw new AwkError(`calling undefined function ${name}`);\n if (this.locals.length > 250) throw new AwkError(\"function call nesting too deep\");\n\n const scope = new Map<string, Value | Map<string, Value>>();\n fn.params.forEach((param, idx) => {\n const arg = args[idx];\n if (arg === undefined) {\n scope.set(param, Value.uninitialized);\n return;\n }\n // Arrays are passed by reference, scalars by value.\n if (arg.t === \"var\" && this.hasArray(arg.name)) scope.set(param, this.getArray(arg.name));\n else scope.set(param, this.evaluate(arg));\n });\n // Extra parameters act as locals.\n for (let i = args.length; i < fn.params.length; i++) {\n if (!scope.has(fn.params[i]!)) scope.set(fn.params[i]!, Value.uninitialized);\n }\n\n this.locals.push(scope);\n try {\n this.execute(fn.body);\n return Value.uninitialized;\n } catch (e) {\n if (e instanceof ReturnSignal) return e.value;\n throw e;\n } finally {\n this.locals.pop();\n }\n }\n\n private doGetline(expr: Extract<Expr, { t: \"getline\" }>): Value {\n if (expr.mode === \"file\" && expr.source) {\n const name = this.toStr(this.evaluate(expr.source));\n let handle = this.inputs.get(name);\n if (!handle) {\n try {\n const text = this.ctx.vfs.readText(this.ctx.path(name), this.ctx.cred);\n handle = { lines: splitLines(new TextEncoder().encode(text)).lines, index: 0 };\n } catch {\n return Value.fromNumber(-1);\n }\n this.inputs.set(name, handle);\n }\n if (handle.index >= handle.lines.length) return Value.fromNumber(0);\n const line = handle.lines[handle.index++]!;\n if (expr.target) this.writeLvalue(expr.target, Value.fromInput(line));\n else {\n this.setRecord(line);\n this.setGlobal(\"NR\", Value.fromNumber(this.toNum(this.getVar(\"NR\")) + 1));\n }\n return Value.fromNumber(1);\n }\n\n // Plain `getline` from the main input stream.\n const line = this.mainInput?.();\n if (line === null || line === undefined) return Value.fromNumber(0);\n this.setGlobal(\"NR\", Value.fromNumber(this.toNum(this.getVar(\"NR\")) + 1));\n this.setGlobal(\"FNR\", Value.fromNumber(this.toNum(this.getVar(\"FNR\")) + 1));\n if (expr.target) this.writeLvalue(expr.target, Value.fromInput(line));\n else this.setRecord(line);\n return Value.fromNumber(1);\n }\n\n /** Installed by the driver so `getline` can pull the next record. */\n mainInput: (() => string | null) | null = null;\n\n // ── statements ────────────────────────────────────────────────────────────\n\n execute(stmt: Stmt): void {\n switch (stmt.t) {\n case \"block\":\n for (const s of stmt.body) this.execute(s);\n return;\n case \"empty\":\n return;\n case \"expr\":\n this.evaluate(stmt.expr);\n return;\n case \"print\": {\n const ofs = this.toStr(this.getVar(\"OFS\"));\n const ors = this.toStr(this.getVar(\"ORS\"));\n const text =\n stmt.args.length === 0\n ? this.toStr(this.getField(0))\n : stmt.args.map((a) => this.outputStr(this.evaluate(a))).join(ofs);\n this.emit(text + ors, stmt.redirect);\n return;\n }\n case \"printf\": {\n if (stmt.args.length === 0) throw new AwkError(\"printf: no format supplied\");\n const format = this.toStr(this.evaluate(stmt.args[0]!));\n const rest = stmt.args.slice(1).map((a) => {\n const v = this.evaluate(a);\n return v.isNum ? String(v.num) : v.str;\n });\n this.emit(formatPrintf(format, rest), stmt.redirect);\n return;\n }\n case \"if\":\n if (this.toBool(this.evaluate(stmt.cond))) this.execute(stmt.then);\n else if (stmt.else) this.execute(stmt.else);\n return;\n case \"while\":\n for (let guard = 0; guard < 100_000_000; guard++) {\n if (!this.toBool(this.evaluate(stmt.cond))) break;\n try {\n this.execute(stmt.body);\n } catch (e) {\n if (e instanceof BreakSignal) break;\n if (e instanceof ContinueSignal) continue;\n throw e;\n }\n }\n return;\n case \"do\":\n for (let guard = 0; guard < 100_000_000; guard++) {\n try {\n this.execute(stmt.body);\n } catch (e) {\n if (e instanceof BreakSignal) break;\n if (!(e instanceof ContinueSignal)) throw e;\n }\n if (!this.toBool(this.evaluate(stmt.cond))) break;\n }\n return;\n case \"for\": {\n if (stmt.init) this.execute(stmt.init);\n for (let guard = 0; guard < 100_000_000; guard++) {\n if (stmt.cond && !this.toBool(this.evaluate(stmt.cond))) break;\n try {\n this.execute(stmt.body);\n } catch (e) {\n if (e instanceof BreakSignal) break;\n if (!(e instanceof ContinueSignal)) throw e;\n }\n if (stmt.step) this.execute(stmt.step);\n }\n return;\n }\n case \"forin\": {\n const array = this.getArray(stmt.array);\n for (const key of [...array.keys()]) {\n this.setVar(stmt.name, Value.fromInput(key));\n try {\n this.execute(stmt.body);\n } catch (e) {\n if (e instanceof BreakSignal) break;\n if (!(e instanceof ContinueSignal)) throw e;\n }\n }\n return;\n }\n case \"delete\": {\n const array = this.getArray(stmt.name);\n if (stmt.subscripts.length === 0) array.clear();\n else array.delete(this.subscriptKey(stmt.subscripts));\n return;\n }\n case \"next\":\n throw new NextSignal();\n case \"nextfile\":\n throw new NextFileSignal();\n case \"break\":\n throw new BreakSignal();\n case \"continue\":\n throw new ContinueSignal();\n case \"return\":\n throw new ReturnSignal(stmt.value ? this.evaluate(stmt.value) : Value.uninitialized);\n case \"exit\":\n throw new ExitSignal(stmt.code ? Math.trunc(this.toNum(this.evaluate(stmt.code))) : this.exitCode);\n case \"getline\":\n this.evaluate(stmt.expr);\n return;\n }\n }\n\n // ── driver ────────────────────────────────────────────────────────────────\n\n setVariable(name: string, raw: string): void {\n this.setGlobal(name, Value.fromInput(raw));\n }\n\n runBegin(): boolean {\n for (const rule of this.program.rules) {\n if (rule.kind !== \"BEGIN\" || !rule.action) continue;\n try {\n this.execute(rule.action);\n } catch (e) {\n if (e instanceof ExitSignal) {\n this.exitCode = e.code;\n return false;\n }\n throw e;\n }\n }\n return true;\n }\n\n runRecord(line: string, filename: string): boolean {\n this.setRecord(line);\n this.setGlobal(\"NR\", Value.fromNumber(this.toNum(this.getVar(\"NR\")) + 1));\n this.setGlobal(\"FNR\", Value.fromNumber(this.toNum(this.getVar(\"FNR\")) + 1));\n this.setGlobal(\"FILENAME\", Value.fromString(filename));\n\n for (const rule of this.program.rules) {\n if (rule.kind !== \"pattern\") continue;\n let matched: boolean;\n\n if (!rule.pattern) {\n matched = true;\n } else if (rule.rangeEnd) {\n if (rule.rangeActive) {\n matched = true;\n if (this.toBool(this.evaluate(rule.rangeEnd))) rule.rangeActive = false;\n } else if (this.toBool(this.evaluate(rule.pattern))) {\n matched = true;\n rule.rangeActive = !this.toBool(this.evaluate(rule.rangeEnd));\n } else {\n matched = false;\n }\n } else {\n matched = this.toBool(this.evaluate(rule.pattern));\n }\n\n if (!matched) continue;\n try {\n if (rule.action) this.execute(rule.action);\n else this.emit(this.toStr(this.getField(0)) + this.toStr(this.getVar(\"ORS\")));\n } catch (e) {\n if (e instanceof NextSignal) return true;\n if (e instanceof NextFileSignal) return true;\n if (e instanceof ExitSignal) {\n this.exitCode = e.code;\n return false;\n }\n throw e;\n }\n }\n return true;\n }\n\n runEnd(): void {\n for (const rule of this.program.rules) {\n if (rule.kind !== \"END\" || !rule.action) continue;\n try {\n this.execute(rule.action);\n } catch (e) {\n if (e instanceof ExitSignal) {\n this.exitCode = e.code;\n return;\n }\n throw e;\n }\n }\n }\n\n get status(): number {\n return this.exitCode;\n }\n}\n\n/** Split a record using awk's FS rules. */\nfunction splitRecord(record: string, fs: string): string[] {\n if (record === \"\") return [];\n if (fs === \" \") {\n const trimmed = record.replace(/^[ \\t\\n]+|[ \\t\\n]+$/g, \"\");\n return trimmed === \"\" ? [] : trimmed.split(/[ \\t\\n]+/);\n }\n if (fs === \"\") return [...record];\n if (fs.length === 1 && !\"\\\\^$.[]|()*+?{}\".includes(fs)) return record.split(fs);\n return record.split(new RegExp(translateEre(fs)));\n}\n\nconst ERE_CLASSES: Record<string, string> = {\n alpha: \"A-Za-z\",\n digit: \"0-9\",\n alnum: \"A-Za-z0-9\",\n upper: \"A-Z\",\n lower: \"a-z\",\n space: \" \\\\t\\\\n\\\\r\\\\f\\\\v\",\n blank: \" \\\\t\",\n punct: \"!-/:-@\\\\[-`{-~\",\n print: \" -~\",\n graph: \"!-~\",\n cntrl: \"\\\\x00-\\\\x1f\\\\x7f\",\n xdigit: \"0-9A-Fa-f\",\n};\n\n/** Translate a POSIX ERE into JavaScript regex source. */\nexport function translateEre(pattern: string): string {\n let out = \"\";\n let i = 0;\n while (i < pattern.length) {\n const c = pattern[i]!;\n if (c === \"\\\\\") {\n const next = pattern[i + 1];\n if (next === undefined) {\n out += \"\\\\\\\\\";\n break;\n }\n out += \"\\\\\" + next;\n i += 2;\n continue;\n }\n if (c === \"[\") {\n const end = findClassEnd(pattern, i);\n if (end > 0) {\n out += pattern.slice(i, end + 1).replace(/\\[:([a-z]+):\\]/g, (_, name: string) => ERE_CLASSES[name] ?? \"\");\n i = end + 1;\n continue;\n }\n out += \"\\\\[\";\n i++;\n continue;\n }\n out += c;\n i++;\n }\n return out;\n}\n\nfunction findClassEnd(pattern: string, start: number): number {\n let i = start + 1;\n if (pattern[i] === \"^\") i++;\n if (pattern[i] === \"]\") i++;\n while (i < pattern.length) {\n if (pattern.startsWith(\"[:\", i)) {\n const close = pattern.indexOf(\":]\", i);\n if (close > 0) {\n i = close + 2;\n continue;\n }\n }\n if (pattern[i] === \"]\") return i;\n i++;\n }\n return -1;\n}\n\n// ── command entry point ─────────────────────────────────────────────────────\n\nexport async function runAwk(ctx: ExecContext): Promise<number> {\n const args = parseArgs(ctx.args, [\n { short: \"F\", long: \"field-separator\", arg: true },\n { short: \"v\", long: \"assign\", arg: true, multiple: true },\n { short: \"f\", long: \"file\", arg: true, multiple: true },\n { long: \"help\" },\n { long: \"version\" },\n ]);\n\n if (args.has(\"version\")) {\n ctx.line(\"awk version 20240101 (SandboxedJS)\");\n return 0;\n }\n if (args.has(\"help\")) {\n ctx.line(\"Usage: awk [-F fs] [-v var=value] ['prog' | -f progfile] [file ...]\");\n return 0;\n }\n\n let source = \"\";\n const files = args.list(\"file\");\n if (files.length) {\n for (const file of files) {\n try {\n source += ctx.vfs.readText(ctx.path(file), ctx.cred) + \"\\n\";\n } catch (e) {\n return ctx.reportError(e, file);\n }\n }\n } else {\n const program = args.positional.shift();\n if (program === undefined) {\n ctx.warn(\"usage: awk [-F fs] [-v var=value] ['prog' | -f progfile] [file ...]\");\n return 2;\n }\n source = program;\n }\n\n let program: Program;\n try {\n program = new AwkParser(tokenize(source)).parse();\n } catch (e) {\n ctx.warn(`syntax error\\n\\t${e instanceof Error ? e.message : String(e)}`);\n return 2;\n }\n\n const interpreter = new Interpreter(program, ctx);\n\n const fs = args.str(\"field-separator\");\n if (fs !== undefined) interpreter.setVariable(\"FS\", fs === \"t\" ? \"\\t\" : fs);\n for (const assignment of args.list(\"assign\")) {\n const eq = assignment.indexOf(\"=\");\n if (eq > 0) interpreter.setVariable(assignment.slice(0, eq), unescapeAssign(assignment.slice(eq + 1)));\n }\n\n // Operands may be `var=value` assignments interleaved with filenames.\n const operands = args.positional;\n\n try {\n if (!interpreter.runBegin()) {\n interpreter.runEnd();\n interpreter.closeAll();\n return interpreter.status;\n }\n\n const inputs: Array<{ name: string; lines: string[] }> = [];\n const pendingAssignments: Array<{ index: number; name: string; value: string }> = [];\n\n if (operands.length === 0) {\n inputs.push({ name: \"\", lines: splitLines(await ctx.stdin.readAll()).lines });\n } else {\n for (const operand of operands) {\n const m = /^([A-Za-z_][A-Za-z0-9_]*)=([\\s\\S]*)$/.exec(operand);\n if (m) {\n pendingAssignments.push({ index: inputs.length, name: m[1]!, value: m[2]! });\n continue;\n }\n if (operand === \"-\") {\n inputs.push({ name: \"-\", lines: splitLines(await ctx.stdin.readAll()).lines });\n continue;\n }\n try {\n const bytes = ctx.vfs.readFile(ctx.path(operand), ctx.cred);\n inputs.push({ name: operand, lines: splitLines(bytes).lines });\n } catch (e) {\n ctx.reportError(e, operand);\n return 2;\n }\n }\n }\n\n let queue: string[] = [];\n let queueIndex = 0;\n interpreter.mainInput = () => (queueIndex < queue.length ? queue[queueIndex++]! : null);\n\n outer: for (let fileIndex = 0; fileIndex < inputs.length; fileIndex++) {\n for (const assignment of pendingAssignments.filter((a) => a.index === fileIndex)) {\n interpreter.setVariable(assignment.name, unescapeAssign(assignment.value));\n }\n const input = inputs[fileIndex]!;\n queue = input.lines;\n queueIndex = 0;\n interpreter.setVariable(\"FNR\", \"0\");\n while (queueIndex < queue.length) {\n const line = queue[queueIndex++]!;\n if (!interpreter.runRecord(line, input.name)) break outer;\n }\n }\n\n interpreter.runEnd();\n interpreter.closeAll();\n return interpreter.status;\n } catch (e) {\n interpreter.closeAll();\n ctx.warn(e instanceof Error ? e.message : String(e));\n return 2;\n }\n}\n\nfunction unescapeAssign(value: string): string {\n return value.replace(/\\\\(.)/g, (_, c: string) => ({ n: \"\\n\", t: \"\\t\", r: \"\\r\", \"\\\\\": \"\\\\\" })[c] ?? c);\n}\n","/** Text processing filters: head, tail, sort, uniq, wc, cut, tr, sed, awk, … */\n\nimport { defineCommand, type Command } from \"../kernel/command.js\";\nimport { parseArgs, parseSize } from \"../util/args.js\";\nimport { readInputs, splitLines, joinLines, versionCompare, displayWidth } from \"./helpers.js\";\nimport { formatPrintf } from \"../util/printf.js\";\nimport { runSed } from \"./sed.js\";\nimport { runAwk } from \"./awk.js\";\nimport * as P from \"../fs/path.js\";\n\nconst decoder = new TextDecoder();\n\n// ── head / tail ─────────────────────────────────────────────────────────────\n\nexport const head: Command = defineCommand({\n name: \"head\",\n path: \"/usr/bin/head\",\n summary: \"output the first part of files\",\n usage: \"head [-n LINES] [-c BYTES] [FILE]...\",\n async run(ctx) {\n const args = parseArgs(\n ctx.args,\n [\n { short: \"n\", long: \"lines\", arg: true, default: \"10\" },\n { short: \"c\", long: \"bytes\", arg: true },\n { short: \"q\", long: \"quiet\" },\n { short: \"v\", long: \"verbose\" },\n { short: \"z\", long: \"zero-terminated\" },\n ],\n { numericShortcut: \"lines\" },\n );\n\n const { sources, ok } = await readInputs(ctx, args.positional, { stdinName: \"standard input\" });\n const showHeaders = (sources.length > 1 || args.has(\"verbose\")) && !args.has(\"quiet\");\n\n sources.forEach((source, index) => {\n if (showHeaders) {\n if (index > 0) ctx.line();\n ctx.line(`==> ${source.name} <==`);\n }\n const byteSpec = args.str(\"bytes\");\n if (byteSpec !== undefined) {\n const count = parseCount(byteSpec);\n ctx.write(count.fromEnd ? source.bytes.subarray(0, Math.max(0, source.bytes.length - count.value)) : source.bytes.subarray(0, count.value));\n return;\n }\n const count = parseCount(args.str(\"lines\", \"10\")!);\n const { lines, trailingNewline } = splitLines(source.bytes);\n const kept = count.fromEnd ? lines.slice(0, Math.max(0, lines.length - count.value)) : lines.slice(0, count.value);\n ctx.write(joinLines(kept, trailingNewline || kept.length < lines.length));\n });\n\n return ok ? 0 : 1;\n },\n});\n\nfunction parseCount(spec: string): { value: number; fromEnd: boolean } {\n const fromEnd = spec.startsWith(\"-\");\n const body = spec.replace(/^[+-]/, \"\");\n const size = parseSize(body);\n return { value: size ?? (Number(body) || 0), fromEnd };\n}\n\nexport const tail: Command = defineCommand({\n name: \"tail\",\n path: \"/usr/bin/tail\",\n summary: \"output the last part of files\",\n usage: \"tail [-n LINES] [-c BYTES] [-f] [FILE]...\",\n async run(ctx) {\n const args = parseArgs(\n ctx.args,\n [\n { short: \"n\", long: \"lines\", arg: true, default: \"10\" },\n { short: \"c\", long: \"bytes\", arg: true },\n { short: \"f\", long: \"follow\" },\n { short: \"q\", long: \"quiet\" },\n { short: \"v\", long: \"verbose\" },\n { short: \"F\" },\n { long: \"pid\", arg: true },\n { short: \"s\", long: \"sleep-interval\", arg: true },\n ],\n { numericShortcut: \"lines\" },\n );\n\n const { sources, ok } = await readInputs(ctx, args.positional, { stdinName: \"standard input\" });\n const showHeaders = (sources.length > 1 || args.has(\"verbose\")) && !args.has(\"quiet\");\n\n sources.forEach((source, index) => {\n if (showHeaders) {\n if (index > 0) ctx.line();\n ctx.line(`==> ${source.name} <==`);\n }\n const byteSpec = args.str(\"bytes\");\n if (byteSpec !== undefined) {\n const plus = byteSpec.startsWith(\"+\");\n const count = parseCount(byteSpec);\n ctx.write(plus ? source.bytes.subarray(count.value - 1) : source.bytes.subarray(Math.max(0, source.bytes.length - count.value)));\n return;\n }\n const spec = args.str(\"lines\", \"10\")!;\n const plus = spec.startsWith(\"+\");\n const count = parseCount(spec);\n const { lines, trailingNewline } = splitLines(source.bytes);\n const kept = plus ? lines.slice(Math.max(0, count.value - 1)) : lines.slice(Math.max(0, lines.length - count.value));\n ctx.write(joinLines(kept, trailingNewline));\n });\n\n if (args.has(\"follow\") && args.positional.length > 0) {\n await followFiles(ctx, args.positional, Number(args.str(\"sleep-interval\", \"1\")) * 1000);\n }\n return ok ? 0 : 1;\n },\n});\n\nasync function followFiles(ctx: Parameters<Command[\"run\"]>[0], paths: string[], intervalMs: number): Promise<void> {\n const offsets = new Map<string, number>();\n for (const path of paths) {\n try {\n offsets.set(path, ctx.vfs.stat(ctx.path(path), { cred: ctx.cred }).size);\n } catch {\n offsets.set(path, 0);\n }\n }\n while (!ctx.signal.aborted) {\n await new Promise((r) => setTimeout(r, intervalMs));\n if (ctx.signal.aborted) break;\n for (const path of paths) {\n try {\n const bytes = ctx.vfs.readFile(ctx.path(path), ctx.cred);\n const previous = offsets.get(path) ?? 0;\n if (bytes.length > previous) {\n ctx.write(bytes.subarray(previous));\n offsets.set(path, bytes.length);\n } else if (bytes.length < previous) {\n offsets.set(path, 0);\n }\n } catch {\n /* file vanished */\n }\n }\n }\n}\n\n// ── wc ──────────────────────────────────────────────────────────────────────\n\nexport const wc: Command = defineCommand({\n name: \"wc\",\n path: \"/usr/bin/wc\",\n summary: \"print newline, word, and byte counts\",\n usage: \"wc [-clmwL] [FILE]...\",\n async run(ctx) {\n const args = parseArgs(ctx.args, [\n { short: \"c\", long: \"bytes\" },\n { short: \"m\", long: \"chars\" },\n { short: \"l\", long: \"lines\" },\n { short: \"w\", long: \"words\" },\n { short: \"L\", long: \"max-line-length\" },\n ]);\n const { sources, ok } = await readInputs(ctx, args.positional, { stdinName: \"\" });\n const anyFlag = args.has(\"bytes\") || args.has(\"chars\") || args.has(\"lines\") || args.has(\"words\") || args.has(\"max-line-length\");\n\n const totals = { lines: 0, words: 0, bytes: 0, chars: 0, maxLine: 0 };\n const rows: Array<{ counts: typeof totals; name: string }> = [];\n\n for (const source of sources) {\n const text = decoder.decode(source.bytes);\n const counts = {\n lines: (text.match(/\\n/g) ?? []).length,\n words: text.split(/\\s+/).filter((w) => w !== \"\").length,\n bytes: source.bytes.length,\n chars: [...text].length,\n maxLine: Math.max(0, ...text.split(\"\\n\").map((l) => displayWidth(l))),\n };\n totals.lines += counts.lines;\n totals.words += counts.words;\n totals.bytes += counts.bytes;\n totals.chars += counts.chars;\n totals.maxLine = Math.max(totals.maxLine, counts.maxLine);\n rows.push({ counts, name: source.name });\n }\n\n if (sources.length > 1) rows.push({ counts: totals, name: \"total\" });\n\n // With no file operands `wc` reads stdin and prints unpadded counts; with\n // operands the columns are aligned, as coreutils does.\n const width =\n args.positional.length === 0\n ? 0\n : Math.max(...rows.flatMap((r) => [r.counts.lines, r.counts.words, r.counts.bytes].map((n) => String(n).length)));\n for (const row of rows) {\n const parts: string[] = [];\n const push = (value: number) => parts.push(String(value).padStart(width));\n if (!anyFlag) {\n push(row.counts.lines);\n push(row.counts.words);\n push(row.counts.bytes);\n } else {\n if (args.has(\"lines\")) push(row.counts.lines);\n if (args.has(\"words\")) push(row.counts.words);\n if (args.has(\"chars\")) push(row.counts.chars);\n if (args.has(\"bytes\")) push(row.counts.bytes);\n if (args.has(\"max-line-length\")) push(row.counts.maxLine);\n }\n ctx.line(parts.join(\" \") + (row.name ? ` ${row.name}` : \"\"));\n }\n return ok ? 0 : 1;\n },\n});\n\n// ── sort / uniq ─────────────────────────────────────────────────────────────\n\nexport const sort: Command = defineCommand({\n name: \"sort\",\n path: \"/usr/bin/sort\",\n summary: \"sort lines of text files\",\n usage: \"sort [OPTION]... [FILE]...\",\n async run(ctx) {\n const args = parseArgs(ctx.args, [\n { short: \"n\", long: \"numeric-sort\" },\n { short: \"g\", long: \"general-numeric-sort\" },\n { short: \"h\", long: \"human-numeric-sort\" },\n { short: \"r\", long: \"reverse\" },\n { short: \"u\", long: \"unique\" },\n { short: \"f\", long: \"ignore-case\" },\n { short: \"b\", long: \"ignore-leading-blanks\" },\n { short: \"V\", long: \"version-sort\" },\n { short: \"R\", long: \"random-sort\" },\n { short: \"k\", long: \"key\", arg: true, multiple: true },\n { short: \"t\", long: \"field-separator\", arg: true },\n { short: \"c\", long: \"check\" },\n { short: \"s\", long: \"stable\" },\n { short: \"z\", long: \"zero-terminated\" },\n { short: \"o\", long: \"output\", arg: true },\n ]);\n\n const { sources, ok } = await readInputs(ctx, args.positional);\n const all: string[] = [];\n for (const source of sources) all.push(...splitLines(source.bytes).lines);\n\n const separator = args.str(\"field-separator\");\n const keys = args.list(\"key\");\n\n const fieldOf = (line: string, spec: string): string => {\n const m = /^(\\d+)(?:\\.(\\d+))?([a-zA-Z]*)(?:,(\\d+)(?:\\.(\\d+))?([a-zA-Z]*))?$/.exec(spec);\n if (!m) return line;\n const start = Number(m[1]) - 1;\n const end = m[4] !== undefined ? Number(m[4]) : undefined;\n const fields = separator === undefined ? line.trim().split(/\\s+/) : line.split(separator);\n const slice = fields.slice(start, end === undefined ? undefined : end);\n return slice.join(separator ?? \" \");\n };\n\n const normalize = (line: string): string => {\n let value = keys.length ? fieldOf(line, keys[0]!) : line;\n if (args.has(\"ignore-leading-blanks\")) value = value.replace(/^\\s+/, \"\");\n if (args.has(\"ignore-case\")) value = value.toLowerCase();\n return value;\n };\n\n const compare = (a: string, b: string): number => {\n const x = normalize(a);\n const y = normalize(b);\n if (args.has(\"numeric-sort\") || args.has(\"general-numeric-sort\")) {\n const nx = parseFloat(x) || 0;\n const ny = parseFloat(y) || 0;\n if (nx !== ny) return nx - ny;\n return 0;\n }\n if (args.has(\"human-numeric-sort\")) {\n const nx = parseSize(x.trim()) ?? parseFloat(x) ?? 0;\n const ny = parseSize(y.trim()) ?? parseFloat(y) ?? 0;\n if (nx !== ny) return nx - ny;\n return 0;\n }\n if (args.has(\"version-sort\")) return versionCompare(x, y);\n return x < y ? -1 : x > y ? 1 : 0;\n };\n\n if (args.has(\"check\")) {\n for (let i = 1; i < all.length; i++) {\n if (compare(all[i - 1]!, all[i]!) > 0) {\n ctx.warn(`-:${i + 1}: disorder: ${all[i]}`);\n return 1;\n }\n }\n return 0;\n }\n\n let result = all.slice();\n if (args.has(\"random-sort\")) {\n for (let i = result.length - 1; i > 0; i--) {\n const j = Math.floor(Math.random() * (i + 1));\n [result[i], result[j]] = [result[j]!, result[i]!];\n }\n } else {\n result.sort(compare);\n if (args.has(\"reverse\")) result.reverse();\n }\n if (args.has(\"unique\")) {\n result = result.filter((line, idx) => idx === 0 || compare(result[idx - 1]!, line) !== 0);\n }\n\n const output = joinLines(result, true);\n const target = args.str(\"output\");\n if (target) ctx.vfs.writeFile(ctx.path(target), output, { cred: ctx.cred });\n else ctx.write(output);\n return ok ? 0 : 1;\n },\n});\n\nexport const uniq: Command = defineCommand({\n name: \"uniq\",\n path: \"/usr/bin/uniq\",\n summary: \"report or omit repeated lines\",\n usage: \"uniq [OPTION]... [INPUT [OUTPUT]]\",\n async run(ctx) {\n const args = parseArgs(ctx.args, [\n { short: \"c\", long: \"count\" },\n { short: \"d\", long: \"repeated\" },\n { short: \"u\", long: \"unique\" },\n { short: \"i\", long: \"ignore-case\" },\n { short: \"D\", long: \"all-repeated\" },\n { short: \"f\", long: \"skip-fields\", arg: true },\n { short: \"s\", long: \"skip-chars\", arg: true },\n { short: \"w\", long: \"check-chars\", arg: true },\n ]);\n\n const [input, output] = args.positional;\n const { sources, ok } = await readInputs(ctx, input ? [input] : []);\n const lines = sources.flatMap((s) => splitLines(s.bytes).lines);\n\n const key = (line: string): string => {\n let value = line;\n const skipFields = args.num(\"skip-fields\", 0)!;\n if (skipFields > 0) value = value.trim().split(/\\s+/).slice(skipFields).join(\" \");\n const skipChars = args.num(\"skip-chars\", 0)!;\n if (skipChars > 0) value = value.slice(skipChars);\n const checkChars = args.num(\"check-chars\");\n if (checkChars !== undefined) value = value.slice(0, checkChars);\n return args.has(\"ignore-case\") ? value.toLowerCase() : value;\n };\n\n const groups: Array<{ line: string; count: number }> = [];\n for (const line of lines) {\n const last = groups[groups.length - 1];\n if (last && key(last.line) === key(line)) last.count++;\n else groups.push({ line, count: 1 });\n }\n\n const out: string[] = [];\n for (const group of groups) {\n if (args.has(\"repeated\") && group.count < 2) continue;\n if (args.has(\"unique\") && group.count > 1) continue;\n if (args.has(\"all-repeated\")) {\n if (group.count < 2) continue;\n for (let i = 0; i < group.count; i++) out.push(group.line);\n continue;\n }\n out.push(args.has(\"count\") ? `${String(group.count).padStart(7)} ${group.line}` : group.line);\n }\n\n const text = joinLines(out, true);\n if (output) ctx.vfs.writeFile(ctx.path(output), text, { cred: ctx.cred });\n else ctx.write(text);\n return ok ? 0 : 1;\n },\n});\n\n// ── cut / paste / tr ────────────────────────────────────────────────────────\n\nexport const cut: Command = defineCommand({\n name: \"cut\",\n path: \"/usr/bin/cut\",\n summary: \"remove sections from each line of files\",\n usage: \"cut OPTION... [FILE]...\",\n async run(ctx) {\n const args = parseArgs(ctx.args, [\n { short: \"d\", long: \"delimiter\", arg: true, default: \"\\t\" },\n { short: \"f\", long: \"fields\", arg: true },\n { short: \"c\", long: \"characters\", arg: true },\n { short: \"b\", long: \"bytes\", arg: true },\n { short: \"s\", long: \"only-delimited\" },\n { long: \"complement\" },\n { long: \"output-delimiter\", arg: true },\n ]);\n\n const spec = args.str(\"fields\") ?? args.str(\"characters\") ?? args.str(\"bytes\");\n if (spec === undefined) return ctx.fail(\"you must specify a list of bytes, characters, or fields\", 1);\n\n const ranges = parseRanges(spec);\n const delimiter = args.str(\"delimiter\", \"\\t\")!;\n const outputDelimiter = args.str(\"output-delimiter\", delimiter)!;\n const byField = args.has(\"fields\");\n\n const { sources, ok } = await readInputs(ctx, args.positional);\n for (const source of sources) {\n const { lines, trailingNewline } = splitLines(source.bytes);\n const out = lines.flatMap((line) => {\n if (byField) {\n if (!line.includes(delimiter)) return args.has(\"only-delimited\") ? [] : [line];\n const fields = line.split(delimiter);\n const picked = pick(fields, ranges, args.has(\"complement\"));\n return [picked.join(outputDelimiter)];\n }\n const chars = [...line];\n return [pick(chars, ranges, args.has(\"complement\")).join(\"\")];\n });\n ctx.write(joinLines(out, trailingNewline));\n }\n return ok ? 0 : 1;\n },\n});\n\nfunction parseRanges(spec: string): Array<[number, number]> {\n return spec.split(\",\").map((part) => {\n const m = /^(\\d*)-(\\d*)$/.exec(part);\n if (m) {\n const start = m[1] === \"\" ? 1 : Number(m[1]);\n const end = m[2] === \"\" ? Infinity : Number(m[2]);\n return [start, end] as [number, number];\n }\n const n = Number(part);\n return [n, n] as [number, number];\n });\n}\n\nfunction pick<T>(items: T[], ranges: Array<[number, number]>, complement: boolean): T[] {\n const selected = items.filter((_, idx) => {\n const position = idx + 1;\n const inRange = ranges.some(([start, end]) => position >= start && position <= end);\n return complement ? !inRange : inRange;\n });\n return selected;\n}\n\nexport const paste: Command = defineCommand({\n name: \"paste\",\n path: \"/usr/bin/paste\",\n summary: \"merge lines of files\",\n usage: \"paste [OPTION]... [FILE]...\",\n async run(ctx) {\n const args = parseArgs(ctx.args, [\n { short: \"d\", long: \"delimiters\", arg: true, default: \"\\t\" },\n { short: \"s\", long: \"serial\" },\n ]);\n const delimiters = [...(args.str(\"delimiters\") || \"\\t\")];\n const { sources, ok } = await readInputs(ctx, args.positional);\n const columns = sources.map((s) => splitLines(s.bytes).lines);\n\n if (args.has(\"serial\")) {\n for (const column of columns) {\n ctx.line(column.map((line, idx) => (idx === 0 ? line : delimiters[(idx - 1) % delimiters.length]! + line)).join(\"\"));\n }\n return ok ? 0 : 1;\n }\n\n const rows = Math.max(0, ...columns.map((c) => c.length));\n for (let r = 0; r < rows; r++) {\n let line = \"\";\n columns.forEach((column, idx) => {\n if (idx > 0) line += delimiters[(idx - 1) % delimiters.length]!;\n line += column[r] ?? \"\";\n });\n ctx.line(line);\n }\n return ok ? 0 : 1;\n },\n});\n\nexport const tr: Command = defineCommand({\n name: \"tr\",\n path: \"/usr/bin/tr\",\n summary: \"translate or delete characters\",\n usage: \"tr [OPTION]... SET1 [SET2]\",\n async run(ctx) {\n const args = parseArgs(ctx.args, [\n { short: \"d\", long: \"delete\" },\n { short: \"s\", long: \"squeeze-repeats\" },\n { short: \"c\", long: \"complement\" },\n { short: \"t\", long: \"truncate-set1\" },\n ]);\n const [set1Raw, set2Raw] = args.positional;\n if (set1Raw === undefined) return ctx.fail(\"missing operand\", 1);\n\n const set1 = expandSet(set1Raw);\n const set2 = set2Raw === undefined ? [] : expandSet(set2Raw);\n const text = decoder.decode(await ctx.stdin.readAll());\n\n const inSet1 = (ch: string) => (args.has(\"complement\") ? !set1.includes(ch) : set1.includes(ch));\n\n let out = \"\";\n let lastEmitted = \"\";\n for (const ch of text) {\n if (args.has(\"delete\") && inSet1(ch)) continue;\n let mapped = ch;\n if (!args.has(\"delete\") && set2.length && inSet1(ch)) {\n const idx = args.has(\"complement\") ? set2.length - 1 : set1.indexOf(ch);\n mapped = set2[Math.min(idx, set2.length - 1)] ?? ch;\n }\n if (args.has(\"squeeze-repeats\")) {\n const squeezeSet = args.has(\"delete\") || set2.length === 0 ? set1 : set2;\n if (mapped === lastEmitted && squeezeSet.includes(mapped)) continue;\n }\n out += mapped;\n lastEmitted = mapped;\n }\n ctx.write(out);\n return 0;\n },\n});\n\nconst CHAR_CLASSES: Record<string, string> = {\n alpha: \"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ\",\n digit: \"0123456789\",\n alnum: \"0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ\",\n lower: \"abcdefghijklmnopqrstuvwxyz\",\n upper: \"ABCDEFGHIJKLMNOPQRSTUVWXYZ\",\n space: \" \\t\\n\\v\\f\\r\",\n blank: \" \\t\",\n punct: \"!\\\"#$%&'()*+,-./:;<=>?@[\\\\]^_`{|}~\",\n};\n\nfunction expandSet(spec: string): string[] {\n const out: string[] = [];\n let i = 0;\n while (i < spec.length) {\n if (spec.startsWith(\"[:\", i)) {\n const end = spec.indexOf(\":]\", i);\n if (end > 0) {\n const name = spec.slice(i + 2, end);\n out.push(...(CHAR_CLASSES[name] ?? \"\"));\n i = end + 2;\n continue;\n }\n }\n if (spec[i] === \"\\\\\" && i + 1 < spec.length) {\n const escapes: Record<string, string> = { n: \"\\n\", t: \"\\t\", r: \"\\r\", \"\\\\\": \"\\\\\", \"0\": \"\\0\" };\n out.push(escapes[spec[i + 1]!] ?? spec[i + 1]!);\n i += 2;\n continue;\n }\n if (spec[i + 1] === \"-\" && i + 2 < spec.length && spec[i + 2] !== \"]\") {\n const start = spec.charCodeAt(i);\n const end = spec.charCodeAt(i + 2);\n for (let c = start; c <= end; c++) out.push(String.fromCharCode(c));\n i += 3;\n continue;\n }\n out.push(spec[i]!);\n i++;\n }\n return out;\n}\n\n// ── tee / rev / tac / nl ────────────────────────────────────────────────────\n\nexport const tee: Command = defineCommand({\n name: \"tee\",\n path: \"/usr/bin/tee\",\n summary: \"read from standard input and write to files and standard output\",\n usage: \"tee [OPTION]... [FILE]...\",\n async run(ctx) {\n const args = parseArgs(ctx.args, [\n { short: \"a\", long: \"append\" },\n { short: \"i\", long: \"ignore-interrupts\" },\n ]);\n const bytes = await ctx.stdin.readAll();\n ctx.write(bytes);\n let status = 0;\n for (const target of args.positional) {\n try {\n const abs = ctx.path(target);\n if (args.has(\"append\")) ctx.vfs.appendFile(abs, bytes, { cred: ctx.cred });\n else ctx.vfs.writeFile(abs, bytes, { cred: ctx.cred });\n } catch (e) {\n status = ctx.reportError(e, target);\n }\n }\n return status;\n },\n});\n\nexport const rev: Command = defineCommand({\n name: \"rev\",\n path: \"/usr/bin/rev\",\n summary: \"reverse lines characterwise\",\n async run(ctx) {\n const { sources, ok } = await readInputs(ctx, ctx.args);\n for (const source of sources) {\n const { lines, trailingNewline } = splitLines(source.bytes);\n ctx.write(joinLines(lines.map((l) => [...l].reverse().join(\"\")), trailingNewline));\n }\n return ok ? 0 : 1;\n },\n});\n\nexport const tac: Command = defineCommand({\n name: \"tac\",\n path: \"/usr/bin/tac\",\n summary: \"concatenate and print files in reverse\",\n async run(ctx) {\n const args = parseArgs(ctx.args, [{ short: \"s\", long: \"separator\", arg: true }]);\n const { sources, ok } = await readInputs(ctx, args.positional);\n for (const source of sources) {\n const { lines } = splitLines(source.bytes);\n ctx.write(joinLines(lines.reverse(), true));\n }\n return ok ? 0 : 1;\n },\n});\n\nexport const nl: Command = defineCommand({\n name: \"nl\",\n path: \"/usr/bin/nl\",\n summary: \"number lines of files\",\n async run(ctx) {\n const args = parseArgs(ctx.args, [\n { short: \"b\", long: \"body-numbering\", arg: true, default: \"t\" },\n { short: \"w\", long: \"number-width\", arg: true, default: \"6\" },\n { short: \"s\", long: \"number-separator\", arg: true, default: \"\\t\" },\n { short: \"v\", long: \"starting-line-number\", arg: true, default: \"1\" },\n { short: \"i\", long: \"line-increment\", arg: true, default: \"1\" },\n ]);\n const { sources, ok } = await readInputs(ctx, args.positional);\n const width = args.num(\"number-width\", 6)!;\n const separator = args.str(\"number-separator\", \"\\t\")!;\n const style = args.str(\"body-numbering\", \"t\")!;\n let counter = args.num(\"starting-line-number\", 1)!;\n const increment = args.num(\"line-increment\", 1)!;\n\n for (const source of sources) {\n for (const line of splitLines(source.bytes).lines) {\n const shouldNumber = style === \"a\" || (style === \"t\" && line !== \"\");\n if (shouldNumber) {\n ctx.line(`${String(counter).padStart(width)}${separator}${line}`);\n counter += increment;\n } else {\n ctx.line(`${\" \".repeat(width)}${separator}${line}`);\n }\n }\n }\n return ok ? 0 : 1;\n },\n});\n\n// ── fold / expand / fmt / column ────────────────────────────────────────────\n\nexport const fold: Command = defineCommand({\n name: \"fold\",\n path: \"/usr/bin/fold\",\n summary: \"wrap each input line to fit in specified width\",\n async run(ctx) {\n const args = parseArgs(\n ctx.args,\n [\n { short: \"w\", long: \"width\", arg: true, default: \"80\" },\n { short: \"s\", long: \"spaces\" },\n { short: \"b\", long: \"bytes\" },\n ],\n { numericShortcut: \"width\" },\n );\n const width = args.num(\"width\", 80)!;\n const { sources, ok } = await readInputs(ctx, args.positional);\n for (const source of sources) {\n for (const line of splitLines(source.bytes).lines) {\n let rest = line;\n if (rest === \"\") {\n ctx.line(\"\");\n continue;\n }\n while (rest.length > width) {\n let cut = width;\n if (args.has(\"spaces\")) {\n const idx = rest.lastIndexOf(\" \", width);\n if (idx > 0) cut = idx + 1;\n }\n ctx.line(rest.slice(0, cut));\n rest = rest.slice(cut);\n }\n ctx.line(rest);\n }\n }\n return ok ? 0 : 1;\n },\n});\n\nexport const expandCmd: Command = defineCommand({\n name: \"expand\",\n path: \"/usr/bin/expand\",\n summary: \"convert tabs to spaces\",\n async run(ctx) {\n const args = parseArgs(ctx.args, [{ short: \"t\", long: \"tabs\", arg: true, default: \"8\" }, { short: \"i\", long: \"initial\" }]);\n const tabs = args.num(\"tabs\", 8)!;\n const { sources, ok } = await readInputs(ctx, args.positional);\n for (const source of sources) {\n const { lines, trailingNewline } = splitLines(source.bytes);\n const out = lines.map((line) => {\n let result = \"\";\n for (const ch of line) {\n if (ch === \"\\t\") result += \" \".repeat(tabs - (result.length % tabs));\n else result += ch;\n }\n return result;\n });\n ctx.write(joinLines(out, trailingNewline));\n }\n return ok ? 0 : 1;\n },\n});\n\nexport const unexpand: Command = defineCommand({\n name: \"unexpand\",\n path: \"/usr/bin/unexpand\",\n summary: \"convert spaces to tabs\",\n async run(ctx) {\n const args = parseArgs(ctx.args, [{ short: \"t\", long: \"tabs\", arg: true, default: \"8\" }, { short: \"a\", long: \"all\" }]);\n const tabs = args.num(\"tabs\", 8)!;\n const { sources, ok } = await readInputs(ctx, args.positional);\n for (const source of sources) {\n const { lines, trailingNewline } = splitLines(source.bytes);\n const out = lines.map((line) => {\n const leading = /^ +/.exec(line)?.[0] ?? \"\";\n const rest = line.slice(leading.length);\n return \"\\t\".repeat(Math.floor(leading.length / tabs)) + \" \".repeat(leading.length % tabs) + rest;\n });\n ctx.write(joinLines(out, trailingNewline));\n }\n return ok ? 0 : 1;\n },\n});\n\nexport const fmt: Command = defineCommand({\n name: \"fmt\",\n path: \"/usr/bin/fmt\",\n summary: \"simple optimal text formatter\",\n async run(ctx) {\n const args = parseArgs(ctx.args, [{ short: \"w\", long: \"width\", arg: true, default: \"75\" }], { numericShortcut: \"width\" });\n const width = args.num(\"width\", 75)!;\n const { sources, ok } = await readInputs(ctx, args.positional);\n for (const source of sources) {\n const paragraphs = decoder.decode(source.bytes).split(/\\n\\s*\\n/);\n paragraphs.forEach((paragraph, idx) => {\n if (idx > 0) ctx.line(\"\");\n const words = paragraph.split(/\\s+/).filter(Boolean);\n let line = \"\";\n for (const word of words) {\n if (line === \"\") line = word;\n else if (line.length + 1 + word.length <= width) line += \" \" + word;\n else {\n ctx.line(line);\n line = word;\n }\n }\n if (line) ctx.line(line);\n });\n }\n return ok ? 0 : 1;\n },\n});\n\nexport const column: Command = defineCommand({\n name: \"column\",\n path: \"/usr/bin/column\",\n summary: \"columnate lists\",\n async run(ctx) {\n const args = parseArgs(ctx.args, [\n { short: \"t\", long: \"table\" },\n { short: \"s\", long: \"separator\", arg: true },\n { short: \"o\", long: \"output-separator\", arg: true, default: \" \" },\n ]);\n const { sources, ok } = await readInputs(ctx, args.positional);\n const lines = sources.flatMap((s) => splitLines(s.bytes).lines).filter((l) => l !== \"\");\n\n if (!args.has(\"table\")) {\n for (const line of lines) ctx.line(line);\n return ok ? 0 : 1;\n }\n\n const separator = args.str(\"separator\");\n const rows = lines.map((line) => (separator ? line.split(separator) : line.trim().split(/\\s+/)));\n const columns = Math.max(0, ...rows.map((r) => r.length));\n const widths = Array.from({ length: columns }, (_, i) => Math.max(0, ...rows.map((r) => displayWidth(r[i] ?? \"\"))));\n const outputSeparator = args.str(\"output-separator\", \" \")!;\n for (const row of rows) {\n ctx.line(row.map((cell, i) => (i === row.length - 1 ? cell : cell.padEnd(widths[i]!))).join(outputSeparator).trimEnd());\n }\n return ok ? 0 : 1;\n },\n});\n\nexport const shuf: Command = defineCommand({\n name: \"shuf\",\n path: \"/usr/bin/shuf\",\n summary: \"generate random permutations\",\n async run(ctx) {\n const args = parseArgs(ctx.args, [\n { short: \"n\", long: \"head-count\", arg: true },\n { short: \"e\", long: \"echo\" },\n { short: \"r\", long: \"repeat\" },\n { short: \"i\", long: \"input-range\", arg: true },\n ]);\n let items: string[];\n const range = args.str(\"input-range\");\n if (range) {\n const [lo, hi] = range.split(\"-\").map(Number);\n items = [];\n for (let i = lo!; i <= hi!; i++) items.push(String(i));\n } else if (args.has(\"echo\")) {\n items = args.positional;\n } else {\n const { sources } = await readInputs(ctx, args.positional);\n items = sources.flatMap((s) => splitLines(s.bytes).lines);\n }\n for (let i = items.length - 1; i > 0; i--) {\n const j = Math.floor(Math.random() * (i + 1));\n [items[i], items[j]] = [items[j]!, items[i]!];\n }\n const count = args.num(\"head-count\", items.length)!;\n for (const item of items.slice(0, count)) ctx.line(item);\n return 0;\n },\n});\n\n// ── comm / join / split / truncate ──────────────────────────────────────────\n\nexport const comm: Command = defineCommand({\n name: \"comm\",\n path: \"/usr/bin/comm\",\n summary: \"compare two sorted files line by line\",\n async run(ctx) {\n const args = parseArgs(ctx.args, [{ short: \"1\" }, { short: \"2\" }, { short: \"3\" }]);\n const [a, b] = args.positional;\n if (a === undefined || b === undefined) return ctx.fail(\"missing operand\", 1);\n const { sources, ok } = await readInputs(ctx, [a, b]);\n const left = splitLines(sources[0]!.bytes).lines;\n const right = splitLines(sources[1]!.bytes).lines;\n\n let i = 0;\n let j = 0;\n while (i < left.length || j < right.length) {\n const l = left[i];\n const r = right[j];\n if (r === undefined || (l !== undefined && l < r)) {\n if (!args.has(\"1\")) ctx.line(l!);\n i++;\n } else if (l === undefined || l > r) {\n if (!args.has(\"2\")) ctx.line((args.has(\"1\") ? \"\" : \"\\t\") + r);\n j++;\n } else {\n if (!args.has(\"3\")) ctx.line((args.has(\"1\") ? \"\" : \"\\t\") + (args.has(\"2\") ? \"\" : \"\\t\") + l);\n i++;\n j++;\n }\n }\n return ok ? 0 : 1;\n },\n});\n\nexport const join: Command = defineCommand({\n name: \"join\",\n path: \"/usr/bin/join\",\n summary: \"join lines of two files on a common field\",\n async run(ctx) {\n const args = parseArgs(ctx.args, [\n { short: \"t\", long: \"field-separator\", arg: true },\n { short: \"1\", arg: true, default: \"1\" },\n { short: \"2\", arg: true, default: \"1\" },\n { short: \"j\", arg: true },\n ]);\n const [a, b] = args.positional;\n if (a === undefined || b === undefined) return ctx.fail(\"missing operand\", 1);\n const separator = args.str(\"field-separator\");\n const split = (line: string) => (separator ? line.split(separator) : line.trim().split(/\\s+/));\n const joinChar = separator ?? \" \";\n const key1 = Number(args.str(\"j\") ?? args.str(\"1\", \"1\")) - 1;\n const key2 = Number(args.str(\"j\") ?? args.str(\"2\", \"1\")) - 1;\n\n const { sources, ok } = await readInputs(ctx, [a, b]);\n const left = splitLines(sources[0]!.bytes).lines.map(split);\n const right = splitLines(sources[1]!.bytes).lines.map(split);\n\n for (const l of left) {\n for (const r of right) {\n if (l[key1] === r[key2]) {\n const rest1 = l.filter((_, i) => i !== key1);\n const rest2 = r.filter((_, i) => i !== key2);\n ctx.line([l[key1], ...rest1, ...rest2].join(joinChar));\n }\n }\n }\n return ok ? 0 : 1;\n },\n});\n\nexport const split: Command = defineCommand({\n name: \"split\",\n path: \"/usr/bin/split\",\n summary: \"split a file into pieces\",\n async run(ctx) {\n const args = parseArgs(ctx.args, [\n { short: \"l\", long: \"lines\", arg: true, default: \"1000\" },\n { short: \"b\", long: \"bytes\", arg: true },\n { short: \"d\", long: \"numeric-suffixes\" },\n { short: \"a\", long: \"suffix-length\", arg: true, default: \"2\" },\n ]);\n const [input, prefixRaw] = args.positional;\n const prefix = prefixRaw ?? \"x\";\n const { sources, ok } = await readInputs(ctx, input ? [input] : []);\n const bytes = sources[0]?.bytes ?? new Uint8Array(0);\n const suffixLength = args.num(\"suffix-length\", 2)!;\n\n const chunks: Uint8Array[] = [];\n const byteSpec = args.str(\"bytes\");\n if (byteSpec !== undefined) {\n const size = parseSize(byteSpec) ?? 1024;\n for (let i = 0; i < bytes.length; i += size) chunks.push(bytes.subarray(i, i + size));\n } else {\n const perChunk = args.num(\"lines\", 1000)!;\n const { lines } = splitLines(bytes);\n for (let i = 0; i < lines.length; i += perChunk) {\n chunks.push(new TextEncoder().encode(joinLines(lines.slice(i, i + perChunk), true)));\n }\n }\n\n chunks.forEach((chunk, idx) => {\n const suffix = args.has(\"numeric-suffixes\")\n ? String(idx).padStart(suffixLength, \"0\")\n : numericToAlpha(idx, suffixLength);\n ctx.vfs.writeFile(ctx.path(prefix + suffix), chunk, { cred: ctx.cred });\n });\n return ok ? 0 : 1;\n },\n});\n\nfunction numericToAlpha(value: number, length: number): string {\n let out = \"\";\n let n = value;\n for (let i = 0; i < length; i++) {\n out = String.fromCharCode(97 + (n % 26)) + out;\n n = Math.floor(n / 26);\n }\n return out;\n}\n\nexport const truncateCmd: Command = defineCommand({\n name: \"truncate\",\n path: \"/usr/bin/truncate\",\n summary: \"shrink or extend the size of a file\",\n async run(ctx) {\n const args = parseArgs(ctx.args, [\n { short: \"s\", long: \"size\", arg: true },\n { short: \"c\", long: \"no-create\" },\n ]);\n const sizeSpec = args.str(\"size\");\n if (sizeSpec === undefined) return ctx.fail(\"you must specify either --size or --reference\", 1);\n const size = parseSize(sizeSpec.replace(/^[+-]/, \"\")) ?? 0;\n let status = 0;\n for (const target of args.positional) {\n try {\n const abs = ctx.path(target);\n if (!ctx.vfs.lexists(abs)) {\n if (args.has(\"no-create\")) continue;\n ctx.vfs.writeFile(abs, new Uint8Array(0), { cred: ctx.cred });\n }\n ctx.vfs.truncate(abs, size, ctx.cred);\n } catch (e) {\n status = ctx.reportError(e, target);\n }\n }\n return status;\n },\n});\n\n// ── sed / awk ───────────────────────────────────────────────────────────────\n\nexport const sed: Command = defineCommand({\n name: \"sed\",\n path: \"/bin/sed\",\n summary: \"stream editor for filtering and transforming text\",\n usage: \"sed [OPTION]... {script} [FILE]...\",\n run: runSed,\n});\n\nexport const awk: Command = defineCommand({\n name: \"awk\",\n path: \"/usr/bin/awk\",\n aliases: [\"gawk\", \"mawk\"],\n summary: \"pattern scanning and processing language\",\n usage: \"awk [-F fs] [-v var=value] 'program' [FILE]...\",\n run: runAwk,\n});\n\nexport const commands: Command[] = [\n head,\n tail,\n wc,\n sort,\n uniq,\n cut,\n paste,\n tr,\n tee,\n rev,\n tac,\n nl,\n fold,\n expandCmd,\n unexpand,\n fmt,\n column,\n shuf,\n comm,\n join,\n split,\n truncateCmd,\n sed,\n awk,\n];\n\nexport { formatPrintf, P };\n","/** Searching and comparing: grep, find, xargs, diff, cmp. */\n\nimport { defineCommand, type Command, type ExecContext } from \"../kernel/command.js\";\nimport { parseArgs } from \"../util/args.js\";\nimport { readInputs, splitLines } from \"./helpers.js\";\nimport { fnmatch } from \"../fs/glob.js\";\nimport { translateEre } from \"./awk.js\";\nimport { toJsRegex } from \"./sed.js\";\nimport { formatMode } from \"../fs/mode.js\";\nimport type { Stats } from \"../fs/stat.js\";\nimport * as P from \"../fs/path.js\";\n\nconst decoder = new TextDecoder();\n\n// ── grep ────────────────────────────────────────────────────────────────────\n\nexport const grep: Command = defineCommand({\n name: \"grep\",\n path: \"/bin/grep\",\n aliases: [\"egrep\", \"fgrep\", \"rgrep\"],\n summary: \"print lines that match patterns\",\n usage: \"grep [OPTION]... PATTERNS [FILE]...\",\n async run(ctx) {\n const args = parseArgs(ctx.args, [\n { short: \"i\", long: \"ignore-case\" },\n { short: \"v\", long: \"invert-match\" },\n { short: \"n\", long: \"line-number\" },\n { short: \"c\", long: \"count\" },\n { short: \"l\", long: \"files-with-matches\" },\n { short: \"L\", long: \"files-without-match\" },\n { short: \"H\", long: \"with-filename\" },\n { short: \"h\", long: \"no-filename\" },\n { short: \"w\", long: \"word-regexp\" },\n { short: \"x\", long: \"line-regexp\" },\n { short: \"q\", long: \"quiet\" },\n { short: \"s\", long: \"no-messages\" },\n { short: \"r\", long: \"recursive\" },\n { short: \"R\", long: \"dereference-recursive\" },\n { short: \"E\", long: \"extended-regexp\" },\n { short: \"F\", long: \"fixed-strings\" },\n { short: \"G\", long: \"basic-regexp\" },\n { short: \"P\", long: \"perl-regexp\" },\n { short: \"o\", long: \"only-matching\" },\n { short: \"e\", long: \"regexp\", arg: true, multiple: true },\n { short: \"f\", long: \"file\", arg: true, multiple: true },\n { short: \"A\", long: \"after-context\", arg: true },\n { short: \"B\", long: \"before-context\", arg: true },\n { short: \"C\", long: \"context\", arg: true },\n { short: \"m\", long: \"max-count\", arg: true },\n { long: \"include\", arg: true, multiple: true },\n { long: \"exclude\", arg: true, multiple: true },\n { long: \"exclude-dir\", arg: true, multiple: true },\n { long: \"color\", arg: true },\n { long: \"colour\", arg: true },\n ]);\n\n let patterns = [...args.list(\"regexp\")];\n for (const file of args.list(\"file\")) {\n try {\n patterns.push(...ctx.vfs.readText(ctx.path(file), ctx.cred).split(\"\\n\").filter((l) => l !== \"\"));\n } catch (e) {\n return ctx.reportError(e, file);\n }\n }\n\n let operands = args.positional;\n if (patterns.length === 0) {\n const first = operands[0];\n if (first === undefined) {\n ctx.warn(\"usage: grep [OPTION]... PATTERNS [FILE]...\");\n return 2;\n }\n patterns = first.split(\"\\n\");\n operands = operands.slice(1);\n }\n\n const extended = args.has(\"extended-regexp\") || args.has(\"perl-regexp\") || ctx.name === \"egrep\";\n const fixed = args.has(\"fixed-strings\") || ctx.name === \"fgrep\";\n const recursive = args.has(\"recursive\") || args.has(\"dereference-recursive\") || ctx.name === \"rgrep\";\n\n let regex: RegExp;\n try {\n const sources = patterns.map((p) => {\n let body = fixed ? escapeLiteral(p) : extended ? translateEre(p) : toJsRegex(p, false);\n if (args.has(\"word-regexp\")) body = `\\\\b(?:${body})\\\\b`;\n if (args.has(\"line-regexp\")) body = `^(?:${body})$`;\n return body;\n });\n regex = new RegExp(sources.join(\"|\"), args.has(\"ignore-case\") ? \"gi\" : \"g\");\n } catch (e) {\n return ctx.fail(`invalid pattern: ${e instanceof Error ? e.message : String(e)}`, 2);\n }\n\n // Expand directories when recursing.\n const targets: string[] = [];\n if (operands.length === 0) {\n targets.push(recursive ? \".\" : \"-\");\n } else {\n for (const operand of operands) {\n let st: Stats | null = null;\n try {\n st = operand === \"-\" ? null : ctx.vfs.stat(ctx.path(operand), { cred: ctx.cred });\n } catch {\n st = null;\n }\n if (st?.isDirectory()) {\n if (!recursive) {\n if (!args.has(\"no-messages\")) ctx.warn(`${operand}: Is a directory`);\n continue;\n }\n for (const child of ctx.vfs.walk(ctx.path(operand), { includeSelf: false, cred: ctx.cred })) {\n try {\n if (!ctx.vfs.lstat(child).isFile()) continue;\n } catch {\n continue;\n }\n const name = P.basename(child);\n if (args.list(\"exclude\").some((pattern) => fnmatch(pattern, name, { pathname: false }))) continue;\n if (args.list(\"exclude-dir\").some((pattern) => child.split(\"/\").some((seg) => fnmatch(pattern, seg, { pathname: false })))) continue;\n const include = args.list(\"include\");\n if (include.length && !include.some((pattern) => fnmatch(pattern, name, { pathname: false }))) continue;\n targets.push(P.relative(ctx.cwd, child));\n }\n continue;\n }\n targets.push(operand);\n }\n }\n\n const showNames = args.has(\"with-filename\") || (targets.length > 1 && !args.has(\"no-filename\"));\n const after = args.num(\"after-context\", args.num(\"context\", 0)!)!;\n const before = args.num(\"before-context\", args.num(\"context\", 0)!)!;\n const maxCount = args.num(\"max-count\", Infinity)!;\n const useColor = args.str(\"color\") === \"always\" || args.str(\"colour\") === \"always\" || ((args.str(\"color\") === \"auto\" || args.str(\"colour\") === \"auto\") && ctx.stdout.isTTY);\n\n let anyMatch = false;\n let status = 1;\n\n for (const target of targets) {\n let bytes: Uint8Array;\n if (target === \"-\") {\n bytes = await ctx.stdin.readAll();\n } else {\n try {\n bytes = ctx.vfs.readFile(ctx.path(target), ctx.cred);\n } catch (e) {\n if (!args.has(\"no-messages\")) ctx.reportError(e, target);\n status = 2;\n continue;\n }\n }\n\n const { lines } = splitLines(bytes);\n const matched: number[] = [];\n let count = 0;\n\n for (let i = 0; i < lines.length && count < maxCount; i++) {\n regex.lastIndex = 0;\n const isMatch = regex.test(lines[i]!) !== args.has(\"invert-match\");\n if (!isMatch) continue;\n matched.push(i);\n count++;\n }\n\n if (count > 0) {\n anyMatch = true;\n if (status !== 2) status = 0;\n }\n\n if (args.has(\"quiet\")) {\n if (count > 0) return 0;\n continue;\n }\n if (args.has(\"files-with-matches\")) {\n if (count > 0) ctx.line(target);\n continue;\n }\n if (args.has(\"files-without-match\")) {\n if (count === 0) ctx.line(target);\n continue;\n }\n if (args.has(\"count\")) {\n ctx.line(showNames ? `${target}:${count}` : String(count));\n continue;\n }\n\n const emitted = new Set<number>();\n let lastPrinted = -2;\n for (const index of matched) {\n const start = Math.max(0, index - before);\n const end = Math.min(lines.length - 1, index + after);\n if ((before || after) && lastPrinted >= 0 && start > lastPrinted + 1) ctx.line(\"--\");\n for (let i = start; i <= end; i++) {\n if (emitted.has(i)) continue;\n emitted.add(i);\n const isMatchLine = matched.includes(i);\n const separator = isMatchLine ? \":\" : \"-\";\n const prefix = (showNames ? target + separator : \"\") + (args.has(\"line-number\") ? i + 1 + separator : \"\");\n\n if (args.has(\"only-matching\") && isMatchLine) {\n regex.lastIndex = 0;\n let m: RegExpExecArray | null;\n while ((m = regex.exec(lines[i]!)) !== null) {\n ctx.line(prefix + (useColor ? `\u001b[1;31m${m[0]}\u001b[0m` : m[0]));\n if (m[0] === \"\") regex.lastIndex++;\n }\n continue;\n }\n\n let text = lines[i]!;\n if (useColor && isMatchLine && !args.has(\"invert-match\")) {\n regex.lastIndex = 0;\n text = text.replace(regex, (m) => `\u001b[1;31m${m}\u001b[0m`);\n }\n ctx.line(prefix + text);\n lastPrinted = i;\n }\n }\n }\n\n return anyMatch ? (status === 2 ? 2 : 0) : status === 2 ? 2 : 1;\n },\n});\n\nfunction escapeLiteral(text: string): string {\n return text.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n}\n\n// ── find ────────────────────────────────────────────────────────────────────\n\ninterface FindTest {\n (path: string, stat: Stats, depth: number): boolean | Promise<boolean>;\n}\n\nexport const find: Command = defineCommand({\n name: \"find\",\n path: \"/usr/bin/find\",\n summary: \"search for files in a directory hierarchy\",\n usage: \"find [PATH...] [EXPRESSION]\",\n async run(ctx) {\n const argv = ctx.args;\n const roots: string[] = [];\n let i = 0;\n for (; i < argv.length; i++) {\n const arg = argv[i]!;\n if (arg.startsWith(\"-\") || arg === \"(\" || arg === \"!\") break;\n roots.push(arg);\n }\n if (roots.length === 0) roots.push(\".\");\n\n const tests: FindTest[] = [];\n const actions: Array<(path: string, stat: Stats) => Promise<void> | void> = [];\n let maxDepth = Infinity;\n let minDepth = 0;\n let negateNext = false;\n let printed = false;\n let depthFirst = false;\n let followSymlinks = false;\n\n const addTest = (test: FindTest) => {\n tests.push(negateNext ? (p, s, d) => !test(p, s, d) : test);\n negateNext = false;\n };\n\n for (; i < argv.length; i++) {\n const arg = argv[i]!;\n const value = () => argv[++i] ?? \"\";\n\n switch (arg) {\n case \"!\":\n case \"-not\":\n negateNext = !negateNext;\n continue;\n case \"-a\":\n case \"-and\":\n continue;\n case \"-o\":\n case \"-or\":\n // Approximated: `-o` is treated as \"either of the adjacent tests\".\n continue;\n case \"-maxdepth\":\n maxDepth = Number(value());\n continue;\n case \"-mindepth\":\n minDepth = Number(value());\n continue;\n case \"-depth\":\n depthFirst = true;\n continue;\n case \"-follow\":\n case \"-L\":\n followSymlinks = true;\n continue;\n case \"-name\": {\n const pattern = value();\n addTest((path) => fnmatch(pattern, P.basename(path), { pathname: false, dot: true }));\n continue;\n }\n case \"-iname\": {\n const pattern = value();\n addTest((path) => fnmatch(pattern, P.basename(path), { pathname: false, dot: true, nocase: true }));\n continue;\n }\n case \"-path\":\n case \"-wholename\": {\n const pattern = value();\n addTest((path) => fnmatch(pattern, path, { pathname: false, dot: true }));\n continue;\n }\n case \"-regex\": {\n const pattern = value();\n const re = new RegExp(`^${pattern}$`);\n addTest((path) => re.test(path));\n continue;\n }\n case \"-type\": {\n const kinds = value();\n addTest((_, stat) =>\n [...kinds].some((kind) =>\n kind === \"f\"\n ? stat.isFile()\n : kind === \"d\"\n ? stat.isDirectory()\n : kind === \"l\"\n ? stat.isSymbolicLink()\n : kind === \"c\"\n ? stat.isCharacterDevice()\n : kind === \"b\"\n ? stat.isBlockDevice()\n : kind === \"p\"\n ? stat.isFIFO()\n : kind === \"s\"\n ? stat.isSocket()\n : false,\n ),\n );\n continue;\n }\n case \"-empty\":\n addTest((path, stat) => (stat.isDirectory() ? safeReaddirLength(ctx, path) === 0 : stat.size === 0));\n continue;\n case \"-size\": {\n const spec = value();\n const m = /^([+-]?)(\\d+)([bckMGw]?)$/.exec(spec);\n if (!m) continue;\n const unit = { b: 512, c: 1, k: 1024, M: 1024 ** 2, G: 1024 ** 3, w: 2, \"\": 512 }[m[3] ?? \"\"]!;\n const wanted = Number(m[2]) * unit;\n const sign = m[1];\n addTest((_, stat) => (sign === \"+\" ? stat.size > wanted : sign === \"-\" ? stat.size < wanted : Math.ceil(stat.size / unit) * unit === wanted));\n continue;\n }\n case \"-newer\": {\n const reference = value();\n let referenceTime = 0;\n try {\n referenceTime = ctx.vfs.stat(ctx.path(reference), { cred: ctx.cred }).mtimeMs;\n } catch {\n /* missing reference matches nothing */\n }\n addTest((_, stat) => stat.mtimeMs > referenceTime);\n continue;\n }\n case \"-mtime\":\n case \"-mmin\": {\n const spec = value();\n const unit = arg === \"-mtime\" ? 86_400_000 : 60_000;\n const sign = spec[0] === \"+\" ? \"+\" : spec[0] === \"-\" ? \"-\" : \"\";\n const amount = Number(spec.replace(/^[+-]/, \"\"));\n addTest((_, stat) => {\n const age = (ctx.kernel.now() - stat.mtimeMs) / unit;\n return sign === \"+\" ? age > amount : sign === \"-\" ? age < amount : Math.floor(age) === amount;\n });\n continue;\n }\n case \"-user\": {\n const name = value();\n const uid = ctx.kernel.users.resolveUid(name);\n addTest((_, stat) => stat.uid === uid);\n continue;\n }\n case \"-group\": {\n const name = value();\n const gid = ctx.kernel.users.resolveGid(name);\n addTest((_, stat) => stat.gid === gid);\n continue;\n }\n case \"-perm\": {\n const spec = value();\n const exact = !spec.startsWith(\"-\") && !spec.startsWith(\"/\");\n const bits = parseInt(spec.replace(/^[-/]/, \"\"), 8);\n addTest((_, stat) => (exact ? (stat.mode & 0o7777) === bits : (stat.mode & bits) === bits));\n continue;\n }\n case \"-print\":\n printed = true;\n actions.push((path) => ctx.line(path));\n continue;\n case \"-print0\":\n printed = true;\n actions.push((path) => ctx.write(path + \"\\0\"));\n continue;\n case \"-ls\":\n printed = true;\n actions.push((path, stat) =>\n ctx.line(\n `${String(stat.ino).padStart(9)} ${String(stat.blocks).padStart(6)} ${formatMode(stat.mode)} ${String(stat.nlink).padStart(3)} ${ctx.kernel.users.nameForUid(stat.uid).padEnd(8)} ${ctx.kernel.users.nameForGid(stat.gid).padEnd(8)} ${String(stat.size).padStart(8)} ${path}`,\n ),\n );\n continue;\n case \"-delete\":\n printed = true;\n actions.push((path, stat) => {\n try {\n if (stat.isDirectory()) ctx.vfs.rmdir(path, ctx.cred);\n else ctx.vfs.unlink(path, ctx.cred);\n } catch {\n /* non-empty directory */\n }\n });\n continue;\n case \"-exec\":\n case \"-execdir\": {\n const command: string[] = [];\n i++;\n while (i < argv.length && argv[i] !== \";\" && argv[i] !== \"+\" && argv[i] !== \"\\\\;\") {\n command.push(argv[i]!);\n i++;\n }\n const batch = argv[i] === \"+\";\n printed = true;\n if (batch) {\n const collected: string[] = [];\n actions.push((path) => {\n collected.push(path);\n });\n actions.push(async () => {\n /* replaced below by a final flush */\n void collected;\n });\n // Run once at the end.\n pendingBatch.push({ command, paths: collected });\n } else {\n actions.push(async (path) => {\n const argvRun = command.map((c) => (c === \"{}\" ? path : c));\n await ctx.kernel\n .spawn(argvRun, {\n cwd: ctx.cwd,\n env: ctx.env,\n cred: ctx.cred,\n ppid: ctx.proc.pid,\n stdout: ctx.stdout,\n stderr: ctx.stderr,\n })\n .wait();\n });\n }\n continue;\n }\n default:\n continue;\n }\n }\n\n if (!printed) actions.push((path) => ctx.line(path));\n\n let status = 0;\n for (const root of roots) {\n const abs = ctx.path(root);\n const display = root === \".\" ? \".\" : root;\n let rootStat: Stats;\n try {\n rootStat = followSymlinks ? ctx.vfs.stat(abs, { cred: ctx.cred }) : ctx.vfs.lstat(abs);\n } catch {\n ctx.warn(`'${root}': No such file or directory`);\n status = 1;\n continue;\n }\n\n const visit = async (path: string, displayPath: string, stat: Stats, depth: number): Promise<void> => {\n const emit = async () => {\n if (depth < minDepth) return;\n for (const test of tests) {\n if (!(await test(displayPath, stat, depth))) return;\n }\n for (const action of actions) await action(displayPath, stat);\n };\n\n if (!depthFirst) await emit();\n\n if (stat.isDirectory() && depth < maxDepth) {\n let names: string[];\n try {\n names = ctx.vfs.readdir(path, ctx.cred);\n } catch {\n names = [];\n }\n for (const name of names.sort()) {\n const child = P.join(path, name);\n try {\n const childStat = followSymlinks ? ctx.vfs.stat(child, { cred: ctx.cred }) : ctx.vfs.lstat(child);\n await visit(child, displayPath === \"/\" ? `/${name}` : `${displayPath}/${name}`, childStat, depth + 1);\n } catch {\n /* vanished */\n }\n }\n }\n\n if (depthFirst) await emit();\n };\n\n await visit(abs, display, rootStat, 0);\n }\n\n for (const batch of pendingBatch) {\n if (batch.paths.length === 0) continue;\n const argvRun = batch.command.flatMap((c) => (c === \"{}\" ? batch.paths : [c]));\n await ctx.kernel\n .spawn(argvRun, {\n cwd: ctx.cwd,\n env: ctx.env,\n cred: ctx.cred,\n ppid: ctx.proc.pid,\n stdout: ctx.stdout,\n stderr: ctx.stderr,\n })\n .wait();\n }\n pendingBatch.length = 0;\n\n return status;\n },\n});\n\nconst pendingBatch: Array<{ command: string[]; paths: string[] }> = [];\n\nfunction safeReaddirLength(ctx: ExecContext, path: string): number {\n try {\n return ctx.vfs.readdir(path, ctx.cred).length;\n } catch {\n return 0;\n }\n}\n\n// ── xargs ───────────────────────────────────────────────────────────────────\n\nexport const xargs: Command = defineCommand({\n name: \"xargs\",\n path: \"/usr/bin/xargs\",\n summary: \"build and execute command lines from standard input\",\n usage: \"xargs [OPTION]... [COMMAND [INITIAL-ARGS]...]\",\n async run(ctx) {\n const args = parseArgs(\n ctx.args,\n [\n { short: \"n\", long: \"max-args\", arg: true },\n { short: \"I\", long: \"replace\", arg: true },\n { short: \"i\" },\n { short: \"0\", long: \"null\" },\n { short: \"d\", long: \"delimiter\", arg: true },\n { short: \"t\", long: \"verbose\" },\n { short: \"r\", long: \"no-run-if-empty\" },\n { short: \"P\", long: \"max-procs\", arg: true },\n { short: \"L\", long: \"max-lines\", arg: true },\n { short: \"a\", long: \"arg-file\", arg: true },\n { short: \"s\", long: \"max-chars\", arg: true },\n ],\n { stopAtFirstPositional: true },\n );\n\n const source = args.str(\"arg-file\")\n ? ctx.vfs.readText(ctx.path(args.str(\"arg-file\")!), ctx.cred)\n : decoder.decode(await ctx.stdin.readAll());\n\n let items: string[];\n if (args.has(\"null\")) items = source.split(\"\\0\").filter((s) => s !== \"\");\n else if (args.str(\"delimiter\")) items = source.split(args.str(\"delimiter\")!).filter((s) => s !== \"\");\n else items = source.split(/\\s+/).filter((s) => s !== \"\");\n\n const command = args.positional.length ? args.positional : [\"echo\"];\n if (items.length === 0 && (args.has(\"no-run-if-empty\") || args.has(\"replace\") || args.has(\"i\"))) return 0;\n\n const replace = args.str(\"replace\") ?? (args.has(\"i\") ? \"{}\" : undefined);\n const batches: string[][] = [];\n\n if (replace) {\n for (const item of items) batches.push(command.map((c) => c.split(replace).join(item)));\n } else {\n const perBatch = args.num(\"max-args\", args.num(\"max-lines\", items.length || 1)!)!;\n for (let i = 0; i < items.length; i += perBatch) {\n batches.push([...command, ...items.slice(i, i + perBatch)]);\n }\n if (items.length === 0) batches.push([...command]);\n }\n\n let status = 0;\n for (const argv of batches) {\n if (args.has(\"verbose\")) ctx.stderr.write(argv.join(\" \") + \"\\n\");\n const code = await ctx.kernel\n .spawn(argv, {\n cwd: ctx.cwd,\n env: ctx.env,\n cred: ctx.cred,\n ppid: ctx.proc.pid,\n stdout: ctx.stdout,\n stderr: ctx.stderr,\n })\n .wait();\n if (code === 255) return 124;\n if (code !== 0) status = 123;\n }\n return status;\n },\n});\n\n// ── diff / cmp ──────────────────────────────────────────────────────────────\n\nexport const diff: Command = defineCommand({\n name: \"diff\",\n path: \"/usr/bin/diff\",\n summary: \"compare files line by line\",\n usage: \"diff [OPTION]... FILE1 FILE2\",\n async run(ctx) {\n const args = parseArgs(ctx.args, [\n { short: \"u\", long: \"unified\", arg: false },\n { short: \"U\", arg: true },\n { short: \"q\", long: \"brief\" },\n { short: \"i\", long: \"ignore-case\" },\n { short: \"w\", long: \"ignore-all-space\" },\n { short: \"b\", long: \"ignore-space-change\" },\n { short: \"r\", long: \"recursive\" },\n { short: \"N\", long: \"new-file\" },\n { short: \"c\", long: \"context\" },\n ]);\n const [a, b] = args.positional;\n if (a === undefined || b === undefined) return ctx.fail(\"missing operand\", 2);\n\n const { sources, ok } = await readInputs(ctx, [a, b]);\n if (!ok || sources.length < 2) return 2;\n\n const normalize = (line: string) => {\n let value = line;\n if (args.has(\"ignore-all-space\")) value = value.replace(/\\s+/g, \"\");\n else if (args.has(\"ignore-space-change\")) value = value.replace(/\\s+/g, \" \").trim();\n if (args.has(\"ignore-case\")) value = value.toLowerCase();\n return value;\n };\n\n const left = splitLines(sources[0]!.bytes).lines;\n const right = splitLines(sources[1]!.bytes).lines;\n const script = diffLines(left.map(normalize), right.map(normalize));\n if (script.length === 0) return 0;\n\n if (args.has(\"brief\")) {\n ctx.line(`Files ${a} and ${b} differ`);\n return 1;\n }\n\n if (args.has(\"unified\") || args.str(\"U\") !== undefined) {\n const context = args.num(\"U\", 3)!;\n ctx.line(`--- ${a}\\t${new Date(ctx.vfs.lstat(ctx.path(a)).mtimeMs).toISOString()}`);\n ctx.line(`+++ ${b}\\t${new Date(ctx.vfs.lstat(ctx.path(b)).mtimeMs).toISOString()}`);\n for (const hunk of buildHunks(script, left, right, context)) {\n ctx.line(`@@ -${hunk.aStart},${hunk.aCount} +${hunk.bStart},${hunk.bCount} @@`);\n for (const line of hunk.lines) ctx.line(line);\n }\n return 1;\n }\n\n // Default (ed-style) output.\n for (const group of groupScript(script)) {\n const aRange = formatRange(group.aStart + 1, group.aCount);\n const bRange = formatRange(group.bStart + 1, group.bCount);\n if (group.aCount > 0 && group.bCount > 0) ctx.line(`${aRange}c${bRange}`);\n else if (group.aCount > 0) ctx.line(`${aRange}d${group.bStart}`);\n else ctx.line(`${group.aStart}a${bRange}`);\n for (let i = 0; i < group.aCount; i++) ctx.line(`< ${left[group.aStart + i]}`);\n if (group.aCount > 0 && group.bCount > 0) ctx.line(\"---\");\n for (let i = 0; i < group.bCount; i++) ctx.line(`> ${right[group.bStart + i]}`);\n }\n return 1;\n },\n});\n\nfunction formatRange(start: number, count: number): string {\n return count <= 1 ? String(start) : `${start},${start + count - 1}`;\n}\n\ntype Edit = { op: \"equal\" | \"delete\" | \"insert\"; aIndex: number; bIndex: number };\n\n/** Classic LCS diff; fine for the file sizes a sandbox deals with. */\nfunction diffLines(a: string[], b: string[]): Edit[] {\n const n = a.length;\n const m = b.length;\n const lcs: number[][] = Array.from({ length: n + 1 }, () => new Array<number>(m + 1).fill(0));\n for (let i = n - 1; i >= 0; i--) {\n for (let j = m - 1; j >= 0; j--) {\n lcs[i]![j] = a[i] === b[j] ? lcs[i + 1]![j + 1]! + 1 : Math.max(lcs[i + 1]![j]!, lcs[i]![j + 1]!);\n }\n }\n const edits: Edit[] = [];\n let i = 0;\n let j = 0;\n while (i < n && j < m) {\n if (a[i] === b[j]) {\n edits.push({ op: \"equal\", aIndex: i, bIndex: j });\n i++;\n j++;\n } else if (lcs[i + 1]![j]! >= lcs[i]![j + 1]!) {\n edits.push({ op: \"delete\", aIndex: i, bIndex: j });\n i++;\n } else {\n edits.push({ op: \"insert\", aIndex: i, bIndex: j });\n j++;\n }\n }\n while (i < n) edits.push({ op: \"delete\", aIndex: i++, bIndex: j });\n while (j < m) edits.push({ op: \"insert\", aIndex: i, bIndex: j++ });\n return edits.some((e) => e.op !== \"equal\") ? edits : [];\n}\n\ninterface Group {\n aStart: number;\n aCount: number;\n bStart: number;\n bCount: number;\n}\n\nfunction groupScript(edits: Edit[]): Group[] {\n const groups: Group[] = [];\n let current: Group | null = null;\n for (const edit of edits) {\n if (edit.op === \"equal\") {\n current = null;\n continue;\n }\n if (!current) {\n current = { aStart: edit.aIndex, aCount: 0, bStart: edit.bIndex, bCount: 0 };\n groups.push(current);\n }\n if (edit.op === \"delete\") current.aCount++;\n else current.bCount++;\n }\n return groups;\n}\n\ninterface Hunk {\n aStart: number;\n aCount: number;\n bStart: number;\n bCount: number;\n lines: string[];\n}\n\nfunction buildHunks(edits: Edit[], a: string[], b: string[], context: number): Hunk[] {\n const changed = edits.map((e) => e.op !== \"equal\");\n const hunks: Hunk[] = [];\n let i = 0;\n while (i < edits.length) {\n if (!changed[i]) {\n i++;\n continue;\n }\n let start = Math.max(0, i - context);\n let end = i;\n while (end < edits.length && (changed[end] || edits.slice(end, end + context + 1).some((_, k) => changed[end + k]))) end++;\n end = Math.min(edits.length, end + context);\n\n const slice = edits.slice(start, end);\n const aStart = slice.find((e) => e.op !== \"insert\")?.aIndex ?? 0;\n const bStart = slice.find((e) => e.op !== \"delete\")?.bIndex ?? 0;\n const lines: string[] = [];\n let aCount = 0;\n let bCount = 0;\n for (const edit of slice) {\n if (edit.op === \"equal\") {\n lines.push(\" \" + a[edit.aIndex]);\n aCount++;\n bCount++;\n } else if (edit.op === \"delete\") {\n lines.push(\"-\" + a[edit.aIndex]);\n aCount++;\n } else {\n lines.push(\"+\" + b[edit.bIndex]);\n bCount++;\n }\n }\n hunks.push({ aStart: aStart + 1, aCount, bStart: bStart + 1, bCount, lines });\n i = end;\n }\n return hunks;\n}\n\nexport const cmp: Command = defineCommand({\n name: \"cmp\",\n path: \"/usr/bin/cmp\",\n summary: \"compare two files byte by byte\",\n async run(ctx) {\n const args = parseArgs(ctx.args, [{ short: \"s\", long: \"silent\" }, { short: \"l\", long: \"verbose\" }]);\n const [a, b] = args.positional;\n if (a === undefined || b === undefined) return ctx.fail(\"missing operand\", 2);\n const { sources, ok } = await readInputs(ctx, [a, b]);\n if (!ok) return 2;\n const left = sources[0]!.bytes;\n const right = sources[1]!.bytes;\n\n const length = Math.min(left.length, right.length);\n let line = 1;\n for (let i = 0; i < length; i++) {\n if (left[i] === 0x0a) line++;\n if (left[i] !== right[i]) {\n if (args.has(\"silent\")) return 1;\n if (args.has(\"verbose\")) {\n ctx.line(`${String(i + 1).padStart(7)} ${left[i]!.toString(8).padStart(3, \"0\")} ${right[i]!.toString(8).padStart(3, \"0\")}`);\n continue;\n }\n ctx.line(`${a} ${b} differ: byte ${i + 1}, line ${line}`);\n return 1;\n }\n }\n if (left.length !== right.length) {\n if (!args.has(\"silent\")) {\n ctx.warn(`EOF on ${left.length < right.length ? a : b} after byte ${length}`);\n }\n return 1;\n }\n return 0;\n },\n});\n\nexport const commands: Command[] = [grep, find, xargs, diff, cmp];\n","/** Archiving and compression: tar, gzip, gunzip, zcat, zip-less basics. */\n\nimport { defineCommand, type Command, type ExecContext } from \"../kernel/command.js\";\nimport { parseArgs } from \"../util/args.js\";\nimport { formatMode } from \"../fs/mode.js\";\nimport * as P from \"../fs/path.js\";\nimport { gzipSync, gunzipSync, deflateSync, inflateSync } from \"node:zlib\";\n\n// ── tar format ──────────────────────────────────────────────────────────────\n\ninterface TarEntry {\n name: string;\n mode: number;\n uid: number;\n gid: number;\n size: number;\n mtime: number;\n type: \"file\" | \"directory\" | \"symlink\";\n linkName?: string;\n data?: Uint8Array;\n}\n\nconst BLOCK = 512;\nconst encoder = new TextEncoder();\nconst decoder = new TextDecoder();\n\nfunction writeString(block: Uint8Array, offset: number, value: string, length: number): void {\n const bytes = encoder.encode(value);\n for (let i = 0; i < length; i++) block[offset + i] = i < bytes.length ? bytes[i]! : 0;\n}\n\nfunction writeOctal(block: Uint8Array, offset: number, value: number, length: number): void {\n const text = value.toString(8).padStart(length - 1, \"0\");\n writeString(block, offset, text, length);\n}\n\nfunction readString(block: Uint8Array, offset: number, length: number): string {\n let end = offset;\n while (end < offset + length && block[end] !== 0) end++;\n return decoder.decode(block.subarray(offset, end));\n}\n\nfunction readOctal(block: Uint8Array, offset: number, length: number): number {\n const text = readString(block, offset, length).trim();\n return text === \"\" ? 0 : parseInt(text, 8) || 0;\n}\n\nexport function createTar(entries: TarEntry[]): Uint8Array {\n const blocks: Uint8Array[] = [];\n for (const entry of entries) {\n const header = new Uint8Array(BLOCK);\n const typeFlag = entry.type === \"directory\" ? \"5\" : entry.type === \"symlink\" ? \"2\" : \"0\";\n const name = entry.type === \"directory\" && !entry.name.endsWith(\"/\") ? entry.name + \"/\" : entry.name;\n\n writeString(header, 0, name.slice(0, 100), 100);\n writeOctal(header, 100, entry.mode & 0o7777, 8);\n writeOctal(header, 108, entry.uid, 8);\n writeOctal(header, 116, entry.gid, 8);\n writeOctal(header, 124, entry.type === \"file\" ? entry.size : 0, 12);\n writeOctal(header, 136, Math.floor(entry.mtime / 1000), 12);\n writeString(header, 148, \" \", 8); // checksum placeholder\n writeString(header, 156, typeFlag, 1);\n if (entry.linkName) writeString(header, 157, entry.linkName.slice(0, 100), 100);\n writeString(header, 257, \"ustar\", 6);\n writeString(header, 263, \"00\", 2);\n writeString(header, 265, \"root\", 32);\n writeString(header, 297, \"root\", 32);\n\n let checksum = 0;\n for (const byte of header) checksum += byte;\n writeString(header, 148, checksum.toString(8).padStart(6, \"0\") + \"\\0 \", 8);\n\n blocks.push(header);\n if (entry.type === \"file\" && entry.data) {\n const padded = new Uint8Array(Math.ceil(entry.data.length / BLOCK) * BLOCK);\n padded.set(entry.data);\n blocks.push(padded);\n }\n }\n blocks.push(new Uint8Array(BLOCK * 2)); // end-of-archive\n\n const total = blocks.reduce((sum, b) => sum + b.length, 0);\n const out = new Uint8Array(total);\n let offset = 0;\n for (const block of blocks) {\n out.set(block, offset);\n offset += block.length;\n }\n return out;\n}\n\nexport function readTar(data: Uint8Array): TarEntry[] {\n const entries: TarEntry[] = [];\n let offset = 0;\n let longName: string | undefined;\n\n while (offset + BLOCK <= data.length) {\n const header = data.subarray(offset, offset + BLOCK);\n if (header.every((b) => b === 0)) break;\n\n const rawName = readString(header, 0, 100);\n const prefix = readString(header, 345, 155);\n const size = readOctal(header, 124, 12);\n const typeFlag = readString(header, 156, 1) || \"0\";\n offset += BLOCK;\n\n const body = data.subarray(offset, offset + size);\n offset += Math.ceil(size / BLOCK) * BLOCK;\n\n if (typeFlag === \"L\") {\n longName = decoder.decode(body).replace(/\\0+$/, \"\");\n continue;\n }\n\n const name = longName ?? (prefix ? `${prefix}/${rawName}` : rawName);\n longName = undefined;\n\n const entry: TarEntry = {\n name: name.replace(/\\/+$/, \"\") || name,\n mode: readOctal(header, 100, 8),\n uid: readOctal(header, 108, 8),\n gid: readOctal(header, 116, 8),\n size,\n mtime: readOctal(header, 136, 12) * 1000,\n type: typeFlag === \"5\" ? \"directory\" : typeFlag === \"2\" ? \"symlink\" : \"file\",\n };\n if (typeFlag === \"2\") entry.linkName = readString(header, 157, 100);\n if (entry.type === \"file\") entry.data = body.slice();\n entries.push(entry);\n }\n return entries;\n}\n\n// ── tar command ─────────────────────────────────────────────────────────────\n\nexport const tar: Command = defineCommand({\n name: \"tar\",\n path: \"/bin/tar\",\n summary: \"an archiving utility\",\n usage: \"tar [-cxtzvf] [ARCHIVE] [FILE]...\",\n async run(ctx) {\n // tar accepts an old-style bundled flag word without a leading dash.\n const argv = ctx.args.length && /^[cxtrudzjJvfphC]+$/.test(ctx.args[0]!) && !ctx.args[0]!.startsWith(\"-\")\n ? [\"-\" + ctx.args[0]!, ...ctx.args.slice(1)]\n : ctx.args;\n\n const args = parseArgs(argv, [\n { short: \"c\", long: \"create\" },\n { short: \"x\", long: \"extract\" },\n { short: \"t\", long: \"list\" },\n { short: \"r\", long: \"append\" },\n { short: \"f\", long: \"file\", arg: true },\n { short: \"z\", long: \"gzip\" },\n { short: \"j\", long: \"bzip2\" },\n { short: \"v\", long: \"verbose\" },\n { short: \"C\", long: \"directory\", arg: true },\n { short: \"p\", long: \"preserve-permissions\" },\n { long: \"strip-components\", arg: true },\n { long: \"exclude\", arg: true, multiple: true },\n ]);\n\n const archive = args.str(\"file\");\n const baseDir = args.str(\"directory\") ? ctx.path(args.str(\"directory\")!) : ctx.cwd;\n const compressed = args.has(\"gzip\") || (archive !== undefined && /\\.(tgz|tar\\.gz)$/.test(archive));\n\n if (args.has(\"create\")) {\n const entries: TarEntry[] = [];\n const add = (abs: string, name: string) => {\n let st;\n try {\n st = ctx.vfs.lstat(abs);\n } catch {\n ctx.warn(`${name}: Cannot stat: No such file or directory`);\n return;\n }\n if (args.list(\"exclude\").some((pattern) => name.includes(pattern.replace(/\\*/g, \"\")))) return;\n\n if (st.isDirectory()) {\n entries.push({ name, mode: st.mode & 0o7777, uid: st.uid, gid: st.gid, size: 0, mtime: st.mtimeMs, type: \"directory\" });\n if (args.has(\"verbose\")) ctx.line(name + \"/\");\n for (const child of ctx.vfs.readdir(abs, ctx.cred).sort()) {\n add(P.join(abs, child), `${name}/${child}`);\n }\n return;\n }\n if (st.isSymbolicLink()) {\n entries.push({\n name,\n mode: st.mode & 0o7777,\n uid: st.uid,\n gid: st.gid,\n size: 0,\n mtime: st.mtimeMs,\n type: \"symlink\",\n linkName: ctx.vfs.readlink(abs, ctx.cred),\n });\n if (args.has(\"verbose\")) ctx.line(name);\n return;\n }\n const data = ctx.vfs.readFile(abs, ctx.cred);\n entries.push({ name, mode: st.mode & 0o7777, uid: st.uid, gid: st.gid, size: data.length, mtime: st.mtimeMs, type: \"file\", data });\n if (args.has(\"verbose\")) ctx.line(name);\n };\n\n for (const operand of args.positional) add(P.resolve(baseDir, operand), operand);\n\n let bytes = createTar(entries);\n if (compressed) bytes = new Uint8Array(gzipSync(bytes));\n if (archive === undefined || archive === \"-\") ctx.write(bytes);\n else ctx.vfs.writeFile(ctx.path(archive), bytes, { cred: ctx.cred, mode: 0o644 });\n return 0;\n }\n\n // Read the archive for -x / -t.\n let bytes: Uint8Array;\n if (archive === undefined || archive === \"-\") bytes = await ctx.stdin.readAll();\n else {\n try {\n bytes = ctx.vfs.readFile(ctx.path(archive), ctx.cred);\n } catch (e) {\n return ctx.reportError(e, archive);\n }\n }\n if (bytes[0] === 0x1f && bytes[1] === 0x8b) bytes = new Uint8Array(gunzipSync(bytes));\n\n const entries = readTar(bytes);\n const strip = args.num(\"strip-components\", 0)!;\n\n if (args.has(\"list\")) {\n for (const entry of entries) {\n if (args.has(\"verbose\")) {\n const kind = entry.type === \"directory\" ? 0o040000 : entry.type === \"symlink\" ? 0o120000 : 0o100000;\n ctx.line(\n `${formatMode(kind | entry.mode)} root/root ${String(entry.size).padStart(9)} ${new Date(entry.mtime).toISOString().slice(0, 16).replace(\"T\", \" \")} ${entry.name}${entry.type === \"directory\" ? \"/\" : \"\"}`,\n );\n } else {\n ctx.line(entry.name + (entry.type === \"directory\" ? \"/\" : \"\"));\n }\n }\n return 0;\n }\n\n if (args.has(\"extract\")) {\n for (const entry of entries) {\n const stripped = strip > 0 ? entry.name.split(\"/\").slice(strip).join(\"/\") : entry.name;\n if (stripped === \"\") continue;\n if (args.positional.length && !args.positional.some((p) => stripped === p || stripped.startsWith(p + \"/\"))) continue;\n\n const abs = P.resolve(baseDir, stripped);\n try {\n if (entry.type === \"directory\") {\n ctx.vfs.mkdir(abs, { recursive: true, cred: ctx.cred, mode: entry.mode || 0o755 });\n } else if (entry.type === \"symlink\") {\n if (ctx.vfs.lexists(abs)) ctx.vfs.unlink(abs, ctx.cred);\n ctx.vfs.symlink(entry.linkName ?? \"\", abs, ctx.cred);\n } else {\n const parent = P.dirname(abs);\n if (!ctx.vfs.lexists(parent)) ctx.vfs.mkdir(parent, { recursive: true, cred: ctx.cred, mode: 0o755 });\n ctx.vfs.writeFile(abs, entry.data ?? new Uint8Array(0), { cred: ctx.cred, mode: entry.mode || 0o644 });\n ctx.vfs.chmod(abs, entry.mode || 0o644, ctx.cred);\n ctx.vfs.utimes(abs, entry.mtime, entry.mtime, ctx.cred);\n }\n if (args.has(\"verbose\")) ctx.line(stripped);\n } catch (e) {\n ctx.reportError(e, stripped);\n }\n }\n return 0;\n }\n\n ctx.warn(\"You must specify one of the '-Acdtrux' options\");\n return 2;\n },\n});\n\n// ── gzip family ─────────────────────────────────────────────────────────────\n\nexport const gzip: Command = defineCommand({\n name: \"gzip\",\n path: \"/bin/gzip\",\n summary: \"compress files\",\n usage: \"gzip [-cdkfv] [FILE]...\",\n async run(ctx) {\n const args = parseArgs(ctx.args, [\n { short: \"c\", long: \"stdout\" },\n { short: \"d\", long: \"decompress\" },\n { short: \"k\", long: \"keep\" },\n { short: \"f\", long: \"force\" },\n { short: \"v\", long: \"verbose\" },\n { short: \"1\" },\n { short: \"9\" },\n { short: \"n\" },\n ]);\n const decompress = args.has(\"decompress\") || ctx.name === \"gunzip\" || ctx.name === \"zcat\";\n const toStdout = args.has(\"stdout\") || ctx.name === \"zcat\";\n return await runCompressor(ctx, args.positional, {\n decompress,\n toStdout,\n keep: args.has(\"keep\") || ctx.name === \"zcat\",\n suffix: \".gz\",\n compress: (data) => new Uint8Array(gzipSync(data)),\n expand: (data) => new Uint8Array(gunzipSync(data)),\n });\n },\n});\n\nexport const gunzip: Command = defineCommand({\n name: \"gunzip\",\n path: \"/bin/gunzip\",\n summary: \"decompress files\",\n run: (ctx) => gzip.run(ctx),\n});\n\nexport const zcat: Command = defineCommand({\n name: \"zcat\",\n path: \"/bin/zcat\",\n summary: \"decompress files to standard output\",\n run: (ctx) => gzip.run(ctx),\n});\n\nasync function runCompressor(\n ctx: ExecContext,\n operands: string[],\n opts: {\n decompress: boolean;\n toStdout: boolean;\n keep: boolean;\n suffix: string;\n compress: (data: Uint8Array) => Uint8Array;\n expand: (data: Uint8Array) => Uint8Array;\n },\n): Promise<number> {\n if (operands.length === 0) {\n const data = await ctx.stdin.readAll();\n try {\n ctx.write(opts.decompress ? opts.expand(data) : opts.compress(data));\n return 0;\n } catch (e) {\n return ctx.fail(e instanceof Error ? e.message : String(e));\n }\n }\n\n let status = 0;\n for (const operand of operands) {\n const abs = ctx.path(operand);\n let data: Uint8Array;\n try {\n data = ctx.vfs.readFile(abs, ctx.cred);\n } catch (e) {\n status = ctx.reportError(e, operand);\n continue;\n }\n try {\n const result = opts.decompress ? opts.expand(data) : opts.compress(data);\n if (opts.toStdout) {\n ctx.write(result);\n continue;\n }\n const target = opts.decompress\n ? abs.endsWith(opts.suffix)\n ? abs.slice(0, -opts.suffix.length)\n : abs + \".out\"\n : abs + opts.suffix;\n ctx.vfs.writeFile(target, result, { cred: ctx.cred, mode: 0o644 });\n if (!opts.keep) ctx.vfs.unlink(abs, ctx.cred);\n } catch (e) {\n ctx.warn(`${operand}: ${e instanceof Error ? e.message : String(e)}`);\n status = 1;\n }\n }\n return status;\n}\n\nexport const zlibCompress: Command = defineCommand({\n name: \"compress\",\n path: \"/usr/bin/compress\",\n summary: \"deflate compress\",\n async run(ctx) {\n const args = parseArgs(ctx.args, [{ short: \"d\", long: \"decompress\" }, { short: \"c\", long: \"stdout\" }]);\n return runCompressor(ctx, args.positional, {\n decompress: args.has(\"decompress\"),\n toStdout: args.has(\"stdout\"),\n keep: false,\n suffix: \".Z\",\n compress: (data) => new Uint8Array(deflateSync(data)),\n expand: (data) => new Uint8Array(inflateSync(data)),\n });\n },\n});\n\nexport const commands: Command[] = [tar, gzip, gunzip, zcat, zlibCompress];\n","/** Digests and encodings: md5sum, sha*sum, cksum, base64, base32, uuidgen. */\n\nimport { defineCommand, type Command, type ExecContext } from \"../kernel/command.js\";\nimport { parseArgs } from \"../util/args.js\";\nimport { readInputs, splitLines } from \"./helpers.js\";\nimport { createHash, randomUUID } from \"node:crypto\";\n\nfunction makeSum(name: string, algorithm: string, path: string): Command {\n return defineCommand({\n name,\n path,\n summary: `compute and check ${algorithm.toUpperCase()} message digest`,\n usage: `${name} [OPTION]... [FILE]...`,\n async run(ctx) {\n const args = parseArgs(ctx.args, [\n { short: \"c\", long: \"check\" },\n { short: \"b\", long: \"binary\" },\n { short: \"t\", long: \"text\" },\n { short: \"q\", long: \"quiet\" },\n { short: \"s\", long: \"status\" },\n { long: \"tag\" },\n ]);\n\n if (args.has(\"check\")) return checkSums(ctx, algorithm, args.positional, args.has(\"quiet\") || args.has(\"status\"));\n\n const { sources, ok } = await readInputs(ctx, args.positional, { stdinName: \"-\" });\n for (const source of sources) {\n const digest = createHash(algorithm).update(source.bytes).digest(\"hex\");\n if (args.has(\"tag\")) ctx.line(`${algorithm.toUpperCase()} (${source.name}) = ${digest}`);\n else ctx.line(`${digest} ${source.name}`);\n }\n return ok ? 0 : 1;\n },\n });\n}\n\nasync function checkSums(ctx: ExecContext, algorithm: string, files: string[], quiet: boolean): Promise<number> {\n const { sources, ok } = await readInputs(ctx, files);\n let failures = 0;\n let checked = 0;\n\n for (const source of sources) {\n for (const line of splitLines(source.bytes).lines) {\n if (line.trim() === \"\") continue;\n const m = /^([0-9a-fA-F]+)\\s[\\s*](.+)$/.exec(line) ?? /^([0-9a-fA-F]+)\\s+(.+)$/.exec(line);\n if (!m) continue;\n checked++;\n const [, expected, name] = m as unknown as [string, string, string];\n try {\n const bytes = ctx.vfs.readFile(ctx.path(name), ctx.cred);\n const actual = createHash(algorithm).update(bytes).digest(\"hex\");\n if (actual === expected.toLowerCase()) {\n if (!quiet) ctx.line(`${name}: OK`);\n } else {\n ctx.line(`${name}: FAILED`);\n failures++;\n }\n } catch {\n ctx.warn(`${name}: No such file or directory`);\n failures++;\n }\n }\n }\n\n if (failures > 0) ctx.warn(`WARNING: ${failures} computed checksum${failures === 1 ? \"\" : \"s\"} did NOT match`);\n return ok && failures === 0 && checked > 0 ? 0 : 1;\n}\n\nexport const md5sum = makeSum(\"md5sum\", \"md5\", \"/usr/bin/md5sum\");\nexport const sha1sum = makeSum(\"sha1sum\", \"sha1\", \"/usr/bin/sha1sum\");\nexport const sha224sum = makeSum(\"sha224sum\", \"sha224\", \"/usr/bin/sha224sum\");\nexport const sha256sum = makeSum(\"sha256sum\", \"sha256\", \"/usr/bin/sha256sum\");\nexport const sha384sum = makeSum(\"sha384sum\", \"sha384\", \"/usr/bin/sha384sum\");\nexport const sha512sum = makeSum(\"sha512sum\", \"sha512\", \"/usr/bin/sha512sum\");\n\nexport const cksum: Command = defineCommand({\n name: \"cksum\",\n path: \"/usr/bin/cksum\",\n summary: \"checksum and count the bytes in a file\",\n async run(ctx) {\n const { sources, ok } = await readInputs(ctx, ctx.args, { stdinName: \"\" });\n for (const source of sources) {\n ctx.line(`${crc32(source.bytes)} ${source.bytes.length}${source.name ? ` ${source.name}` : \"\"}`);\n }\n return ok ? 0 : 1;\n },\n});\n\nconst CRC_TABLE = (() => {\n const table = new Uint32Array(256);\n for (let i = 0; i < 256; i++) {\n let c = i;\n for (let k = 0; k < 8; k++) c = c & 1 ? 0xedb88320 ^ (c >>> 1) : c >>> 1;\n table[i] = c >>> 0;\n }\n return table;\n})();\n\nfunction crc32(data: Uint8Array): number {\n let crc = 0xffffffff;\n for (const byte of data) crc = CRC_TABLE[(crc ^ byte) & 0xff]! ^ (crc >>> 8);\n return (crc ^ 0xffffffff) >>> 0;\n}\n\nexport const base64Cmd: Command = defineCommand({\n name: \"base64\",\n path: \"/usr/bin/base64\",\n summary: \"base64 encode/decode data\",\n usage: \"base64 [-d] [-w COLS] [FILE]\",\n async run(ctx) {\n const args = parseArgs(ctx.args, [\n { short: \"d\", long: \"decode\" },\n { short: \"i\", long: \"ignore-garbage\" },\n { short: \"w\", long: \"wrap\", arg: true, default: \"76\" },\n ]);\n const { sources, ok } = await readInputs(ctx, args.positional);\n for (const source of sources) {\n if (args.has(\"decode\")) {\n const text = new TextDecoder().decode(source.bytes).replace(/\\s+/g, \"\");\n try {\n ctx.write(new Uint8Array(Buffer.from(text, \"base64\")));\n } catch {\n return ctx.fail(\"invalid input\");\n }\n continue;\n }\n const encoded = Buffer.from(source.bytes).toString(\"base64\");\n const wrap = args.num(\"wrap\", 76)!;\n if (wrap <= 0) {\n ctx.line(encoded);\n continue;\n }\n for (let i = 0; i < encoded.length; i += wrap) ctx.line(encoded.slice(i, i + wrap));\n }\n return ok ? 0 : 1;\n },\n});\n\nexport const base32Cmd: Command = defineCommand({\n name: \"base32\",\n path: \"/usr/bin/base32\",\n summary: \"base32 encode/decode data\",\n async run(ctx) {\n const args = parseArgs(ctx.args, [{ short: \"d\", long: \"decode\" }, { short: \"w\", long: \"wrap\", arg: true, default: \"76\" }]);\n const { sources, ok } = await readInputs(ctx, args.positional);\n const ALPHABET = \"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567\";\n\n for (const source of sources) {\n if (args.has(\"decode\")) {\n const text = new TextDecoder().decode(source.bytes).replace(/[\\s=]/g, \"\").toUpperCase();\n const out: number[] = [];\n let bits = 0;\n let value = 0;\n for (const ch of text) {\n const idx = ALPHABET.indexOf(ch);\n if (idx < 0) continue;\n value = (value << 5) | idx;\n bits += 5;\n if (bits >= 8) {\n out.push((value >>> (bits - 8)) & 0xff);\n bits -= 8;\n }\n }\n ctx.write(new Uint8Array(out));\n continue;\n }\n let out = \"\";\n let bits = 0;\n let value = 0;\n for (const byte of source.bytes) {\n value = (value << 8) | byte;\n bits += 8;\n while (bits >= 5) {\n out += ALPHABET[(value >>> (bits - 5)) & 31];\n bits -= 5;\n }\n }\n if (bits > 0) out += ALPHABET[(value << (5 - bits)) & 31];\n while (out.length % 8 !== 0) out += \"=\";\n const wrap = args.num(\"wrap\", 76)!;\n for (let i = 0; i < out.length; i += wrap) ctx.line(out.slice(i, i + wrap));\n }\n return ok ? 0 : 1;\n },\n});\n\nexport const uuidgen: Command = defineCommand({\n name: \"uuidgen\",\n path: \"/usr/bin/uuidgen\",\n summary: \"create a new UUID value\",\n run(ctx) {\n ctx.line(randomUUID());\n return 0;\n },\n});\n\nexport const mktemp: Command = defineCommand({\n name: \"mktemp\",\n path: \"/usr/bin/mktemp\",\n summary: \"create a temporary file or directory\",\n run(ctx) {\n const args = parseArgs(ctx.args, [\n { short: \"d\", long: \"directory\" },\n { short: \"u\", long: \"dry-run\" },\n { short: \"p\", long: \"tmpdir\", arg: true },\n { short: \"t\" },\n { long: \"suffix\", arg: true },\n ]);\n const template = args.positional[0] ?? \"tmp.XXXXXXXXXX\";\n const dir = args.str(\"tmpdir\") ?? ctx.env.TMPDIR ?? \"/tmp\";\n const random = () => Math.random().toString(36).slice(2, 12).padEnd(10, \"0\");\n const name = template.replace(/X{3,}/, () => random()) + (args.str(\"suffix\") ?? \"\");\n const abs = name.includes(\"/\") ? ctx.path(name) : `${dir.replace(/\\/$/, \"\")}/${name}`;\n\n if (!args.has(\"dry-run\")) {\n try {\n if (args.has(\"directory\")) ctx.vfs.mkdir(abs, { recursive: true, cred: ctx.cred, mode: 0o700 });\n else ctx.vfs.writeFile(abs, new Uint8Array(0), { cred: ctx.cred, mode: 0o600 });\n } catch (e) {\n return ctx.reportError(e, abs);\n }\n }\n ctx.line(abs);\n return 0;\n },\n});\n\nexport const commands: Command[] = [\n md5sum,\n sha1sum,\n sha224sum,\n sha256sum,\n sha384sum,\n sha512sum,\n cksum,\n base64Cmd,\n base32Cmd,\n uuidgen,\n mktemp,\n];\n","/**\n * Network tools. Requests to `localhost`/`127.0.0.1` are routed to servers\n * running inside the container; everything else is subject to the container's\n * outbound policy, which is off by default.\n */\n\nimport { defineCommand, type Command, type ExecContext } from \"../kernel/command.js\";\nimport { parseArgs } from \"../util/args.js\";\nimport { humanSize } from \"../bin/helpers.js\";\nimport * as P from \"../fs/path.js\";\n\ninterface RequestResult {\n status: number;\n statusText: string;\n headers: Record<string, string>;\n body: Uint8Array;\n url: string;\n}\n\nfunction parseUrl(raw: string): URL | null {\n try {\n return new URL(/^[a-z]+:\\/\\//i.test(raw) ? raw : `http://${raw}`);\n } catch {\n return null;\n }\n}\n\n/** Route a request either into the container or out to the real network. */\nasync function performRequest(\n ctx: ExecContext,\n url: URL,\n init: { method: string; headers: Record<string, string>; body?: Uint8Array },\n): Promise<RequestResult> {\n const isLocal = ctx.kernel.net.isLocal(url.hostname);\n\n if (isLocal) {\n const port = Number(url.port || (url.protocol === \"https:\" ? 443 : 80));\n const response = await ctx.kernel.pod.request(port, {\n method: init.method,\n path: url.pathname + url.search,\n headers: { host: url.host, ...init.headers },\n body: init.body ?? null,\n });\n const raw = (response as { body?: unknown }).body;\n const body =\n raw instanceof Uint8Array ? raw : typeof raw === \"string\" ? new TextEncoder().encode(raw) : new Uint8Array(0);\n ctx.kernel.net.countRx(body.length, \"lo\");\n return {\n status: response.statusCode ?? 200,\n statusText: response.statusMessage ?? \"\",\n headers: (response.headers ?? {}) as Record<string, string>,\n body,\n url: url.toString(),\n };\n }\n\n if (!ctx.kernel.net.outboundAllowed(url.toString())) {\n throw new Error(\n `outbound network access to ${url.hostname} is disabled for this container (enable with network: { allowOutbound: true })`,\n );\n }\n\n const response = await fetch(url.toString(), {\n method: init.method,\n headers: init.headers,\n ...(init.body ? { body: init.body.slice().buffer as ArrayBuffer } : {}),\n });\n const body = new Uint8Array(await response.arrayBuffer());\n ctx.kernel.net.countRx(body.length);\n const headers: Record<string, string> = {};\n response.headers.forEach((value, key) => {\n headers[key] = value;\n });\n return { status: response.status, statusText: response.statusText, headers, body, url: response.url || url.toString() };\n}\n\nexport const curl: Command = defineCommand({\n name: \"curl\",\n path: \"/usr/bin/curl\",\n summary: \"transfer data from or to a server\",\n usage: \"curl [options] <url>\",\n async run(ctx) {\n const args = parseArgs(ctx.args, [\n { short: \"X\", long: \"request\", arg: true, default: \"GET\" },\n { short: \"H\", long: \"header\", arg: true, multiple: true },\n { short: \"d\", long: \"data\", arg: true, multiple: true },\n { long: \"data-raw\", arg: true, multiple: true },\n { short: \"o\", long: \"output\", arg: true },\n { short: \"O\", long: \"remote-name\" },\n { short: \"i\", long: \"include\" },\n { short: \"I\", long: \"head\" },\n { short: \"s\", long: \"silent\" },\n { short: \"S\", long: \"show-error\" },\n { short: \"L\", long: \"location\" },\n { short: \"f\", long: \"fail\" },\n { short: \"k\", long: \"insecure\" },\n { short: \"v\", long: \"verbose\" },\n { short: \"A\", long: \"user-agent\", arg: true },\n { short: \"w\", long: \"write-out\", arg: true },\n { long: \"json\", arg: true },\n { long: \"compressed\" },\n { long: \"max-time\", arg: true },\n { long: \"connect-timeout\", arg: true },\n ]);\n\n const target = args.positional[0];\n if (target === undefined) {\n ctx.warn(\"try 'curl --help' for more information\");\n return 2;\n }\n const url = parseUrl(target);\n if (!url) {\n ctx.warn(`(3) URL rejected: Bad hostname`);\n return 3;\n }\n\n const headers: Record<string, string> = {\n \"user-agent\": args.str(\"user-agent\", \"curl/8.5.0\")!,\n accept: \"*/*\",\n };\n for (const header of args.list(\"header\")) {\n const idx = header.indexOf(\":\");\n if (idx > 0) headers[header.slice(0, idx).trim().toLowerCase()] = header.slice(idx + 1).trim();\n }\n\n const dataParts = [...args.list(\"data\"), ...args.list(\"data-raw\")];\n const jsonBody = args.str(\"json\");\n let body: Uint8Array | undefined;\n let method = args.str(\"request\", \"GET\")!;\n\n if (jsonBody !== undefined) {\n body = new TextEncoder().encode(jsonBody);\n headers[\"content-type\"] = \"application/json\";\n headers.accept = \"application/json\";\n if (!args.has(\"request\")) method = \"POST\";\n } else if (dataParts.length) {\n body = new TextEncoder().encode(dataParts.join(\"&\"));\n headers[\"content-type\"] ??= \"application/x-www-form-urlencoded\";\n if (!args.has(\"request\")) method = \"POST\";\n }\n if (args.has(\"head\")) method = \"HEAD\";\n\n if (args.has(\"verbose\")) {\n ctx.stderr.write(`* Connecting to ${url.hostname}:${url.port || (url.protocol === \"https:\" ? 443 : 80)}\\n`);\n ctx.stderr.write(`> ${method} ${url.pathname}${url.search} HTTP/1.1\\n> Host: ${url.host}\\n`);\n for (const [key, value] of Object.entries(headers)) ctx.stderr.write(`> ${key}: ${value}\\n`);\n ctx.stderr.write(\">\\n\");\n }\n\n let result: RequestResult;\n try {\n result = await performRequest(ctx, url, { method, headers, ...(body ? { body } : {}) });\n } catch (e) {\n if (!args.has(\"silent\") || args.has(\"show-error\")) {\n ctx.warn(`(7) ${e instanceof Error ? e.message : String(e)}`);\n }\n return 7;\n }\n\n if (args.has(\"fail\") && result.status >= 400) {\n if (!args.has(\"silent\")) ctx.warn(`(22) The requested URL returned error: ${result.status}`);\n return 22;\n }\n\n const headerText =\n `HTTP/1.1 ${result.status} ${result.statusText}\\r\\n` +\n Object.entries(result.headers)\n .map(([k, v]) => `${k}: ${v}`)\n .join(\"\\r\\n\") +\n \"\\r\\n\\r\\n\";\n\n if (args.has(\"verbose\")) {\n for (const line of headerText.split(\"\\r\\n\")) if (line) ctx.stderr.write(`< ${line}\\n`);\n }\n\n const payload = args.has(\"include\") || args.has(\"head\") ? concat(new TextEncoder().encode(headerText), args.has(\"head\") ? new Uint8Array(0) : result.body) : result.body;\n\n const outputPath = args.str(\"output\") ?? (args.has(\"remote-name\") ? P.basename(url.pathname) || \"index.html\" : undefined);\n if (outputPath && outputPath !== \"-\") {\n ctx.vfs.writeFile(ctx.path(outputPath), payload, { cred: ctx.cred, mode: 0o644 });\n } else {\n ctx.write(payload);\n }\n\n const writeOut = args.str(\"write-out\");\n if (writeOut) {\n ctx.write(\n writeOut\n .replace(/%\\{http_code\\}/g, String(result.status))\n .replace(/%\\{size_download\\}/g, String(result.body.length))\n .replace(/%\\{url_effective\\}/g, result.url)\n .replace(/\\\\n/g, \"\\n\"),\n );\n }\n return 0;\n },\n});\n\nfunction concat(a: Uint8Array, b: Uint8Array): Uint8Array {\n const out = new Uint8Array(a.length + b.length);\n out.set(a);\n out.set(b, a.length);\n return out;\n}\n\nexport const wget: Command = defineCommand({\n name: \"wget\",\n path: \"/usr/bin/wget\",\n summary: \"the non-interactive network downloader\",\n usage: \"wget [options] <url>\",\n async run(ctx) {\n const args = parseArgs(ctx.args, [\n { short: \"O\", long: \"output-document\", arg: true },\n { short: \"q\", long: \"quiet\" },\n { short: \"S\", long: \"server-response\" },\n { long: \"header\", arg: true, multiple: true },\n { short: \"P\", long: \"directory-prefix\", arg: true },\n { long: \"no-check-certificate\" },\n { short: \"c\", long: \"continue\" },\n { short: \"t\", long: \"tries\", arg: true },\n ]);\n\n const target = args.positional[0];\n if (target === undefined) {\n ctx.warn(\"missing URL\");\n return 1;\n }\n const url = parseUrl(target);\n if (!url) return ctx.fail(`invalid URL ${target}`, 1);\n\n const headers: Record<string, string> = { \"user-agent\": \"Wget/1.21.4\" };\n for (const header of args.list(\"header\")) {\n const idx = header.indexOf(\":\");\n if (idx > 0) headers[header.slice(0, idx).trim().toLowerCase()] = header.slice(idx + 1).trim();\n }\n\n const started = Date.now();\n if (!args.has(\"quiet\")) {\n ctx.stderr.write(`--${timestamp(ctx)}-- ${url.toString()}\\n`);\n ctx.stderr.write(`Resolving ${url.hostname}... ${ctx.kernel.net.resolve(url.hostname) ?? \"172.17.0.1\"}\\n`);\n ctx.stderr.write(`Connecting to ${url.hostname}|${ctx.kernel.net.resolve(url.hostname) ?? \"172.17.0.1\"}|:${url.port || 80}... connected.\\n`);\n ctx.stderr.write(\"HTTP request sent, awaiting response... \");\n }\n\n let result: RequestResult;\n try {\n result = await performRequest(ctx, url, { method: \"GET\", headers });\n } catch (e) {\n if (!args.has(\"quiet\")) ctx.stderr.write(`failed: ${e instanceof Error ? e.message : String(e)}.\\n`);\n return 4;\n }\n\n if (!args.has(\"quiet\")) ctx.stderr.write(`${result.status} ${result.statusText}\\n`);\n if (result.status >= 400) {\n if (!args.has(\"quiet\")) ctx.stderr.write(`${timestamp(ctx)} ERROR ${result.status}: ${result.statusText}.\\n`);\n return 8;\n }\n\n const output = args.str(\"output-document\");\n if (output === \"-\") {\n ctx.write(result.body);\n return 0;\n }\n\n const name = output ?? (P.basename(url.pathname) || \"index.html\");\n const dir = args.str(\"directory-prefix\");\n const path = ctx.path(dir ? P.join(dir, name) : name);\n const parent = P.dirname(path);\n if (!ctx.vfs.lexists(parent)) ctx.vfs.mkdir(parent, { recursive: true, cred: ctx.cred, mode: 0o755 });\n ctx.vfs.writeFile(path, result.body, { cred: ctx.cred, mode: 0o644 });\n\n if (!args.has(\"quiet\")) {\n const seconds = Math.max(0.001, (Date.now() - started) / 1000);\n ctx.stderr.write(`Length: ${result.body.length} (${humanSize(result.body.length)})\\n`);\n ctx.stderr.write(`Saving to: '${name}'\\n\\n`);\n ctx.stderr.write(`${timestamp(ctx)} (${humanSize(result.body.length / seconds)}/s) - '${name}' saved [${result.body.length}]\\n`);\n }\n return 0;\n },\n});\n\nfunction timestamp(ctx: ExecContext): string {\n return new Date(ctx.kernel.now()).toISOString().replace(\"T\", \" \").slice(0, 19);\n}\n\nexport const ping: Command = defineCommand({\n name: \"ping\",\n path: \"/bin/ping\",\n summary: \"send ICMP ECHO_REQUEST to network hosts\",\n async run(ctx) {\n const args = parseArgs(ctx.args, [\n { short: \"c\", long: \"count\", arg: true, default: \"4\" },\n { short: \"i\", arg: true, default: \"1\" },\n { short: \"W\", arg: true },\n { short: \"q\" },\n ]);\n const host = args.positional[0];\n if (host === undefined) return ctx.fail(\"usage: ping [-c count] destination\", 2);\n\n const address = ctx.kernel.net.resolve(host);\n if (!address) {\n ctx.warn(`${host}: Name or service not known`);\n return 2;\n }\n\n const count = args.num(\"count\", 4)!;\n ctx.line(`PING ${host} (${address}) 56(84) bytes of data.`);\n const times: number[] = [];\n for (let i = 0; i < count && !ctx.signal.aborted; i++) {\n if (i > 0) await new Promise((r) => setTimeout(r, Math.min(1000, Number(args.str(\"i\", \"1\")) * 1000)));\n const ms = 0.03 + Math.random() * 0.08;\n times.push(ms);\n if (!args.has(\"q\")) {\n ctx.line(`64 bytes from ${address}: icmp_seq=${i + 1} ttl=64 time=${ms.toFixed(3)} ms`);\n }\n }\n ctx.line(\"\");\n ctx.line(`--- ${host} ping statistics ---`);\n ctx.line(`${times.length} packets transmitted, ${times.length} received, 0% packet loss, time ${times.length * 1000}ms`);\n if (times.length) {\n const min = Math.min(...times);\n const max = Math.max(...times);\n const avg = times.reduce((a, b) => a + b, 0) / times.length;\n ctx.line(`rtt min/avg/max/mdev = ${min.toFixed(3)}/${avg.toFixed(3)}/${max.toFixed(3)}/0.010 ms`);\n }\n return 0;\n },\n});\n\nexport const ip: Command = defineCommand({\n name: \"ip\",\n path: \"/sbin/ip\",\n summary: \"show / manipulate routing, network devices and addresses\",\n run(ctx) {\n const [object, action] = ctx.args;\n const interfaces = ctx.kernel.net.interfaces();\n\n if (object === undefined || object === \"help\") {\n ctx.line(\"Usage: ip [ OPTIONS ] OBJECT { COMMAND | help }\");\n ctx.line(\"where OBJECT := { address | link | route }\");\n return 0;\n }\n\n if (object.startsWith(\"a\")) {\n interfaces.forEach((iface, idx) => {\n ctx.line(\n `${idx + 1}: ${iface.name}: <${iface.loopback ? \"LOOPBACK,UP,LOWER_UP\" : \"BROADCAST,MULTICAST,UP,LOWER_UP\"}> mtu ${iface.mtu} qdisc noqueue state ${iface.up ? \"UP\" : \"DOWN\"} group default`,\n );\n ctx.line(` link/${iface.loopback ? \"loopback\" : \"ether\"} ${iface.mac} brd ${iface.loopback ? \"00:00:00:00:00:00\" : \"ff:ff:ff:ff:ff:ff\"}`);\n ctx.line(` inet ${iface.ipv4}/${maskBits(iface.netmask)} scope ${iface.loopback ? \"host\" : \"global\"} ${iface.name}`);\n if (iface.ipv6) ctx.line(` inet6 ${iface.ipv6}/128 scope ${iface.loopback ? \"host\" : \"link\"}`);\n });\n return 0;\n }\n\n if (object.startsWith(\"l\")) {\n interfaces.forEach((iface, idx) => {\n ctx.line(`${idx + 1}: ${iface.name}: <UP,LOWER_UP> mtu ${iface.mtu} state ${iface.up ? \"UP\" : \"DOWN\"}`);\n ctx.line(` link/${iface.loopback ? \"loopback\" : \"ether\"} ${iface.mac}`);\n });\n return 0;\n }\n\n if (object.startsWith(\"r\")) {\n ctx.line(`default via ${ctx.kernel.net.gateway} dev eth0`);\n const eth0 = ctx.kernel.net.interface(\"eth0\");\n if (eth0) ctx.line(`172.17.0.0/16 dev eth0 proto kernel scope link src ${eth0.ipv4}`);\n return 0;\n }\n\n void action;\n ctx.warn(`Object \"${object}\" is unknown`);\n return 1;\n },\n});\n\nfunction maskBits(mask: string): number {\n return mask\n .split(\".\")\n .map(Number)\n .reduce((bits, octet) => bits + ((octet >>> 0).toString(2).match(/1/g)?.length ?? 0), 0);\n}\n\nexport const ifconfig: Command = defineCommand({\n name: \"ifconfig\",\n path: \"/sbin/ifconfig\",\n summary: \"configure a network interface\",\n run(ctx) {\n for (const iface of ctx.kernel.net.interfaces()) {\n ctx.line(`${iface.name}: flags=${iface.loopback ? \"73<UP,LOOPBACK,RUNNING>\" : \"4163<UP,BROADCAST,RUNNING,MULTICAST>\"} mtu ${iface.mtu}`);\n ctx.line(` inet ${iface.ipv4} netmask ${iface.netmask}${iface.broadcast ? ` broadcast ${iface.broadcast}` : \"\"}`);\n if (iface.ipv6) ctx.line(` inet6 ${iface.ipv6} prefixlen 64 scopeid 0x20<link>`);\n ctx.line(` ${iface.loopback ? \"loop\" : \"ether \" + iface.mac} txqueuelen 1000 (${iface.loopback ? \"Local Loopback\" : \"Ethernet\"})`);\n ctx.line(` RX packets ${iface.rxPackets} bytes ${iface.rxBytes} (${humanSize(iface.rxBytes)})`);\n ctx.line(` TX packets ${iface.txPackets} bytes ${iface.txBytes} (${humanSize(iface.txBytes)})`);\n ctx.line(\"\");\n }\n return 0;\n },\n});\n\nfunction listeningTable(ctx: ExecContext, header: string[], rows: string[][]): void {\n ctx.line(header.join(\" \"));\n for (const row of rows) ctx.line(row.join(\" \"));\n}\n\nexport const ss: Command = defineCommand({\n name: \"ss\",\n path: \"/usr/bin/ss\",\n summary: \"another utility to investigate sockets\",\n run(ctx) {\n const listening = ctx.kernel.net.listening();\n listeningTable(\n ctx,\n [\"State \", \"Recv-Q\", \"Send-Q\", \"Local Address:Port\".padEnd(24), \"Peer Address:Port\"],\n listening.map((entry) => [\n \"LISTEN\",\n \" 0\",\n \" 511\",\n `${entry.address}:${entry.port}`.padEnd(24),\n \"0.0.0.0:*\",\n ]),\n );\n return 0;\n },\n});\n\nexport const netstat: Command = defineCommand({\n name: \"netstat\",\n path: \"/bin/netstat\",\n summary: \"print network connections and listening ports\",\n run(ctx) {\n ctx.line(\"Active Internet connections (only servers)\");\n ctx.line(\"Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name\");\n for (const entry of ctx.kernel.net.listening()) {\n ctx.line(\n `tcp 0 0 ${`${entry.address}:${entry.port}`.padEnd(23)} ${\"0.0.0.0:*\".padEnd(23)} LISTEN ${entry.pid || \"-\"}/${entry.program}`,\n );\n }\n return 0;\n },\n});\n\nexport const nc: Command = defineCommand({\n name: \"nc\",\n path: \"/bin/nc\",\n aliases: [\"netcat\"],\n summary: \"arbitrary TCP and UDP connections and listens\",\n async run(ctx) {\n const args = parseArgs(ctx.args, [\n { short: \"z\", long: \"zero\" },\n { short: \"v\", long: \"verbose\" },\n { short: \"l\", long: \"listen\" },\n { short: \"w\", long: \"wait\", arg: true },\n ]);\n const [host, portRaw] = args.positional;\n if (host === undefined || portRaw === undefined) return ctx.fail(\"usage: nc [-zv] host port\", 2);\n const port = Number(portRaw);\n\n if (args.has(\"listen\")) {\n ctx.warn(\"listening is not supported in this container\");\n return 1;\n }\n\n const open = await ctx.kernel.net.isPortOpen(port, Number(args.str(\"wait\", \"3\")) * 1000);\n if (args.has(\"zero\")) {\n if (args.has(\"verbose\")) {\n ctx.stderr.write(open ? `Connection to ${host} ${port} port [tcp/*] succeeded!\\n` : `nc: connect to ${host} port ${port} (tcp) failed: Connection refused\\n`);\n }\n return open ? 0 : 1;\n }\n\n if (!open) {\n ctx.warn(`connect to ${host} port ${port} (tcp) failed: Connection refused`);\n return 1;\n }\n\n // Treat piped input as a raw HTTP request, which is what nc is used for here.\n const payload = new TextDecoder().decode(await ctx.stdin.readAll());\n const firstLine = payload.split(\"\\r\\n\")[0] ?? \"GET / HTTP/1.1\";\n const [method = \"GET\", path = \"/\"] = firstLine.split(\" \");\n const response = await ctx.kernel.pod.request(port, { method, path, headers: { host: `${host}:${port}` } });\n ctx.line(`HTTP/1.1 ${response.statusCode} ${response.statusMessage ?? \"\"}`);\n for (const [key, value] of Object.entries(response.headers ?? {})) ctx.line(`${key}: ${value}`);\n ctx.line(\"\");\n ctx.write(typeof response.body === \"string\" ? response.body : \"\");\n return 0;\n },\n});\n\nexport const host: Command = defineCommand({\n name: \"host\",\n path: \"/usr/bin/host\",\n aliases: [\"dig\", \"nslookup\"],\n summary: \"DNS lookup utility\",\n run(ctx) {\n const name = ctx.args.find((a) => !a.startsWith(\"-\"));\n if (name === undefined) return ctx.fail(\"usage: host NAME\", 1);\n const address = ctx.kernel.net.resolve(name);\n if (!address) {\n ctx.line(`Host ${name} not found: 3(NXDOMAIN)`);\n return 1;\n }\n if (ctx.name === \"dig\") {\n ctx.line(`; <<>> DiG 9.18 <<>> ${name}`);\n ctx.line(\";; ANSWER SECTION:\");\n ctx.line(`${name}.\\t\\t60\\tIN\\tA\\t${address}`);\n return 0;\n }\n ctx.line(`${name} has address ${address}`);\n return 0;\n },\n});\n\nexport const commands: Command[] = [curl, wget, ping, ip, ifconfig, ss, netstat, nc, host];\n","/** Administration: su, sudo, user management, chroot, timeout, watch, install. */\n\nimport { defineCommand, type Command } from \"../kernel/command.js\";\nimport { parseArgs } from \"../util/args.js\";\nimport { applyChmod } from \"../fs/mode.js\";\nimport * as P from \"../fs/path.js\";\n\nexport const suCmd: Command = defineCommand({\n name: \"su\",\n path: \"/bin/su\",\n summary: \"run a command with substitute user and group ID\",\n usage: \"su [-] [USER [ARG]...]\",\n async run(ctx) {\n const argv = ctx.args.filter((a) => a !== \"-\" && a !== \"-l\" && a !== \"--login\");\n const login = ctx.args.some((a) => a === \"-\" || a === \"-l\" || a === \"--login\");\n const commandIdx = argv.indexOf(\"-c\");\n const target = argv.find((a, i) => !a.startsWith(\"-\") && (commandIdx < 0 || i < commandIdx)) ?? \"root\";\n\n const user = ctx.kernel.users.userByName(target);\n if (!user) return ctx.fail(`user ${target} does not exist`);\n\n // Only root may become another user without a password prompt, which this\n // sandbox has no way to satisfy.\n if (ctx.cred.uid !== 0) return ctx.fail(\"Authentication failure\", 1);\n\n const cred = ctx.kernel.users.credFor(user.name, ctx.cred.umask);\n const env = {\n ...ctx.env,\n HOME: user.home,\n USER: user.name,\n LOGNAME: user.name,\n SHELL: user.shell,\n PATH: user.uid === 0 ? \"/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin\" : \"/usr/local/bin:/usr/bin:/bin\",\n };\n\n const command = commandIdx >= 0 ? argv.slice(commandIdx + 1) : [];\n const argvRun = command.length ? [user.shell, \"-c\", command.join(\" \")] : [user.shell, ...(login ? [\"-l\"] : [])];\n\n return await ctx.kernel\n .spawn(argvRun, {\n cwd: login ? user.home : ctx.cwd,\n env,\n cred,\n ppid: ctx.proc.pid,\n stdin: ctx.stdin,\n stdout: ctx.stdout,\n stderr: ctx.stderr,\n })\n .wait();\n },\n});\n\nexport const sudo: Command = defineCommand({\n name: \"sudo\",\n path: \"/usr/bin/sudo\",\n summary: \"execute a command as another user\",\n usage: \"sudo [-u USER] COMMAND [ARG]...\",\n async run(ctx) {\n const args = parseArgs(\n ctx.args,\n [\n { short: \"u\", long: \"user\", arg: true, default: \"root\" },\n { short: \"i\", long: \"login\" },\n { short: \"s\", long: \"shell\" },\n { short: \"E\", long: \"preserve-env\" },\n { short: \"n\", long: \"non-interactive\" },\n { short: \"k\" },\n { short: \"v\" },\n ],\n { stopAtFirstPositional: true },\n );\n\n const me = ctx.kernel.users.nameForUid(ctx.cred.uid);\n const sudoers = ctx.kernel.users.groupByName(\"sudo\")?.members ?? [];\n if (ctx.cred.uid !== 0 && !sudoers.includes(me)) {\n ctx.warn(`${me} is not in the sudoers file. This incident will be reported.`);\n return 1;\n }\n\n const targetName = args.str(\"user\", \"root\")!;\n const user = ctx.kernel.users.userByName(targetName);\n if (!user) return ctx.fail(`unknown user: ${targetName}`);\n const cred = ctx.kernel.users.credFor(user.name, ctx.cred.umask);\n\n const command = args.positional;\n const argvRun = command.length ? command : [user.shell];\n const env = args.has(\"preserve-env\")\n ? { ...ctx.env }\n : {\n ...ctx.env,\n HOME: user.home,\n USER: user.name,\n LOGNAME: user.name,\n PATH: \"/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin\",\n SUDO_USER: me,\n SUDO_UID: String(ctx.cred.uid),\n SUDO_GID: String(ctx.cred.gid),\n };\n\n return await ctx.kernel\n .spawn(argvRun, {\n cwd: args.has(\"login\") ? user.home : ctx.cwd,\n env,\n cred,\n ppid: ctx.proc.pid,\n stdin: ctx.stdin,\n stdout: ctx.stdout,\n stderr: ctx.stderr,\n })\n .wait();\n },\n});\n\nexport const useradd: Command = defineCommand({\n name: \"useradd\",\n path: \"/usr/sbin/useradd\",\n summary: \"create a new user\",\n usage: \"useradd [-m] [-u UID] [-g GROUP] [-s SHELL] [-d HOME] LOGIN\",\n run(ctx) {\n if (ctx.cred.uid !== 0) return ctx.fail(\"Permission denied.\");\n const args = parseArgs(ctx.args, [\n { short: \"m\", long: \"create-home\" },\n { short: \"M\", long: \"no-create-home\" },\n { short: \"u\", long: \"uid\", arg: true },\n { short: \"g\", long: \"gid\", arg: true },\n { short: \"G\", long: \"groups\", arg: true },\n { short: \"s\", long: \"shell\", arg: true, default: \"/bin/sh\" },\n { short: \"d\", long: \"home-dir\", arg: true },\n { short: \"c\", long: \"comment\", arg: true, default: \"\" },\n { short: \"r\", long: \"system\" },\n ]);\n const name = args.positional[0];\n if (name === undefined) return ctx.fail(\"usage: useradd [options] LOGIN\", 2);\n if (ctx.kernel.users.userByName(name)) return ctx.fail(`user '${name}' already exists`, 9);\n\n const uid = args.num(\"uid\") ?? ctx.kernel.users.nextFreeUid(args.has(\"system\") ? 100 : 1000);\n const gid = args.str(\"gid\") ? (ctx.kernel.users.resolveGid(args.str(\"gid\")!) ?? uid) : uid;\n const home = args.str(\"home-dir\") ?? `/home/${name}`;\n\n if (!ctx.kernel.users.groupByGid(gid)) {\n ctx.kernel.users.addGroup({ name, passwd: \"x\", gid, members: [] });\n }\n ctx.kernel.users.addUser(\n {\n name,\n passwd: \"x\",\n uid,\n gid,\n gecos: args.str(\"comment\", \"\")!,\n home,\n shell: args.str(\"shell\", \"/bin/sh\")!,\n },\n { createHome: args.has(\"create-home\") && !args.has(\"no-create-home\") },\n );\n\n for (const group of (args.str(\"groups\") ?? \"\").split(\",\").filter(Boolean)) {\n ctx.kernel.users.addUserToGroup(name, group);\n }\n return 0;\n },\n});\n\nexport const userdel: Command = defineCommand({\n name: \"userdel\",\n path: \"/usr/sbin/userdel\",\n summary: \"delete a user account\",\n run(ctx) {\n if (ctx.cred.uid !== 0) return ctx.fail(\"Permission denied.\");\n const args = parseArgs(ctx.args, [{ short: \"r\", long: \"remove\" }, { short: \"f\", long: \"force\" }]);\n const name = args.positional[0];\n if (name === undefined) return ctx.fail(\"usage: userdel [options] LOGIN\", 2);\n const user = ctx.kernel.users.userByName(name);\n if (!user) return ctx.fail(`user '${name}' does not exist`, 6);\n if (args.has(\"remove\")) {\n try {\n ctx.vfs.rmrf(user.home);\n } catch {\n /* already gone */\n }\n }\n ctx.kernel.users.removeUser(name);\n return 0;\n },\n});\n\nexport const groupadd: Command = defineCommand({\n name: \"groupadd\",\n path: \"/usr/sbin/groupadd\",\n summary: \"create a new group\",\n run(ctx) {\n if (ctx.cred.uid !== 0) return ctx.fail(\"Permission denied.\");\n const args = parseArgs(ctx.args, [{ short: \"g\", long: \"gid\", arg: true }, { short: \"r\", long: \"system\" }]);\n const name = args.positional[0];\n if (name === undefined) return ctx.fail(\"usage: groupadd [options] GROUP\", 2);\n if (ctx.kernel.users.groupByName(name)) return ctx.fail(`group '${name}' already exists`, 9);\n const gid = args.num(\"gid\") ?? ctx.kernel.users.nextFreeGid(args.has(\"system\") ? 100 : 1000);\n ctx.kernel.users.addGroup({ name, passwd: \"x\", gid, members: [] });\n return 0;\n },\n});\n\nexport const groupdel: Command = defineCommand({\n name: \"groupdel\",\n path: \"/usr/sbin/groupdel\",\n summary: \"delete a group\",\n run(ctx) {\n if (ctx.cred.uid !== 0) return ctx.fail(\"Permission denied.\");\n const name = ctx.args[0];\n if (name === undefined) return ctx.fail(\"usage: groupdel GROUP\", 2);\n return ctx.kernel.users.removeGroup(name) ? 0 : ctx.fail(`group '${name}' does not exist`, 6);\n },\n});\n\nexport const usermod: Command = defineCommand({\n name: \"usermod\",\n path: \"/usr/sbin/usermod\",\n summary: \"modify a user account\",\n run(ctx) {\n if (ctx.cred.uid !== 0) return ctx.fail(\"Permission denied.\");\n const args = parseArgs(ctx.args, [\n { short: \"aG\", long: \"append-groups\", arg: true },\n { short: \"G\", long: \"groups\", arg: true },\n { short: \"a\", long: \"append\" },\n ]);\n const name = args.positional[0];\n if (name === undefined) return ctx.fail(\"usage: usermod [options] LOGIN\", 2);\n for (const group of (args.str(\"groups\") ?? args.str(\"append-groups\") ?? \"\").split(\",\").filter(Boolean)) {\n ctx.kernel.users.addUserToGroup(name, group);\n }\n return 0;\n },\n});\n\nexport const passwd: Command = defineCommand({\n name: \"passwd\",\n path: \"/usr/bin/passwd\",\n summary: \"change user password\",\n run(ctx) {\n const target = ctx.args.find((a) => !a.startsWith(\"-\")) ?? ctx.kernel.users.nameForUid(ctx.cred.uid);\n if (ctx.cred.uid !== 0 && target !== ctx.kernel.users.nameForUid(ctx.cred.uid)) {\n return ctx.fail(\"You may not view or modify password information for others.\");\n }\n // There is no authentication in the sandbox; report the same message as a\n // successful run so scripts that call it keep working.\n ctx.line(`passwd: password updated successfully`);\n return 0;\n },\n});\n\nexport const chrootCmd: Command = defineCommand({\n name: \"chroot\",\n path: \"/usr/sbin/chroot\",\n summary: \"run a command with a different root directory\",\n async run(ctx) {\n if (ctx.cred.uid !== 0) return ctx.fail(\"cannot change root directory: Operation not permitted\");\n const [dir, ...command] = ctx.args;\n if (dir === undefined) return ctx.fail(\"missing operand\", 2);\n const abs = ctx.path(dir);\n if (!ctx.vfs.exists(abs, ctx.cred)) return ctx.fail(`cannot change root directory to '${dir}': No such file or directory`);\n // A real chroot is not modelled; run the command with its cwd inside the\n // target instead, which is what most scripts actually depend on.\n return await ctx.kernel\n .spawn(command.length ? command : [\"/bin/sh\", \"-i\"], {\n cwd: abs,\n env: ctx.env,\n cred: ctx.cred,\n ppid: ctx.proc.pid,\n stdin: ctx.stdin,\n stdout: ctx.stdout,\n stderr: ctx.stderr,\n })\n .wait();\n },\n});\n\nexport const timeoutCmd: Command = defineCommand({\n name: \"timeout\",\n path: \"/usr/bin/timeout\",\n summary: \"run a command with a time limit\",\n usage: \"timeout [OPTION] DURATION COMMAND [ARG]...\",\n async run(ctx) {\n const args = parseArgs(\n ctx.args,\n [\n { short: \"s\", long: \"signal\", arg: true, default: \"TERM\" },\n { short: \"k\", long: \"kill-after\", arg: true },\n { long: \"preserve-status\" },\n { long: \"foreground\" },\n ],\n { stopAtFirstPositional: true },\n );\n const [durationSpec, ...command] = args.positional;\n if (durationSpec === undefined || command.length === 0) return ctx.fail(\"missing operand\", 125);\n\n const m = /^([0-9]*\\.?[0-9]+)([smhd]?)$/.exec(durationSpec);\n if (!m) return ctx.fail(`invalid time interval '${durationSpec}'`, 125);\n const multiplier = { \"\": 1000, s: 1000, m: 60_000, h: 3_600_000, d: 86_400_000 }[m[2] ?? \"\"]!;\n const ms = Number(m[1]) * multiplier;\n\n const proc = ctx.kernel.spawn(command, {\n cwd: ctx.cwd,\n env: ctx.env,\n cred: ctx.cred,\n ppid: ctx.proc.pid,\n stdin: ctx.stdin,\n stdout: ctx.stdout,\n stderr: ctx.stderr,\n });\n\n let timedOut = false;\n const timer = setTimeout(() => {\n timedOut = true;\n proc.deliver(`SIG${args.str(\"signal\", \"TERM\")!.replace(/^SIG/, \"\")}`);\n }, ms);\n\n const code = await proc.wait();\n clearTimeout(timer);\n return timedOut ? 124 : code;\n },\n});\n\nexport const nohup: Command = defineCommand({\n name: \"nohup\",\n path: \"/usr/bin/nohup\",\n summary: \"run a command immune to hangups\",\n async run(ctx) {\n if (ctx.args.length === 0) return ctx.fail(\"missing operand\", 125);\n ctx.stderr.write(\"nohup: ignoring input and appending output to 'nohup.out'\\n\");\n const code = await ctx.kernel\n .spawn(ctx.args, {\n cwd: ctx.cwd,\n env: ctx.env,\n cred: ctx.cred,\n ppid: ctx.proc.pid,\n stdout: ctx.stdout,\n stderr: ctx.stderr,\n })\n .wait();\n return code;\n },\n});\n\nexport const watch: Command = defineCommand({\n name: \"watch\",\n path: \"/usr/bin/watch\",\n summary: \"execute a program periodically\",\n async run(ctx) {\n const args = parseArgs(\n ctx.args,\n [\n { short: \"n\", long: \"interval\", arg: true, default: \"2\" },\n { short: \"t\", long: \"no-title\" },\n { short: \"d\", long: \"differences\" },\n ],\n { stopAtFirstPositional: true },\n );\n if (args.positional.length === 0) return ctx.fail(\"no command specified\", 1);\n const intervalMs = Number(args.str(\"interval\", \"2\")) * 1000;\n const command = args.positional.join(\" \");\n\n // Bounded: without a real terminal there is nothing to interrupt the loop.\n for (let i = 0; i < 1000 && !ctx.signal.aborted; i++) {\n if (!args.has(\"no-title\")) {\n ctx.line(`Every ${intervalMs / 1000}.0s: ${command}`.padEnd(60) + new Date(ctx.kernel.now()).toUTCString());\n ctx.line(\"\");\n }\n await ctx.kernel\n .spawn([\"/bin/sh\", \"-c\", command], {\n cwd: ctx.cwd,\n env: ctx.env,\n cred: ctx.cred,\n ppid: ctx.proc.pid,\n stdout: ctx.stdout,\n stderr: ctx.stderr,\n })\n .wait();\n await new Promise((r) => setTimeout(r, intervalMs));\n }\n return 0;\n },\n});\n\nexport const install: Command = defineCommand({\n name: \"install\",\n path: \"/usr/bin/install\",\n summary: \"copy files and set attributes\",\n run(ctx) {\n const args = parseArgs(ctx.args, [\n { short: \"d\", long: \"directory\" },\n { short: \"D\" },\n { short: \"m\", long: \"mode\", arg: true, default: \"755\" },\n { short: \"o\", long: \"owner\", arg: true },\n { short: \"g\", long: \"group\", arg: true },\n { short: \"v\", long: \"verbose\" },\n { short: \"t\", long: \"target-directory\", arg: true },\n ]);\n const mode = applyChmod(args.str(\"mode\", \"755\")!, 0o755, args.has(\"directory\"), 0);\n\n if (args.has(\"directory\")) {\n for (const dir of args.positional) {\n ctx.vfs.mkdir(ctx.path(dir), { recursive: true, cred: ctx.cred, mode });\n ctx.vfs.chmod(ctx.path(dir), mode, ctx.cred);\n if (args.has(\"verbose\")) ctx.line(`creating directory '${dir}'`);\n }\n return 0;\n }\n\n const targetDir = args.str(\"target-directory\");\n const sources = targetDir ? args.positional : args.positional.slice(0, -1);\n const destRaw = targetDir ?? args.positional[args.positional.length - 1];\n if (destRaw === undefined || sources.length === 0) return ctx.fail(\"missing file operand\", 1);\n\n let status = 0;\n for (const source of sources) {\n try {\n const src = ctx.path(source);\n const destIsDir = ctx.vfs.lexists(ctx.path(destRaw)) && ctx.vfs.stat(ctx.path(destRaw), { cred: ctx.cred }).isDirectory();\n const target = destIsDir || targetDir ? P.join(ctx.path(destRaw), P.basename(src)) : ctx.path(destRaw);\n if (args.has(\"D\")) {\n const parent = P.dirname(target);\n if (!ctx.vfs.lexists(parent)) ctx.vfs.mkdir(parent, { recursive: true, cred: ctx.cred, mode: 0o755 });\n }\n ctx.vfs.copyFile(src, target, ctx.cred);\n ctx.vfs.chmod(target, mode, ctx.cred);\n const owner = args.str(\"owner\");\n const group = args.str(\"group\");\n if (owner || group) {\n ctx.vfs.chown(\n target,\n owner ? (ctx.kernel.users.resolveUid(owner) ?? -1) : -1,\n group ? (ctx.kernel.users.resolveGid(group) ?? -1) : -1,\n ctx.cred,\n );\n }\n if (args.has(\"verbose\")) ctx.line(`'${source}' -> '${target}'`);\n } catch (e) {\n status = ctx.reportError(e, source);\n }\n }\n return status;\n },\n});\n\nexport const niceCmd: Command = defineCommand({\n name: \"nice\",\n path: \"/usr/bin/nice\",\n summary: \"run a program with modified scheduling priority\",\n async run(ctx) {\n const args = parseArgs(ctx.args, [{ short: \"n\", long: \"adjustment\", arg: true, default: \"10\" }], {\n stopAtFirstPositional: true,\n });\n if (args.positional.length === 0) {\n ctx.line(\"0\");\n return 0;\n }\n return await ctx.kernel\n .spawn(args.positional, {\n cwd: ctx.cwd,\n env: ctx.env,\n cred: ctx.cred,\n ppid: ctx.proc.pid,\n stdin: ctx.stdin,\n stdout: ctx.stdout,\n stderr: ctx.stderr,\n })\n .wait();\n },\n});\n\nexport const timeCmd: Command = defineCommand({\n name: \"time\",\n path: \"/usr/bin/time\",\n summary: \"time a simple command\",\n async run(ctx) {\n if (ctx.args.length === 0) return ctx.fail(\"missing operand\", 1);\n const started = Date.now();\n const code = await ctx.kernel\n .spawn(ctx.args, {\n cwd: ctx.cwd,\n env: ctx.env,\n cred: ctx.cred,\n ppid: ctx.proc.pid,\n stdin: ctx.stdin,\n stdout: ctx.stdout,\n stderr: ctx.stderr,\n })\n .wait();\n const ms = Date.now() - started;\n const fmt = (v: number) => `${Math.floor(v / 60000)}m${((v % 60000) / 1000).toFixed(3)}s`;\n ctx.stderr.write(`\\nreal\\t${fmt(ms)}\\nuser\\t${fmt(Math.floor(ms * 0.6))}\\nsys\\t${fmt(Math.floor(ms * 0.2))}\\n`);\n return code;\n },\n});\n\nexport const commands: Command[] = [\n suCmd,\n sudo,\n useradd,\n userdel,\n usermod,\n groupadd,\n groupdel,\n passwd,\n chrootCmd,\n timeoutCmd,\n nohup,\n watch,\n install,\n niceCmd,\n timeCmd,\n];\n","/** Documentation: man, whatis, apropos, and a `less`/`more` pager. */\n\nimport { defineCommand, type Command } from \"../kernel/command.js\";\nimport { parseArgs } from \"../util/args.js\";\nimport { readInputs } from \"./helpers.js\";\n\nexport const man: Command = defineCommand({\n name: \"man\",\n path: \"/usr/bin/man\",\n summary: \"an interface to the system reference manuals\",\n usage: \"man [SECTION] PAGE\",\n run(ctx) {\n const args = parseArgs(ctx.args, [\n { short: \"k\", long: \"apropos\" },\n { short: \"f\", long: \"whatis\" },\n { short: \"w\", long: \"where\" },\n ]);\n const name = args.positional.find((a) => !/^\\d$/.test(a));\n if (name === undefined) {\n ctx.warn(\"What manual page do you want?\");\n return 1;\n }\n\n // Prefer a real page on disk, then fall back to the command's own metadata.\n for (const section of [\"1\", \"8\", \"5\"]) {\n const path = `/usr/share/man/man${section}/${name}.${section}`;\n if (ctx.vfs.lexists(path)) {\n if (args.has(\"where\")) {\n ctx.line(path);\n return 0;\n }\n ctx.write(ctx.vfs.readText(path, ctx.cred));\n return 0;\n }\n }\n\n const command = ctx.kernel.commands.get(name);\n if (!command) {\n ctx.warn(`No manual entry for ${name}`);\n return 16;\n }\n if (args.has(\"where\")) {\n ctx.line(`/usr/share/man/man1/${name}.1`);\n return 0;\n }\n\n const upper = name.toUpperCase();\n ctx.line(`${upper}(1)${\" \".repeat(Math.max(1, 26 - upper.length))}User Commands${\" \".repeat(Math.max(1, 26 - upper.length))}${upper}(1)`);\n ctx.line(\"\");\n ctx.line(\"NAME\");\n ctx.line(` ${name} - ${command.summary ?? \"no description available\"}`);\n ctx.line(\"\");\n ctx.line(\"SYNOPSIS\");\n ctx.line(` ${command.usage ?? `${name} [OPTION]... [FILE]...`}`);\n ctx.line(\"\");\n ctx.line(\"DESCRIPTION\");\n for (const line of (command.manual ?? ` ${capitalize(command.summary ?? name)}.`).split(\"\\n\")) {\n ctx.line(line.startsWith(\" \") ? line : ` ${line}`);\n }\n ctx.line(\"\");\n ctx.line(\"SEE ALSO\");\n ctx.line(\" help(1), sh(1)\");\n ctx.line(\"\");\n ctx.line(`SandboxedJS${\" \".repeat(24)}${new Date(ctx.kernel.now()).toISOString().slice(0, 10)}${\" \".repeat(24)}${upper}(1)`);\n return 0;\n },\n});\n\nfunction capitalize(text: string): string {\n return text.length ? text[0]!.toUpperCase() + text.slice(1) : text;\n}\n\nexport const whatis: Command = defineCommand({\n name: \"whatis\",\n path: \"/usr/bin/whatis\",\n summary: \"display one-line manual page descriptions\",\n run(ctx) {\n let status = 0;\n for (const name of ctx.args) {\n const command = ctx.kernel.commands.get(name);\n if (!command) {\n ctx.line(`${name}: nothing appropriate.`);\n status = 1;\n continue;\n }\n ctx.line(`${name} (1)${\" \".repeat(Math.max(1, 16 - name.length))}- ${command.summary ?? \"\"}`);\n }\n return status;\n },\n});\n\nexport const apropos: Command = defineCommand({\n name: \"apropos\",\n path: \"/usr/bin/apropos\",\n summary: \"search the manual page names and descriptions\",\n run(ctx) {\n if (ctx.args.length === 0) {\n ctx.warn(\"apropos what?\");\n return 1;\n }\n const patterns = ctx.args.map((a) => new RegExp(a, \"i\"));\n let found = 0;\n for (const command of ctx.kernel.commands.all()) {\n const haystack = `${command.name} ${command.summary ?? \"\"}`;\n if (!patterns.some((p) => p.test(haystack))) continue;\n found++;\n ctx.line(`${command.name} (1)${\" \".repeat(Math.max(1, 16 - command.name.length))}- ${command.summary ?? \"\"}`);\n }\n if (found === 0) {\n ctx.line(`${ctx.args.join(\" \")}: nothing appropriate.`);\n return 1;\n }\n return 0;\n },\n});\n\n/** Without a real terminal there is nothing to page, so this is `cat`. */\nexport const less: Command = defineCommand({\n name: \"less\",\n path: \"/usr/bin/less\",\n aliases: [\"more\"],\n summary: \"display file contents a page at a time\",\n async run(ctx) {\n const args = parseArgs(ctx.args, [\n { short: \"N\" },\n { short: \"S\" },\n { short: \"F\" },\n { short: \"R\" },\n { short: \"X\" },\n { short: \"n\" },\n ]);\n const { sources, ok } = await readInputs(ctx, args.positional);\n let lineNumber = 1;\n for (const source of sources) {\n if (!args.has(\"N\")) {\n ctx.write(source.bytes);\n continue;\n }\n for (const line of new TextDecoder().decode(source.bytes).split(\"\\n\")) {\n ctx.line(`${String(lineNumber++).padStart(6)} ${line}`);\n }\n }\n return ok ? 0 : 1;\n },\n});\n\nexport const helpCmd: Command = defineCommand({\n name: \"help\",\n path: \"/usr/bin/help\",\n summary: \"list the available commands\",\n run(ctx) {\n const all = ctx.kernel.commands.all().sort((a, b) => (a.name < b.name ? -1 : 1));\n if (ctx.args.length) {\n const target = ctx.kernel.commands.get(ctx.args[0]!);\n if (!target) {\n ctx.warn(`no help topics match \\`${ctx.args[0]}'`);\n return 1;\n }\n ctx.line(`${target.name}: ${target.usage ?? target.name}`);\n ctx.line(` ${target.summary ?? \"\"}`);\n return 0;\n }\n ctx.line(\"SandboxedJS — available commands:\");\n ctx.line(\"\");\n const width = Math.max(...all.map((c) => c.name.length)) + 2;\n for (const command of all) {\n ctx.line(` ${command.name.padEnd(width)}${command.summary ?? \"\"}`);\n }\n ctx.line(\"\");\n ctx.line(\"Type `man NAME' for more detail, or `help' inside the shell for shell builtins.\");\n return 0;\n },\n});\n\nexport const commands: Command[] = [man, whatis, apropos, less, helpCmd];\n","/**\n * The Node.js runtime, backed by Nodepod.\n *\n * Nodepod runs the script in an isolated worker over the *same* memory volume\n * the container's filesystem uses, so `require('fs')` inside a script sees the\n * files `echo` and `tar` created, and anything the script writes is visible to\n * the shell afterwards.\n *\n * Two gaps in the underlying `spawn` are papered over here:\n * - only `node` resolves as a command, so everything else is dispatched by our\n * own kernel rather than being handed to Nodepod's shell (which hangs on an\n * unknown command);\n * - the worker's stdin has no end-of-stream signal, so when a pipeline feeds\n * a script we materialise stdin as a file and install a real stdin stream\n * over it before the script loads.\n */\n\nimport { defineCommand, type Command, type ExecContext } from \"../kernel/command.js\";\nimport type { Kernel } from \"../kernel/kernel.js\";\nimport * as P from \"../fs/path.js\";\n\nconst NODE_VERSION = \"v22.12.0\";\nconst encoder = new TextEncoder();\n\ninterface NodeInvocation {\n /** Absolute path of the script to execute. */\n script: string;\n argv: string[];\n /** Temporary files to remove when the process exits. */\n temps: string[];\n}\n\nlet tempCounter = 0;\n\nfunction tempPath(kind: string, pid: number, ext = \".js\"): string {\n return `/tmp/.sbx-${kind}-${pid}-${tempCounter++}${ext}`;\n}\n\n/**\n * Splice the prelude in without displacing a shebang: `#!` is only recognised\n * at offset zero, so a CLI entry point like `node_modules/.bin/vite` would\n * become a syntax error if anything were inserted above it.\n */\nfunction withPrelude(source: string, prelude: string): string {\n if (!source.startsWith(\"#!\")) return prelude + source;\n const eol = source.indexOf(\"\\n\");\n if (eol < 0) return source + \"\\n\" + prelude;\n return source.slice(0, eol + 1) + prelude + source.slice(eol + 1);\n}\n\n/** A hidden sibling of `script`, so `__dirname` and relative requires match. */\nfunction siblingPath(script: string, pid: number): string {\n const ext = P.extname(script) || \".js\";\n return P.join(P.dirname(script), `.sbx-${pid}-${tempCounter++}-${P.basename(script, ext)}${ext}`);\n}\n\n/**\n * Build the bootstrap that gives the script a real `process.stdin` and correct\n * `process.argv`, then loads it as the main module.\n */\n/**\n * Reconcile the two `Buffer` identities the worker exposes.\n *\n * Inside a Nodepod worker `globalThis.Buffer` and `require('buffer').Buffer`\n * are different classes, so a package that receives a buffer made by one and\n * tests it with the other's `Buffer.isBuffer` rejects it. That breaks\n * `res.json()` in Express (via `etag`) and the same pattern in many other\n * packages. Widening both checks to accept any `Uint8Array` — which is what\n * both classes extend — makes them interoperate.\n */\nconst BUFFER_COMPAT_SHIM = `\n(function () {\n const seen = new Set();\n const widen = (B) => {\n if (!B || seen.has(B) || typeof B.isBuffer !== 'function') return;\n seen.add(B);\n const original = B.isBuffer.bind(B);\n B.isBuffer = (value) => original(value) || value instanceof Uint8Array;\n };\n try { widen(globalThis.Buffer); } catch (e) {}\n try { widen(require('buffer').Buffer); } catch (e) {}\n})();\n`;\n\n/**\n * Build the prelude prepended to a sibling copy of the script.\n *\n * Nodepod's `Module.prototype.load` is a no-op, so a wrapper that tries to\n * load the script as the main module silently runs nothing, and a wrapper that\n * `require()`s it leaves `require.main !== module` — which stops the\n * `if (require.main === module)` entry point that most scripts use. Running a\n * sibling copy keeps it the real main module and keeps `__dirname` correct;\n * the prelude then restores the identity fields to the original path.\n */\nfunction buildPrelude(scriptPath: string, argv: string[], stdinPath: string | null): string {\n const argvLiteral = JSON.stringify([\"/usr/bin/node\", scriptPath, ...argv]);\n const pathLiteral = JSON.stringify(scriptPath);\n const stdinLiteral = JSON.stringify(stdinPath);\n\n return `${BUFFER_COMPAT_SHIM}\nprocess.argv = ${argvLiteral};\ntry {\n __filename = ${pathLiteral};\n module.filename = ${pathLiteral};\n module.id = ${pathLiteral};\n if (require.main === module) require.main.filename = ${pathLiteral};\n} catch (e) {}\n${\n stdinPath === null\n ? \"\"\n : `(function () {\n const fs = require('fs');\n const { Readable } = require('stream');\n let data;\n try { data = fs.readFileSync(${stdinLiteral}); } catch (e) { data = Buffer.alloc(0); }\n const stream = Readable.from([data]);\n stream.isTTY = false;\n stream.fd = 0;\n stream.setRawMode = function () { return this; };\n try {\n Object.defineProperty(process, 'stdin', { value: stream, configurable: true, writable: true });\n } catch (e) { process.stdin = stream; }\n})();\n`\n}`;\n}\n\n/** Run a prepared invocation through Nodepod and stream its output. */\nasync function execute(ctx: ExecContext, invocation: NodeInvocation): Promise<number> {\n const { pod } = ctx.kernel;\n let exitCode = 0;\n\n try {\n const proc = await pod.spawn(\"node\", [invocation.script], {\n cwd: ctx.cwd,\n env: { ...ctx.env, PWD: ctx.cwd },\n });\n\n proc.on(\"output\", (chunk: string) => {\n try {\n ctx.write(chunk);\n } catch {\n /* downstream closed */\n }\n });\n proc.on(\"error\", (chunk: string) => {\n try {\n ctx.stderr.write(chunk);\n } catch {\n /* downstream closed */\n }\n });\n\n // Forward an interactive stdin as it arrives, since it was not captured.\n let forwarding = false;\n if (ctx.stdin.interactive || ctx.stdin.isTTY) {\n forwarding = true;\n void (async () => {\n while (forwarding) {\n const chunk = await ctx.stdin.read();\n if (chunk === null) break;\n try {\n proc.write(new TextDecoder().decode(chunk));\n } catch {\n break;\n }\n }\n })();\n }\n\n // Killing the worker is best-effort: a script stuck in a synchronous loop\n // may never acknowledge it. Race the completion against the abort so the\n // caller's timeout is honoured either way.\n let onAbort: (() => void) | undefined;\n const aborted = new Promise<{ exitCode: number }>((resolve) => {\n onAbort = () => {\n try {\n proc.kill();\n } catch {\n /* already gone */\n }\n resolve({ exitCode: 137 });\n };\n if (ctx.signal.aborted) onAbort();\n else ctx.signal.addEventListener(\"abort\", onAbort, { once: true });\n });\n\n const result = await Promise.race([proc.completion, aborted]);\n forwarding = false;\n if (onAbort) ctx.signal.removeEventListener(\"abort\", onAbort);\n exitCode = result.exitCode;\n } catch (e) {\n ctx.stderr.write(`node: ${e instanceof Error ? e.message : String(e)}\\n`);\n exitCode = 1;\n } finally {\n for (const temp of invocation.temps) {\n try {\n ctx.vfs.unlink(temp);\n } catch {\n /* already removed */\n }\n }\n }\n\n return exitCode;\n}\n\n/**\n * Materialise stdin as a file when the process has piped input.\n *\n * Interactive streams are skipped: a caller holding the write end may never\n * call `end()`, and slurping it would hang the script before it ever started.\n * Those are forwarded live instead, in `execute`.\n */\nasync function captureStdin(ctx: ExecContext): Promise<string | null> {\n if (ctx.stdin.isTTY || ctx.stdin.interactive) return null;\n const bytes = await ctx.stdin.readAll();\n if (bytes.length === 0) return null;\n const path = tempPath(\"stdin\", ctx.proc.pid, \".dat\");\n ctx.vfs.writeFile(path, bytes, { privileged: true, mode: 0o600 });\n return path;\n}\n\nexport const node: Command = defineCommand({\n name: \"node\",\n path: \"/usr/bin/node\",\n aliases: [\"nodejs\"],\n summary: \"run a JavaScript program with Node.js\",\n usage: \"node [options] [script.js] [arguments]\",\n manual: `Runs JavaScript with a real Node.js API surface — fs, path, http,\ncrypto, streams, worker_threads and npm packages — inside the container.\nThe filesystem a script sees is the container's filesystem.`,\n async run(ctx) {\n const argv = ctx.args;\n const temps: string[] = [];\n\n // ── flags ────────────────────────────────────────────────────────────\n let i = 0;\n let evalSource: string | undefined;\n let printResult = false;\n let scriptArg: string | undefined;\n\n for (; i < argv.length; i++) {\n const arg = argv[i]!;\n if (arg === \"-v\" || arg === \"--version\") {\n ctx.line(NODE_VERSION);\n return 0;\n }\n if (arg === \"-h\" || arg === \"--help\") {\n printHelp(ctx);\n return 0;\n }\n // Everything after the eval string is a user argument, as in real Node.\n if (arg === \"-e\" || arg === \"--eval\") {\n evalSource = argv[++i] ?? \"\";\n i++;\n break;\n }\n if (arg === \"-p\" || arg === \"--print\") {\n printResult = true;\n evalSource = argv[++i] ?? \"\";\n i++;\n break;\n }\n if (arg.startsWith(\"--eval=\")) {\n evalSource = arg.slice(\"--eval=\".length);\n i++;\n break;\n }\n if (arg.startsWith(\"--print=\")) {\n printResult = true;\n evalSource = arg.slice(\"--print=\".length);\n i++;\n break;\n }\n if (arg === \"--\") {\n i++;\n break;\n }\n if (arg.startsWith(\"-\") && arg !== \"-\") {\n // Unknown V8/Node flags are accepted and ignored, as most are no-ops here.\n continue;\n }\n scriptArg = arg;\n i++;\n break;\n }\n\n const scriptArgs = argv.slice(i);\n\n // ── node -e / -p ─────────────────────────────────────────────────────\n if (evalSource !== undefined) {\n const body = printResult\n ? `const __sbxResult = (function(){ return (${evalSource}\\n); })();\\nconsole.log(typeof __sbxResult === 'string' ? __sbxResult : require('util').inspect(__sbxResult));`\n : evalSource;\n const path = tempPath(\"eval\", ctx.proc.pid);\n const stdinPath = await captureStdin(ctx);\n if (stdinPath) temps.push(stdinPath);\n ctx.vfs.writeFile(path, buildBootstrapForEval(body, [\"/usr/bin/node\", ...scriptArgs], stdinPath), {\n privileged: true,\n mode: 0o600,\n });\n temps.push(path);\n return execute(ctx, { script: path, argv: scriptArgs, temps });\n }\n\n // ── node (no script): read a program from stdin ──────────────────────\n if (scriptArg === undefined || scriptArg === \"-\") {\n if (ctx.stdin.isTTY) {\n ctx.line(`Welcome to Node.js ${NODE_VERSION}.`);\n ctx.line('Type \".help\" for more information.');\n return runRepl(ctx);\n }\n const source = new TextDecoder().decode(await ctx.stdin.readAll());\n if (source.trim() === \"\") return 0;\n const path = tempPath(\"stdin-script\", ctx.proc.pid);\n ctx.vfs.writeFile(path, buildBootstrapForEval(source, [\"/usr/bin/node\", ...scriptArgs], null), {\n privileged: true,\n mode: 0o600,\n });\n temps.push(path);\n return execute(ctx, { script: path, argv: scriptArgs, temps });\n }\n\n // ── node script.js ───────────────────────────────────────────────────\n const script = resolveScript(ctx, scriptArg);\n if (!script) {\n ctx.stderr.write(\n `node:internal/modules/cjs/loader:1215\\n throw err;\\n ^\\n\\nError: Cannot find module '${ctx.path(scriptArg)}'\\n`,\n );\n return 1;\n }\n\n const stdinPath = await captureStdin(ctx);\n if (stdinPath) temps.push(stdinPath);\n\n // Run a sibling copy carrying the prelude, so `__dirname`, relative\n // requires and `require.main === module` all behave. If the directory is\n // not writable, fall back to running the file itself.\n const sibling = siblingPath(script, ctx.proc.pid);\n try {\n const source = ctx.vfs.readText(script, ctx.cred);\n ctx.vfs.writeFile(sibling, withPrelude(source, buildPrelude(script, scriptArgs, stdinPath)), {\n privileged: true,\n mode: 0o600,\n });\n temps.push(sibling);\n return await execute(ctx, { script: sibling, argv: scriptArgs, temps });\n } catch {\n return await execute(ctx, { script, argv: scriptArgs, temps });\n }\n },\n});\n\nfunction buildBootstrapForEval(source: string, argv: string[], stdinPath: string | null): string {\n const prelude = stdinPath\n ? `const fs = require('fs');\nconst { Readable } = require('stream');\nlet __sbxData; try { __sbxData = fs.readFileSync(${JSON.stringify(stdinPath)}); } catch (e) { __sbxData = Buffer.alloc(0); }\nconst __sbxStdin = Readable.from([__sbxData]);\n__sbxStdin.isTTY = false;\n__sbxStdin.setRawMode = function () { return this; };\ntry { Object.defineProperty(process, 'stdin', { value: __sbxStdin, configurable: true, writable: true }); } catch (e) { process.stdin = __sbxStdin; }\n`\n : \"\";\n return `${BUFFER_COMPAT_SHIM}process.argv = ${JSON.stringify(argv)};\\n${prelude}${source}\\n`;\n}\n\n/** Apply Node's module-resolution rules to a script operand. */\nfunction resolveScript(ctx: ExecContext, operand: string): string | null {\n const base = ctx.path(operand);\n const candidates = [base, `${base}.js`, `${base}.mjs`, `${base}.cjs`, `${base}.json`];\n\n for (const candidate of candidates) {\n try {\n const st = ctx.vfs.stat(candidate, { cred: ctx.cred });\n if (st.isFile()) return ctx.vfs.realpath(candidate, ctx.cred);\n if (st.isDirectory()) {\n // A directory resolves through package.json \"main\", then index.js.\n const manifest = P.join(candidate, \"package.json\");\n if (ctx.vfs.lexists(manifest)) {\n try {\n const main = JSON.parse(ctx.vfs.readText(manifest, ctx.cred)).main as string | undefined;\n if (main) {\n const mainPath = P.resolve(candidate, main);\n if (ctx.vfs.lexists(mainPath)) return ctx.vfs.realpath(mainPath, ctx.cred);\n if (ctx.vfs.lexists(mainPath + \".js\")) return ctx.vfs.realpath(mainPath + \".js\", ctx.cred);\n }\n } catch {\n /* malformed manifest — fall through to index.js */\n }\n }\n for (const index of [\"index.js\", \"index.mjs\", \"index.cjs\"]) {\n const path = P.join(candidate, index);\n if (ctx.vfs.lexists(path)) return ctx.vfs.realpath(path, ctx.cred);\n }\n }\n } catch {\n /* try the next candidate */\n }\n }\n return null;\n}\n\n/** A line-oriented REPL, used when node is started on a terminal. */\nasync function runRepl(ctx: ExecContext): Promise<number> {\n const historyPath = P.join(ctx.env.HOME ?? \"/root\", \".node_repl_history\");\n const statements: string[] = [];\n\n for (;;) {\n ctx.write(\"> \");\n const line = await ctx.stdin.readLine();\n if (line === null) {\n ctx.line(\"\");\n break;\n }\n const trimmed = line.trim();\n if (trimmed === \".exit\") break;\n if (trimmed === \".help\") {\n ctx.line(\".exit Exit the REPL\");\n ctx.line(\".help Print this help message\");\n ctx.line(\".clear Reset the session context\");\n continue;\n }\n if (trimmed === \".clear\") {\n statements.length = 0;\n continue;\n }\n if (trimmed === \"\") continue;\n\n // Each entry re-runs the session so definitions persist across lines.\n const program = [...statements, `console.log(require('util').inspect((${trimmed})))`].join(\";\\n\");\n const fallback = [...statements, trimmed].join(\";\\n\");\n const path = tempPath(\"repl\", ctx.proc.pid);\n ctx.vfs.writeFile(path, program, { privileged: true, mode: 0o600 });\n\n const result = await runQuiet(ctx, path);\n if (result.exitCode !== 0) {\n ctx.vfs.writeFile(path, fallback, { privileged: true, mode: 0o600 });\n const second = await runQuiet(ctx, path);\n ctx.write(second.stdout);\n if (second.exitCode === 0) statements.push(trimmed);\n else ctx.stderr.write(second.stderr);\n } else {\n ctx.write(result.stdout);\n statements.push(trimmed);\n }\n\n try {\n ctx.vfs.unlink(path);\n } catch {\n /* already gone */\n }\n try {\n ctx.vfs.appendFile(historyPath, trimmed + \"\\n\", { cred: ctx.cred });\n } catch {\n /* history is best-effort */\n }\n }\n return 0;\n}\n\nasync function runQuiet(ctx: ExecContext, script: string): Promise<{ exitCode: number; stdout: string; stderr: string }> {\n try {\n const proc = await ctx.kernel.pod.spawn(\"node\", [script], { cwd: ctx.cwd, env: ctx.env });\n return await proc.completion;\n } catch (e) {\n return { exitCode: 1, stdout: \"\", stderr: `${e instanceof Error ? e.message : String(e)}\\n` };\n }\n}\n\nfunction printHelp(ctx: ExecContext): void {\n ctx.line(\"Usage: node [options] [script.js] [arguments]\");\n ctx.line(\"\");\n ctx.line(\"Options:\");\n ctx.line(\" -v, --version print Node.js version\");\n ctx.line(\" -e, --eval script evaluate script\");\n ctx.line(\" -p, --print evaluate script and print result\");\n ctx.line(\" -h, --help print this message\");\n}\n\n// ── node -adjacent tools ────────────────────────────────────────────────────\n\nexport const nodeVersionFile: Command = defineCommand({\n name: \"nvm\",\n path: \"/usr/local/bin/nvm\",\n summary: \"node version manager (single-version stub)\",\n run(ctx) {\n const sub = ctx.args[0];\n if (sub === \"current\" || sub === \"version\") {\n ctx.line(NODE_VERSION);\n return 0;\n }\n if (sub === \"ls\" || sub === \"list\") {\n ctx.line(`-> ${NODE_VERSION}`);\n return 0;\n }\n ctx.line(`nvm: only ${NODE_VERSION} is available in this container`);\n return 0;\n },\n});\n\nexport function nodeCommands(): Command[] {\n return [node, nodeVersionFile];\n}\n\nexport { NODE_VERSION };\n\n/** Used by the package manager to keep the reported version consistent. */\nexport function nodeVersion(_kernel: Kernel): string {\n return NODE_VERSION;\n}\n\nvoid encoder;\n","/**\n * An Emscripten filesystem backend that proxies to the container's VFS.\n *\n * This is what makes MicroPython a first-class citizen rather than a toy: a\n * script can `open('/etc/passwd')`, `os.listdir('/app')` and write files that\n * the shell — and Node.js — see immediately, because there is exactly one\n * filesystem underneath all three.\n *\n * Modelled on Emscripten's own NODEFS: same `node_ops`/`stream_ops` contract,\n * same errno numbering (musl's, where ENOENT is 44 rather than 2).\n */\n\nimport type { Cred, Vfs } from \"../fs/vfs.js\";\nimport { isSysError, type ErrnoCode } from \"../fs/errno.js\";\nimport * as P from \"../fs/path.js\";\n\n/** Emscripten (musl) errno numbers — deliberately not the Linux ones. */\nconst EM_ERRNO: Record<string, number> = {\n EPERM: 63,\n ENOENT: 44,\n EIO: 29,\n EBADF: 8,\n EACCES: 2,\n EBUSY: 10,\n EEXIST: 20,\n EXDEV: 75,\n ENODEV: 43,\n ENOTDIR: 54,\n EISDIR: 31,\n EINVAL: 28,\n ENFILE: 41,\n EMFILE: 33,\n ENOSPC: 51,\n EROFS: 57,\n ENOTEMPTY: 55,\n ELOOP: 32,\n ENOSYS: 52,\n ENOTSUP: 138,\n};\n\nfunction emErrno(code: ErrnoCode | string): number {\n return EM_ERRNO[code] ?? EM_ERRNO.EIO!;\n}\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\ntype EmFS = any;\ntype EmNode = any;\ntype EmStream = any;\n\nexport interface PythonFsOptions {\n vfs: Vfs;\n cred: Cred;\n /** Called whenever the mount writes, so the host can invalidate caches. */\n onWrite?: (path: string) => void;\n}\n\n/**\n * Build the backend object and install it as the module's root filesystem.\n *\n * Emscripten refuses a second mount at `/`, so the existing MEMFS root is\n * detached first. Already-open streams (stdin/stdout/stderr) keep working\n * because they hold node references rather than paths.\n */\nexport function mountContainerFs(FS: EmFS, opts: PythonFsOptions): void {\n const { vfs, cred } = opts;\n\n const throwErrno = (code: ErrnoCode | string): never => {\n throw new FS.ErrnoError(emErrno(code));\n };\n\n const translate = (e: unknown): never => {\n if (isSysError(e)) return throwErrno(e.code);\n throw new FS.ErrnoError(emErrno(\"EIO\"));\n };\n\n const backend = {\n /** Absolute container path for a node. */\n realPath(node: EmNode): string {\n const parts: string[] = [];\n let current: EmNode = node;\n while (current && current.parent !== current) {\n parts.unshift(current.name);\n current = current.parent;\n }\n return \"/\" + parts.join(\"/\");\n },\n\n mount(_mount: unknown): EmNode {\n return backend.createNode(null, \"/\", 0o040755 | 0, 0);\n },\n\n createNode(parent: EmNode | null, name: string, mode: number, rdev: number): EmNode {\n const node = FS.createNode(parent, name, mode, rdev);\n node.node_ops = nodeOps;\n node.stream_ops = streamOps;\n return node;\n },\n };\n\n const nodeOps = {\n getattr(node: EmNode) {\n const path = backend.realPath(node);\n try {\n const st = vfs.lstat(path);\n return {\n dev: st.dev,\n ino: st.ino,\n mode: st.mode,\n nlink: st.nlink,\n uid: st.uid,\n gid: st.gid,\n rdev: st.rdev,\n size: st.size,\n atime: new Date(st.atimeMs),\n mtime: new Date(st.mtimeMs),\n ctime: new Date(st.ctimeMs),\n blksize: 4096,\n blocks: Math.ceil(st.size / 512),\n };\n } catch (e) {\n return translate(e);\n }\n },\n\n setattr(node: EmNode, attr: { mode?: number; timestamp?: number; size?: number }) {\n const path = backend.realPath(node);\n try {\n if (attr.mode !== undefined) {\n vfs.chmod(path, attr.mode & 0o7777, cred);\n node.mode = attr.mode;\n }\n if (attr.timestamp !== undefined) vfs.utimes(path, attr.timestamp, attr.timestamp, cred);\n if (attr.size !== undefined) {\n vfs.truncate(path, attr.size, cred);\n opts.onWrite?.(path);\n }\n } catch (e) {\n translate(e);\n }\n },\n\n lookup(parent: EmNode, name: string): EmNode {\n const path = P.join(backend.realPath(parent), name);\n let mode: number;\n try {\n mode = vfs.lstat(path).mode;\n } catch {\n throw new FS.ErrnoError(EM_ERRNO.ENOENT!);\n }\n return backend.createNode(parent, name, mode, 0);\n },\n\n mknod(parent: EmNode, name: string, mode: number, dev: number): EmNode {\n const path = P.join(backend.realPath(parent), name);\n try {\n if (FS.isDir(mode)) {\n vfs.mkdir(path, { cred, mode: mode & 0o7777 });\n } else if (FS.isFile(mode)) {\n vfs.writeFile(path, new Uint8Array(0), { cred, mode: mode & 0o7777 });\n } else {\n return throwErrno(\"ENOTSUP\");\n }\n opts.onWrite?.(path);\n } catch (e) {\n translate(e);\n }\n return backend.createNode(parent, name, mode, dev);\n },\n\n rename(oldNode: EmNode, newDir: EmNode, newName: string): void {\n const from = backend.realPath(oldNode);\n const to = P.join(backend.realPath(newDir), newName);\n try {\n vfs.rename(from, to, cred);\n opts.onWrite?.(to);\n } catch (e) {\n translate(e);\n }\n oldNode.name = newName;\n oldNode.parent = newDir;\n },\n\n unlink(parent: EmNode, name: string): void {\n const path = P.join(backend.realPath(parent), name);\n try {\n vfs.unlink(path, cred);\n opts.onWrite?.(path);\n } catch (e) {\n translate(e);\n }\n },\n\n rmdir(parent: EmNode, name: string): void {\n const path = P.join(backend.realPath(parent), name);\n try {\n vfs.rmdir(path, cred);\n opts.onWrite?.(path);\n } catch (e) {\n translate(e);\n }\n },\n\n readdir(node: EmNode): string[] {\n const path = backend.realPath(node);\n try {\n return [\".\", \"..\", ...vfs.readdir(path, cred)];\n } catch (e) {\n return translate(e);\n }\n },\n\n symlink(parent: EmNode, newName: string, oldPath: string): void {\n const path = P.join(backend.realPath(parent), newName);\n try {\n vfs.symlink(oldPath, path, cred);\n opts.onWrite?.(path);\n } catch (e) {\n translate(e);\n }\n },\n\n readlink(node: EmNode): string {\n const path = backend.realPath(node);\n try {\n return vfs.readlink(path, cred);\n } catch (e) {\n return translate(e);\n }\n },\n };\n\n const streamOps = {\n open(stream: EmStream): void {\n const path = backend.realPath(stream.node);\n if (FS.isDir(stream.node.mode)) return;\n try {\n // Reads are served from a snapshot taken at open time; writes go\n // through a buffer flushed on close, matching normal file semantics\n // closely enough for scripts while keeping every operation synchronous.\n stream.sbxBuffer = vfs.lexists(path) ? vfs.readFile(path, cred) : new Uint8Array(0);\n stream.sbxDirty = false;\n } catch (e) {\n translate(e);\n }\n },\n\n close(stream: EmStream): void {\n if (!stream.sbxDirty) return;\n const path = backend.realPath(stream.node);\n try {\n vfs.writeFile(path, stream.sbxBuffer as Uint8Array, { cred });\n opts.onWrite?.(path);\n } catch (e) {\n translate(e);\n }\n stream.sbxDirty = false;\n },\n\n read(stream: EmStream, buffer: Uint8Array, offset: number, length: number, position: number): number {\n const source = (stream.sbxBuffer as Uint8Array) ?? new Uint8Array(0);\n if (position >= source.length) return 0;\n const size = Math.min(length, source.length - position);\n buffer.set(source.subarray(position, position + size), offset);\n return size;\n },\n\n write(stream: EmStream, buffer: Uint8Array, offset: number, length: number, position: number): number {\n const current = (stream.sbxBuffer as Uint8Array) ?? new Uint8Array(0);\n const end = Math.max(current.length, position + length);\n const next = new Uint8Array(end);\n next.set(current);\n next.set(buffer.subarray(offset, offset + length), position);\n stream.sbxBuffer = next;\n stream.sbxDirty = true;\n stream.node.size = end;\n // Flush eagerly so a script that writes then shells out sees the data.\n const path = backend.realPath(stream.node);\n try {\n vfs.writeFile(path, next, { cred });\n opts.onWrite?.(path);\n stream.sbxDirty = false;\n } catch (e) {\n translate(e);\n }\n return length;\n },\n\n llseek(stream: EmStream, offset: number, whence: number): number {\n let position = offset;\n if (whence === 1) position += stream.position;\n else if (whence === 2) position += ((stream.sbxBuffer as Uint8Array) ?? new Uint8Array(0)).length;\n if (position < 0) throw new FS.ErrnoError(EM_ERRNO.EINVAL!);\n return position;\n },\n };\n\n // Detach the default in-memory root so ours can take `/`.\n FS.root = null;\n FS.mount(backend, {}, \"/\");\n try {\n FS.chdir(\"/\");\n } catch {\n /* the caller sets cwd explicitly anyway */\n }\n}\n","/**\n * The Python runtime: MicroPython compiled to WebAssembly, wired to the\n * container's filesystem, argv, environment and standard streams.\n *\n * A fresh interpreter is created per process, which is both correct (no state\n * leaks between runs) and cheap — the WASM module is compiled once and reused,\n * so subsequent instantiations take single-digit milliseconds.\n */\n\nimport { defineCommand, type Command, type ExecContext } from \"../kernel/command.js\";\nimport { mountContainerFs } from \"./python-fs.js\";\nimport { inflateRawSync } from \"node:zlib\";\nimport * as P from \"../fs/path.js\";\n\nconst PYTHON_VERSION = \"3.4.0\";\nconst MICROPYTHON_BANNER = \"MicroPython v1.28.0 on 2026-04-06; SandboxedJS with Emscripten\";\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\ntype MicroPythonModule = any;\n\ninterface LoadOptions {\n /** Receives raw output bytes; with `linebuffer: false` these arrive per byte. */\n stdout(chunk: Uint8Array | string): void;\n stderr(chunk: Uint8Array | string): void;\n /** Must yield the next input **byte**, or null at EOF. */\n stdin?: () => number | null;\n heapsize?: number;\n}\n\ntype LoadMicroPython = (options: Record<string, unknown>) => Promise<MicroPythonModule>;\n\nlet loaderPromise: Promise<LoadMicroPython> | null = null;\n\n/** Resolve the WASM loader once; the module itself caches the compiled code. */\nasync function getLoader(): Promise<LoadMicroPython> {\n if (!loaderPromise) {\n loaderPromise = import(\"@micropython/micropython-webassembly-pyscript/micropython.mjs\").then(\n (m) => (m as { loadMicroPython: LoadMicroPython }).loadMicroPython,\n );\n }\n return loaderPromise;\n}\n\n/** True when a Python interpreter can be started in this process. */\nexport async function isPythonAvailable(): Promise<boolean> {\n try {\n await getLoader();\n return true;\n } catch {\n return false;\n }\n}\n\nasync function createInterpreter(ctx: ExecContext, opts: LoadOptions): Promise<MicroPythonModule> {\n const loadMicroPython = await getLoader();\n const mp = await loadMicroPython({\n stdout: opts.stdout,\n stderr: opts.stderr,\n ...(opts.stdin ? { stdin: opts.stdin } : {}),\n linebuffer: false,\n heapsize: opts.heapsize ?? 64 * 1024 * 1024,\n });\n\n mountContainerFs(mp.FS, { vfs: ctx.vfs, cred: ctx.cred });\n try {\n mp.FS.chdir(ctx.cwd);\n } catch {\n /* cwd may have been removed; stay at / */\n }\n return mp;\n}\n\n/** Install `sys.argv`, `os.environ` and the module search path. */\nfunction bootstrapPython(mp: MicroPythonModule, ctx: ExecContext, argv: string[], scriptDir: string | null): void {\n const envEntries = Object.entries(ctx.env)\n .map(([k, v]) => `${JSON.stringify(k)}: ${JSON.stringify(v)}`)\n .join(\", \");\n\n const paths = [\n ...(scriptDir ? [scriptDir] : [\"\"]),\n \"/usr/lib/python3\",\n \"/usr/lib/python3/site-packages\",\n \"/usr/local/lib/python3/site-packages\",\n ];\n\n // `sys` is a frozen module: `sys.argv` can be mutated but not rebound.\n // `os` is a normal Python module, so `os.environ` can simply be assigned.\n mp.runPython(`\nimport sys, os\nsys.argv[:] = ${JSON.stringify(argv)}\nfor __p in reversed(${JSON.stringify(paths)}):\n if __p not in sys.path:\n sys.path.insert(0, __p)\ndel __p\nos.environ = {${envEntries}}\nos.getenv = lambda k, d=None: os.environ.get(k, d)\nos.putenv = lambda k, v: os.environ.__setitem__(k, v)\nos.unsetenv = lambda k: os.environ.pop(k, None)\nos.sep = '/'\nos.linesep = '\\\\n'\nos.name = 'posix'\n`);\n}\n\ninterface RunOutcome {\n exitCode: number;\n}\n\n/** Turn a MicroPython exception into the traceback + status Python produces. */\nfunction reportPythonError(ctx: ExecContext, e: unknown): number {\n const message = e instanceof Error ? e.message : String(e);\n\n // SystemExit carries the process exit status.\n const systemExit = /SystemExit:?\\s*(-?\\d+)?/.exec(message);\n if (systemExit && /SystemExit/.test(message)) {\n return systemExit[1] !== undefined ? Number(systemExit[1]) & 0xff : 0;\n }\n if (/KeyboardInterrupt/.test(message)) {\n ctx.stderr.write(\"KeyboardInterrupt\\n\");\n return 130;\n }\n\n const text = message.replace(/^PythonError:\\s*/, \"\");\n ctx.stderr.write(text.endsWith(\"\\n\") ? text : text + \"\\n\");\n return 1;\n}\n\nasync function runProgram(\n ctx: ExecContext,\n source: string,\n argv: string[],\n scriptDir: string | null,\n stdinText: string | null,\n): Promise<RunOutcome> {\n // The interpreter reads stdin one byte at a time and expects a numeric code,\n // so hand it UTF-8 bytes rather than UTF-16 code units.\n let stdinOffset = 0;\n const stdinBytes = stdinText === null ? new Uint8Array(0) : new TextEncoder().encode(stdinText);\n\n const mp = await createInterpreter(ctx, {\n stdout: (chunk) => ctx.write(chunk),\n stderr: (chunk) => ctx.stderr.write(chunk),\n stdin: stdinText === null ? undefined : () => (stdinOffset < stdinBytes.length ? stdinBytes[stdinOffset++]! : null),\n });\n\n try {\n bootstrapPython(mp, ctx, argv, scriptDir);\n } catch (e) {\n return { exitCode: reportPythonError(ctx, e) };\n }\n\n try {\n await mp.runPythonAsync(source);\n return { exitCode: 0 };\n } catch (e) {\n return { exitCode: reportPythonError(ctx, e) };\n }\n}\n\n/** Read stdin only when something is actually piped in and will end. */\nasync function readStdin(ctx: ExecContext): Promise<string | null> {\n if (ctx.stdin.isTTY || ctx.stdin.interactive) return null;\n const bytes = await ctx.stdin.readAll();\n if (bytes.length === 0) return null;\n return new TextDecoder().decode(bytes);\n}\n\nexport const python: Command = defineCommand({\n name: \"python3\",\n path: \"/usr/bin/python3\",\n aliases: [\"python\", \"micropython\"],\n summary: \"run a Python program (MicroPython)\",\n usage: \"python3 [-c command | -m module | script.py] [arguments]\",\n manual: `Python is provided by MicroPython compiled to WebAssembly. The\nstandard library subset includes json, re, os, sys, math, random, hashlib,\nbinascii, struct, time, collections, itertools, functools, asyncio and more.\nScripts see the container's filesystem, so open('/etc/passwd') works.`,\n async run(ctx) {\n const argv = ctx.args;\n let i = 0;\n let command: string | undefined;\n let moduleName: string | undefined;\n let script: string | undefined;\n\n for (; i < argv.length; i++) {\n const arg = argv[i]!;\n if (arg === \"-V\" || arg === \"--version\") {\n ctx.line(`Python ${PYTHON_VERSION} (MicroPython v1.28.0)`);\n return 0;\n }\n if (arg === \"-h\" || arg === \"--help\") {\n printHelp(ctx);\n return 0;\n }\n if (arg === \"-c\") {\n command = argv[++i] ?? \"\";\n i++;\n break;\n }\n if (arg === \"-m\") {\n moduleName = argv[++i] ?? \"\";\n i++;\n break;\n }\n if (arg === \"-\") {\n script = \"-\";\n i++;\n break;\n }\n if (arg === \"-i\" || arg === \"-u\" || arg === \"-B\" || arg === \"-E\" || arg === \"-s\" || arg === \"-S\" || arg === \"-O\") continue;\n if (arg.startsWith(\"-\")) continue;\n script = arg;\n i++;\n break;\n }\n\n const rest = argv.slice(i);\n\n if (command !== undefined) {\n const stdin = await readStdin(ctx);\n const outcome = await runProgram(ctx, command, [\"-c\", ...rest], null, stdin);\n return outcome.exitCode;\n }\n\n if (moduleName !== undefined) {\n const stdin = await readStdin(ctx);\n const source = `import runpy_shim\\n`;\n void source;\n // MicroPython has no runpy; import the module and, if it exposes main(), call it.\n const program = `\nimport sys\nsys.argv = ${JSON.stringify([moduleName, ...rest])}\ntry:\n __mod = __import__(${JSON.stringify(moduleName)})\nexcept ImportError as exc:\n print(\"${\"/usr/bin/python3\"}: No module named \" + ${JSON.stringify(moduleName)}, file=sys.stderr)\n raise SystemExit(1)\n_main = getattr(__mod, \"main\", None)\nif callable(_main):\n _main()\n`;\n const outcome = await runProgram(ctx, program, [moduleName, ...rest], null, stdin);\n return outcome.exitCode;\n }\n\n if (script === undefined) {\n if (ctx.stdin.isTTY) return runRepl(ctx);\n const source = new TextDecoder().decode(await ctx.stdin.readAll());\n if (source.trim() === \"\") return 0;\n const outcome = await runProgram(ctx, source, [\"\", ...rest], null, null);\n return outcome.exitCode;\n }\n\n if (script === \"-\") {\n const source = new TextDecoder().decode(await ctx.stdin.readAll());\n const outcome = await runProgram(ctx, source, [\"-\", ...rest], null, null);\n return outcome.exitCode;\n }\n\n const abs = ctx.path(script);\n let source: string;\n try {\n source = ctx.vfs.readText(abs, ctx.cred);\n } catch {\n ctx.stderr.write(`${ctx.name}: can't open file '${abs}': [Errno 2] No such file or directory\\n`);\n return 2;\n }\n\n const stdin = await readStdin(ctx);\n const outcome = await runProgram(ctx, source, [abs, ...rest], P.dirname(abs), stdin);\n return outcome.exitCode;\n },\n});\n\nasync function runRepl(ctx: ExecContext): Promise<number> {\n ctx.line(MICROPYTHON_BANNER);\n ctx.line('Type \"help()\" for more information.');\n\n const mp = await createInterpreter(ctx, {\n stdout: (chunk) => ctx.write(chunk),\n stderr: (chunk) => ctx.stderr.write(chunk),\n });\n bootstrapPython(mp, ctx, [\"\"], null);\n\n let buffer = \"\";\n for (;;) {\n ctx.write(buffer === \"\" ? \">>> \" : \"... \");\n const line = await ctx.stdin.readLine();\n if (line === null) {\n ctx.line(\"\");\n break;\n }\n if (buffer === \"\" && (line.trim() === \"exit()\" || line.trim() === \"quit()\")) break;\n\n buffer += (buffer === \"\" ? \"\" : \"\\n\") + line;\n // Keep reading while the block is obviously unfinished.\n if (/[:\\\\]\\s*$/.test(line) || (buffer !== \"\" && line.trim() !== \"\" && /^\\s+/.test(line))) continue;\n\n try {\n // Echo the value of a bare expression, as the REPL does.\n const trimmed = buffer.trim();\n const isExpression = !/^(import|from|def|class|if|for|while|try|with|return|raise|pass|del|global|nonlocal|assert|@)\\b/.test(trimmed) && !trimmed.includes(\"\\n\") && !/^[A-Za-z_][A-Za-z0-9_]*\\s*(=[^=]|[+\\-*/|&^]=)/.test(trimmed);\n if (isExpression) {\n mp.runPython(`__sbx_repl = (${trimmed})\\nif __sbx_repl is not None: print(repr(__sbx_repl))`);\n } else {\n mp.runPython(buffer);\n }\n } catch (e) {\n const message = e instanceof Error ? e.message : String(e);\n if (/SystemExit/.test(message)) break;\n // Retry as a statement when the expression form failed to compile.\n try {\n mp.runPython(buffer);\n } catch (inner) {\n const text = (inner instanceof Error ? inner.message : String(inner)).replace(/^PythonError:\\s*/, \"\");\n ctx.stderr.write(text.endsWith(\"\\n\") ? text : text + \"\\n\");\n }\n }\n buffer = \"\";\n }\n return 0;\n}\n\nfunction printHelp(ctx: ExecContext): void {\n ctx.line(\"usage: python3 [option] ... [-c cmd | -m mod | file | -] [arg] ...\");\n ctx.line(\"Options:\");\n ctx.line(\"-c cmd : program passed in as string\");\n ctx.line(\"-m mod : run library module as a script\");\n ctx.line(\"-V : print the Python version number and exit\");\n ctx.line(\"file : program read from script file\");\n ctx.line(\"- : program read from stdin\");\n}\n\n/**\n * `pip` — installs pure-Python packages from PyPI into the container when the\n * network policy allows it, and otherwise explains why it cannot.\n */\nexport const pip: Command = defineCommand({\n name: \"pip\",\n path: \"/usr/bin/pip\",\n aliases: [\"pip3\"],\n summary: \"install Python packages\",\n usage: \"pip install PACKAGE...\",\n async run(ctx) {\n const [subcommand, ...rest] = ctx.args;\n const siteDir = \"/usr/lib/python3/site-packages\";\n\n if (subcommand === undefined || subcommand === \"--help\" || subcommand === \"-h\") {\n ctx.line(\"Usage: pip <command> [options]\");\n ctx.line(\"\");\n ctx.line(\"Commands:\");\n ctx.line(\" install Install packages\");\n ctx.line(\" list List installed packages\");\n ctx.line(\" show Show information about installed packages\");\n ctx.line(\" uninstall Uninstall packages\");\n return 0;\n }\n\n if (subcommand === \"--version\" || subcommand === \"-V\") {\n ctx.line(`pip 24.0 from ${siteDir}/pip (python ${PYTHON_VERSION})`);\n return 0;\n }\n\n if (subcommand === \"list\") {\n if (!ctx.vfs.lexists(siteDir)) {\n ctx.line(\"Package Version\");\n ctx.line(\"---------- -------\");\n return 0;\n }\n ctx.line(\"Package Version\");\n ctx.line(\"---------- -------\");\n for (const name of ctx.vfs.readdir(siteDir, ctx.cred)) {\n if (name.endsWith(\".dist-info\")) {\n const [pkg, version] = name.replace(\".dist-info\", \"\").split(\"-\");\n ctx.line(`${(pkg ?? name).padEnd(10)} ${version ?? \"0.0.0\"}`);\n }\n }\n return 0;\n }\n\n if (subcommand === \"uninstall\") {\n let status = 0;\n for (const name of rest.filter((a) => !a.startsWith(\"-\"))) {\n const target = P.join(siteDir, name);\n if (ctx.vfs.lexists(target)) {\n ctx.vfs.rmrf(target, ctx.cred);\n ctx.line(`Successfully uninstalled ${name}`);\n } else {\n ctx.warn(`WARNING: Skipping ${name} as it is not installed.`);\n status = 1;\n }\n }\n return status;\n }\n\n if (subcommand !== \"install\") {\n ctx.warn(`ERROR: unknown command \"${subcommand}\"`);\n return 1;\n }\n\n const packages = rest.filter((a) => !a.startsWith(\"-\"));\n if (packages.length === 0) {\n ctx.warn(\"ERROR: You must give at least one requirement to install\");\n return 1;\n }\n\n if (!ctx.kernel.net.options.allowOutbound) {\n ctx.warn(\"ERROR: Could not find a version that satisfies the requirement\");\n ctx.warn(\"Outbound network access is disabled for this container.\");\n ctx.warn(\"Enable it with createContainer({ network: { allowOutbound: true } }).\");\n return 1;\n }\n\n ctx.vfs.mkdir(siteDir, { recursive: true, cred: ctx.cred, mode: 0o755 });\n\n let status = 0;\n for (const spec of packages) {\n const [name, version] = spec.split(/[=<>~!]+/);\n const url = `https://pypi.org/pypi/${name}/json`;\n if (!ctx.kernel.net.outboundAllowed(url)) {\n ctx.warn(`ERROR: host pypi.org is not in the allowed list`);\n status = 1;\n continue;\n }\n ctx.line(`Collecting ${spec}`);\n try {\n const response = await fetch(url);\n if (!response.ok) throw new Error(`${response.status} ${response.statusText}`);\n const meta = (await response.json()) as {\n info: { version: string };\n releases: Record<string, Array<{ filename: string; url: string; packagetype: string }>>;\n };\n const chosen = version && meta.releases[version] ? version : meta.info.version;\n const files = meta.releases[chosen] ?? [];\n const wheel = files.find((f) => f.packagetype === \"bdist_wheel\" && f.filename.includes(\"py3-none-any\"));\n if (!wheel) {\n ctx.warn(`ERROR: no pure-Python wheel available for ${name} ${chosen}`);\n status = 1;\n continue;\n }\n const data = new Uint8Array(await (await fetch(wheel.url)).arrayBuffer());\n ctx.line(` Downloading ${wheel.filename} (${Math.round(data.length / 1024)} kB)`);\n installWheel(ctx, siteDir, data, name!, chosen);\n ctx.line(`Successfully installed ${name}-${chosen}`);\n } catch (e) {\n ctx.warn(`ERROR: Could not install ${spec}: ${e instanceof Error ? e.message : String(e)}`);\n status = 1;\n }\n }\n return status;\n },\n});\n\n/** Unpack a wheel (a zip) into site-packages. */\nfunction installWheel(ctx: ExecContext, siteDir: string, data: Uint8Array, name: string, version: string): void {\n const entries = readZip(data);\n for (const entry of entries) {\n if (entry.name.endsWith(\"/\")) continue;\n const target = P.join(siteDir, entry.name);\n const parent = P.dirname(target);\n if (!ctx.vfs.lexists(parent)) ctx.vfs.mkdir(parent, { recursive: true, cred: ctx.cred, mode: 0o755 });\n ctx.vfs.writeFile(target, entry.data, { cred: ctx.cred, mode: 0o644 });\n }\n const distInfo = P.join(siteDir, `${name}-${version}.dist-info`);\n if (!ctx.vfs.lexists(distInfo)) ctx.vfs.mkdir(distInfo, { recursive: true, cred: ctx.cred, mode: 0o755 });\n ctx.vfs.writeFile(P.join(distInfo, \"METADATA\"), `Name: ${name}\\nVersion: ${version}\\n`, { cred: ctx.cred });\n}\n\ninterface ZipEntry {\n name: string;\n data: Uint8Array;\n}\n\n/** Minimal zip reader: stored and deflated entries, which is all wheels use. */\nfunction readZip(data: Uint8Array): ZipEntry[] {\n const view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n const entries: ZipEntry[] = [];\n\n // Locate the end-of-central-directory record.\n let eocd = -1;\n for (let i = data.length - 22; i >= 0 && i > data.length - 65558; i--) {\n if (view.getUint32(i, true) === 0x06054b50) {\n eocd = i;\n break;\n }\n }\n if (eocd < 0) return entries;\n\n const count = view.getUint16(eocd + 10, true);\n let offset = view.getUint32(eocd + 16, true);\n\n for (let i = 0; i < count; i++) {\n if (view.getUint32(offset, true) !== 0x02014b50) break;\n const method = view.getUint16(offset + 10, true);\n const compressedSize = view.getUint32(offset + 20, true);\n const nameLength = view.getUint16(offset + 28, true);\n const extraLength = view.getUint16(offset + 30, true);\n const commentLength = view.getUint16(offset + 32, true);\n const localOffset = view.getUint32(offset + 42, true);\n const name = new TextDecoder().decode(data.subarray(offset + 46, offset + 46 + nameLength));\n\n const localNameLength = view.getUint16(localOffset + 26, true);\n const localExtraLength = view.getUint16(localOffset + 28, true);\n const dataStart = localOffset + 30 + localNameLength + localExtraLength;\n const raw = data.subarray(dataStart, dataStart + compressedSize);\n\n entries.push({ name, data: method === 0 ? raw.slice() : new Uint8Array(inflateRawSync(raw)) });\n offset += 46 + nameLength + extraLength + commentLength;\n }\n return entries;\n}\n\nexport function pythonCommands(): Command[] {\n return [python, pip];\n}\n\nexport { PYTHON_VERSION, MICROPYTHON_BANNER };\n","/**\n * Package managers: `npm`/`npx`/`yarn`/`pnpm` on top of Nodepod's installer,\n * and an `apt`-shaped front end for the things a container image would ship.\n */\n\nimport { DependencyInstaller } from \"@scelar/nodepod/headless\";\nimport { defineCommand, type Command, type ExecContext } from \"../kernel/command.js\";\nimport { parseArgs } from \"../util/args.js\";\nimport { NODE_VERSION } from \"../runtime/node.js\";\nimport * as P from \"../fs/path.js\";\n\nconst NPM_VERSION = \"10.9.0\";\n\ninterface Manifest {\n name?: string;\n version?: string;\n scripts?: Record<string, string>;\n dependencies?: Record<string, string>;\n devDependencies?: Record<string, string>;\n bin?: string | Record<string, string>;\n main?: string;\n}\n\nfunction readManifest(ctx: ExecContext, dir: string): { path: string; manifest: Manifest } | null {\n const path = P.join(dir, \"package.json\");\n try {\n return { path, manifest: JSON.parse(ctx.vfs.readText(path, ctx.cred)) as Manifest };\n } catch {\n return null;\n }\n}\n\n/** Walk up from `cwd` looking for the nearest package.json. */\nfunction findProjectRoot(ctx: ExecContext): string {\n let dir = ctx.cwd;\n for (let i = 0; i < 64; i++) {\n if (ctx.vfs.lexists(P.join(dir, \"package.json\"))) return dir;\n const parent = P.dirname(dir);\n if (parent === dir) break;\n dir = parent;\n }\n return ctx.cwd;\n}\n\nfunction writeManifest(ctx: ExecContext, path: string, manifest: Manifest): void {\n ctx.vfs.writeFile(path, JSON.stringify(manifest, null, 2) + \"\\n\", { cred: ctx.cred, mode: 0o644 });\n}\n\nasync function installPackages(\n ctx: ExecContext,\n specs: string[],\n opts: { dev?: boolean; save?: boolean; cwd: string },\n): Promise<number> {\n // The installer bundled with the pod is pinned to the boot working\n // directory; build one per project root so `node_modules` lands next to the\n // package.json the user is actually installing for.\n const installer =\n opts.cwd === \"/\" ? ctx.kernel.pod.packages : new DependencyInstaller(ctx.vfs.volume, { cwd: opts.cwd });\n const onProgress = (message: string) => ctx.stderr.write(message.endsWith(\"\\n\") ? message : message + \"\\n\");\n\n if (!ctx.kernel.net.options.allowOutbound) {\n ctx.warn(\"npm error code ENOTFOUND\");\n ctx.warn(\"npm error network request to https://registry.npmjs.org failed\");\n ctx.warn(\"Outbound network access is disabled for this container.\");\n ctx.warn(\"Enable it with createContainer({ network: { allowOutbound: true } }).\");\n return 1;\n }\n\n try {\n if (specs.length === 0) {\n ctx.line(`npm install (project at ${opts.cwd})`);\n await installer.installFromManifest(P.join(opts.cwd, \"package.json\"), {\n withDevDeps: true,\n onProgress,\n persist: true,\n });\n } else {\n for (const spec of specs) {\n const at = spec.lastIndexOf(\"@\");\n const scoped = spec.startsWith(\"@\");\n const name = at > 0 && !(scoped && at === 0) ? spec.slice(0, at) : spec;\n const version = at > 0 && !(scoped && at === 0) ? spec.slice(at + 1) : undefined;\n ctx.line(`added ${name}${version ? `@${version}` : \"\"}`);\n await installer.install(name, version, {\n onProgress,\n persist: opts.save !== false,\n persistDev: opts.dev === true,\n });\n }\n }\n normalizeBinDirectories(ctx, opts.cwd);\n return 0;\n } catch (e) {\n ctx.warn(`npm error ${e instanceof Error ? e.message : String(e)}`);\n return 1;\n }\n}\n\nexport const npm: Command = defineCommand({\n name: \"npm\",\n path: \"/usr/bin/npm\",\n summary: \"the Node.js package manager\",\n usage: \"npm <command> [args]\",\n async run(ctx) {\n const [subcommand, ...rest] = ctx.args;\n const root = findProjectRoot(ctx);\n\n switch (subcommand) {\n case undefined:\n case \"help\":\n case \"--help\":\n case \"-h\":\n printNpmHelp(ctx);\n return 0;\n\n case \"-v\":\n case \"--version\":\n case \"version\":\n ctx.line(NPM_VERSION);\n return 0;\n\n case \"init\": {\n const existing = readManifest(ctx, ctx.cwd);\n if (existing && !rest.includes(\"-f\") && !rest.includes(\"--force\")) {\n ctx.warn(\"package.json already exists\");\n return 1;\n }\n const name = P.basename(ctx.cwd) || \"app\";\n const manifest: Manifest = {\n name,\n version: \"1.0.0\",\n main: \"index.js\",\n scripts: { test: 'echo \"Error: no test specified\" && exit 1' },\n };\n writeManifest(ctx, P.join(ctx.cwd, \"package.json\"), manifest);\n ctx.line(`Wrote to ${P.join(ctx.cwd, \"package.json\")}:`);\n ctx.line(\"\");\n ctx.line(JSON.stringify(manifest, null, 2));\n return 0;\n }\n\n case \"i\":\n case \"add\":\n case \"install\": {\n const args = parseArgs(rest, [\n { short: \"D\", long: \"save-dev\" },\n { short: \"S\", long: \"save\" },\n { short: \"g\", long: \"global\" },\n { long: \"no-save\" },\n { long: \"production\" },\n { long: \"omit\", arg: true },\n { long: \"legacy-peer-deps\" },\n { short: \"f\", long: \"force\" },\n ], { allowUnknown: true });\n return await installPackages(ctx, args.positional, {\n dev: args.has(\"save-dev\"),\n save: !args.has(\"no-save\"),\n cwd: root,\n });\n }\n\n case \"uninstall\":\n case \"remove\":\n case \"rm\": {\n const found = readManifest(ctx, root);\n for (const name of rest.filter((a) => !a.startsWith(\"-\"))) {\n const target = P.join(root, \"node_modules\", name);\n if (ctx.vfs.lexists(target)) ctx.vfs.rmrf(target, ctx.cred);\n if (found) {\n delete found.manifest.dependencies?.[name];\n delete found.manifest.devDependencies?.[name];\n }\n ctx.line(`removed ${name}`);\n }\n if (found) writeManifest(ctx, found.path, found.manifest);\n return 0;\n }\n\n case \"ls\":\n case \"list\": {\n const found = readManifest(ctx, root);\n ctx.line(`${found?.manifest.name ?? P.basename(root)}@${found?.manifest.version ?? \"1.0.0\"} ${root}`);\n const modules = P.join(root, \"node_modules\");\n if (!ctx.vfs.lexists(modules)) return 0;\n const names = ctx.vfs.readdir(modules, ctx.cred).filter((n) => !n.startsWith(\".\"));\n names.forEach((name, idx) => {\n const last = idx === names.length - 1;\n let version = \"\";\n try {\n version = \"@\" + (JSON.parse(ctx.vfs.readText(P.join(modules, name, \"package.json\"), ctx.cred)).version ?? \"\");\n } catch {\n /* not a package */\n }\n ctx.line(`${last ? \"└──\" : \"├──\"} ${name}${version}`);\n });\n return 0;\n }\n\n case \"run\":\n case \"run-script\":\n case \"start\":\n case \"test\":\n case \"build\": {\n const scriptName = subcommand === \"run\" || subcommand === \"run-script\" ? rest[0] : subcommand;\n const scriptArgs = subcommand === \"run\" || subcommand === \"run-script\" ? rest.slice(1) : rest;\n const found = readManifest(ctx, root);\n if (!found) return ctx.fail(\"could not read package.json\", 1);\n\n if (scriptName === undefined) {\n ctx.line(\"Lifecycle scripts included in \" + (found.manifest.name ?? \"app\") + \":\");\n for (const [name, body] of Object.entries(found.manifest.scripts ?? {})) {\n ctx.line(` ${name}`);\n ctx.line(` ${body}`);\n }\n return 0;\n }\n\n const script = found.manifest.scripts?.[scriptName];\n if (script === undefined) {\n if (scriptName === \"start\" && found.manifest.main) {\n return await runScript(ctx, root, `node ${found.manifest.main}`, scriptArgs, found.manifest);\n }\n ctx.warn(`Missing script: \"${scriptName}\"`);\n return 1;\n }\n\n ctx.line(\"\");\n ctx.line(`> ${found.manifest.name ?? \"app\"}@${found.manifest.version ?? \"1.0.0\"} ${scriptName}`);\n ctx.line(`> ${script}`);\n ctx.line(\"\");\n return await runScript(ctx, root, script, scriptArgs, found.manifest);\n }\n\n case \"exec\":\n return await runScript(ctx, root, rest.join(\" \"), [], readManifest(ctx, root)?.manifest ?? {});\n\n case \"root\":\n ctx.line(P.join(root, \"node_modules\"));\n return 0;\n\n case \"prefix\":\n ctx.line(root);\n return 0;\n\n case \"config\":\n if (rest[0] === \"get\") {\n const key = rest[1];\n const values: Record<string, string> = {\n registry: \"https://registry.npmjs.org/\",\n prefix: \"/usr/local\",\n \"user-agent\": `npm/${NPM_VERSION} node/${NODE_VERSION}`,\n };\n ctx.line(values[key ?? \"\"] ?? \"undefined\");\n return 0;\n }\n ctx.line(\"; SandboxedJS npm config\");\n ctx.line(\"registry = \\\"https://registry.npmjs.org/\\\"\");\n return 0;\n\n case \"cache\":\n ctx.line(\"npm cache: nothing to do in this container\");\n return 0;\n\n case \"ping\":\n ctx.line(ctx.kernel.net.options.allowOutbound ? \"npm ping ok\" : \"npm error network disabled\");\n return ctx.kernel.net.options.allowOutbound ? 0 : 1;\n\n case \"whoami\":\n ctx.warn(\"npm error code ENEEDAUTH\");\n return 1;\n\n default:\n ctx.warn(`Unknown command: \"${subcommand}\"`);\n ctx.warn(\"To see a list of supported npm commands, run: npm help\");\n return 1;\n }\n },\n});\n\n/** Run a package script with `node_modules/.bin` on PATH, as npm does. */\nasync function runScript(\n ctx: ExecContext,\n root: string,\n script: string,\n extraArgs: string[],\n manifest: Manifest,\n): Promise<number> {\n const binDir = P.join(root, \"node_modules\", \".bin\");\n const env = {\n ...ctx.env,\n PATH: `${binDir}:${ctx.env.PATH ?? \"\"}`,\n npm_lifecycle_script: script,\n npm_package_name: manifest.name ?? \"\",\n npm_package_version: manifest.version ?? \"\",\n npm_config_user_agent: `npm/${NPM_VERSION} node/${NODE_VERSION} linux x64`,\n INIT_CWD: ctx.cwd,\n };\n const commandLine = extraArgs.length ? `${script} ${extraArgs.map(quote).join(\" \")}` : script;\n\n return await ctx.kernel\n .spawn([\"/bin/sh\", \"-c\", commandLine], {\n cwd: root,\n env,\n cred: ctx.cred,\n ppid: ctx.proc.pid,\n stdin: ctx.stdin,\n stdout: ctx.stdout,\n stderr: ctx.stderr,\n })\n .wait();\n}\n\nfunction quote(value: string): string {\n return /^[A-Za-z0-9_@%+=:,./-]+$/.test(value) ? value : `'${value.replace(/'/g, `'\\\\''`)}'`;\n}\n\n/**\n * Make `node_modules/.bin` entries runnable.\n *\n * The installer writes them as plain files containing a command line, with no\n * shebang and no execute bit, so `$PATH` lookup would reject them. npm marks\n * its shims executable; do the same, and give them a `#!/bin/sh` line so the\n * kernel knows how to dispatch them.\n */\nfunction normalizeBinDirectories(ctx: ExecContext, root: string): void {\n const modules = P.join(root, \"node_modules\");\n if (!ctx.vfs.lexists(modules)) return;\n\n const visit = (binDir: string) => {\n let names: string[];\n try {\n names = ctx.vfs.readdir(binDir, ctx.cred);\n } catch {\n return;\n }\n for (const name of names) {\n const path = P.join(binDir, name);\n try {\n const st = ctx.vfs.lstat(path);\n if (st.isDirectory()) continue;\n if (!st.isSymbolicLink()) {\n const text = ctx.vfs.readText(path, ctx.cred);\n if (!text.startsWith(\"#!\")) {\n ctx.vfs.writeFile(path, \"#!/bin/sh\\n\" + text, { privileged: true, mode: 0o755 });\n }\n }\n ctx.vfs.chmod(path, 0o755, ctx.cred);\n } catch {\n /* skip anything unreadable */\n }\n }\n };\n\n visit(P.join(modules, \".bin\"));\n // Scoped and nested packages get their own `.bin` directories.\n for (const path of ctx.vfs.walk(modules, { cred: ctx.cred, maxDepth: 4 })) {\n if (P.basename(path) === \".bin\" && path !== P.join(modules, \".bin\")) visit(path);\n }\n}\n\nfunction printNpmHelp(ctx: ExecContext): void {\n ctx.line(`npm <command>`);\n ctx.line(\"\");\n ctx.line(\"Usage:\");\n ctx.line(\" npm install install all the dependencies in your project\");\n ctx.line(\" npm install <pkg> add the <pkg> dependency to your project\");\n ctx.line(\" npm run <script> run an arbitrary package script\");\n ctx.line(\" npm ls list installed packages\");\n ctx.line(\" npm init create a package.json file\");\n ctx.line(\"\");\n ctx.line(`npm@${NPM_VERSION} /usr/lib/node_modules/npm`);\n}\n\nexport const npx: Command = defineCommand({\n name: \"npx\",\n path: \"/usr/bin/npx\",\n summary: \"run a command from a local or remote npm package\",\n async run(ctx) {\n const args = parseArgs(ctx.args, [{ short: \"y\", long: \"yes\" }, { long: \"no-install\" }, { short: \"p\", long: \"package\", arg: true }], {\n stopAtFirstPositional: true,\n });\n if (args.positional.length === 0) return ctx.fail(\"npx: a command is required\", 1);\n\n const root = findProjectRoot(ctx);\n const [name, ...rest] = args.positional;\n const binPath = P.join(root, \"node_modules\", \".bin\", name!);\n\n if (!ctx.vfs.lexists(binPath) && ctx.kernel.net.options.allowOutbound) {\n ctx.stderr.write(`npx: installing ${name}...\\n`);\n await installPackages(ctx, [name!], { cwd: root, save: false });\n }\n\n const env = { ...ctx.env, PATH: `${P.join(root, \"node_modules\", \".bin\")}:${ctx.env.PATH ?? \"\"}` };\n return await ctx.kernel\n .spawn([name!, ...rest], {\n cwd: ctx.cwd,\n env,\n cred: ctx.cred,\n ppid: ctx.proc.pid,\n stdin: ctx.stdin,\n stdout: ctx.stdout,\n stderr: ctx.stderr,\n })\n .wait();\n },\n});\n\n/** `yarn` and `pnpm` map onto the same installer with npm-compatible verbs. */\nfunction makeNpmAlias(name: string, path: string): Command {\n return defineCommand({\n name,\n path,\n summary: `${name} package manager (npm-compatible)`,\n async run(ctx) {\n const [subcommand, ...rest] = ctx.args;\n const mapped: Record<string, string[]> = {\n add: [\"install\", ...rest],\n install: [\"install\", ...rest],\n i: [\"install\", ...rest],\n remove: [\"uninstall\", ...rest],\n run: [\"run\", ...rest],\n exec: [\"exec\", ...rest],\n list: [\"ls\", ...rest],\n why: [\"ls\", ...rest],\n dlx: [\"exec\", ...rest],\n };\n if (subcommand === undefined) return npm.run({ ...ctx, args: [\"install\"], argv: [name, \"install\"] } as ExecContext);\n if (subcommand === \"-v\" || subcommand === \"--version\") {\n ctx.line(name === \"yarn\" ? \"1.22.22\" : \"9.12.0\");\n return 0;\n }\n const npmArgs = mapped[subcommand] ?? [subcommand, ...rest];\n // An unmapped verb is treated as a script name, matching yarn/pnpm.\n const finalArgs = mapped[subcommand] ? npmArgs : [\"run\", subcommand, ...rest];\n return npm.run({ ...ctx, args: finalArgs, argv: [\"npm\", ...finalArgs], name: \"npm\" } as ExecContext);\n },\n });\n}\n\nexport const yarn = makeNpmAlias(\"yarn\", \"/usr/bin/yarn\");\nexport const pnpm = makeNpmAlias(\"pnpm\", \"/usr/bin/pnpm\");\n\n/**\n * `apt` / `apt-get` — the packages a container image would ship are already\n * built in, so this reports what is present and explains the rest rather than\n * pretending to download Debian archives.\n */\nexport const apt: Command = defineCommand({\n name: \"apt\",\n path: \"/usr/bin/apt\",\n aliases: [\"apt-get\"],\n summary: \"package handling utility\",\n usage: \"apt <command> [package]...\",\n async run(ctx) {\n const [subcommand, ...rest] = ctx.args;\n const provided: Record<string, { version: string; description: string }> = {\n nodejs: { version: NODE_VERSION.replace(/^v/, \"\"), description: \"Node.js event-based server-side JavaScript engine\" },\n npm: { version: NPM_VERSION, description: \"package manager for Node.js\" },\n python3: { version: \"3.4.0-micropython\", description: \"interactive high-level object-oriented language\" },\n \"python3-pip\": { version: \"24.0\", description: \"Python package installer\" },\n coreutils: { version: \"9.4\", description: \"GNU core utilities\" },\n grep: { version: \"3.11\", description: \"GNU grep, egrep and fgrep\" },\n sed: { version: \"4.9\", description: \"GNU stream editor\" },\n gawk: { version: \"5.2.2\", description: \"GNU awk, a pattern scanning and processing language\" },\n tar: { version: \"1.35\", description: \"GNU version of the tar archiving utility\" },\n gzip: { version: \"1.12\", description: \"GNU compression utilities\" },\n curl: { version: \"8.5.0\", description: \"command line tool for transferring data with URL syntax\" },\n wget: { version: \"1.21.4\", description: \"retrieves files from the web\" },\n \"ca-certificates\": { version: \"20240203\", description: \"common CA certificates\" },\n };\n\n switch (subcommand) {\n case \"list\": {\n const installedOnly = rest.includes(\"--installed\");\n for (const [name, info] of Object.entries(provided)) {\n const available = ctx.kernel.which(name === \"python3-pip\" ? \"pip\" : name === \"gawk\" ? \"awk\" : name, ctx.cwd, ctx.env, ctx.cred) !== null;\n if (installedOnly && !available) continue;\n ctx.line(`${name}/stable ${info.version} amd64${available ? \" [installed]\" : \"\"}`);\n }\n return 0;\n }\n case \"show\": {\n let status = 0;\n for (const name of rest) {\n const info = provided[name];\n if (!info) {\n ctx.warn(`E: No packages found matching ${name}`);\n status = 1;\n continue;\n }\n ctx.line(`Package: ${name}`);\n ctx.line(`Version: ${info.version}`);\n ctx.line(`Priority: optional`);\n ctx.line(`Architecture: amd64`);\n ctx.line(`Description: ${info.description}`);\n ctx.line(\"\");\n }\n return status;\n }\n case \"update\":\n ctx.line(\"Hit:1 https://deb.sandboxedjs.local stable InRelease\");\n ctx.line(\"Reading package lists... Done\");\n return 0;\n case \"install\": {\n const names = rest.filter((a) => !a.startsWith(\"-\"));\n ctx.line(\"Reading package lists... Done\");\n ctx.line(\"Building dependency tree... Done\");\n const missing = names.filter((n) => !(n in provided));\n const present = names.filter((n) => n in provided);\n for (const name of present) ctx.line(`${name} is already the newest version (${provided[name]!.version}).`);\n if (missing.length) {\n for (const name of missing) ctx.warn(`E: Unable to locate package ${name}`);\n ctx.warn(\"This container ships a fixed set of packages. Use `npm install` for\");\n ctx.warn(\"JavaScript dependencies or `pip install` for pure-Python ones.\");\n return 100;\n }\n ctx.line(\"0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.\");\n return 0;\n }\n case \"remove\":\n case \"purge\":\n ctx.warn(\"E: built-in packages cannot be removed\");\n return 100;\n case \"search\": {\n const pattern = new RegExp(rest[0] ?? \"\", \"i\");\n for (const [name, info] of Object.entries(provided)) {\n if (pattern.test(name) || pattern.test(info.description)) {\n ctx.line(`${name}/stable ${info.version} amd64`);\n ctx.line(` ${info.description}`);\n ctx.line(\"\");\n }\n }\n return 0;\n }\n case \"--version\":\n case \"-v\":\n ctx.line(\"apt 2.7.14 (amd64)\");\n return 0;\n default:\n ctx.line(\"apt 2.7.14 (amd64)\");\n ctx.line(\"Usage: apt [options] command\");\n ctx.line(\"\");\n ctx.line(\"Most used commands:\");\n ctx.line(\" list - list packages based on package names\");\n ctx.line(\" search - search in package descriptions\");\n ctx.line(\" show - show package details\");\n ctx.line(\" install - install packages\");\n ctx.line(\" update - update list of available packages\");\n return subcommand === undefined ? 0 : 1;\n }\n },\n});\n\nexport const dpkg: Command = defineCommand({\n name: \"dpkg\",\n path: \"/usr/bin/dpkg\",\n summary: \"package manager for Debian\",\n run(ctx) {\n if (ctx.args[0] === \"-l\" || ctx.args[0] === \"--list\") {\n ctx.line(\"Desired=Unknown/Install/Remove/Purge/Hold\");\n ctx.line(\"| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend\");\n ctx.line(\"||/ Name Version Architecture Description\");\n ctx.line(\"+++-==============-============-============-=================================\");\n ctx.line(`ii nodejs ${NODE_VERSION.replace(/^v/, \"\").padEnd(12)} amd64 Node.js JavaScript runtime`);\n ctx.line(`ii python3 3.4.0 amd64 MicroPython interpreter`);\n return 0;\n }\n ctx.line(\"dpkg 1.22.6 (amd64)\");\n return 0;\n },\n});\n\nexport function packageCommands(): Command[] {\n return [npm, npx, yarn, pnpm, apt, dpkg];\n}\n\nexport { NPM_VERSION };\n","/**\n * The userland: every program installed into `$PATH` at boot.\n *\n * Each command is a real file under `/bin`, `/sbin` or `/usr/bin`, so `which`,\n * `ls -l /usr/bin` and shebang dispatch all behave the way they do on a real\n * system.\n */\n\nimport type { Kernel } from \"../kernel/kernel.js\";\nimport type { Command } from \"../kernel/command.js\";\n\nimport { commands as shellCommands } from \"./shell-bin.js\";\nimport { commands as fsCommands } from \"./fs-basic.js\";\nimport { commands as systemCommands } from \"./system.js\";\nimport { commands as textCommands } from \"./text.js\";\nimport { commands as searchCommands } from \"./search.js\";\nimport { commands as archiveCommands } from \"./archive.js\";\nimport { commands as hashCommands } from \"./hash.js\";\nimport { commands as netCommands } from \"../net/commands.js\";\nimport { commands as adminCommands } from \"./admin.js\";\nimport { commands as docCommands } from \"./docs.js\";\nimport { nodeCommands } from \"../runtime/node.js\";\nimport { pythonCommands } from \"../runtime/python.js\";\nimport { packageCommands } from \"../pkg/index.js\";\n\n/** Every command, in installation order. */\nexport function allCommands(): Command[] {\n return [\n ...shellCommands,\n ...fsCommands,\n ...systemCommands,\n ...textCommands,\n ...searchCommands,\n ...archiveCommands,\n ...hashCommands,\n ...netCommands,\n ...adminCommands,\n ...docCommands,\n ...nodeCommands(),\n ...pythonCommands(),\n ...packageCommands(),\n ];\n}\n\n/**\n * Install the userland into a kernel. Commands declaring their own `path` land\n * there; everything else goes to `/usr/bin`, with `/bin` and `/sbin` symlinked\n * the way merged-`/usr` distributions do.\n */\nexport function installUserland(kernel: Kernel): void {\n kernel.installCommands(allCommands());\n\n // A few conveniences real systems ship as scripts rather than binaries.\n const vfs = kernel.vfs;\n if (!vfs.lexists(\"/usr/bin/reset\")) {\n vfs.writeFile(\"/usr/bin/reset\", \"#!/bin/sh\\nprintf '\\\\033c'\\n\", { privileged: true, mode: 0o755 });\n vfs.chmod(\"/usr/bin/reset\", 0o755);\n }\n if (!vfs.lexists(\"/sbin/init\")) {\n vfs.writeFile(\"/sbin/init\", \"#!/bin/sh\\nexec /bin/sh -l\\n\", { privileged: true, mode: 0o755 });\n vfs.chmod(\"/sbin/init\", 0o755);\n }\n}\n","/**\n * A promise-based filesystem façade for host code, shaped like `fs/promises`\n * so it reads naturally from the outside.\n */\n\nimport type { Kernel } from \"../kernel/kernel.js\";\nimport type { Stats } from \"../fs/stat.js\";\nimport type { DirEntry } from \"../fs/stat.js\";\nimport { ROOT_CRED } from \"../fs/vfs.js\";\nimport * as P from \"../fs/path.js\";\n\nexport class ContainerFs {\n constructor(private readonly kernel: Kernel) {}\n\n private get vfs() {\n return this.kernel.vfs;\n }\n\n async readFile(path: string): Promise<Uint8Array>;\n async readFile(path: string, encoding: \"utf8\" | \"utf-8\"): Promise<string>;\n async readFile(path: string, encoding?: \"utf8\" | \"utf-8\"): Promise<Uint8Array | string> {\n const bytes = this.vfs.readFile(P.clean(path));\n return encoding ? new TextDecoder().decode(bytes) : bytes;\n }\n\n async writeFile(path: string, data: string | Uint8Array, opts: { mode?: number } = {}): Promise<void> {\n const abs = P.clean(path);\n const parent = P.dirname(abs);\n if (!this.vfs.lexists(parent)) this.vfs.mkdir(parent, { recursive: true, mode: 0o755 });\n this.vfs.writeFile(abs, data, { privileged: true, mode: opts.mode ?? 0o644 });\n }\n\n async appendFile(path: string, data: string | Uint8Array): Promise<void> {\n this.vfs.appendFile(P.clean(path), data, { privileged: true });\n }\n\n async readdir(path: string): Promise<string[]>;\n async readdir(path: string, opts: { withFileTypes: true }): Promise<DirEntry[]>;\n async readdir(path: string, opts?: { withFileTypes?: boolean }): Promise<string[] | DirEntry[]> {\n if (opts?.withFileTypes) return this.vfs.readdirWithTypes(P.clean(path));\n return this.vfs.readdir(P.clean(path));\n }\n\n async mkdir(path: string, opts: { recursive?: boolean; mode?: number } = {}): Promise<void> {\n this.vfs.mkdir(P.clean(path), { recursive: opts.recursive ?? true, mode: opts.mode ?? 0o755 });\n }\n\n async rm(path: string, opts: { recursive?: boolean; force?: boolean } = {}): Promise<void> {\n const abs = P.clean(path);\n try {\n if (opts.recursive) this.vfs.rmrf(abs);\n else this.vfs.unlink(abs);\n } catch (e) {\n if (!opts.force) throw e;\n }\n }\n\n async rename(from: string, to: string): Promise<void> {\n this.vfs.rename(P.clean(from), P.clean(to));\n }\n\n async copyFile(from: string, to: string): Promise<void> {\n this.vfs.copyFile(P.clean(from), P.clean(to));\n }\n\n async stat(path: string): Promise<Stats> {\n return this.vfs.stat(P.clean(path));\n }\n\n async lstat(path: string): Promise<Stats> {\n return this.vfs.lstat(P.clean(path));\n }\n\n async exists(path: string): Promise<boolean> {\n return this.vfs.exists(P.clean(path));\n }\n\n async symlink(target: string, link: string): Promise<void> {\n this.vfs.symlink(target, P.clean(link));\n }\n\n async readlink(path: string): Promise<string> {\n return this.vfs.readlink(P.clean(path));\n }\n\n async realpath(path: string): Promise<string> {\n return this.vfs.realpath(P.clean(path));\n }\n\n async chmod(path: string, mode: number): Promise<void> {\n this.vfs.chmod(P.clean(path), mode);\n }\n\n async chown(path: string, uid: number, gid: number): Promise<void> {\n this.vfs.chown(P.clean(path), uid, gid, ROOT_CRED);\n }\n\n /** Every path beneath `root`, depth-first. */\n async walk(root = \"/\"): Promise<string[]> {\n return [...this.vfs.walk(P.clean(root))];\n }\n\n /** Total bytes and file counts, as `df` reports them. */\n async usage(root = \"/\"): Promise<{ files: number; dirs: number; bytes: number }> {\n return this.vfs.usage(P.clean(root));\n }\n\n /** Read many files at once, keyed by path. */\n async readAll(paths: string[]): Promise<Record<string, string>> {\n const out: Record<string, string> = {};\n for (const path of paths) out[path] = this.vfs.readText(P.clean(path));\n return out;\n }\n\n /** Write a whole map of files, creating parents. */\n async writeAll(files: Record<string, string | Uint8Array>, opts: { cwd?: string } = {}): Promise<void> {\n for (const [key, value] of Object.entries(files)) {\n await this.writeFile(P.resolve(opts.cwd ?? \"/\", key), value);\n }\n }\n}\n","/**\n * A stateful shell session — `cd`, variables, functions and history persist\n * across calls, the way a terminal does. `Container.exec` is deliberately\n * stateless; this is the other half.\n */\n\nimport type { Kernel } from \"../kernel/kernel.js\";\nimport type { Cred } from \"../fs/vfs.js\";\nimport { Shell } from \"../shell/interpreter.js\";\nimport { BufferSink, NullInput, Pipe, type InputStream, type OutputStream } from \"../fs/streams.js\";\nimport type { Process } from \"../kernel/process.js\";\n\nexport interface SessionInit {\n cwd: string;\n env: Record<string, string>;\n cred: Cred;\n hooks?: { onStdout?: (chunk: string) => void; onStderr?: (chunk: string) => void };\n}\n\nexport interface SessionRunOptions {\n stdin?: string | Uint8Array | InputStream;\n onStdout?: (chunk: string) => void;\n onStderr?: (chunk: string) => void;\n timeoutMs?: number;\n /** Present the session as attached to a terminal. */\n tty?: boolean;\n columns?: number;\n rows?: number;\n}\n\nexport interface SessionResult {\n exitCode: number;\n stdout: string;\n stderr: string;\n output: string;\n}\n\nexport class Session {\n readonly shell: Shell;\n readonly proc: Process;\n private closed = false;\n\n constructor(\n private readonly kernel: Kernel,\n init: SessionInit,\n ) {\n this.proc = kernel.procs.create({\n argv: [\"-sh\"],\n cwd: init.cwd,\n env: init.env,\n cred: init.cred,\n ppid: 1,\n kind: \"shell\",\n tty: \"pts/0\",\n });\n this.shell = new Shell({\n kernel,\n proc: this.proc,\n cwd: init.cwd,\n env: init.env,\n cred: init.cred,\n scriptName: \"sh\",\n options: { interactive: true },\n });\n this.hooks = init.hooks ?? {};\n }\n\n private readonly hooks: NonNullable<SessionInit[\"hooks\"]>;\n\n get cwd(): string {\n return this.shell.cwd;\n }\n\n get env(): Record<string, string> {\n return this.shell.vars.environment();\n }\n\n get history(): string[] {\n return this.shell.history;\n }\n\n /** Run a command line, keeping every side effect for the next call. */\n async run(command: string, opts: SessionRunOptions = {}): Promise<SessionResult> {\n if (this.closed) throw new Error(\"session is closed\");\n const combined: string[] = [];\n const decoder = new TextDecoder();\n\n const stdout = new BufferSink((chunk) => {\n const text = decoder.decode(chunk, { stream: true });\n combined.push(text);\n opts.onStdout?.(text);\n this.hooks.onStdout?.(text);\n });\n const stderr = new BufferSink((chunk) => {\n const text = decoder.decode(chunk, { stream: true });\n combined.push(text);\n opts.onStderr?.(text);\n this.hooks.onStderr?.(text);\n });\n\n if (opts.tty) {\n stdout.isTTY = true;\n stderr.isTTY = true;\n stdout.columns = opts.columns ?? 80;\n stdout.rows = opts.rows ?? 24;\n }\n\n const stdin: InputStream =\n opts.stdin === undefined\n ? new NullInput()\n : typeof opts.stdin === \"string\" || opts.stdin instanceof Uint8Array\n ? Pipe.from(opts.stdin)\n : opts.stdin;\n\n this.shell.history.push(command);\n\n let timer: ReturnType<typeof setTimeout> | undefined;\n if (opts.timeoutMs !== undefined) {\n timer = setTimeout(() => this.proc.deliver(\"SIGKILL\"), opts.timeoutMs);\n }\n\n let exitCode: number;\n try {\n exitCode = await this.shell.execute(command, { stdin, stdout, stderr });\n } finally {\n if (timer) clearTimeout(timer);\n }\n\n return { exitCode, stdout: stdout.text(), stderr: stderr.text(), output: combined.join(\"\") };\n }\n\n /** Stream a long-running command; resolves when it exits. */\n async stream(\n command: string,\n handlers: { onStdout?: (chunk: string) => void; onStderr?: (chunk: string) => void } = {},\n ): Promise<number> {\n const result = await this.run(command, handlers);\n return result.exitCode;\n }\n\n /** Feed the session an arbitrary output stream, for terminal integration. */\n async pipeTo(command: string, stdout: OutputStream, stderr: OutputStream, stdin?: InputStream): Promise<number> {\n return this.shell.execute(command, { stdin: stdin ?? new NullInput(), stdout, stderr });\n }\n\n /** True when the last command asked the shell to exit. */\n get isExiting(): boolean {\n return this.shell.isExiting;\n }\n\n close(): void {\n if (this.closed) return;\n this.closed = true;\n this.proc.exit(0);\n this.kernel.procs.remove(this.proc.pid);\n }\n}\n","/**\n * An interactive terminal on top of a `Session`.\n *\n * Deliberately transport-agnostic: feed it keystrokes with `input()` and it\n * calls `write()` with what should appear on screen. That works equally well\n * for a real TTY (the `sandboxedjs` CLI) and for xterm.js in a browser app.\n *\n * Provides line editing, history, tab completion over commands and paths,\n * multi-line continuation for unfinished commands, and the usual control keys.\n */\n\nimport type { Session } from \"./session.js\";\nimport { Shell } from \"../shell/interpreter.js\";\nimport { CallbackSink, Pipe } from \"../fs/streams.js\";\nimport * as P from \"../fs/path.js\";\n\nexport interface TerminalOptions {\n /** Called with text to display. */\n write(data: string): void;\n columns?: number;\n rows?: number;\n /** Overrides `$PS1` when provided. */\n prompt?: (session: Session) => string;\n /** Print `/etc/motd` when the terminal starts. Default true. */\n motd?: boolean;\n /** Invoked after the shell exits. */\n onExit?: (code: number) => void;\n}\n\nconst CTRL_A = \"\\x01\";\nconst CTRL_C = \"\\x03\";\nconst CTRL_D = \"\\x04\";\nconst CTRL_E = \"\\x05\";\nconst CTRL_K = \"\\x0b\";\nconst CTRL_L = \"\\x0c\";\nconst CTRL_U = \"\\x15\";\nconst CTRL_W = \"\\x17\";\n\nexport class Terminal {\n private buffer = \"\";\n private cursor = 0;\n private pending = \"\";\n private historyIndex = -1;\n private savedLine = \"\";\n private running = false;\n private closed = false;\n private escapeBuffer = \"\";\n private currentStdin: Pipe | null = null;\n private exitCode = 0;\n\n columns: number;\n rows: number;\n\n constructor(\n private readonly session: Session,\n private readonly opts: TerminalOptions,\n ) {\n this.columns = opts.columns ?? 80;\n this.rows = opts.rows ?? 24;\n }\n\n /** Print the banner and the first prompt. */\n start(): void {\n if (this.opts.motd !== false) {\n try {\n this.write(this.session.shell.kernel.vfs.readText(\"/etc/motd\").replace(/\\n/g, \"\\r\\n\"));\n } catch {\n /* no motd */\n }\n }\n this.writePrompt();\n }\n\n resize(columns: number, rows: number): void {\n this.columns = columns;\n this.rows = rows;\n this.session.shell.vars.set(\"COLUMNS\", String(columns));\n this.session.shell.vars.set(\"LINES\", String(rows));\n }\n\n /** Feed raw keystrokes. */\n input(data: string): void {\n if (this.closed) return;\n for (const ch of data) this.key(ch);\n }\n\n close(): void {\n if (this.closed) return;\n this.closed = true;\n this.session.close();\n this.opts.onExit?.(this.exitCode);\n }\n\n get isClosed(): boolean {\n return this.closed;\n }\n\n // ── rendering ─────────────────────────────────────────────────────────────\n\n private write(text: string): void {\n this.opts.write(text);\n }\n\n private promptText(): string {\n if (this.opts.prompt) return this.opts.prompt(this.session);\n const ps = this.pending === \"\" ? (this.session.shell.vars.get(\"PS1\") ?? \"\\\\u@\\\\h:\\\\w\\\\$ \") : (this.session.shell.vars.get(\"PS2\") ?? \"> \");\n return expandPrompt(ps, this.session);\n }\n\n private writePrompt(): void {\n this.write(\"\\r\\n\".slice(0, 0) + this.promptText());\n }\n\n /** Repaint the current line after an edit. */\n private redraw(): void {\n const prompt = this.promptText();\n this.write(\"\\r\\x1b[2K\" + prompt + this.buffer);\n const back = this.buffer.length - this.cursor;\n if (back > 0) this.write(`\\x1b[${back}D`);\n }\n\n // ── key handling ──────────────────────────────────────────────────────────\n\n private key(ch: string): void {\n // A command is running: keystrokes go to its stdin.\n if (this.running) {\n if (ch === CTRL_C) {\n this.session.proc.deliver(\"SIGINT\");\n this.write(\"^C\\r\\n\");\n return;\n }\n if (ch === CTRL_D) {\n this.currentStdin?.end();\n return;\n }\n this.write(ch === \"\\r\" ? \"\\r\\n\" : ch);\n this.currentStdin?.write(ch === \"\\r\" ? \"\\n\" : ch);\n return;\n }\n\n if (this.escapeBuffer !== \"\") {\n this.escapeBuffer += ch;\n this.handleEscape();\n return;\n }\n\n switch (ch) {\n case \"\\x1b\":\n this.escapeBuffer = ch;\n return;\n case \"\\r\":\n case \"\\n\":\n this.submit();\n return;\n case \"\\x7f\":\n case \"\\b\":\n if (this.cursor > 0) {\n this.buffer = this.buffer.slice(0, this.cursor - 1) + this.buffer.slice(this.cursor);\n this.cursor--;\n this.redraw();\n }\n return;\n case \"\\t\":\n this.complete();\n return;\n case CTRL_C:\n this.write(\"^C\\r\\n\");\n this.buffer = \"\";\n this.pending = \"\";\n this.cursor = 0;\n this.historyIndex = -1;\n this.writePrompt();\n return;\n case CTRL_D:\n if (this.buffer === \"\") {\n this.write(\"exit\\r\\n\");\n this.close();\n return;\n }\n return;\n case CTRL_A:\n this.cursor = 0;\n this.redraw();\n return;\n case CTRL_E:\n this.cursor = this.buffer.length;\n this.redraw();\n return;\n case CTRL_U:\n this.buffer = this.buffer.slice(this.cursor);\n this.cursor = 0;\n this.redraw();\n return;\n case CTRL_K:\n this.buffer = this.buffer.slice(0, this.cursor);\n this.redraw();\n return;\n case CTRL_W: {\n const left = this.buffer.slice(0, this.cursor).replace(/\\S+\\s*$/, \"\");\n this.buffer = left + this.buffer.slice(this.cursor);\n this.cursor = left.length;\n this.redraw();\n return;\n }\n case CTRL_L:\n this.write(\"\\x1b[H\\x1b[2J\\x1b[3J\");\n this.redraw();\n return;\n default:\n break;\n }\n\n if (ch < \" \" && ch !== \"\\t\") return;\n this.buffer = this.buffer.slice(0, this.cursor) + ch + this.buffer.slice(this.cursor);\n this.cursor++;\n if (this.cursor === this.buffer.length) this.write(ch);\n else this.redraw();\n }\n\n private handleEscape(): void {\n const seq = this.escapeBuffer;\n if (seq === \"\\x1b[\" || seq === \"\\x1b\" || /^\\x1b\\[\\d*$/.test(seq)) return; // incomplete\n this.escapeBuffer = \"\";\n\n switch (seq) {\n case \"\\x1b[A\":\n this.recallHistory(-1);\n return;\n case \"\\x1b[B\":\n this.recallHistory(1);\n return;\n case \"\\x1b[C\":\n if (this.cursor < this.buffer.length) {\n this.cursor++;\n this.write(\"\\x1b[C\");\n }\n return;\n case \"\\x1b[D\":\n if (this.cursor > 0) {\n this.cursor--;\n this.write(\"\\x1b[D\");\n }\n return;\n case \"\\x1b[H\":\n case \"\\x1b[1~\":\n this.cursor = 0;\n this.redraw();\n return;\n case \"\\x1b[F\":\n case \"\\x1b[4~\":\n this.cursor = this.buffer.length;\n this.redraw();\n return;\n case \"\\x1b[3~\":\n if (this.cursor < this.buffer.length) {\n this.buffer = this.buffer.slice(0, this.cursor) + this.buffer.slice(this.cursor + 1);\n this.redraw();\n }\n return;\n case \"\\x1bb\": {\n const left = this.buffer.slice(0, this.cursor).replace(/\\S+\\s*$/, \"\");\n this.cursor = left.length;\n this.redraw();\n return;\n }\n case \"\\x1bf\": {\n const rest = /^\\s*\\S+/.exec(this.buffer.slice(this.cursor));\n this.cursor += rest ? rest[0].length : 0;\n this.redraw();\n return;\n }\n default:\n return;\n }\n }\n\n private recallHistory(direction: number): void {\n const history = this.session.history;\n if (history.length === 0) return;\n if (this.historyIndex === -1) {\n if (direction > 0) return;\n this.savedLine = this.buffer;\n this.historyIndex = history.length;\n }\n const next = this.historyIndex + direction;\n if (next < 0) return;\n if (next >= history.length) {\n this.historyIndex = -1;\n this.buffer = this.savedLine;\n } else {\n this.historyIndex = next;\n this.buffer = history[next]!;\n }\n this.cursor = this.buffer.length;\n this.redraw();\n }\n\n // ── completion ────────────────────────────────────────────────────────────\n\n private complete(): void {\n const left = this.buffer.slice(0, this.cursor);\n const match = /(\\S*)$/.exec(left);\n const word = match?.[1] ?? \"\";\n const isFirstWord = left.slice(0, left.length - word.length).trim() === \"\";\n\n const candidates = isFirstWord && !word.includes(\"/\") ? this.completeCommand(word) : this.completePath(word);\n if (candidates.length === 0) return;\n\n if (candidates.length === 1) {\n const completion = candidates[0]!;\n const suffix = completion.slice(word.length);\n this.buffer = this.buffer.slice(0, this.cursor) + suffix + this.buffer.slice(this.cursor);\n this.cursor += suffix.length;\n this.redraw();\n return;\n }\n\n const common = longestCommonPrefix(candidates);\n if (common.length > word.length) {\n const suffix = common.slice(word.length);\n this.buffer = this.buffer.slice(0, this.cursor) + suffix + this.buffer.slice(this.cursor);\n this.cursor += suffix.length;\n this.redraw();\n return;\n }\n\n this.write(\"\\r\\n\" + formatColumns(candidates, this.columns) + \"\\r\\n\");\n this.redraw();\n }\n\n private completeCommand(word: string): string[] {\n const shell = this.session.shell;\n const names = new Set<string>([\n ...shell.kernel.executableNames(shell.vars.environment(), shell.cred),\n ...shell.functions.keys(),\n ...shell.aliases.keys(),\n ]);\n for (const name of [\"cd\", \"exit\", \"export\", \"alias\", \"set\", \"unset\", \"source\", \"help\"]) names.add(name);\n return [...names].filter((n) => n.startsWith(word)).sort();\n }\n\n private completePath(word: string): string[] {\n const shell = this.session.shell;\n const slash = word.lastIndexOf(\"/\");\n const dirPart = slash < 0 ? \"\" : word.slice(0, slash + 1);\n const namePart = slash < 0 ? word : word.slice(slash + 1);\n const dir = P.resolve(shell.cwd, dirPart === \"\" ? \".\" : dirPart);\n\n let names: string[];\n try {\n names = shell.kernel.vfs.readdir(dir, shell.cred);\n } catch {\n return [];\n }\n return names\n .filter((n) => n.startsWith(namePart) && (namePart.startsWith(\".\") || !n.startsWith(\".\")))\n .map((n) => {\n let isDir = false;\n try {\n isDir = shell.kernel.vfs.stat(P.join(dir, n), { cred: shell.cred }).isDirectory();\n } catch {\n /* ignore */\n }\n return dirPart + n + (isDir ? \"/\" : \"\");\n })\n .sort();\n }\n\n // ── execution ─────────────────────────────────────────────────────────────\n\n private submit(): void {\n this.write(\"\\r\\n\");\n const line = this.buffer;\n this.buffer = \"\";\n this.cursor = 0;\n this.historyIndex = -1;\n\n const source = this.pending === \"\" ? line : this.pending + \"\\n\" + line;\n\n if (source.trim() === \"\") {\n this.pending = \"\";\n this.writePrompt();\n return;\n }\n\n if (Shell.isIncomplete(source)) {\n this.pending = source;\n this.writePrompt();\n return;\n }\n\n this.pending = \"\";\n void this.execute(source);\n }\n\n private async execute(source: string): Promise<void> {\n this.running = true;\n const stdin = new Pipe();\n stdin.isTTY = true;\n stdin.interactive = true;\n this.currentStdin = stdin;\n\n const sink = new CallbackSink((text) => this.write(text.replace(/(?<!\\r)\\n/g, \"\\r\\n\")), {\n isTTY: true,\n columns: this.columns,\n rows: this.rows,\n });\n\n this.session.history.push(source);\n try {\n this.exitCode = await this.session.shell.execute(source, { stdin, stdout: sink, stderr: sink });\n } catch (e) {\n this.write(`sh: ${e instanceof Error ? e.message : String(e)}\\r\\n`);\n this.exitCode = 1;\n } finally {\n this.running = false;\n this.currentStdin = null;\n stdin.close();\n }\n\n if (this.session.shell.isExiting) {\n this.close();\n return;\n }\n this.writePrompt();\n }\n}\n\n/** Expand a `PS1`-style prompt string. */\nexport function expandPrompt(format: string, session: Session): string {\n const shell = session.shell;\n const home = shell.vars.get(\"HOME\") ?? \"/root\";\n const cwd = shell.cwd;\n const user = shell.kernel.users.nameForUid(shell.cred.uid);\n const now = new Date(shell.kernel.now());\n\n return format.replace(/\\\\(.)/g, (_, ch: string) => {\n switch (ch) {\n case \"u\":\n return user;\n case \"h\":\n return shell.kernel.hostname.split(\".\")[0]!;\n case \"H\":\n return shell.kernel.hostname;\n case \"w\":\n return cwd === home ? \"~\" : cwd.startsWith(home + \"/\") ? \"~\" + cwd.slice(home.length) : cwd;\n case \"W\":\n return cwd === \"/\" ? \"/\" : P.basename(cwd);\n case \"$\":\n return shell.cred.uid === 0 ? \"#\" : \"$\";\n case \"n\":\n return \"\\r\\n\";\n case \"s\":\n return \"sh\";\n case \"t\":\n return now.toISOString().slice(11, 19);\n case \"T\":\n return now.toISOString().slice(11, 19);\n case \"A\":\n return now.toISOString().slice(11, 16);\n case \"d\":\n return now.toDateString();\n case \"e\":\n return \"\\x1b\";\n case \"a\":\n return \"\\x07\";\n case \"\\\\\":\n return \"\\\\\";\n case \"[\":\n case \"]\":\n return \"\";\n default:\n return \"\\\\\" + ch;\n }\n });\n}\n\nfunction longestCommonPrefix(items: string[]): string {\n if (items.length === 0) return \"\";\n let prefix = items[0]!;\n for (const item of items.slice(1)) {\n let i = 0;\n while (i < prefix.length && i < item.length && prefix[i] === item[i]) i++;\n prefix = prefix.slice(0, i);\n if (prefix === \"\") break;\n }\n return prefix;\n}\n\nfunction formatColumns(items: string[], width: number): string {\n const longest = Math.max(...items.map((i) => i.length)) + 2;\n const columns = Math.max(1, Math.floor(width / longest));\n const rows = Math.ceil(items.length / columns);\n const lines: string[] = [];\n for (let r = 0; r < rows; r++) {\n let line = \"\";\n for (let c = 0; c < columns; c++) {\n const item = items[c * rows + r];\n if (item !== undefined) line += item.padEnd(longest);\n }\n lines.push(line.trimEnd());\n }\n return lines.join(\"\\r\\n\");\n}\n","/**\n * sandboxedjs — a Linux-like container that runs entirely inside Node.js.\n *\n * ```ts\n * import { createContainer } from \"sandboxedjs\";\n *\n * const box = await createContainer({\n * files: { \"/app/server.js\": \"require('http').createServer(...).listen(3000)\" },\n * });\n *\n * await box.exec(\"ls -la /app\");\n * await box.exec(\"python3 -c 'print(sum(range(101)))'\");\n * box.spawn(\"node /app/server.js\");\n * await box.waitForPort(3000);\n * const res = await box.request(3000, { path: \"/\" });\n * ```\n */\n\nexport { Container, createContainer } from \"./container/container.js\";\nexport type {\n ContainerOptions,\n ExecOptions,\n ExecResult,\n SpawnHandle,\n HttpResponse,\n} from \"./container/container.js\";\nexport { Session } from \"./container/session.js\";\nexport { Terminal, expandPrompt } from \"./container/terminal.js\";\nexport type { TerminalOptions } from \"./container/terminal.js\";\nexport type { SessionInit, SessionRunOptions, SessionResult } from \"./container/session.js\";\nexport { ContainerFs } from \"./container/fs.js\";\n\n// ── kernel ──────────────────────────────────────────────────────────────────\nexport { Kernel } from \"./kernel/kernel.js\";\nexport type { KernelOptions, RunOptions, RunResult, ResolvedExecutable, MountEntry } from \"./kernel/kernel.js\";\nexport { Process, ProcessTable, resetPidCounter } from \"./kernel/process.js\";\nexport type { ProcessState, ProcessKind, ProcessOptions, Env } from \"./kernel/process.js\";\nexport { CommandRegistry, defineCommand, createContext } from \"./kernel/command.js\";\nexport type { Command, ExecContext, ContextInit } from \"./kernel/command.js\";\nexport { UserDatabase } from \"./kernel/users.js\";\nexport type { PasswdEntry, GroupEntry } from \"./kernel/users.js\";\nexport { SIGNALS, SIGNAL_NAMES, normalizeSignal, exitCodeForSignal } from \"./kernel/signals.js\";\nexport { unameInfo, KERNEL_RELEASE, KERNEL_NAME, OS_RELEASE } from \"./kernel/uname.js\";\n\n// ── filesystem ──────────────────────────────────────────────────────────────\nexport { Vfs, ROOT_CRED, makeCred } from \"./fs/vfs.js\";\nexport type { Cred, VirtualNode, VirtualProvider, WriteOptions } from \"./fs/vfs.js\";\nexport { Stats } from \"./fs/stat.js\";\nexport type { DirEntry } from \"./fs/stat.js\";\nexport { SysError, ERRNO, strerror, isSysError } from \"./fs/errno.js\";\nexport type { ErrnoCode } from \"./fs/errno.js\";\nexport * as posixPath from \"./fs/path.js\";\nexport { formatMode, applyChmod, octalMode, parseUmask } from \"./fs/mode.js\";\nexport { glob, fnmatch, globToRegex, hasMagic } from \"./fs/glob.js\";\nexport {\n Pipe,\n BufferSink,\n CallbackSink,\n TeeOutput,\n NullInput,\n NullOutput,\n FileInput,\n FileOutput,\n captureStdio,\n} from \"./fs/streams.js\";\nexport type { InputStream, OutputStream, Stdio } from \"./fs/streams.js\";\n\n// ── shell ───────────────────────────────────────────────────────────────────\nexport { Shell, ShellExit } from \"./shell/interpreter.js\";\nexport type { ShellIO, ShellOptions, ShellInit, Job } from \"./shell/interpreter.js\";\nexport { parse as parseShell, ShellSyntaxError, IncompleteInputError } from \"./shell/parser.js\";\nexport { Lexer as ShellLexer } from \"./shell/lexer.js\";\nexport { Variables } from \"./shell/variables.js\";\nexport { evalArith, ArithError } from \"./shell/arith.js\";\nexport { expandWord, expandWords, braceExpand, shellQuote } from \"./shell/expand.js\";\nexport { getBuiltin, builtinNames, isBuiltinName } from \"./shell/builtins/index.js\";\n\n// ── userland ────────────────────────────────────────────────────────────────\nexport { allCommands, installUserland } from \"./bin/index.js\";\nexport { buildRootfs } from \"./image/rootfs.js\";\nexport type { RootfsOptions } from \"./image/rootfs.js\";\n\n// ── networking ──────────────────────────────────────────────────────────────\nexport { NetworkStack } from \"./net/stack.js\";\nexport type { NetworkOptions, NetInterface, ListeningPort } from \"./net/stack.js\";\n\n// ── runtimes ────────────────────────────────────────────────────────────────\nexport { NODE_VERSION } from \"./runtime/node.js\";\nexport { PYTHON_VERSION, isPythonAvailable } from \"./runtime/python.js\";\nexport { NPM_VERSION } from \"./pkg/index.js\";\n\nimport { createContainer } from \"./container/container.js\";\nexport default createContainer;\n"]}