{"version":3,"file":"child_process-CHq_g1tl.cjs","sources":["../src/shell/shell-parser.ts","../src/shell/shell-helpers.ts","../src/shell/commands/file-ops.ts","../src/shell/commands/directory.ts","../src/shell/commands/text-processing.ts","../src/shell/commands/search.ts","../src/shell/commands/shell-env.ts","../src/shell/shell-builtins.ts","../src/shell/shell-interpreter.ts","../src/shell/commands/npm.ts","../src/shell/commands/pnpm.ts","../src/shell/commands/yarn.ts","../src/shell/commands/bun.ts","../src/shell/commands/node.ts","../src/shell/commands/git.ts","../src/polyfills/child_process.ts"],"sourcesContent":["// Tokenizer + recursive-descent parser.\r\n// Converts a shell command string into an AST (ListNode).\r\n\r\nimport type {\r\n  Token,\r\n  TokenType,\r\n  ListNode,\r\n  ListEntry,\r\n  ListOperator,\r\n  PipelineNode,\r\n  CommandNode,\r\n  RedirectNode,\r\n} from \"./shell-types\";\r\nimport type { MemoryVolume } from \"../memory-volume\";\r\n\r\n/* ------------------------------------------------------------------ */\r\n/*  Variable & substitution expansion                                  */\r\n/* ------------------------------------------------------------------ */\r\n\r\n// Expand $VAR, ${VAR}, $?, $$, $0, and tilde.\r\n// Single-quote handling is the caller's job.\r\nexport function expandVariables(\r\n  raw: string,\r\n  env: Record<string, string>,\r\n  lastExit: number,\r\n): string {\r\n  let result = \"\";\r\n  let i = 0;\r\n\r\n  if (raw === \"~\" || raw.startsWith(\"~/\")) {\r\n    const home = env.HOME || \"/home/user\";\r\n    return home + raw.slice(1);\r\n  }\r\n\r\n  while (i < raw.length) {\r\n    if (raw[i] === \"\\\\\") {\r\n      i++;\r\n      if (i < raw.length) result += raw[i++];\r\n      continue;\r\n    }\r\n\r\n    if (raw[i] === \"$\") {\r\n      i++;\r\n      if (i >= raw.length) {\r\n        result += \"$\";\r\n        break;\r\n      }\r\n\r\n      if (raw[i] === \"?\") {\r\n        result += String(lastExit);\r\n        i++;\r\n        continue;\r\n      }\r\n      if (raw[i] === \"$\") {\r\n        result += \"1\"; // stub PID\r\n        i++;\r\n        continue;\r\n      }\r\n      if (raw[i] === \"0\") {\r\n        result += \"nodepod\";\r\n        i++;\r\n        continue;\r\n      }\r\n      if (raw[i] === \"#\") {\r\n        result += \"0\"; // $# stub\r\n        i++;\r\n        continue;\r\n      }\r\n\r\n      if (raw[i] === \"{\") {\r\n        i++;\r\n        let name = \"\";\r\n        while (i < raw.length && raw[i] !== \"}\" && raw[i] !== \":\" && raw[i] !== \"-\" && raw[i] !== \"=\") {\r\n          name += raw[i++];\r\n        }\r\n        let defaultVal = \"\";\r\n        let useDefault = false;\r\n        if (i < raw.length && (raw[i] === \":\" || raw[i] === \"-\")) {\r\n          useDefault = true;\r\n          if (raw[i] === \":\") i++;\r\n          if (i < raw.length && (raw[i] === \"-\" || raw[i] === \"=\")) i++;\r\n          while (i < raw.length && raw[i] !== \"}\") {\r\n            defaultVal += raw[i++];\r\n          }\r\n        }\r\n        if (i < raw.length && raw[i] === \"}\") i++;\r\n\r\n        const val = env[name];\r\n        if (val !== undefined && val !== \"\") {\r\n          result += val;\r\n        } else if (useDefault) {\r\n          result += defaultVal;\r\n        }\r\n        continue;\r\n      }\r\n\r\n      let name = \"\";\r\n      while (i < raw.length && /[a-zA-Z0-9_]/.test(raw[i])) {\r\n        name += raw[i++];\r\n      }\r\n      if (name) {\r\n        result += env[name] ?? \"\";\r\n      } else {\r\n        result += \"$\";\r\n      }\r\n      continue;\r\n    }\r\n\r\n    result += raw[i++];\r\n  }\r\n\r\n  return result;\r\n}\r\n\r\n/* ------------------------------------------------------------------ */\r\n/*  Glob expansion                                                     */\r\n/* ------------------------------------------------------------------ */\r\n\r\nexport function expandGlob(\r\n  pattern: string,\r\n  cwd: string,\r\n  volume: MemoryVolume,\r\n): string[] {\r\n  if (!pattern.includes(\"*\") && !pattern.includes(\"?\")) return [pattern];\r\n\r\n  const lastSlash = pattern.lastIndexOf(\"/\");\r\n  let dir: string;\r\n  let filePattern: string;\r\n\r\n  if (lastSlash === -1) {\r\n    dir = cwd;\r\n    filePattern = pattern;\r\n  } else {\r\n    dir = pattern.slice(0, lastSlash) || \"/\";\r\n    if (!dir.startsWith(\"/\")) dir = `${cwd}/${dir}`.replace(/\\/+/g, \"/\");\r\n    filePattern = pattern.slice(lastSlash + 1);\r\n  }\r\n\r\n  try {\r\n    const entries = volume.readdirSync(dir);\r\n    const regex = globToRegex(filePattern);\r\n    const matches = entries.filter((e) => regex.test(e));\r\n\r\n    if (matches.length === 0) return [pattern];\r\n\r\n    return matches.sort().map((m) =>\r\n      lastSlash === -1 ? m : `${dir}/${m}`.replace(/\\/+/g, \"/\"),\r\n    );\r\n  } catch {\r\n    return [pattern];\r\n  }\r\n}\r\n\r\nfunction globToRegex(pattern: string): RegExp {\r\n  let regex = \"^\";\r\n  for (const ch of pattern) {\r\n    if (ch === \"*\") regex += \".*\";\r\n    else if (ch === \"?\") regex += \".\";\r\n    else if (\".+^${}()|[]\\\\\".includes(ch)) regex += \"\\\\\" + ch;\r\n    else regex += ch;\r\n  }\r\n  regex += \"$\";\r\n  return new RegExp(regex);\r\n}\r\n\r\n/* ------------------------------------------------------------------ */\r\n/*  Tokenizer                                                          */\r\n/* ------------------------------------------------------------------ */\r\n\r\nexport function tokenize(\r\n  input: string,\r\n  env: Record<string, string>,\r\n  lastExit: number,\r\n): Token[] {\r\n  const tokens: Token[] = [];\r\n  let i = 0;\r\n\r\n  while (i < input.length) {\r\n    if (input[i] === \" \" || input[i] === \"\\t\") {\r\n      i++;\r\n      continue;\r\n    }\r\n\r\n    if (input[i] === \"\\n\") {\r\n      tokens.push({ type: \"newline\", value: \"\\n\" });\r\n      i++;\r\n      continue;\r\n    }\r\n\r\n    if (input[i] === \"#\") {\r\n      while (i < input.length && input[i] !== \"\\n\") i++;\r\n      continue;\r\n    }\r\n\r\n    if (input.slice(i, i + 4) === \"2>&1\") {\r\n      tokens.push({ type: \"redirect-2to1\", value: \"2>&1\" });\r\n      i += 4;\r\n      continue;\r\n    }\r\n\r\n    if (input[i] === \">\" && input[i + 1] === \">\") {\r\n      tokens.push({ type: \"redirect-app\", value: \">>\" });\r\n      i += 2;\r\n      continue;\r\n    }\r\n\r\n    if (input[i] === \">\") {\r\n      tokens.push({ type: \"redirect-out\", value: \">\" });\r\n      i++;\r\n      continue;\r\n    }\r\n\r\n    if (input[i] === \"<\") {\r\n      tokens.push({ type: \"redirect-in\", value: \"<\" });\r\n      i++;\r\n      continue;\r\n    }\r\n\r\n    if (input[i] === \"&\" && input[i + 1] === \"&\") {\r\n      tokens.push({ type: \"and\", value: \"&&\" });\r\n      i += 2;\r\n      continue;\r\n    }\r\n\r\n    if (input[i] === \"|\" && input[i + 1] === \"|\") {\r\n      tokens.push({ type: \"or\", value: \"||\" });\r\n      i += 2;\r\n      continue;\r\n    }\r\n\r\n    if (input[i] === \"|\") {\r\n      tokens.push({ type: \"pipe\", value: \"|\" });\r\n      i++;\r\n      continue;\r\n    }\r\n\r\n    if (input[i] === \";\") {\r\n      tokens.push({ type: \"semi\", value: \";\" });\r\n      i++;\r\n      continue;\r\n    }\r\n\r\n    let word = \"\";\r\n    while (i < input.length) {\r\n      const ch = input[i];\r\n\r\n      if (ch === \" \" || ch === \"\\t\" || ch === \"\\n\") break;\r\n      if (ch === \"|\" || ch === \"&\" || ch === \";\" || ch === \">\" || ch === \"<\") break;\r\n      if (ch === \"2\" && input.slice(i, i + 4) === \"2>&1\") break;\r\n\r\n      if (ch === \"\\\\\") {\r\n        i++;\r\n        if (i < input.length) word += input[i++];\r\n        continue;\r\n      }\r\n\r\n      // single quotes: no expansion\r\n      if (ch === \"'\") {\r\n        i++;\r\n        while (i < input.length && input[i] !== \"'\") {\r\n          word += input[i++];\r\n        }\r\n        if (i < input.length) i++;\r\n        continue;\r\n      }\r\n\r\n      // double quotes: expand variables\r\n      if (ch === '\"') {\r\n        i++;\r\n        let dqContent = \"\";\r\n        while (i < input.length && input[i] !== '\"') {\r\n          if (input[i] === \"\\\\\" && i + 1 < input.length) {\r\n            const next = input[i + 1];\r\n            if (next === '\"' || next === \"\\\\\" || next === \"$\" || next === \"`\") {\r\n              dqContent += next;\r\n              i += 2;\r\n              continue;\r\n            }\r\n          }\r\n          dqContent += input[i++];\r\n        }\r\n        if (i < input.length) i++;\r\n        word += expandVariables(dqContent, env, lastExit);\r\n        continue;\r\n      }\r\n\r\n      word += ch;\r\n      i++;\r\n    }\r\n\r\n    if (word.length > 0) {\r\n      const expanded = expandVariables(word, env, lastExit);\r\n      tokens.push({ type: \"word\", value: expanded });\r\n    }\r\n  }\r\n\r\n  tokens.push({ type: \"eof\", value: \"\" });\r\n  return tokens;\r\n}\r\n\r\n/* ------------------------------------------------------------------ */\r\n/*  Recursive-descent parser                                           */\r\n/* ------------------------------------------------------------------ */\r\n\r\nclass Parser {\r\n  private tokens: Token[];\r\n  private pos = 0;\r\n\r\n  constructor(tokens: Token[]) {\r\n    this.tokens = tokens;\r\n  }\r\n\r\n  private peek(): Token {\r\n    return this.tokens[this.pos] ?? { type: \"eof\", value: \"\" };\r\n  }\r\n\r\n  private advance(): Token {\r\n    return this.tokens[this.pos++] ?? { type: \"eof\", value: \"\" };\r\n  }\r\n\r\n  private skipNewlines(): void {\r\n    while (this.peek().type === \"newline\") this.advance();\r\n  }\r\n\r\n  parseList(): ListNode {\r\n    this.skipNewlines();\r\n    const entries: ListEntry[] = [];\r\n\r\n    while (this.peek().type !== \"eof\") {\r\n      this.skipNewlines();\r\n      if (this.peek().type === \"eof\") break;\r\n\r\n      const pipeline = this.parsePipeline();\r\n      const op = this.peek();\r\n\r\n      if (op.type === \"and\" || op.type === \"or\" || op.type === \"semi\") {\r\n        this.advance();\r\n        const operator: ListOperator =\r\n          op.type === \"and\" ? \"&&\" : op.type === \"or\" ? \"||\" : \";\";\r\n        entries.push({ pipeline, next: operator });\r\n      } else {\r\n        entries.push({ pipeline });\r\n        break;\r\n      }\r\n    }\r\n\r\n    return { kind: \"list\", entries };\r\n  }\r\n\r\n  private parsePipeline(): PipelineNode {\r\n    const commands: CommandNode[] = [];\r\n    commands.push(this.parseCommand());\r\n\r\n    while (this.peek().type === \"pipe\") {\r\n      this.advance();\r\n      commands.push(this.parseCommand());\r\n    }\r\n\r\n    return { kind: \"pipeline\", commands };\r\n  }\r\n\r\n  private parseCommand(): CommandNode {\r\n    const args: string[] = [];\r\n    const redirects: RedirectNode[] = [];\r\n    const assignments: Record<string, string> = {};\r\n\r\n    // leading KEY=value assignments (only before any regular args)\r\n    while (this.peek().type === \"word\") {\r\n      const val = this.peek().value;\r\n      const eqIdx = val.indexOf(\"=\");\r\n      if (eqIdx > 0 && args.length === 0 && /^[a-zA-Z_]/.test(val)) {\r\n        this.advance();\r\n        assignments[val.slice(0, eqIdx)] = val.slice(eqIdx + 1);\r\n      } else {\r\n        break;\r\n      }\r\n    }\r\n\r\n    while (true) {\r\n      const tok = this.peek();\r\n\r\n      if (tok.type === \"word\") {\r\n        this.advance();\r\n        args.push(tok.value);\r\n        continue;\r\n      }\r\n\r\n      if (tok.type === \"redirect-out\" || tok.type === \"redirect-app\" || tok.type === \"redirect-in\") {\r\n        this.advance();\r\n        const target = this.peek();\r\n        if (target.type === \"word\") {\r\n          this.advance();\r\n          const rtype =\r\n            tok.type === \"redirect-out\" ? \"write\" as const :\r\n            tok.type === \"redirect-app\" ? \"append\" as const :\r\n            \"read\" as const;\r\n          redirects.push({ type: rtype, target: target.value });\r\n        }\r\n        continue;\r\n      }\r\n\r\n      if (tok.type === \"redirect-2to1\") {\r\n        this.advance();\r\n        redirects.push({ type: \"stderr-to-stdout\", target: \"\" });\r\n        continue;\r\n      }\r\n\r\n      break;\r\n    }\r\n\r\n    return { kind: \"command\", args, redirects, assignments };\r\n  }\r\n}\r\n\r\n/* ------------------------------------------------------------------ */\r\n/*  Public API                                                         */\r\n/* ------------------------------------------------------------------ */\r\n\r\n// Glob expansion happens in the interpreter (needs volume access),\r\n// but variable expansion and quoting are done here at tokenize time.\r\nexport function parse(\r\n  input: string,\r\n  env: Record<string, string>,\r\n  lastExit: number = 0,\r\n): ListNode {\r\n  const tokens = tokenize(input, env, lastExit);\r\n  const parser = new Parser(tokens);\r\n  return parser.parseList();\r\n}\r\n","// Shared utilities for shell builtins: colors, arg parsing, path helpers, result builders.\r\n\r\nimport type { ShellResult } from \"./shell-types\";\r\nimport * as pathModule from \"../polyfills/path\";\r\n\r\n/* ------------------------------------------------------------------ */\r\n/*  ANSI color helpers                                                 */\r\n/* ------------------------------------------------------------------ */\r\n\r\nexport const RESET = \"\\x1b[0m\";\r\nexport const DIM = \"\\x1b[2m\";\r\nexport const GREEN = \"\\x1b[32m\";\r\nexport const MAGENTA = \"\\x1b[35m\";\r\nexport const CYAN = \"\\x1b[36m\";\r\nexport const BOLD_BLUE = \"\\x1b[1;34m\";\r\nexport const BOLD_RED = \"\\x1b[1;31m\";\r\n\r\n/* ------------------------------------------------------------------ */\r\n/*  ShellResult builders                                               */\r\n/* ------------------------------------------------------------------ */\r\n\r\nexport const ok = (stdout = \"\"): ShellResult => ({\r\n  stdout,\r\n  stderr: \"\",\r\n  exitCode: 0,\r\n});\r\n\r\nexport const fail = (stderr: string, code = 1): ShellResult => ({\r\n  stdout: \"\",\r\n  stderr,\r\n  exitCode: code,\r\n});\r\n\r\nexport const EXIT_OK: ShellResult = { stdout: \"\", stderr: \"\", exitCode: 0 };\r\nexport const EXIT_FAIL: ShellResult = { stdout: \"\", stderr: \"\", exitCode: 1 };\r\n\r\n/* ------------------------------------------------------------------ */\r\n/*  Date / time constants                                              */\r\n/* ------------------------------------------------------------------ */\r\n\r\nexport const MONTHS_SHORT = [\r\n  \"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\",\r\n  \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\",\r\n] as const;\r\n\r\nexport const MONTHS_LONG = [\r\n  \"January\", \"February\", \"March\", \"April\", \"May\", \"June\",\r\n  \"July\", \"August\", \"September\", \"October\", \"November\", \"December\",\r\n] as const;\r\n\r\nexport const DAYS_SHORT = [\r\n  \"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\",\r\n] as const;\r\n\r\nexport const DAYS_LONG = [\r\n  \"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\",\r\n  \"Thursday\", \"Friday\", \"Saturday\",\r\n] as const;\r\n\r\n/* ------------------------------------------------------------------ */\r\n/*  Path resolution                                                    */\r\n/* ------------------------------------------------------------------ */\r\n\r\nexport function resolvePath(p: string, cwd: string): string {\r\n  if (p.startsWith(\"/\")) return pathModule.normalize(p);\r\n  return pathModule.normalize(`${cwd}/${p}`);\r\n}\r\n\r\nexport { pathModule };\r\n\r\n/* ------------------------------------------------------------------ */\r\n/*  Argument parsing                                                   */\r\n/* ------------------------------------------------------------------ */\r\n\r\nexport function parseArgs(\r\n  args: string[],\r\n  knownFlags: string[],\r\n  knownOpts: string[] = [],\r\n): { flags: Set<string>; opts: Record<string, string>; positional: string[] } {\r\n  const flags = new Set<string>();\r\n  const opts: Record<string, string> = {};\r\n  const positional: string[] = [];\r\n  for (let i = 0; i < args.length; i++) {\r\n    const a = args[i];\r\n    if (a === \"--\") {\r\n      positional.push(...args.slice(i + 1));\r\n      break;\r\n    }\r\n    if (a.startsWith(\"--\")) {\r\n      const eq = a.indexOf(\"=\");\r\n      if (eq > 0) {\r\n        opts[a.slice(2, eq)] = a.slice(eq + 1);\r\n      } else {\r\n        flags.add(a.slice(2));\r\n      }\r\n    } else if (a.startsWith(\"-\") && a.length > 1 && !/^-\\d/.test(a)) {\r\n      for (let j = 1; j < a.length; j++) {\r\n        const ch = a[j];\r\n        if (knownOpts.includes(ch) && j + 1 < a.length) {\r\n          opts[ch] = a.slice(j + 1);\r\n          break;\r\n        } else if (knownOpts.includes(ch) && i + 1 < args.length) {\r\n          opts[ch] = args[++i];\r\n          break;\r\n        } else if (knownFlags.includes(ch)) {\r\n          flags.add(ch);\r\n        }\r\n      }\r\n    } else {\r\n      positional.push(a);\r\n    }\r\n  }\r\n  return { flags, opts, positional };\r\n}\r\n\r\n/* ------------------------------------------------------------------ */\r\n/*  String processing                                                  */\r\n/* ------------------------------------------------------------------ */\r\n\r\n// Expand POSIX character classes like [:upper:], [:lower:], etc. for `tr`\r\nexport function expandCharClass(s: string): string {\r\n  return s\r\n    .replace(/\\[:upper:\\]/g, \"ABCDEFGHIJKLMNOPQRSTUVWXYZ\")\r\n    .replace(/\\[:lower:\\]/g, \"abcdefghijklmnopqrstuvwxyz\")\r\n    .replace(\r\n      /\\[:alpha:\\]/g,\r\n      \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz\",\r\n    )\r\n    .replace(/\\[:digit:\\]/g, \"0123456789\")\r\n    .replace(\r\n      /\\[:alnum:\\]/g,\r\n      \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\",\r\n    )\r\n    .replace(/\\[:space:\\]/g, \" \\t\\n\\r\\x0b\\x0c\")\r\n    .replace(/\\[:blank:\\]/g, \" \\t\")\r\n    .replace(/\\[:punct:\\]/g, \"!\\\"#$%&'()*+,-./:;<=>?@[\\\\]^_`{|}~\")\r\n    .replace(\r\n      /\\[:print:\\]/g,\r\n      (() => {\r\n        let r = \"\";\r\n        for (let i = 32; i < 127; i++) r += String.fromCharCode(i);\r\n        return r;\r\n      })(),\r\n    )\r\n    .replace(\r\n      /\\[:graph:\\]/g,\r\n      (() => {\r\n        let r = \"\";\r\n        for (let i = 33; i < 127; i++) r += String.fromCharCode(i);\r\n        return r;\r\n      })(),\r\n    )\r\n    .replace(\r\n      /\\[:cntrl:\\]/g,\r\n      (() => {\r\n        let r = \"\";\r\n        for (let i = 0; i < 32; i++) r += String.fromCharCode(i);\r\n        r += String.fromCharCode(127);\r\n        return r;\r\n      })(),\r\n    );\r\n}\r\n\r\nexport function processEscapes(s: string): string {\r\n  let out = \"\";\r\n  for (let i = 0; i < s.length; i++) {\r\n    if (s[i] === \"\\\\\" && i + 1 < s.length) {\r\n      const c = s[i + 1];\r\n      if (c === \"n\") {\r\n        out += \"\\n\";\r\n        i++;\r\n        continue;\r\n      }\r\n      if (c === \"t\") {\r\n        out += \"\\t\";\r\n        i++;\r\n        continue;\r\n      }\r\n      if (c === \"r\") {\r\n        out += \"\\r\";\r\n        i++;\r\n        continue;\r\n      }\r\n      if (c === \"a\") {\r\n        out += \"\\x07\";\r\n        i++;\r\n        continue;\r\n      }\r\n      if (c === \"b\") {\r\n        out += \"\\b\";\r\n        i++;\r\n        continue;\r\n      }\r\n      if (c === \"f\") {\r\n        out += \"\\f\";\r\n        i++;\r\n        continue;\r\n      }\r\n      if (c === \"v\") {\r\n        out += \"\\x0b\";\r\n        i++;\r\n        continue;\r\n      }\r\n      if (c === \"\\\\\") {\r\n        out += \"\\\\\";\r\n        i++;\r\n        continue;\r\n      }\r\n      if (c === \"0\") {\r\n        let oct = \"\";\r\n        let j = i + 2;\r\n        while (j < s.length && j < i + 5 && s[j] >= \"0\" && s[j] <= \"7\")\r\n          oct += s[j++];\r\n        out += String.fromCharCode(parseInt(oct || \"0\", 8));\r\n        i = j - 1;\r\n        continue;\r\n      }\r\n      if (c === \"x\") {\r\n        const hex = s.slice(i + 2, i + 4);\r\n        if (/^[0-9a-fA-F]{1,2}$/.test(hex)) {\r\n          out += String.fromCharCode(parseInt(hex, 16));\r\n          i += 1 + hex.length;\r\n          continue;\r\n        }\r\n      }\r\n      out += s[i];\r\n    } else {\r\n      out += s[i];\r\n    }\r\n  }\r\n  return out;\r\n}\r\n\r\nexport function humanSize(bytes: number): string {\r\n  if (bytes < 1024) return String(bytes);\r\n  const units = [\"K\", \"M\", \"G\", \"T\"];\r\n  let size = bytes;\r\n  for (const u of units) {\r\n    size /= 1024;\r\n    if (size < 1024 || u === \"T\") return size.toFixed(size < 10 ? 1 : 0) + u;\r\n  }\r\n  return String(bytes);\r\n}\r\n\r\nexport function globToRegex(pattern: string): string {\r\n  return pattern\r\n    .replace(/[.+^${}()|[\\]\\\\]/g, \"\\\\$&\")\r\n    .replace(/\\*/g, \".*\")\r\n    .replace(/\\?/g, \".\");\r\n}\r\n","import type { BuiltinFn, ShellContext } from \"../shell-types\";\r\nimport {\r\n  ok,\r\n  fail,\r\n  resolvePath,\r\n  parseArgs,\r\n  pathModule,\r\n} from \"../shell-helpers\";\r\n\r\n/* ------------------------------------------------------------------ */\r\n/*  Helpers                                                            */\r\n/* ------------------------------------------------------------------ */\r\n\r\nfunction formatCat(\r\n  content: string,\r\n  numberAll: boolean,\r\n  numberNonBlank: boolean,\r\n  squeeze: boolean,\r\n  showEnds: boolean,\r\n  showTabs: boolean,\r\n): string {\r\n  let lines = content.split(\"\\n\");\r\n  if (squeeze) {\r\n    const squeezed: string[] = [];\r\n    let prevBlank = false;\r\n    for (const line of lines) {\r\n      const blank = line.length === 0;\r\n      if (blank && prevBlank) continue;\r\n      squeezed.push(line);\r\n      prevBlank = blank;\r\n    }\r\n    lines = squeezed;\r\n  }\r\n  let lineNum = 1;\r\n  const result = lines.map((line, idx) => {\r\n    let l = line;\r\n    if (showTabs) l = l.replace(/\\t/g, \"^I\");\r\n    if (showEnds && idx < lines.length - 1) l += \"$\";\r\n    if (numberNonBlank) {\r\n      if (line.length > 0) l = `${String(lineNum++).padStart(6)}\\t${l}`;\r\n    } else if (numberAll) {\r\n      l = `${String(lineNum++).padStart(6)}\\t${l}`;\r\n    }\r\n    return l;\r\n  });\r\n  return result.join(\"\\n\");\r\n}\r\n\r\nfunction copyTree(ctx: ShellContext, src: string, dst: string): void {\r\n  ctx.volume.mkdirSync(dst, { recursive: true });\r\n  for (const name of ctx.volume.readdirSync(src)) {\r\n    const s = `${src}/${name}`;\r\n    const d = `${dst}/${name}`;\r\n    const st = ctx.volume.statSync(s);\r\n    if (st.isDirectory()) {\r\n      copyTree(ctx, s, d);\r\n    } else {\r\n      ctx.volume.writeFileSync(d, ctx.volume.readFileSync(s));\r\n    }\r\n  }\r\n}\r\n\r\nfunction removeTree(ctx: ShellContext, dir: string): void {\r\n  for (const name of ctx.volume.readdirSync(dir)) {\r\n    const full = `${dir}/${name}`;\r\n    const st = ctx.volume.statSync(full);\r\n    if (st.isDirectory()) removeTree(ctx, full);\r\n    else ctx.volume.unlinkSync(full);\r\n  }\r\n  ctx.volume.rmdirSync(dir);\r\n}\r\n\r\n/* ------------------------------------------------------------------ */\r\n/*  Commands                                                           */\r\n/* ------------------------------------------------------------------ */\r\n\r\nconst cat: BuiltinFn = (args, ctx, stdin) => {\r\n  const { flags, positional } = parseArgs(args, [\r\n    \"n\",\r\n    \"b\",\r\n    \"s\",\r\n    \"E\",\r\n    \"T\",\r\n    \"A\",\r\n    \"e\",\r\n    \"t\",\r\n    \"v\",\r\n  ]);\r\n  const numberAll = flags.has(\"n\") || flags.has(\"A\");\r\n  const numberNonBlank = flags.has(\"b\");\r\n  const squeeze = flags.has(\"s\");\r\n  const showEnds = flags.has(\"E\") || flags.has(\"A\") || flags.has(\"e\");\r\n  const showTabs = flags.has(\"T\") || flags.has(\"A\") || flags.has(\"t\");\r\n\r\n  if (positional.length === 0 && stdin !== undefined) {\r\n    return ok(\r\n      formatCat(stdin, numberAll, numberNonBlank, squeeze, showEnds, showTabs),\r\n    );\r\n  }\r\n  if (positional.length === 0) return fail(\"cat: missing operand\\n\");\r\n\r\n  let out = \"\";\r\n  for (const file of positional) {\r\n    if (file === \"-\" && stdin !== undefined) {\r\n      out += formatCat(\r\n        stdin,\r\n        numberAll,\r\n        numberNonBlank,\r\n        squeeze,\r\n        showEnds,\r\n        showTabs,\r\n      );\r\n      continue;\r\n    }\r\n    const p = resolvePath(file, ctx.cwd);\r\n    try {\r\n      const content = ctx.volume.readFileSync(p, \"utf8\");\r\n      out += formatCat(\r\n        content,\r\n        numberAll,\r\n        numberNonBlank,\r\n        squeeze,\r\n        showEnds,\r\n        showTabs,\r\n      );\r\n    } catch {\r\n      return fail(`cat: ${file}: No such file or directory\\n`);\r\n    }\r\n  }\r\n  return ok(out);\r\n};\r\n\r\nconst head: BuiltinFn = (args, ctx, stdin) => {\r\n  let n = 10;\r\n  let byteMode = false;\r\n  let bytes = 0;\r\n  const files: string[] = [];\r\n  for (let i = 0; i < args.length; i++) {\r\n    if (args[i] === \"-n\" && i + 1 < args.length) {\r\n      n = parseInt(args[++i], 10) || 10;\r\n    } else if (args[i] === \"-c\" && i + 1 < args.length) {\r\n      bytes = parseInt(args[++i], 10) || 0;\r\n      byteMode = true;\r\n    } else if (args[i].startsWith(\"-\") && /^\\d+$/.test(args[i].slice(1))) {\r\n      n = parseInt(args[i].slice(1), 10);\r\n    } else if (!args[i].startsWith(\"-\")) {\r\n      files.push(args[i]);\r\n    }\r\n  }\r\n\r\n  const doHead = (content: string) => {\r\n    if (byteMode) return content.slice(0, bytes);\r\n    return content.split(\"\\n\").slice(0, n).join(\"\\n\") + \"\\n\";\r\n  };\r\n\r\n  if (files.length === 0 && stdin !== undefined) return ok(doHead(stdin));\r\n  if (files.length === 0) return fail(\"head: missing operand\\n\");\r\n\r\n  let out = \"\";\r\n  for (const file of files) {\r\n    const p = resolvePath(file, ctx.cwd);\r\n    try {\r\n      const content = ctx.volume.readFileSync(p, \"utf8\");\r\n      if (files.length > 1) out += `==> ${file} <==\\n`;\r\n      out += doHead(content);\r\n    } catch {\r\n      return fail(`head: ${file}: No such file or directory\\n`);\r\n    }\r\n  }\r\n  return ok(out);\r\n};\r\n\r\nconst tail: BuiltinFn = (args, ctx, stdin) => {\r\n  let n = 10;\r\n  let byteMode = false;\r\n  let bytes = 0;\r\n  const files: string[] = [];\r\n  for (let i = 0; i < args.length; i++) {\r\n    if (args[i] === \"-n\" && i + 1 < args.length) {\r\n      n = parseInt(args[++i], 10) || 10;\r\n    } else if (args[i] === \"-c\" && i + 1 < args.length) {\r\n      bytes = parseInt(args[++i], 10) || 0;\r\n      byteMode = true;\r\n    } else if (args[i] === \"-f\") {\r\n      // -f (follow) can't work in VFS, ignore\r\n    } else if (args[i].startsWith(\"-\") && /^\\d+$/.test(args[i].slice(1))) {\r\n      n = parseInt(args[i].slice(1), 10);\r\n    } else if (!args[i].startsWith(\"-\")) {\r\n      files.push(args[i]);\r\n    }\r\n  }\r\n\r\n  const doTail = (content: string) => {\r\n    if (byteMode) return content.slice(-bytes);\r\n    const lines = content.split(\"\\n\");\r\n    const start = Math.max(\r\n      0,\r\n      lines.length - n - (content.endsWith(\"\\n\") ? 1 : 0),\r\n    );\r\n    return lines.slice(start).join(\"\\n\");\r\n  };\r\n\r\n  if (files.length === 0 && stdin !== undefined) return ok(doTail(stdin));\r\n  if (files.length === 0) return fail(\"tail: missing operand\\n\");\r\n\r\n  let out = \"\";\r\n  for (const file of files) {\r\n    const p = resolvePath(file, ctx.cwd);\r\n    try {\r\n      const content = ctx.volume.readFileSync(p, \"utf8\");\r\n      if (files.length > 1) out += `==> ${file} <==\\n`;\r\n      out += doTail(content);\r\n    } catch {\r\n      return fail(`tail: ${file}: No such file or directory\\n`);\r\n    }\r\n  }\r\n  return ok(out);\r\n};\r\n\r\nconst touch: BuiltinFn = (args, ctx) => {\r\n  if (args.length === 0) return fail(\"touch: missing operand\\n\");\r\n  for (const file of args) {\r\n    if (file.startsWith(\"-\")) continue;\r\n    const p = resolvePath(file, ctx.cwd);\r\n    if (!ctx.volume.existsSync(p)) {\r\n      ctx.volume.writeFileSync(p, \"\");\r\n    }\r\n  }\r\n  return ok();\r\n};\r\n\r\nconst cpCmd: BuiltinFn = (args, ctx) => {\r\n  const { flags, positional } = parseArgs(args, [\"r\", \"R\", \"f\", \"n\", \"v\"]);\r\n  const recursive = flags.has(\"r\") || flags.has(\"R\") || flags.has(\"recursive\");\r\n  const verbose = flags.has(\"v\");\r\n\r\n  if (positional.length < 2) return fail(\"cp: missing operand\\n\");\r\n\r\n  const dest = positional[positional.length - 1];\r\n  const sources = positional.slice(0, -1);\r\n  const dstPath = resolvePath(dest, ctx.cwd);\r\n  let out = \"\";\r\n\r\n  for (const src of sources) {\r\n    const srcPath = resolvePath(src, ctx.cwd);\r\n    try {\r\n      const st = ctx.volume.statSync(srcPath);\r\n      if (st.isDirectory()) {\r\n        if (!recursive)\r\n          return fail(`cp: -r not specified; omitting directory '${src}'\\n`);\r\n        copyTree(ctx, srcPath, dstPath);\r\n        if (verbose) out += `'${src}' -> '${dest}'\\n`;\r\n      } else {\r\n        let destFinal = dstPath;\r\n        if (ctx.volume.existsSync(dstPath)) {\r\n          try {\r\n            if (ctx.volume.statSync(dstPath).isDirectory()) {\r\n              destFinal = `${dstPath}/${pathModule.basename(srcPath)}`;\r\n            }\r\n          } catch {\r\n            /* */\r\n          }\r\n        }\r\n        ctx.volume.writeFileSync(destFinal, ctx.volume.readFileSync(srcPath));\r\n        if (verbose) out += `'${src}' -> '${dest}'\\n`;\r\n      }\r\n    } catch {\r\n      return fail(`cp: cannot stat '${src}': No such file or directory\\n`);\r\n    }\r\n  }\r\n  return ok(out);\r\n};\r\n\r\nconst mv: BuiltinFn = (args, ctx) => {\r\n  const { flags, positional } = parseArgs(args, [\"f\", \"n\", \"v\"]);\r\n  const verbose = flags.has(\"v\");\r\n  if (positional.length < 2) return fail(\"mv: missing operand\\n\");\r\n\r\n  const dest = positional[positional.length - 1];\r\n  const sources = positional.slice(0, -1);\r\n  const dstPath = resolvePath(dest, ctx.cwd);\r\n  let out = \"\";\r\n\r\n  for (const src of sources) {\r\n    const srcPath = resolvePath(src, ctx.cwd);\r\n    try {\r\n      let destFinal = dstPath;\r\n      if (ctx.volume.existsSync(dstPath)) {\r\n        try {\r\n          if (ctx.volume.statSync(dstPath).isDirectory()) {\r\n            destFinal = `${dstPath}/${pathModule.basename(srcPath)}`;\r\n          }\r\n        } catch {\r\n          /* */\r\n        }\r\n      }\r\n      ctx.volume.renameSync(srcPath, destFinal);\r\n      if (verbose) out += `renamed '${src}' -> '${dest}'\\n`;\r\n    } catch {\r\n      return fail(\r\n        `mv: cannot move '${src}' to '${dest}': No such file or directory\\n`,\r\n      );\r\n    }\r\n  }\r\n  return ok(out);\r\n};\r\n\r\nconst rm: BuiltinFn = (args, ctx) => {\r\n  const { flags, positional } = parseArgs(args, [\"r\", \"R\", \"f\", \"v\"]);\r\n  const recursive = flags.has(\"r\") || flags.has(\"R\") || flags.has(\"recursive\");\r\n  const force = flags.has(\"f\") || flags.has(\"force\");\r\n  const verbose = flags.has(\"v\");\r\n\r\n  if (positional.length === 0 && !force) return fail(\"rm: missing operand\\n\");\r\n\r\n  let out = \"\";\r\n  for (const target of positional) {\r\n    const p = resolvePath(target, ctx.cwd);\r\n    if (!ctx.volume.existsSync(p)) {\r\n      if (force) continue;\r\n      return fail(`rm: cannot remove '${target}': No such file or directory\\n`);\r\n    }\r\n    const st = ctx.volume.statSync(p);\r\n    if (st.isDirectory()) {\r\n      if (!recursive)\r\n        return fail(`rm: cannot remove '${target}': Is a directory\\n`);\r\n      removeTree(ctx, p);\r\n      if (verbose) out += `removed directory '${target}'\\n`;\r\n    } else {\r\n      ctx.volume.unlinkSync(p);\r\n      if (verbose) out += `removed '${target}'\\n`;\r\n    }\r\n  }\r\n  return ok(out);\r\n};\r\n\r\nconst mkdir_cmd: BuiltinFn = (args, ctx) => {\r\n  const { flags, positional } = parseArgs(args, [\"p\", \"v\"]);\r\n  const recursive = flags.has(\"p\");\r\n  const verbose = flags.has(\"v\");\r\n\r\n  if (positional.length === 0) return fail(\"mkdir: missing operand\\n\");\r\n\r\n  let out = \"\";\r\n  for (const dir of positional) {\r\n    const p = resolvePath(dir, ctx.cwd);\r\n    try {\r\n      ctx.volume.mkdirSync(p, { recursive });\r\n      if (verbose) out += `mkdir: created directory '${dir}'\\n`;\r\n    } catch (e) {\r\n      if (!recursive)\r\n        return fail(\r\n          `mkdir: cannot create directory '${dir}': ${e instanceof Error ? e.message : String(e)}\\n`,\r\n        );\r\n    }\r\n  }\r\n  return ok(out);\r\n};\r\n\r\nconst rmdir_cmd: BuiltinFn = (args, ctx) => {\r\n  const { flags, positional } = parseArgs(args, [\"p\", \"v\"]);\r\n  const parents = flags.has(\"p\");\r\n  const verbose = flags.has(\"v\");\r\n\r\n  if (positional.length === 0) return fail(\"rmdir: missing operand\\n\");\r\n\r\n  let out = \"\";\r\n  for (const dir of positional) {\r\n    let p = resolvePath(dir, ctx.cwd);\r\n    try {\r\n      ctx.volume.rmdirSync(p);\r\n      if (verbose) out += `rmdir: removing directory, '${dir}'\\n`;\r\n      if (parents) {\r\n        while (p !== \"/\") {\r\n          p = pathModule.dirname(p);\r\n          if (p === \"/\") break;\r\n          try {\r\n            ctx.volume.rmdirSync(p);\r\n          } catch {\r\n            break;\r\n          }\r\n        }\r\n      }\r\n    } catch {\r\n      return fail(\r\n        `rmdir: failed to remove '${dir}': Directory not empty or not found\\n`,\r\n      );\r\n    }\r\n  }\r\n  return ok(out);\r\n};\r\n\r\nconst chmod: BuiltinFn = (args, _ctx) => {\r\n  if (args.length < 2) return fail(\"chmod: missing operand\\n\");\r\n  return ok(); // no-op in VFS\r\n};\r\n\r\nconst wc: BuiltinFn = (args, ctx, stdin) => {\r\n  const { flags, positional } = parseArgs(args, [\"l\", \"w\", \"c\", \"m\", \"L\"]);\r\n  const showLines = flags.has(\"l\");\r\n  const showWords = flags.has(\"w\");\r\n  const showBytes = flags.has(\"c\");\r\n  const showChars = flags.has(\"m\");\r\n  const showMaxLine = flags.has(\"L\");\r\n  const showAll =\r\n    !showLines && !showWords && !showBytes && !showChars && !showMaxLine;\r\n\r\n  const doWc = (content: string, label?: string) => {\r\n    const lines = content.split(\"\\n\").length - (content.endsWith(\"\\n\") ? 1 : 0);\r\n    const words = content.split(/\\s+/).filter(Boolean).length;\r\n    const bytes = new TextEncoder().encode(content).length;\r\n    const chars = [...content].length;\r\n    const maxLine = content\r\n      .split(\"\\n\")\r\n      .reduce((mx, l) => Math.max(mx, l.length), 0);\r\n\r\n    const parts: string[] = [];\r\n    if (showAll || showLines) parts.push(String(lines).padStart(7));\r\n    if (showAll || showWords) parts.push(String(words).padStart(7));\r\n    if (showChars) parts.push(String(chars).padStart(7));\r\n    if (showAll || showBytes) parts.push(String(bytes).padStart(7));\r\n    if (showMaxLine) parts.push(String(maxLine).padStart(7));\r\n\r\n    const suffix = label ? ` ${label}` : \"\";\r\n    return parts.join(\"\") + suffix + \"\\n\";\r\n  };\r\n\r\n  if (positional.length === 0 && stdin !== undefined) return ok(doWc(stdin));\r\n  if (positional.length === 0) return fail(\"wc: missing operand\\n\");\r\n\r\n  let out = \"\";\r\n  let totalLines = 0,\r\n    totalWords = 0,\r\n    totalBytes = 0;\r\n  for (const file of positional) {\r\n    const p = resolvePath(file, ctx.cwd);\r\n    try {\r\n      const content = ctx.volume.readFileSync(p, \"utf8\");\r\n      out += doWc(content, file);\r\n      totalLines +=\r\n        content.split(\"\\n\").length - (content.endsWith(\"\\n\") ? 1 : 0);\r\n      totalWords += content.split(/\\s+/).filter(Boolean).length;\r\n      totalBytes += new TextEncoder().encode(content).length;\r\n    } catch {\r\n      return fail(`wc: ${file}: No such file or directory\\n`);\r\n    }\r\n  }\r\n  if (positional.length > 1) {\r\n    const parts: string[] = [];\r\n    if (showAll || showLines) parts.push(String(totalLines).padStart(7));\r\n    if (showAll || showWords) parts.push(String(totalWords).padStart(7));\r\n    if (showAll || showBytes) parts.push(String(totalBytes).padStart(7));\r\n    out += parts.join(\"\") + \" total\\n\";\r\n  }\r\n  return ok(out);\r\n};\r\n\r\nconst tee: BuiltinFn = (args, ctx, stdin) => {\r\n  const { flags, positional } = parseArgs(args, [\"a\"]);\r\n  const append = flags.has(\"a\");\r\n  const content = stdin ?? \"\";\r\n\r\n  for (const file of positional) {\r\n    const p = resolvePath(file, ctx.cwd);\r\n    if (append && ctx.volume.existsSync(p)) {\r\n      const existing = ctx.volume.readFileSync(p, \"utf8\");\r\n      ctx.volume.writeFileSync(p, existing + content);\r\n    } else {\r\n      ctx.volume.writeFileSync(p, content);\r\n    }\r\n  }\r\n  return ok(content);\r\n};\r\n\r\nconst readlink_cmd: BuiltinFn = (args, ctx) => {\r\n  const { positional } = parseArgs(args, [\"f\", \"e\", \"m\", \"n\", \"q\", \"z\"]);\r\n  if (positional.length === 0) return fail(\"readlink: missing operand\\n\");\r\n  const p = resolvePath(positional[0], ctx.cwd);\r\n  return ok(p + \"\\n\");\r\n};\r\n\r\nconst ln_cmd: BuiltinFn = (args, ctx) => {\r\n  const { positional } = parseArgs(args, [\"s\", \"f\"]);\r\n  if (positional.length < 2) return fail(\"ln: missing operand\\n\");\r\n  const src = resolvePath(positional[0], ctx.cwd);\r\n  const dst = resolvePath(positional[1], ctx.cwd);\r\n  try {\r\n    const content = ctx.volume.readFileSync(src);\r\n    ctx.volume.writeFileSync(dst, content);\r\n    return ok();\r\n  } catch {\r\n    return fail(\r\n      `ln: cannot create link '${positional[1]}': source not found\\n`,\r\n    );\r\n  }\r\n};\r\n\r\nconst writeFile: BuiltinFn = (args, ctx) => {\r\n  if (args.length < 2) return fail(\"write: missing arguments\\n\");\r\n  const path = resolvePath(args[0], ctx.cwd);\r\n  ctx.volume.writeFileSync(path, args.slice(1).join(\" \"));\r\n  return ok();\r\n};\r\n\r\n/* ------------------------------------------------------------------ */\r\n/*  Registry                                                           */\r\n/* ------------------------------------------------------------------ */\r\n\r\nexport const fileOpsCommands: [string, BuiltinFn][] = [\r\n  [\"cat\", cat],\r\n  [\"head\", head],\r\n  [\"tail\", tail],\r\n  [\"touch\", touch],\r\n  [\"cp\", cpCmd],\r\n  [\"mv\", mv],\r\n  [\"rm\", rm],\r\n  [\"mkdir\", mkdir_cmd],\r\n  [\"rmdir\", rmdir_cmd],\r\n  [\"chmod\", chmod],\r\n  [\"wc\", wc],\r\n  [\"tee\", tee],\r\n  [\"ln\", ln_cmd],\r\n  [\"readlink\", readlink_cmd],\r\n  [\"write\", writeFile],\r\n];\r\n","import type { BuiltinFn } from \"../shell-types\";\r\nimport {\r\n  ok,\r\n  fail,\r\n  resolvePath,\r\n  parseArgs,\r\n  humanSize,\r\n  pathModule,\r\n  MONTHS_SHORT,\r\n  RESET,\r\n  DIM,\r\n  GREEN,\r\n  CYAN,\r\n  BOLD_BLUE,\r\n} from \"../shell-helpers\";\r\nimport { LS_BLOCK_SIZE } from \"../../constants/config\";\r\n\r\n/* ------------------------------------------------------------------ */\r\n/*  Helpers                                                            */\r\n/* ------------------------------------------------------------------ */\r\n\r\nfunction colorName(name: string, isDir: boolean): string {\r\n  if (isDir) return `${BOLD_BLUE}${name}${RESET}`;\r\n  const dot = name.lastIndexOf(\".\");\r\n  const ext = dot >= 0 ? name.slice(dot) : \"\";\r\n  if (ext === \".sh\" || ext === \".bin\") return `${GREEN}${name}${RESET}`;\r\n  return name;\r\n}\r\n\r\nfunction lsDate(d: Date): string {\r\n  const mon = MONTHS_SHORT[d.getMonth()];\r\n  const day = String(d.getDate()).padStart(2, \" \");\r\n  const now = new Date();\r\n  const sixMonthsAgo = new Date(\r\n    now.getFullYear(),\r\n    now.getMonth() - 6,\r\n    now.getDate(),\r\n  );\r\n  if (d < sixMonthsAgo || d > now) {\r\n    return `${mon} ${day}  ${d.getFullYear()}`;\r\n  }\r\n  const hh = String(d.getHours()).padStart(2, \"0\");\r\n  const mm = String(d.getMinutes()).padStart(2, \"0\");\r\n  return `${mon} ${day} ${hh}:${mm}`;\r\n}\r\n\r\nfunction hashCode(s: string): number {\r\n  let h = 0;\r\n  for (let i = 0; i < s.length; i++) h = ((h << 5) - h + s.charCodeAt(i)) | 0;\r\n  return h;\r\n}\r\n\r\n/* ------------------------------------------------------------------ */\r\n/*  Commands                                                           */\r\n/* ------------------------------------------------------------------ */\r\n\r\nconst ls: BuiltinFn = (args, ctx) => {\r\n  const { flags, positional } = parseArgs(args, [\r\n    \"l\",\r\n    \"a\",\r\n    \"A\",\r\n    \"R\",\r\n    \"1\",\r\n    \"h\",\r\n    \"S\",\r\n    \"t\",\r\n    \"r\",\r\n    \"F\",\r\n    \"d\",\r\n    \"i\",\r\n  ]);\r\n  const showAll = flags.has(\"a\");\r\n  const showAlmostAll = flags.has(\"A\");\r\n  const longForm = flags.has(\"l\");\r\n  const recursive = flags.has(\"R\");\r\n  const onePerLine = flags.has(\"1\") || longForm;\r\n  const humanReadable = flags.has(\"h\");\r\n  const sortBySize = flags.has(\"S\");\r\n  const sortByTime = flags.has(\"t\");\r\n  const reverseSort = flags.has(\"r\");\r\n  const classify = flags.has(\"F\");\r\n  const dirOnly = flags.has(\"d\");\r\n  const showInode = flags.has(\"i\");\r\n\r\n  const dir =\r\n    positional.length > 0 ? resolvePath(positional[0], ctx.cwd) : ctx.cwd;\r\n\r\n  const lsDir = (d: string, prefix: string): string => {\r\n    if (dirOnly) {\r\n      const name = positional[0] || d;\r\n      if (longForm) {\r\n        const st = ctx.volume.statSync(d);\r\n        const isDir = st.isDirectory();\r\n        const mode = isDir\r\n          ? `${CYAN}drwxr-xr-x${RESET}`\r\n          : `${DIM}-rw-r--r--${RESET}`;\r\n        return `${mode} 1 user user ${String(0).padStart(6)} ${lsDate(new Date(st.mtimeMs || Date.now()))} ${colorName(name, isDir)}\\n`;\r\n      }\r\n      return colorName(name, true) + \"\\n\";\r\n    }\r\n\r\n    let entries: string[];\r\n    try {\r\n      entries = ctx.volume.readdirSync(d);\r\n    } catch {\r\n      return `ls: cannot access '${d}': No such file or directory\\n`;\r\n    }\r\n\r\n    if (showAll) {\r\n      /* all */\r\n    } else if (showAlmostAll)\r\n      entries = entries.filter((e) => e !== \".\" && e !== \"..\");\r\n    else entries = entries.filter((e) => !e.startsWith(\".\"));\r\n\r\n    interface EntryInfo {\r\n      name: string;\r\n      isDir: boolean;\r\n      size: number;\r\n      mtime: number;\r\n    }\r\n    const infos: EntryInfo[] = entries.map((name) => {\r\n      const full = d === \"/\" ? `/${name}` : `${d}/${name}`;\r\n      try {\r\n        const st = ctx.volume.statSync(full);\r\n        const isDir = st.isDirectory();\r\n        let size = 0;\r\n        if (!isDir) {\r\n          try {\r\n            size = ctx.volume.readFileSync(full).length;\r\n          } catch {\r\n            /* */\r\n          }\r\n        }\r\n        return { name, isDir, size, mtime: st.mtimeMs || 0 };\r\n      } catch {\r\n        return { name, isDir: false, size: 0, mtime: 0 };\r\n      }\r\n    });\r\n\r\n    if (sortBySize) infos.sort((a, b) => b.size - a.size);\r\n    else if (sortByTime) infos.sort((a, b) => b.mtime - a.mtime);\r\n    else infos.sort((a, b) => a.name.localeCompare(b.name));\r\n    if (reverseSort) infos.reverse();\r\n\r\n    let out = prefix ? `${BOLD_BLUE}${prefix}${RESET}:\\n` : \"\";\r\n\r\n    if (longForm) {\r\n      const totalBlocks = infos.reduce(\r\n        (s, e) => s + Math.ceil(e.size / LS_BLOCK_SIZE),\r\n        0,\r\n      );\r\n      out += `total ${totalBlocks}\\n`;\r\n      for (const info of infos) {\r\n        const mode = info.isDir\r\n          ? `${CYAN}drwxr-xr-x${RESET}`\r\n          : `${DIM}-rw-r--r--${RESET}`;\r\n        const sizeStr = humanReadable\r\n          ? humanSize(info.size).padStart(5)\r\n          : String(info.size).padStart(6);\r\n        const date = lsDate(new Date(info.mtime || Date.now()));\r\n        const colored = colorName(info.name, info.isDir);\r\n        const suffix = classify\r\n          ? info.isDir\r\n            ? \"/\"\r\n            : \"\"\r\n          : info.isDir\r\n            ? \"/\"\r\n            : \"\";\r\n        const inode = showInode\r\n          ? `${String(Math.abs(hashCode(d + \"/\" + info.name))).padStart(7)} `\r\n          : \"\";\r\n        out += `${inode}${mode} 1 user user ${sizeStr} ${date} ${colored}${suffix}\\n`;\r\n      }\r\n    } else if (onePerLine) {\r\n      for (const info of infos) {\r\n        const inode = showInode\r\n          ? `${String(Math.abs(hashCode(d + \"/\" + info.name))).padStart(7)} `\r\n          : \"\";\r\n        const suffix = classify ? (info.isDir ? \"/\" : \"\") : \"\";\r\n        out += `${inode}${colorName(info.name, info.isDir)}${suffix}\\n`;\r\n      }\r\n    } else {\r\n      const colored = infos.map((info) => {\r\n        const suffix = classify ? (info.isDir ? \"/\" : \"\") : \"\";\r\n        return colorName(info.name, info.isDir) + suffix;\r\n      });\r\n      out += colored.join(\"  \") + \"\\n\";\r\n    }\r\n\r\n    if (recursive) {\r\n      for (const info of infos) {\r\n        if (info.isDir) {\r\n          const full = d === \"/\" ? `/${info.name}` : `${d}/${info.name}`;\r\n          out += \"\\n\" + lsDir(full, full);\r\n        }\r\n      }\r\n    }\r\n\r\n    return out;\r\n  };\r\n\r\n  try {\r\n    const st = ctx.volume.statSync(dir);\r\n    if (st.isFile() && !dirOnly) {\r\n      if (longForm) {\r\n        let size = 0;\r\n        try {\r\n          size = ctx.volume.readFileSync(dir).length;\r\n        } catch {\r\n          /* */\r\n        }\r\n        const sizeStr = humanReadable\r\n          ? humanSize(size).padStart(5)\r\n          : String(size).padStart(6);\r\n        const date = lsDate(new Date(st.mtimeMs || Date.now()));\r\n        return ok(\r\n          `${DIM}-rw-r--r--${RESET} 1 user user ${sizeStr} ${date} ${positional[0]}\\n`,\r\n        );\r\n      }\r\n      return ok(positional[0] + \"\\n\");\r\n    }\r\n  } catch {\r\n    return fail(\r\n      `ls: cannot access '${positional[0] || dir}': No such file or directory\\n`,\r\n    );\r\n  }\r\n\r\n  return ok(lsDir(dir, positional.length > 1 ? dir : \"\"));\r\n};\r\n\r\nconst cd: BuiltinFn = (args, ctx) => {\r\n  const target = args[0] || ctx.env.HOME || \"/\";\r\n  let newDir: string;\r\n\r\n  if (target === \"-\") {\r\n    newDir = ctx.env.OLDPWD || ctx.cwd;\r\n  } else {\r\n    newDir = resolvePath(target, ctx.cwd);\r\n  }\r\n\r\n  try {\r\n    const st = ctx.volume.statSync(newDir);\r\n    if (!st.isDirectory()) return fail(`cd: not a directory: ${target}\\n`);\r\n    ctx.env.OLDPWD = ctx.cwd;\r\n    ctx.cwd = newDir;\r\n    ctx.env.PWD = newDir;\r\n    // keep process.cwd() in sync\r\n    try {\r\n      (globalThis as any).process?.chdir?.(newDir);\r\n    } catch {}\r\n    return ok();\r\n  } catch {\r\n    return fail(`cd: no such file or directory: ${target}\\n`);\r\n  }\r\n};\r\n\r\nconst pwd: BuiltinFn = (_args, ctx) => {\r\n  return ok(ctx.cwd + \"\\n\");\r\n};\r\n\r\nconst basename_cmd: BuiltinFn = (args) => {\r\n  const { positional } = parseArgs(args, [\"a\", \"z\"], [\"s\"]);\r\n  if (positional.length === 0) return fail(\"basename: missing operand\\n\");\r\n\r\n  const suffix = positional[1] || \"\";\r\n  let result = pathModule.basename(positional[0]);\r\n  if (suffix && result.endsWith(suffix)) {\r\n    result = result.slice(0, -suffix.length);\r\n  }\r\n  return ok(result + \"\\n\");\r\n};\r\n\r\nconst dirname_cmd: BuiltinFn = (args) => {\r\n  if (args.length === 0) return fail(\"dirname: missing operand\\n\");\r\n  return ok(pathModule.dirname(args[0]) + \"\\n\");\r\n};\r\n\r\nconst realpath_cmd: BuiltinFn = (args, ctx) => {\r\n  if (args.length === 0) return fail(\"realpath: missing operand\\n\");\r\n  const p = resolvePath(args[0], ctx.cwd);\r\n  if (!ctx.volume.existsSync(p))\r\n    return fail(`realpath: ${args[0]}: No such file or directory\\n`);\r\n  return ok(p + \"\\n\");\r\n};\r\n\r\n/* ------------------------------------------------------------------ */\r\n/*  Registry                                                           */\r\n/* ------------------------------------------------------------------ */\r\n\r\nexport const directoryCommands: [string, BuiltinFn][] = [\r\n  [\"ls\", ls],\r\n  [\"cd\", cd],\r\n  [\"pwd\", pwd],\r\n  [\"basename\", basename_cmd],\r\n  [\"dirname\", dirname_cmd],\r\n  [\"realpath\", realpath_cmd],\r\n];\r\n","import type { BuiltinFn, ShellContext } from \"../shell-types\";\r\nimport {\r\n  ok,\r\n  fail,\r\n  EXIT_OK,\r\n  EXIT_FAIL,\r\n  resolvePath,\r\n  parseArgs,\r\n  processEscapes,\r\n  expandCharClass,\r\n  RESET,\r\n  GREEN,\r\n  MAGENTA,\r\n  CYAN,\r\n  BOLD_RED,\r\n} from \"../shell-helpers\";\r\nimport { YES_REPEAT_COUNT } from \"../../constants/config\";\r\n\r\n/* ------------------------------------------------------------------ */\r\n/*  echo / printf                                                      */\r\n/* ------------------------------------------------------------------ */\r\n\r\nconst echo: BuiltinFn = (args) => {\r\n  let noNewline = false;\r\n  let enableEscapes = false;\r\n  let start = 0;\r\n\r\n  while (start < args.length) {\r\n    const a = args[start];\r\n    if (a === \"-n\") {\r\n      noNewline = true;\r\n      start++;\r\n    } else if (a === \"-e\") {\r\n      enableEscapes = true;\r\n      start++;\r\n    } else if (a === \"-E\") {\r\n      enableEscapes = false;\r\n      start++;\r\n    } else if (a === \"-ne\" || a === \"-en\") {\r\n      noNewline = true;\r\n      enableEscapes = true;\r\n      start++;\r\n    } else if (a === \"-nE\" || a === \"-En\") {\r\n      noNewline = true;\r\n      start++;\r\n    } else break;\r\n  }\r\n\r\n  let output = args.slice(start).join(\" \");\r\n  if (enableEscapes) output = processEscapes(output);\r\n  return ok(output + (noNewline ? \"\" : \"\\n\"));\r\n};\r\n\r\nconst printf_cmd: BuiltinFn = (args) => {\r\n  if (args.length === 0) return ok();\r\n  const fmt = args[0];\r\n  const vals = args.slice(1);\r\n  let out = \"\";\r\n  let vi = 0;\r\n\r\n  let i = 0;\r\n  while (i < fmt.length) {\r\n    if (fmt[i] === \"\\\\\" && i + 1 < fmt.length) {\r\n      const c = fmt[i + 1];\r\n      if (c === \"n\") { out += \"\\n\"; i += 2; continue; }\r\n      if (c === \"t\") { out += \"\\t\"; i += 2; continue; }\r\n      if (c === \"r\") { out += \"\\r\"; i += 2; continue; }\r\n      if (c === \"a\") { out += \"\\x07\"; i += 2; continue; }\r\n      if (c === \"b\") { out += \"\\b\"; i += 2; continue; }\r\n      if (c === \"f\") { out += \"\\f\"; i += 2; continue; }\r\n      if (c === \"v\") { out += \"\\x0b\"; i += 2; continue; }\r\n      if (c === \"\\\\\") { out += \"\\\\\"; i += 2; continue; }\r\n      if (c === \"0\") {\r\n        let oct = \"\";\r\n        let j = i + 2;\r\n        while (j < fmt.length && j < i + 5 && fmt[j] >= \"0\" && fmt[j] <= \"7\")\r\n          oct += fmt[j++];\r\n        out += String.fromCharCode(parseInt(oct || \"0\", 8));\r\n        i = j;\r\n        continue;\r\n      }\r\n      if (c === \"x\") {\r\n        const hex = fmt.slice(i + 2, i + 4).match(/^[0-9a-fA-F]+/)?.[0] ?? \"\";\r\n        if (hex) {\r\n          out += String.fromCharCode(parseInt(hex, 16));\r\n          i += 2 + hex.length;\r\n          continue;\r\n        }\r\n      }\r\n      out += fmt[i];\r\n      i++;\r\n      continue;\r\n    }\r\n\r\n    if (fmt[i] === \"%\" && i + 1 < fmt.length) {\r\n      i++;\r\n      let fmtFlags = \"\";\r\n      while (\"-+ 0#\".includes(fmt[i])) fmtFlags += fmt[i++];\r\n      let width = \"\";\r\n      if (fmt[i] === \"*\") { width = vals[vi++] ?? \"0\"; i++; }\r\n      else { while (fmt[i] >= \"0\" && fmt[i] <= \"9\") width += fmt[i++]; }\r\n      let prec = \"\";\r\n      if (fmt[i] === \".\") {\r\n        i++;\r\n        if (fmt[i] === \"*\") { prec = vals[vi++] ?? \"0\"; i++; }\r\n        else { while (fmt[i] >= \"0\" && fmt[i] <= \"9\") prec += fmt[i++]; }\r\n      }\r\n      const spec = fmt[i++];\r\n      const val = vals[vi++] ?? \"\";\r\n\r\n      if (spec === \"%\") { out += \"%\"; vi--; continue; }\r\n      if (spec === \"s\") {\r\n        let s = val;\r\n        if (prec) s = s.slice(0, parseInt(prec));\r\n        const w = parseInt(width) || 0;\r\n        if (fmtFlags.includes(\"-\")) out += s.padEnd(w);\r\n        else out += s.padStart(w);\r\n        continue;\r\n      }\r\n      if (spec === \"d\" || spec === \"i\") {\r\n        const n = parseInt(val) || 0;\r\n        let s = (fmtFlags.includes(\"+\") && n >= 0 ? \"+\" : \"\") + String(n);\r\n        if (fmtFlags.includes(\" \") && n >= 0 && !fmtFlags.includes(\"+\")) s = \" \" + s;\r\n        const w = parseInt(width) || 0;\r\n        const pad = fmtFlags.includes(\"0\") && !fmtFlags.includes(\"-\") ? \"0\" : \" \";\r\n        if (fmtFlags.includes(\"-\")) out += s.padEnd(w);\r\n        else if (pad === \"0\" && s[0] === \"-\") out += \"-\" + s.slice(1).padStart(w - 1, \"0\");\r\n        else out += s.padStart(w, pad);\r\n        continue;\r\n      }\r\n      if (spec === \"f\") {\r\n        const n = parseFloat(val) || 0;\r\n        const p = prec !== \"\" ? parseInt(prec) : 6;\r\n        let s = n.toFixed(p);\r\n        if (fmtFlags.includes(\"+\") && n >= 0) s = \"+\" + s;\r\n        const w = parseInt(width) || 0;\r\n        if (fmtFlags.includes(\"-\")) out += s.padEnd(w);\r\n        else out += s.padStart(w, fmtFlags.includes(\"0\") ? \"0\" : \" \");\r\n        continue;\r\n      }\r\n      if (spec === \"x\") {\r\n        const n = (parseInt(val) || 0) >>> 0;\r\n        let s = n.toString(16);\r\n        if (fmtFlags.includes(\"#\") && n !== 0) s = \"0x\" + s;\r\n        out += s.padStart(parseInt(width) || 0, fmtFlags.includes(\"0\") ? \"0\" : \" \");\r\n        continue;\r\n      }\r\n      if (spec === \"X\") {\r\n        const n = (parseInt(val) || 0) >>> 0;\r\n        let s = n.toString(16).toUpperCase();\r\n        if (fmtFlags.includes(\"#\") && n !== 0) s = \"0X\" + s;\r\n        out += s.padStart(parseInt(width) || 0, fmtFlags.includes(\"0\") ? \"0\" : \" \");\r\n        continue;\r\n      }\r\n      if (spec === \"o\") {\r\n        const n = (parseInt(val) || 0) >>> 0;\r\n        let s = n.toString(8);\r\n        if (fmtFlags.includes(\"#\") && n !== 0) s = \"0\" + s;\r\n        out += s.padStart(parseInt(width) || 0, fmtFlags.includes(\"0\") ? \"0\" : \" \");\r\n        continue;\r\n      }\r\n      if (spec === \"e\" || spec === \"E\") {\r\n        const n = parseFloat(val) || 0;\r\n        const p = prec !== \"\" ? parseInt(prec) : 6;\r\n        let s = spec === \"E\" ? n.toExponential(p).toUpperCase() : n.toExponential(p);\r\n        if (fmtFlags.includes(\"+\") && n >= 0) s = \"+\" + s;\r\n        out += s.padStart(parseInt(width) || 0);\r\n        continue;\r\n      }\r\n      if (spec === \"g\" || spec === \"G\") {\r\n        const n = parseFloat(val) || 0;\r\n        const p = prec !== \"\" ? parseInt(prec) : 6;\r\n        let s = spec === \"G\" ? n.toPrecision(p).toUpperCase() : n.toPrecision(p);\r\n        if (fmtFlags.includes(\"+\") && n >= 0) s = \"+\" + s;\r\n        out += s.padStart(parseInt(width) || 0);\r\n        continue;\r\n      }\r\n      if (spec === \"c\") { out += val ? val[0] : \"\"; continue; }\r\n      out += \"%\" + spec;\r\n      vi--;\r\n      continue;\r\n    }\r\n    out += fmt[i++];\r\n  }\r\n  return ok(out);\r\n};\r\n\r\n/* ------------------------------------------------------------------ */\r\n/*  grep / egrep / fgrep                                               */\r\n/* ------------------------------------------------------------------ */\r\n\r\ninterface GrepOpts {\r\n  regex: RegExp;\r\n  highlightRe: RegExp;\r\n  patternStr: string;\r\n  ignoreCase: boolean;\r\n  invert: boolean;\r\n  countOnly: boolean;\r\n  filesOnly: boolean;\r\n  lineNumbers: boolean;\r\n  onlyMatching: boolean;\r\n  quiet: boolean;\r\n  beforeCtx: number;\r\n  afterCtx: number;\r\n  maxCount: number;\r\n}\r\n\r\nfunction grepLines(content: string, opts: GrepOpts, label?: string): string {\r\n  const {\r\n    regex, highlightRe, patternStr, ignoreCase, invert,\r\n    countOnly, filesOnly, lineNumbers, onlyMatching, quiet,\r\n    beforeCtx, afterCtx, maxCount,\r\n  } = opts;\r\n  const lines = content.split(\"\\n\");\r\n  const matchedIndices = new Set<number>();\r\n  let matchCount = 0;\r\n\r\n  for (let i = 0; i < lines.length; i++) {\r\n    if (regex.test(lines[i]) !== invert) {\r\n      matchedIndices.add(i);\r\n      matchCount++;\r\n      if (matchCount >= maxCount) break;\r\n    }\r\n  }\r\n\r\n  if (countOnly) {\r\n    return (label ? `${MAGENTA}${label}${RESET}${CYAN}:${RESET}` : \"\") +\r\n      matchedIndices.size + \"\\n\";\r\n  }\r\n  if (filesOnly && matchedIndices.size > 0) {\r\n    return `${MAGENTA}${label ?? \"\"}${RESET}\\n`;\r\n  }\r\n  if (quiet) return matchedIndices.size > 0 ? \"\\0\" : \"\";\r\n\r\n  const showLines = new Set<number>();\r\n  for (const idx of matchedIndices) {\r\n    for (\r\n      let j = Math.max(0, idx - beforeCtx);\r\n      j <= Math.min(lines.length - 1, idx + afterCtx);\r\n      j++\r\n    ) {\r\n      showLines.add(j);\r\n    }\r\n  }\r\n\r\n  let out = \"\";\r\n  let prevShown = -2;\r\n  for (let i = 0; i < lines.length; i++) {\r\n    if (!showLines.has(i)) continue;\r\n    if (\r\n      prevShown >= 0 &&\r\n      i > prevShown + 1 &&\r\n      (beforeCtx > 0 || afterCtx > 0)\r\n    ) {\r\n      out += \"--\\n\";\r\n    }\r\n    prevShown = i;\r\n\r\n    const isMatch = matchedIndices.has(i);\r\n    const sep = isMatch ? `${CYAN}:${RESET}` : `${CYAN}-${RESET}`;\r\n    const prefix = label ? `${MAGENTA}${label}${RESET}${sep}` : \"\";\r\n    const num = lineNumbers ? `${GREEN}${i + 1}${RESET}${sep}` : \"\";\r\n\r\n    if (onlyMatching && isMatch && !invert) {\r\n      const gRe = new RegExp(patternStr, ignoreCase ? \"gi\" : \"g\");\r\n      let m: RegExpExecArray | null;\r\n      while ((m = gRe.exec(lines[i])) !== null) {\r\n        out += `${prefix}${num}${BOLD_RED}${m[0]}${RESET}\\n`;\r\n      }\r\n    } else {\r\n      const hl =\r\n        isMatch && !invert\r\n          ? lines[i].replace(highlightRe, (m) => `${BOLD_RED}${m}${RESET}`)\r\n          : lines[i];\r\n      out += `${prefix}${num}${hl}\\n`;\r\n    }\r\n  }\r\n\r\n  return out;\r\n}\r\n\r\nfunction grepDirFull(\r\n  ctx: ShellContext,\r\n  dir: string,\r\n  opts: GrepOpts,\r\n): string {\r\n  let out = \"\";\r\n  try {\r\n    for (const name of ctx.volume.readdirSync(dir)) {\r\n      const full = `${dir}/${name}`;\r\n      const st = ctx.volume.statSync(full);\r\n      if (st.isDirectory()) {\r\n        out += grepDirFull(ctx, full, opts);\r\n      } else {\r\n        try {\r\n          const content = ctx.volume.readFileSync(full, \"utf8\");\r\n          out += grepLines(content, opts, full);\r\n        } catch {\r\n          /* skip binary/unreadable */\r\n        }\r\n      }\r\n    }\r\n  } catch {\r\n    /* skip unreadable dirs */\r\n  }\r\n  return out;\r\n}\r\n\r\nconst grep_cmd: BuiltinFn = (args, ctx, stdin) => {\r\n  const { flags, opts: parsedOpts, positional } = parseArgs(\r\n    args,\r\n    [\r\n      \"i\", \"v\", \"c\", \"l\", \"n\", \"r\", \"R\", \"o\", \"w\", \"x\",\r\n      \"E\", \"F\", \"P\", \"H\", \"h\", \"q\", \"s\", \"z\",\r\n    ],\r\n    [\"A\", \"B\", \"C\", \"m\", \"e\", \"f\"],\r\n  );\r\n  const ignoreCase = flags.has(\"i\");\r\n  const invert = flags.has(\"v\");\r\n  const countOnly = flags.has(\"c\");\r\n  const filesOnly = flags.has(\"l\");\r\n  const lineNumbers = flags.has(\"n\");\r\n  const recursive = flags.has(\"r\") || flags.has(\"R\");\r\n  const onlyMatching = flags.has(\"o\");\r\n  const wordRegex = flags.has(\"w\");\r\n  const lineRegex = flags.has(\"x\");\r\n  const fixedStrings = flags.has(\"F\");\r\n  const quiet = flags.has(\"q\");\r\n  const suppressErrors = flags.has(\"s\");\r\n  const afterCtx = parseInt(parsedOpts[\"A\"] || parsedOpts[\"C\"] || \"0\");\r\n  const beforeCtx = parseInt(parsedOpts[\"B\"] || parsedOpts[\"C\"] || \"0\");\r\n  const maxCount = parsedOpts[\"m\"] ? parseInt(parsedOpts[\"m\"]) : Infinity;\r\n\r\n  let patternStr: string;\r\n  if (parsedOpts[\"e\"] !== undefined) {\r\n    patternStr = parsedOpts[\"e\"];\r\n  } else if (positional.length === 0) {\r\n    return fail(\"grep: missing pattern\\n\");\r\n  } else {\r\n    patternStr = positional.shift()!;\r\n  }\r\n\r\n  if (fixedStrings)\r\n    patternStr = patternStr.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\r\n  if (wordRegex) patternStr = `\\\\b${patternStr}\\\\b`;\r\n  if (lineRegex) patternStr = `^${patternStr}$`;\r\n\r\n  let regex: RegExp;\r\n  let highlightRe: RegExp;\r\n  try {\r\n    regex = new RegExp(patternStr, ignoreCase ? \"im\" : \"m\");\r\n    highlightRe = new RegExp(patternStr, ignoreCase ? \"gi\" : \"g\");\r\n  } catch {\r\n    return fail(`grep: Invalid regular expression: '${patternStr}'\\n`);\r\n  }\r\n\r\n  const grepOpts: GrepOpts = {\r\n    regex, highlightRe, patternStr, ignoreCase, invert,\r\n    countOnly, filesOnly, lineNumbers, onlyMatching, quiet,\r\n    beforeCtx, afterCtx, maxCount,\r\n  };\r\n\r\n  const files = positional;\r\n\r\n  if (files.length === 0 && stdin !== undefined) {\r\n    const result = grepLines(stdin, grepOpts);\r\n    if (quiet) return result ? EXIT_OK : EXIT_FAIL;\r\n    return result ? ok(result) : EXIT_FAIL;\r\n  }\r\n\r\n  if (files.length === 0) {\r\n    return fail(\"grep: missing file operand\\n\");\r\n  }\r\n\r\n  let out = \"\";\r\n  const multiFile = files.length > 1 || recursive;\r\n  let anyMatch = false;\r\n\r\n  for (const file of files) {\r\n    const p = resolvePath(file, ctx.cwd);\r\n    try {\r\n      const st = ctx.volume.statSync(p);\r\n      if (st.isDirectory()) {\r\n        if (recursive) {\r\n          const r = grepDirFull(ctx, p, grepOpts);\r\n          out += r;\r\n          if (r) anyMatch = true;\r\n        } else if (!suppressErrors) {\r\n          out += `grep: ${file}: Is a directory\\n`;\r\n        }\r\n        continue;\r\n      }\r\n      const content = ctx.volume.readFileSync(p, \"utf8\");\r\n      const result = grepLines(content, grepOpts, multiFile ? file : undefined);\r\n      out += result;\r\n      if (result) anyMatch = true;\r\n    } catch {\r\n      if (!suppressErrors)\r\n        return fail(`grep: ${file}: No such file or directory\\n`);\r\n    }\r\n  }\r\n\r\n  if (quiet) return anyMatch ? EXIT_OK : EXIT_FAIL;\r\n  return anyMatch ? ok(out) : { stdout: out, stderr: \"\", exitCode: 1 };\r\n};\r\n\r\n/* ------------------------------------------------------------------ */\r\n/*  sed                                                                */\r\n/* ------------------------------------------------------------------ */\r\n\r\ninterface SedCmd {\r\n  addr?:\r\n    | { type: \"line\"; n: number }\r\n    | { type: \"range\"; from: number; to: number }\r\n    | { type: \"last\" }\r\n    | { type: \"regex\"; re: RegExp };\r\n  type: string;\r\n  pattern?: string;\r\n  replacement?: string;\r\n  sFlags?: string;\r\n  text?: string;\r\n  printAfter?: boolean;\r\n}\r\n\r\nfunction parseSedScript(script: string): SedCmd[] | string {\r\n  const cmds: SedCmd[] = [];\r\n  const parts = script.split(/\\s*;\\s*|\\n/).filter(Boolean);\r\n\r\n  for (const part of parts) {\r\n    let rest = part.trim();\r\n    if (!rest) continue;\r\n\r\n    let addr: SedCmd[\"addr\"];\r\n    if (rest[0] === \"$\") {\r\n      addr = { type: \"last\" };\r\n      rest = rest.slice(1);\r\n    } else if (/^\\d/.test(rest)) {\r\n      const m = rest.match(/^(\\d+)(?:,(\\d+|\\$))?/);\r\n      if (m) {\r\n        rest = rest.slice(m[0].length);\r\n        if (m[2]) {\r\n          const to = m[2] === \"$\" ? Infinity : parseInt(m[2]);\r\n          addr = { type: \"range\", from: parseInt(m[1]), to };\r\n        } else {\r\n          addr = { type: \"line\", n: parseInt(m[1]) };\r\n        }\r\n      }\r\n    } else if (rest[0] === \"/\") {\r\n      const end = rest.indexOf(\"/\", 1);\r\n      if (end > 0) {\r\n        const pattern = rest.slice(1, end);\r\n        try {\r\n          addr = { type: \"regex\", re: new RegExp(pattern) };\r\n        } catch {\r\n          return `invalid regular expression: ${pattern}`;\r\n        }\r\n        rest = rest.slice(end + 1);\r\n      }\r\n    }\r\n\r\n    const cmd = rest[0];\r\n    rest = rest.slice(1);\r\n\r\n    if (cmd === \"s\") {\r\n      const delim = rest[0];\r\n      if (!delim) return `unsupported expression: ${part}`;\r\n      const parts2 = rest.slice(1).split(delim);\r\n      if (parts2.length < 2) return `unsupported expression: ${part}`;\r\n      const printAfter = parts2[2]?.includes(\"p\") ?? false;\r\n      const sFlags = (parts2[2] ?? \"\").replace(\"p\", \"\") || undefined;\r\n      cmds.push({ addr, type: \"s\", pattern: parts2[0], replacement: parts2[1], sFlags, printAfter });\r\n    } else if (cmd === \"d\") { cmds.push({ addr, type: \"d\" }); }\r\n    else if (cmd === \"p\") { cmds.push({ addr, type: \"p\" }); }\r\n    else if (cmd === \"q\") { cmds.push({ addr, type: \"q\" }); }\r\n    else if (cmd === \"a\") { cmds.push({ addr, type: \"a\", text: rest.replace(/^\\\\?\\s*/, \"\") }); }\r\n    else if (cmd === \"i\") { cmds.push({ addr, type: \"i\", text: rest.replace(/^\\\\?\\s*/, \"\") }); }\r\n    else if (cmd === \"c\") { cmds.push({ addr, type: \"c\", text: rest.replace(/^\\\\?\\s*/, \"\") }); }\r\n    else if (cmd === \"y\") {\r\n      const delim2 = rest[0];\r\n      const parts2 = rest.slice(1).split(delim2);\r\n      if (parts2.length < 2) return `unsupported expression: ${part}`;\r\n      cmds.push({ addr, type: \"y\", pattern: parts2[0], replacement: parts2[1] });\r\n    } else if (cmd === \"=\") { cmds.push({ addr, type: \"=\" }); }\r\n    else { return `unsupported command: ${cmd}`; }\r\n  }\r\n  return cmds;\r\n}\r\n\r\nfunction sedAddressMatch(\r\n  addr: SedCmd[\"addr\"],\r\n  lineNum: number,\r\n  totalLines: number,\r\n  _line: string,\r\n): boolean {\r\n  if (!addr) return true;\r\n  if (addr.type === \"line\") return lineNum === addr.n;\r\n  if (addr.type === \"range\")\r\n    return lineNum >= addr.from && lineNum <= (addr.to === Infinity ? totalLines : addr.to);\r\n  if (addr.type === \"last\") return lineNum === totalLines;\r\n  if (addr.type === \"regex\") return addr.re.test(_line);\r\n  return true;\r\n}\r\n\r\nconst sed_cmd: BuiltinFn = (args, ctx, stdin) => {\r\n  const { flags, positional } = parseArgs(args, [\"i\", \"n\", \"r\", \"E\"]);\r\n  const inPlace = flags.has(\"i\");\r\n  const quietMode = flags.has(\"n\");\r\n\r\n  if (positional.length === 0) return fail(\"sed: missing expression\\n\");\r\n\r\n  const expressions = positional[0];\r\n  const files = positional.slice(1);\r\n\r\n  const cmds = parseSedScript(expressions);\r\n  if (typeof cmds === \"string\") return fail(`sed: ${cmds}\\n`);\r\n\r\n  const doSed = (content: string): string => {\r\n    const lines = content.split(\"\\n\");\r\n    let out = \"\";\r\n    for (let i = 0; i < lines.length; i++) {\r\n      const lineNum = i + 1;\r\n      const isLast = i === lines.length - 1;\r\n      let line = lines[i];\r\n      let suppress = quietMode;\r\n      let deleted = false;\r\n\r\n      for (const cmd of cmds) {\r\n        if (deleted) break;\r\n        if (!sedAddressMatch(cmd.addr, lineNum, lines.length, line)) continue;\r\n\r\n        switch (cmd.type) {\r\n          case \"s\": {\r\n            let re: RegExp;\r\n            try {\r\n              re = new RegExp(cmd.pattern!, cmd.sFlags || undefined);\r\n            } catch {\r\n              break;\r\n            }\r\n            line = line.replace(re, cmd.replacement!);\r\n            if (cmd.printAfter && re.test(lines[i])) suppress = false;\r\n            break;\r\n          }\r\n          case \"d\": deleted = true; break;\r\n          case \"p\": out += line + \"\\n\"; break;\r\n          case \"q\": { if (!suppress) out += line + \"\\n\"; return out; }\r\n          case \"a\": out += line + \"\\n\" + cmd.text! + \"\\n\"; suppress = true; break;\r\n          case \"i\": out += cmd.text! + \"\\n\"; break;\r\n          case \"c\": out += cmd.text! + \"\\n\"; deleted = true; break;\r\n          case \"y\": {\r\n            const from = cmd.pattern!;\r\n            const to = cmd.replacement!;\r\n            let result = \"\";\r\n            for (const ch of line) {\r\n              const idx = from.indexOf(ch);\r\n              result += idx >= 0 ? to[idx] : ch;\r\n            }\r\n            line = result;\r\n            break;\r\n          }\r\n          case \"=\": out += lineNum + \"\\n\"; break;\r\n        }\r\n      }\r\n      if (!deleted && !suppress) {\r\n        out += line + (isLast && !content.endsWith(\"\\n\") ? \"\" : \"\\n\");\r\n      }\r\n    }\r\n    return out;\r\n  };\r\n\r\n  if (files.length === 0 && stdin !== undefined) return ok(doSed(stdin));\r\n  if (files.length === 0) return fail(\"sed: missing input\\n\");\r\n\r\n  let out = \"\";\r\n  for (const file of files) {\r\n    const p = resolvePath(file, ctx.cwd);\r\n    try {\r\n      const content = ctx.volume.readFileSync(p, \"utf8\");\r\n      const result = doSed(content);\r\n      if (inPlace) {\r\n        ctx.volume.writeFileSync(p, result);\r\n      } else {\r\n        out += result;\r\n      }\r\n    } catch {\r\n      return fail(`sed: ${file}: No such file or directory\\n`);\r\n    }\r\n  }\r\n  return ok(out);\r\n};\r\n\r\n/* ------------------------------------------------------------------ */\r\n/*  sort                                                               */\r\n/* ------------------------------------------------------------------ */\r\n\r\nconst sort_cmd: BuiltinFn = (args, ctx, stdin) => {\r\n  const { flags, opts, positional } = parseArgs(\r\n    args,\r\n    [\"r\", \"n\", \"u\", \"f\", \"h\", \"V\", \"b\", \"s\"],\r\n    [\"k\", \"t\", \"o\"],\r\n  );\r\n  const reverse = flags.has(\"r\");\r\n  const numeric = flags.has(\"n\");\r\n  const unique = flags.has(\"u\");\r\n  const ignoreCase = flags.has(\"f\");\r\n  const humanNumeric = flags.has(\"h\");\r\n  const versionSort = flags.has(\"V\");\r\n  const stable = flags.has(\"s\");\r\n  const keySpec = opts[\"k\"];\r\n  const fieldSep = opts[\"t\"];\r\n  const outputFile = opts[\"o\"];\r\n\r\n  let content = stdin ?? \"\";\r\n  if (positional.length > 0) {\r\n    const p = resolvePath(positional[0], ctx.cwd);\r\n    try {\r\n      content = ctx.volume.readFileSync(p, \"utf8\");\r\n    } catch {\r\n      return fail(`sort: ${positional[0]}: No such file or directory\\n`);\r\n    }\r\n  }\r\n\r\n  let lines = content.split(\"\\n\").filter(Boolean);\r\n\r\n  const getKey = (line: string): string => {\r\n    if (!keySpec) return line;\r\n    const sep = fieldSep || /\\s+/;\r\n    const fields = line.split(sep);\r\n    const [startSpec, endSpec] = keySpec.split(\",\");\r\n    const startField = parseInt(startSpec) - 1;\r\n    const endField = endSpec ? parseInt(endSpec) - 1 : startField;\r\n    return fields\r\n      .slice(startField, endField + 1)\r\n      .join(typeof sep === \"string\" ? sep : \" \");\r\n  };\r\n\r\n  const parseHumanSize = (s: string): number => {\r\n    const m = s.trim().match(/^([\\d.]+)([KMGTPE]i?)?$/i);\r\n    if (!m) return 0;\r\n    const n = parseFloat(m[1]);\r\n    const u = (m[2] || \"\").toUpperCase().replace(\"I\", \"\");\r\n    const mult: Record<string, number> = {\r\n      \"\": 1, K: 1024, M: 1048576, G: 1073741824, T: 1099511627776,\r\n    };\r\n    return n * (mult[u] || 1);\r\n  };\r\n\r\n  const compare = (a: string, b: string): number => {\r\n    let ka = getKey(a), kb = getKey(b);\r\n    if (ignoreCase) { ka = ka.toLowerCase(); kb = kb.toLowerCase(); }\r\n    if (numeric) return parseFloat(ka) - parseFloat(kb);\r\n    if (humanNumeric) return parseHumanSize(ka) - parseHumanSize(kb);\r\n    if (versionSort)\r\n      return ka.localeCompare(kb, undefined, { numeric: true, sensitivity: \"base\" });\r\n    return ka.localeCompare(kb);\r\n  };\r\n\r\n  if (stable) {\r\n    const indexed = lines.map((l, i) => ({ l, i }));\r\n    indexed.sort((a, b) => compare(a.l, b.l) || a.i - b.i);\r\n    lines = indexed.map((x) => x.l);\r\n  } else {\r\n    lines.sort(compare);\r\n  }\r\n  if (reverse) lines.reverse();\r\n  if (unique) {\r\n    const seen = new Set<string>();\r\n    lines = lines.filter((l) => {\r\n      const k = ignoreCase ? getKey(l).toLowerCase() : getKey(l);\r\n      if (seen.has(k)) return false;\r\n      seen.add(k);\r\n      return true;\r\n    });\r\n  }\r\n\r\n  const result = lines.join(\"\\n\") + (lines.length ? \"\\n\" : \"\");\r\n  if (outputFile) {\r\n    const p = resolvePath(outputFile, ctx.cwd);\r\n    try {\r\n      ctx.volume.writeFileSync(p, result);\r\n    } catch {\r\n      /* */\r\n    }\r\n  }\r\n  return ok(result);\r\n};\r\n\r\n/* ------------------------------------------------------------------ */\r\n/*  uniq                                                               */\r\n/* ------------------------------------------------------------------ */\r\n\r\nconst uniq_cmd: BuiltinFn = (args, ctx, stdin) => {\r\n  const { flags, opts, positional } = parseArgs(\r\n    args,\r\n    [\"c\", \"d\", \"u\", \"i\"],\r\n    [\"f\", \"s\", \"w\"],\r\n  );\r\n  const count = flags.has(\"c\");\r\n  const dupsOnly = flags.has(\"d\");\r\n  const uniqueOnly = flags.has(\"u\");\r\n  const ignoreCase = flags.has(\"i\");\r\n  const skipFields = parseInt(opts[\"f\"] || \"0\");\r\n  const skipChars = parseInt(opts[\"s\"] || \"0\");\r\n  const checkChars = opts[\"w\"] ? parseInt(opts[\"w\"]) : Infinity;\r\n\r\n  let content = stdin ?? \"\";\r\n  if (positional.length > 0) {\r\n    const p = resolvePath(positional[0], ctx.cwd);\r\n    try {\r\n      content = ctx.volume.readFileSync(p, \"utf8\");\r\n    } catch {\r\n      return fail(`uniq: ${positional[0]}: No such file or directory\\n`);\r\n    }\r\n  }\r\n\r\n  const getKey = (line: string): string => {\r\n    let l = line;\r\n    if (skipFields > 0) {\r\n      const parts = l.split(/\\s+/);\r\n      l = parts.slice(skipFields).join(\" \");\r\n    }\r\n    if (skipChars > 0) l = l.slice(skipChars);\r\n    if (checkChars < Infinity) l = l.slice(0, checkChars);\r\n    if (ignoreCase) l = l.toLowerCase();\r\n    return l;\r\n  };\r\n\r\n  const lines = content.split(\"\\n\");\r\n  const result: string[] = [];\r\n  let prev = \"\";\r\n  let prevLine = \"\";\r\n  let prevCount = 0;\r\n\r\n  for (const line of lines) {\r\n    const key = getKey(line);\r\n    if (key === prev) {\r\n      prevCount++;\r\n    } else {\r\n      if (prevCount > 0) {\r\n        const show = dupsOnly ? prevCount > 1 : uniqueOnly ? prevCount === 1 : true;\r\n        if (show)\r\n          result.push(count ? `${String(prevCount).padStart(7)} ${prevLine}` : prevLine);\r\n      }\r\n      prev = key;\r\n      prevLine = line;\r\n      prevCount = 1;\r\n    }\r\n  }\r\n  if (prevCount > 0 && prevLine !== \"\") {\r\n    const show = dupsOnly ? prevCount > 1 : uniqueOnly ? prevCount === 1 : true;\r\n    if (show)\r\n      result.push(count ? `${String(prevCount).padStart(7)} ${prevLine}` : prevLine);\r\n  }\r\n\r\n  return ok(result.join(\"\\n\") + (result.length ? \"\\n\" : \"\"));\r\n};\r\n\r\n/* ------------------------------------------------------------------ */\r\n/*  tr                                                                 */\r\n/* ------------------------------------------------------------------ */\r\n\r\nfunction expandRange(s: string): string {\r\n  return s.replace(/(.)-(.)/g, (_, a: string, b: string) => {\r\n    let result = \"\";\r\n    const start = a.charCodeAt(0);\r\n    const end = b.charCodeAt(0);\r\n    for (let i = start; i <= end; i++) result += String.fromCharCode(i);\r\n    return result;\r\n  });\r\n}\r\n\r\nfunction squeezeDups(s: string, chars: Set<string>): string {\r\n  let out = \"\";\r\n  let prev = \"\";\r\n  for (const ch of s) {\r\n    if (ch === prev && chars.has(ch)) continue;\r\n    out += ch;\r\n    prev = ch;\r\n  }\r\n  return out;\r\n}\r\n\r\nfunction buildComplement(set: string): string {\r\n  const setChars = new Set(set);\r\n  let result = \"\";\r\n  for (let i = 0; i < 128; i++) {\r\n    const ch = String.fromCharCode(i);\r\n    if (!setChars.has(ch)) result += ch;\r\n  }\r\n  return result;\r\n}\r\n\r\nconst tr_cmd: BuiltinFn = (args, _ctx, stdin) => {\r\n  const { flags, positional } = parseArgs(args, [\"d\", \"s\", \"c\", \"C\"]);\r\n  const deleteMode = flags.has(\"d\");\r\n  const squeeze = flags.has(\"s\");\r\n  const complement = flags.has(\"c\") || flags.has(\"C\");\r\n\r\n  if (positional.length === 0) return fail(\"tr: missing operand\\n\");\r\n  const content = stdin ?? \"\";\r\n\r\n  let set1 = expandCharClass(positional[0]);\r\n  const set2 = positional.length > 1 ? expandCharClass(positional[1]) : \"\";\r\n\r\n  set1 = expandRange(set1);\r\n  const expandedSet2 = set2 ? expandRange(set2) : \"\";\r\n\r\n  if (deleteMode) {\r\n    const chars = complement ? null : new Set(set1);\r\n    let out = \"\";\r\n    for (const ch of content) {\r\n      const inSet = chars ? chars.has(ch) : set1.includes(ch);\r\n      if (complement ? inSet : !inSet) out += ch;\r\n    }\r\n    if (squeeze && expandedSet2) {\r\n      const squeezeSet = new Set(expandedSet2);\r\n      out = squeezeDups(out, squeezeSet);\r\n    }\r\n    return ok(out);\r\n  }\r\n\r\n  if (positional.length < 2 && !squeeze) return fail(\"tr: missing operand\\n\");\r\n\r\n  if (squeeze && positional.length === 1) {\r\n    const squeezeSet = new Set(set1);\r\n    return ok(squeezeDups(content, squeezeSet));\r\n  }\r\n\r\n  let out = \"\";\r\n  const s1 = complement ? buildComplement(set1) : set1;\r\n  for (const ch of content) {\r\n    const idx = s1.indexOf(ch);\r\n    if (idx >= 0) {\r\n      const replacement =\r\n        idx < expandedSet2.length\r\n          ? expandedSet2[idx]\r\n          : expandedSet2[expandedSet2.length - 1] || ch;\r\n      out += replacement;\r\n    } else {\r\n      out += ch;\r\n    }\r\n  }\r\n\r\n  if (squeeze) {\r\n    const squeezeSet = new Set(expandedSet2);\r\n    out = squeezeDups(out, squeezeSet);\r\n  }\r\n  return ok(out);\r\n};\r\n\r\n/* ------------------------------------------------------------------ */\r\n/*  cut                                                                */\r\n/* ------------------------------------------------------------------ */\r\n\r\nfunction parseRangeSpec(spec: string): number[] {\r\n  const result: number[] = [];\r\n  for (const part of spec.split(\",\")) {\r\n    const range = part.match(/^(\\d+)-(\\d*)$/);\r\n    if (range) {\r\n      const start = parseInt(range[1]);\r\n      const end = range[2] ? parseInt(range[2]) : start + 100;\r\n      for (let i = start; i <= end; i++) result.push(i);\r\n    } else {\r\n      result.push(parseInt(part));\r\n    }\r\n  }\r\n  return result.filter((n) => !isNaN(n));\r\n}\r\n\r\nconst cut_cmd: BuiltinFn = (args, ctx, stdin) => {\r\n  let delimiter = \"\\t\";\r\n  let fields: number[] = [];\r\n  let bytes: number[] = [];\r\n  let chars: number[] = [];\r\n  let outputDelimiter: string | null = null;\r\n  const files: string[] = [];\r\n\r\n  for (let i = 0; i < args.length; i++) {\r\n    if (args[i] === \"-d\" && i + 1 < args.length) delimiter = args[++i];\r\n    else if (args[i] === \"-f\" && i + 1 < args.length)\r\n      fields = parseRangeSpec(args[++i]);\r\n    else if (args[i] === \"-b\" && i + 1 < args.length)\r\n      bytes = parseRangeSpec(args[++i]);\r\n    else if (args[i] === \"-c\" && i + 1 < args.length)\r\n      chars = parseRangeSpec(args[++i]);\r\n    else if (args[i] === \"--output-delimiter\" && i + 1 < args.length)\r\n      outputDelimiter = args[++i];\r\n    else if (!args[i].startsWith(\"-\")) files.push(args[i]);\r\n  }\r\n\r\n  const outDelim = outputDelimiter ?? delimiter;\r\n\r\n  const doCut = (content: string) => {\r\n    return content\r\n      .split(\"\\n\")\r\n      .map((line) => {\r\n        if (bytes.length > 0 || chars.length > 0) {\r\n          const indices = bytes.length > 0 ? bytes : chars;\r\n          return indices.map((idx) => line[idx - 1] ?? \"\").join(\"\");\r\n        }\r\n        const parts = line.split(delimiter);\r\n        return fields.map((f) => parts[f - 1] ?? \"\").join(outDelim);\r\n      })\r\n      .join(\"\\n\");\r\n  };\r\n\r\n  if (files.length === 0) return ok(doCut(stdin ?? \"\"));\r\n  let out = \"\";\r\n  for (const file of files) {\r\n    const p = resolvePath(file, ctx.cwd);\r\n    try {\r\n      out += doCut(ctx.volume.readFileSync(p, \"utf8\"));\r\n    } catch {\r\n      return fail(`cut: ${file}: No such file or directory\\n`);\r\n    }\r\n  }\r\n  return ok(out);\r\n};\r\n\r\n/* ------------------------------------------------------------------ */\r\n/*  Small text utilities                                               */\r\n/* ------------------------------------------------------------------ */\r\n\r\nconst rev_cmd: BuiltinFn = (args, ctx, stdin) => {\r\n  let content = stdin ?? \"\";\r\n  if (args.length > 0) {\r\n    const p = resolvePath(args[0], ctx.cwd);\r\n    try {\r\n      content = ctx.volume.readFileSync(p, \"utf8\");\r\n    } catch {\r\n      return fail(`rev: ${args[0]}: No such file or directory\\n`);\r\n    }\r\n  }\r\n  return ok(\r\n    content\r\n      .split(\"\\n\")\r\n      .map((l) => [...l].reverse().join(\"\"))\r\n      .join(\"\\n\"),\r\n  );\r\n};\r\n\r\nconst paste_cmd: BuiltinFn = (args, ctx, stdin) => {\r\n  const { opts, positional } = parseArgs(args, [\"s\"], [\"d\"]);\r\n  const delim = opts[\"d\"] || \"\\t\";\r\n\r\n  const contents: string[][] = [];\r\n  for (const file of positional) {\r\n    if (file === \"-\" && stdin) {\r\n      contents.push(stdin.split(\"\\n\"));\r\n      continue;\r\n    }\r\n    const p = resolvePath(file, ctx.cwd);\r\n    try {\r\n      contents.push(ctx.volume.readFileSync(p, \"utf8\").split(\"\\n\"));\r\n    } catch {\r\n      return fail(`paste: ${file}: No such file or directory\\n`);\r\n    }\r\n  }\r\n  if (contents.length === 0 && stdin) contents.push(stdin.split(\"\\n\"));\r\n\r\n  const maxLen = Math.max(...contents.map((c) => c.length));\r\n  let out = \"\";\r\n  for (let i = 0; i < maxLen; i++) {\r\n    out += contents.map((c) => c[i] ?? \"\").join(delim) + \"\\n\";\r\n  }\r\n  return ok(out);\r\n};\r\n\r\nconst comm_cmd: BuiltinFn = (args, ctx) => {\r\n  const { flags, positional } = parseArgs(args, [\"1\", \"2\", \"3\"]);\r\n  if (positional.length < 2) return fail(\"comm: missing operand\\n\");\r\n\r\n  const readFile = (f: string) => {\r\n    const p = resolvePath(f, ctx.cwd);\r\n    return ctx.volume.readFileSync(p, \"utf8\").split(\"\\n\").filter(Boolean);\r\n  };\r\n\r\n  try {\r\n    const a = readFile(positional[0]);\r\n    const b = readFile(positional[1]);\r\n    let out = \"\";\r\n    let ai = 0, bi = 0;\r\n    while (ai < a.length || bi < b.length) {\r\n      if (ai >= a.length) {\r\n        if (!flags.has(\"2\"))\r\n          out += \"\\t\" + (flags.has(\"1\") ? \"\" : \"\\t\") + b[bi] + \"\\n\";\r\n        bi++;\r\n      } else if (bi >= b.length) {\r\n        if (!flags.has(\"1\")) out += a[ai] + \"\\n\";\r\n        ai++;\r\n      } else if (a[ai] < b[bi]) {\r\n        if (!flags.has(\"1\")) out += a[ai] + \"\\n\";\r\n        ai++;\r\n      } else if (a[ai] > b[bi]) {\r\n        if (!flags.has(\"2\"))\r\n          out += \"\\t\" + (flags.has(\"1\") ? \"\" : \"\\t\") + b[bi] + \"\\n\";\r\n        bi++;\r\n      } else {\r\n        if (!flags.has(\"3\")) out += \"\\t\\t\" + a[ai] + \"\\n\";\r\n        ai++;\r\n        bi++;\r\n      }\r\n    }\r\n    return ok(out);\r\n  } catch (e) {\r\n    return fail(`comm: ${e instanceof Error ? e.message : String(e)}\\n`);\r\n  }\r\n};\r\n\r\n/* ------------------------------------------------------------------ */\r\n/*  diff                                                               */\r\n/* ------------------------------------------------------------------ */\r\n\r\nfunction simpleLCS(a: string[], b: string[]): string[] {\r\n  const m = a.length, n = b.length;\r\n  const dp: number[][] = Array.from({ length: m + 1 }, () =>\r\n    new Array(n + 1).fill(0),\r\n  );\r\n  for (let i = 1; i <= m; i++) {\r\n    for (let j = 1; j <= n; j++) {\r\n      dp[i][j] =\r\n        a[i - 1] === b[j - 1]\r\n          ? dp[i - 1][j - 1] + 1\r\n          : Math.max(dp[i - 1][j], dp[i][j - 1]);\r\n    }\r\n  }\r\n  const result: string[] = [];\r\n  let i = m, j = n;\r\n  while (i > 0 && j > 0) {\r\n    if (a[i - 1] === b[j - 1]) {\r\n      result.unshift(a[i - 1]);\r\n      i--;\r\n      j--;\r\n    } else if (dp[i - 1][j] > dp[i][j - 1]) i--;\r\n    else j--;\r\n  }\r\n  return result;\r\n}\r\n\r\nconst diff_cmd: BuiltinFn = (args, ctx) => {\r\n  const { flags, positional } = parseArgs(args, [\"u\", \"q\", \"r\", \"N\"]);\r\n  if (positional.length < 2) return fail(\"diff: missing operand\\n\");\r\n\r\n  const brief = flags.has(\"q\");\r\n  const unified = flags.has(\"u\");\r\n\r\n  const p1 = resolvePath(positional[0], ctx.cwd);\r\n  const p2 = resolvePath(positional[1], ctx.cwd);\r\n\r\n  try {\r\n    const a = ctx.volume.readFileSync(p1, \"utf8\").split(\"\\n\");\r\n    const b = ctx.volume.readFileSync(p2, \"utf8\").split(\"\\n\");\r\n\r\n    if (a.join(\"\\n\") === b.join(\"\\n\")) return ok();\r\n    if (brief)\r\n      return {\r\n        stdout: `Files ${positional[0]} and ${positional[1]} differ\\n`,\r\n        stderr: \"\",\r\n        exitCode: 1,\r\n      };\r\n\r\n    let out = \"\";\r\n    if (unified) {\r\n      out += `--- ${positional[0]}\\n+++ ${positional[1]}\\n`;\r\n      out += `@@ -1,${a.length} +1,${b.length} @@\\n`;\r\n      const lcs = simpleLCS(a, b);\r\n      let ai = 0, bi = 0, li = 0;\r\n      while (ai < a.length || bi < b.length) {\r\n        if (\r\n          li < lcs.length &&\r\n          ai < a.length && a[ai] === lcs[li] &&\r\n          bi < b.length && b[bi] === lcs[li]\r\n        ) {\r\n          out += ` ${a[ai]}\\n`;\r\n          ai++; bi++; li++;\r\n        } else if (ai < a.length && (li >= lcs.length || a[ai] !== lcs[li])) {\r\n          out += `-${a[ai]}\\n`;\r\n          ai++;\r\n        } else if (bi < b.length) {\r\n          out += `+${b[bi]}\\n`;\r\n          bi++;\r\n        }\r\n      }\r\n    } else {\r\n      for (let i = 0; i < Math.max(a.length, b.length); i++) {\r\n        if (i >= a.length) out += `> ${b[i]}\\n`;\r\n        else if (i >= b.length) out += `< ${a[i]}\\n`;\r\n        else if (a[i] !== b[i]) {\r\n          out += `< ${a[i]}\\n---\\n> ${b[i]}\\n`;\r\n        }\r\n      }\r\n    }\r\n\r\n    return { stdout: out, stderr: \"\", exitCode: 1 };\r\n  } catch (e) {\r\n    return fail(`diff: ${e instanceof Error ? e.message : String(e)}\\n`);\r\n  }\r\n};\r\n\r\n/* ------------------------------------------------------------------ */\r\n/*  seq / yes                                                          */\r\n/* ------------------------------------------------------------------ */\r\n\r\nconst seq_cmd: BuiltinFn = (args) => {\r\n  if (args.length === 0) return fail(\"seq: missing operand\\n\");\r\n  let first = 1, increment = 1, last = 1;\r\n  if (args.length === 1) {\r\n    last = parseFloat(args[0]);\r\n  } else if (args.length === 2) {\r\n    first = parseFloat(args[0]);\r\n    last = parseFloat(args[1]);\r\n  } else {\r\n    first = parseFloat(args[0]);\r\n    increment = parseFloat(args[1]);\r\n    last = parseFloat(args[2]);\r\n  }\r\n\r\n  const lines: string[] = [];\r\n  if (increment > 0) {\r\n    for (let i = first; i <= last; i += increment) lines.push(String(i));\r\n  } else if (increment < 0) {\r\n    for (let i = first; i >= last; i += increment) lines.push(String(i));\r\n  }\r\n  return ok(lines.join(\"\\n\") + (lines.length ? \"\\n\" : \"\"));\r\n};\r\n\r\nconst yes_cmd: BuiltinFn = (args) => {\r\n  const text = args.length > 0 ? args.join(\" \") : \"y\";\r\n  return ok((text + \"\\n\").repeat(YES_REPEAT_COUNT));\r\n};\r\n\r\n/* ------------------------------------------------------------------ */\r\n/*  Registry                                                           */\r\n/* ------------------------------------------------------------------ */\r\n\r\nexport const textProcessingCommands: [string, BuiltinFn][] = [\r\n  [\"echo\", echo],\r\n  [\"printf\", printf_cmd],\r\n  [\"grep\", grep_cmd],\r\n  [\"egrep\", grep_cmd],\r\n  [\"fgrep\", grep_cmd],\r\n  [\"sed\", sed_cmd],\r\n  [\"sort\", sort_cmd],\r\n  [\"uniq\", uniq_cmd],\r\n  [\"tr\", tr_cmd],\r\n  [\"cut\", cut_cmd],\r\n  [\"rev\", rev_cmd],\r\n  [\"paste\", paste_cmd],\r\n  [\"comm\", comm_cmd],\r\n  [\"diff\", diff_cmd],\r\n  [\"seq\", seq_cmd],\r\n  [\"yes\", yes_cmd],\r\n];\r\n","import type { BuiltinFn } from \"../shell-types\";\r\nimport { ok, fail, resolvePath, globToRegex } from \"../shell-helpers\";\r\nimport { LS_BLOCK_SIZE } from \"../../constants/config\";\r\n\r\n/* ------------------------------------------------------------------ */\r\n/*  Helpers                                                            */\r\n/* ------------------------------------------------------------------ */\r\n\r\nfunction matchSize(fileSize: number, spec: string): boolean {\r\n  const m = spec.match(/^([+-]?)(\\d+)([cwbkMG]?)$/);\r\n  if (!m) return true;\r\n  const op = m[1];\r\n  let n = parseInt(m[2]);\r\n  const unit = m[3];\r\n  if (unit === \"c\") {\r\n    /* bytes */\r\n  } else if (unit === \"w\") n *= 2;\r\n  else if (unit === \"k\") n *= 1024;\r\n  else if (unit === \"M\") n *= 1048576;\r\n  else if (unit === \"G\") n *= 1073741824;\r\n  else n *= LS_BLOCK_SIZE;\r\n\r\n  if (op === \"+\") return fileSize > n;\r\n  if (op === \"-\") return fileSize < n;\r\n  return fileSize === n;\r\n}\r\n\r\nfunction matchMtime(mtimeMs: number, spec: string): boolean {\r\n  const m = spec.match(/^([+-]?)(\\d+)$/);\r\n  if (!m) return true;\r\n  const op = m[1];\r\n  const days = parseInt(m[2]);\r\n  const age = (Date.now() - mtimeMs) / 86400000;\r\n  if (op === \"+\") return age > days;\r\n  if (op === \"-\") return age < days;\r\n  return Math.floor(age) === days;\r\n}\r\n\r\n/* ------------------------------------------------------------------ */\r\n/*  Commands                                                           */\r\n/* ------------------------------------------------------------------ */\r\n\r\nconst find_cmd: BuiltinFn = async (args, ctx) => {\r\n  let searchDir = ctx.cwd;\r\n  let namePattern = \"\";\r\n  let inamePattern = \"\";\r\n  let pathPattern = \"\";\r\n  let typeFilter = \"\";\r\n  let maxDepth = Infinity;\r\n  let minDepth = 0;\r\n  let sizeFilter = \"\";\r\n  let mtimeFilter = \"\";\r\n  let execCmd = \"\";\r\n  let execArgs: string[] = [];\r\n  let deleteMode = false;\r\n  let print0 = false;\r\n  let printMode = true;\r\n  let emptyFilter = false;\r\n\r\n  for (let i = 0; i < args.length; i++) {\r\n    const a = args[i];\r\n    if (a === \"-name\" && i + 1 < args.length) {\r\n      namePattern = args[++i];\r\n    } else if (a === \"-iname\" && i + 1 < args.length) {\r\n      inamePattern = args[++i];\r\n    } else if (a === \"-path\" || (a === \"-wholename\" && i + 1 < args.length)) {\r\n      pathPattern = args[++i];\r\n    } else if (a === \"-type\" && i + 1 < args.length) {\r\n      typeFilter = args[++i];\r\n    } else if (a === \"-maxdepth\" && i + 1 < args.length) {\r\n      maxDepth = parseInt(args[++i]);\r\n    } else if (a === \"-mindepth\" && i + 1 < args.length) {\r\n      minDepth = parseInt(args[++i]);\r\n    } else if (a === \"-size\" && i + 1 < args.length) {\r\n      sizeFilter = args[++i];\r\n    } else if (a === \"-mtime\" && i + 1 < args.length) {\r\n      mtimeFilter = args[++i];\r\n    } else if (a === \"-empty\") {\r\n      emptyFilter = true;\r\n    } else if (a === \"-delete\") {\r\n      deleteMode = true;\r\n      printMode = false;\r\n    } else if (a === \"-print0\") {\r\n      print0 = true;\r\n    } else if (a === \"-print\") {\r\n      printMode = true;\r\n    } else if (a === \"-exec\") {\r\n      const cmdParts: string[] = [];\r\n      i++;\r\n      while (i < args.length && args[i] !== \";\") {\r\n        cmdParts.push(args[i]);\r\n        i++;\r\n      }\r\n      if (cmdParts.length > 0) {\r\n        execCmd = cmdParts[0];\r\n        execArgs = cmdParts.slice(1);\r\n        printMode = false;\r\n      }\r\n    } else if (!a.startsWith(\"-\")) {\r\n      searchDir = resolvePath(a, ctx.cwd);\r\n    }\r\n  }\r\n\r\n  const nameRe = namePattern\r\n    ? new RegExp(\"^\" + globToRegex(namePattern) + \"$\")\r\n    : null;\r\n  const inameRe = inamePattern\r\n    ? new RegExp(\"^\" + globToRegex(inamePattern) + \"$\", \"i\")\r\n    : null;\r\n  const pathRe = pathPattern ? new RegExp(globToRegex(pathPattern)) : null;\r\n\r\n  const results: string[] = [];\r\n  let execOut = \"\";\r\n\r\n  const walk = (dir: string, depth: number) => {\r\n    if (depth > maxDepth) return;\r\n    try {\r\n      for (const name of ctx.volume.readdirSync(dir)) {\r\n        const full = dir === \"/\" ? `/${name}` : `${dir}/${name}`;\r\n        try {\r\n          const st = ctx.volume.statSync(full);\r\n          const isDir = st.isDirectory();\r\n          const isFile = st.isFile();\r\n\r\n          if (depth >= minDepth) {\r\n            let match = true;\r\n            if (typeFilter) {\r\n              if (typeFilter === \"f\" && !isFile) match = false;\r\n              if (typeFilter === \"d\" && !isDir) match = false;\r\n            }\r\n            if (nameRe && !nameRe.test(name)) match = false;\r\n            if (inameRe && !inameRe.test(name)) match = false;\r\n            if (pathRe && !pathRe.test(full)) match = false;\r\n            if (sizeFilter && isFile) {\r\n              const fileSize = ctx.volume.readFileSync(full).length;\r\n              if (!matchSize(fileSize, sizeFilter)) match = false;\r\n            }\r\n            if (mtimeFilter) {\r\n              const mtime = st.mtimeMs || Date.now();\r\n              if (!matchMtime(mtime, mtimeFilter)) match = false;\r\n            }\r\n            if (emptyFilter) {\r\n              if (isDir) {\r\n                try {\r\n                  if (ctx.volume.readdirSync(full).length > 0) match = false;\r\n                } catch {\r\n                  match = false;\r\n                }\r\n              } else if (isFile) {\r\n                if (ctx.volume.readFileSync(full).length > 0) match = false;\r\n              } else match = false;\r\n            }\r\n            if (match) results.push(full);\r\n          }\r\n          if (isDir) walk(full, depth + 1);\r\n        } catch {\r\n          /* skip */\r\n        }\r\n      }\r\n    } catch {\r\n      /* skip */\r\n    }\r\n  };\r\n\r\n  walk(searchDir, 1);\r\n\r\n  if (deleteMode) {\r\n    for (const path of results.reverse()) {\r\n      try {\r\n        const st = ctx.volume.statSync(path);\r\n        if (st.isDirectory()) ctx.volume.rmdirSync(path);\r\n        else ctx.volume.unlinkSync(path);\r\n      } catch {\r\n        /* */\r\n      }\r\n    }\r\n    return ok();\r\n  }\r\n\r\n  if (execCmd) {\r\n    for (const path of results) {\r\n      const expandedArgs = execArgs.map((a) => (a === \"{}\" ? path : a));\r\n      const fullCmd = [execCmd, ...expandedArgs].join(\" \");\r\n      const result = await ctx.exec(fullCmd, { cwd: ctx.cwd, env: ctx.env });\r\n      execOut += result.stdout;\r\n    }\r\n    return ok(execOut);\r\n  }\r\n\r\n  if (print0) return ok(results.join(\"\\0\"));\r\n  if (printMode) return ok(results.join(\"\\n\") + (results.length ? \"\\n\" : \"\"));\r\n  return ok();\r\n};\r\n\r\nconst xargs_cmd: BuiltinFn = async (args, ctx, stdin) => {\r\n  if (!stdin) return ok();\r\n\r\n  let maxArgs = Infinity;\r\n  let placeholder = \"\";\r\n  let nullDelim = false;\r\n  const cmdParts: string[] = [];\r\n\r\n  for (let i = 0; i < args.length; i++) {\r\n    if (args[i] === \"-n\" && i + 1 < args.length)\r\n      maxArgs = parseInt(args[++i]) || 1;\r\n    else if (args[i] === \"-I\" && i + 1 < args.length) placeholder = args[++i];\r\n    else if (args[i] === \"-0\" || args[i] === \"--null\") nullDelim = true;\r\n    else if (args[i] === \"-t\") {\r\n      /* */\r\n    } else cmdParts.push(args[i]);\r\n  }\r\n\r\n  if (cmdParts.length === 0) cmdParts.push(\"echo\");\r\n\r\n  const delim = nullDelim ? \"\\0\" : /\\s+/;\r\n  const items = stdin.trim().split(delim).filter(Boolean);\r\n  const cmd = cmdParts.join(\" \");\r\n  let out = \"\";\r\n  let err = \"\";\r\n  let lastCode = 0;\r\n\r\n  if (placeholder) {\r\n    for (const item of items) {\r\n      const expanded = cmd.replace(\r\n        new RegExp(placeholder.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\"), \"g\"),\r\n        item,\r\n      );\r\n      const result = await ctx.exec(expanded, { cwd: ctx.cwd, env: ctx.env });\r\n      out += result.stdout;\r\n      err += result.stderr;\r\n      lastCode = result.exitCode;\r\n    }\r\n  } else if (maxArgs < Infinity) {\r\n    for (let i = 0; i < items.length; i += maxArgs) {\r\n      const batch = items.slice(i, i + maxArgs).join(\" \");\r\n      const result = await ctx.exec(`${cmd} ${batch}`, {\r\n        cwd: ctx.cwd,\r\n        env: ctx.env,\r\n      });\r\n      out += result.stdout;\r\n      err += result.stderr;\r\n      lastCode = result.exitCode;\r\n    }\r\n  } else {\r\n    const result = await ctx.exec(`${cmd} ${items.join(\" \")}`, {\r\n      cwd: ctx.cwd,\r\n      env: ctx.env,\r\n    });\r\n    out += result.stdout;\r\n    err += result.stderr;\r\n    lastCode = result.exitCode;\r\n  }\r\n\r\n  return { stdout: out, stderr: err, exitCode: lastCode };\r\n};\r\n\r\n/* ------------------------------------------------------------------ */\r\n/*  Registry                                                           */\r\n/* ------------------------------------------------------------------ */\r\n\r\nexport const searchCommands: [string, BuiltinFn][] = [\r\n  [\"find\", find_cmd],\r\n  [\"xargs\", xargs_cmd],\r\n];\r\n","import type { BuiltinFn, ShellContext } from \"../shell-types\";\r\nimport {\r\n  ok,\r\n  fail,\r\n  EXIT_FAIL,\r\n  resolvePath,\r\n  parseArgs,\r\n  pathModule,\r\n  MONTHS_SHORT,\r\n  MONTHS_LONG,\r\n  DAYS_SHORT,\r\n  DAYS_LONG,\r\n} from \"../shell-helpers\";\r\n\r\n// set by the registry so `which` and `type` can check builtins\r\nlet _builtins: Map<string, BuiltinFn> | null = null;\r\n\r\nexport function setBuiltinsRef(b: Map<string, BuiltinFn>): void {\r\n  _builtins = b;\r\n}\r\n\r\n/* ------------------------------------------------------------------ */\r\n/*  Commands                                                           */\r\n/* ------------------------------------------------------------------ */\r\n\r\nconst exportCmd: BuiltinFn = (args, ctx) => {\r\n  if (args.length === 0) {\r\n    let out = \"\";\r\n    for (const [k, v] of Object.entries(ctx.env)) {\r\n      out += `declare -x ${k}=\"${v}\"\\n`;\r\n    }\r\n    return ok(out);\r\n  }\r\n  for (const arg of args) {\r\n    const eq = arg.indexOf(\"=\");\r\n    if (eq > 0) {\r\n      ctx.env[arg.slice(0, eq)] = arg.slice(eq + 1);\r\n    }\r\n  }\r\n  return ok();\r\n};\r\n\r\nconst unset: BuiltinFn = (args, ctx) => {\r\n  for (const name of args) delete ctx.env[name];\r\n  return ok();\r\n};\r\n\r\nconst envCmd: BuiltinFn = (_args, ctx) => {\r\n  let out = \"\";\r\n  for (const [k, v] of Object.entries(ctx.env)) out += `${k}=${v}\\n`;\r\n  return ok(out);\r\n};\r\n\r\nconst which: BuiltinFn = (args, ctx) => {\r\n  if (args.length === 0) return fail(\"which: missing argument\\n\");\r\n\r\n  const { flags } = parseArgs(args, [\"a\"]);\r\n  const showAll = flags.has(\"a\");\r\n  const names = args.filter((a) => !a.startsWith(\"-\"));\r\n\r\n  let out = \"\";\r\n  for (const name of names) {\r\n    const found: string[] = [];\r\n\r\n    if (_builtins?.has(name)) found.push(`${name}: shell built-in command`);\r\n\r\n    const knownBins: Record<string, string> = {\r\n      node: \"/usr/local/bin/node\",\r\n      npm: \"/usr/local/bin/npm\",\r\n      npx: \"/usr/local/bin/npx\",\r\n      pnpm: \"/usr/local/bin/pnpm\",\r\n      yarn: \"/usr/local/bin/yarn\",\r\n      bun: \"/usr/local/bin/bun\",\r\n      bunx: \"/usr/local/bin/bunx\",\r\n    };\r\n    if (knownBins[name]) found.push(knownBins[name]);\r\n\r\n    const binPath = `/node_modules/.bin/${name}`;\r\n    if (ctx.volume.existsSync(binPath)) found.push(binPath);\r\n\r\n    const pathDirs = (ctx.env.PATH || \"\").split(\":\").filter(Boolean);\r\n    for (const dir of pathDirs) {\r\n      const candidate = `${dir}/${name}`;\r\n      if (ctx.volume.existsSync(candidate)) {\r\n        if (!found.includes(candidate)) found.push(candidate);\r\n      }\r\n    }\r\n\r\n    if (found.length === 0) {\r\n      out += `${name} not found\\n`;\r\n    } else if (showAll) {\r\n      for (const f of found) out += f + \"\\n\";\r\n    } else {\r\n      out += found[0] + \"\\n\";\r\n    }\r\n  }\r\n  return out.includes(\"not found\")\r\n    ? { stdout: out, stderr: \"\", exitCode: 1 }\r\n    : ok(out);\r\n};\r\n\r\nconst typeCmd: BuiltinFn = (args, ctx) => {\r\n  if (args.length === 0) return fail(\"type: missing argument\\n\");\r\n  const name = args[0];\r\n  if (_builtins?.has(name)) return ok(`${name} is a shell builtin\\n`);\r\n\r\n  const w = which([name], ctx);\r\n  if (typeof w === \"object\" && \"exitCode\" in w && w.exitCode === 0) {\r\n    return ok(`${name} is ${w.stdout.trim()}\\n`);\r\n  }\r\n  return fail(`type: ${name}: not found\\n`);\r\n};\r\n\r\nconst trueCmd: BuiltinFn = () => ok();\r\nconst falseCmd: BuiltinFn = () => EXIT_FAIL;\r\n\r\nconst exitCmd: BuiltinFn = (args) => {\r\n  const code = args[0] ? parseInt(args[0], 10) : 0;\r\n  return { stdout: \"\", stderr: \"\", exitCode: code };\r\n};\r\n\r\nconst clear: BuiltinFn = () => ok(\"\\x1b[2J\\x1b[H\");\r\n\r\n/* ------------------------------------------------------------------ */\r\n/*  test / [                                                           */\r\n/* ------------------------------------------------------------------ */\r\n\r\nfunction evalTest(args: string[], ctx: ShellContext): boolean {\r\n  if (args.length === 0) return false;\r\n\r\n  if (args[0] === \"!\") return !evalTest(args.slice(1), ctx);\r\n\r\n  if (args[0] === \"(\" && args[args.length - 1] === \")\") {\r\n    return evalTest(args.slice(1, -1), ctx);\r\n  }\r\n\r\n  for (let i = 0; i < args.length; i++) {\r\n    if (args[i] === \"-o\") {\r\n      return (\r\n        evalTest(args.slice(0, i), ctx) || evalTest(args.slice(i + 1), ctx)\r\n      );\r\n    }\r\n  }\r\n  for (let i = 0; i < args.length; i++) {\r\n    if (args[i] === \"-a\") {\r\n      return (\r\n        evalTest(args.slice(0, i), ctx) && evalTest(args.slice(i + 1), ctx)\r\n      );\r\n    }\r\n  }\r\n\r\n  if (args.length === 1) return args[0].length > 0;\r\n\r\n  if (args.length === 2) {\r\n    const [flag, val] = args;\r\n    const p = resolvePath(val, ctx.cwd);\r\n\r\n    if (flag === \"-f\") {\r\n      try { return ctx.volume.statSync(p).isFile(); } catch { return false; }\r\n    }\r\n    if (flag === \"-d\") {\r\n      try { return ctx.volume.statSync(p).isDirectory(); } catch { return false; }\r\n    }\r\n    if (flag === \"-e\") return ctx.volume.existsSync(p);\r\n    if (flag === \"-L\" || flag === \"-h\") return ctx.volume.existsSync(p);\r\n    if (flag === \"-s\") {\r\n      try { return ctx.volume.readFileSync(p).length > 0; } catch { return false; }\r\n    }\r\n    if (flag === \"-r\" || flag === \"-w\") return ctx.volume.existsSync(p);\r\n    if (flag === \"-x\") {\r\n      if (ctx.volume.existsSync(p)) {\r\n        const ext = pathModule.extname(p);\r\n        return ext === \".sh\" || ext === \"\" || p.includes(\"/bin/\");\r\n      }\r\n      return false;\r\n    }\r\n    if (flag === \"-n\") return val.length > 0;\r\n    if (flag === \"-z\") return val.length === 0;\r\n    if (flag === \"-t\") return false;\r\n  }\r\n\r\n  if (args.length === 3) {\r\n    const [left, op, right] = args;\r\n    if (op === \"=\" || op === \"==\") return left === right;\r\n    if (op === \"!=\") return left !== right;\r\n    if (op === \"-eq\") return parseInt(left) === parseInt(right);\r\n    if (op === \"-ne\") return parseInt(left) !== parseInt(right);\r\n    if (op === \"-lt\") return parseInt(left) < parseInt(right);\r\n    if (op === \"-le\") return parseInt(left) <= parseInt(right);\r\n    if (op === \"-gt\") return parseInt(left) > parseInt(right);\r\n    if (op === \"-ge\") return parseInt(left) >= parseInt(right);\r\n\r\n    if (op === \"-nt\" || op === \"-ot\" || op === \"-ef\") {\r\n      try {\r\n        const sl = ctx.volume.statSync(resolvePath(left, ctx.cwd));\r\n        const sr = ctx.volume.statSync(resolvePath(right, ctx.cwd));\r\n        if (op === \"-nt\") return (sl.mtimeMs || 0) > (sr.mtimeMs || 0);\r\n        if (op === \"-ot\") return (sl.mtimeMs || 0) < (sr.mtimeMs || 0);\r\n        if (op === \"-ef\")\r\n          return resolvePath(left, ctx.cwd) === resolvePath(right, ctx.cwd);\r\n      } catch {\r\n        return false;\r\n      }\r\n    }\r\n  }\r\n\r\n  return false;\r\n}\r\n\r\nconst test_cmd: BuiltinFn = (args, ctx) => {\r\n  const testArgs = [...args];\r\n  if (testArgs[testArgs.length - 1] === \"]\") testArgs.pop();\r\n  return { stdout: \"\", stderr: \"\", exitCode: evalTest(testArgs, ctx) ? 0 : 1 };\r\n};\r\n\r\n/* ------------------------------------------------------------------ */\r\n/*  date                                                               */\r\n/* ------------------------------------------------------------------ */\r\n\r\nfunction getTimezoneAbbr(d: Date): string {\r\n  const str = d.toTimeString();\r\n  const m = str.match(/\\((.+?)\\)/);\r\n  if (m) {\r\n    const words = m[1].split(\" \");\r\n    if (words.length === 1) return words[0];\r\n    return words.map((w) => w[0]).join(\"\");\r\n  }\r\n  const off = -d.getTimezoneOffset();\r\n  const sign = off >= 0 ? \"+\" : \"-\";\r\n  const h = String(Math.floor(Math.abs(off) / 60)).padStart(2, \"0\");\r\n  const min = String(Math.abs(off) % 60).padStart(2, \"0\");\r\n  return `${sign}${h}${min}`;\r\n}\r\n\r\nfunction formatDate(d: Date, fmt: string, utc: boolean): string {\r\n  const g = utc\r\n    ? {\r\n        Y: d.getUTCFullYear(), m: d.getUTCMonth(), d: d.getUTCDate(),\r\n        H: d.getUTCHours(), M: d.getUTCMinutes(), S: d.getUTCSeconds(),\r\n        w: d.getUTCDay(),\r\n      }\r\n    : {\r\n        Y: d.getFullYear(), m: d.getMonth(), d: d.getDate(),\r\n        H: d.getHours(), M: d.getMinutes(), S: d.getSeconds(),\r\n        w: d.getDay(),\r\n      };\r\n  let out = \"\";\r\n  for (let i = 0; i < fmt.length; i++) {\r\n    if (fmt[i] === \"%\" && i + 1 < fmt.length) {\r\n      const s = fmt[++i];\r\n      if (s === \"Y\") out += g.Y;\r\n      else if (s === \"y\") out += String(g.Y).slice(-2);\r\n      else if (s === \"m\") out += String(g.m + 1).padStart(2, \"0\");\r\n      else if (s === \"d\") out += String(g.d).padStart(2, \"0\");\r\n      else if (s === \"e\") out += String(g.d).padStart(2, \" \");\r\n      else if (s === \"H\") out += String(g.H).padStart(2, \"0\");\r\n      else if (s === \"M\") out += String(g.M).padStart(2, \"0\");\r\n      else if (s === \"S\") out += String(g.S).padStart(2, \"0\");\r\n      else if (s === \"I\") out += String(g.H % 12 || 12).padStart(2, \"0\");\r\n      else if (s === \"p\") out += g.H < 12 ? \"AM\" : \"PM\";\r\n      else if (s === \"P\") out += g.H < 12 ? \"am\" : \"pm\";\r\n      else if (s === \"a\") out += DAYS_SHORT[g.w];\r\n      else if (s === \"A\") out += DAYS_LONG[g.w];\r\n      else if (s === \"b\" || s === \"h\") out += MONTHS_SHORT[g.m];\r\n      else if (s === \"B\") out += MONTHS_LONG[g.m];\r\n      else if (s === \"w\") out += g.w;\r\n      else if (s === \"u\") out += g.w === 0 ? 7 : g.w;\r\n      else if (s === \"j\") {\r\n        const jan1 = new Date(g.Y, 0, 1);\r\n        const diff = d.getTime() - jan1.getTime();\r\n        out += String(Math.floor(diff / 86400000) + 1).padStart(3, \"0\");\r\n      } else if (s === \"s\") out += Math.floor(d.getTime() / 1000);\r\n      else if (s === \"N\") out += String(d.getMilliseconds() * 1000000).padStart(9, \"0\");\r\n      else if (s === \"n\") out += \"\\n\";\r\n      else if (s === \"t\") out += \"\\t\";\r\n      else if (s === \"T\")\r\n        out += `${String(g.H).padStart(2, \"0\")}:${String(g.M).padStart(2, \"0\")}:${String(g.S).padStart(2, \"0\")}`;\r\n      else if (s === \"R\")\r\n        out += `${String(g.H).padStart(2, \"0\")}:${String(g.M).padStart(2, \"0\")}`;\r\n      else if (s === \"F\")\r\n        out += `${g.Y}-${String(g.m + 1).padStart(2, \"0\")}-${String(g.d).padStart(2, \"0\")}`;\r\n      else if (s === \"D\")\r\n        out += `${String(g.m + 1).padStart(2, \"0\")}/${String(g.d).padStart(2, \"0\")}/${String(g.Y).slice(-2)}`;\r\n      else if (s === \"Z\") out += utc ? \"UTC\" : getTimezoneAbbr(d);\r\n      else if (s === \"%\") out += \"%\";\r\n      else out += \"%\" + s;\r\n    } else {\r\n      out += fmt[i];\r\n    }\r\n  }\r\n  return out;\r\n}\r\n\r\nconst date_cmd: BuiltinFn = (args) => {\r\n  const { flags, opts, positional } = parseArgs(args, [\"u\", \"R\", \"I\"], [\"d\"]);\r\n  const utc = flags.has(\"u\");\r\n  const rfc = flags.has(\"R\");\r\n  const iso = flags.has(\"I\");\r\n  const dateStr = opts[\"d\"];\r\n\r\n  const d = dateStr ? new Date(dateStr) : new Date();\r\n  if (isNaN(d.getTime())) return fail(`date: invalid date '${dateStr}'\\n`);\r\n\r\n  const fmt = positional.find((a) => a.startsWith(\"+\"));\r\n  if (fmt) return ok(formatDate(d, fmt.slice(1), utc) + \"\\n\");\r\n  if (rfc) return ok(d.toUTCString() + \"\\n\");\r\n  if (iso) return ok(d.toISOString().slice(0, 10) + \"\\n\");\r\n\r\n  const day = DAYS_SHORT[utc ? d.getUTCDay() : d.getDay()];\r\n  const mon = MONTHS_SHORT[utc ? d.getUTCMonth() : d.getMonth()];\r\n  const date = utc ? d.getUTCDate() : d.getDate();\r\n  const hh = String(utc ? d.getUTCHours() : d.getHours()).padStart(2, \"0\");\r\n  const mm = String(utc ? d.getUTCMinutes() : d.getMinutes()).padStart(2, \"0\");\r\n  const ss = String(utc ? d.getUTCSeconds() : d.getSeconds()).padStart(2, \"0\");\r\n  const year = utc ? d.getUTCFullYear() : d.getFullYear();\r\n  const tz = utc ? \"UTC\" : getTimezoneAbbr(d);\r\n\r\n  return ok(\r\n    `${day} ${mon} ${String(date).padStart(2, \" \")} ${hh}:${mm}:${ss} ${tz} ${year}\\n`,\r\n  );\r\n};\r\n\r\n/* ------------------------------------------------------------------ */\r\n/*  sleep                                                              */\r\n/* ------------------------------------------------------------------ */\r\n\r\nconst sleep_cmd: BuiltinFn = async (args) => {\r\n  const seconds = parseFloat(args[0] || \"0\");\r\n  if (seconds > 0) await new Promise((r) => setTimeout(r, seconds * 1000));\r\n  return ok();\r\n};\r\n\r\n/* ------------------------------------------------------------------ */\r\n/*  Registry                                                           */\r\n/* ------------------------------------------------------------------ */\r\n\r\nexport const shellEnvCommands: [string, BuiltinFn][] = [\r\n  [\"export\", exportCmd],\r\n  [\"unset\", unset],\r\n  [\"env\", envCmd],\r\n  [\"which\", which],\r\n  [\"type\", typeCmd],\r\n  [\"true\", trueCmd],\r\n  [\"false\", falseCmd],\r\n  [\":\", trueCmd],\r\n  [\"exit\", exitCmd],\r\n  [\"clear\", clear],\r\n  [\"test\", test_cmd],\r\n  [\"[\", test_cmd],\r\n  [\"date\", date_cmd],\r\n  [\"sleep\", sleep_cmd],\r\n];\r\n","// Assembles all builtin commands from category modules into one map.\r\n\r\nimport type { BuiltinFn } from \"./shell-types\";\r\nimport { fileOpsCommands } from \"./commands/file-ops\";\r\nimport { directoryCommands } from \"./commands/directory\";\r\nimport { textProcessingCommands } from \"./commands/text-processing\";\r\nimport { searchCommands } from \"./commands/search\";\r\nimport { shellEnvCommands, setBuiltinsRef } from \"./commands/shell-env\";\r\n\r\nexport const builtins = new Map<string, BuiltinFn>([\r\n  ...fileOpsCommands,\r\n  ...directoryCommands,\r\n  ...textProcessingCommands,\r\n  ...searchCommands,\r\n  ...shellEnvCommands,\r\n]);\r\n\r\n// shell-env needs the builtins ref for `which` and `type`\r\nsetBuiltinsRef(builtins);\r\n","// Shell interpreter: pipes, &&/||/;, redirections, variable expansion,\r\n// globbing, command substitution, builtins, and registered commands.\r\n\r\nimport type {\r\n  ShellResult,\r\n  ShellContext,\r\n  ShellCommand,\r\n  ListNode,\r\n  PipelineNode,\r\n  CommandNode,\r\n  BuiltinFn,\r\n} from \"./shell-types\";\r\nimport type { MemoryVolume } from \"../memory-volume\";\r\nimport { parse, expandGlob } from \"./shell-parser\";\r\nimport { builtins } from \"./shell-builtins\";\r\n\r\n/* ------------------------------------------------------------------ */\r\n/*  NodepodShell                                                        */\r\n/* ------------------------------------------------------------------ */\r\n\r\n// In a worker, the shell can't spawn new workers directly.\r\n// This callback sends a spawn request to the main thread's ProcessManager.\r\nexport type SpawnChildCallback = (\r\n  command: string,\r\n  args: string[],\r\n  opts?: { cwd?: string; env?: Record<string, string>; stdio?: \"pipe\" | \"inherit\" },\r\n) => Promise<{ pid: number; exitCode: number; stdout: string; stderr: string }>;\r\n\r\nexport class NodepodShell {\r\n  private volume: MemoryVolume;\r\n  private cwd: string;\r\n  private env: Record<string, string>;\r\n  private commands = new Map<string, ShellCommand>();\r\n  private lastExit = 0;\r\n  private aliases = new Map<string, string>();\r\n  // serializes concurrent exec() calls to prevent cwd save/restore races\r\n  private _execQueue: Promise<ShellResult> = Promise.resolve({ stdout: \"\", stderr: \"\", exitCode: 0 });\r\n\r\n  private _spawnChild: SpawnChildCallback | null = null;\r\n\r\n  constructor(\r\n    volume: MemoryVolume,\r\n    opts?: { cwd?: string; env?: Record<string, string> },\r\n  ) {\r\n    this.volume = volume;\r\n    this.cwd = opts?.cwd ?? \"/\";\r\n    this.env = opts?.env ? { ...opts.env } : {};\r\n    this.env.PWD = this.cwd;\r\n  }\r\n\r\n  registerCommand(cmd: ShellCommand): void {\r\n    this.commands.set(cmd.name, cmd);\r\n  }\r\n\r\n  setSpawnChildCallback(cb: SpawnChildCallback | null): void {\r\n    this._spawnChild = cb;\r\n  }\r\n\r\n  getSpawnChildCallback(): SpawnChildCallback | null {\r\n    return this._spawnChild;\r\n  }\r\n\r\n  getCwd(): string {\r\n    return this.cwd;\r\n  }\r\n\r\n  setCwd(cwd: string): void {\r\n    this.cwd = cwd;\r\n    this.env.PWD = cwd;\r\n  }\r\n\r\n  getEnv(): Record<string, string> {\r\n    return this.env;\r\n  }\r\n\r\n  async exec(\r\n    command: string,\r\n    opts?: { cwd?: string; env?: Record<string, string> },\r\n  ): Promise<ShellResult> {\r\n    // serialize cwd/env-overriding calls to prevent save/restore races\r\n    if (opts?.cwd || opts?.env) {\r\n      const prev = this._execQueue;\r\n      let resolve!: (r: ShellResult) => void;\r\n      this._execQueue = new Promise<ShellResult>((r) => { resolve = r; });\r\n      await prev.catch(() => {});\r\n      try {\r\n        const r = await this._execInner(command, opts);\r\n        resolve(r);\r\n        return r;\r\n      } catch (e) {\r\n        const err: ShellResult = {\r\n          stdout: \"\",\r\n          stderr: `shell: ${e instanceof Error ? e.message : String(e)}\\n`,\r\n          exitCode: 1,\r\n        };\r\n        resolve(err);\r\n        return err;\r\n      }\r\n    }\r\n    return this._execInner(command, opts);\r\n  }\r\n\r\n  private async _execInner(\r\n    command: string,\r\n    opts?: { cwd?: string; env?: Record<string, string> },\r\n  ): Promise<ShellResult> {\r\n    const prevCwd = this.cwd;\r\n    const prevEnv = { ...this.env };\r\n\r\n    if (opts?.cwd) {\r\n      this.cwd = opts.cwd;\r\n      this.env.PWD = opts.cwd;\r\n    }\r\n    if (opts?.env) {\r\n      Object.assign(this.env, opts.env);\r\n    }\r\n\r\n    try {\r\n      const expanded = await this.expandCommandSubstitution(command);\r\n\r\n      const ast = parse(expanded, this.env, this.lastExit);\r\n      return await this.execList(ast);\r\n    } catch (e) {\r\n      return {\r\n        stdout: \"\",\r\n        stderr: `shell: ${e instanceof Error ? e.message : String(e)}\\n`,\r\n        exitCode: 1,\r\n      };\r\n    } finally {\r\n      // only restore cwd if cd didn't change it\r\n      if (opts?.cwd && this.cwd === opts.cwd) {\r\n        this.cwd = prevCwd;\r\n        this.env.PWD = prevCwd;\r\n      }\r\n      if (opts?.env) {\r\n        for (const key of Object.keys(opts.env)) {\r\n          if (key in prevEnv) {\r\n            this.env[key] = prevEnv[key];\r\n          } else {\r\n            delete this.env[key];\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  /* ---------------------------------------------------------------- */\r\n  /*  AST execution                                                    */\r\n  /* ---------------------------------------------------------------- */\r\n\r\n  private async execList(list: ListNode): Promise<ShellResult> {\r\n    let result: ShellResult = { stdout: \"\", stderr: \"\", exitCode: 0 };\r\n\r\n    for (let i = 0; i < list.entries.length; i++) {\r\n      const entry = list.entries[i];\r\n      const pipeResult = await this.execPipeline(entry.pipeline);\r\n\r\n      result = {\r\n        stdout: result.stdout + pipeResult.stdout,\r\n        stderr: result.stderr + pipeResult.stderr,\r\n        exitCode: pipeResult.exitCode,\r\n      };\r\n      this.lastExit = pipeResult.exitCode;\r\n\r\n      if (entry.next === \"&&\" && pipeResult.exitCode !== 0) break;\r\n      if (entry.next === \"||\" && pipeResult.exitCode === 0) break;\r\n    }\r\n\r\n    return result;\r\n  }\r\n\r\n  private async execPipeline(pipeline: PipelineNode): Promise<ShellResult> {\r\n    if (pipeline.commands.length === 1) {\r\n      return this.execCommand(pipeline.commands[0]);\r\n    }\r\n\r\n    let stdin: string | undefined;\r\n    let lastResult: ShellResult = { stdout: \"\", stderr: \"\", exitCode: 0 };\r\n    let allStderr = \"\";\r\n\r\n    for (const cmd of pipeline.commands) {\r\n      const result = await this.execCommand(cmd, stdin);\r\n      allStderr += result.stderr;\r\n      stdin = result.stdout;\r\n      lastResult = result;\r\n    }\r\n\r\n    return {\r\n      stdout: lastResult.stdout,\r\n      stderr: allStderr,\r\n      exitCode: lastResult.exitCode,\r\n    };\r\n  }\r\n\r\n  private async execCommand(\r\n    cmd: CommandNode,\r\n    stdin?: string,\r\n  ): Promise<ShellResult> {\r\n    if (cmd.args.length === 0) {\r\n      for (const [k, v] of Object.entries(cmd.assignments)) {\r\n        this.env[k] = v;\r\n      }\r\n      return { stdout: \"\", stderr: \"\", exitCode: 0 };\r\n    }\r\n\r\n    let expandedArgs: string[] = [];\r\n    for (const arg of cmd.args) {\r\n      expandedArgs.push(...expandGlob(arg, this.cwd, this.volume));\r\n    }\r\n\r\n    const alias = this.aliases.get(expandedArgs[0]);\r\n    if (alias) {\r\n      const aliasArgs = alias.split(/\\s+/);\r\n      expandedArgs = [...aliasArgs, ...expandedArgs.slice(1)];\r\n    }\r\n\r\n    const name = expandedArgs[0];\r\n    const args = expandedArgs.slice(1);\r\n\r\n    if (stdin === undefined) {\r\n      for (const r of cmd.redirects) {\r\n        if (r.type === \"read\") {\r\n          const p = this.resolvePath(r.target);\r\n          try {\r\n            stdin = this.volume.readFileSync(p, \"utf8\");\r\n          } catch {\r\n            return {\r\n              stdout: \"\",\r\n              stderr: `shell: ${r.target}: No such file or directory\\n`,\r\n              exitCode: 1,\r\n            };\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    const savedEnv: Record<string, string | undefined> = {};\r\n    for (const [k, v] of Object.entries(cmd.assignments)) {\r\n      savedEnv[k] = this.env[k];\r\n      this.env[k] = v;\r\n    }\r\n\r\n    const ctx = this.buildContext();\r\n    let result: ShellResult;\r\n\r\n    // dispatch: builtin > registered command > PATH lookup > error\r\n    const builtin = builtins.get(name);\r\n    if (builtin) {\r\n      const r = builtin(args, ctx, stdin);\r\n      result = r instanceof Promise ? await r : r;\r\n      if (name === \"cd\") {\r\n        this.cwd = ctx.cwd;\r\n        this.env = ctx.env;\r\n      }\r\n      if (name === \"export\" || name === \"unset\") {\r\n        this.env = ctx.env;\r\n      }\r\n    } else if (name === \"alias\") {\r\n      result = this.handleAlias(args);\r\n    } else if (name === \"source\" || name === \".\") {\r\n      result = await this.handleSource(args);\r\n    } else if (name === \"history\") {\r\n      result = { stdout: \"\", stderr: \"\", exitCode: 0 };\r\n    } else if (this.commands.has(name)) {\r\n      try {\r\n        result = await this.commands.get(name)!.execute(args, ctx);\r\n      } catch (e) {\r\n        const msg = e instanceof Error ? e.message : String(e);\r\n        result = {\r\n          stdout: \"\",\r\n          stderr: `${name}: ${msg}\\n`,\r\n          exitCode: 1,\r\n        };\r\n      }\r\n      this.cwd = ctx.cwd;\r\n      this.env = ctx.env;\r\n    } else {\r\n      const resolvedBin = this.resolveFromPath(name);\r\n      if (resolvedBin && this.commands.has(\"node\")) {\r\n        try {\r\n          result = await this.commands\r\n            .get(\"node\")!\r\n            .execute([resolvedBin, ...args], ctx);\r\n        } catch (e) {\r\n          const msg = e instanceof Error ? e.message : String(e);\r\n          result = {\r\n            stdout: \"\",\r\n            stderr: `${name}: ${msg}\\n`,\r\n            exitCode: 1,\r\n          };\r\n        }\r\n        this.cwd = ctx.cwd;\r\n        this.env = ctx.env;\r\n      } else {\r\n        result = {\r\n          stdout: \"\",\r\n          stderr: `${name}: command not found\\n`,\r\n          exitCode: 127,\r\n        };\r\n      }\r\n    }\r\n\r\n    for (const [k, v] of Object.entries(savedEnv)) {\r\n      if (v === undefined) delete this.env[k];\r\n      else this.env[k] = v;\r\n    }\r\n\r\n    result = await this.applyRedirects(result, cmd);\r\n\r\n    this.lastExit = result.exitCode;\r\n    return result;\r\n  }\r\n\r\n  /* ---------------------------------------------------------------- */\r\n  /*  Helpers                                                          */\r\n  /* ---------------------------------------------------------------- */\r\n\r\n  private buildContext(): ShellContext {\r\n    return {\r\n      cwd: this.cwd,\r\n      env: { ...this.env },\r\n      volume: this.volume,\r\n      exec: (cmd, opts) => this.exec(cmd, opts),\r\n    };\r\n  }\r\n\r\n  private resolvePath(p: string): string {\r\n    if (p.startsWith(\"/\")) return this.normalizePath(p);\r\n    return this.normalizePath(`${this.cwd}/${p}`);\r\n  }\r\n\r\n  // Search PATH for a command. Parses .bin stubs to find the real JS entry point.\r\n  private resolveFromPath(name: string): string | null {\r\n    const pathStr = this.env.PATH || \"\";\r\n    const dirs = pathStr.split(\":\");\r\n\r\n    for (const dir of dirs) {\r\n      if (!dir) continue;\r\n      const candidate = `${dir}/${name}`;\r\n      if (!this.volume.existsSync(candidate)) continue;\r\n\r\n      try {\r\n        const content = this.volume.readFileSync(candidate, \"utf8\");\r\n        // bin stubs: node \"/node_modules/pkg/index.js\" \"$@\"\r\n        const match = content.match(/node\\s+\"([^\"]+)\"/);\r\n        if (match && this.volume.existsSync(match[1])) {\r\n          return match[1];\r\n        }\r\n        if (\r\n          content.startsWith(\"#!/\") ||\r\n          content.startsWith(\"'use strict'\") ||\r\n          content.startsWith('\"use strict\"') ||\r\n          content.startsWith(\"var \") ||\r\n          content.startsWith(\"const \") ||\r\n          content.startsWith(\"import \") ||\r\n          content.startsWith(\"module.\")\r\n        ) {\r\n          return candidate;\r\n        }\r\n      } catch {\r\n        /* skip */\r\n      }\r\n    }\r\n\r\n    return null;\r\n  }\r\n\r\n  private normalizePath(raw: string): string {\r\n    const parts = raw.split(\"/\").filter(Boolean);\r\n    const stack: string[] = [];\r\n    for (const part of parts) {\r\n      if (part === \"..\") stack.pop();\r\n      else if (part !== \".\") stack.push(part);\r\n    }\r\n    return \"/\" + stack.join(\"/\");\r\n  }\r\n\r\n  private async applyRedirects(\r\n    result: ShellResult,\r\n    cmd: CommandNode,\r\n  ): Promise<ShellResult> {\r\n    let { stdout, stderr, exitCode } = result;\r\n\r\n    for (const r of cmd.redirects) {\r\n      if (r.type === \"stderr-to-stdout\") {\r\n        stdout += stderr;\r\n        stderr = \"\";\r\n        continue;\r\n      }\r\n\r\n      if (r.type === \"write\" || r.type === \"append\") {\r\n        const p = this.resolvePath(r.target);\r\n        try {\r\n          if (r.type === \"append\" && this.volume.existsSync(p)) {\r\n            const existing = this.volume.readFileSync(p, \"utf8\");\r\n            this.volume.writeFileSync(p, existing + stdout);\r\n          } else {\r\n            const dir = this.normalizePath(p.substring(0, p.lastIndexOf(\"/\")));\r\n            if (dir && dir !== \"/\" && !this.volume.existsSync(dir)) {\r\n              this.volume.mkdirSync(dir, { recursive: true });\r\n            }\r\n            this.volume.writeFileSync(p, stdout);\r\n          }\r\n          stdout = \"\";\r\n        } catch (e) {\r\n          stderr += `shell: ${r.target}: ${e instanceof Error ? e.message : \"Cannot write\"}\\n`;\r\n          exitCode = 1;\r\n        }\r\n      }\r\n    }\r\n\r\n    return { stdout, stderr, exitCode };\r\n  }\r\n\r\n  private async expandCommandSubstitution(input: string): Promise<string> {\r\n    let result = \"\";\r\n    let i = 0;\r\n\r\n    while (i < input.length) {\r\n      if (input[i] === \"'\") {\r\n        result += \"'\";\r\n        i++;\r\n        while (i < input.length && input[i] !== \"'\") {\r\n          result += input[i++];\r\n        }\r\n        if (i < input.length) result += input[i++];\r\n        continue;\r\n      }\r\n\r\n      if (input[i] === \"$\" && input[i + 1] === \"(\") {\r\n        i += 2;\r\n        let depth = 1;\r\n        let subCmd = \"\";\r\n        while (i < input.length && depth > 0) {\r\n          if (input[i] === \"(\") depth++;\r\n          if (input[i] === \")\") depth--;\r\n          if (depth > 0) subCmd += input[i];\r\n          i++;\r\n        }\r\n        const subResult = await this.exec(subCmd);\r\n        result += subResult.stdout.replace(/\\n$/, \"\");\r\n        continue;\r\n      }\r\n\r\n      if (input[i] === \"`\") {\r\n        i++;\r\n        let subCmd = \"\";\r\n        while (i < input.length && input[i] !== \"`\") {\r\n          subCmd += input[i++];\r\n        }\r\n        if (i < input.length) i++;\r\n        const subResult = await this.exec(subCmd);\r\n        result += subResult.stdout.replace(/\\n$/, \"\");\r\n        continue;\r\n      }\r\n\r\n      result += input[i++];\r\n    }\r\n\r\n    return result;\r\n  }\r\n\r\n  private handleAlias(args: string[]): ShellResult {\r\n    if (args.length === 0) {\r\n      let out = \"\";\r\n      for (const [k, v] of this.aliases) out += `alias ${k}='${v}'\\n`;\r\n      return { stdout: out, stderr: \"\", exitCode: 0 };\r\n    }\r\n    for (const arg of args) {\r\n      const eq = arg.indexOf(\"=\");\r\n      if (eq > 0) {\r\n        let val = arg.slice(eq + 1);\r\n        if (\r\n          (val.startsWith(\"'\") && val.endsWith(\"'\")) ||\r\n          (val.startsWith('\"') && val.endsWith('\"'))\r\n        ) {\r\n          val = val.slice(1, -1);\r\n        }\r\n        this.aliases.set(arg.slice(0, eq), val);\r\n      } else {\r\n        const val = this.aliases.get(arg);\r\n        if (val)\r\n          return { stdout: `alias ${arg}='${val}'\\n`, stderr: \"\", exitCode: 0 };\r\n        return {\r\n          stdout: \"\",\r\n          stderr: `alias: ${arg}: not found\\n`,\r\n          exitCode: 1,\r\n        };\r\n      }\r\n    }\r\n    return { stdout: \"\", stderr: \"\", exitCode: 0 };\r\n  }\r\n\r\n  private async handleSource(args: string[]): Promise<ShellResult> {\r\n    if (args.length === 0) {\r\n      return {\r\n        stdout: \"\",\r\n        stderr: \"source: missing file argument\\n\",\r\n        exitCode: 1,\r\n      };\r\n    }\r\n    const p = this.resolvePath(args[0]);\r\n    try {\r\n      const content = this.volume.readFileSync(p, \"utf8\");\r\n      return this.exec(content);\r\n    } catch {\r\n      return {\r\n        stdout: \"\",\r\n        stderr: `source: ${args[0]}: No such file or directory\\n`,\r\n        exitCode: 1,\r\n      };\r\n    }\r\n  }\r\n}\r\n","import type { ShellCommand } from \"../shell-types\";\r\nimport type { PmDeps } from \"./pm-types\";\r\nimport { VERSIONS, NPM_REGISTRY_URL_SLASH } from \"../../constants/config\";\r\n\r\nconst A_RESET = \"\\x1b[0m\";\r\nconst A_BOLD = \"\\x1b[1m\";\r\nconst A_CYAN = \"\\x1b[36m\";\r\n\r\nexport function createNpmCommand(deps: PmDeps): ShellCommand {\r\n  return {\r\n    name: \"npm\",\r\n    async execute(params, ctx) {\r\n      if (!deps.hasFile(\"/\"))\r\n        return { stdout: \"\", stderr: \"Volume unavailable\\n\", exitCode: 1 };\r\n\r\n      const sub = params[0];\r\n      if (!sub || sub === \"help\" || sub === \"--help\") {\r\n        return {\r\n          stdout:\r\n            `${A_BOLD}Usage:${A_RESET} npm <command>\\n\\n` +\r\n            `${A_BOLD}Commands:${A_RESET}\\n` +\r\n            `  ${A_CYAN}run${A_RESET} <script>      Run a package.json script\\n` +\r\n            `  ${A_CYAN}start${A_RESET}             Alias for npm run start\\n` +\r\n            `  ${A_CYAN}test${A_RESET}              Alias for npm run test\\n` +\r\n            `  ${A_CYAN}install${A_RESET} [pkg]     Install packages\\n` +\r\n            `  ${A_CYAN}uninstall${A_RESET} <pkg>   Remove a package\\n` +\r\n            `  ${A_CYAN}ls${A_RESET}                List installed packages\\n` +\r\n            `  ${A_CYAN}init${A_RESET}              Create a package.json\\n` +\r\n            `  ${A_CYAN}create${A_RESET} <pkg>      Create a project (runs create-<pkg>)\\n` +\r\n            `  ${A_CYAN}version${A_RESET}           Show version info\\n` +\r\n            `  ${A_CYAN}info${A_RESET} <pkg>        Show package info\\n` +\r\n            `  ${A_CYAN}exec${A_RESET} <cmd>        Execute a package binary\\n` +\r\n            `  ${A_CYAN}prefix${A_RESET}            Show prefix\\n` +\r\n            `  ${A_CYAN}root${A_RESET}              Show node_modules path\\n` +\r\n            `  ${A_CYAN}bin${A_RESET}               Show bin directory\\n` +\r\n            `  ${A_CYAN}config${A_RESET}            Manage configuration\\n`,\r\n          stderr: \"\",\r\n          exitCode: 0,\r\n        };\r\n      }\r\n\r\n      switch (sub) {\r\n        case \"run\":\r\n        case \"run-script\":\r\n          return deps.runScript(params.slice(1), ctx);\r\n        case \"start\":\r\n          return deps.runScript([\"start\"], ctx);\r\n        case \"test\":\r\n        case \"t\":\r\n        case \"tst\":\r\n          return deps.runScript([\"test\"], ctx);\r\n        case \"install\":\r\n        case \"i\":\r\n        case \"add\":\r\n          return deps.installPackages(params.slice(1), ctx);\r\n        case \"ci\":\r\n          try {\r\n            deps.removeNodeModules(ctx.cwd);\r\n          } catch {\r\n            /* */\r\n          }\r\n          return deps.installPackages([], ctx);\r\n        case \"uninstall\":\r\n        case \"remove\":\r\n        case \"rm\":\r\n        case \"un\":\r\n          return deps.uninstallPackages(params.slice(1), ctx);\r\n        case \"ls\":\r\n        case \"list\":\r\n          return deps.listPackages(ctx);\r\n        case \"init\":\r\n        case \"create\":\r\n          return deps.npmInitOrCreate(params.slice(1), sub, ctx);\r\n        case \"version\":\r\n        case \"-v\":\r\n        case \"--version\":\r\n          return { stdout: VERSIONS.NPM + \"\\n\", stderr: \"\", exitCode: 0 };\r\n        case \"info\":\r\n        case \"view\":\r\n        case \"show\":\r\n          return deps.npmInfo(params.slice(1), ctx);\r\n        case \"exec\":\r\n          return deps.npxExecute(params.slice(1), ctx);\r\n        case \"prefix\":\r\n          return { stdout: ctx.cwd + \"\\n\", stderr: \"\", exitCode: 0 };\r\n        case \"root\":\r\n          return {\r\n            stdout: ctx.cwd + \"/node_modules\\n\",\r\n            stderr: \"\",\r\n            exitCode: 0,\r\n          };\r\n        case \"bin\":\r\n          return {\r\n            stdout: ctx.cwd + \"/node_modules/.bin\\n\",\r\n            stderr: \"\",\r\n            exitCode: 0,\r\n          };\r\n        case \"pack\":\r\n          return deps.npmPack(ctx);\r\n        case \"config\":\r\n        case \"c\":\r\n          return deps.npmConfig(params.slice(1), ctx);\r\n        case \"outdated\":\r\n          return {\r\n            stdout: \"\",\r\n            stderr: deps.formatWarn(\r\n              \"outdated check not available in nodepod\",\r\n              \"npm\",\r\n            ),\r\n            exitCode: 0,\r\n          };\r\n        case \"audit\":\r\n          return {\r\n            stdout: \"found 0 vulnerabilities\\n\",\r\n            stderr: \"\",\r\n            exitCode: 0,\r\n          };\r\n        case \"fund\":\r\n          return {\r\n            stdout: \"0 packages are looking for funding\\n\",\r\n            stderr: \"\",\r\n            exitCode: 0,\r\n          };\r\n        case \"cache\":\r\n          if (params[1] === \"clean\" || params[1] === \"clear\") {\r\n            return { stdout: \"Cache cleared.\\n\", stderr: \"\", exitCode: 0 };\r\n          }\r\n          return {\r\n            stdout: \"\",\r\n            stderr: deps.formatErr(\r\n              `cache: unknown subcommand ${params[1] ?? \"\"}`,\r\n              \"npm\",\r\n            ),\r\n            exitCode: 1,\r\n          };\r\n        case \"whoami\":\r\n          return { stdout: \"nodepod-user\\n\", stderr: \"\", exitCode: 0 };\r\n        case \"ping\":\r\n          return {\r\n            stdout: `PING ${NPM_REGISTRY_URL_SLASH} - ok\\n`,\r\n            stderr: \"\",\r\n            exitCode: 0,\r\n          };\r\n        case \"set-script\": {\r\n          const scriptName = params[1];\r\n          const scriptCmd = params.slice(2).join(\" \");\r\n          if (!scriptName || !scriptCmd) {\r\n            return {\r\n              stdout: \"\",\r\n              stderr: deps.formatErr(\r\n                \"Usage: npm set-script <name> <command>\",\r\n                \"npm\",\r\n              ),\r\n              exitCode: 1,\r\n            };\r\n          }\r\n          try {\r\n            const pkgPath = ctx.cwd + \"/package.json\";\r\n            const raw = deps.readFile(pkgPath);\r\n            const pkg = JSON.parse(raw);\r\n            if (!pkg.scripts) pkg.scripts = {};\r\n            pkg.scripts[scriptName] = scriptCmd;\r\n            deps.writeFile(pkgPath, JSON.stringify(pkg, null, 2) + \"\\n\");\r\n            return {\r\n              stdout: \"\",\r\n              stderr: deps.formatWarn(\r\n                \"`set-script` is deprecated. Use `npm pkg set scripts.${scriptName}=\\\"${scriptCmd}\\\"` instead.\",\r\n                \"npm\",\r\n              ),\r\n              exitCode: 0,\r\n            };\r\n          } catch (e: any) {\r\n            return {\r\n              stdout: \"\",\r\n              stderr: deps.formatErr(\r\n                e.message || \"Failed to update package.json\",\r\n                \"npm\",\r\n              ),\r\n              exitCode: 1,\r\n            };\r\n          }\r\n        }\r\n        case \"pkg\":\r\n          return deps.npmPkg ? deps.npmPkg(params.slice(1), ctx) : {\r\n            stdout: \"\",\r\n            stderr: deps.formatErr(\"npm pkg not implemented\", \"npm\"),\r\n            exitCode: 1,\r\n          };\r\n        default:\r\n          return {\r\n            stdout: \"\",\r\n            stderr: deps.formatErr(`Unknown command \"${sub}\"`, \"npm\"),\r\n            exitCode: 1,\r\n          };\r\n      }\r\n    },\r\n  };\r\n}\r\n","import type { ShellCommand } from \"../shell-types\";\r\nimport type { PmDeps } from \"./pm-types\";\r\nimport { VERSIONS } from \"../../constants/config\";\r\n\r\nconst A_RESET = \"\\x1b[0m\";\r\nconst A_BOLD = \"\\x1b[1m\";\r\nconst A_CYAN = \"\\x1b[36m\";\r\n\r\nexport function createPnpmCommand(deps: PmDeps): ShellCommand {\r\n  return {\r\n    name: \"pnpm\",\r\n    async execute(params, ctx) {\r\n      if (!deps.hasFile(\"/\"))\r\n        return { stdout: \"\", stderr: \"Volume unavailable\\n\", exitCode: 1 };\r\n\r\n      const sub = params[0];\r\n      if (!sub || sub === \"help\" || sub === \"--help\") {\r\n        return {\r\n          stdout:\r\n            `${A_BOLD}Usage:${A_RESET} pnpm <command>\\n\\n` +\r\n            `${A_BOLD}Manage your dependencies:${A_RESET}\\n` +\r\n            `  ${A_CYAN}add${A_RESET} [pkg]         Install packages\\n` +\r\n            `  ${A_CYAN}install${A_RESET}           Install from manifest\\n` +\r\n            `  ${A_CYAN}remove${A_RESET} <pkg>      Remove a package\\n` +\r\n            `  ${A_CYAN}list${A_RESET}              List installed packages\\n\\n` +\r\n            `${A_BOLD}Run your scripts:${A_RESET}\\n` +\r\n            `  ${A_CYAN}run${A_RESET} <script>      Run a script\\n` +\r\n            `  ${A_CYAN}exec${A_RESET} <cmd>        Execute a package binary\\n` +\r\n            `  ${A_CYAN}dlx${A_RESET} <pkg>         Download and execute a package\\n\\n` +\r\n            `${A_BOLD}Create a project:${A_RESET}\\n` +\r\n            `  ${A_CYAN}init${A_RESET}              Create a package.json\\n` +\r\n            `  ${A_CYAN}create${A_RESET} <pkg>      Create a project\\n\\n` +\r\n            `  ${A_CYAN}version${A_RESET}           Show version info\\n`,\r\n          stderr: \"\",\r\n          exitCode: 0,\r\n        };\r\n      }\r\n\r\n      switch (sub) {\r\n        case \"add\":\r\n          return deps.installPackages(params.slice(1), ctx, \"pnpm\");\r\n        case \"install\":\r\n        case \"i\":\r\n          return deps.installPackages(params.slice(1), ctx, \"pnpm\");\r\n        case \"remove\":\r\n        case \"rm\":\r\n        case \"uninstall\":\r\n        case \"un\":\r\n          return deps.uninstallPackages(params.slice(1), ctx, \"pnpm\");\r\n        case \"list\":\r\n        case \"ls\":\r\n          return deps.listPackages(ctx, \"pnpm\");\r\n        case \"run\":\r\n          return deps.runScript(params.slice(1), ctx);\r\n        case \"start\":\r\n          return deps.runScript([\"start\"], ctx);\r\n        case \"test\":\r\n        case \"t\":\r\n          return deps.runScript([\"test\"], ctx);\r\n        case \"exec\":\r\n          return deps.npxExecute(params.slice(1), ctx);\r\n        case \"dlx\":\r\n          return deps.npxExecute(params.slice(1), ctx);\r\n        case \"init\":\r\n        case \"create\":\r\n          return deps.npmInitOrCreate(params.slice(1), sub, ctx);\r\n        case \"version\":\r\n        case \"-v\":\r\n        case \"--version\":\r\n          return { stdout: VERSIONS.PNPM + \"\\n\", stderr: \"\", exitCode: 0 };\r\n        case \"audit\":\r\n          return { stdout: \"No known vulnerabilities found\\n\", stderr: \"\", exitCode: 0 };\r\n        case \"outdated\":\r\n          return { stdout: \"\", stderr: \"\", exitCode: 0 };\r\n        case \"why\":\r\n          return { stdout: \"\", stderr: deps.formatWarn(\"why: not available in nodepod\", \"pnpm\"), exitCode: 0 };\r\n        default:\r\n          return { stdout: \"\", stderr: deps.formatErr(`Unknown command \"${sub}\"`, \"pnpm\"), exitCode: 1 };\r\n      }\r\n    },\r\n  };\r\n}\r\n","import type { ShellCommand } from \"../shell-types\";\r\nimport type { PmDeps } from \"./pm-types\";\r\nimport { VERSIONS } from \"../../constants/config\";\r\n\r\nconst A_RESET = \"\\x1b[0m\";\r\nconst A_BOLD = \"\\x1b[1m\";\r\nconst A_CYAN = \"\\x1b[36m\";\r\n\r\nexport function createYarnCommand(deps: PmDeps): ShellCommand {\r\n  return {\r\n    name: \"yarn\",\r\n    async execute(params, ctx) {\r\n      if (!deps.hasFile(\"/\"))\r\n        return { stdout: \"\", stderr: \"Volume unavailable\\n\", exitCode: 1 };\r\n\r\n      const sub = params[0];\r\n      if (!sub) return deps.installPackages([], ctx, \"yarn\");\r\n      if (sub === \"help\" || sub === \"--help\") {\r\n        return {\r\n          stdout:\r\n            `${A_BOLD}Usage:${A_RESET} yarn <command>\\n\\n` +\r\n            `${A_BOLD}Commands:${A_RESET}\\n` +\r\n            `  ${A_CYAN}add${A_RESET} [pkg]         Install packages\\n` +\r\n            `  ${A_CYAN}install${A_RESET}           Install from manifest\\n` +\r\n            `  ${A_CYAN}remove${A_RESET} <pkg>      Remove a package\\n` +\r\n            `  ${A_CYAN}list${A_RESET}              List installed packages\\n` +\r\n            `  ${A_CYAN}run${A_RESET} <script>      Run a script\\n` +\r\n            `  ${A_CYAN}dlx${A_RESET} <pkg>         Download and execute a package\\n` +\r\n            `  ${A_CYAN}init${A_RESET}              Create a package.json\\n` +\r\n            `  ${A_CYAN}create${A_RESET} <pkg>      Create a project\\n` +\r\n            `  ${A_CYAN}version${A_RESET}           Show version info\\n`,\r\n          stderr: \"\",\r\n          exitCode: 0,\r\n        };\r\n      }\r\n\r\n      switch (sub) {\r\n        case \"add\":\r\n          return deps.installPackages(params.slice(1), ctx, \"yarn\");\r\n        case \"install\":\r\n        case \"i\":\r\n          return deps.installPackages(params.slice(1), ctx, \"yarn\");\r\n        case \"remove\":\r\n        case \"rm\":\r\n        case \"uninstall\":\r\n          return deps.uninstallPackages(params.slice(1), ctx, \"yarn\");\r\n        case \"list\":\r\n        case \"ls\":\r\n          return deps.listPackages(ctx, \"yarn\");\r\n        case \"run\":\r\n          return deps.runScript(params.slice(1), ctx);\r\n        case \"start\":\r\n          return deps.runScript([\"start\"], ctx);\r\n        case \"test\":\r\n        case \"t\":\r\n          return deps.runScript([\"test\"], ctx);\r\n        case \"exec\":\r\n          return deps.npxExecute(params.slice(1), ctx);\r\n        case \"dlx\":\r\n          return deps.npxExecute(params.slice(1), ctx);\r\n        case \"init\":\r\n        case \"create\":\r\n          return deps.npmInitOrCreate(params.slice(1), sub, ctx);\r\n        case \"version\":\r\n        case \"-v\":\r\n        case \"--version\":\r\n          return { stdout: VERSIONS.YARN + \"\\n\", stderr: \"\", exitCode: 0 };\r\n        case \"info\":\r\n          return deps.npmInfo(params.slice(1), ctx);\r\n        case \"audit\":\r\n          return { stdout: \"0 vulnerabilities found\\n\", stderr: \"\", exitCode: 0 };\r\n        case \"outdated\":\r\n          return { stdout: \"\", stderr: \"\", exitCode: 0 };\r\n        case \"why\":\r\n          return { stdout: \"\", stderr: deps.formatWarn(\"why: not available in nodepod\", \"yarn\"), exitCode: 0 };\r\n        case \"global\":\r\n          return { stdout: \"\", stderr: deps.formatWarn(\"global: not available in nodepod\", \"yarn\"), exitCode: 0 };\r\n        default:\r\n          // yarn classic treats unknown commands as `yarn run <cmd>`\r\n          return deps.runScript(params, ctx);\r\n      }\r\n    },\r\n  };\r\n}\r\n","import type { ShellCommand } from \"../shell-types\";\r\nimport type { PmDeps } from \"./pm-types\";\r\nimport { VERSIONS } from \"../../constants/config\";\r\n\r\nconst A_RESET = \"\\x1b[0m\";\r\nconst A_BOLD = \"\\x1b[1m\";\r\nconst A_DIM = \"\\x1b[2m\";\r\nconst A_GREEN = \"\\x1b[32m\";\r\nconst A_CYAN = \"\\x1b[36m\";\r\n\r\nexport function createBunCommand(deps: PmDeps): ShellCommand {\r\n  return {\r\n    name: \"bun\",\r\n    async execute(params, ctx) {\r\n      if (!deps.hasFile(\"/\"))\r\n        return { stdout: \"\", stderr: \"Volume unavailable\\n\", exitCode: 1 };\r\n\r\n      const sub = params[0];\r\n      if (!sub || sub === \"help\" || sub === \"--help\") {\r\n        return {\r\n          stdout:\r\n            `${A_BOLD}Bun${A_RESET} is a fast JavaScript runtime, package manager, and bundler.\\n\\n` +\r\n            `${A_DIM}Usage:${A_RESET} bun <command> [...flags] [...args]\\n\\n` +\r\n            `${A_BOLD}Commands:${A_RESET}\\n` +\r\n            `  ${A_CYAN}run${A_RESET}       ${A_DIM}Run a package.json script or file${A_RESET}\\n` +\r\n            `  ${A_CYAN}install${A_RESET}   ${A_DIM}Install dependencies from package.json${A_RESET}\\n` +\r\n            `  ${A_CYAN}add${A_RESET}       ${A_DIM}Add a dependency${A_RESET}\\n` +\r\n            `  ${A_CYAN}remove${A_RESET}    ${A_DIM}Remove a dependency${A_RESET}\\n` +\r\n            `  ${A_CYAN}init${A_RESET}      ${A_DIM}Start an empty Bun project${A_RESET}\\n` +\r\n            `  ${A_CYAN}create${A_RESET}    ${A_DIM}Create a new project from a template${A_RESET}\\n` +\r\n            `  ${A_CYAN}test${A_RESET}      ${A_DIM}Run unit tests${A_RESET}\\n` +\r\n            `  ${A_CYAN}x${A_RESET}         ${A_DIM}Execute a package binary (bunx)${A_RESET}\\n` +\r\n            `  ${A_CYAN}pm${A_RESET}        ${A_DIM}Package manager utilities${A_RESET}\\n`,\r\n          stderr: \"\",\r\n          exitCode: 0,\r\n        };\r\n      }\r\n\r\n      switch (sub) {\r\n        case \"run\":\r\n          if (\r\n            params[1] &&\r\n            (params[1].endsWith(\".js\") ||\r\n              params[1].endsWith(\".ts\") ||\r\n              params[1].endsWith(\".mjs\") ||\r\n              params[1].endsWith(\".tsx\") ||\r\n              params[1].endsWith(\".jsx\"))\r\n          ) {\r\n            return deps.executeNodeBinary(params[1], params.slice(2), ctx);\r\n          }\r\n          return deps.runScript(params.slice(1), ctx);\r\n        case \"start\":\r\n          return deps.runScript([\"start\"], ctx);\r\n        case \"test\":\r\n        case \"t\":\r\n          return deps.runScript([\"test\"], ctx);\r\n        case \"install\":\r\n        case \"i\":\r\n          return deps.installPackages(params.slice(1), ctx, \"bun\");\r\n        case \"add\":\r\n          return deps.installPackages(params.slice(1), ctx, \"bun\");\r\n        case \"remove\":\r\n        case \"rm\":\r\n          return deps.uninstallPackages(params.slice(1), ctx, \"bun\");\r\n        case \"x\":\r\n          return deps.npxExecute(params.slice(1), ctx);\r\n        case \"init\":\r\n        case \"create\":\r\n          return deps.npmInitOrCreate(params.slice(1), sub, ctx);\r\n        case \"pm\": {\r\n          const pmSub = params[1];\r\n          if (pmSub === \"ls\" || pmSub === \"list\")\r\n            return deps.listPackages(ctx, \"bun\");\r\n          if (pmSub === \"cache\")\r\n            return { stdout: \"Cache path: /tmp/bun-cache\\n\", stderr: \"\", exitCode: 0 };\r\n          return {\r\n            stdout: `${A_DIM}bun pm: available subcommands: ls, cache${A_RESET}\\n`,\r\n            stderr: \"\",\r\n            exitCode: 0,\r\n          };\r\n        }\r\n        case \"version\":\r\n        case \"-v\":\r\n        case \"--version\":\r\n          return { stdout: VERSIONS.BUN + \"\\n\", stderr: \"\", exitCode: 0 };\r\n        case \"upgrade\":\r\n          return {\r\n            stdout: `${A_GREEN}Bun is already up to date.${A_RESET}\\n`,\r\n            stderr: \"\",\r\n            exitCode: 0,\r\n          };\r\n        default: {\r\n          // bare `bun <file>` runs it directly, otherwise treat as script\r\n          if (params[0] && !params[0].startsWith(\"-\")) {\r\n            const filePath = params[0].startsWith(\"/\")\r\n              ? params[0]\r\n              : `${ctx.cwd}/${params[0]}`.replace(/\\/+/g, \"/\");\r\n            if (deps.hasFile(filePath)) {\r\n              return deps.executeNodeBinary(params[0], params.slice(1), ctx);\r\n            }\r\n            return deps.runScript(params, ctx);\r\n          }\r\n          return {\r\n            stdout: \"\",\r\n            stderr: `error: unknown command \"${sub}\"\\n`,\r\n            exitCode: 1,\r\n          };\r\n        }\r\n      }\r\n    },\r\n  };\r\n}\r\n\r\nexport function createBunxCommand(deps: PmDeps): ShellCommand {\r\n  return {\r\n    name: \"bunx\",\r\n    async execute(params, ctx) {\r\n      return deps.npxExecute(params, ctx);\r\n    },\r\n  };\r\n}\r\n","import type { ShellCommand } from \"../shell-types\";\r\nimport type { PmDeps } from \"./pm-types\";\r\nimport { VERSIONS } from \"../../constants/config\";\r\n\r\nconst A_RESET = \"\\x1b[0m\";\r\nconst A_BOLD = \"\\x1b[1m\";\r\n\r\nexport function createNodeCommand(deps: PmDeps): ShellCommand {\r\n  return {\r\n    name: \"node\",\r\n    async execute(params, ctx) {\r\n      if (!deps.hasFile(\"/\"))\r\n        return { stdout: \"\", stderr: \"Volume unavailable\\n\", exitCode: 1 };\r\n\r\n      let target: string | null = null;\r\n      let evalCode: string | null = null;\r\n      let printCode: string | null = null;\r\n      const scriptArgs: string[] = [];\r\n      let collectingArgs = false;\r\n\r\n      for (let i = 0; i < params.length; i++) {\r\n        if (collectingArgs) {\r\n          scriptArgs.push(params[i]);\r\n          continue;\r\n        }\r\n        if (params[i] === \"-e\" || params[i] === \"--eval\") {\r\n          evalCode = params[++i] ?? \"\";\r\n        } else if (params[i] === \"-p\" || params[i] === \"--print\") {\r\n          printCode = params[++i] ?? \"\";\r\n        } else if (params[i] === \"--version\" || params[i] === \"-v\") {\r\n          return { stdout: VERSIONS.NODE + \"\\n\", stderr: \"\", exitCode: 0 };\r\n        } else if (params[i] === \"--help\" || params[i] === \"-h\") {\r\n          return {\r\n            stdout: `${A_BOLD}Usage:${A_RESET} node [options] [script.js] [arguments]\\n`,\r\n            stderr: \"\",\r\n            exitCode: 0,\r\n          };\r\n        } else if (\r\n          params[i] === \"-r\" ||\r\n          params[i] === \"--require\" ||\r\n          params[i] === \"--experimental-specifier-resolution\" ||\r\n          params[i] === \"--loader\" ||\r\n          params[i] === \"--import\"\r\n        ) {\r\n          i++;\r\n        } else if (params[i].startsWith(\"-\")) {\r\n          // skip unknown flags (--harmony, --inspect, etc.)\r\n        } else {\r\n          target = params[i];\r\n          collectingArgs = true;\r\n        }\r\n      }\r\n\r\n      if (evalCode !== null) {\r\n        return deps.evalCode(evalCode, ctx);\r\n      }\r\n      if (printCode !== null) {\r\n        return deps.printCode(printCode, ctx);\r\n      }\r\n\r\n      if (!target)\r\n        return {\r\n          stdout: \"\",\r\n          stderr: `${A_BOLD}Usage:${A_RESET} node <file> [args...]\\n`,\r\n          exitCode: 1,\r\n        };\r\n\r\n      return deps.executeNodeBinary(target, scriptArgs, ctx);\r\n    },\r\n  };\r\n}\r\n\r\nexport function createNpxCommand(deps: PmDeps): ShellCommand {\r\n  return {\r\n    name: \"npx\",\r\n    async execute(params, ctx) {\r\n      return deps.npxExecute(params, ctx);\r\n    },\r\n  };\r\n}\r\n","// Virtual git backed by the VFS (.git/ directories).\r\n// GitHub API support when GITHUB_TOKEN is set.\r\n\r\nimport type { ShellCommand, ShellContext, ShellResult } from \"../shell-types\";\r\nimport type { MemoryVolume } from \"../../memory-volume\";\r\nimport { ok, fail, RESET, DIM, GREEN, BOLD_RED, CYAN } from \"../shell-helpers\";\r\nimport { VERSIONS } from \"../../constants/config\";\r\nimport { proxiedFetch } from \"../../cross-origin\";\r\nimport * as pathModule from \"../../polyfills/path\";\r\nimport { createHash } from \"../../polyfills/crypto\";\r\n\r\n/* ------------------------------------------------------------------ */\r\n/*  ANSI helpers                                                       */\r\n/* ------------------------------------------------------------------ */\r\n\r\nconst RED = \"\\x1b[31m\";\r\nconst YELLOW = \"\\x1b[33m\";\r\nconst BOLD = \"\\x1b[1m\";\r\n\r\n/* ------------------------------------------------------------------ */\r\n/*  Types                                                              */\r\n/* ------------------------------------------------------------------ */\r\n\r\ninterface IndexEntry {\r\n  path: string;\r\n  hash: string;\r\n  mode: number;\r\n  mtime: number;\r\n}\r\n\r\ninterface CommitData {\r\n  tree: string;\r\n  parent: string | null;\r\n  parent2?: string | null;\r\n  author: string;\r\n  committer: string;\r\n  timestamp: number;\r\n  message: string;\r\n}\r\n\r\ninterface TreeEntry {\r\n  name: string;\r\n  mode: string;\r\n  type: \"blob\" | \"tree\";\r\n  hash: string;\r\n}\r\n\r\ninterface DiffEntry {\r\n  path: string;\r\n  status: \"added\" | \"modified\" | \"deleted\";\r\n  oldContent?: string;\r\n  newContent?: string;\r\n}\r\n\r\ninterface EditOp {\r\n  kind: \"equal\" | \"insert\" | \"delete\";\r\n  oldIdx: number;   // 0-based, -1 for inserts\r\n  newIdx: number;   // 0-based, -1 for deletes\r\n  line: string;\r\n}\r\n\r\ninterface DiffHunk {\r\n  oldStart: number;   // 1-based\r\n  oldCount: number;\r\n  newStart: number;   // 1-based\r\n  newCount: number;\r\n  lines: EditOp[];\r\n}\r\n\r\n/* ------------------------------------------------------------------ */\r\n/*  Myers diff algorithm                                               */\r\n/* ------------------------------------------------------------------ */\r\n\r\n// Myers O(ND) diff with backtracking\r\nfunction myersDiff(oldLines: string[], newLines: string[]): EditOp[] {\r\n  const N = oldLines.length;\r\n  const M = newLines.length;\r\n  const MAX = N + M;\r\n\r\n  if (MAX === 0) return [];\r\n\r\n  const vHistory: Map<number, number>[] = [];\r\n  const v = new Map<number, number>();\r\n  v.set(1, 0);\r\n\r\n  let foundD = -1;\r\n\r\n  outer:\r\n  for (let d = 0; d <= MAX; d++) {\r\n    vHistory.push(new Map(v));\r\n\r\n    for (let k = -d; k <= d; k += 2) {\r\n      let x: number;\r\n      if (k === -d || (k !== d && (v.get(k - 1) ?? 0) < (v.get(k + 1) ?? 0))) {\r\n        x = v.get(k + 1) ?? 0;\r\n      } else {\r\n        x = (v.get(k - 1) ?? 0) + 1;\r\n      }\r\n      let y = x - k;\r\n\r\n      while (x < N && y < M && oldLines[x] === newLines[y]) {\r\n        x++;\r\n        y++;\r\n      }\r\n\r\n      v.set(k, x);\r\n\r\n      if (x >= N && y >= M) {\r\n        foundD = d;\r\n        break outer;\r\n      }\r\n    }\r\n  }\r\n\r\n  if (foundD < 0) foundD = MAX;\r\n\r\n  let x = N;\r\n  let y = M;\r\n  const ops: EditOp[] = [];\r\n\r\n  for (let d = foundD; d > 0; d--) {\r\n    const vPrev = vHistory[d];\r\n    const k = x - y;\r\n    let prevK: number;\r\n\r\n    if (k === -d || (k !== d && (vPrev.get(k - 1) ?? 0) < (vPrev.get(k + 1) ?? 0))) {\r\n      prevK = k + 1;\r\n    } else {\r\n      prevK = k - 1;\r\n    }\r\n\r\n    const prevX = vPrev.get(prevK) ?? 0;\r\n    const prevY = prevX - prevK;\r\n\r\n    while (x > prevX && y > prevY) {\r\n      x--;\r\n      y--;\r\n      ops.push({ kind: \"equal\", oldIdx: x, newIdx: y, line: oldLines[x] });\r\n    }\r\n\r\n    if (d > 0) {\r\n      if (x === prevX) {\r\n        y--;\r\n        ops.push({ kind: \"insert\", oldIdx: -1, newIdx: y, line: newLines[y] });\r\n      } else {\r\n        x--;\r\n        ops.push({ kind: \"delete\", oldIdx: x, newIdx: -1, line: oldLines[x] });\r\n      }\r\n    }\r\n  }\r\n\r\n  while (x > 0 && y > 0) {\r\n    x--;\r\n    y--;\r\n    ops.push({ kind: \"equal\", oldIdx: x, newIdx: y, line: oldLines[x] });\r\n  }\r\n\r\n  ops.reverse();\r\n  return ops;\r\n}\r\n\r\nfunction buildHunks(ops: EditOp[], contextLines = 3): DiffHunk[] {\r\n  const hunks: DiffHunk[] = [];\r\n  if (ops.length === 0) return hunks;\r\n\r\n  const changeIndices: number[] = [];\r\n  for (let i = 0; i < ops.length; i++) {\r\n    if (ops[i].kind !== \"equal\") changeIndices.push(i);\r\n  }\r\n  if (changeIndices.length === 0) return hunks;\r\n\r\n  let groupStart = changeIndices[0];\r\n  let groupEnd = changeIndices[0];\r\n\r\n  const groups: Array<[number, number]> = [];\r\n\r\n  for (let i = 1; i < changeIndices.length; i++) {\r\n    if (changeIndices[i] - groupEnd <= contextLines * 2) {\r\n      groupEnd = changeIndices[i];\r\n    } else {\r\n      groups.push([groupStart, groupEnd]);\r\n      groupStart = changeIndices[i];\r\n      groupEnd = changeIndices[i];\r\n    }\r\n  }\r\n  groups.push([groupStart, groupEnd]);\r\n\r\n  for (const [gStart, gEnd] of groups) {\r\n    const hunkOpsStart = Math.max(0, gStart - contextLines);\r\n    const hunkOpsEnd = Math.min(ops.length - 1, gEnd + contextLines);\r\n\r\n    const hunkOps = ops.slice(hunkOpsStart, hunkOpsEnd + 1);\r\n\r\n    let oldStart = Infinity;\r\n    let newStart = Infinity;\r\n    let oldCount = 0;\r\n    let newCount = 0;\r\n\r\n    for (const op of hunkOps) {\r\n      if (op.kind === \"equal\") {\r\n        if (op.oldIdx < oldStart) oldStart = op.oldIdx;\r\n        if (op.newIdx < newStart) newStart = op.newIdx;\r\n        oldCount++;\r\n        newCount++;\r\n      } else if (op.kind === \"delete\") {\r\n        if (op.oldIdx < oldStart) oldStart = op.oldIdx;\r\n        oldCount++;\r\n      } else {\r\n        if (op.newIdx < newStart) newStart = op.newIdx;\r\n        newCount++;\r\n      }\r\n    }\r\n\r\n    hunks.push({\r\n      oldStart: (oldStart === Infinity ? 0 : oldStart) + 1,\r\n      oldCount,\r\n      newStart: (newStart === Infinity ? 0 : newStart) + 1,\r\n      newCount,\r\n      lines: hunkOps,\r\n    });\r\n  }\r\n\r\n  return hunks;\r\n}\r\n\r\nfunction countChanges(ops: EditOp[]): { insertions: number; deletions: number } {\r\n  let insertions = 0;\r\n  let deletions = 0;\r\n  for (const op of ops) {\r\n    if (op.kind === \"insert\") insertions++;\r\n    else if (op.kind === \"delete\") deletions++;\r\n  }\r\n  return { insertions, deletions };\r\n}\r\n\r\ninterface StashEntry {\r\n  message: string;\r\n  commitHash: string;\r\n}\r\n\r\n/* ------------------------------------------------------------------ */\r\n/*  GitRepo — core operations against the VFS                         */\r\n/* ------------------------------------------------------------------ */\r\n\r\nclass GitRepo {\r\n  private vol: MemoryVolume;\r\n  readonly gitDir: string;\r\n  readonly workDir: string;\r\n\r\n  constructor(vol: MemoryVolume, workDir: string, gitDir: string) {\r\n    this.vol = vol;\r\n    this.workDir = workDir;\r\n    this.gitDir = gitDir;\r\n  }\r\n\r\n  /* -- object store -- */\r\n\r\n  private readStore(): Record<string, { type: string; data: string }> {\r\n    try {\r\n      const raw = this.vol.readFileSync(this.gitDir + \"/objects/store.json\", \"utf8\" as any) as string;\r\n      return JSON.parse(raw);\r\n    } catch {\r\n      return {};\r\n    }\r\n  }\r\n\r\n  private writeStore(store: Record<string, { type: string; data: string }>): void {\r\n    this.vol.writeFileSync(this.gitDir + \"/objects/store.json\", JSON.stringify(store));\r\n  }\r\n\r\n  hashContent(type: string, content: string): string {\r\n    const header = `${type} ${content.length}\\0`;\r\n    return createHash(\"sha1\").update(header + content).digest(\"hex\") as string;\r\n  }\r\n\r\n  writeObject(type: string, content: string): string {\r\n    const hash = this.hashContent(type, content);\r\n    const store = this.readStore();\r\n    if (!store[hash]) {\r\n      store[hash] = { type, data: content };\r\n      this.writeStore(store);\r\n    }\r\n    return hash;\r\n  }\r\n\r\n  readObject(hash: string): { type: string; data: string } | null {\r\n    const store = this.readStore();\r\n    return store[hash] ?? null;\r\n  }\r\n\r\n  /* -- index (staging area) -- */\r\n\r\n  readIndex(): IndexEntry[] {\r\n    try {\r\n      const raw = this.vol.readFileSync(this.gitDir + \"/index\", \"utf8\" as any) as string;\r\n      return JSON.parse(raw).entries ?? [];\r\n    } catch {\r\n      return [];\r\n    }\r\n  }\r\n\r\n  writeIndex(entries: IndexEntry[]): void {\r\n    this.vol.writeFileSync(this.gitDir + \"/index\", JSON.stringify({ entries }));\r\n  }\r\n\r\n  addToIndex(relPath: string, content: string): void {\r\n    const hash = this.writeObject(\"blob\", content);\r\n    const entries = this.readIndex();\r\n    const idx = entries.findIndex((e) => e.path === relPath);\r\n    const entry: IndexEntry = { path: relPath, hash, mode: 100644, mtime: Date.now() };\r\n    if (idx >= 0) entries[idx] = entry;\r\n    else entries.push(entry);\r\n    entries.sort((a, b) => a.path.localeCompare(b.path));\r\n    this.writeIndex(entries);\r\n  }\r\n\r\n  removeFromIndex(relPath: string): void {\r\n    const entries = this.readIndex().filter((e) => e.path !== relPath);\r\n    this.writeIndex(entries);\r\n  }\r\n\r\n  /* -- refs -- */\r\n\r\n  getHEAD(): string {\r\n    try {\r\n      return (this.vol.readFileSync(this.gitDir + \"/HEAD\", \"utf8\" as any) as string).trim();\r\n    } catch {\r\n      return \"ref: refs/heads/main\";\r\n    }\r\n  }\r\n\r\n  setHEAD(value: string): void {\r\n    this.vol.writeFileSync(this.gitDir + \"/HEAD\", value + \"\\n\");\r\n  }\r\n\r\n  getCurrentBranch(): string | null {\r\n    const head = this.getHEAD();\r\n    if (head.startsWith(\"ref: refs/heads/\")) return head.slice(16);\r\n    return null;\r\n  }\r\n\r\n  resolveRef(ref: string): string | null {\r\n    if (/^[0-9a-f]{40}$/.test(ref)) return ref;\r\n    if (ref.startsWith(\"ref: \")) {\r\n      const target = ref.slice(5);\r\n      try {\r\n        return (this.vol.readFileSync(this.gitDir + \"/\" + target, \"utf8\" as any) as string).trim();\r\n      } catch {\r\n        return null;\r\n      }\r\n    }\r\n    // try branch, then tag\r\n    try {\r\n      return (this.vol.readFileSync(this.gitDir + \"/refs/heads/\" + ref, \"utf8\" as any) as string).trim();\r\n    } catch { /* */ }\r\n    try {\r\n      return (this.vol.readFileSync(this.gitDir + \"/refs/tags/\" + ref, \"utf8\" as any) as string).trim();\r\n    } catch { /* */ }\r\n    return null;\r\n  }\r\n\r\n  resolveHEAD(): string | null {\r\n    return this.resolveRef(this.getHEAD());\r\n  }\r\n\r\n  updateBranchRef(branch: string, hash: string): void {\r\n    const refPath = this.gitDir + \"/refs/heads/\" + branch;\r\n    const dir = refPath.substring(0, refPath.lastIndexOf(\"/\"));\r\n    if (!this.vol.existsSync(dir)) this.vol.mkdirSync(dir, { recursive: true });\r\n    this.vol.writeFileSync(refPath, hash + \"\\n\");\r\n  }\r\n\r\n  listBranches(): string[] {\r\n    try {\r\n      return this.vol.readdirSync(this.gitDir + \"/refs/heads\") as string[];\r\n    } catch {\r\n      return [];\r\n    }\r\n  }\r\n\r\n  deleteBranch(name: string): boolean {\r\n    try {\r\n      const refPath = this.gitDir + \"/refs/heads/\" + name;\r\n      if (this.vol.existsSync(refPath)) {\r\n        this.vol.unlinkSync(refPath);\r\n        return true;\r\n      }\r\n    } catch { /* */ }\r\n    return false;\r\n  }\r\n\r\n  /* -- config -- */\r\n\r\n  readConfig(): string {\r\n    try {\r\n      return this.vol.readFileSync(this.gitDir + \"/config\", \"utf8\" as any) as string;\r\n    } catch {\r\n      return \"\";\r\n    }\r\n  }\r\n\r\n  writeConfig(content: string): void {\r\n    this.vol.writeFileSync(this.gitDir + \"/config\", content);\r\n  }\r\n\r\n  getConfigValue(key: string): string | null {\r\n    const config = this.readConfig();\r\n    const parts = key.split(\".\");\r\n    if (parts.length < 2) return null;\r\n\r\n    // e.g. remote.origin.url → [remote \"origin\"] / url\r\n    let sectionName: string;\r\n    let subSection: string | null = null;\r\n    let propName: string;\r\n\r\n    if (parts.length === 3) {\r\n      sectionName = parts[0];\r\n      subSection = parts[1];\r\n      propName = parts[2];\r\n    } else {\r\n      sectionName = parts[0];\r\n      propName = parts[1];\r\n    }\r\n\r\n    const lines = config.split(\"\\n\");\r\n    let inSection = false;\r\n    for (const line of lines) {\r\n      const trimmed = line.trim();\r\n      if (trimmed.startsWith(\"[\")) {\r\n        if (subSection) {\r\n          const pat = `[${sectionName} \"${subSection}\"]`;\r\n          inSection = trimmed === pat;\r\n        } else {\r\n          inSection = trimmed === `[${sectionName}]`;\r\n        }\r\n        continue;\r\n      }\r\n      if (inSection) {\r\n        const match = trimmed.match(/^(\\w+)\\s*=\\s*(.*)$/);\r\n        if (match && match[1] === propName) return match[2].trim();\r\n      }\r\n    }\r\n    return null;\r\n  }\r\n\r\n  setConfigValue(key: string, value: string): void {\r\n    const parts = key.split(\".\");\r\n    let sectionHeader: string;\r\n    let propName: string;\r\n\r\n    if (parts.length === 3) {\r\n      sectionHeader = `[${parts[0]} \"${parts[1]}\"]`;\r\n      propName = parts[2];\r\n    } else if (parts.length === 2) {\r\n      sectionHeader = `[${parts[0]}]`;\r\n      propName = parts[1];\r\n    } else {\r\n      return;\r\n    }\r\n\r\n    const config = this.readConfig();\r\n    const lines = config.split(\"\\n\");\r\n    let sectionIdx = -1;\r\n    let propIdx = -1;\r\n    let inSection = false;\r\n    let lastLineInSection = -1;\r\n\r\n    for (let i = 0; i < lines.length; i++) {\r\n      const trimmed = lines[i].trim();\r\n      if (trimmed.startsWith(\"[\")) {\r\n        if (inSection && propIdx === -1) lastLineInSection = i - 1;\r\n        inSection = trimmed === sectionHeader;\r\n        if (inSection) sectionIdx = i;\r\n        continue;\r\n      }\r\n      if (inSection) {\r\n        lastLineInSection = i;\r\n        const match = trimmed.match(/^(\\w+)\\s*=\\s*(.*)$/);\r\n        if (match && match[1] === propName) propIdx = i;\r\n      }\r\n    }\r\n    if (inSection && lastLineInSection === -1) lastLineInSection = sectionIdx;\r\n\r\n    if (propIdx >= 0) {\r\n      lines[propIdx] = `\\t${propName} = ${value}`;\r\n    } else if (sectionIdx >= 0) {\r\n      lines.splice(lastLineInSection + 1, 0, `\\t${propName} = ${value}`);\r\n    } else {\r\n      if (lines.length > 0 && lines[lines.length - 1] !== \"\") lines.push(\"\");\r\n      lines.push(sectionHeader);\r\n      lines.push(`\\t${propName} = ${value}`);\r\n    }\r\n\r\n    this.writeConfig(lines.join(\"\\n\"));\r\n  }\r\n\r\n  /* -- tree building -- */\r\n\r\n  buildTree(entries: IndexEntry[]): string {\r\n    const root: TreeEntry[] = [];\r\n    const subdirs = new Map<string, IndexEntry[]>();\r\n\r\n    for (const e of entries) {\r\n      const slashIdx = e.path.indexOf(\"/\");\r\n      if (slashIdx === -1) {\r\n        root.push({ name: e.path, mode: String(e.mode), type: \"blob\", hash: e.hash });\r\n      } else {\r\n        const dir = e.path.substring(0, slashIdx);\r\n        const rest: IndexEntry = { ...e, path: e.path.substring(slashIdx + 1) };\r\n        if (!subdirs.has(dir)) subdirs.set(dir, []);\r\n        subdirs.get(dir)!.push(rest);\r\n      }\r\n    }\r\n\r\n    for (const [dir, subEntries] of subdirs) {\r\n      const treeHash = this.buildTree(subEntries);\r\n      root.push({ name: dir, mode: \"40000\", type: \"tree\", hash: treeHash });\r\n    }\r\n\r\n    root.sort((a, b) => a.name.localeCompare(b.name));\r\n    const treeContent = JSON.stringify(root);\r\n    return this.writeObject(\"tree\", treeContent);\r\n  }\r\n\r\n  /* -- commits -- */\r\n\r\n  createCommit(message: string, parent: string | null, tree: string, parent2?: string | null): string {\r\n    const author = `${this.getConfigValue(\"user.name\") ?? \"nodepod-user\"} <${this.getConfigValue(\"user.email\") ?? \"user@nodepod.dev\"}>`;\r\n    const data: CommitData = {\r\n      tree,\r\n      parent,\r\n      author,\r\n      committer: author,\r\n      timestamp: Date.now(),\r\n      message,\r\n    };\r\n    if (parent2) data.parent2 = parent2;\r\n    return this.writeObject(\"commit\", JSON.stringify(data));\r\n  }\r\n\r\n  readCommit(hash: string): CommitData | null {\r\n    const obj = this.readObject(hash);\r\n    if (!obj || obj.type !== \"commit\") return null;\r\n    return JSON.parse(obj.data);\r\n  }\r\n\r\n  walkLog(startHash: string | null, limit: number): Array<{ hash: string } & CommitData> {\r\n    const result: Array<{ hash: string } & CommitData> = [];\r\n    let current = startHash;\r\n    while (current && result.length < limit) {\r\n      const commit = this.readCommit(current);\r\n      if (!commit) break;\r\n      result.push({ hash: current, ...commit });\r\n      current = commit.parent;\r\n    }\r\n    return result;\r\n  }\r\n\r\n  /* -- working tree helpers -- */\r\n\r\n  getCommitTree(commitHash: string): Map<string, string> {\r\n    const commit = this.readCommit(commitHash);\r\n    if (!commit) return new Map();\r\n    return this.flattenTree(commit.tree, \"\");\r\n  }\r\n\r\n  private flattenTree(treeHash: string, prefix: string): Map<string, string> {\r\n    const obj = this.readObject(treeHash);\r\n    if (!obj || obj.type !== \"tree\") return new Map();\r\n    const entries: TreeEntry[] = JSON.parse(obj.data);\r\n    const result = new Map<string, string>();\r\n    for (const e of entries) {\r\n      const fullPath = prefix ? prefix + \"/\" + e.name : e.name;\r\n      if (e.type === \"blob\") {\r\n        result.set(fullPath, e.hash);\r\n      } else {\r\n        for (const [k, v] of this.flattenTree(e.hash, fullPath)) {\r\n          result.set(k, v);\r\n        }\r\n      }\r\n    }\r\n    return result;\r\n  }\r\n\r\n  getBlobContent(hash: string): string | null {\r\n    const obj = this.readObject(hash);\r\n    if (!obj || obj.type !== \"blob\") return null;\r\n    return obj.data;\r\n  }\r\n\r\n  /* -- diff helpers -- */\r\n\r\n  diffWorkingVsIndex(): DiffEntry[] {\r\n    const index = this.readIndex();\r\n    const indexMap = new Map(index.map((e) => [e.path, e.hash]));\r\n    const result: DiffEntry[] = [];\r\n    const seen = new Set<string>();\r\n\r\n    this.walkWorkTree(this.workDir, \"\", (relPath, content) => {\r\n      seen.add(relPath);\r\n      const currentHash = this.hashContent(\"blob\", content);\r\n      const indexHash = indexMap.get(relPath);\r\n      if (!indexHash) {\r\n        // untracked, handled separately\r\n      } else if (currentHash !== indexHash) {\r\n        result.push({ path: relPath, status: \"modified\", oldContent: this.getBlobContent(indexHash) ?? \"\", newContent: content });\r\n      }\r\n    });\r\n\r\n    for (const e of index) {\r\n      if (!seen.has(e.path)) {\r\n        result.push({ path: e.path, status: \"deleted\", oldContent: this.getBlobContent(e.hash) ?? \"\" });\r\n      }\r\n    }\r\n\r\n    return result;\r\n  }\r\n\r\n  diffIndexVsHEAD(): DiffEntry[] {\r\n    const index = this.readIndex();\r\n    const headHash = this.resolveHEAD();\r\n    const headTree = headHash ? this.getCommitTree(headHash) : new Map<string, string>();\r\n    const result: DiffEntry[] = [];\r\n\r\n    const indexMap = new Map(index.map((e) => [e.path, e.hash]));\r\n\r\n    for (const e of index) {\r\n      const headBlobHash = headTree.get(e.path);\r\n      if (!headBlobHash) {\r\n        result.push({ path: e.path, status: \"added\" });\r\n      } else if (headBlobHash !== e.hash) {\r\n        result.push({ path: e.path, status: \"modified\" });\r\n      }\r\n    }\r\n\r\n    for (const [path] of headTree) {\r\n      if (!indexMap.has(path)) {\r\n        result.push({ path, status: \"deleted\" });\r\n      }\r\n    }\r\n\r\n    return result;\r\n  }\r\n\r\n  getUntrackedFiles(): string[] {\r\n    const index = this.readIndex();\r\n    const indexPaths = new Set(index.map((e) => e.path));\r\n    const untracked: string[] = [];\r\n\r\n    this.walkWorkTree(this.workDir, \"\", (relPath) => {\r\n      if (!indexPaths.has(relPath)) untracked.push(relPath);\r\n    });\r\n\r\n    return untracked.sort();\r\n  }\r\n\r\n  /* -- file tree walker -- */\r\n\r\n  walkWorkTree(dir: string, prefix: string, cb: (relPath: string, content: string) => void): void {\r\n    let entries: string[];\r\n    try {\r\n      entries = this.vol.readdirSync(dir) as string[];\r\n    } catch {\r\n      return;\r\n    }\r\n    for (const name of entries) {\r\n      if (name === \".git\" || name === \"node_modules\") continue;\r\n      const fullPath = dir + \"/\" + name;\r\n      try {\r\n        const stat = this.vol.statSync(fullPath);\r\n        if (stat.isDirectory()) {\r\n          this.walkWorkTree(fullPath, prefix ? prefix + \"/\" + name : name, cb);\r\n        } else if (stat.isFile()) {\r\n          const relPath = prefix ? prefix + \"/\" + name : name;\r\n          const content = this.vol.readFileSync(fullPath, \"utf8\" as any) as string;\r\n          cb(relPath, content);\r\n        }\r\n      } catch { /* skip unreadable */ }\r\n    }\r\n  }\r\n\r\n  /* -- stash -- */\r\n\r\n  readStashList(): StashEntry[] {\r\n    try {\r\n      const raw = this.vol.readFileSync(this.gitDir + \"/refs/stash\", \"utf8\" as any) as string;\r\n      return JSON.parse(raw);\r\n    } catch {\r\n      return [];\r\n    }\r\n  }\r\n\r\n  writeStashList(list: StashEntry[]): void {\r\n    const dir = this.gitDir + \"/refs\";\r\n    if (!this.vol.existsSync(dir)) this.vol.mkdirSync(dir, { recursive: true });\r\n    this.vol.writeFileSync(this.gitDir + \"/refs/stash\", JSON.stringify(list));\r\n  }\r\n\r\n  /* -- remote helpers -- */\r\n\r\n  getRemoteUrl(name: string): string | null {\r\n    return this.getConfigValue(`remote.${name}.url`);\r\n  }\r\n\r\n  parseGitHubUrl(url: string): { owner: string; repo: string } | null {\r\n    let m = url.match(/github\\.com\\/([^/]+)\\/([^/.]+?)(?:\\.git)?$/);\r\n    if (m) return { owner: m[1], repo: m[2] };\r\n    m = url.match(/github\\.com:([^/]+)\\/([^/.]+?)(?:\\.git)?$/);\r\n    if (m) return { owner: m[1], repo: m[2] };\r\n    return null;\r\n  }\r\n}\r\n\r\n/* ------------------------------------------------------------------ */\r\n/*  GitHub API helper                                                  */\r\n/* ------------------------------------------------------------------ */\r\n\r\nasync function githubApi(\r\n  path: string,\r\n  token: string,\r\n  method = \"GET\",\r\n  body?: any,\r\n): Promise<{ ok: boolean; status: number; data: any }> {\r\n  const url = `https://api.github.com${path}`;\r\n  const headers: Record<string, string> = {\r\n    Accept: \"application/vnd.github.v3+json\",\r\n    Authorization: `token ${token}`,\r\n    \"User-Agent\": \"nodepod-git\",\r\n  };\r\n  if (body) headers[\"Content-Type\"] = \"application/json\";\r\n\r\n  const resp = await proxiedFetch(url, {\r\n    method,\r\n    headers,\r\n    body: body ? JSON.stringify(body) : undefined,\r\n  });\r\n\r\n  let data: any;\r\n  try {\r\n    data = await resp.json();\r\n  } catch {\r\n    data = null;\r\n  }\r\n  return { ok: resp.ok, status: resp.status, data };\r\n}\r\n\r\n/* ------------------------------------------------------------------ */\r\n/*  Find .git directory                                                */\r\n/* ------------------------------------------------------------------ */\r\n\r\nfunction findGitDir(vol: MemoryVolume, cwd: string): { gitDir: string; workDir: string } | null {\r\n  let dir = cwd;\r\n  while (true) {\r\n    const gitPath = dir + \"/.git\";\r\n    try {\r\n      if (vol.existsSync(gitPath)) return { gitDir: gitPath, workDir: dir };\r\n    } catch { /* */ }\r\n    const parent = dir.substring(0, dir.lastIndexOf(\"/\")) || \"/\";\r\n    if (parent === dir) break;\r\n    dir = parent;\r\n  }\r\n  if (vol.existsSync(\"/.git\")) return { gitDir: \"/.git\", workDir: \"/\" };\r\n  return null;\r\n}\r\n\r\nfunction requireRepo(vol: MemoryVolume, cwd: string): { repo: GitRepo } | { error: ShellResult } {\r\n  const found = findGitDir(vol, cwd);\r\n  if (!found) {\r\n    return { error: fail(\"fatal: not a git repository (or any of the parent directories): .git\\n\", 128) };\r\n  }\r\n  return { repo: new GitRepo(vol, found.workDir, found.gitDir) };\r\n}\r\n\r\n/* ------------------------------------------------------------------ */\r\n/*  Subcommand handlers                                                */\r\n/* ------------------------------------------------------------------ */\r\n\r\nfunction gitInit(args: string[], ctx: ShellContext): ShellResult {\r\n  let target = ctx.cwd;\r\n  for (const a of args) {\r\n    if (!a.startsWith(\"-\")) {\r\n      target = pathModule.resolve(ctx.cwd, a);\r\n      break;\r\n    }\r\n  }\r\n\r\n  const gitDir = target + \"/.git\";\r\n  if (ctx.volume.existsSync(gitDir)) {\r\n    return ok(`Reinitialized existing Git repository in ${gitDir}/\\n`);\r\n  }\r\n\r\n  const dirs = [\r\n    gitDir,\r\n    gitDir + \"/objects\",\r\n    gitDir + \"/refs\",\r\n    gitDir + \"/refs/heads\",\r\n    gitDir + \"/refs/tags\",\r\n  ];\r\n  for (const d of dirs) {\r\n    if (!ctx.volume.existsSync(d)) ctx.volume.mkdirSync(d, { recursive: true });\r\n  }\r\n\r\n  ctx.volume.writeFileSync(gitDir + \"/HEAD\", \"ref: refs/heads/main\\n\");\r\n  ctx.volume.writeFileSync(\r\n    gitDir + \"/config\",\r\n    \"[core]\\n\\tbare = false\\n\\tfilemode = false\\n[user]\\n\\tname = nodepod-user\\n\\temail = user@nodepod.dev\\n\",\r\n  );\r\n  ctx.volume.writeFileSync(gitDir + \"/objects/store.json\", \"{}\");\r\n  ctx.volume.writeFileSync(gitDir + \"/index\", '{\"entries\":[]}');\r\n\r\n  if (!ctx.volume.existsSync(target)) ctx.volume.mkdirSync(target, { recursive: true });\r\n\r\n  return ok(`Initialized empty Git repository in ${gitDir}/\\n`);\r\n}\r\n\r\nfunction gitAdd(args: string[], ctx: ShellContext): ShellResult {\r\n  const r = requireRepo(ctx.volume, ctx.cwd);\r\n  if (\"error\" in r) return r.error;\r\n  const { repo } = r;\r\n\r\n  const addAll = args.includes(\"-A\") || args.includes(\"--all\") || args.includes(\".\");\r\n  const pathspecs = addAll ? [] : args.filter((a) => !a.startsWith(\"-\"));\r\n\r\n  if (!addAll && pathspecs.length === 0) {\r\n    return fail(\"Nothing specified, nothing added.\\n\");\r\n  }\r\n\r\n  if (addAll) {\r\n    repo.walkWorkTree(repo.workDir, \"\", (relPath, content) => {\r\n      repo.addToIndex(relPath, content);\r\n    });\r\n    const index = repo.readIndex();\r\n    const toRemove: string[] = [];\r\n    for (const e of index) {\r\n      const fullPath = repo.workDir + \"/\" + e.path;\r\n      if (!ctx.volume.existsSync(fullPath)) toRemove.push(e.path);\r\n    }\r\n    for (const p of toRemove) repo.removeFromIndex(p);\r\n  } else {\r\n    for (const spec of pathspecs) {\r\n      const absPath = pathModule.resolve(ctx.cwd, spec);\r\n      const relPath = pathModule.relative(repo.workDir, absPath);\r\n      if (relPath.startsWith(\"..\")) continue;\r\n\r\n      if (ctx.volume.existsSync(absPath)) {\r\n        try {\r\n          const stat = ctx.volume.statSync(absPath);\r\n          if (stat.isDirectory()) {\r\n            repo.walkWorkTree(absPath, relPath, (rp, content) => {\r\n              repo.addToIndex(rp, content);\r\n            });\r\n          } else {\r\n            const content = ctx.volume.readFileSync(absPath, \"utf8\" as any) as string;\r\n            repo.addToIndex(relPath, content);\r\n          }\r\n        } catch { /* skip */ }\r\n      } else {\r\n        repo.removeFromIndex(relPath);\r\n      }\r\n    }\r\n  }\r\n\r\n  return ok(\"\");\r\n}\r\n\r\nfunction gitStatus(args: string[], ctx: ShellContext): ShellResult {\r\n  const r = requireRepo(ctx.volume, ctx.cwd);\r\n  if (\"error\" in r) return r.error;\r\n  const { repo } = r;\r\n\r\n  const short = args.includes(\"-s\") || args.includes(\"--short\");\r\n  const porcelain = args.includes(\"--porcelain\");\r\n\r\n  const staged = repo.diffIndexVsHEAD();\r\n  const unstaged = repo.diffWorkingVsIndex();\r\n  const untracked = repo.getUntrackedFiles();\r\n\r\n  if (short || porcelain) {\r\n    let out = \"\";\r\n    for (const d of staged) {\r\n      const code = d.status === \"added\" ? \"A\" : d.status === \"deleted\" ? \"D\" : \"M\";\r\n      out += `${code}  ${d.path}\\n`;\r\n    }\r\n    for (const d of unstaged) {\r\n      const code = d.status === \"deleted\" ? \"D\" : \"M\";\r\n      out += ` ${code} ${d.path}\\n`;\r\n    }\r\n    for (const p of untracked) {\r\n      out += `?? ${p}\\n`;\r\n    }\r\n    return ok(out);\r\n  }\r\n\r\n  const branch = repo.getCurrentBranch() ?? \"(HEAD detached)\";\r\n  let out = `On branch ${branch}\\n`;\r\n\r\n  if (staged.length === 0 && unstaged.length === 0 && untracked.length === 0) {\r\n    out += \"nothing to commit, working tree clean\\n\";\r\n    return ok(out);\r\n  }\r\n\r\n  if (staged.length > 0) {\r\n    out += `\\nChanges to be committed:\\n`;\r\n    out += `  (use \"git restore --staged <file>...\" to unstage)\\n`;\r\n    for (const d of staged) {\r\n      const label = d.status === \"added\" ? \"new file\" : d.status === \"deleted\" ? \"deleted\" : \"modified\";\r\n      out += `\\t${GREEN}${label}:   ${d.path}${RESET}\\n`;\r\n    }\r\n  }\r\n\r\n  if (unstaged.length > 0) {\r\n    out += `\\nChanges not staged for commit:\\n`;\r\n    out += `  (use \"git add <file>...\" to update what will be committed)\\n`;\r\n    for (const d of unstaged) {\r\n      const label = d.status === \"deleted\" ? \"deleted\" : \"modified\";\r\n      out += `\\t${RED}${label}:   ${d.path}${RESET}\\n`;\r\n    }\r\n  }\r\n\r\n  if (untracked.length > 0) {\r\n    out += `\\nUntracked files:\\n`;\r\n    out += `  (use \"git add <file>...\" to include in what will be committed)\\n`;\r\n    for (const p of untracked) {\r\n      out += `\\t${RED}${p}${RESET}\\n`;\r\n    }\r\n  }\r\n\r\n  return ok(out);\r\n}\r\n\r\nfunction gitCommit(args: string[], ctx: ShellContext): ShellResult {\r\n  const r = requireRepo(ctx.volume, ctx.cwd);\r\n  if (\"error\" in r) return r.error;\r\n  const { repo } = r;\r\n\r\n  let message: string | null = null;\r\n  let autoStage = false;\r\n  let allowEmpty = false;\r\n\r\n  for (let i = 0; i < args.length; i++) {\r\n    if (args[i] === \"-m\" || args[i] === \"--message\") {\r\n      message = args[++i] ?? \"\";\r\n    } else if (args[i] === \"-a\" || args[i] === \"--all\") {\r\n      autoStage = true;\r\n    } else if (args[i] === \"--allow-empty\") {\r\n      allowEmpty = true;\r\n    } else if (args[i] === \"--allow-empty-message\") {\r\n      /* */\r\n    } else if (args[i].startsWith(\"-m\")) {\r\n      message = args[i].slice(2);\r\n    }\r\n  }\r\n\r\n  if (message === null) {\r\n    return fail(\"error: switch `m' requires a value\\n\");\r\n  }\r\n\r\n  if (autoStage) {\r\n    const index = repo.readIndex();\r\n    for (const e of index) {\r\n      const fullPath = repo.workDir + \"/\" + e.path;\r\n      if (ctx.volume.existsSync(fullPath)) {\r\n        try {\r\n          const content = ctx.volume.readFileSync(fullPath, \"utf8\" as any) as string;\r\n          repo.addToIndex(e.path, content);\r\n        } catch { /* */ }\r\n      } else {\r\n        repo.removeFromIndex(e.path);\r\n      }\r\n    }\r\n  }\r\n\r\n  const entries = repo.readIndex();\r\n  const staged = repo.diffIndexVsHEAD();\r\n\r\n  if (staged.length === 0 && !allowEmpty) {\r\n    return fail(\"nothing to commit, working tree clean\\n\");\r\n  }\r\n\r\n  const treeHash = repo.buildTree(entries);\r\n  const parent = repo.resolveHEAD();\r\n  const commitHash = repo.createCommit(message, parent, treeHash);\r\n\r\n  const branch = repo.getCurrentBranch();\r\n  if (branch) {\r\n    repo.updateBranchRef(branch, commitHash);\r\n  } else {\r\n    repo.setHEAD(commitHash);\r\n  }\r\n\r\n  const shortHash = commitHash.slice(0, 7);\r\n  const branchLabel = branch ?? \"HEAD\";\r\n  const isRoot = !parent;\r\n  const out = `[${branchLabel}${isRoot ? \" (root-commit)\" : \"\"} ${shortHash}] ${message}\\n` +\r\n    ` ${staged.length} file${staged.length !== 1 ? \"s\" : \"\"} changed\\n`;\r\n\r\n  return ok(out);\r\n}\r\n\r\nfunction gitLog(args: string[], ctx: ShellContext): ShellResult {\r\n  const r = requireRepo(ctx.volume, ctx.cwd);\r\n  if (\"error\" in r) return r.error;\r\n  const { repo } = r;\r\n\r\n  let limit = 50;\r\n  let oneline = false;\r\n  let format: string | null = null;\r\n\r\n  for (let i = 0; i < args.length; i++) {\r\n    if (args[i] === \"--oneline\") {\r\n      oneline = true;\r\n    } else if (args[i] === \"-n\" || args[i] === \"--max-count\") {\r\n      limit = parseInt(args[++i], 10) || 50;\r\n    } else if (args[i].startsWith(\"-\") && /^-\\d+$/.test(args[i])) {\r\n      limit = parseInt(args[i].slice(1), 10) || 50;\r\n    } else if (args[i].startsWith(\"--format=\")) {\r\n      format = args[i].slice(9);\r\n    } else if (args[i].startsWith(\"--pretty=format:\")) {\r\n      format = args[i].slice(16);\r\n    } else if (args[i].startsWith(\"--pretty=\")) {\r\n      format = args[i].slice(9);\r\n    }\r\n  }\r\n\r\n  const head = repo.resolveHEAD();\r\n  if (!head) return ok(\"\");\r\n\r\n  const commits = repo.walkLog(head, limit);\r\n  if (commits.length === 0) return ok(\"\");\r\n\r\n  const currentBranch = repo.getCurrentBranch();\r\n  let out = \"\";\r\n\r\n  for (const c of commits) {\r\n    if (format !== null) {\r\n      let line = format\r\n        .replace(/%H/g, c.hash)\r\n        .replace(/%h/g, c.hash.slice(0, 7))\r\n        .replace(/%s/g, c.message.split(\"\\n\")[0])\r\n        .replace(/%an/g, c.author.split(\" <\")[0])\r\n        .replace(/%ae/g, (c.author.match(/<(.+?)>/) ?? [\"\", \"\"])[1])\r\n        .replace(/%d/g, c.hash === head && currentBranch ? ` (HEAD -> ${currentBranch})` : \"\")\r\n        .replace(/%n/g, \"\\n\");\r\n      out += line + \"\\n\";\r\n    } else if (oneline) {\r\n      const decoration = c.hash === head && currentBranch ? ` ${YELLOW}(HEAD -> ${CYAN}${currentBranch}${YELLOW})${RESET}` : \"\";\r\n      out += `${YELLOW}${c.hash.slice(0, 7)}${RESET}${decoration} ${c.message.split(\"\\n\")[0]}\\n`;\r\n    } else {\r\n      const decoration = c.hash === head && currentBranch ? ` ${YELLOW}(HEAD -> ${CYAN}${currentBranch}${YELLOW})${RESET}` : \"\";\r\n      out += `${YELLOW}commit ${c.hash}${RESET}${decoration}\\n`;\r\n      out += `Author: ${c.author}\\n`;\r\n      out += `Date:   ${new Date(c.timestamp).toUTCString()}\\n`;\r\n      out += `\\n    ${c.message}\\n\\n`;\r\n    }\r\n  }\r\n\r\n  return ok(out);\r\n}\r\n\r\nfunction gitDiff(args: string[], ctx: ShellContext): ShellResult {\r\n  const r = requireRepo(ctx.volume, ctx.cwd);\r\n  if (\"error\" in r) return r.error;\r\n  const { repo } = r;\r\n\r\n  const staged = args.includes(\"--staged\") || args.includes(\"--cached\");\r\n  const stat = args.includes(\"--stat\");\r\n\r\n  let diffs: DiffEntry[];\r\n  if (staged) {\r\n    diffs = repo.diffIndexVsHEAD();\r\n    const headHash = repo.resolveHEAD();\r\n    const headTree = headHash ? repo.getCommitTree(headHash) : new Map<string, string>();\r\n    const index = repo.readIndex();\r\n    const indexMap = new Map(index.map((e) => [e.path, e.hash]));\r\n    for (const d of diffs) {\r\n      const oldHash = headTree.get(d.path);\r\n      const newHash = indexMap.get(d.path);\r\n      d.oldContent = oldHash ? repo.getBlobContent(oldHash) ?? \"\" : \"\";\r\n      d.newContent = newHash ? repo.getBlobContent(newHash) ?? \"\" : \"\";\r\n    }\r\n  } else {\r\n    diffs = repo.diffWorkingVsIndex();\r\n  }\r\n\r\n  if (diffs.length === 0) return ok(\"\");\r\n\r\n  if (stat) {\r\n    let out = \"\";\r\n    let totalIns = 0;\r\n    let totalDel = 0;\r\n    for (const d of diffs) {\r\n      const oldLines = d.oldContent ? d.oldContent.split(\"\\n\") : [];\r\n      const newLines = d.newContent ? d.newContent.split(\"\\n\") : [];\r\n      const ops = myersDiff(oldLines, newLines);\r\n      const { insertions: ins, deletions: del } = countChanges(ops);\r\n      totalIns += ins;\r\n      totalDel += del;\r\n      out += ` ${d.path} | ${ins + del} ${GREEN}${\"+\"\r\n        .repeat(ins)}${RED}${\"-\".repeat(del)}${RESET}\\n`;\r\n    }\r\n    out += ` ${diffs.length} file${diffs.length !== 1 ? \"s\" : \"\"} changed`;\r\n    if (totalIns > 0) out += `, ${totalIns} insertion${totalIns !== 1 ? \"s\" : \"\"}(+)`;\r\n    if (totalDel > 0) out += `, ${totalDel} deletion${totalDel !== 1 ? \"s\" : \"\"}(-)`;\r\n    out += \"\\n\";\r\n    return ok(out);\r\n  }\r\n\r\n  let out = \"\";\r\n  for (const d of diffs) {\r\n    const oldLines = d.oldContent ? d.oldContent.split(\"\\n\") : [];\r\n    const newLines = d.newContent ? d.newContent.split(\"\\n\") : [];\r\n\r\n    out += `${BOLD}diff --git a/${d.path} b/${d.path}${RESET}\\n`;\r\n    if (d.status === \"added\") out += \"new file mode 100644\\n\";\r\n    if (d.status === \"deleted\") out += \"deleted file mode 100644\\n\";\r\n    out += `--- ${d.status === \"added\" ? \"/dev/null\" : \"a/\" + d.path}\\n`;\r\n    out += `+++ ${d.status === \"deleted\" ? \"/dev/null\" : \"b/\" + d.path}\\n`;\r\n\r\n    const ops = myersDiff(oldLines, newLines);\r\n    const hunks = buildHunks(ops, 3);\r\n\r\n    for (const hunk of hunks) {\r\n      out += `${CYAN}@@ -${hunk.oldStart},${hunk.oldCount} +${hunk.newStart},${hunk.newCount} @@${RESET}\\n`;\r\n      for (const op of hunk.lines) {\r\n        if (op.kind === \"equal\") {\r\n          out += ` ${op.line}\\n`;\r\n        } else if (op.kind === \"delete\") {\r\n          out += `${RED}-${op.line}${RESET}\\n`;\r\n        } else {\r\n          out += `${GREEN}+${op.line}${RESET}\\n`;\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  return ok(out);\r\n}\r\n\r\nfunction gitBranch(args: string[], ctx: ShellContext): ShellResult {\r\n  const r = requireRepo(ctx.volume, ctx.cwd);\r\n  if (\"error\" in r) return r.error;\r\n  const { repo } = r;\r\n\r\n  if (args.includes(\"--show-current\")) {\r\n    const branch = repo.getCurrentBranch();\r\n    return ok(branch ? branch + \"\\n\" : \"\\n\");\r\n  }\r\n\r\n  const deleteIdx = args.indexOf(\"-d\") !== -1 ? args.indexOf(\"-d\") : args.indexOf(\"-D\");\r\n  if (deleteIdx >= 0) {\r\n    const name = args[deleteIdx + 1];\r\n    if (!name) return fail(\"error: branch name required\\n\");\r\n    if (name === repo.getCurrentBranch()) {\r\n      return fail(`error: Cannot delete branch '${name}' checked out.\\n`);\r\n    }\r\n    if (repo.deleteBranch(name)) {\r\n      return ok(`Deleted branch ${name}.\\n`);\r\n    }\r\n    return fail(`error: branch '${name}' not found.\\n`);\r\n  }\r\n\r\n  const renameIdx = args.indexOf(\"-m\");\r\n  if (renameIdx >= 0) {\r\n    const oldName = args[renameIdx + 1];\r\n    const newName = args[renameIdx + 2];\r\n    if (!oldName || !newName) return fail(\"error: too few arguments to rename\\n\");\r\n    const hash = repo.resolveRef(oldName);\r\n    if (!hash) return fail(`error: refname ${oldName} not a valid ref\\n`);\r\n    repo.updateBranchRef(newName, hash);\r\n    repo.deleteBranch(oldName);\r\n    if (repo.getCurrentBranch() === oldName) {\r\n      repo.setHEAD(\"ref: refs/heads/\" + newName);\r\n    }\r\n    return ok(`Branch '${oldName}' renamed to '${newName}'.\\n`);\r\n  }\r\n\r\n  const nonFlags = args.filter((a) => !a.startsWith(\"-\"));\r\n  if (nonFlags.length > 0) {\r\n    const name = nonFlags[0];\r\n    const startPoint = nonFlags[1];\r\n    const hash = startPoint ? repo.resolveRef(startPoint) : repo.resolveHEAD();\r\n    if (!hash) return fail(`fatal: not a valid object name: '${startPoint ?? \"HEAD\"}'\\n`, 128);\r\n    repo.updateBranchRef(name, hash);\r\n    return ok(\"\");\r\n  }\r\n\r\n  const branches = repo.listBranches();\r\n  const current = repo.getCurrentBranch();\r\n  let out = \"\";\r\n  for (const b of branches.sort()) {\r\n    if (b === current) {\r\n      out += `* ${GREEN}${b}${RESET}\\n`;\r\n    } else {\r\n      out += `  ${b}\\n`;\r\n    }\r\n  }\r\n  return ok(out);\r\n}\r\n\r\nfunction gitCheckout(args: string[], ctx: ShellContext): ShellResult {\r\n  const r = requireRepo(ctx.volume, ctx.cwd);\r\n  if (\"error\" in r) return r.error;\r\n  const { repo } = r;\r\n\r\n  const createNew = args.includes(\"-b\");\r\n  const nonFlags = args.filter((a) => !a.startsWith(\"-\"));\r\n\r\n  if (nonFlags.length === 0) return fail(\"error: you must specify a branch to checkout\\n\");\r\n\r\n  let target: string;\r\n  let newBranchName: string | null = null;\r\n\r\n  if (createNew) {\r\n    const bIdx = args.indexOf(\"-b\");\r\n    newBranchName = args[bIdx + 1];\r\n    if (!newBranchName) return fail(\"error: switch 'b' requires a value\\n\");\r\n    target = args[bIdx + 2] ?? repo.getCurrentBranch() ?? \"HEAD\";\r\n  } else {\r\n    target = nonFlags[0];\r\n  }\r\n\r\n  let commitHash = repo.resolveRef(target);\r\n\r\n  if (createNew) {\r\n    if (!commitHash) commitHash = repo.resolveHEAD();\r\n    if (!commitHash) return fail(`fatal: not a valid object name: '${target}'\\n`, 128);\r\n    repo.updateBranchRef(newBranchName!, commitHash);\r\n    repo.setHEAD(\"ref: refs/heads/\" + newBranchName!);\r\n    return ok(`Switched to a new branch '${newBranchName}'\\n`);\r\n  }\r\n\r\n  const branches = repo.listBranches();\r\n  const isBranch = branches.includes(target);\r\n\r\n  if (!commitHash) {\r\n    return fail(`error: pathspec '${target}' did not match any file(s) known to git.\\n`);\r\n  }\r\n\r\n  const currentHead = repo.resolveHEAD();\r\n  if (commitHash !== currentHead) {\r\n    const targetTree = repo.getCommitTree(commitHash);\r\n    const currentTree = currentHead ? repo.getCommitTree(currentHead) : new Map<string, string>();\r\n\r\n    for (const [path, blobHash] of targetTree) {\r\n      const content = repo.getBlobContent(blobHash);\r\n      if (content !== null) {\r\n        const fullPath = repo.workDir + \"/\" + path;\r\n        const dir = fullPath.substring(0, fullPath.lastIndexOf(\"/\"));\r\n        if (dir && !ctx.volume.existsSync(dir)) {\r\n          ctx.volume.mkdirSync(dir, { recursive: true });\r\n        }\r\n        ctx.volume.writeFileSync(fullPath, content);\r\n      }\r\n    }\r\n\r\n    for (const [path] of currentTree) {\r\n      if (!targetTree.has(path)) {\r\n        const fullPath = repo.workDir + \"/\" + path;\r\n        try {\r\n          ctx.volume.unlinkSync(fullPath);\r\n        } catch { /* */ }\r\n      }\r\n    }\r\n\r\n    const newIndex: IndexEntry[] = [];\r\n    for (const [path, blobHash] of targetTree) {\r\n      newIndex.push({ path, hash: blobHash, mode: 100644, mtime: Date.now() });\r\n    }\r\n    newIndex.sort((a, b) => a.path.localeCompare(b.path));\r\n    repo.writeIndex(newIndex);\r\n  }\r\n\r\n  if (isBranch) {\r\n    repo.setHEAD(\"ref: refs/heads/\" + target);\r\n    return ok(`Switched to branch '${target}'\\n`);\r\n  } else {\r\n    repo.setHEAD(commitHash);\r\n    return ok(`HEAD is now at ${commitHash.slice(0, 7)}\\n`);\r\n  }\r\n}\r\n\r\nfunction gitSwitch(args: string[], ctx: ShellContext): ShellResult {\r\n  const newArgs: string[] = [];\r\n  for (let i = 0; i < args.length; i++) {\r\n    if (args[i] === \"-c\" || args[i] === \"--create\") {\r\n      newArgs.push(\"-b\");\r\n    } else {\r\n      newArgs.push(args[i]);\r\n    }\r\n  }\r\n  return gitCheckout(newArgs, ctx);\r\n}\r\n\r\nfunction gitRevParse(args: string[], ctx: ShellContext): ShellResult {\r\n  const found = findGitDir(ctx.volume, ctx.cwd);\r\n\r\n  for (const arg of args) {\r\n    switch (arg) {\r\n      case \"--show-toplevel\":\r\n        if (!found) return fail(\"fatal: not a git repository\\n\", 128);\r\n        return ok(found.workDir + \"\\n\");\r\n      case \"--is-inside-work-tree\":\r\n        return ok(found ? \"true\\n\" : \"false\\n\");\r\n      case \"--git-dir\":\r\n        if (!found) return fail(\"fatal: not a git repository\\n\", 128);\r\n        return ok(\".git\\n\");\r\n      case \"--is-bare-repository\":\r\n        return ok(\"false\\n\");\r\n      case \"--abbrev-ref\": {\r\n        const refArg = args[args.indexOf(arg) + 1];\r\n        if (refArg === \"HEAD\" && found) {\r\n          const repo = new GitRepo(ctx.volume, found.workDir, found.gitDir);\r\n          const branch = repo.getCurrentBranch();\r\n          return ok((branch ?? \"HEAD\") + \"\\n\");\r\n        }\r\n        return ok(\"HEAD\\n\");\r\n      }\r\n      case \"--short\": {\r\n        const refArg = args[args.indexOf(arg) + 1];\r\n        if (refArg === \"HEAD\" && found) {\r\n          const repo = new GitRepo(ctx.volume, found.workDir, found.gitDir);\r\n          const hash = repo.resolveHEAD();\r\n          return ok(hash ? hash.slice(0, 7) + \"\\n\" : \"\\n\");\r\n        }\r\n        return ok(\"\\n\");\r\n      }\r\n      case \"--verify\": {\r\n        const refArg = args[args.indexOf(arg) + 1];\r\n        if (!found) return fail(\"fatal: not a git repository\\n\", 128);\r\n        const repo = new GitRepo(ctx.volume, found.workDir, found.gitDir);\r\n        if (refArg === \"HEAD\") {\r\n          const hash = repo.resolveHEAD();\r\n          if (hash) return ok(hash + \"\\n\");\r\n          return fail(\"fatal: Needed a single revision\\n\", 128);\r\n        }\r\n        const resolved = repo.resolveRef(refArg ?? \"\");\r\n        if (resolved) return ok(resolved + \"\\n\");\r\n        return fail(`fatal: Needed a single revision\\n`, 128);\r\n      }\r\n      default:\r\n        break;\r\n    }\r\n  }\r\n\r\n  const nonFlags = args.filter((a) => !a.startsWith(\"-\"));\r\n  if (nonFlags.length > 0 && found) {\r\n    const repo = new GitRepo(ctx.volume, found.workDir, found.gitDir);\r\n    for (const ref of nonFlags) {\r\n      if (ref === \"HEAD\") {\r\n        const hash = repo.resolveHEAD();\r\n        if (hash) return ok(hash + \"\\n\");\r\n      } else {\r\n        const hash = repo.resolveRef(ref);\r\n        if (hash) return ok(hash + \"\\n\");\r\n      }\r\n    }\r\n  }\r\n\r\n  return ok(\"\\n\");\r\n}\r\n\r\nfunction gitConfig(args: string[], ctx: ShellContext): ShellResult {\r\n  const found = findGitDir(ctx.volume, ctx.cwd);\r\n\r\n  if (args.includes(\"--list\") || args.includes(\"-l\")) {\r\n    if (!found) return fail(\"fatal: not a git repository\\n\", 128);\r\n    const repo = new GitRepo(ctx.volume, found.workDir, found.gitDir);\r\n    const config = repo.readConfig();\r\n    const lines = config.split(\"\\n\");\r\n    let section = \"\";\r\n    let subSection = \"\";\r\n    let out = \"\";\r\n    for (const line of lines) {\r\n      const trimmed = line.trim();\r\n      const secMatch = trimmed.match(/^\\[(\\w+)\\s*(?:\"([^\"]*)\")?\\]$/);\r\n      if (secMatch) {\r\n        section = secMatch[1];\r\n        subSection = secMatch[2] ?? \"\";\r\n        continue;\r\n      }\r\n      const kvMatch = trimmed.match(/^(\\w+)\\s*=\\s*(.*)$/);\r\n      if (kvMatch && section) {\r\n        const key = subSection\r\n          ? `${section}.${subSection}.${kvMatch[1]}`\r\n          : `${section}.${kvMatch[1]}`;\r\n        out += `${key}=${kvMatch[2].trim()}\\n`;\r\n      }\r\n    }\r\n    return ok(out);\r\n  }\r\n\r\n  // no distinction between --global/--local in nodepod\r\n  const filtered = args.filter((a) => a !== \"--global\" && a !== \"--local\" && a !== \"--get\");\r\n\r\n  if (filtered.length === 0) return fail(\"error: key required\\n\");\r\n\r\n  const key = filtered[0];\r\n  const value = filtered[1];\r\n\r\n  if (!found) {\r\n    if (value !== undefined) return fail(\"fatal: not a git repository\\n\", 128);\r\n    return ok(\"\\n\");\r\n  }\r\n\r\n  const repo = new GitRepo(ctx.volume, found.workDir, found.gitDir);\r\n\r\n  if (value !== undefined) {\r\n    repo.setConfigValue(key, value);\r\n    return ok(\"\");\r\n  }\r\n\r\n  const val = repo.getConfigValue(key);\r\n  if (val !== null) return ok(val + \"\\n\");\r\n  return fail(\"\");\r\n}\r\n\r\nfunction gitRemote(args: string[], ctx: ShellContext): ShellResult {\r\n  const r = requireRepo(ctx.volume, ctx.cwd);\r\n  if (\"error\" in r) return r.error;\r\n  const { repo } = r;\r\n\r\n  const sub = args[0];\r\n\r\n  if (sub === \"add\") {\r\n    const name = args[1];\r\n    const url = args[2];\r\n    if (!name || !url) return fail(\"usage: git remote add <name> <url>\\n\");\r\n    repo.setConfigValue(`remote.${name}.url`, url);\r\n    repo.setConfigValue(`remote.${name}.fetch`, `+refs/heads/*:refs/remotes/${name}/*`);\r\n    return ok(\"\");\r\n  }\r\n\r\n  if (sub === \"remove\" || sub === \"rm\") {\r\n    const name = args[1];\r\n    if (!name) return fail(\"usage: git remote remove <name>\\n\");\r\n    const config = repo.readConfig();\r\n    const lines = config.split(\"\\n\");\r\n    const out: string[] = [];\r\n    let skip = false;\r\n    for (const line of lines) {\r\n      if (line.trim() === `[remote \"${name}\"]`) {\r\n        skip = true;\r\n        continue;\r\n      }\r\n      if (line.trim().startsWith(\"[\") && skip) skip = false;\r\n      if (!skip) out.push(line);\r\n    }\r\n    repo.writeConfig(out.join(\"\\n\"));\r\n    return ok(\"\");\r\n  }\r\n\r\n  if (sub === \"get-url\") {\r\n    const name = args[1] ?? \"origin\";\r\n    const url = repo.getRemoteUrl(name);\r\n    if (url) return ok(url + \"\\n\");\r\n    return fail(`fatal: No such remote '${name}'\\n`, 2);\r\n  }\r\n\r\n  const verbose = args.includes(\"-v\") || args.includes(\"--verbose\");\r\n  const config = repo.readConfig();\r\n  const remotes: Array<{ name: string; url: string }> = [];\r\n  const lines = config.split(\"\\n\");\r\n  let currentRemote = \"\";\r\n  for (const line of lines) {\r\n    const match = line.trim().match(/^\\[remote\\s+\"([^\"]+)\"\\]$/);\r\n    if (match) {\r\n      currentRemote = match[1];\r\n      continue;\r\n    }\r\n    if (currentRemote) {\r\n      const kvMatch = line.trim().match(/^url\\s*=\\s*(.+)$/);\r\n      if (kvMatch) {\r\n        remotes.push({ name: currentRemote, url: kvMatch[1].trim() });\r\n        currentRemote = \"\";\r\n      }\r\n    }\r\n  }\r\n\r\n  let out = \"\";\r\n  for (const r of remotes) {\r\n    if (verbose) {\r\n      out += `${r.name}\\t${r.url} (fetch)\\n`;\r\n      out += `${r.name}\\t${r.url} (push)\\n`;\r\n    } else {\r\n      out += r.name + \"\\n\";\r\n    }\r\n  }\r\n  return ok(out);\r\n}\r\n\r\nfunction gitMerge(args: string[], ctx: ShellContext): ShellResult {\r\n  const r = requireRepo(ctx.volume, ctx.cwd);\r\n  if (\"error\" in r) return r.error;\r\n  const { repo } = r;\r\n\r\n  if (args.includes(\"--abort\")) {\r\n    try {\r\n      ctx.volume.unlinkSync(repo.gitDir + \"/MERGE_HEAD\");\r\n      ctx.volume.unlinkSync(repo.gitDir + \"/MERGE_MSG\");\r\n    } catch { /* */ }\r\n    return ok(\"Merge aborted.\\n\");\r\n  }\r\n\r\n  const target = args.filter((a) => !a.startsWith(\"-\"))[0];\r\n  if (!target) return fail(\"error: specify a branch to merge\\n\");\r\n\r\n  const targetHash = repo.resolveRef(target);\r\n  if (!targetHash) return fail(`merge: ${target} - not something we can merge\\n`);\r\n\r\n  const currentHash = repo.resolveHEAD();\r\n  if (!currentHash) {\r\n    const branch = repo.getCurrentBranch();\r\n    if (branch) repo.updateBranchRef(branch, targetHash);\r\n    return ok(`Fast-forward\\n`);\r\n  }\r\n\r\n  if (currentHash === targetHash) {\r\n    return ok(\"Already up to date.\\n\");\r\n  }\r\n\r\n  // check for fast-forward\r\n  let walker: string | null = targetHash;\r\n  let isFF = false;\r\n  for (let i = 0; i < 1000; i++) {\r\n    if (walker === currentHash) { isFF = true; break; }\r\n    const commit = repo.readCommit(walker!);\r\n    if (!commit || !commit.parent) break;\r\n    walker = commit.parent;\r\n  }\r\n\r\n  if (isFF) {\r\n    const branch = repo.getCurrentBranch();\r\n    if (branch) repo.updateBranchRef(branch, targetHash);\r\n    else repo.setHEAD(targetHash);\r\n\r\n    const targetTree = repo.getCommitTree(targetHash);\r\n    for (const [path, blobHash] of targetTree) {\r\n      const content = repo.getBlobContent(blobHash);\r\n      if (content !== null) {\r\n        const fullPath = repo.workDir + \"/\" + path;\r\n        const dir = fullPath.substring(0, fullPath.lastIndexOf(\"/\"));\r\n        if (dir && !ctx.volume.existsSync(dir)) ctx.volume.mkdirSync(dir, { recursive: true });\r\n        ctx.volume.writeFileSync(fullPath, content);\r\n      }\r\n    }\r\n\r\n    const newIndex: IndexEntry[] = [];\r\n    for (const [path, blobHash] of targetTree) {\r\n      newIndex.push({ path, hash: blobHash, mode: 100644, mtime: Date.now() });\r\n    }\r\n    repo.writeIndex(newIndex);\r\n\r\n    return ok(`Updating ${currentHash.slice(0, 7)}..${targetHash.slice(0, 7)}\\nFast-forward\\n`);\r\n  }\r\n\r\n  const entries = repo.readIndex();\r\n  const treeHash = repo.buildTree(entries);\r\n  const mergeMessage = `Merge branch '${target}'`;\r\n  const mergeHash = repo.createCommit(mergeMessage, currentHash, treeHash, targetHash);\r\n\r\n  const branch = repo.getCurrentBranch();\r\n  if (branch) repo.updateBranchRef(branch, mergeHash);\r\n  else repo.setHEAD(mergeHash);\r\n\r\n  return ok(`Merge made by the 'recursive' strategy.\\n`);\r\n}\r\n\r\nfunction gitStash(args: string[], ctx: ShellContext): ShellResult {\r\n  const r = requireRepo(ctx.volume, ctx.cwd);\r\n  if (\"error\" in r) return r.error;\r\n  const { repo } = r;\r\n\r\n  const sub = args[0] ?? \"push\";\r\n\r\n  if (sub === \"list\") {\r\n    const list = repo.readStashList();\r\n    let out = \"\";\r\n    for (let i = 0; i < list.length; i++) {\r\n      out += `stash@{${i}}: ${list[i].message}\\n`;\r\n    }\r\n    return ok(out);\r\n  }\r\n\r\n  if (sub === \"push\" || sub === \"save\" || !args[0]) {\r\n    const message = args.find((a) => !a.startsWith(\"-\")) && args[0] !== \"push\" && args[0] !== \"save\"\r\n      ? args.join(\" \")\r\n      : \"WIP on \" + (repo.getCurrentBranch() ?? \"HEAD\");\r\n\r\n    const unstaged = repo.diffWorkingVsIndex();\r\n    const staged = repo.diffIndexVsHEAD();\r\n    if (unstaged.length === 0 && staged.length === 0) {\r\n      return ok(\"No local changes to save\\n\");\r\n    }\r\n\r\n    const entries = repo.readIndex();\r\n    repo.walkWorkTree(repo.workDir, \"\", (relPath, content) => {\r\n      repo.addToIndex(relPath, content);\r\n    });\r\n    const allEntries = repo.readIndex();\r\n    const treeHash = repo.buildTree(allEntries);\r\n    const parent = repo.resolveHEAD();\r\n    const stashHash = repo.createCommit(\"stash: \" + message, parent, treeHash);\r\n\r\n    repo.writeIndex(entries);\r\n\r\n    const headHash = repo.resolveHEAD();\r\n    if (headHash) {\r\n      const headTree = repo.getCommitTree(headHash);\r\n      for (const [path, blobHash] of headTree) {\r\n        const content = repo.getBlobContent(blobHash);\r\n        if (content !== null) {\r\n          const fullPath = repo.workDir + \"/\" + path;\r\n          const dir = fullPath.substring(0, fullPath.lastIndexOf(\"/\"));\r\n          if (dir && !ctx.volume.existsSync(dir)) ctx.volume.mkdirSync(dir, { recursive: true });\r\n          ctx.volume.writeFileSync(fullPath, content);\r\n        }\r\n      }\r\n    }\r\n\r\n    const list = repo.readStashList();\r\n    list.unshift({ message, commitHash: stashHash });\r\n    repo.writeStashList(list);\r\n\r\n    return ok(`Saved working directory and index state ${message}\\n`);\r\n  }\r\n\r\n  if (sub === \"pop\" || sub === \"apply\") {\r\n    const idxArg = args[1] ? parseInt(args[1], 10) : 0;\r\n    const list = repo.readStashList();\r\n    if (idxArg >= list.length) return fail(`error: stash@{${idxArg}} does not exist\\n`);\r\n\r\n    const entry = list[idxArg];\r\n    const stashTree = repo.getCommitTree(entry.commitHash);\r\n\r\n    for (const [path, blobHash] of stashTree) {\r\n      const content = repo.getBlobContent(blobHash);\r\n      if (content !== null) {\r\n        const fullPath = repo.workDir + \"/\" + path;\r\n        const dir = fullPath.substring(0, fullPath.lastIndexOf(\"/\"));\r\n        if (dir && !ctx.volume.existsSync(dir)) ctx.volume.mkdirSync(dir, { recursive: true });\r\n        ctx.volume.writeFileSync(fullPath, content);\r\n      }\r\n    }\r\n\r\n    if (sub === \"pop\") {\r\n      list.splice(idxArg, 1);\r\n      repo.writeStashList(list);\r\n    }\r\n\r\n    return ok(`Applied stash@{${idxArg}}\\n`);\r\n  }\r\n\r\n  if (sub === \"drop\") {\r\n    const idxArg = args[1] ? parseInt(args[1], 10) : 0;\r\n    const list = repo.readStashList();\r\n    if (idxArg >= list.length) return fail(`error: stash@{${idxArg}} does not exist\\n`);\r\n    list.splice(idxArg, 1);\r\n    repo.writeStashList(list);\r\n    return ok(`Dropped stash@{${idxArg}}\\n`);\r\n  }\r\n\r\n  return fail(`error: unknown stash subcommand '${sub}'\\n`);\r\n}\r\n\r\nfunction gitRm(args: string[], ctx: ShellContext): ShellResult {\r\n  const r = requireRepo(ctx.volume, ctx.cwd);\r\n  if (\"error\" in r) return r.error;\r\n  const { repo } = r;\r\n\r\n  const cached = args.includes(\"--cached\");\r\n  const paths = args.filter((a) => !a.startsWith(\"-\"));\r\n\r\n  if (paths.length === 0) return fail(\"usage: git rm [--cached] <file>...\\n\");\r\n\r\n  for (const p of paths) {\r\n    const absPath = pathModule.resolve(ctx.cwd, p);\r\n    const relPath = pathModule.relative(repo.workDir, absPath);\r\n    repo.removeFromIndex(relPath);\r\n    if (!cached) {\r\n      try { ctx.volume.unlinkSync(absPath); } catch { /* */ }\r\n    }\r\n  }\r\n\r\n  return ok(\"\");\r\n}\r\n\r\nfunction gitReset(args: string[], ctx: ShellContext): ShellResult {\r\n  const r = requireRepo(ctx.volume, ctx.cwd);\r\n  if (\"error\" in r) return r.error;\r\n  const { repo } = r;\r\n\r\n  const hard = args.includes(\"--hard\");\r\n  const soft = args.includes(\"--soft\");\r\n  const paths = args.filter((a) => !a.startsWith(\"-\"));\r\n\r\n  if (paths.length > 0 && !hard && !soft) {\r\n    const headHash = repo.resolveHEAD();\r\n    const headTree = headHash ? repo.getCommitTree(headHash) : new Map<string, string>();\r\n\r\n    for (const p of paths) {\r\n      const absPath = pathModule.resolve(ctx.cwd, p);\r\n      const relPath = pathModule.relative(repo.workDir, absPath);\r\n      const headBlobHash = headTree.get(relPath);\r\n      if (headBlobHash) {\r\n        const entries = repo.readIndex();\r\n        const idx = entries.findIndex((e) => e.path === relPath);\r\n        if (idx >= 0) {\r\n          entries[idx].hash = headBlobHash;\r\n          repo.writeIndex(entries);\r\n        }\r\n      } else {\r\n        repo.removeFromIndex(relPath);\r\n      }\r\n    }\r\n    return ok(\"\");\r\n  }\r\n\r\n  const targetRef = paths[0] ?? \"HEAD\";\r\n  const targetHash = repo.resolveRef(targetRef) ?? repo.resolveHEAD();\r\n  if (!targetHash) return fail(\"fatal: Failed to resolve HEAD\\n\", 128);\r\n\r\n  if (!soft) {\r\n    const tree = repo.getCommitTree(targetHash);\r\n    const newIndex: IndexEntry[] = [];\r\n    for (const [path, blobHash] of tree) {\r\n      newIndex.push({ path, hash: blobHash, mode: 100644, mtime: Date.now() });\r\n    }\r\n    newIndex.sort((a, b) => a.path.localeCompare(b.path));\r\n    repo.writeIndex(newIndex);\r\n  }\r\n\r\n  if (hard) {\r\n    const tree = repo.getCommitTree(targetHash);\r\n    for (const [path, blobHash] of tree) {\r\n      const content = repo.getBlobContent(blobHash);\r\n      if (content !== null) {\r\n        const fullPath = repo.workDir + \"/\" + path;\r\n        const dir = fullPath.substring(0, fullPath.lastIndexOf(\"/\"));\r\n        if (dir && !ctx.volume.existsSync(dir)) ctx.volume.mkdirSync(dir, { recursive: true });\r\n        ctx.volume.writeFileSync(fullPath, content);\r\n      }\r\n    }\r\n  }\r\n\r\n  const branch = repo.getCurrentBranch();\r\n  if (branch) repo.updateBranchRef(branch, targetHash);\r\n\r\n  return ok(`HEAD is now at ${targetHash.slice(0, 7)}\\n`);\r\n}\r\n\r\n/* ------------------------------------------------------------------ */\r\n/*  Remote commands (GitHub API)                                       */\r\n/* ------------------------------------------------------------------ */\r\n\r\nfunction requireToken(env: Record<string, string>): string | null {\r\n  return env.GITHUB_TOKEN || env.GH_TOKEN || null;\r\n}\r\n\r\nasync function gitClone(args: string[], ctx: ShellContext): Promise<ShellResult> {\r\n  const nonFlags = args.filter((a) => !a.startsWith(\"-\"));\r\n  const url = nonFlags[0];\r\n  if (!url) return fail(\"usage: git clone <repository> [<directory>]\\n\");\r\n\r\n  let branch = \"main\";\r\n  const bIdx = args.indexOf(\"-b\");\r\n  if (bIdx >= 0 && args[bIdx + 1]) branch = args[bIdx + 1];\r\n\r\n  const tmpRepo = new GitRepo(ctx.volume, \"/\", \"/\");\r\n  const gh = tmpRepo.parseGitHubUrl(url);\r\n  if (!gh) {\r\n    return fail(`fatal: repository '${url}' is not a GitHub URL\\n`, 128);\r\n  }\r\n\r\n  const token = requireToken(ctx.env);\r\n  if (!token) {\r\n    return fail(\"fatal: authentication required. Set GITHUB_TOKEN environment variable.\\n\", 128);\r\n  }\r\n\r\n  let targetDir = nonFlags[1] ?? gh.repo;\r\n  if (!targetDir.startsWith(\"/\")) targetDir = pathModule.resolve(ctx.cwd, targetDir);\r\n\r\n  const repoInfo = await githubApi(`/repos/${gh.owner}/${gh.repo}`, token);\r\n  if (!repoInfo.ok) {\r\n    if (repoInfo.status === 404) return fail(`fatal: repository '${url}' not found\\n`, 128);\r\n    return fail(`fatal: GitHub API error: ${repoInfo.status} ${repoInfo.data?.message ?? \"\"}\\n`, 128);\r\n  }\r\n  const defaultBranch = repoInfo.data.default_branch ?? \"main\";\r\n  if (branch === \"main\" && defaultBranch !== \"main\") branch = defaultBranch;\r\n\r\n  const refResp = await githubApi(`/repos/${gh.owner}/${gh.repo}/git/ref/heads/${branch}`, token);\r\n  if (!refResp.ok) {\r\n    return fail(`fatal: Remote branch '${branch}' not found\\n`, 128);\r\n  }\r\n  const commitSha = refResp.data.object.sha;\r\n\r\n  const commitResp = await githubApi(`/repos/${gh.owner}/${gh.repo}/git/commits/${commitSha}`, token);\r\n  if (!commitResp.ok) return fail(`fatal: could not fetch commit\\n`, 128);\r\n  const treeSha = commitResp.data.tree.sha;\r\n\r\n  const treeResp = await githubApi(`/repos/${gh.owner}/${gh.repo}/git/trees/${treeSha}?recursive=1`, token);\r\n  if (!treeResp.ok) return fail(`fatal: could not fetch tree\\n`, 128);\r\n\r\n  if (!ctx.volume.existsSync(targetDir)) ctx.volume.mkdirSync(targetDir, { recursive: true });\r\n\r\n  let fileCount = 0;\r\n  const blobs: Array<{ path: string; sha: string }> = [];\r\n  for (const item of treeResp.data.tree) {\r\n    if (item.type === \"blob\") {\r\n      blobs.push({ path: item.path, sha: item.sha });\r\n    }\r\n  }\r\n\r\n  const BATCH_SIZE = 10;\r\n  for (let i = 0; i < blobs.length; i += BATCH_SIZE) {\r\n    const batch = blobs.slice(i, i + BATCH_SIZE);\r\n    const results = await Promise.all(\r\n      batch.map((b) => githubApi(`/repos/${gh.owner}/${gh.repo}/git/blobs/${b.sha}`, token)),\r\n    );\r\n    for (let j = 0; j < batch.length; j++) {\r\n      const blobResp = results[j];\r\n      if (!blobResp.ok) continue;\r\n      const filePath = targetDir + \"/\" + batch[j].path;\r\n      const dir = filePath.substring(0, filePath.lastIndexOf(\"/\"));\r\n      if (dir && !ctx.volume.existsSync(dir)) ctx.volume.mkdirSync(dir, { recursive: true });\r\n      let content: string;\r\n      if (blobResp.data.encoding === \"base64\") {\r\n        content = atob(blobResp.data.content.replace(/\\n/g, \"\"));\r\n      } else {\r\n        content = blobResp.data.content;\r\n      }\r\n      ctx.volume.writeFileSync(filePath, content);\r\n      fileCount++;\r\n    }\r\n  }\r\n\r\n  const initResult = gitInit([], { ...ctx, cwd: targetDir });\r\n\r\n  const clonedRepo = new GitRepo(ctx.volume, targetDir, targetDir + \"/.git\");\r\n  clonedRepo.setConfigValue(\"remote.origin.url\", url);\r\n  clonedRepo.setConfigValue(\"remote.origin.fetch\", \"+refs/heads/*:refs/remotes/origin/*\");\r\n  clonedRepo.setConfigValue(\"branch.\" + branch + \".remote\", \"origin\");\r\n  clonedRepo.setConfigValue(\"branch.\" + branch + \".merge\", \"refs/heads/\" + branch);\r\n\r\n  clonedRepo.setHEAD(\"ref: refs/heads/\" + branch);\r\n\r\n  clonedRepo.walkWorkTree(targetDir, \"\", (relPath, content) => {\r\n    clonedRepo.addToIndex(relPath, content);\r\n  });\r\n  const entries = clonedRepo.readIndex();\r\n  const treeHash = clonedRepo.buildTree(entries);\r\n  const cloneCommitHash = clonedRepo.createCommit(`Clone of ${url}`, null, treeHash);\r\n  clonedRepo.updateBranchRef(branch, cloneCommitHash);\r\n\r\n  return ok(`Cloning into '${nonFlags[1] ?? gh.repo}'...\\nremote: Enumerating objects: ${fileCount}\\nReceiving objects: 100% (${fileCount}/${fileCount}), done.\\n`);\r\n}\r\n\r\nasync function gitPush(args: string[], ctx: ShellContext): Promise<ShellResult> {\r\n  const r = requireRepo(ctx.volume, ctx.cwd);\r\n  if (\"error\" in r) return r.error;\r\n  const { repo } = r;\r\n\r\n  const token = requireToken(ctx.env);\r\n  if (!token) return fail(\"fatal: authentication required. Set GITHUB_TOKEN environment variable.\\n\", 128);\r\n\r\n  const nonFlags = args.filter((a) => !a.startsWith(\"-\"));\r\n  const remoteName = nonFlags[0] ?? \"origin\";\r\n  const localBranch = repo.getCurrentBranch();\r\n  if (!localBranch) return fail(\"fatal: not on a branch\\n\", 128);\r\n  const remoteBranch = nonFlags[1] ?? localBranch;\r\n\r\n  const remoteUrl = repo.getRemoteUrl(remoteName);\r\n  if (!remoteUrl) return fail(`fatal: '${remoteName}' does not appear to be a git repository\\n`, 128);\r\n\r\n  const gh = repo.parseGitHubUrl(remoteUrl);\r\n  if (!gh) return fail(`fatal: remote '${remoteName}' is not a GitHub URL\\n`, 128);\r\n\r\n  const headHash = repo.resolveHEAD();\r\n  if (!headHash) return fail(\"fatal: nothing to push\\n\", 128);\r\n\r\n  const commitTree = repo.getCommitTree(headHash);\r\n  const blobShas: Map<string, string> = new Map();\r\n\r\n  for (const [path, localHash] of commitTree) {\r\n    const content = repo.getBlobContent(localHash);\r\n    if (content === null) continue;\r\n    const blobResp = await githubApi(`/repos/${gh.owner}/${gh.repo}/git/blobs`, token, \"POST\", {\r\n      content: btoa(content),\r\n      encoding: \"base64\",\r\n    });\r\n    if (!blobResp.ok) return fail(`fatal: failed to create blob for ${path}: ${blobResp.data?.message}\\n`, 128);\r\n    blobShas.set(path, blobResp.data.sha);\r\n  }\r\n\r\n  const treeEntries = Array.from(blobShas).map(([path, sha]) => ({\r\n    path,\r\n    mode: \"100644\",\r\n    type: \"blob\",\r\n    sha,\r\n  }));\r\n  const treeResp = await githubApi(`/repos/${gh.owner}/${gh.repo}/git/trees`, token, \"POST\", {\r\n    tree: treeEntries,\r\n  });\r\n  if (!treeResp.ok) return fail(`fatal: failed to create tree: ${treeResp.data?.message}\\n`, 128);\r\n\r\n  let parentSha: string | null = null;\r\n  const refResp = await githubApi(`/repos/${gh.owner}/${gh.repo}/git/ref/heads/${remoteBranch}`, token);\r\n  if (refResp.ok) parentSha = refResp.data.object.sha;\r\n\r\n  const commit = repo.readCommit(headHash);\r\n  const commitBody: any = {\r\n    message: commit?.message ?? \"Push from nodepod\",\r\n    tree: treeResp.data.sha,\r\n  };\r\n  if (parentSha) commitBody.parents = [parentSha];\r\n\r\n  const commitResp = await githubApi(`/repos/${gh.owner}/${gh.repo}/git/commits`, token, \"POST\", commitBody);\r\n  if (!commitResp.ok) return fail(`fatal: failed to create commit: ${commitResp.data?.message}\\n`, 128);\r\n\r\n  if (parentSha) {\r\n    const force = args.includes(\"-f\") || args.includes(\"--force\");\r\n    const updateResp = await githubApi(\r\n      `/repos/${gh.owner}/${gh.repo}/git/refs/heads/${remoteBranch}`,\r\n      token,\r\n      \"PATCH\",\r\n      { sha: commitResp.data.sha, force },\r\n    );\r\n    if (!updateResp.ok) return fail(`fatal: failed to update ref: ${updateResp.data?.message}\\n`, 128);\r\n  } else {\r\n    const createResp = await githubApi(`/repos/${gh.owner}/${gh.repo}/git/refs`, token, \"POST\", {\r\n      ref: `refs/heads/${remoteBranch}`,\r\n      sha: commitResp.data.sha,\r\n    });\r\n    if (!createResp.ok) return fail(`fatal: failed to create ref: ${createResp.data?.message}\\n`, 128);\r\n  }\r\n\r\n  return ok(`To ${remoteUrl}\\n   ${(parentSha ?? \"000000\").slice(0, 7)}..${commitResp.data.sha.slice(0, 7)}  ${localBranch} -> ${remoteBranch}\\n`);\r\n}\r\n\r\nasync function gitPull(args: string[], ctx: ShellContext): Promise<ShellResult> {\r\n  const r = requireRepo(ctx.volume, ctx.cwd);\r\n  if (\"error\" in r) return r.error;\r\n  const { repo } = r;\r\n\r\n  const token = requireToken(ctx.env);\r\n  if (!token) return fail(\"fatal: authentication required. Set GITHUB_TOKEN environment variable.\\n\", 128);\r\n\r\n  const nonFlags = args.filter((a) => !a.startsWith(\"-\"));\r\n  const remoteName = nonFlags[0] ?? \"origin\";\r\n  const currentBranch = repo.getCurrentBranch();\r\n  if (!currentBranch) return fail(\"fatal: not on a branch\\n\", 128);\r\n  const remoteBranch = nonFlags[1] ?? currentBranch;\r\n\r\n  const remoteUrl = repo.getRemoteUrl(remoteName);\r\n  if (!remoteUrl) return fail(`fatal: '${remoteName}' does not appear to be a git repository\\n`, 128);\r\n\r\n  const gh = repo.parseGitHubUrl(remoteUrl);\r\n  if (!gh) return fail(`fatal: remote '${remoteName}' is not a GitHub URL\\n`, 128);\r\n\r\n  const refResp = await githubApi(`/repos/${gh.owner}/${gh.repo}/git/ref/heads/${remoteBranch}`, token);\r\n  if (!refResp.ok) return fail(`fatal: couldn't find remote ref refs/heads/${remoteBranch}\\n`, 128);\r\n  const remoteCommitSha = refResp.data.object.sha;\r\n\r\n  const localHead = repo.resolveHEAD();\r\n  if (localHead === remoteCommitSha) return ok(\"Already up to date.\\n\");\r\n\r\n  const commitResp = await githubApi(`/repos/${gh.owner}/${gh.repo}/git/commits/${remoteCommitSha}`, token);\r\n  if (!commitResp.ok) return fail(\"fatal: could not fetch remote commit\\n\", 128);\r\n  const treeSha = commitResp.data.tree.sha;\r\n\r\n  const treeResp = await githubApi(`/repos/${gh.owner}/${gh.repo}/git/trees/${treeSha}?recursive=1`, token);\r\n  if (!treeResp.ok) return fail(\"fatal: could not fetch tree\\n\", 128);\r\n\r\n  let updated = 0;\r\n  const blobs: Array<{ path: string; sha: string }> = [];\r\n  for (const item of treeResp.data.tree) {\r\n    if (item.type === \"blob\") blobs.push({ path: item.path, sha: item.sha });\r\n  }\r\n\r\n  const BATCH_SIZE = 10;\r\n  for (let i = 0; i < blobs.length; i += BATCH_SIZE) {\r\n    const batch = blobs.slice(i, i + BATCH_SIZE);\r\n    const results = await Promise.all(\r\n      batch.map((b) => githubApi(`/repos/${gh.owner}/${gh.repo}/git/blobs/${b.sha}`, token)),\r\n    );\r\n    for (let j = 0; j < batch.length; j++) {\r\n      const blobResp = results[j];\r\n      if (!blobResp.ok) continue;\r\n      const filePath = repo.workDir + \"/\" + batch[j].path;\r\n      const dir = filePath.substring(0, filePath.lastIndexOf(\"/\"));\r\n      if (dir && !ctx.volume.existsSync(dir)) ctx.volume.mkdirSync(dir, { recursive: true });\r\n      let content: string;\r\n      if (blobResp.data.encoding === \"base64\") {\r\n        content = atob(blobResp.data.content.replace(/\\n/g, \"\"));\r\n      } else {\r\n        content = blobResp.data.content;\r\n      }\r\n      ctx.volume.writeFileSync(filePath, content);\r\n      updated++;\r\n    }\r\n  }\r\n\r\n  repo.walkWorkTree(repo.workDir, \"\", (relPath, content) => {\r\n    repo.addToIndex(relPath, content);\r\n  });\r\n  const entries = repo.readIndex();\r\n  const treeHash = repo.buildTree(entries);\r\n  const pullCommit = repo.createCommit(`Pull from ${remoteName}/${remoteBranch}`, localHead, treeHash);\r\n  repo.updateBranchRef(currentBranch, pullCommit);\r\n\r\n  return ok(`From ${remoteUrl}\\nUpdating ${(localHead ?? \"000000\").slice(0, 7)}..${remoteCommitSha.slice(0, 7)}\\nFast-forward\\n ${updated} file${updated !== 1 ? \"s\" : \"\"} changed\\n`);\r\n}\r\n\r\nasync function gitFetch(args: string[], ctx: ShellContext): Promise<ShellResult> {\r\n  const r = requireRepo(ctx.volume, ctx.cwd);\r\n  if (\"error\" in r) return r.error;\r\n  const { repo } = r;\r\n\r\n  const token = requireToken(ctx.env);\r\n  if (!token) return fail(\"fatal: authentication required. Set GITHUB_TOKEN environment variable.\\n\", 128);\r\n\r\n  const nonFlags = args.filter((a) => !a.startsWith(\"-\"));\r\n  const remoteName = nonFlags[0] ?? \"origin\";\r\n\r\n  const remoteUrl = repo.getRemoteUrl(remoteName);\r\n  if (!remoteUrl) return fail(`fatal: '${remoteName}' does not appear to be a git repository\\n`, 128);\r\n\r\n  const gh = repo.parseGitHubUrl(remoteUrl);\r\n  if (!gh) return fail(`fatal: remote '${remoteName}' is not a GitHub URL\\n`, 128);\r\n\r\n  const branchesResp = await githubApi(`/repos/${gh.owner}/${gh.repo}/branches`, token);\r\n  if (!branchesResp.ok) return fail(`fatal: could not list remote branches\\n`, 128);\r\n\r\n  let out = `From ${remoteUrl}\\n`;\r\n  for (const b of branchesResp.data) {\r\n    const refPath = repo.gitDir + \"/refs/remotes/\" + remoteName + \"/\" + b.name;\r\n    const dir = refPath.substring(0, refPath.lastIndexOf(\"/\"));\r\n    if (!ctx.volume.existsSync(dir)) ctx.volume.mkdirSync(dir, { recursive: true });\r\n    ctx.volume.writeFileSync(refPath, b.commit.sha + \"\\n\");\r\n    out += ` * [updated]    ${b.name} -> ${remoteName}/${b.name}\\n`;\r\n  }\r\n\r\n  return ok(out);\r\n}\r\n\r\n/* ------------------------------------------------------------------ */\r\n/*  Command factory                                                    */\r\n/* ------------------------------------------------------------------ */\r\n\r\nexport function createGitCommand(): ShellCommand {\r\n  return {\r\n    name: \"git\",\r\n    async execute(args: string[], ctx: ShellContext): Promise<ShellResult> {\r\n      if (args.length === 0) {\r\n        return ok(`usage: git [--version] <command> [<args>]\\n`);\r\n      }\r\n\r\n      let effectiveCtx = ctx;\r\n      if (args[0] === \"-C\" && args[1]) {\r\n        const newCwd = pathModule.resolve(ctx.cwd, args[1]);\r\n        effectiveCtx = { ...ctx, cwd: newCwd };\r\n        args = args.slice(2);\r\n      }\r\n\r\n      const sub = args[0];\r\n      const subArgs = args.slice(1);\r\n\r\n      switch (sub) {\r\n        case \"--version\":\r\n        case \"-v\":\r\n          return ok(`git version ${VERSIONS.GIT}\\n`);\r\n        case \"--help\":\r\n        case \"help\":\r\n          return ok(\r\n            `usage: git <command> [<args>]\\n\\n` +\r\n            `Available commands:\\n` +\r\n            `  init       Create an empty Git repository\\n` +\r\n            `  clone      Clone a repository from GitHub\\n` +\r\n            `  add        Add file contents to the index\\n` +\r\n            `  status     Show the working tree status\\n` +\r\n            `  commit     Record changes to the repository\\n` +\r\n            `  log        Show commit logs\\n` +\r\n            `  diff       Show changes\\n` +\r\n            `  branch     List, create, or delete branches\\n` +\r\n            `  checkout   Switch branches or restore files\\n` +\r\n            `  switch     Switch branches\\n` +\r\n            `  merge      Join two development histories together\\n` +\r\n            `  remote     Manage set of tracked repositories\\n` +\r\n            `  push       Update remote refs (GitHub)\\n` +\r\n            `  pull       Fetch and integrate remote changes (GitHub)\\n` +\r\n            `  fetch      Download objects from remote (GitHub)\\n` +\r\n            `  stash      Stash the changes in a dirty working directory\\n` +\r\n            `  reset      Reset current HEAD to the specified state\\n` +\r\n            `  rm         Remove files from the working tree and index\\n` +\r\n            `  rev-parse  Ancillary plumbing command\\n` +\r\n            `  config     Get and set repository options\\n`,\r\n          );\r\n        case \"init\":\r\n          return gitInit(subArgs, effectiveCtx);\r\n        case \"clone\":\r\n          return gitClone(subArgs, effectiveCtx);\r\n        case \"add\":\r\n          return gitAdd(subArgs, effectiveCtx);\r\n        case \"status\":\r\n          return gitStatus(subArgs, effectiveCtx);\r\n        case \"commit\":\r\n          return gitCommit(subArgs, effectiveCtx);\r\n        case \"log\":\r\n          return gitLog(subArgs, effectiveCtx);\r\n        case \"diff\":\r\n          return gitDiff(subArgs, effectiveCtx);\r\n        case \"branch\":\r\n          return gitBranch(subArgs, effectiveCtx);\r\n        case \"checkout\":\r\n          return gitCheckout(subArgs, effectiveCtx);\r\n        case \"switch\":\r\n          return gitSwitch(subArgs, effectiveCtx);\r\n        case \"merge\":\r\n          return gitMerge(subArgs, effectiveCtx);\r\n        case \"remote\":\r\n          return gitRemote(subArgs, effectiveCtx);\r\n        case \"push\":\r\n          return gitPush(subArgs, effectiveCtx);\r\n        case \"pull\":\r\n          return gitPull(subArgs, effectiveCtx);\r\n        case \"fetch\":\r\n          return gitFetch(subArgs, effectiveCtx);\r\n        case \"stash\":\r\n          return gitStash(subArgs, effectiveCtx);\r\n        case \"reset\":\r\n          return gitReset(subArgs, effectiveCtx);\r\n        case \"rm\":\r\n          return gitRm(subArgs, effectiveCtx);\r\n        case \"rev-parse\":\r\n          return gitRevParse(subArgs, effectiveCtx);\r\n        case \"config\":\r\n          return gitConfig(subArgs, effectiveCtx);\r\n        default:\r\n          return fail(`git: '${sub}' is not a git command. See 'git --help'.\\n`);\r\n      }\r\n    },\r\n  };\r\n}\r\n","// child_process polyfill -- exec, execSync, spawn, fork backed by NodepodShell.\r\n// Integrates with MemoryVolume directly.\r\n\r\nimport { NodepodShell } from \"../shell/shell-interpreter\";\r\nimport type { ShellResult, ShellContext } from \"../shell/shell-types\";\r\nimport { EventEmitter } from \"./events\";\r\nimport { Readable, Writable } from \"./stream\";\r\nimport { Buffer } from \"./buffer\";\r\nimport type { MemoryVolume } from \"../memory-volume\";\r\nimport { ScriptEngine } from \"../script-engine\";\r\nimport type { PackageManifest } from \"../types/manifest\";\r\nimport { resetActiveInterfaceCount } from \"./readline\";\r\nimport { ref, unref, getRefCount, resetRefCount, addDrainListener } from \"../helpers/event-loop\";\r\nimport { getActiveContext, setActiveContext } from \"../threading/process-context\";\r\nimport type { ProcessContext } from \"../threading/process-context\";\r\nimport type { PmDeps, PkgManager } from \"../shell/commands/pm-types\";\r\nimport { createNpmCommand } from \"../shell/commands/npm\";\r\nimport { createPnpmCommand } from \"../shell/commands/pnpm\";\r\nimport { createYarnCommand } from \"../shell/commands/yarn\";\r\nimport { createBunCommand, createBunxCommand } from \"../shell/commands/bun\";\r\nimport { createNodeCommand, createNpxCommand } from \"../shell/commands/node\";\r\nimport { createGitCommand } from \"../shell/commands/git\";\r\nimport { format as utilFormat } from \"./util\";\r\nimport { VERSIONS, NPM_REGISTRY_URL_SLASH, TIMEOUTS, DEFAULT_ENV, MOCK_PID } from \"../constants/config\";\r\nimport { closeAllServers, getAllServers } from \"./http\";\r\nimport type { SyncChannelWorker } from \"../threading/sync-channel\";\r\n\r\nlet _shell: NodepodShell | null = null;\r\nlet _vol: MemoryVolume | null = null;\r\n\r\nlet _syncChannel: SyncChannelWorker | null = null;\r\n\r\nlet _stdoutSink: ((text: string) => void) | null = null;\r\nlet _stderrSink: ((text: string) => void) | null = null;\r\nlet _haltSignal: AbortSignal | null = null;\r\n\r\nlet _termCols: (() => number) | null = null;\r\nlet _termRows: (() => number) | null = null;\r\n\r\nlet _rawModeChangeCb: ((isRaw: boolean) => void) | null = null;\r\n\r\n// context-aware state accessors: check ProcessContext first, fall back to module globals\r\n\r\nfunction getStdoutSink(): ((text: string) => void) | null {\r\n  const ctx = getActiveContext();\r\n  return ctx?.stdoutSink ?? _stdoutSink;\r\n}\r\n\r\nfunction getStderrSink(): ((text: string) => void) | null {\r\n  const ctx = getActiveContext();\r\n  return ctx?.stderrSink ?? _stderrSink;\r\n}\r\n\r\nfunction getHaltSignal(): AbortSignal | null {\r\n  const ctx = getActiveContext();\r\n  return ctx ? ctx.abortController.signal : _haltSignal;\r\n}\r\n\r\nfunction getLiveStdin(): { emit: (e: string, ...a: unknown[]) => void } | null {\r\n  const ctx = getActiveContext();\r\n  return ctx?.liveStdin ?? _liveStdin;\r\n}\r\n\r\nfunction getTermCols(): number {\r\n  const ctx = getActiveContext();\r\n  return ctx?.termCols?.() ?? _termCols?.() ?? 80;\r\n}\r\n\r\nfunction getTermRows(): number {\r\n  const ctx = getActiveContext();\r\n  return ctx?.termRows?.() ?? _termRows?.() ?? 24;\r\n}\r\n\r\nfunction formatThrown(e: unknown): string {\r\n  if (e instanceof Error) {\r\n    const prefix =\r\n      e.constructor?.name && e.constructor.name !== \"Error\"\r\n        ? `${e.constructor.name}: `\r\n        : \"\";\r\n    let msg = prefix + (e.message || e.name || \"Unknown error\");\r\n    if (e.stack) msg += \"\\n\" + e.stack;\r\n    return msg;\r\n  }\r\n  if (e === null || e === undefined) return \"Script threw a falsy value\";\r\n  return String(e) || \"Unknown error (non-Error object thrown)\";\r\n}\r\n\r\nexport function setStreamingCallbacks(cfg: {\r\n  onStdout?: (t: string) => void;\r\n  onStderr?: (t: string) => void;\r\n  signal?: AbortSignal;\r\n  getCols?: () => number;\r\n  getRows?: () => number;\r\n  onRawModeChange?: (isRaw: boolean) => void;\r\n}): void {\r\n  _stdoutSink = cfg.onStdout ?? null;\r\n  _stderrSink = cfg.onStderr ?? null;\r\n  _haltSignal = cfg.signal ?? null;\r\n  _termCols = cfg.getCols ?? null;\r\n  _termRows = cfg.getRows ?? null;\r\n  _rawModeChangeCb = cfg.onRawModeChange ?? null;\r\n\r\n  // also update active ProcessContext if present\r\n  const ctx = getActiveContext();\r\n  if (ctx) {\r\n    ctx.stdoutSink = cfg.onStdout ?? null;\r\n    ctx.stderrSink = cfg.onStderr ?? null;\r\n    if (cfg.signal) {\r\n      cfg.signal.addEventListener(\"abort\", () => ctx.abortController.abort(), { once: true });\r\n    }\r\n    ctx.termCols = cfg.getCols ?? null;\r\n    ctx.termRows = cfg.getRows ?? null;\r\n  }\r\n}\r\n\r\nexport function clearStreamingCallbacks(): void {\r\n  _stdoutSink = null;\r\n  _stderrSink = null;\r\n  _haltSignal = null;\r\n  _termCols = null;\r\n  _termRows = null;\r\n  _rawModeChangeCb = null;\r\n\r\n  // also clear active ProcessContext if present\r\n  const ctx = getActiveContext();\r\n  if (ctx) {\r\n    ctx.stdoutSink = null;\r\n    ctx.stderrSink = null;\r\n    ctx.termCols = null;\r\n    ctx.termRows = null;\r\n  }\r\n}\r\n\r\n// set the SyncChannelWorker for true blocking execSync/spawnSync in worker mode\r\nexport function setSyncChannel(channel: SyncChannelWorker): void {\r\n  _syncChannel = channel;\r\n}\r\n\r\n// onStdout/onStderr fire in real-time as output arrives; promise resolves on child exit\r\nexport type SpawnChildCallback = (\r\n  command: string,\r\n  args: string[],\r\n  opts?: {\r\n    cwd?: string;\r\n    env?: Record<string, string>;\r\n    stdio?: \"pipe\" | \"inherit\";\r\n    onStdout?: (data: string) => void;\r\n    onStderr?: (data: string) => void;\r\n  },\r\n) => Promise<{ pid: number; exitCode: number; stdout: string; stderr: string }>;\r\n\r\nlet _spawnChildFn: SpawnChildCallback | null = null;\r\n\r\nexport function setSpawnChildCallback(fn: SpawnChildCallback): void {\r\n  _spawnChildFn = fn;\r\n}\r\n\r\n// returns ForkHandle immediately; onExit fires when the child exits\r\nexport type ForkChildCallback = (\r\n  modulePath: string,\r\n  args: string[],\r\n  opts: {\r\n    cwd: string;\r\n    env: Record<string, string>;\r\n    onStdout?: (data: string) => void;\r\n    onStderr?: (data: string) => void;\r\n    onIPC?: (data: unknown) => void;\r\n    onExit?: (exitCode: number) => void;\r\n  },\r\n) => {\r\n  sendIPC: (data: unknown) => void;\r\n  disconnect: () => void;\r\n  requestId: number;\r\n};\r\n\r\nlet _forkChildFn: ForkChildCallback | null = null;\r\n\r\nexport function setForkChildCallback(fn: ForkChildCallback): void {\r\n  _forkChildFn = fn;\r\n}\r\n\r\n// IPC plumbing for when this worker IS a forked child\r\nlet _ipcSendFn: ((data: unknown) => void) | null = null;\r\nlet _ipcReceiveHandler: ((data: unknown) => void) | null = null;\r\n// messages that arrive before the handler is wired (parent sends before child's ENB sets up the handler)\r\nlet _ipcQueue: unknown[] = [];\r\n\r\nexport function setIPCSend(fn: (data: unknown) => void): void {\r\n  _ipcSendFn = fn;\r\n}\r\n\r\nexport function setIPCReceiveHandler(fn: (data: unknown) => void): void {\r\n  _ipcReceiveHandler = fn;\r\n  // replay any messages that arrived before the handler was set\r\n  if (_ipcQueue.length > 0) {\r\n    const queued = _ipcQueue;\r\n    _ipcQueue = [];\r\n    for (const msg of queued) fn(msg);\r\n  }\r\n}\r\n\r\n// called by process-worker-entry when an IPC message arrives\r\nexport function handleIPCFromParent(data: unknown): void {\r\n  if (_ipcReceiveHandler) {\r\n    _ipcReceiveHandler(data);\r\n  } else {\r\n    // handler not wired yet, queue for replay\r\n    _ipcQueue.push(data);\r\n  }\r\n}\r\n\r\nexport function getShellCwd(): string {\r\n  return _shell?.getCwd() ?? \"/\";\r\n}\r\n\r\n// called by process.chdir() so subsequent exec/spawn without explicit cwd pick up the new dir\r\nexport function setShellCwd(dir: string): void {\r\n  if (_shell) _shell.setCwd(dir);\r\n}\r\n\r\n// runs command inline in the current worker via NodepodShell (NOT a child process).\r\n// child_process.exec() spawns a new worker; shellExec() runs in THIS process.\r\nexport function shellExec(\r\n  cmd: string,\r\n  opts: { cwd?: string; env?: Record<string, string> },\r\n  callback: (error: Error | null, stdout: string, stderr: string) => void,\r\n): void {\r\n  if (!_shell) {\r\n    callback(new Error(\"[Nodepod] Shell not initialized\"), \"\", \"\");\r\n    return;\r\n  }\r\n  _shell.exec(cmd, opts).then(\r\n    (result) => {\r\n      if (result.exitCode !== 0) {\r\n        const e = new Error(`Command failed: ${cmd}`);\r\n        (e as any).code = result.exitCode;\r\n        callback(e, result.stdout, result.stderr);\r\n      } else {\r\n        callback(null, result.stdout, result.stderr);\r\n      }\r\n    },\r\n    (e) => {\r\n      callback(e instanceof Error ? e : new Error(String(e)), \"\", \"\");\r\n    },\r\n  );\r\n}\r\n\r\nlet _liveStdin: { emit: (e: string, ...a: unknown[]) => void } | null = null;\r\n\r\n// check if the live process stdin is in raw mode (library handles its own echo)\r\nexport function isStdinRaw(): boolean {\r\n  const stdin = getLiveStdin();\r\n  if (!stdin) return false;\r\n  return !!(stdin as any).isRaw;\r\n}\r\n\r\nexport function sendStdin(text: string): void {\r\n  const stdin = getLiveStdin();\r\n  if (!stdin) {\r\n    return;\r\n  }\r\n  // emit 'data' only -- readline.emitKeypressEvents() parses data into 'keypress' events\r\n  // automatically, matching real Node.js\r\n  stdin.emit(\"data\", text);\r\n}\r\n\r\nexport function initShellExec(volume: MemoryVolume, opts?: { cwd?: string; env?: Record<string, string> }): void {\r\n  _vol = volume;\r\n\r\n  _shell = new NodepodShell(volume, {\r\n    cwd: opts?.cwd ?? \"/\",\r\n    env: {\r\n      HOME: \"/home/user\",\r\n      USER: \"user\",\r\n      PATH: \"/usr/local/bin:/usr/bin:/bin:/node_modules/.bin\",\r\n      NODE_ENV: \"development\",\r\n      TERM: \"xterm-256color\",\r\n      COLORTERM: \"truecolor\",\r\n      npm_config_user_agent: DEFAULT_ENV.npm_config_user_agent,\r\n      npm_execpath: DEFAULT_ENV.npm_execpath,\r\n      npm_node_execpath: DEFAULT_ENV.npm_node_execpath,\r\n      ...opts?.env,\r\n    },\r\n  });\r\n\r\n  const pmDeps: PmDeps = {\r\n    installPackages,\r\n    uninstallPackages,\r\n    listPackages,\r\n    runScript,\r\n    npmInitOrCreate,\r\n    npmInfo,\r\n    npmPack,\r\n    npmConfig,\r\n    npxExecute,\r\n    executeNodeBinary,\r\n    evalCode: (code, ctx) => evalNodeCode(code, ctx),\r\n    printCode: (code, ctx) => printNodeCode(code, ctx),\r\n    removeNodeModules: (cwd) => {\r\n      const dir = `${cwd}/node_modules`.replace(/\\/+/g, \"/\");\r\n      if (_vol!.existsSync(dir)) removeDir(_vol!, dir);\r\n    },\r\n    formatErr,\r\n    formatWarn,\r\n    hasFile: (p) => !!_vol && _vol.existsSync(p),\r\n    readFile: (p) => _vol!.readFileSync(p, \"utf8\") as string,\r\n    writeFile: (p, data) => _vol!.writeFileSync(p, data),\r\n  };\r\n\r\n  _shell.registerCommand(createNodeCommand(pmDeps));\r\n  _shell.registerCommand(createNpxCommand(pmDeps));\r\n  _shell.registerCommand(createNpmCommand(pmDeps));\r\n  _shell.registerCommand(createPnpmCommand(pmDeps));\r\n  _shell.registerCommand(createYarnCommand(pmDeps));\r\n  _shell.registerCommand(createBunCommand(pmDeps));\r\n  _shell.registerCommand(createBunxCommand(pmDeps));\r\n  _shell.registerCommand(createGitCommand());\r\n}\r\n\r\n// node -e / -p helpers (used by PmDeps)\r\n\r\nfunction evalNodeCode(code: string, ctx: ShellContext): ShellResult {\r\n  let out = \"\";\r\n  let err = \"\";\r\n  const sandbox = new ScriptEngine(_vol!, {\r\n    cwd: ctx.cwd,\r\n    env: ctx.env,\r\n    onConsole: (m: string, args: unknown[]) => {\r\n      const line = utilFormat(args[0], ...args.slice(1)) + \"\\n\";\r\n      m === \"error\" ? (err += line) : (out += line);\r\n    },\r\n    onStdout: (s: string) => {\r\n      out += s;\r\n    },\r\n    onStderr: (s: string) => {\r\n      err += s;\r\n    },\r\n  });\r\n  try {\r\n    sandbox.execute(code, \"/<eval>.js\");\r\n  } catch (e) {\r\n    if (e instanceof Error && e.message.startsWith(\"Process exited with code\"))\r\n      return { stdout: out, stderr: err, exitCode: 0 };\r\n    err += `Error: ${e instanceof Error ? e.message : String(e)}\\n`;\r\n    return { stdout: out, stderr: err, exitCode: 1 };\r\n  }\r\n  return { stdout: out, stderr: err, exitCode: 0 };\r\n}\r\n\r\nfunction printNodeCode(code: string, ctx: ShellContext): ShellResult {\r\n  let out = \"\";\r\n  let err = \"\";\r\n  const sandbox = new ScriptEngine(_vol!, {\r\n    cwd: ctx.cwd,\r\n    env: ctx.env,\r\n    onConsole: (m: string, args: unknown[]) => {\r\n      const line = utilFormat(args[0], ...args.slice(1)) + \"\\n\";\r\n      m === \"error\" ? (err += line) : (out += line);\r\n    },\r\n    onStdout: (s: string) => {\r\n      out += s;\r\n    },\r\n    onStderr: (s: string) => {\r\n      err += s;\r\n    },\r\n  });\r\n  try {\r\n    const result = sandbox.execute(code, \"/<print>.js\");\r\n    out += String(result.exports) + \"\\n\";\r\n  } catch (e) {\r\n    err += `Error: ${e instanceof Error ? e.message : String(e)}\\n`;\r\n    return { stdout: out, stderr: err, exitCode: 1 };\r\n  }\r\n  return { stdout: out, stderr: err, exitCode: 0 };\r\n}\r\n\r\n// npm helpers\r\n\r\nfunction removeDir(vol: MemoryVolume, dir: string): void {\r\n  for (const name of vol.readdirSync(dir)) {\r\n    const full = `${dir}/${name}`;\r\n    const st = vol.statSync(full);\r\n    if (st.isDirectory()) removeDir(vol, full);\r\n    else vol.unlinkSync(full);\r\n  }\r\n  vol.rmdirSync(dir);\r\n}\r\n\r\nfunction loadManifest(\r\n  cwd: string,\r\n): { pkg: PackageManifest } | { fail: ShellResult } {\r\n  const p = `${cwd}/package.json`.replace(/\\/+/g, \"/\");\r\n  if (!_vol!.existsSync(p))\r\n    return {\r\n      fail: {\r\n        stdout: \"\",\r\n        stderr: formatErr(\"package.json not found\", \"npm\"),\r\n        exitCode: 1,\r\n      },\r\n    };\r\n  try {\r\n    return {\r\n      pkg: JSON.parse(_vol!.readFileSync(p, \"utf8\")) as PackageManifest,\r\n    };\r\n  } catch {\r\n    return {\r\n      fail: {\r\n        stdout: \"\",\r\n        stderr: formatErr(\"Malformed package.json\", \"npm\"),\r\n        exitCode: 1,\r\n      },\r\n    };\r\n  }\r\n}\r\n\r\nasync function runScript(\r\n  args: string[],\r\n  ctx: ShellContext,\r\n): Promise<ShellResult> {\r\n  const name = args[0];\r\n  if (!name) {\r\n    const r = loadManifest(ctx.cwd);\r\n    if (\"fail\" in r) return r.fail;\r\n    const scripts = r.pkg.scripts ?? {};\r\n    const keys = Object.keys(scripts);\r\n    if (keys.length === 0) return { stdout: \"\", stderr: \"\", exitCode: 0 };\r\n    let text = `Scripts in ${r.pkg.name ?? \"\"}:\\n`;\r\n    for (const k of keys) text += `  ${k}\\n    ${scripts[k]}\\n`;\r\n    return { stdout: text, stderr: \"\", exitCode: 0 };\r\n  }\r\n\r\n  // extra arguments after \"--\" separator (npm run dev -- --webpack)\r\n  const dashIdx = args.indexOf(\"--\");\r\n  const extraArgs = dashIdx >= 0 ? args.slice(dashIdx + 1) : [];\r\n\r\n  const r = loadManifest(ctx.cwd);\r\n  if (\"fail\" in r) return r.fail;\r\n  const scripts = r.pkg.scripts ?? {};\r\n  let cmd = scripts[name];\r\n  if (!cmd) {\r\n    let msg = formatErr(`Missing script: \"${name}\"`, \"npm\");\r\n    const avail = Object.keys(scripts);\r\n    if (avail.length) {\r\n      msg += \"\\nAvailable:\\n\";\r\n      for (const s of avail)\r\n        msg += `  ${A_CYAN}${s}${A_RESET}: ${A_DIM}${scripts[s]}${A_RESET}\\n`;\r\n    }\r\n    return { stdout: \"\", stderr: msg, exitCode: 1 };\r\n  }\r\n\r\n  // append extra args after \"--\" to the script command (real npm behavior)\r\n  if (extraArgs.length > 0) {\r\n    cmd += \" \" + extraArgs.map(a => a.includes(\" \") ? `\"${a}\"` : a).join(\" \");\r\n  }\r\n\r\n  // prepend cwd's node_modules/.bin to PATH (matches real npm behavior)\r\n  const binDir = `${ctx.cwd}/node_modules/.bin`.replace(/\\/+/g, \"/\");\r\n  const existingPath = ctx.env.PATH || \"\";\r\n  const pathWithBin = existingPath.includes(binDir)\r\n    ? existingPath\r\n    : `${binDir}:${existingPath}`;\r\n\r\n  const env: Record<string, string> = {\r\n    ...ctx.env,\r\n    PATH: pathWithBin,\r\n    npm_lifecycle_event: name,\r\n  };\r\n  if (r.pkg.name) env.npm_package_name = r.pkg.name;\r\n  if (r.pkg.version) env.npm_package_version = r.pkg.version;\r\n\r\n  let allOut = \"\";\r\n  let allErr = \"\";\r\n  const label = `${r.pkg.name ?? \"\"}@${r.pkg.version ?? \"\"}`;\r\n\r\n  const pre = scripts[`pre${name}`];\r\n  if (pre) {\r\n    const hdr = `\\n> ${label} pre${name}\\n> ${pre}\\n\\n`;\r\n    allErr += hdr;\r\n    if (_stderrSink) _stderrSink(hdr);\r\n    const pr = await ctx.exec(pre, { cwd: ctx.cwd, env });\r\n    allOut += pr.stdout;\r\n    allErr += pr.stderr;\r\n    if (pr.exitCode !== 0)\r\n      return { stdout: allOut, stderr: allErr, exitCode: pr.exitCode };\r\n  }\r\n\r\n  const mainHdr = `\\n> ${label} ${name}\\n> ${cmd}\\n\\n`;\r\n  allErr += mainHdr;\r\n  if (_stderrSink) _stderrSink(mainHdr);\r\n  const mr = await ctx.exec(cmd, { cwd: ctx.cwd, env });\r\n  allOut += mr.stdout;\r\n  allErr += mr.stderr;\r\n  if (mr.exitCode !== 0)\r\n    return { stdout: allOut, stderr: allErr, exitCode: mr.exitCode };\r\n\r\n  const post = scripts[`post${name}`];\r\n  if (post) {\r\n    const hdr = `\\n> ${label} post${name}\\n> ${post}\\n\\n`;\r\n    allErr += hdr;\r\n    if (_stderrSink) _stderrSink(hdr);\r\n    const po = await ctx.exec(post, { cwd: ctx.cwd, env });\r\n    allOut += po.stdout;\r\n    allErr += po.stderr;\r\n    if (po.exitCode !== 0)\r\n      return { stdout: allOut, stderr: allErr, exitCode: po.exitCode };\r\n  }\r\n\r\n  return { stdout: allOut, stderr: allErr, exitCode: 0 };\r\n}\r\n\r\n// ANSI + spinner helpers for npm install output\r\n\r\nconst A_RESET = \"\\x1b[0m\";\r\nconst A_BOLD = \"\\x1b[1m\";\r\nconst A_DIM = \"\\x1b[2m\";\r\nconst A_RED = \"\\x1b[31m\";\r\nconst A_GREEN = \"\\x1b[32m\";\r\nconst A_YELLOW = \"\\x1b[33m\";\r\nconst A_BLUE = \"\\x1b[34m\";\r\nconst A_MAGENTA = \"\\x1b[35m\";\r\nconst A_CYAN = \"\\x1b[36m\";\r\nconst A_WHITE = \"\\x1b[37m\";\r\nconst ERASE_LINE = \"\\x1b[2K\";\r\n\r\nconst SPINNER_FRAMES = [\"⠋\", \"⠙\", \"⠹\", \"⠸\", \"⠼\", \"⠴\", \"⠦\", \"⠧\", \"⠇\", \"⠏\"];\r\n\r\nfunction createSpinner(text: string, writeFn: (s: string) => void) {\r\n  let frame = 0;\r\n  let current = text;\r\n  const id = setInterval(() => {\r\n    writeFn(\r\n      `${ERASE_LINE}\\r${A_CYAN}${SPINNER_FRAMES[frame]}${A_RESET} ${current}`,\r\n    );\r\n    frame = (frame + 1) % SPINNER_FRAMES.length;\r\n  }, 80);\r\n\r\n  return {\r\n    update(t: string) {\r\n      current = t;\r\n    },\r\n    succeed(t: string) {\r\n      clearInterval(id);\r\n      writeFn(`${ERASE_LINE}\\r${A_GREEN}✔${A_RESET} ${t}\\n`);\r\n    },\r\n    fail(t: string) {\r\n      clearInterval(id);\r\n      writeFn(`${ERASE_LINE}\\r${A_RED}✖${A_RESET} ${t}\\n`);\r\n    },\r\n    stop() {\r\n      clearInterval(id);\r\n    },\r\n  };\r\n}\r\n\r\n// per-PM accent colors\r\nconst PM_COLORS: Record<PkgManager, string> = {\r\n  npm: A_RED,\r\n  pnpm: A_YELLOW,\r\n  yarn: A_BLUE,\r\n  bun: A_WHITE,\r\n};\r\n\r\nfunction formatProgress(msg: string, pm: PkgManager = \"npm\"): string {\r\n  const accent = PM_COLORS[pm];\r\n\r\n  const resolving = msg.match(/^Resolving\\s+(.+?)\\.{3}$/);\r\n  if (resolving)\r\n    return `${A_DIM}Resolving${A_RESET} ${accent}${resolving[1]}${A_RESET}${A_DIM}...${A_RESET}`;\r\n\r\n  const downloading = msg.match(/^Downloading\\s+(\\d+)\\s+package/);\r\n  if (downloading)\r\n    return `${A_DIM}Downloading${A_RESET} ${A_YELLOW}${downloading[1]}${A_RESET} ${A_DIM}packages...${A_RESET}`;\r\n\r\n  const fetching = msg.match(/^(?:\\s*)?Fetching\\s+(.+?)\\.{3}$/);\r\n  if (fetching)\r\n    return `${A_DIM}Fetching${A_RESET} ${accent}${fetching[1]}${A_RESET}${A_DIM}...${A_RESET}`;\r\n\r\n  const transformed = msg.match(/^(?:\\s*)?Transformed\\s+(\\d+)\\s+file/);\r\n  if (transformed) return `${A_DIM}${msg.trim()}${A_RESET}`;\r\n\r\n  const installed = msg.match(/^Installed\\s+(\\d+)/);\r\n  if (installed) return `${A_GREEN}${msg}${A_RESET}`;\r\n\r\n  const skipping = msg.match(/^Skipping\\s+(.+?)\\s+\\(up to date\\)$/);\r\n  if (skipping)\r\n    return `${A_DIM}Skipping${A_RESET} ${accent}${skipping[1]}${A_RESET} ${A_DIM}(up to date)${A_RESET}`;\r\n\r\n  return msg;\r\n}\r\n\r\nfunction formatInstallSummary(\r\n  totalAdded: number,\r\n  elapsed: string,\r\n  pm: PkgManager,\r\n): string {\r\n  const pkgs = `${totalAdded} package${totalAdded !== 1 ? \"s\" : \"\"}`;\r\n  switch (pm) {\r\n    case \"npm\":\r\n      return `${A_BOLD}added ${pkgs}${A_RESET} ${A_DIM}in ${elapsed}s${A_RESET}`;\r\n    case \"pnpm\":\r\n      return `${A_BOLD}packages:${A_RESET} ${A_GREEN}+${totalAdded}${A_RESET}\\n${A_DIM}Done in ${elapsed}s${A_RESET}`;\r\n    case \"yarn\":\r\n      return `${A_BOLD}${pkgs} added${A_RESET} ${A_DIM}in ${elapsed}s${A_RESET}`;\r\n    case \"bun\":\r\n      return `${A_BOLD}${pkgs} installed${A_RESET} ${A_DIM}[${elapsed}s]${A_RESET}`;\r\n  }\r\n}\r\n\r\nfunction formatErr(msg: string, pm: PkgManager): string {\r\n  switch (pm) {\r\n    case \"npm\":\r\n      return `${A_RED}npm ERR!${A_RESET} ${msg}\\n`;\r\n    case \"pnpm\":\r\n      return `${A_RED} ERR_PNPM${A_RESET}  ${msg}\\n`;\r\n    case \"yarn\":\r\n      return `${A_RED}error${A_RESET} ${msg}\\n`;\r\n    case \"bun\":\r\n      return `${A_RED}error:${A_RESET} ${msg}\\n`;\r\n  }\r\n}\r\n\r\nfunction formatWarn(msg: string, pm: PkgManager): string {\r\n  switch (pm) {\r\n    case \"npm\":\r\n      return `${A_YELLOW}npm WARN${A_RESET} ${msg}\\n`;\r\n    case \"pnpm\":\r\n      return `${A_YELLOW} WARN${A_RESET}  ${msg}\\n`;\r\n    case \"yarn\":\r\n      return `${A_YELLOW}warning${A_RESET} ${msg}\\n`;\r\n    case \"bun\":\r\n      return `${A_YELLOW}warn:${A_RESET} ${msg}\\n`;\r\n  }\r\n}\r\n\r\nasync function installPackages(\r\n  args: string[],\r\n  ctx: ShellContext,\r\n  pm: PkgManager = \"npm\",\r\n): Promise<ShellResult> {\r\n  const { DependencyInstaller } = await import(\"../packages/installer\");\r\n  const installer = new DependencyInstaller(_vol!, { cwd: ctx.cwd });\r\n  let out = \"\";\r\n  const write = _stdoutSink ?? ((_s: string) => {});\r\n  const startTime = Date.now();\r\n  const accent = PM_COLORS[pm];\r\n\r\n  const spinnerText =\r\n    pm === \"bun\"\r\n      ? `${A_DIM}bun install${A_RESET} ${A_DIM}${VERSIONS.BUN_V}${A_RESET}`\r\n      : `${A_DIM}Resolving dependencies...${A_RESET}`;\r\n  const spinner = createSpinner(spinnerText, write);\r\n\r\n  try {\r\n    const names = args.filter((a: string) => !a.startsWith(\"-\"));\r\n    const onProgress = (m: string) => {\r\n      const colored = formatProgress(m, pm);\r\n      out += m + \"\\n\";\r\n      spinner.update(colored);\r\n    };\r\n\r\n    let totalAdded = 0;\r\n    if (names.length === 0) {\r\n      const ir = await installer.installFromManifest(undefined, {\r\n        withDevDeps: true,\r\n        onProgress,\r\n      });\r\n      totalAdded = ir.newPackages.length;\r\n    } else {\r\n      for (const n of names) {\r\n        const ir = await installer.install(n, undefined, { onProgress });\r\n        totalAdded += ir.newPackages.length;\r\n      }\r\n    }\r\n\r\n    const elapsed = ((Date.now() - startTime) / 1000).toFixed(1);\r\n    const summary = formatInstallSummary(totalAdded, elapsed, pm);\r\n    spinner.succeed(summary);\r\n    out += `added ${totalAdded} packages in ${elapsed}s\\n`;\r\n\r\n    return { stdout: out, stderr: \"\", exitCode: 0 };\r\n  } catch (e) {\r\n    const msg = e instanceof Error ? e.message : String(e);\r\n    spinner.fail(`${A_RED}${msg}${A_RESET}`);\r\n    return {\r\n      stdout: out,\r\n      stderr: formatErr(msg, pm),\r\n      exitCode: 1,\r\n    };\r\n  }\r\n}\r\n\r\nasync function uninstallPackages(\r\n  args: string[],\r\n  ctx: ShellContext,\r\n  pm: PkgManager = \"npm\",\r\n): Promise<ShellResult> {\r\n  const names = args.filter((a) => !a.startsWith(\"-\"));\r\n  if (names.length === 0)\r\n    return {\r\n      stdout: \"\",\r\n      stderr: formatErr(\"Must specify package to remove\", pm),\r\n      exitCode: 1,\r\n    };\r\n\r\n  const write = _stdoutSink ?? ((_s: string) => {});\r\n  let out = \"\";\r\n  for (const name of names) {\r\n    const pkgDir = `${ctx.cwd}/node_modules/${name}`.replace(/\\/+/g, \"/\");\r\n    if (_vol!.existsSync(pkgDir)) {\r\n      try {\r\n        removeDir(_vol!, pkgDir);\r\n        const msg =\r\n          pm === \"bun\"\r\n            ? `${A_DIM}-${A_RESET} ${name}`\r\n            : pm === \"pnpm\"\r\n              ? `${A_RED}-${A_RESET} ${name}`\r\n              : `removed ${name}`;\r\n        out += msg + \"\\n\";\r\n        write(msg + \"\\n\");\r\n      } catch (e) {\r\n        return {\r\n          stdout: out,\r\n          stderr: formatErr(\r\n            `Failed to remove ${name}: ${e instanceof Error ? e.message : String(e)}`,\r\n            pm,\r\n          ),\r\n          exitCode: 1,\r\n        };\r\n      }\r\n    } else {\r\n      out += formatWarn(`${name} not installed`, pm);\r\n    }\r\n\r\n    const r = loadManifest(ctx.cwd);\r\n    if (!(\"fail\" in r)) {\r\n      const pkg = r.pkg;\r\n      let changed = false;\r\n      if (pkg.dependencies?.[name]) {\r\n        delete pkg.dependencies[name];\r\n        changed = true;\r\n      }\r\n      if (pkg.devDependencies?.[name]) {\r\n        delete pkg.devDependencies[name];\r\n        changed = true;\r\n      }\r\n      if (changed) {\r\n        const p = `${ctx.cwd}/package.json`.replace(/\\/+/g, \"/\");\r\n        _vol!.writeFileSync(p, JSON.stringify(pkg, null, 2));\r\n      }\r\n    }\r\n  }\r\n\r\n  return { stdout: out, stderr: \"\", exitCode: 0 };\r\n}\r\n\r\nasync function listPackages(\r\n  ctx: ShellContext,\r\n  pm: PkgManager = \"npm\",\r\n): Promise<ShellResult> {\r\n  const { DependencyInstaller } = await import(\"../packages/installer\");\r\n  const installer = new DependencyInstaller(_vol!, { cwd: ctx.cwd });\r\n  const pkgs = installer.listInstalled();\r\n  const entries = Object.entries(pkgs);\r\n  if (entries.length === 0)\r\n    return { stdout: `${A_DIM}(empty)${A_RESET}\\n`, stderr: \"\", exitCode: 0 };\r\n\r\n  const r = loadManifest(ctx.cwd);\r\n  const label = !(\"fail\" in r)\r\n    ? `${r.pkg.name ?? \"project\"}@${r.pkg.version ?? \"0.0.0\"}`\r\n    : ctx.cwd;\r\n\r\n  let text = \"\";\r\n  switch (pm) {\r\n    case \"npm\":\r\n      text += `${label} ${ctx.cwd}\\n`;\r\n      for (let i = 0; i < entries.length; i++) {\r\n        const [n, v] = entries[i];\r\n        const isLast = i === entries.length - 1;\r\n        text += `${isLast ? \"└──\" : \"├──\"} ${n}@${A_DIM}${v}${A_RESET}\\n`;\r\n      }\r\n      break;\r\n    case \"pnpm\":\r\n      text += `${A_DIM}Legend: production dependency, optional only, dev only${A_RESET}\\n\\n`;\r\n      text += `${label} ${ctx.cwd}\\n\\n`;\r\n      text += `${A_BOLD}dependencies:${A_RESET}\\n`;\r\n      for (const [n, v] of entries) text += `${n} ${A_DIM}${v}${A_RESET}\\n`;\r\n      break;\r\n    case \"yarn\":\r\n      text += `${A_BOLD}${label}${A_RESET}\\n`;\r\n      for (let i = 0; i < entries.length; i++) {\r\n        const [n, v] = entries[i];\r\n        const isLast = i === entries.length - 1;\r\n        text += `${isLast ? \"└─\" : \"├─\"} ${n}@${A_CYAN}${v}${A_RESET}\\n`;\r\n      }\r\n      break;\r\n    case \"bun\":\r\n      for (const [n, v] of entries) text += `${n}@${A_DIM}${v}${A_RESET}\\n`;\r\n      text += `\\n${A_DIM}${entries.length} packages installed${A_RESET}\\n`;\r\n      break;\r\n  }\r\n  return { stdout: text, stderr: \"\", exitCode: 0 };\r\n}\r\n\r\nasync function npmInitOrCreate(\r\n  args: string[],\r\n  sub: string,\r\n  ctx: ShellContext,\r\n): Promise<ShellResult> {\r\n  const flags = args.filter((a) => a.startsWith(\"-\"));\r\n  const positional = args.filter((a) => !a.startsWith(\"-\"));\r\n\r\n  // npm create <pkg> / npm init <pkg> → npx create-<pkg>\r\n  if (sub === \"create\" || (sub === \"init\" && positional.length > 0)) {\r\n    const initializer = positional[0];\r\n    let pkgSpec: string;\r\n    if (initializer.startsWith(\"@\")) {\r\n      // scoped: npm create @scope/pkg → npx @scope/create-pkg\r\n      pkgSpec = initializer;\r\n    } else {\r\n      // vite@latest → create-vite@latest\r\n      const atIdx = initializer.indexOf(\"@\");\r\n      if (atIdx > 0) {\r\n        const name = initializer.slice(0, atIdx);\r\n        const ver = initializer.slice(atIdx);\r\n        pkgSpec = `create-${name}${ver}`;\r\n      } else {\r\n        pkgSpec = `create-${initializer}`;\r\n      }\r\n    }\r\n    return npxExecute([\"-y\", pkgSpec, ...positional.slice(1), ...flags], ctx);\r\n  }\r\n\r\n  // plain npm init [-y] → create package.json\r\n  const p = `${ctx.cwd}/package.json`.replace(/\\/+/g, \"/\");\r\n  if (_vol!.existsSync(p)) {\r\n    return {\r\n      stdout: \"\",\r\n      stderr: formatWarn(\"package.json already exists\", \"npm\"),\r\n      exitCode: 0,\r\n    };\r\n  }\r\n\r\n  const isYes = flags.includes(\"-y\") || flags.includes(\"--yes\");\r\n  const name = ctx.cwd.split(\"/\").filter(Boolean).pop() || \"my-project\";\r\n\r\n  const pkg: PackageManifest = {\r\n    name,\r\n    version: \"1.0.0\",\r\n    description: \"\",\r\n    main: \"index.js\",\r\n    scripts: {\r\n      test: 'echo \"Error: no test specified\" && exit 1',\r\n      start: \"node index.js\",\r\n    },\r\n    keywords: [],\r\n    author: \"\",\r\n    license: \"ISC\",\r\n  };\r\n\r\n  _vol!.writeFileSync(p, JSON.stringify(pkg, null, 2));\r\n  const out = isYes\r\n    ? `Wrote to ${p}\\n`\r\n    : `Wrote to ${p}\\n\\n${JSON.stringify(pkg, null, 2)}\\n`;\r\n  return { stdout: out, stderr: \"\", exitCode: 0 };\r\n}\r\n\r\nasync function npmInfo(\r\n  args: string[],\r\n  ctx: ShellContext,\r\n): Promise<ShellResult> {\r\n  const name = args[0];\r\n  if (!name)\r\n    return {\r\n      stdout: \"\",\r\n      stderr: formatErr(\"Usage: npm info <package>\", \"npm\"),\r\n      exitCode: 1,\r\n    };\r\n\r\n  const pkgJsonPath = `/node_modules/${name}/package.json`;\r\n  if (_vol!.existsSync(pkgJsonPath)) {\r\n    try {\r\n      const pkg = JSON.parse(\r\n        _vol!.readFileSync(pkgJsonPath, \"utf8\"),\r\n      ) as PackageManifest;\r\n      let out = `${pkg.name}@${pkg.version}\\n`;\r\n      if (pkg.description) out += `${pkg.description}\\n`;\r\n      if (pkg.license) out += `license: ${pkg.license}\\n`;\r\n      if (pkg.homepage) out += `homepage: ${pkg.homepage}\\n`;\r\n      if (pkg.dependencies) {\r\n        out += \"\\ndependencies:\\n\";\r\n        for (const [k, v] of Object.entries(pkg.dependencies))\r\n          out += `  ${k}: ${v}\\n`;\r\n      }\r\n      return { stdout: out, stderr: \"\", exitCode: 0 };\r\n    } catch {\r\n      /* fallthrough */\r\n    }\r\n  }\r\n\r\n  // fall back to registry\r\n  try {\r\n    const { RegistryClient } = await import(\"../packages/registry-client\");\r\n    const client = new RegistryClient();\r\n    const meta = await client.fetchManifest(name);\r\n    const latest = meta[\"dist-tags\"]?.latest;\r\n    let out = `${name}@${latest ?? \"unknown\"}\\n`;\r\n    if (latest && meta.versions[latest]) {\r\n      const ver = meta.versions[latest] as unknown as Record<string, unknown>;\r\n      if (ver.description) out += `${ver.description}\\n`;\r\n      if (ver.license) out += `license: ${ver.license}\\n`;\r\n      if (ver.homepage) out += `homepage: ${ver.homepage}\\n`;\r\n    }\r\n    return { stdout: out, stderr: \"\", exitCode: 0 };\r\n  } catch (e) {\r\n    return {\r\n      stdout: \"\",\r\n      stderr: formatErr(`Not found: ${name}`, \"npm\"),\r\n      exitCode: 1,\r\n    };\r\n  }\r\n}\r\n\r\nfunction npmPack(ctx: ShellContext): ShellResult {\r\n  const r = loadManifest(ctx.cwd);\r\n  if (\"fail\" in r) return r.fail;\r\n\r\n  const notice = `${A_DIM}npm notice${A_RESET}`;\r\n  let out = `${notice}\\n`;\r\n  out += `${notice} ${A_BOLD}package:${A_RESET} ${r.pkg.name}@${r.pkg.version}\\n`;\r\n\r\n  const files: string[] = [];\r\n  const walk = (dir: string) => {\r\n    try {\r\n      for (const name of _vol!.readdirSync(dir)) {\r\n        if (name === \"node_modules\" || name.startsWith(\".\")) continue;\r\n        const full = `${dir}/${name}`;\r\n        const st = _vol!.statSync(full);\r\n        if (st.isDirectory()) walk(full);\r\n        else files.push(full);\r\n      }\r\n    } catch {\r\n      /* */\r\n    }\r\n  };\r\n  walk(ctx.cwd);\r\n\r\n  for (const f of files) out += `${notice} ${f}\\n`;\r\n  out += `${notice} ${A_BOLD}total files:${A_RESET} ${files.length}\\n`;\r\n  return { stdout: out, stderr: \"\", exitCode: 0 };\r\n}\r\n\r\nfunction npmConfig(args: string[], ctx: ShellContext): ShellResult {\r\n  const sub = args[0];\r\n  if (!sub || sub === \"list\") {\r\n    let out = \"; nodepod project config\\n\";\r\n    out += `prefix = \"${ctx.cwd}\"\\n`;\r\n    out += `registry = \"${NPM_REGISTRY_URL_SLASH}\"\\n`;\r\n    return { stdout: out, stderr: \"\", exitCode: 0 };\r\n  }\r\n  if (sub === \"get\") {\r\n    const key = args[1];\r\n    if (key === \"prefix\")\r\n      return { stdout: ctx.cwd + \"\\n\", stderr: \"\", exitCode: 0 };\r\n    if (key === \"registry\")\r\n      return {\r\n        stdout: NPM_REGISTRY_URL_SLASH + \"\\n\",\r\n        stderr: \"\",\r\n        exitCode: 0,\r\n      };\r\n    return { stdout: \"undefined\\n\", stderr: \"\", exitCode: 0 };\r\n  }\r\n  if (sub === \"set\") {\r\n    return {\r\n      stdout: \"\",\r\n      stderr: formatWarn(\"config set: not supported in nodepod\", \"npm\"),\r\n      exitCode: 0,\r\n    };\r\n  }\r\n  return {\r\n    stdout: \"\",\r\n    stderr: formatErr(`config: unknown subcommand \"${sub}\"`, \"npm\"),\r\n    exitCode: 1,\r\n  };\r\n}\r\n\r\n// Direct node binary execution (shared by node command & npx)\r\n\r\nexport async function executeNodeBinary(\r\n  filePath: string,\r\n  args: string[],\r\n  ctx: ShellContext,\r\n  opts?: {\r\n    isFork?: boolean;\r\n    workerThreadsOverride?: {\r\n      isMainThread: boolean;\r\n      parentPort: unknown;\r\n      workerData: unknown;\r\n      threadId: number;\r\n    };\r\n  },\r\n): Promise<ShellResult> {\r\n  if (!_vol) return { stdout: \"\", stderr: \"Volume unavailable\\n\", exitCode: 1 };\r\n\r\n  const rawPath = filePath.startsWith(\"/\")\r\n    ? filePath\r\n    : `${ctx.cwd}/${filePath}`.replace(/\\/+/g, \"/\");\r\n\r\n  // resolve entry file: exact path, then extensions, then directory index\r\n  let resolved = \"\";\r\n  if (_vol.existsSync(rawPath) && !_vol.statSync(rawPath).isDirectory()) {\r\n    resolved = rawPath;\r\n  } else {\r\n    const exts = [\".js\", \".mjs\", \".cjs\", \".ts\", \".tsx\", \".jsx\"];\r\n    for (const ext of exts) {\r\n      if (_vol.existsSync(rawPath + ext)) { resolved = rawPath + ext; break; }\r\n    }\r\n    if (!resolved) {\r\n      // try as directory with index file\r\n      const dirPath = rawPath.endsWith(\"/\") ? rawPath : rawPath + \"/\";\r\n      for (const idx of [\"index.js\", \"index.mjs\", \"index.ts\", \"index.cjs\"]) {\r\n        if (_vol.existsSync(dirPath + idx)) { resolved = dirPath + idx; break; }\r\n      }\r\n    }\r\n  }\r\n\r\n  if (!resolved) {\r\n    const errMsg = `Cannot locate module '${rawPath}'\\n`;\r\n    const errSink = getStderrSink();\r\n    if (errSink) errSink(errMsg);\r\n    return {\r\n      stdout: \"\",\r\n      stderr: errMsg,\r\n      exitCode: 1,\r\n    };\r\n  }\r\n\r\n  let out = \"\";\r\n  let err = \"\";\r\n  let didExit = false;\r\n  let code = 0;\r\n\r\n  const pushOut = (s: string): boolean => {\r\n    out += s;\r\n    const sink = getStdoutSink();\r\n    if (sink) sink(s);\r\n    return true;\r\n  };\r\n  const pushErr = (s: string): boolean => {\r\n    err += s;\r\n    const sink = getStderrSink();\r\n    if (sink) sink(s);\r\n    return true;\r\n  };\r\n\r\n  // ScriptEngine's module wrapper overwrites globalThis.process -- save and restore\r\n  const savedProcess = (globalThis as any).process;\r\n\r\n  const sandbox = new ScriptEngine(_vol, {\r\n    cwd: ctx.cwd,\r\n    env: ctx.env,\r\n    onConsole: (m: string, cArgs: unknown[]) => {\r\n      // filter out process.exit sentinel errors logged by library code\r\n      if (cArgs.length === 1) {\r\n        const a = cArgs[0];\r\n        if (a instanceof Error && a.message.startsWith(\"Process exited with code\")) return;\r\n        if (typeof a === \"string\" && a.startsWith(\"Error: Process exited with code\")) return;\r\n      }\r\n      // error/warn → stderr, everything else → stdout\r\n      const line = utilFormat(cArgs[0], ...cArgs.slice(1)) + \"\\n\";\r\n      m === \"error\" ? pushErr(line) : pushOut(line);\r\n    },\r\n    onStdout: pushOut,\r\n    onStderr: pushErr,\r\n    workerThreadsOverride: opts?.workerThreadsOverride,\r\n  });\r\n\r\n  const proc = sandbox.getProcess();\r\n\r\n  // sync shell cwd when process.chdir() is called (create-next-app etc. depend on this)\r\n  proc._chdirHook = (dir: string) => {\r\n    if (_shell) _shell.setCwd(dir);\r\n  };\r\n\r\n  proc.exit = ((c = 0) => {\r\n    // suppress exit when dev servers are active (SES/error handlers call exit(1) but we want to keep serving)\r\n    if (getAllServers().size > 0 && c !== 0) {\r\n      // process.exit suppressed — servers still active\r\n      return;\r\n    }\r\n    if (!didExit) {\r\n      didExit = true;\r\n      code = c;\r\n      proc.emit(\"exit\", c);\r\n    }\r\n    // Always throw to halt execution — mirrors real Node.js process.exit()\r\n    // which terminates immediately. The TLA .catch() and try/catch both\r\n    // handle \"Process exited with code\" errors.\r\n    throw new Error(`Process exited with code ${c}`);\r\n  }) as (c?: number) => never;\r\n\r\n  proc.argv = [\"node\", resolved, ...args];\r\n\r\n  // wire IPC for forked children\r\n  if (_ipcSendFn) {\r\n    proc.send = ((msg: unknown, _cb?: (e: Error | null) => void): boolean => {\r\n      if (_ipcSendFn) {\r\n        _ipcSendFn(msg);\r\n        if (typeof _cb === \"function\") _cb(null);\r\n        return true;\r\n      }\r\n      return false;\r\n    }) as any;\r\n    proc.connected = true;\r\n    proc.disconnect = (() => {\r\n      proc.connected = false;\r\n    }) as () => void;\r\n\r\n    // incoming IPC from parent → emit on process (also replays queued messages)\r\n    setIPCReceiveHandler((data: unknown) => {\r\n      proc.emit(\"message\", data);\r\n    });\r\n  }\r\n\r\n  const prevLiveStdin = _liveStdin;\r\n  // capture locally -- the module-level _haltSignal gets cleared by clearStreamingCallbacks()\r\n  // while this ENB's wait loop may still be running\r\n  const myHaltSignal = getHaltSignal();\r\n  if (myHaltSignal) {\r\n    proc.stdout.isTTY = true;\r\n    proc.stderr.isTTY = true;\r\n    proc.stdin.isTTY = true;\r\n    // sync terminal dimensions for TUI libraries\r\n    const cols = getTermCols();\r\n    const rows = getTermRows();\r\n    proc.stdout.columns = cols;\r\n    proc.stdout.rows = rows;\r\n    proc.stderr.columns = cols;\r\n    proc.stderr.rows = rows;\r\n    proc.stdin.setRawMode = (flag: boolean) => {\r\n      proc.stdin.isRaw = flag;\r\n      // notify terminal so it switches echo mode\r\n      if (_rawModeChangeCb) _rawModeChangeCb(flag);\r\n      return proc.stdin;\r\n    };\r\n    _liveStdin = proc.stdin;\r\n    // also update context's liveStdin\r\n    const ctx = getActiveContext();\r\n    if (ctx) ctx.liveStdin = proc.stdin;\r\n  }\r\n\r\n  // for forked children: ref() to simulate the IPC channel handle.\r\n  // real Node.js keeps the IPC channel ref'd until process.disconnect().\r\n  // we hold a ref for the entire fork lifetime, released on disconnect or exit.\r\n  const isFork = !!opts?.isFork;\r\n  if (isFork) {\r\n    ref();\r\n    // disconnect → unref (mirrors Node.js IPC channel.unref())\r\n    const origDisconnect = proc.disconnect;\r\n    proc.disconnect = (() => {\r\n      origDisconnect?.call(proc);\r\n      unref();\r\n    }) as () => void;\r\n  }\r\n\r\n  let scriptError: Error | null = null;\r\n  let tlaSettled = false;\r\n\r\n  try {\r\n    const tlaPromise = sandbox.runFileTLA(resolved);\r\n    tlaPromise\r\n      .catch((e) => {\r\n        if (\r\n          e instanceof Error &&\r\n          e.message.startsWith(\"Process exited with code\")\r\n        ) {\r\n          return;\r\n        }\r\n        const msg = formatThrown(e);\r\n        pushErr(`Error: ${msg}\\n`);\r\n        if (!didExit) {\r\n          didExit = true;\r\n          code = 1;\r\n        }\r\n      })\r\n      .finally(() => {\r\n        tlaSettled = true;\r\n      });\r\n  } catch (e) {\r\n    if (\r\n      e instanceof Error &&\r\n      e.message.startsWith(\"Process exited with code\")\r\n    ) {\r\n      // process.exit() — handled by didExit flag\r\n    } else {\r\n      const msg = formatThrown(e);\r\n      scriptError = e instanceof Error ? e : new Error(msg);\r\n    }\r\n  }\r\n\r\n  const cleanup = () => {\r\n    if (savedProcess) (globalThis as any).process = savedProcess;\r\n  };\r\n\r\n  if (scriptError) {\r\n    cleanup();\r\n    const errMsg = scriptError.message || scriptError.name || \"Unknown error\";\r\n    const errStack = scriptError.stack || \"\";\r\n    const fullMsg =\r\n      errStack && !errStack.includes(errMsg)\r\n        ? `${errMsg}\\n${errStack}`\r\n        : errStack || errMsg;\r\n    return { stdout: out, stderr: err + `Error: ${fullMsg}\\n`, exitCode: 1 };\r\n  }\r\n\r\n  // process.exit() called synchronously -- bail\r\n  if (didExit) {\r\n    cleanup();\r\n    return { stdout: out, stderr: err, exitCode: code };\r\n  }\r\n\r\n  // yield one tick so microtasks settle\r\n  await new Promise((r) => setTimeout(r, 0));\r\n\r\n  // keep the process alive while TLA hasn't settled, ref handles exist,\r\n  // or HTTP servers are registered. process.exit() and Ctrl+C break immediately.\r\n\r\n  const shouldStayAlive = (): boolean => {\r\n    if (!tlaSettled) return true;\r\n    if (getRefCount() > 0) return true;\r\n    if (getAllServers().size > 0) return true;\r\n    return false;\r\n  };\r\n\r\n  // fast path: nothing keeping the process alive\r\n  if (!myHaltSignal && !shouldStayAlive()) {\r\n    cleanup();\r\n    return { stdout: out, stderr: err, exitCode: 0 };\r\n  }\r\n\r\n  // avoid duplicate output when same error fires as both 'error' and 'unhandledrejection'\r\n  const handledErrors = new WeakSet<object>();\r\n\r\n  const rejHandler = (ev: PromiseRejectionEvent) => {\r\n    ev.preventDefault();\r\n    const r = ev.reason;\r\n    if (\r\n      r instanceof Error &&\r\n      r.message.startsWith(\"Process exited with code\")\r\n    ) {\r\n      return;\r\n    }\r\n    // mark as handled to prevent errHandler double-logging\r\n    if (r != null && typeof r === \"object\") handledErrors.add(r);\r\n    // emit 'unhandledRejection' on process -- if a handler exists, it handles it\r\n    try {\r\n      const hasHandler = proc.listenerCount\r\n        ? proc.listenerCount(\"unhandledRejection\") > 0\r\n        : false;\r\n      proc.emit(\"unhandledRejection\", r, ev.promise);\r\n      if (hasHandler) return; // Handler dealt with it — don't log\r\n    } catch { /* ignore handler errors */ }\r\n    const rejMsg = r instanceof Error\r\n      ? `Unhandled rejection: ${r.message}\\n${r.stack ?? \"\"}\\n`\r\n      : `Unhandled rejection: ${String(r)}\\n`;\r\n    pushErr(rejMsg);\r\n  };\r\n  const errHandler = (ev: ErrorEvent) => {\r\n    ev.preventDefault();\r\n    const e = ev.error ?? new Error(ev.message || \"Unknown error\");\r\n    // skip if already handled by rejHandler (same error fires on both global events)\r\n    if (e != null && typeof e === \"object\" && handledErrors.has(e)) return;\r\n    if (e != null && typeof e === \"object\") handledErrors.add(e);\r\n    // emit 'uncaughtException' -- frameworks like webpack register handlers for graceful recovery\r\n    try {\r\n      const hasUncaught = proc.listenerCount\r\n        ? proc.listenerCount(\"uncaughtException\") > 0\r\n        : false;\r\n      proc.emit(\"uncaughtException\", e);\r\n      if (hasUncaught) return; // Handler dealt with it — don't log or crash\r\n    } catch { /* handler threw — fall through to default logging */ }\r\n    // if there's an unhandledRejection listener, it'll handle this -- don't double-log\r\n    try {\r\n      const hasRej = proc.listenerCount\r\n        ? proc.listenerCount(\"unhandledRejection\") > 0\r\n        : false;\r\n      if (hasRej) return;\r\n    } catch { /* ignore */ }\r\n    const msg = e instanceof Error\r\n      ? `${e.stack || e.message}\\n`\r\n      : `Uncaught: ${String(e)}\\n`;\r\n    pushErr(msg);\r\n  };\r\n  globalThis.addEventListener(\"unhandledrejection\", rejHandler);\r\n  globalThis.addEventListener(\"error\", errHandler);\r\n\r\n  try {\r\n    // resolves when Ctrl+C / signal fires\r\n    const haltPromise = myHaltSignal\r\n      ? new Promise<void>((r) => {\r\n          if (myHaltSignal!.aborted) { r(); return; }\r\n          myHaltSignal!.addEventListener(\"abort\", () => r(), { once: true });\r\n        })\r\n      : null;\r\n\r\n    // give async startup code time to register handles before deciding the process is done\r\n    let consecutiveEmpty = 0;\r\n    let everNonEmpty = false;\r\n\r\n    while (!didExit) {\r\n      if (myHaltSignal?.aborted) {\r\n        break;\r\n      }\r\n\r\n      // wake on drain notification or periodic tick\r\n      let wakeResolve!: () => void;\r\n      const wakePromise = new Promise<void>((r) => { wakeResolve = r; });\r\n      const removeDrain = addDrainListener(wakeResolve);\r\n\r\n      const tickMs = (!everNonEmpty && myHaltSignal && !out && !err)\r\n        ? TIMEOUTS.WAIT_LOOP_TICK\r\n        : 50;\r\n      const racers: Promise<unknown>[] = [\r\n        wakePromise,\r\n        new Promise<void>((r) => setTimeout(r, tickMs)),\r\n      ];\r\n      if (haltPromise) racers.push(haltPromise);\r\n\r\n      await Promise.race(racers);\r\n      removeDrain();\r\n\r\n      if (myHaltSignal?.aborted) {\r\n        break;\r\n      }\r\n      if (didExit) {\r\n        break;\r\n      }\r\n\r\n      if (!shouldStayAlive()) {\r\n        // yield one microtask turn for async transitions (e.g. @clack closing/reopening readline)\r\n        await new Promise<void>((r) => queueMicrotask(r));\r\n        if (didExit || myHaltSignal?.aborted) break;\r\n        if (shouldStayAlive()) {\r\n          everNonEmpty = true;\r\n          consecutiveEmpty = 0;\r\n          continue;\r\n        }\r\n\r\n        consecutiveEmpty++;\r\n\r\n        if (myHaltSignal) {\r\n          // terminal mode: tiered timeout -- no output yet (10s), had refs before (5s), output but no refs (2s)\r\n          if (!everNonEmpty && !out && !err) {\r\n            if (consecutiveEmpty >= 50) {\r\n              break;\r\n            }\r\n          } else if (!everNonEmpty) {\r\n            if (consecutiveEmpty >= Math.ceil(2_000 / tickMs)) {\r\n              break;\r\n            }\r\n          } else {\r\n            if (consecutiveEmpty >= 100) {\r\n              break;\r\n            }\r\n          }\r\n        } else {\r\n          break; // Non-terminal: exit immediately when empty.\r\n        }\r\n      } else {\r\n        consecutiveEmpty = 0;\r\n        everNonEmpty = true;\r\n      }\r\n    }\r\n\r\n    return { stdout: out, stderr: err, exitCode: didExit ? code : 0 };\r\n  } finally {\r\n    cleanup();\r\n    // defuse proc.exit so floating Promises don't throw unhandled rejections\r\n    proc.exit = (() => {}) as unknown as (c?: number) => never;\r\n    globalThis.removeEventListener(\"unhandledrejection\", rejHandler);\r\n    globalThis.removeEventListener(\"error\", errHandler);\r\n    // restore _liveStdin for the parent's stdin relay\r\n    _liveStdin = prevLiveStdin;\r\n    const ctxRestore = getActiveContext();\r\n    if (ctxRestore) ctxRestore.liveStdin = prevLiveStdin;\r\n    // full reset\r\n    closeAllServers();\r\n    resetRefCount();\r\n    resetActiveInterfaceCount();\r\n  }\r\n}\r\n\r\nasync function npxExecute(\r\n  params: string[],\r\n  ctx: ShellContext,\r\n): Promise<ShellResult> {\r\n  if (!_vol) return { stdout: \"\", stderr: \"Volume unavailable\\n\", exitCode: 1 };\r\n\r\n  // parse npx flags\r\n  let autoInstall = true;\r\n  let installPkg: string | null = null;\r\n  const filteredParams: string[] = [];\r\n  let separatorSeen = false;\r\n\r\n  for (let i = 0; i < params.length; i++) {\r\n    if (separatorSeen) {\r\n      filteredParams.push(params[i]);\r\n      continue;\r\n    }\r\n    if (params[i] === \"--\") {\r\n      separatorSeen = true;\r\n      continue;\r\n    }\r\n    if (params[i] === \"-y\" || params[i] === \"--yes\") {\r\n      autoInstall = true;\r\n      continue;\r\n    }\r\n    if (params[i] === \"-n\" || params[i] === \"--no\") {\r\n      autoInstall = false;\r\n      continue;\r\n    }\r\n    if (\r\n      (params[i] === \"-p\" || params[i] === \"--package\") &&\r\n      i + 1 < params.length\r\n    ) {\r\n      installPkg = params[++i];\r\n      continue;\r\n    }\r\n    if (params[i] === \"--help\" || params[i] === \"-h\") {\r\n      return {\r\n        stdout:\r\n          `${A_BOLD}Usage:${A_RESET} npx [options] <command> [args...]\\n\\n` +\r\n          `${A_BOLD}Options:${A_RESET}\\n` +\r\n          `  ${A_CYAN}-y${A_RESET}, ${A_CYAN}--yes${A_RESET}       Auto-confirm install\\n` +\r\n          `  ${A_CYAN}-n${A_RESET}, ${A_CYAN}--no${A_RESET}        Don't install if not found\\n` +\r\n          `  ${A_CYAN}-p${A_RESET}, ${A_CYAN}--package${A_RESET}   Specify package to install\\n` +\r\n          `  ${A_CYAN}--${A_RESET}              Separator for command args\\n`,\r\n        stderr: \"\",\r\n        exitCode: 0,\r\n      };\r\n    }\r\n    filteredParams.push(params[i]);\r\n  }\r\n\r\n  let pkgSpec = filteredParams[0];\r\n  if (!pkgSpec) {\r\n    return {\r\n      stdout: \"\",\r\n      stderr: formatErr(\"missing command\", \"npm\"),\r\n      exitCode: 1,\r\n    };\r\n  }\r\n\r\n  let cmdName: string;\r\n  let version: string | undefined;\r\n  if (pkgSpec.startsWith(\"@\")) {\r\n    // scoped: @scope/name or @scope/name@version\r\n    const rest = pkgSpec.slice(1);\r\n    const atIdx = rest.indexOf(\"@\");\r\n    if (atIdx > 0 && rest.indexOf(\"/\") < atIdx) {\r\n      cmdName = \"@\" + rest.slice(0, atIdx);\r\n      version = rest.slice(atIdx + 1);\r\n    } else {\r\n      cmdName = pkgSpec;\r\n    }\r\n  } else {\r\n    const atIdx = pkgSpec.indexOf(\"@\");\r\n    if (atIdx > 0) {\r\n      cmdName = pkgSpec.slice(0, atIdx);\r\n      version = pkgSpec.slice(atIdx + 1);\r\n    } else {\r\n      cmdName = pkgSpec;\r\n    }\r\n  }\r\n\r\n  // -p overrides the package to install\r\n  const actualPkg = installPkg || pkgSpec;\r\n  const actualPkgName = installPkg\r\n    ? installPkg.replace(/@[^@/]+$/, \"\").replace(/^@/, \"\")\r\n    : cmdName;\r\n\r\n  let resolvedBin = findBinary(cmdName, _vol, ctx.cwd);\r\n\r\n  // not found locally -- try installing\r\n  if (!resolvedBin && autoInstall) {\r\n    const installResult = await installPackages([actualPkg], ctx);\r\n    if (installResult.exitCode !== 0) return installResult;\r\n    resolvedBin = findBinary(cmdName, _vol, ctx.cwd);\r\n  }\r\n\r\n  if (!resolvedBin) {\r\n    return {\r\n      stdout: \"\",\r\n      stderr: `npx: command '${cmdName}' not found\\n`,\r\n      exitCode: 1,\r\n    };\r\n  }\r\n\r\n  // run directly via node handler to avoid shell re-parsing mangling arguments\r\n  return executeNodeBinary(resolvedBin, filteredParams.slice(1), ctx);\r\n}\r\n\r\nfunction findBinary(\r\n  name: string,\r\n  vol: MemoryVolume,\r\n  cwd?: string,\r\n): string | null {\r\n  const cleanName = name.startsWith(\"@\") ? name : name;\r\n  const shortName = cleanName.includes(\"/\")\r\n    ? cleanName.split(\"/\").pop()!\r\n    : cleanName;\r\n\r\n  // cwd-local first, then root fallback\r\n  const searchRoots =\r\n    cwd && cwd !== \"/\"\r\n      ? [`${cwd}/node_modules`, `/node_modules`]\r\n      : [`/node_modules`];\r\n\r\n  for (const nmDir of searchRoots) {\r\n    // check package.json bin field for the real JS entry point\r\n    const pkgJsonPath = `${nmDir}/${cleanName}/package.json`;\r\n    if (vol.existsSync(pkgJsonPath)) {\r\n      try {\r\n        const pkg = JSON.parse(\r\n          vol.readFileSync(pkgJsonPath, \"utf8\") as string,\r\n        ) as PackageManifest;\r\n        if (pkg.bin) {\r\n          if (typeof pkg.bin === \"string\") {\r\n            return `${nmDir}/${cleanName}/${pkg.bin}`;\r\n          }\r\n          if (typeof pkg.bin === \"object\") {\r\n            const binMap = pkg.bin as Record<string, string>;\r\n            const binEntry =\r\n              binMap[shortName] ||\r\n              binMap[cleanName] ||\r\n              Object.values(binMap)[0];\r\n            if (binEntry) return `${nmDir}/${cleanName}/${binEntry}`;\r\n          }\r\n        }\r\n        // fallback to main\r\n        if (pkg.main) return `${nmDir}/${cleanName}/${pkg.main}`;\r\n      } catch {\r\n        /* ignore */\r\n      }\r\n    }\r\n\r\n    // .bin stubs -- resolve through to the actual JS target they reference\r\n    const binPath = `${nmDir}/.bin/${name}`;\r\n    if (vol.existsSync(binPath)) {\r\n      try {\r\n        const stub = vol.readFileSync(binPath, \"utf8\");\r\n        // stubs look like: node \"/node_modules/pkg/index.js\" \"$@\"\r\n        const match = stub.match(/node\\s+\"([^\"]+)\"/);\r\n        if (match && vol.existsSync(match[1])) return match[1];\r\n      } catch {\r\n        /* ignore */\r\n      }\r\n    }\r\n  }\r\n\r\n  return null;\r\n}\r\n\r\nexport interface RunOptions {\r\n  cwd?: string;\r\n  env?: Record<string, string>;\r\n  encoding?: BufferEncoding | \"buffer\";\r\n  timeout?: number;\r\n  maxBuffer?: number;\r\n  shell?: string | boolean;\r\n}\r\n\r\nexport type RunCallback = (\r\n  err: Error | null,\r\n  stdout: string | Buffer,\r\n  stderr: string | Buffer,\r\n) => void;\r\n\r\nexport interface SpawnConfig {\r\n  cwd?: string;\r\n  env?: Record<string, string>;\r\n  shell?: boolean | string;\r\n  stdio?: \"pipe\" | \"inherit\" | \"ignore\" | Array<\"pipe\" | \"inherit\" | \"ignore\">;\r\n}\r\n\r\nexport function exec(\r\n  command: string,\r\n  optsOrCb?: RunOptions | RunCallback,\r\n  cb?: RunCallback,\r\n): ShellProcess {\r\n  let options: RunOptions = {};\r\n  let done: RunCallback | undefined;\r\n  if (typeof optsOrCb === \"function\") {\r\n    done = optsOrCb;\r\n  } else if (optsOrCb) {\r\n    options = optsOrCb;\r\n    done = cb;\r\n  }\r\n\r\n  const child = new ShellProcess();\r\n\r\n  if (!_shell) {\r\n    const e = new Error(\"[Nodepod] exec requires shell. Call initShellExec() first.\");\r\n    setTimeout(() => {\r\n      child.emit(\"error\", e);\r\n      if (done) done(e, \"\", \"\");\r\n    }, 0);\r\n    return child;\r\n  }\r\n\r\n  const cwd = options.cwd ?? getShellCwd();\r\n  const env = (options.env as Record<string, string>) ?? undefined;\r\n\r\n  // run inline via NodepodShell -- only fork() gets a dedicated worker\r\n  _shell.exec(command, { cwd, env }).then(\r\n    (result) => {\r\n      const { stdout, stderr, exitCode } = result;\r\n      if (stdout) child.stdout?.push(Buffer.from(stdout));\r\n      if (stderr) child.stderr?.push(Buffer.from(stderr));\r\n      child.stdout?.push(null);\r\n      child.stderr?.push(null);\r\n      child.exitCode = exitCode;\r\n      child.emit(\"close\", exitCode, null);\r\n      child.emit(\"exit\", exitCode, null);\r\n      if (done) {\r\n        if (exitCode !== 0) {\r\n          const e = new Error(`Command failed: ${command}`);\r\n          (e as any).code = exitCode;\r\n          done(e, stdout ?? \"\", stderr ?? \"\");\r\n        } else {\r\n          done(null, stdout ?? \"\", stderr ?? \"\");\r\n        }\r\n      }\r\n    },\r\n    (e) => {\r\n      child.emit(\"error\", e instanceof Error ? e : new Error(String(e)));\r\n      if (done) done(e instanceof Error ? e : new Error(String(e)), \"\", \"\");\r\n    },\r\n  );\r\n\r\n  return child;\r\n}\r\n\r\nexport function execSync(cmd: string, opts?: RunOptions): string | Buffer {\r\n  const trimmed = cmd.trim();\r\n  const encoding = opts?.encoding;\r\n\r\n  // fast path: trivially synchronous commands (version checks, echo, pwd)\r\n  const result = handleSyncCommand(trimmed, opts);\r\n  if (result !== null) {\r\n    if (encoding === \"buffer\") return Buffer.from(result);\r\n    return result;\r\n  }\r\n\r\n  // true blocking path via Atomics.wait()\r\n  if (!_syncChannel) {\r\n    throw new Error(\r\n      \"[Nodepod] execSync requires SyncChannel (worker mode with SharedArrayBuffer). \" +\r\n      \"Ensure Nodepod is running in worker mode with COOP/COEP headers.\",\r\n    );\r\n  }\r\n\r\n  const slot = _syncChannel.allocateSlot();\r\n  const cwd = opts?.cwd ?? (globalThis as any).process?.cwd?.() ?? \"/\";\r\n  const env = (opts?.env as Record<string, string>) ?? {};\r\n\r\n  (self as any).postMessage({\r\n    type: \"spawn-sync\",\r\n    requestId: _nextSyncRequestId++,\r\n    command: trimmed.split(/\\s+/)[0],\r\n    args: trimmed.split(/\\s+/).slice(1),\r\n    cwd,\r\n    env,\r\n    syncSlot: slot,\r\n    shellCommand: trimmed,\r\n  });\r\n\r\n  // blocks until main thread spawns child and child completes\r\n  const { exitCode, stdout } = _syncChannel.waitForResult(slot, 120_000);\r\n\r\n  if (exitCode !== 0) {\r\n    const err: any = new Error(`Command failed: ${trimmed}\\n${stdout}`);\r\n    err.status = exitCode;\r\n    err.stderr = Buffer.from(\"\");\r\n    err.stdout = Buffer.from(stdout);\r\n    err.output = [null, err.stdout, err.stderr];\r\n    throw err;\r\n  }\r\n\r\n  if (encoding === \"buffer\") return Buffer.from(stdout);\r\n  return stdout;\r\n}\r\n\r\nlet _nextSyncRequestId = 1;\r\n\r\nconst KNOWN_BINS: Record<string, string> = {\r\n  node: \"/usr/local/bin/node\",\r\n  npm: \"/usr/local/bin/npm\",\r\n  npx: \"/usr/local/bin/npx\",\r\n  pnpm: \"/usr/local/bin/pnpm\",\r\n  yarn: \"/usr/local/bin/yarn\",\r\n  bun: \"/usr/local/bin/bun\",\r\n  bunx: \"/usr/local/bin/bunx\",\r\n  git: \"/usr/bin/git\",\r\n};\r\n\r\nfunction isBinaryAvailable(name: string): string | null {\r\n  if (KNOWN_BINS[name]) return KNOWN_BINS[name];\r\n  if (_vol) {\r\n    const binPath = `/node_modules/.bin/${name}`;\r\n    if (_vol.existsSync(binPath)) return binPath;\r\n  }\r\n  return null;\r\n}\r\n\r\n// throw an error matching real Node.js execSync behaviour for failed commands\r\nfunction throwCommandNotFound(cmd: string): never {\r\n  const err: any = new Error(\r\n    `Command failed: ${cmd}\\n/bin/sh: 1: ${cmd.split(/\\s+/)[0]}: not found\\n`,\r\n  );\r\n  err.status = 127;\r\n  err.stderr = Buffer.from(`/bin/sh: 1: ${cmd.split(/\\s+/)[0]}: not found\\n`);\r\n  err.stdout = Buffer.from(\"\");\r\n  throw err;\r\n}\r\n\r\nfunction _findGitDir(cwd: string): { gitDir: string; workDir: string } | null {\r\n  if (!_vol) return null;\r\n  let dir = cwd;\r\n  while (true) {\r\n    const gitPath = dir + \"/.git\";\r\n    try { if (_vol.existsSync(gitPath)) return { gitDir: gitPath, workDir: dir }; } catch { /* */ }\r\n    const parent = dir.substring(0, dir.lastIndexOf(\"/\")) || \"/\";\r\n    if (parent === dir) break;\r\n    dir = parent;\r\n  }\r\n  try { if (_vol.existsSync(\"/.git\")) return { gitDir: \"/.git\", workDir: \"/\" }; } catch { /* */ }\r\n  return null;\r\n}\r\n\r\nfunction _readHeadBranch(gitDir: string): string {\r\n  try {\r\n    const head = (_vol!.readFileSync(gitDir + \"/HEAD\", \"utf8\" as any) as string).trim();\r\n    if (head.startsWith(\"ref: refs/heads/\")) return head.slice(16);\r\n    return head.slice(0, 7);\r\n  } catch { return \"main\"; }\r\n}\r\n\r\nfunction _resolveHeadHash(gitDir: string): string | null {\r\n  try {\r\n    const head = (_vol!.readFileSync(gitDir + \"/HEAD\", \"utf8\" as any) as string).trim();\r\n    if (head.startsWith(\"ref: \")) {\r\n      const refPath = gitDir + \"/\" + head.slice(5);\r\n      return (_vol!.readFileSync(refPath, \"utf8\" as any) as string).trim();\r\n    }\r\n    return head;\r\n  } catch { return null; }\r\n}\r\n\r\nfunction _readGitConfigKey(gitDir: string, key: string): string | null {\r\n  try {\r\n    const config = _vol!.readFileSync(gitDir + \"/config\", \"utf8\" as any) as string;\r\n    const parts = key.split(\".\");\r\n    let sectionName: string, subSection: string | null = null, propName: string;\r\n    if (parts.length === 3) { sectionName = parts[0]; subSection = parts[1]; propName = parts[2]; }\r\n    else if (parts.length === 2) { sectionName = parts[0]; propName = parts[1]; }\r\n    else return null;\r\n    const lines = config.split(\"\\n\");\r\n    let inSection = false;\r\n    for (const line of lines) {\r\n      const trimmed = line.trim();\r\n      if (trimmed.startsWith(\"[\")) {\r\n        inSection = subSection\r\n          ? trimmed === `[${sectionName} \"${subSection}\"]`\r\n          : trimmed === `[${sectionName}]`;\r\n        continue;\r\n      }\r\n      if (inSection) {\r\n        const m = trimmed.match(/^(\\w+)\\s*=\\s*(.*)$/);\r\n        if (m && m[1] === propName) return m[2].trim();\r\n      }\r\n    }\r\n  } catch { /* */ }\r\n  return null;\r\n}\r\n\r\nfunction handleSyncCommand(cmd: string, opts?: RunOptions): string | null {\r\n  if (/^node\\s+(--version|-v)\\s*$/.test(cmd)) return VERSIONS.NODE + \"\\n\";\r\n  if (/^npm\\s+(--version|-v)\\s*$/.test(cmd)) return VERSIONS.NPM + \"\\n\";\r\n  if (/^pnpm\\s+(--version|-v)\\s*$/.test(cmd)) return VERSIONS.PNPM + \"\\n\";\r\n  if (/^yarn\\s+(--version|-v)\\s*$/.test(cmd)) return VERSIONS.YARN + \"\\n\";\r\n  if (/^bun\\s+(--version|-v)\\s*$/.test(cmd)) return VERSIONS.BUN + \"\\n\";\r\n\r\n  // which / command -v\r\n  const whichMatch = cmd.match(/^(?:which|command\\s+-v)\\s+(\\S+)\\s*$/);\r\n  if (whichMatch) {\r\n    const binName = whichMatch[1];\r\n    const binPath = isBinaryAvailable(binName);\r\n    if (binPath) return binPath + \"\\n\";\r\n    throwCommandNotFound(cmd);\r\n  }\r\n\r\n  // <binary> --version / -v\r\n  const versionMatch = cmd.match(/^(\\S+)\\s+(--version|-v)\\s*$/);\r\n  if (versionMatch) {\r\n    const binName = versionMatch[1];\r\n    if (\r\n      binName === \"node\" ||\r\n      binName === \"npm\" ||\r\n      binName === \"pnpm\" ||\r\n      binName === \"yarn\" ||\r\n      binName === \"bun\"\r\n    )\r\n      return null; // handled above\r\n    if (!isBinaryAvailable(binName)) throwCommandNotFound(cmd);\r\n    // known binary but no version handler -- fall through to async\r\n  }\r\n\r\n  // registry queries (Next.js uses this to find npm registry)\r\n  if (/^(?:npm|yarn|pnpm)\\s+config\\s+get\\s+registry\\s*$/.test(cmd)) {\r\n    return NPM_REGISTRY_URL_SLASH.replace(/\\/$/, \"\") + \"\\n\";\r\n  }\r\n\r\n  const echoMatch = cmd.match(/^echo\\s+[\"']?(.*?)[\"']?\\s*$/);\r\n  if (echoMatch) return echoMatch[1] + \"\\n\";\r\n  if (/^uname\\s+-s\\s*$/.test(cmd)) return \"Linux\\n\";\r\n  if (/^uname\\s+-m\\s*$/.test(cmd)) return \"x86_64\\n\";\r\n  if (/^uname\\s+-a\\s*$/.test(cmd))\r\n    return \"Linux nodepod 5.10.0 #1 SMP x86_64 GNU/Linux\\n\";\r\n  // git fast-path for sync commands\r\n  if (/^git\\s+(--version|-v)\\s*$/.test(cmd) || cmd === \"git --version\") {\r\n    return \"git version \" + VERSIONS.GIT + \"\\n\";\r\n  }\r\n  if (_vol) {\r\n    const gitRevParseMatch = cmd.match(/^git\\s+rev-parse\\s+(.+)$/);\r\n    if (gitRevParseMatch) {\r\n      const gitArgs = gitRevParseMatch[1].trim();\r\n      const cwd = opts?.cwd || \"/\";\r\n      const gd = _findGitDir(cwd);\r\n      if (gitArgs === \"--show-toplevel\") return gd ? gd.workDir + \"\\n\" : \"\";\r\n      if (gitArgs === \"--is-inside-work-tree\") return gd ? \"true\\n\" : \"false\\n\";\r\n      if (gitArgs === \"--git-dir\") return gd ? \".git\\n\" : \"\";\r\n      if (gitArgs === \"--is-bare-repository\") return \"false\\n\";\r\n      if (gitArgs === \"--abbrev-ref HEAD\" && gd) return _readHeadBranch(gd.gitDir) + \"\\n\";\r\n      if ((gitArgs === \"HEAD\" || gitArgs === \"--verify HEAD\") && gd) {\r\n        const h = _resolveHeadHash(gd.gitDir);\r\n        return h ? h + \"\\n\" : \"\";\r\n      }\r\n      if (gitArgs === \"--short HEAD\" && gd) {\r\n        const h = _resolveHeadHash(gd.gitDir);\r\n        return h ? h.slice(0, 7) + \"\\n\" : \"\";\r\n      }\r\n    }\r\n    if (/^git\\s+branch\\s+--show-current\\s*$/.test(cmd)) {\r\n      const cwd = opts?.cwd || \"/\";\r\n      const gd = _findGitDir(cwd);\r\n      if (gd) return _readHeadBranch(gd.gitDir) + \"\\n\";\r\n    }\r\n    const gitConfigGetMatch = cmd.match(/^git\\s+config\\s+(?:--get\\s+)?(\\S+)\\s*$/);\r\n    if (gitConfigGetMatch) {\r\n      const cwd = opts?.cwd || \"/\";\r\n      const gd = _findGitDir(cwd);\r\n      if (gd) {\r\n        const val = _readGitConfigKey(gd.gitDir, gitConfigGetMatch[1]);\r\n        return val !== null ? val + \"\\n\" : \"\";\r\n      }\r\n      return \"\";\r\n    }\r\n  }\r\n  // catch-all for git\r\n  if (/^git\\s/.test(cmd)) return \"\";\r\n  if (cmd === \"true\" || cmd === \":\") return \"\";\r\n  if (cmd === \"pwd\") return (opts?.cwd || \"/\") + \"\\n\";\r\n  if (cmd.startsWith(\"cat \") && _vol) {\r\n    const path = cmd.slice(4).trim().replace(/['\"]/g, \"\");\r\n    try {\r\n      return _vol.readFileSync(path, \"utf8\" as any);\r\n    } catch {\r\n      return \"\";\r\n    }\r\n  }\r\n  if ((cmd === \"ls\" || cmd.startsWith(\"ls \")) && _vol) {\r\n    const dir =\r\n      cmd === \"ls\"\r\n        ? opts?.cwd || \"/\"\r\n        : cmd.slice(3).trim().replace(/['\"]/g, \"\");\r\n    try {\r\n      return _vol.readdirSync(dir).join(\"\\n\") + \"\\n\";\r\n    } catch {\r\n      return \"\";\r\n    }\r\n  }\r\n  const testMatch = cmd.match(\r\n    /^(?:test|\\[)\\s+(-[fd])\\s+[\"']?(.*?)[\"']?\\s*\\]?\\s*$/,\r\n  );\r\n  if (testMatch && _vol) {\r\n    const flag = testMatch[1];\r\n    const path = testMatch[2];\r\n    try {\r\n      const st = _vol.statSync(path);\r\n      if (flag === \"-f\" && st.isFile()) return \"\";\r\n      if (flag === \"-d\" && st.isDirectory()) return \"\";\r\n    } catch {\r\n      /* */\r\n    }\r\n    return \"\";\r\n  }\r\n  return null;\r\n}\r\n\r\nexport function spawn(\r\n  command: string,\r\n  argsOrOpts?: string[] | SpawnConfig,\r\n  opts?: SpawnConfig,\r\n): ShellProcess {\r\n  let spawnArgs: string[] = [];\r\n  let cfg: SpawnConfig = {};\r\n  if (Array.isArray(argsOrOpts)) {\r\n    spawnArgs = argsOrOpts;\r\n    cfg = opts ?? {};\r\n  } else if (argsOrOpts) cfg = argsOrOpts;\r\n\r\n  const child = new ShellProcess();\r\n\r\n  // spawn() gets a dedicated worker (streaming output, long-lived processes).\r\n  // exec() runs inline since it collects all output at the end.\r\n  if (_spawnChildFn) {\r\n    const cwd = cfg.cwd ?? getShellCwd();\r\n    const env = (cfg.env as Record<string, string>) ?? {};\r\n    const fullCmd = spawnArgs.length ? `${command} ${spawnArgs.join(\" \")}` : command;\r\n\r\n    // keep parent alive while child is running\r\n    ref();\r\n\r\n    _spawnChildFn(command, spawnArgs, {\r\n      cwd,\r\n      env,\r\n      stdio: \"pipe\",\r\n      onStdout: (data: string) => {\r\n        child.stdout?.push(Buffer.from(data));\r\n        // also route through parent's stdout sink for terminal output\r\n        const sink = getStdoutSink();\r\n        if (sink) sink(data);\r\n      },\r\n      onStderr: (data: string) => {\r\n        child.stderr?.push(Buffer.from(data));\r\n        const sink = getStderrSink();\r\n        if (sink) sink(data);\r\n      },\r\n    }).then(({ exitCode }) => {\r\n      unref(); // Child done — release event loop hold\r\n      child.stdout?.push(null);\r\n      child.stderr?.push(null);\r\n      child.exitCode = exitCode;\r\n      child.emit(\"close\", exitCode, null);\r\n      child.emit(\"exit\", exitCode, null);\r\n    }).catch((e) => {\r\n      unref(); // Child done — release event loop hold\r\n      child.emit(\"error\", e instanceof Error ? e : new Error(String(e)));\r\n    });\r\n  } else if (_shell) {\r\n    // fallback: inline execution (no streaming)\r\n    const cwd = cfg.cwd ?? getShellCwd();\r\n    const env = (cfg.env as Record<string, string>) ?? undefined;\r\n    const fullCmd = spawnArgs.length\r\n      ? `${command} ${spawnArgs.map((a) => a.includes(\" \") ? `\"${a}\"` : a).join(\" \")}`\r\n      : command;\r\n\r\n    _shell.exec(fullCmd, { cwd, env }).then(\r\n      (result) => {\r\n        const { stdout, stderr, exitCode } = result;\r\n        if (stdout) child.stdout?.push(Buffer.from(stdout));\r\n        if (stderr) child.stderr?.push(Buffer.from(stderr));\r\n        child.stdout?.push(null);\r\n        child.stderr?.push(null);\r\n        child.exitCode = exitCode;\r\n        child.emit(\"close\", exitCode, null);\r\n        child.emit(\"exit\", exitCode, null);\r\n      },\r\n      (e) => {\r\n        child.emit(\"error\", e instanceof Error ? e : new Error(String(e)));\r\n      },\r\n    );\r\n  } else {\r\n    setTimeout(() => {\r\n      child.emit(\"error\", new Error(\"[Nodepod] spawn requires shell or worker mode.\"));\r\n    }, 0);\r\n  }\r\n\r\n  // real Node emits this on next tick so listeners can attach first\r\n  queueMicrotask(() => child.emit(\"spawn\"));\r\n\r\n  return child;\r\n}\r\n\r\nexport function spawnSync(\r\n  cmd: string,\r\n  args?: string[] | SpawnConfig,\r\n  opts?: SpawnConfig,\r\n): {\r\n  stdout: Buffer;\r\n  stderr: Buffer;\r\n  status: number;\r\n  signal: null;\r\n  pid: number;\r\n  output: [null, Buffer, Buffer];\r\n  error?: Error;\r\n} {\r\n  let spawnArgs: string[] = [];\r\n  let cfg: SpawnConfig = {};\r\n  if (Array.isArray(args)) {\r\n    spawnArgs = args;\r\n    cfg = opts ?? {};\r\n  } else if (args) {\r\n    cfg = args;\r\n  }\r\n\r\n  const full = spawnArgs.length ? `${cmd} ${spawnArgs.join(\" \")}` : cmd;\r\n  const syncResult = handleSyncCommand(full, { cwd: cfg.cwd, env: cfg.env });\r\n\r\n  if (syncResult !== null) {\r\n    const stdout = Buffer.from(syncResult);\r\n    const stderr = Buffer.from(\"\");\r\n    return {\r\n      stdout,\r\n      stderr,\r\n      status: 0,\r\n      signal: null,\r\n      pid: MOCK_PID.BASE + Math.floor(Math.random() * MOCK_PID.RANGE),\r\n      output: [null, stdout, stderr],\r\n    };\r\n  }\r\n\r\n  // true blocking path via Atomics.wait()\r\n  if (!_syncChannel) {\r\n    throw new Error(\r\n      \"[Nodepod] spawnSync requires SyncChannel (worker mode with SharedArrayBuffer). \" +\r\n      \"Ensure Nodepod is running in worker mode with COOP/COEP headers.\",\r\n    );\r\n  }\r\n\r\n  const slot = _syncChannel.allocateSlot();\r\n  const cwd = cfg.cwd ?? (globalThis as any).process?.cwd?.() ?? \"/\";\r\n  const env = (cfg.env as Record<string, string>) ?? {};\r\n\r\n  (self as any).postMessage({\r\n    type: \"spawn-sync\",\r\n    requestId: _nextSyncRequestId++,\r\n    command: full.split(/\\s+/)[0],\r\n    args: full.split(/\\s+/).slice(1),\r\n    cwd,\r\n    env,\r\n    syncSlot: slot,\r\n    shellCommand: full,\r\n  });\r\n\r\n  // blocks until main thread spawns child and child completes\r\n  try {\r\n    const { exitCode, stdout: stdoutStr } = _syncChannel.waitForResult(slot, 120_000);\r\n    const stdout = Buffer.from(stdoutStr);\r\n    const stderr = Buffer.from(\"\");\r\n    return {\r\n      stdout,\r\n      stderr,\r\n      status: exitCode,\r\n      signal: null,\r\n      pid: MOCK_PID.BASE + Math.floor(Math.random() * MOCK_PID.RANGE),\r\n      output: [null, stdout, stderr],\r\n    };\r\n  } catch (e: any) {\r\n    const stdout = Buffer.from(e?.stdout ?? \"\");\r\n    const stderr = Buffer.from(e?.message ?? \"\");\r\n    return {\r\n      stdout,\r\n      stderr,\r\n      status: e?.status ?? 1,\r\n      signal: null,\r\n      pid: MOCK_PID.BASE + Math.floor(Math.random() * MOCK_PID.RANGE),\r\n      output: [null, stdout, stderr],\r\n      error: e instanceof Error ? e : new Error(String(e)),\r\n    };\r\n  }\r\n}\r\n\r\nexport function execFileSync(\r\n  file: string,\r\n  args?: string[],\r\n  opts?: RunOptions,\r\n): string | Buffer {\r\n  const cmd = args?.length ? `${file} ${args.join(\" \")}` : file;\r\n  return execSync(cmd, opts);\r\n}\r\n\r\nexport function execFile(\r\n  file: string,\r\n  argsOrOpts?: string[] | RunOptions | RunCallback,\r\n  optsOrCb?: RunOptions | RunCallback,\r\n  cb?: RunCallback,\r\n): ShellProcess {\r\n  let fileArgs: string[] = [];\r\n  let options: RunOptions = {};\r\n  let done: RunCallback | undefined;\r\n\r\n  if (Array.isArray(argsOrOpts)) {\r\n    fileArgs = argsOrOpts;\r\n    if (typeof optsOrCb === \"function\") done = optsOrCb;\r\n    else if (optsOrCb) {\r\n      options = optsOrCb;\r\n      done = cb;\r\n    }\r\n  } else if (typeof argsOrOpts === \"function\") {\r\n    done = argsOrOpts;\r\n  } else if (argsOrOpts) {\r\n    options = argsOrOpts;\r\n    done = optsOrCb as RunCallback;\r\n  }\r\n\r\n  const cmd = fileArgs.length ? `${file} ${fileArgs.join(\" \")}` : file;\r\n  return exec(cmd, options, done);\r\n}\r\n\r\nexport function fork(\r\n  modulePath: string,\r\n  argsOrOpts?: string[] | Record<string, unknown>,\r\n  opts?: Record<string, unknown>,\r\n): ShellProcess {\r\n  let args: string[] = [];\r\n  let cfg: Record<string, unknown> = {};\r\n  if (Array.isArray(argsOrOpts)) {\r\n    args = argsOrOpts;\r\n    cfg = opts ?? {};\r\n  } else if (argsOrOpts) cfg = argsOrOpts;\r\n\r\n  const cwd = (cfg.cwd as string) || getShellCwd();\r\n  const env = (cfg.env as Record<string, string>) ||\r\n    (_shell?.getEnv() ?? {});\r\n\r\n  const resolved = modulePath.startsWith(\"/\")\r\n    ? modulePath\r\n    : `${cwd}/${modulePath}`.replace(/\\/+/g, \"/\");\r\n\r\n  const child = new ShellProcess();\r\n  child.connected = true;\r\n  child.spawnargs = [\"node\", resolved, ...args];\r\n  child.spawnfile = \"node\";\r\n\r\n  if (!_forkChildFn) {\r\n    setTimeout(() => {\r\n      child.emit(\"error\", new Error(\"[Nodepod] fork requires worker mode. No forkChild callback set.\"));\r\n    }, 0);\r\n    return child;\r\n  }\r\n\r\n  // keep parent alive while forked child is running\r\n  ref();\r\n  const handle = _forkChildFn(resolved, args, {\r\n    cwd,\r\n    env,\r\n    onStdout: (data: string) => {\r\n      child.stdout?.emit(\"data\", data);\r\n      // also route through parent's stdout sink (fork inherits stdio by default)\r\n      const sink = getStdoutSink();\r\n      if (sink) sink(data);\r\n    },\r\n    onStderr: (data: string) => {\r\n      child.stderr?.emit(\"data\", data);\r\n      const sink = getStderrSink();\r\n      if (sink) sink(data);\r\n    },\r\n    onIPC: (data: unknown) => {\r\n      child.emit(\"message\", data);\r\n    },\r\n    onExit: (exitCode: number) => {\r\n      unref(); // Child done — release event loop hold\r\n      child.exitCode = exitCode;\r\n      child.connected = false;\r\n      child.emit(\"exit\", exitCode, null);\r\n      child.emit(\"close\", exitCode, null);\r\n    },\r\n  });\r\n\r\n  // parent→child IPC\r\n  child.send = (msg: unknown, _cb?: (e: Error | null) => void): boolean => {\r\n    if (!child.connected) return false;\r\n    handle.sendIPC(msg);\r\n    return true;\r\n  };\r\n\r\n  child.kill = (sig?: string): boolean => {\r\n    child.killed = true;\r\n    child.connected = false;\r\n    handle.disconnect();\r\n    child.emit(\"exit\", null, sig ?? \"SIGTERM\");\r\n    child.emit(\"close\", null, sig ?? \"SIGTERM\");\r\n    return true;\r\n  };\r\n\r\n  child.disconnect = (): void => {\r\n    child.connected = false;\r\n    handle.disconnect();\r\n    child.emit(\"disconnect\");\r\n  };\r\n\r\n  return child;\r\n}\r\n\r\nexport interface ShellProcess extends EventEmitter {\r\n  pid: number;\r\n  connected: boolean;\r\n  killed: boolean;\r\n  exitCode: number | null;\r\n  signalCode: string | null;\r\n  spawnargs: string[];\r\n  spawnfile: string;\r\n  stdin: Writable | null;\r\n  stdout: Readable | null;\r\n  stderr: Readable | null;\r\n  kill(sig?: string): boolean;\r\n  disconnect(): void;\r\n  send(msg: unknown, cb?: (e: Error | null) => void): boolean;\r\n  ref(): this;\r\n  unref(): this;\r\n}\r\n\r\ninterface ShellProcessConstructor {\r\n  new (): ShellProcess;\r\n  (this: any): void;\r\n  prototype: any;\r\n}\r\n\r\nexport const ShellProcess = function ShellProcess(this: any) {\r\n  if (!this) return;\r\n  EventEmitter.call(this);\r\n  this.pid = MOCK_PID.BASE + Math.floor(Math.random() * MOCK_PID.RANGE);\r\n  this.connected = false;\r\n  this.killed = false;\r\n  this.exitCode = null;\r\n  this.signalCode = null;\r\n  this.spawnargs = [];\r\n  this.spawnfile = \"\";\r\n  this.stdin = new Writable();\r\n  this.stdout = new Readable();\r\n  this.stderr = new Readable();\r\n} as unknown as ShellProcessConstructor;\r\n\r\nObject.setPrototypeOf(ShellProcess.prototype, EventEmitter.prototype);\r\n\r\nShellProcess.prototype.kill = function kill(this: any, sig?: string): boolean {\r\n  this.killed = true;\r\n  this.emit(\"exit\", null, sig ?? \"SIGTERM\");\r\n  return true;\r\n};\r\n\r\nShellProcess.prototype.disconnect = function disconnect(this: any): void {\r\n  this.connected = false;\r\n};\r\n\r\nShellProcess.prototype.send = function send(this: any, msg: unknown, cb?: (e: Error | null) => void): boolean {\r\n  if (cb) cb(new Error(\"IPC unavailable\"));\r\n  return false;\r\n};\r\n\r\nShellProcess.prototype.ref = function ref(this: any): any {\r\n  return this;\r\n};\r\n\r\nShellProcess.prototype.unref = function unref(this: any): any {\r\n  return this;\r\n};\r\n\r\nexport default {\r\n  exec,\r\n  execSync,\r\n  execFile,\r\n  execFileSync,\r\n  spawn,\r\n  spawnSync,\r\n  fork,\r\n  ShellProcess,\r\n  initShellExec,\r\n  shellExec,\r\n  setStreamingCallbacks,\r\n  clearStreamingCallbacks,\r\n  sendStdin,\r\n  setSyncChannel,\r\n  setSpawnChildCallback,\r\n  setForkChildCallback,\r\n  setIPCSend,\r\n  setIPCReceiveHandler,\r\n  handleIPCFromParent,\r\n  executeNodeBinary,\r\n};\r\n"],"names":["name","globToRegex","pathModule.normalize","pathModule.basename","pathModule.dirname","LS_BLOCK_SIZE","out","i","j","YES_REPEAT_COUNT","pathModule.extname","A_RESET","A_BOLD","A_CYAN","VERSIONS","NPM_REGISTRY_URL_SLASH","A_DIM","A_GREEN","x","y","createHash","proxiedFetch","pathModule.resolve","pathModule.relative","repo","key","config","lines","r","branch","getActiveContext","DEFAULT_ENV","ScriptEngine","utilFormat","scripts","getAllServers","ctx","ref","unref","getRefCount","addDrainListener","TIMEOUTS","closeAllServers","resetRefCount","resetActiveInterfaceCount","Buffer","MOCK_PID","ShellProcess","EventEmitter","Writable","Readable"],"mappings":"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"}