@scelar/nodepod 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (134) hide show
  1. package/LICENSE +43 -0
  2. package/README.md +240 -0
  3. package/dist/child_process-BJOMsZje.js +8233 -0
  4. package/dist/child_process-BJOMsZje.js.map +1 -0
  5. package/dist/child_process-Cj8vOcuc.cjs +7434 -0
  6. package/dist/child_process-Cj8vOcuc.cjs.map +1 -0
  7. package/dist/index-Cb1Cgdnd.js +35308 -0
  8. package/dist/index-Cb1Cgdnd.js.map +1 -0
  9. package/dist/index-DsMGS-xc.cjs +37195 -0
  10. package/dist/index-DsMGS-xc.cjs.map +1 -0
  11. package/dist/index.cjs +65 -0
  12. package/dist/index.cjs.map +1 -0
  13. package/dist/index.mjs +59 -0
  14. package/dist/index.mjs.map +1 -0
  15. package/package.json +95 -0
  16. package/src/__tests__/smoke.test.ts +11 -0
  17. package/src/constants/cdn-urls.ts +18 -0
  18. package/src/constants/config.ts +236 -0
  19. package/src/cross-origin.ts +26 -0
  20. package/src/engine-factory.ts +176 -0
  21. package/src/engine-types.ts +56 -0
  22. package/src/helpers/byte-encoding.ts +39 -0
  23. package/src/helpers/digest.ts +9 -0
  24. package/src/helpers/event-loop.ts +96 -0
  25. package/src/helpers/wasm-cache.ts +133 -0
  26. package/src/iframe-sandbox.ts +141 -0
  27. package/src/index.ts +192 -0
  28. package/src/isolation-helpers.ts +148 -0
  29. package/src/memory-volume.ts +941 -0
  30. package/src/module-transformer.ts +368 -0
  31. package/src/packages/archive-extractor.ts +248 -0
  32. package/src/packages/browser-bundler.ts +284 -0
  33. package/src/packages/installer.ts +396 -0
  34. package/src/packages/registry-client.ts +131 -0
  35. package/src/packages/version-resolver.ts +411 -0
  36. package/src/polyfills/assert.ts +384 -0
  37. package/src/polyfills/async_hooks.ts +144 -0
  38. package/src/polyfills/buffer.ts +628 -0
  39. package/src/polyfills/child_process.ts +2288 -0
  40. package/src/polyfills/chokidar.ts +336 -0
  41. package/src/polyfills/cluster.ts +106 -0
  42. package/src/polyfills/console.ts +136 -0
  43. package/src/polyfills/constants.ts +123 -0
  44. package/src/polyfills/crypto.ts +885 -0
  45. package/src/polyfills/dgram.ts +87 -0
  46. package/src/polyfills/diagnostics_channel.ts +76 -0
  47. package/src/polyfills/dns.ts +134 -0
  48. package/src/polyfills/domain.ts +68 -0
  49. package/src/polyfills/esbuild.ts +854 -0
  50. package/src/polyfills/events.ts +276 -0
  51. package/src/polyfills/fs.ts +2888 -0
  52. package/src/polyfills/fsevents.ts +79 -0
  53. package/src/polyfills/http.ts +1449 -0
  54. package/src/polyfills/http2.ts +199 -0
  55. package/src/polyfills/https.ts +76 -0
  56. package/src/polyfills/inspector.ts +62 -0
  57. package/src/polyfills/lightningcss.ts +105 -0
  58. package/src/polyfills/module.ts +191 -0
  59. package/src/polyfills/net.ts +353 -0
  60. package/src/polyfills/os.ts +238 -0
  61. package/src/polyfills/path.ts +206 -0
  62. package/src/polyfills/perf_hooks.ts +102 -0
  63. package/src/polyfills/process.ts +690 -0
  64. package/src/polyfills/punycode.ts +159 -0
  65. package/src/polyfills/querystring.ts +93 -0
  66. package/src/polyfills/quic.ts +118 -0
  67. package/src/polyfills/readdirp.ts +229 -0
  68. package/src/polyfills/readline.ts +692 -0
  69. package/src/polyfills/repl.ts +134 -0
  70. package/src/polyfills/rollup.ts +119 -0
  71. package/src/polyfills/sea.ts +33 -0
  72. package/src/polyfills/sqlite.ts +78 -0
  73. package/src/polyfills/stream.ts +1620 -0
  74. package/src/polyfills/string_decoder.ts +25 -0
  75. package/src/polyfills/tailwindcss-oxide.ts +309 -0
  76. package/src/polyfills/test.ts +197 -0
  77. package/src/polyfills/timers.ts +32 -0
  78. package/src/polyfills/tls.ts +105 -0
  79. package/src/polyfills/trace_events.ts +50 -0
  80. package/src/polyfills/tty.ts +71 -0
  81. package/src/polyfills/url.ts +174 -0
  82. package/src/polyfills/util.ts +559 -0
  83. package/src/polyfills/v8.ts +126 -0
  84. package/src/polyfills/vm.ts +132 -0
  85. package/src/polyfills/volume-registry.ts +15 -0
  86. package/src/polyfills/wasi.ts +44 -0
  87. package/src/polyfills/worker_threads.ts +326 -0
  88. package/src/polyfills/ws.ts +595 -0
  89. package/src/polyfills/zlib.ts +881 -0
  90. package/src/request-proxy.ts +716 -0
  91. package/src/script-engine.ts +3375 -0
  92. package/src/sdk/nodepod-fs.ts +93 -0
  93. package/src/sdk/nodepod-process.ts +86 -0
  94. package/src/sdk/nodepod-terminal.ts +350 -0
  95. package/src/sdk/nodepod.ts +509 -0
  96. package/src/sdk/types.ts +70 -0
  97. package/src/shell/commands/bun.ts +121 -0
  98. package/src/shell/commands/directory.ts +297 -0
  99. package/src/shell/commands/file-ops.ts +525 -0
  100. package/src/shell/commands/git.ts +2142 -0
  101. package/src/shell/commands/node.ts +80 -0
  102. package/src/shell/commands/npm.ts +198 -0
  103. package/src/shell/commands/pm-types.ts +45 -0
  104. package/src/shell/commands/pnpm.ts +82 -0
  105. package/src/shell/commands/search.ts +264 -0
  106. package/src/shell/commands/shell-env.ts +352 -0
  107. package/src/shell/commands/text-processing.ts +1152 -0
  108. package/src/shell/commands/yarn.ts +84 -0
  109. package/src/shell/shell-builtins.ts +19 -0
  110. package/src/shell/shell-helpers.ts +250 -0
  111. package/src/shell/shell-interpreter.ts +514 -0
  112. package/src/shell/shell-parser.ts +429 -0
  113. package/src/shell/shell-types.ts +85 -0
  114. package/src/syntax-transforms.ts +561 -0
  115. package/src/threading/engine-worker.ts +64 -0
  116. package/src/threading/inline-worker.ts +372 -0
  117. package/src/threading/offload-types.ts +112 -0
  118. package/src/threading/offload-worker.ts +383 -0
  119. package/src/threading/offload.ts +271 -0
  120. package/src/threading/process-context.ts +92 -0
  121. package/src/threading/process-handle.ts +275 -0
  122. package/src/threading/process-manager.ts +956 -0
  123. package/src/threading/process-worker-entry.ts +854 -0
  124. package/src/threading/shared-vfs.ts +352 -0
  125. package/src/threading/sync-channel.ts +135 -0
  126. package/src/threading/task-queue.ts +177 -0
  127. package/src/threading/vfs-bridge.ts +231 -0
  128. package/src/threading/worker-pool.ts +233 -0
  129. package/src/threading/worker-protocol.ts +358 -0
  130. package/src/threading/worker-vfs.ts +218 -0
  131. package/src/types/externals.d.ts +38 -0
  132. package/src/types/fs-streams.ts +142 -0
  133. package/src/types/manifest.ts +17 -0
  134. package/src/worker-sandbox.ts +90 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"child_process-Cj8vOcuc.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/cross-origin.ts","../src/shell/commands/git.ts","../src/polyfills/child_process.ts"],"sourcesContent":["// Tokenizer + recursive-descent parser.\n// Converts a shell command string into an AST (ListNode).\n\nimport type {\n Token,\n TokenType,\n ListNode,\n ListEntry,\n ListOperator,\n PipelineNode,\n CommandNode,\n RedirectNode,\n} from \"./shell-types\";\nimport type { MemoryVolume } from \"../memory-volume\";\n\n/* ------------------------------------------------------------------ */\n/* Variable & substitution expansion */\n/* ------------------------------------------------------------------ */\n\n// Expand $VAR, ${VAR}, $?, $$, $0, and tilde.\n// Single-quote handling is the caller's job.\nexport function expandVariables(\n raw: string,\n env: Record<string, string>,\n lastExit: number,\n): string {\n let result = \"\";\n let i = 0;\n\n if (raw === \"~\" || raw.startsWith(\"~/\")) {\n const home = env.HOME || \"/home/user\";\n return home + raw.slice(1);\n }\n\n while (i < raw.length) {\n if (raw[i] === \"\\\\\") {\n i++;\n if (i < raw.length) result += raw[i++];\n continue;\n }\n\n if (raw[i] === \"$\") {\n i++;\n if (i >= raw.length) {\n result += \"$\";\n break;\n }\n\n if (raw[i] === \"?\") {\n result += String(lastExit);\n i++;\n continue;\n }\n if (raw[i] === \"$\") {\n result += \"1\"; // stub PID\n i++;\n continue;\n }\n if (raw[i] === \"0\") {\n result += \"nodepod\";\n i++;\n continue;\n }\n if (raw[i] === \"#\") {\n result += \"0\"; // $# stub\n i++;\n continue;\n }\n\n if (raw[i] === \"{\") {\n i++;\n let name = \"\";\n while (i < raw.length && raw[i] !== \"}\" && raw[i] !== \":\" && raw[i] !== \"-\" && raw[i] !== \"=\") {\n name += raw[i++];\n }\n let defaultVal = \"\";\n let useDefault = false;\n if (i < raw.length && (raw[i] === \":\" || raw[i] === \"-\")) {\n useDefault = true;\n if (raw[i] === \":\") i++;\n if (i < raw.length && (raw[i] === \"-\" || raw[i] === \"=\")) i++;\n while (i < raw.length && raw[i] !== \"}\") {\n defaultVal += raw[i++];\n }\n }\n if (i < raw.length && raw[i] === \"}\") i++;\n\n const val = env[name];\n if (val !== undefined && val !== \"\") {\n result += val;\n } else if (useDefault) {\n result += defaultVal;\n }\n continue;\n }\n\n let name = \"\";\n while (i < raw.length && /[a-zA-Z0-9_]/.test(raw[i])) {\n name += raw[i++];\n }\n if (name) {\n result += env[name] ?? \"\";\n } else {\n result += \"$\";\n }\n continue;\n }\n\n result += raw[i++];\n }\n\n return result;\n}\n\n/* ------------------------------------------------------------------ */\n/* Glob expansion */\n/* ------------------------------------------------------------------ */\n\nexport function expandGlob(\n pattern: string,\n cwd: string,\n volume: MemoryVolume,\n): string[] {\n if (!pattern.includes(\"*\") && !pattern.includes(\"?\")) return [pattern];\n\n const lastSlash = pattern.lastIndexOf(\"/\");\n let dir: string;\n let filePattern: string;\n\n if (lastSlash === -1) {\n dir = cwd;\n filePattern = pattern;\n } else {\n dir = pattern.slice(0, lastSlash) || \"/\";\n if (!dir.startsWith(\"/\")) dir = `${cwd}/${dir}`.replace(/\\/+/g, \"/\");\n filePattern = pattern.slice(lastSlash + 1);\n }\n\n try {\n const entries = volume.readdirSync(dir);\n const regex = globToRegex(filePattern);\n const matches = entries.filter((e) => regex.test(e));\n\n if (matches.length === 0) return [pattern];\n\n return matches.sort().map((m) =>\n lastSlash === -1 ? m : `${dir}/${m}`.replace(/\\/+/g, \"/\"),\n );\n } catch {\n return [pattern];\n }\n}\n\nfunction globToRegex(pattern: string): RegExp {\n let regex = \"^\";\n for (const ch of pattern) {\n if (ch === \"*\") regex += \".*\";\n else if (ch === \"?\") regex += \".\";\n else if (\".+^${}()|[]\\\\\".includes(ch)) regex += \"\\\\\" + ch;\n else regex += ch;\n }\n regex += \"$\";\n return new RegExp(regex);\n}\n\n/* ------------------------------------------------------------------ */\n/* Tokenizer */\n/* ------------------------------------------------------------------ */\n\nexport function tokenize(\n input: string,\n env: Record<string, string>,\n lastExit: number,\n): Token[] {\n const tokens: Token[] = [];\n let i = 0;\n\n while (i < input.length) {\n if (input[i] === \" \" || input[i] === \"\\t\") {\n i++;\n continue;\n }\n\n if (input[i] === \"\\n\") {\n tokens.push({ type: \"newline\", value: \"\\n\" });\n i++;\n continue;\n }\n\n if (input[i] === \"#\") {\n while (i < input.length && input[i] !== \"\\n\") i++;\n continue;\n }\n\n if (input.slice(i, i + 4) === \"2>&1\") {\n tokens.push({ type: \"redirect-2to1\", value: \"2>&1\" });\n i += 4;\n continue;\n }\n\n if (input[i] === \">\" && input[i + 1] === \">\") {\n tokens.push({ type: \"redirect-app\", value: \">>\" });\n i += 2;\n continue;\n }\n\n if (input[i] === \">\") {\n tokens.push({ type: \"redirect-out\", value: \">\" });\n i++;\n continue;\n }\n\n if (input[i] === \"<\") {\n tokens.push({ type: \"redirect-in\", value: \"<\" });\n i++;\n continue;\n }\n\n if (input[i] === \"&\" && input[i + 1] === \"&\") {\n tokens.push({ type: \"and\", value: \"&&\" });\n i += 2;\n continue;\n }\n\n if (input[i] === \"|\" && input[i + 1] === \"|\") {\n tokens.push({ type: \"or\", value: \"||\" });\n i += 2;\n continue;\n }\n\n if (input[i] === \"|\") {\n tokens.push({ type: \"pipe\", value: \"|\" });\n i++;\n continue;\n }\n\n if (input[i] === \";\") {\n tokens.push({ type: \"semi\", value: \";\" });\n i++;\n continue;\n }\n\n let word = \"\";\n while (i < input.length) {\n const ch = input[i];\n\n if (ch === \" \" || ch === \"\\t\" || ch === \"\\n\") break;\n if (ch === \"|\" || ch === \"&\" || ch === \";\" || ch === \">\" || ch === \"<\") break;\n if (ch === \"2\" && input.slice(i, i + 4) === \"2>&1\") break;\n\n if (ch === \"\\\\\") {\n i++;\n if (i < input.length) word += input[i++];\n continue;\n }\n\n // single quotes: no expansion\n if (ch === \"'\") {\n i++;\n while (i < input.length && input[i] !== \"'\") {\n word += input[i++];\n }\n if (i < input.length) i++;\n continue;\n }\n\n // double quotes: expand variables\n if (ch === '\"') {\n i++;\n let dqContent = \"\";\n while (i < input.length && input[i] !== '\"') {\n if (input[i] === \"\\\\\" && i + 1 < input.length) {\n const next = input[i + 1];\n if (next === '\"' || next === \"\\\\\" || next === \"$\" || next === \"`\") {\n dqContent += next;\n i += 2;\n continue;\n }\n }\n dqContent += input[i++];\n }\n if (i < input.length) i++;\n word += expandVariables(dqContent, env, lastExit);\n continue;\n }\n\n word += ch;\n i++;\n }\n\n if (word.length > 0) {\n const expanded = expandVariables(word, env, lastExit);\n tokens.push({ type: \"word\", value: expanded });\n }\n }\n\n tokens.push({ type: \"eof\", value: \"\" });\n return tokens;\n}\n\n/* ------------------------------------------------------------------ */\n/* Recursive-descent parser */\n/* ------------------------------------------------------------------ */\n\nclass Parser {\n private tokens: Token[];\n private pos = 0;\n\n constructor(tokens: Token[]) {\n this.tokens = tokens;\n }\n\n private peek(): Token {\n return this.tokens[this.pos] ?? { type: \"eof\", value: \"\" };\n }\n\n private advance(): Token {\n return this.tokens[this.pos++] ?? { type: \"eof\", value: \"\" };\n }\n\n private skipNewlines(): void {\n while (this.peek().type === \"newline\") this.advance();\n }\n\n parseList(): ListNode {\n this.skipNewlines();\n const entries: ListEntry[] = [];\n\n while (this.peek().type !== \"eof\") {\n this.skipNewlines();\n if (this.peek().type === \"eof\") break;\n\n const pipeline = this.parsePipeline();\n const op = this.peek();\n\n if (op.type === \"and\" || op.type === \"or\" || op.type === \"semi\") {\n this.advance();\n const operator: ListOperator =\n op.type === \"and\" ? \"&&\" : op.type === \"or\" ? \"||\" : \";\";\n entries.push({ pipeline, next: operator });\n } else {\n entries.push({ pipeline });\n break;\n }\n }\n\n return { kind: \"list\", entries };\n }\n\n private parsePipeline(): PipelineNode {\n const commands: CommandNode[] = [];\n commands.push(this.parseCommand());\n\n while (this.peek().type === \"pipe\") {\n this.advance();\n commands.push(this.parseCommand());\n }\n\n return { kind: \"pipeline\", commands };\n }\n\n private parseCommand(): CommandNode {\n const args: string[] = [];\n const redirects: RedirectNode[] = [];\n const assignments: Record<string, string> = {};\n\n // leading KEY=value assignments (only before any regular args)\n while (this.peek().type === \"word\") {\n const val = this.peek().value;\n const eqIdx = val.indexOf(\"=\");\n if (eqIdx > 0 && args.length === 0 && /^[a-zA-Z_]/.test(val)) {\n this.advance();\n assignments[val.slice(0, eqIdx)] = val.slice(eqIdx + 1);\n } else {\n break;\n }\n }\n\n while (true) {\n const tok = this.peek();\n\n if (tok.type === \"word\") {\n this.advance();\n args.push(tok.value);\n continue;\n }\n\n if (tok.type === \"redirect-out\" || tok.type === \"redirect-app\" || tok.type === \"redirect-in\") {\n this.advance();\n const target = this.peek();\n if (target.type === \"word\") {\n this.advance();\n const rtype =\n tok.type === \"redirect-out\" ? \"write\" as const :\n tok.type === \"redirect-app\" ? \"append\" as const :\n \"read\" as const;\n redirects.push({ type: rtype, target: target.value });\n }\n continue;\n }\n\n if (tok.type === \"redirect-2to1\") {\n this.advance();\n redirects.push({ type: \"stderr-to-stdout\", target: \"\" });\n continue;\n }\n\n break;\n }\n\n return { kind: \"command\", args, redirects, assignments };\n }\n}\n\n/* ------------------------------------------------------------------ */\n/* Public API */\n/* ------------------------------------------------------------------ */\n\n// Glob expansion happens in the interpreter (needs volume access),\n// but variable expansion and quoting are done here at tokenize time.\nexport function parse(\n input: string,\n env: Record<string, string>,\n lastExit: number = 0,\n): ListNode {\n const tokens = tokenize(input, env, lastExit);\n const parser = new Parser(tokens);\n return parser.parseList();\n}\n","// Shared utilities for shell builtins: colors, arg parsing, path helpers, result builders.\n\nimport type { ShellResult } from \"./shell-types\";\nimport * as pathModule from \"../polyfills/path\";\n\n/* ------------------------------------------------------------------ */\n/* ANSI color helpers */\n/* ------------------------------------------------------------------ */\n\nexport const RESET = \"\\x1b[0m\";\nexport const DIM = \"\\x1b[2m\";\nexport const GREEN = \"\\x1b[32m\";\nexport const MAGENTA = \"\\x1b[35m\";\nexport const CYAN = \"\\x1b[36m\";\nexport const BOLD_BLUE = \"\\x1b[1;34m\";\nexport const BOLD_RED = \"\\x1b[1;31m\";\n\n/* ------------------------------------------------------------------ */\n/* ShellResult builders */\n/* ------------------------------------------------------------------ */\n\nexport const ok = (stdout = \"\"): ShellResult => ({\n stdout,\n stderr: \"\",\n exitCode: 0,\n});\n\nexport const fail = (stderr: string, code = 1): ShellResult => ({\n stdout: \"\",\n stderr,\n exitCode: code,\n});\n\nexport const EXIT_OK: ShellResult = { stdout: \"\", stderr: \"\", exitCode: 0 };\nexport const EXIT_FAIL: ShellResult = { stdout: \"\", stderr: \"\", exitCode: 1 };\n\n/* ------------------------------------------------------------------ */\n/* Date / time constants */\n/* ------------------------------------------------------------------ */\n\nexport const MONTHS_SHORT = [\n \"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\",\n \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\",\n] as const;\n\nexport const MONTHS_LONG = [\n \"January\", \"February\", \"March\", \"April\", \"May\", \"June\",\n \"July\", \"August\", \"September\", \"October\", \"November\", \"December\",\n] as const;\n\nexport const DAYS_SHORT = [\n \"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\",\n] as const;\n\nexport const DAYS_LONG = [\n \"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\",\n \"Thursday\", \"Friday\", \"Saturday\",\n] as const;\n\n/* ------------------------------------------------------------------ */\n/* Path resolution */\n/* ------------------------------------------------------------------ */\n\nexport function resolvePath(p: string, cwd: string): string {\n if (p.startsWith(\"/\")) return pathModule.normalize(p);\n return pathModule.normalize(`${cwd}/${p}`);\n}\n\nexport { pathModule };\n\n/* ------------------------------------------------------------------ */\n/* Argument parsing */\n/* ------------------------------------------------------------------ */\n\nexport function parseArgs(\n args: string[],\n knownFlags: string[],\n knownOpts: string[] = [],\n): { flags: Set<string>; opts: Record<string, string>; positional: string[] } {\n const flags = new Set<string>();\n const opts: Record<string, string> = {};\n const positional: string[] = [];\n for (let i = 0; i < args.length; i++) {\n const a = args[i];\n if (a === \"--\") {\n positional.push(...args.slice(i + 1));\n break;\n }\n if (a.startsWith(\"--\")) {\n const eq = a.indexOf(\"=\");\n if (eq > 0) {\n opts[a.slice(2, eq)] = a.slice(eq + 1);\n } else {\n flags.add(a.slice(2));\n }\n } else if (a.startsWith(\"-\") && a.length > 1 && !/^-\\d/.test(a)) {\n for (let j = 1; j < a.length; j++) {\n const ch = a[j];\n if (knownOpts.includes(ch) && j + 1 < a.length) {\n opts[ch] = a.slice(j + 1);\n break;\n } else if (knownOpts.includes(ch) && i + 1 < args.length) {\n opts[ch] = args[++i];\n break;\n } else if (knownFlags.includes(ch)) {\n flags.add(ch);\n }\n }\n } else {\n positional.push(a);\n }\n }\n return { flags, opts, positional };\n}\n\n/* ------------------------------------------------------------------ */\n/* String processing */\n/* ------------------------------------------------------------------ */\n\n// Expand POSIX character classes like [:upper:], [:lower:], etc. for `tr`\nexport function expandCharClass(s: string): string {\n return s\n .replace(/\\[:upper:\\]/g, \"ABCDEFGHIJKLMNOPQRSTUVWXYZ\")\n .replace(/\\[:lower:\\]/g, \"abcdefghijklmnopqrstuvwxyz\")\n .replace(\n /\\[:alpha:\\]/g,\n \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz\",\n )\n .replace(/\\[:digit:\\]/g, \"0123456789\")\n .replace(\n /\\[:alnum:\\]/g,\n \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\",\n )\n .replace(/\\[:space:\\]/g, \" \\t\\n\\r\\x0b\\x0c\")\n .replace(/\\[:blank:\\]/g, \" \\t\")\n .replace(/\\[:punct:\\]/g, \"!\\\"#$%&'()*+,-./:;<=>?@[\\\\]^_`{|}~\")\n .replace(\n /\\[:print:\\]/g,\n (() => {\n let r = \"\";\n for (let i = 32; i < 127; i++) r += String.fromCharCode(i);\n return r;\n })(),\n )\n .replace(\n /\\[:graph:\\]/g,\n (() => {\n let r = \"\";\n for (let i = 33; i < 127; i++) r += String.fromCharCode(i);\n return r;\n })(),\n )\n .replace(\n /\\[:cntrl:\\]/g,\n (() => {\n let r = \"\";\n for (let i = 0; i < 32; i++) r += String.fromCharCode(i);\n r += String.fromCharCode(127);\n return r;\n })(),\n );\n}\n\nexport function processEscapes(s: string): string {\n let out = \"\";\n for (let i = 0; i < s.length; i++) {\n if (s[i] === \"\\\\\" && i + 1 < s.length) {\n const c = s[i + 1];\n if (c === \"n\") {\n out += \"\\n\";\n i++;\n continue;\n }\n if (c === \"t\") {\n out += \"\\t\";\n i++;\n continue;\n }\n if (c === \"r\") {\n out += \"\\r\";\n i++;\n continue;\n }\n if (c === \"a\") {\n out += \"\\x07\";\n i++;\n continue;\n }\n if (c === \"b\") {\n out += \"\\b\";\n i++;\n continue;\n }\n if (c === \"f\") {\n out += \"\\f\";\n i++;\n continue;\n }\n if (c === \"v\") {\n out += \"\\x0b\";\n i++;\n continue;\n }\n if (c === \"\\\\\") {\n out += \"\\\\\";\n i++;\n continue;\n }\n if (c === \"0\") {\n let oct = \"\";\n let j = i + 2;\n while (j < s.length && j < i + 5 && s[j] >= \"0\" && s[j] <= \"7\")\n oct += s[j++];\n out += String.fromCharCode(parseInt(oct || \"0\", 8));\n i = j - 1;\n continue;\n }\n if (c === \"x\") {\n const hex = s.slice(i + 2, i + 4);\n if (/^[0-9a-fA-F]{1,2}$/.test(hex)) {\n out += String.fromCharCode(parseInt(hex, 16));\n i += 1 + hex.length;\n continue;\n }\n }\n out += s[i];\n } else {\n out += s[i];\n }\n }\n return out;\n}\n\nexport function humanSize(bytes: number): string {\n if (bytes < 1024) return String(bytes);\n const units = [\"K\", \"M\", \"G\", \"T\"];\n let size = bytes;\n for (const u of units) {\n size /= 1024;\n if (size < 1024 || u === \"T\") return size.toFixed(size < 10 ? 1 : 0) + u;\n }\n return String(bytes);\n}\n\nexport function globToRegex(pattern: string): string {\n return pattern\n .replace(/[.+^${}()|[\\]\\\\]/g, \"\\\\$&\")\n .replace(/\\*/g, \".*\")\n .replace(/\\?/g, \".\");\n}\n","import type { BuiltinFn, ShellContext } from \"../shell-types\";\nimport {\n ok,\n fail,\n resolvePath,\n parseArgs,\n pathModule,\n} from \"../shell-helpers\";\n\n/* ------------------------------------------------------------------ */\n/* Helpers */\n/* ------------------------------------------------------------------ */\n\nfunction formatCat(\n content: string,\n numberAll: boolean,\n numberNonBlank: boolean,\n squeeze: boolean,\n showEnds: boolean,\n showTabs: boolean,\n): string {\n let lines = content.split(\"\\n\");\n if (squeeze) {\n const squeezed: string[] = [];\n let prevBlank = false;\n for (const line of lines) {\n const blank = line.length === 0;\n if (blank && prevBlank) continue;\n squeezed.push(line);\n prevBlank = blank;\n }\n lines = squeezed;\n }\n let lineNum = 1;\n const result = lines.map((line, idx) => {\n let l = line;\n if (showTabs) l = l.replace(/\\t/g, \"^I\");\n if (showEnds && idx < lines.length - 1) l += \"$\";\n if (numberNonBlank) {\n if (line.length > 0) l = `${String(lineNum++).padStart(6)}\\t${l}`;\n } else if (numberAll) {\n l = `${String(lineNum++).padStart(6)}\\t${l}`;\n }\n return l;\n });\n return result.join(\"\\n\");\n}\n\nfunction copyTree(ctx: ShellContext, src: string, dst: string): void {\n ctx.volume.mkdirSync(dst, { recursive: true });\n for (const name of ctx.volume.readdirSync(src)) {\n const s = `${src}/${name}`;\n const d = `${dst}/${name}`;\n const st = ctx.volume.statSync(s);\n if (st.isDirectory()) {\n copyTree(ctx, s, d);\n } else {\n ctx.volume.writeFileSync(d, ctx.volume.readFileSync(s));\n }\n }\n}\n\nfunction removeTree(ctx: ShellContext, dir: string): void {\n for (const name of ctx.volume.readdirSync(dir)) {\n const full = `${dir}/${name}`;\n const st = ctx.volume.statSync(full);\n if (st.isDirectory()) removeTree(ctx, full);\n else ctx.volume.unlinkSync(full);\n }\n ctx.volume.rmdirSync(dir);\n}\n\n/* ------------------------------------------------------------------ */\n/* Commands */\n/* ------------------------------------------------------------------ */\n\nconst cat: BuiltinFn = (args, ctx, stdin) => {\n const { flags, positional } = parseArgs(args, [\n \"n\",\n \"b\",\n \"s\",\n \"E\",\n \"T\",\n \"A\",\n \"e\",\n \"t\",\n \"v\",\n ]);\n const numberAll = flags.has(\"n\") || flags.has(\"A\");\n const numberNonBlank = flags.has(\"b\");\n const squeeze = flags.has(\"s\");\n const showEnds = flags.has(\"E\") || flags.has(\"A\") || flags.has(\"e\");\n const showTabs = flags.has(\"T\") || flags.has(\"A\") || flags.has(\"t\");\n\n if (positional.length === 0 && stdin !== undefined) {\n return ok(\n formatCat(stdin, numberAll, numberNonBlank, squeeze, showEnds, showTabs),\n );\n }\n if (positional.length === 0) return fail(\"cat: missing operand\\n\");\n\n let out = \"\";\n for (const file of positional) {\n if (file === \"-\" && stdin !== undefined) {\n out += formatCat(\n stdin,\n numberAll,\n numberNonBlank,\n squeeze,\n showEnds,\n showTabs,\n );\n continue;\n }\n const p = resolvePath(file, ctx.cwd);\n try {\n const content = ctx.volume.readFileSync(p, \"utf8\");\n out += formatCat(\n content,\n numberAll,\n numberNonBlank,\n squeeze,\n showEnds,\n showTabs,\n );\n } catch {\n return fail(`cat: ${file}: No such file or directory\\n`);\n }\n }\n return ok(out);\n};\n\nconst head: BuiltinFn = (args, ctx, stdin) => {\n let n = 10;\n let byteMode = false;\n let bytes = 0;\n const files: string[] = [];\n for (let i = 0; i < args.length; i++) {\n if (args[i] === \"-n\" && i + 1 < args.length) {\n n = parseInt(args[++i], 10) || 10;\n } else if (args[i] === \"-c\" && i + 1 < args.length) {\n bytes = parseInt(args[++i], 10) || 0;\n byteMode = true;\n } else if (args[i].startsWith(\"-\") && /^\\d+$/.test(args[i].slice(1))) {\n n = parseInt(args[i].slice(1), 10);\n } else if (!args[i].startsWith(\"-\")) {\n files.push(args[i]);\n }\n }\n\n const doHead = (content: string) => {\n if (byteMode) return content.slice(0, bytes);\n return content.split(\"\\n\").slice(0, n).join(\"\\n\") + \"\\n\";\n };\n\n if (files.length === 0 && stdin !== undefined) return ok(doHead(stdin));\n if (files.length === 0) return fail(\"head: missing operand\\n\");\n\n let out = \"\";\n for (const file of files) {\n const p = resolvePath(file, ctx.cwd);\n try {\n const content = ctx.volume.readFileSync(p, \"utf8\");\n if (files.length > 1) out += `==> ${file} <==\\n`;\n out += doHead(content);\n } catch {\n return fail(`head: ${file}: No such file or directory\\n`);\n }\n }\n return ok(out);\n};\n\nconst tail: BuiltinFn = (args, ctx, stdin) => {\n let n = 10;\n let byteMode = false;\n let bytes = 0;\n const files: string[] = [];\n for (let i = 0; i < args.length; i++) {\n if (args[i] === \"-n\" && i + 1 < args.length) {\n n = parseInt(args[++i], 10) || 10;\n } else if (args[i] === \"-c\" && i + 1 < args.length) {\n bytes = parseInt(args[++i], 10) || 0;\n byteMode = true;\n } else if (args[i] === \"-f\") {\n // -f (follow) can't work in VFS, ignore\n } else if (args[i].startsWith(\"-\") && /^\\d+$/.test(args[i].slice(1))) {\n n = parseInt(args[i].slice(1), 10);\n } else if (!args[i].startsWith(\"-\")) {\n files.push(args[i]);\n }\n }\n\n const doTail = (content: string) => {\n if (byteMode) return content.slice(-bytes);\n const lines = content.split(\"\\n\");\n const start = Math.max(\n 0,\n lines.length - n - (content.endsWith(\"\\n\") ? 1 : 0),\n );\n return lines.slice(start).join(\"\\n\");\n };\n\n if (files.length === 0 && stdin !== undefined) return ok(doTail(stdin));\n if (files.length === 0) return fail(\"tail: missing operand\\n\");\n\n let out = \"\";\n for (const file of files) {\n const p = resolvePath(file, ctx.cwd);\n try {\n const content = ctx.volume.readFileSync(p, \"utf8\");\n if (files.length > 1) out += `==> ${file} <==\\n`;\n out += doTail(content);\n } catch {\n return fail(`tail: ${file}: No such file or directory\\n`);\n }\n }\n return ok(out);\n};\n\nconst touch: BuiltinFn = (args, ctx) => {\n if (args.length === 0) return fail(\"touch: missing operand\\n\");\n for (const file of args) {\n if (file.startsWith(\"-\")) continue;\n const p = resolvePath(file, ctx.cwd);\n if (!ctx.volume.existsSync(p)) {\n ctx.volume.writeFileSync(p, \"\");\n }\n }\n return ok();\n};\n\nconst cpCmd: BuiltinFn = (args, ctx) => {\n const { flags, positional } = parseArgs(args, [\"r\", \"R\", \"f\", \"n\", \"v\"]);\n const recursive = flags.has(\"r\") || flags.has(\"R\") || flags.has(\"recursive\");\n const verbose = flags.has(\"v\");\n\n if (positional.length < 2) return fail(\"cp: missing operand\\n\");\n\n const dest = positional[positional.length - 1];\n const sources = positional.slice(0, -1);\n const dstPath = resolvePath(dest, ctx.cwd);\n let out = \"\";\n\n for (const src of sources) {\n const srcPath = resolvePath(src, ctx.cwd);\n try {\n const st = ctx.volume.statSync(srcPath);\n if (st.isDirectory()) {\n if (!recursive)\n return fail(`cp: -r not specified; omitting directory '${src}'\\n`);\n copyTree(ctx, srcPath, dstPath);\n if (verbose) out += `'${src}' -> '${dest}'\\n`;\n } else {\n let destFinal = dstPath;\n if (ctx.volume.existsSync(dstPath)) {\n try {\n if (ctx.volume.statSync(dstPath).isDirectory()) {\n destFinal = `${dstPath}/${pathModule.basename(srcPath)}`;\n }\n } catch {\n /* */\n }\n }\n ctx.volume.writeFileSync(destFinal, ctx.volume.readFileSync(srcPath));\n if (verbose) out += `'${src}' -> '${dest}'\\n`;\n }\n } catch {\n return fail(`cp: cannot stat '${src}': No such file or directory\\n`);\n }\n }\n return ok(out);\n};\n\nconst mv: BuiltinFn = (args, ctx) => {\n const { flags, positional } = parseArgs(args, [\"f\", \"n\", \"v\"]);\n const verbose = flags.has(\"v\");\n if (positional.length < 2) return fail(\"mv: missing operand\\n\");\n\n const dest = positional[positional.length - 1];\n const sources = positional.slice(0, -1);\n const dstPath = resolvePath(dest, ctx.cwd);\n let out = \"\";\n\n for (const src of sources) {\n const srcPath = resolvePath(src, ctx.cwd);\n try {\n let destFinal = dstPath;\n if (ctx.volume.existsSync(dstPath)) {\n try {\n if (ctx.volume.statSync(dstPath).isDirectory()) {\n destFinal = `${dstPath}/${pathModule.basename(srcPath)}`;\n }\n } catch {\n /* */\n }\n }\n ctx.volume.renameSync(srcPath, destFinal);\n if (verbose) out += `renamed '${src}' -> '${dest}'\\n`;\n } catch {\n return fail(\n `mv: cannot move '${src}' to '${dest}': No such file or directory\\n`,\n );\n }\n }\n return ok(out);\n};\n\nconst rm: BuiltinFn = (args, ctx) => {\n const { flags, positional } = parseArgs(args, [\"r\", \"R\", \"f\", \"v\"]);\n const recursive = flags.has(\"r\") || flags.has(\"R\") || flags.has(\"recursive\");\n const force = flags.has(\"f\") || flags.has(\"force\");\n const verbose = flags.has(\"v\");\n\n if (positional.length === 0 && !force) return fail(\"rm: missing operand\\n\");\n\n let out = \"\";\n for (const target of positional) {\n const p = resolvePath(target, ctx.cwd);\n if (!ctx.volume.existsSync(p)) {\n if (force) continue;\n return fail(`rm: cannot remove '${target}': No such file or directory\\n`);\n }\n const st = ctx.volume.statSync(p);\n if (st.isDirectory()) {\n if (!recursive)\n return fail(`rm: cannot remove '${target}': Is a directory\\n`);\n removeTree(ctx, p);\n if (verbose) out += `removed directory '${target}'\\n`;\n } else {\n ctx.volume.unlinkSync(p);\n if (verbose) out += `removed '${target}'\\n`;\n }\n }\n return ok(out);\n};\n\nconst mkdir_cmd: BuiltinFn = (args, ctx) => {\n const { flags, positional } = parseArgs(args, [\"p\", \"v\"]);\n const recursive = flags.has(\"p\");\n const verbose = flags.has(\"v\");\n\n if (positional.length === 0) return fail(\"mkdir: missing operand\\n\");\n\n let out = \"\";\n for (const dir of positional) {\n const p = resolvePath(dir, ctx.cwd);\n try {\n ctx.volume.mkdirSync(p, { recursive });\n if (verbose) out += `mkdir: created directory '${dir}'\\n`;\n } catch (e) {\n if (!recursive)\n return fail(\n `mkdir: cannot create directory '${dir}': ${e instanceof Error ? e.message : String(e)}\\n`,\n );\n }\n }\n return ok(out);\n};\n\nconst rmdir_cmd: BuiltinFn = (args, ctx) => {\n const { flags, positional } = parseArgs(args, [\"p\", \"v\"]);\n const parents = flags.has(\"p\");\n const verbose = flags.has(\"v\");\n\n if (positional.length === 0) return fail(\"rmdir: missing operand\\n\");\n\n let out = \"\";\n for (const dir of positional) {\n let p = resolvePath(dir, ctx.cwd);\n try {\n ctx.volume.rmdirSync(p);\n if (verbose) out += `rmdir: removing directory, '${dir}'\\n`;\n if (parents) {\n while (p !== \"/\") {\n p = pathModule.dirname(p);\n if (p === \"/\") break;\n try {\n ctx.volume.rmdirSync(p);\n } catch {\n break;\n }\n }\n }\n } catch {\n return fail(\n `rmdir: failed to remove '${dir}': Directory not empty or not found\\n`,\n );\n }\n }\n return ok(out);\n};\n\nconst chmod: BuiltinFn = (args, _ctx) => {\n if (args.length < 2) return fail(\"chmod: missing operand\\n\");\n return ok(); // no-op in VFS\n};\n\nconst wc: BuiltinFn = (args, ctx, stdin) => {\n const { flags, positional } = parseArgs(args, [\"l\", \"w\", \"c\", \"m\", \"L\"]);\n const showLines = flags.has(\"l\");\n const showWords = flags.has(\"w\");\n const showBytes = flags.has(\"c\");\n const showChars = flags.has(\"m\");\n const showMaxLine = flags.has(\"L\");\n const showAll =\n !showLines && !showWords && !showBytes && !showChars && !showMaxLine;\n\n const doWc = (content: string, label?: string) => {\n const lines = content.split(\"\\n\").length - (content.endsWith(\"\\n\") ? 1 : 0);\n const words = content.split(/\\s+/).filter(Boolean).length;\n const bytes = new TextEncoder().encode(content).length;\n const chars = [...content].length;\n const maxLine = content\n .split(\"\\n\")\n .reduce((mx, l) => Math.max(mx, l.length), 0);\n\n const parts: string[] = [];\n if (showAll || showLines) parts.push(String(lines).padStart(7));\n if (showAll || showWords) parts.push(String(words).padStart(7));\n if (showChars) parts.push(String(chars).padStart(7));\n if (showAll || showBytes) parts.push(String(bytes).padStart(7));\n if (showMaxLine) parts.push(String(maxLine).padStart(7));\n\n const suffix = label ? ` ${label}` : \"\";\n return parts.join(\"\") + suffix + \"\\n\";\n };\n\n if (positional.length === 0 && stdin !== undefined) return ok(doWc(stdin));\n if (positional.length === 0) return fail(\"wc: missing operand\\n\");\n\n let out = \"\";\n let totalLines = 0,\n totalWords = 0,\n totalBytes = 0;\n for (const file of positional) {\n const p = resolvePath(file, ctx.cwd);\n try {\n const content = ctx.volume.readFileSync(p, \"utf8\");\n out += doWc(content, file);\n totalLines +=\n content.split(\"\\n\").length - (content.endsWith(\"\\n\") ? 1 : 0);\n totalWords += content.split(/\\s+/).filter(Boolean).length;\n totalBytes += new TextEncoder().encode(content).length;\n } catch {\n return fail(`wc: ${file}: No such file or directory\\n`);\n }\n }\n if (positional.length > 1) {\n const parts: string[] = [];\n if (showAll || showLines) parts.push(String(totalLines).padStart(7));\n if (showAll || showWords) parts.push(String(totalWords).padStart(7));\n if (showAll || showBytes) parts.push(String(totalBytes).padStart(7));\n out += parts.join(\"\") + \" total\\n\";\n }\n return ok(out);\n};\n\nconst tee: BuiltinFn = (args, ctx, stdin) => {\n const { flags, positional } = parseArgs(args, [\"a\"]);\n const append = flags.has(\"a\");\n const content = stdin ?? \"\";\n\n for (const file of positional) {\n const p = resolvePath(file, ctx.cwd);\n if (append && ctx.volume.existsSync(p)) {\n const existing = ctx.volume.readFileSync(p, \"utf8\");\n ctx.volume.writeFileSync(p, existing + content);\n } else {\n ctx.volume.writeFileSync(p, content);\n }\n }\n return ok(content);\n};\n\nconst readlink_cmd: BuiltinFn = (args, ctx) => {\n const { positional } = parseArgs(args, [\"f\", \"e\", \"m\", \"n\", \"q\", \"z\"]);\n if (positional.length === 0) return fail(\"readlink: missing operand\\n\");\n const p = resolvePath(positional[0], ctx.cwd);\n return ok(p + \"\\n\");\n};\n\nconst ln_cmd: BuiltinFn = (args, ctx) => {\n const { positional } = parseArgs(args, [\"s\", \"f\"]);\n if (positional.length < 2) return fail(\"ln: missing operand\\n\");\n const src = resolvePath(positional[0], ctx.cwd);\n const dst = resolvePath(positional[1], ctx.cwd);\n try {\n const content = ctx.volume.readFileSync(src);\n ctx.volume.writeFileSync(dst, content);\n return ok();\n } catch {\n return fail(\n `ln: cannot create link '${positional[1]}': source not found\\n`,\n );\n }\n};\n\nconst writeFile: BuiltinFn = (args, ctx) => {\n if (args.length < 2) return fail(\"write: missing arguments\\n\");\n const path = resolvePath(args[0], ctx.cwd);\n ctx.volume.writeFileSync(path, args.slice(1).join(\" \"));\n return ok();\n};\n\n/* ------------------------------------------------------------------ */\n/* Registry */\n/* ------------------------------------------------------------------ */\n\nexport const fileOpsCommands: [string, BuiltinFn][] = [\n [\"cat\", cat],\n [\"head\", head],\n [\"tail\", tail],\n [\"touch\", touch],\n [\"cp\", cpCmd],\n [\"mv\", mv],\n [\"rm\", rm],\n [\"mkdir\", mkdir_cmd],\n [\"rmdir\", rmdir_cmd],\n [\"chmod\", chmod],\n [\"wc\", wc],\n [\"tee\", tee],\n [\"ln\", ln_cmd],\n [\"readlink\", readlink_cmd],\n [\"write\", writeFile],\n];\n","import type { BuiltinFn } from \"../shell-types\";\nimport {\n ok,\n fail,\n resolvePath,\n parseArgs,\n humanSize,\n pathModule,\n MONTHS_SHORT,\n RESET,\n DIM,\n GREEN,\n CYAN,\n BOLD_BLUE,\n} from \"../shell-helpers\";\nimport { LS_BLOCK_SIZE } from \"../../constants/config\";\n\n/* ------------------------------------------------------------------ */\n/* Helpers */\n/* ------------------------------------------------------------------ */\n\nfunction colorName(name: string, isDir: boolean): string {\n if (isDir) return `${BOLD_BLUE}${name}${RESET}`;\n const dot = name.lastIndexOf(\".\");\n const ext = dot >= 0 ? name.slice(dot) : \"\";\n if (ext === \".sh\" || ext === \".bin\") return `${GREEN}${name}${RESET}`;\n return name;\n}\n\nfunction lsDate(d: Date): string {\n const mon = MONTHS_SHORT[d.getMonth()];\n const day = String(d.getDate()).padStart(2, \" \");\n const now = new Date();\n const sixMonthsAgo = new Date(\n now.getFullYear(),\n now.getMonth() - 6,\n now.getDate(),\n );\n if (d < sixMonthsAgo || d > now) {\n return `${mon} ${day} ${d.getFullYear()}`;\n }\n const hh = String(d.getHours()).padStart(2, \"0\");\n const mm = String(d.getMinutes()).padStart(2, \"0\");\n return `${mon} ${day} ${hh}:${mm}`;\n}\n\nfunction hashCode(s: string): number {\n let h = 0;\n for (let i = 0; i < s.length; i++) h = ((h << 5) - h + s.charCodeAt(i)) | 0;\n return h;\n}\n\n/* ------------------------------------------------------------------ */\n/* Commands */\n/* ------------------------------------------------------------------ */\n\nconst ls: BuiltinFn = (args, ctx) => {\n const { flags, positional } = parseArgs(args, [\n \"l\",\n \"a\",\n \"A\",\n \"R\",\n \"1\",\n \"h\",\n \"S\",\n \"t\",\n \"r\",\n \"F\",\n \"d\",\n \"i\",\n ]);\n const showAll = flags.has(\"a\");\n const showAlmostAll = flags.has(\"A\");\n const longForm = flags.has(\"l\");\n const recursive = flags.has(\"R\");\n const onePerLine = flags.has(\"1\") || longForm;\n const humanReadable = flags.has(\"h\");\n const sortBySize = flags.has(\"S\");\n const sortByTime = flags.has(\"t\");\n const reverseSort = flags.has(\"r\");\n const classify = flags.has(\"F\");\n const dirOnly = flags.has(\"d\");\n const showInode = flags.has(\"i\");\n\n const dir =\n positional.length > 0 ? resolvePath(positional[0], ctx.cwd) : ctx.cwd;\n\n const lsDir = (d: string, prefix: string): string => {\n if (dirOnly) {\n const name = positional[0] || d;\n if (longForm) {\n const st = ctx.volume.statSync(d);\n const isDir = st.isDirectory();\n const mode = isDir\n ? `${CYAN}drwxr-xr-x${RESET}`\n : `${DIM}-rw-r--r--${RESET}`;\n return `${mode} 1 user user ${String(0).padStart(6)} ${lsDate(new Date(st.mtimeMs || Date.now()))} ${colorName(name, isDir)}\\n`;\n }\n return colorName(name, true) + \"\\n\";\n }\n\n let entries: string[];\n try {\n entries = ctx.volume.readdirSync(d);\n } catch {\n return `ls: cannot access '${d}': No such file or directory\\n`;\n }\n\n if (showAll) {\n /* all */\n } else if (showAlmostAll)\n entries = entries.filter((e) => e !== \".\" && e !== \"..\");\n else entries = entries.filter((e) => !e.startsWith(\".\"));\n\n interface EntryInfo {\n name: string;\n isDir: boolean;\n size: number;\n mtime: number;\n }\n const infos: EntryInfo[] = entries.map((name) => {\n const full = d === \"/\" ? `/${name}` : `${d}/${name}`;\n try {\n const st = ctx.volume.statSync(full);\n const isDir = st.isDirectory();\n let size = 0;\n if (!isDir) {\n try {\n size = ctx.volume.readFileSync(full).length;\n } catch {\n /* */\n }\n }\n return { name, isDir, size, mtime: st.mtimeMs || 0 };\n } catch {\n return { name, isDir: false, size: 0, mtime: 0 };\n }\n });\n\n if (sortBySize) infos.sort((a, b) => b.size - a.size);\n else if (sortByTime) infos.sort((a, b) => b.mtime - a.mtime);\n else infos.sort((a, b) => a.name.localeCompare(b.name));\n if (reverseSort) infos.reverse();\n\n let out = prefix ? `${BOLD_BLUE}${prefix}${RESET}:\\n` : \"\";\n\n if (longForm) {\n const totalBlocks = infos.reduce(\n (s, e) => s + Math.ceil(e.size / LS_BLOCK_SIZE),\n 0,\n );\n out += `total ${totalBlocks}\\n`;\n for (const info of infos) {\n const mode = info.isDir\n ? `${CYAN}drwxr-xr-x${RESET}`\n : `${DIM}-rw-r--r--${RESET}`;\n const sizeStr = humanReadable\n ? humanSize(info.size).padStart(5)\n : String(info.size).padStart(6);\n const date = lsDate(new Date(info.mtime || Date.now()));\n const colored = colorName(info.name, info.isDir);\n const suffix = classify\n ? info.isDir\n ? \"/\"\n : \"\"\n : info.isDir\n ? \"/\"\n : \"\";\n const inode = showInode\n ? `${String(Math.abs(hashCode(d + \"/\" + info.name))).padStart(7)} `\n : \"\";\n out += `${inode}${mode} 1 user user ${sizeStr} ${date} ${colored}${suffix}\\n`;\n }\n } else if (onePerLine) {\n for (const info of infos) {\n const inode = showInode\n ? `${String(Math.abs(hashCode(d + \"/\" + info.name))).padStart(7)} `\n : \"\";\n const suffix = classify ? (info.isDir ? \"/\" : \"\") : \"\";\n out += `${inode}${colorName(info.name, info.isDir)}${suffix}\\n`;\n }\n } else {\n const colored = infos.map((info) => {\n const suffix = classify ? (info.isDir ? \"/\" : \"\") : \"\";\n return colorName(info.name, info.isDir) + suffix;\n });\n out += colored.join(\" \") + \"\\n\";\n }\n\n if (recursive) {\n for (const info of infos) {\n if (info.isDir) {\n const full = d === \"/\" ? `/${info.name}` : `${d}/${info.name}`;\n out += \"\\n\" + lsDir(full, full);\n }\n }\n }\n\n return out;\n };\n\n try {\n const st = ctx.volume.statSync(dir);\n if (st.isFile() && !dirOnly) {\n if (longForm) {\n let size = 0;\n try {\n size = ctx.volume.readFileSync(dir).length;\n } catch {\n /* */\n }\n const sizeStr = humanReadable\n ? humanSize(size).padStart(5)\n : String(size).padStart(6);\n const date = lsDate(new Date(st.mtimeMs || Date.now()));\n return ok(\n `${DIM}-rw-r--r--${RESET} 1 user user ${sizeStr} ${date} ${positional[0]}\\n`,\n );\n }\n return ok(positional[0] + \"\\n\");\n }\n } catch {\n return fail(\n `ls: cannot access '${positional[0] || dir}': No such file or directory\\n`,\n );\n }\n\n return ok(lsDir(dir, positional.length > 1 ? dir : \"\"));\n};\n\nconst cd: BuiltinFn = (args, ctx) => {\n const target = args[0] || ctx.env.HOME || \"/\";\n let newDir: string;\n\n if (target === \"-\") {\n newDir = ctx.env.OLDPWD || ctx.cwd;\n } else {\n newDir = resolvePath(target, ctx.cwd);\n }\n\n try {\n const st = ctx.volume.statSync(newDir);\n if (!st.isDirectory()) return fail(`cd: not a directory: ${target}\\n`);\n ctx.env.OLDPWD = ctx.cwd;\n ctx.cwd = newDir;\n ctx.env.PWD = newDir;\n // keep process.cwd() in sync\n try {\n (globalThis as any).process?.chdir?.(newDir);\n } catch {}\n return ok();\n } catch {\n return fail(`cd: no such file or directory: ${target}\\n`);\n }\n};\n\nconst pwd: BuiltinFn = (_args, ctx) => {\n return ok(ctx.cwd + \"\\n\");\n};\n\nconst basename_cmd: BuiltinFn = (args) => {\n const { positional } = parseArgs(args, [\"a\", \"z\"], [\"s\"]);\n if (positional.length === 0) return fail(\"basename: missing operand\\n\");\n\n const suffix = positional[1] || \"\";\n let result = pathModule.basename(positional[0]);\n if (suffix && result.endsWith(suffix)) {\n result = result.slice(0, -suffix.length);\n }\n return ok(result + \"\\n\");\n};\n\nconst dirname_cmd: BuiltinFn = (args) => {\n if (args.length === 0) return fail(\"dirname: missing operand\\n\");\n return ok(pathModule.dirname(args[0]) + \"\\n\");\n};\n\nconst realpath_cmd: BuiltinFn = (args, ctx) => {\n if (args.length === 0) return fail(\"realpath: missing operand\\n\");\n const p = resolvePath(args[0], ctx.cwd);\n if (!ctx.volume.existsSync(p))\n return fail(`realpath: ${args[0]}: No such file or directory\\n`);\n return ok(p + \"\\n\");\n};\n\n/* ------------------------------------------------------------------ */\n/* Registry */\n/* ------------------------------------------------------------------ */\n\nexport const directoryCommands: [string, BuiltinFn][] = [\n [\"ls\", ls],\n [\"cd\", cd],\n [\"pwd\", pwd],\n [\"basename\", basename_cmd],\n [\"dirname\", dirname_cmd],\n [\"realpath\", realpath_cmd],\n];\n","import type { BuiltinFn, ShellContext } from \"../shell-types\";\nimport {\n ok,\n fail,\n EXIT_OK,\n EXIT_FAIL,\n resolvePath,\n parseArgs,\n processEscapes,\n expandCharClass,\n RESET,\n GREEN,\n MAGENTA,\n CYAN,\n BOLD_RED,\n} from \"../shell-helpers\";\nimport { YES_REPEAT_COUNT } from \"../../constants/config\";\n\n/* ------------------------------------------------------------------ */\n/* echo / printf */\n/* ------------------------------------------------------------------ */\n\nconst echo: BuiltinFn = (args) => {\n let noNewline = false;\n let enableEscapes = false;\n let start = 0;\n\n while (start < args.length) {\n const a = args[start];\n if (a === \"-n\") {\n noNewline = true;\n start++;\n } else if (a === \"-e\") {\n enableEscapes = true;\n start++;\n } else if (a === \"-E\") {\n enableEscapes = false;\n start++;\n } else if (a === \"-ne\" || a === \"-en\") {\n noNewline = true;\n enableEscapes = true;\n start++;\n } else if (a === \"-nE\" || a === \"-En\") {\n noNewline = true;\n start++;\n } else break;\n }\n\n let output = args.slice(start).join(\" \");\n if (enableEscapes) output = processEscapes(output);\n return ok(output + (noNewline ? \"\" : \"\\n\"));\n};\n\nconst printf_cmd: BuiltinFn = (args) => {\n if (args.length === 0) return ok();\n const fmt = args[0];\n const vals = args.slice(1);\n let out = \"\";\n let vi = 0;\n\n let i = 0;\n while (i < fmt.length) {\n if (fmt[i] === \"\\\\\" && i + 1 < fmt.length) {\n const c = fmt[i + 1];\n if (c === \"n\") { out += \"\\n\"; i += 2; continue; }\n if (c === \"t\") { out += \"\\t\"; i += 2; continue; }\n if (c === \"r\") { out += \"\\r\"; i += 2; continue; }\n if (c === \"a\") { out += \"\\x07\"; i += 2; continue; }\n if (c === \"b\") { out += \"\\b\"; i += 2; continue; }\n if (c === \"f\") { out += \"\\f\"; i += 2; continue; }\n if (c === \"v\") { out += \"\\x0b\"; i += 2; continue; }\n if (c === \"\\\\\") { out += \"\\\\\"; i += 2; continue; }\n if (c === \"0\") {\n let oct = \"\";\n let j = i + 2;\n while (j < fmt.length && j < i + 5 && fmt[j] >= \"0\" && fmt[j] <= \"7\")\n oct += fmt[j++];\n out += String.fromCharCode(parseInt(oct || \"0\", 8));\n i = j;\n continue;\n }\n if (c === \"x\") {\n const hex = fmt.slice(i + 2, i + 4).match(/^[0-9a-fA-F]+/)?.[0] ?? \"\";\n if (hex) {\n out += String.fromCharCode(parseInt(hex, 16));\n i += 2 + hex.length;\n continue;\n }\n }\n out += fmt[i];\n i++;\n continue;\n }\n\n if (fmt[i] === \"%\" && i + 1 < fmt.length) {\n i++;\n let fmtFlags = \"\";\n while (\"-+ 0#\".includes(fmt[i])) fmtFlags += fmt[i++];\n let width = \"\";\n if (fmt[i] === \"*\") { width = vals[vi++] ?? \"0\"; i++; }\n else { while (fmt[i] >= \"0\" && fmt[i] <= \"9\") width += fmt[i++]; }\n let prec = \"\";\n if (fmt[i] === \".\") {\n i++;\n if (fmt[i] === \"*\") { prec = vals[vi++] ?? \"0\"; i++; }\n else { while (fmt[i] >= \"0\" && fmt[i] <= \"9\") prec += fmt[i++]; }\n }\n const spec = fmt[i++];\n const val = vals[vi++] ?? \"\";\n\n if (spec === \"%\") { out += \"%\"; vi--; continue; }\n if (spec === \"s\") {\n let s = val;\n if (prec) s = s.slice(0, parseInt(prec));\n const w = parseInt(width) || 0;\n if (fmtFlags.includes(\"-\")) out += s.padEnd(w);\n else out += s.padStart(w);\n continue;\n }\n if (spec === \"d\" || spec === \"i\") {\n const n = parseInt(val) || 0;\n let s = (fmtFlags.includes(\"+\") && n >= 0 ? \"+\" : \"\") + String(n);\n if (fmtFlags.includes(\" \") && n >= 0 && !fmtFlags.includes(\"+\")) s = \" \" + s;\n const w = parseInt(width) || 0;\n const pad = fmtFlags.includes(\"0\") && !fmtFlags.includes(\"-\") ? \"0\" : \" \";\n if (fmtFlags.includes(\"-\")) out += s.padEnd(w);\n else if (pad === \"0\" && s[0] === \"-\") out += \"-\" + s.slice(1).padStart(w - 1, \"0\");\n else out += s.padStart(w, pad);\n continue;\n }\n if (spec === \"f\") {\n const n = parseFloat(val) || 0;\n const p = prec !== \"\" ? parseInt(prec) : 6;\n let s = n.toFixed(p);\n if (fmtFlags.includes(\"+\") && n >= 0) s = \"+\" + s;\n const w = parseInt(width) || 0;\n if (fmtFlags.includes(\"-\")) out += s.padEnd(w);\n else out += s.padStart(w, fmtFlags.includes(\"0\") ? \"0\" : \" \");\n continue;\n }\n if (spec === \"x\") {\n const n = (parseInt(val) || 0) >>> 0;\n let s = n.toString(16);\n if (fmtFlags.includes(\"#\") && n !== 0) s = \"0x\" + s;\n out += s.padStart(parseInt(width) || 0, fmtFlags.includes(\"0\") ? \"0\" : \" \");\n continue;\n }\n if (spec === \"X\") {\n const n = (parseInt(val) || 0) >>> 0;\n let s = n.toString(16).toUpperCase();\n if (fmtFlags.includes(\"#\") && n !== 0) s = \"0X\" + s;\n out += s.padStart(parseInt(width) || 0, fmtFlags.includes(\"0\") ? \"0\" : \" \");\n continue;\n }\n if (spec === \"o\") {\n const n = (parseInt(val) || 0) >>> 0;\n let s = n.toString(8);\n if (fmtFlags.includes(\"#\") && n !== 0) s = \"0\" + s;\n out += s.padStart(parseInt(width) || 0, fmtFlags.includes(\"0\") ? \"0\" : \" \");\n continue;\n }\n if (spec === \"e\" || spec === \"E\") {\n const n = parseFloat(val) || 0;\n const p = prec !== \"\" ? parseInt(prec) : 6;\n let s = spec === \"E\" ? n.toExponential(p).toUpperCase() : n.toExponential(p);\n if (fmtFlags.includes(\"+\") && n >= 0) s = \"+\" + s;\n out += s.padStart(parseInt(width) || 0);\n continue;\n }\n if (spec === \"g\" || spec === \"G\") {\n const n = parseFloat(val) || 0;\n const p = prec !== \"\" ? parseInt(prec) : 6;\n let s = spec === \"G\" ? n.toPrecision(p).toUpperCase() : n.toPrecision(p);\n if (fmtFlags.includes(\"+\") && n >= 0) s = \"+\" + s;\n out += s.padStart(parseInt(width) || 0);\n continue;\n }\n if (spec === \"c\") { out += val ? val[0] : \"\"; continue; }\n out += \"%\" + spec;\n vi--;\n continue;\n }\n out += fmt[i++];\n }\n return ok(out);\n};\n\n/* ------------------------------------------------------------------ */\n/* grep / egrep / fgrep */\n/* ------------------------------------------------------------------ */\n\ninterface GrepOpts {\n regex: RegExp;\n highlightRe: RegExp;\n patternStr: string;\n ignoreCase: boolean;\n invert: boolean;\n countOnly: boolean;\n filesOnly: boolean;\n lineNumbers: boolean;\n onlyMatching: boolean;\n quiet: boolean;\n beforeCtx: number;\n afterCtx: number;\n maxCount: number;\n}\n\nfunction grepLines(content: string, opts: GrepOpts, label?: string): string {\n const {\n regex, highlightRe, patternStr, ignoreCase, invert,\n countOnly, filesOnly, lineNumbers, onlyMatching, quiet,\n beforeCtx, afterCtx, maxCount,\n } = opts;\n const lines = content.split(\"\\n\");\n const matchedIndices = new Set<number>();\n let matchCount = 0;\n\n for (let i = 0; i < lines.length; i++) {\n if (regex.test(lines[i]) !== invert) {\n matchedIndices.add(i);\n matchCount++;\n if (matchCount >= maxCount) break;\n }\n }\n\n if (countOnly) {\n return (label ? `${MAGENTA}${label}${RESET}${CYAN}:${RESET}` : \"\") +\n matchedIndices.size + \"\\n\";\n }\n if (filesOnly && matchedIndices.size > 0) {\n return `${MAGENTA}${label ?? \"\"}${RESET}\\n`;\n }\n if (quiet) return matchedIndices.size > 0 ? \"\\0\" : \"\";\n\n const showLines = new Set<number>();\n for (const idx of matchedIndices) {\n for (\n let j = Math.max(0, idx - beforeCtx);\n j <= Math.min(lines.length - 1, idx + afterCtx);\n j++\n ) {\n showLines.add(j);\n }\n }\n\n let out = \"\";\n let prevShown = -2;\n for (let i = 0; i < lines.length; i++) {\n if (!showLines.has(i)) continue;\n if (\n prevShown >= 0 &&\n i > prevShown + 1 &&\n (beforeCtx > 0 || afterCtx > 0)\n ) {\n out += \"--\\n\";\n }\n prevShown = i;\n\n const isMatch = matchedIndices.has(i);\n const sep = isMatch ? `${CYAN}:${RESET}` : `${CYAN}-${RESET}`;\n const prefix = label ? `${MAGENTA}${label}${RESET}${sep}` : \"\";\n const num = lineNumbers ? `${GREEN}${i + 1}${RESET}${sep}` : \"\";\n\n if (onlyMatching && isMatch && !invert) {\n const gRe = new RegExp(patternStr, ignoreCase ? \"gi\" : \"g\");\n let m: RegExpExecArray | null;\n while ((m = gRe.exec(lines[i])) !== null) {\n out += `${prefix}${num}${BOLD_RED}${m[0]}${RESET}\\n`;\n }\n } else {\n const hl =\n isMatch && !invert\n ? lines[i].replace(highlightRe, (m) => `${BOLD_RED}${m}${RESET}`)\n : lines[i];\n out += `${prefix}${num}${hl}\\n`;\n }\n }\n\n return out;\n}\n\nfunction grepDirFull(\n ctx: ShellContext,\n dir: string,\n opts: GrepOpts,\n): string {\n let out = \"\";\n try {\n for (const name of ctx.volume.readdirSync(dir)) {\n const full = `${dir}/${name}`;\n const st = ctx.volume.statSync(full);\n if (st.isDirectory()) {\n out += grepDirFull(ctx, full, opts);\n } else {\n try {\n const content = ctx.volume.readFileSync(full, \"utf8\");\n out += grepLines(content, opts, full);\n } catch {\n /* skip binary/unreadable */\n }\n }\n }\n } catch {\n /* skip unreadable dirs */\n }\n return out;\n}\n\nconst grep_cmd: BuiltinFn = (args, ctx, stdin) => {\n const { flags, opts: parsedOpts, positional } = parseArgs(\n args,\n [\n \"i\", \"v\", \"c\", \"l\", \"n\", \"r\", \"R\", \"o\", \"w\", \"x\",\n \"E\", \"F\", \"P\", \"H\", \"h\", \"q\", \"s\", \"z\",\n ],\n [\"A\", \"B\", \"C\", \"m\", \"e\", \"f\"],\n );\n const ignoreCase = flags.has(\"i\");\n const invert = flags.has(\"v\");\n const countOnly = flags.has(\"c\");\n const filesOnly = flags.has(\"l\");\n const lineNumbers = flags.has(\"n\");\n const recursive = flags.has(\"r\") || flags.has(\"R\");\n const onlyMatching = flags.has(\"o\");\n const wordRegex = flags.has(\"w\");\n const lineRegex = flags.has(\"x\");\n const fixedStrings = flags.has(\"F\");\n const quiet = flags.has(\"q\");\n const suppressErrors = flags.has(\"s\");\n const afterCtx = parseInt(parsedOpts[\"A\"] || parsedOpts[\"C\"] || \"0\");\n const beforeCtx = parseInt(parsedOpts[\"B\"] || parsedOpts[\"C\"] || \"0\");\n const maxCount = parsedOpts[\"m\"] ? parseInt(parsedOpts[\"m\"]) : Infinity;\n\n let patternStr: string;\n if (parsedOpts[\"e\"] !== undefined) {\n patternStr = parsedOpts[\"e\"];\n } else if (positional.length === 0) {\n return fail(\"grep: missing pattern\\n\");\n } else {\n patternStr = positional.shift()!;\n }\n\n if (fixedStrings)\n patternStr = patternStr.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n if (wordRegex) patternStr = `\\\\b${patternStr}\\\\b`;\n if (lineRegex) patternStr = `^${patternStr}$`;\n\n let regex: RegExp;\n let highlightRe: RegExp;\n try {\n regex = new RegExp(patternStr, ignoreCase ? \"im\" : \"m\");\n highlightRe = new RegExp(patternStr, ignoreCase ? \"gi\" : \"g\");\n } catch {\n return fail(`grep: Invalid regular expression: '${patternStr}'\\n`);\n }\n\n const grepOpts: GrepOpts = {\n regex, highlightRe, patternStr, ignoreCase, invert,\n countOnly, filesOnly, lineNumbers, onlyMatching, quiet,\n beforeCtx, afterCtx, maxCount,\n };\n\n const files = positional;\n\n if (files.length === 0 && stdin !== undefined) {\n const result = grepLines(stdin, grepOpts);\n if (quiet) return result ? EXIT_OK : EXIT_FAIL;\n return result ? ok(result) : EXIT_FAIL;\n }\n\n if (files.length === 0) {\n return fail(\"grep: missing file operand\\n\");\n }\n\n let out = \"\";\n const multiFile = files.length > 1 || recursive;\n let anyMatch = false;\n\n for (const file of files) {\n const p = resolvePath(file, ctx.cwd);\n try {\n const st = ctx.volume.statSync(p);\n if (st.isDirectory()) {\n if (recursive) {\n const r = grepDirFull(ctx, p, grepOpts);\n out += r;\n if (r) anyMatch = true;\n } else if (!suppressErrors) {\n out += `grep: ${file}: Is a directory\\n`;\n }\n continue;\n }\n const content = ctx.volume.readFileSync(p, \"utf8\");\n const result = grepLines(content, grepOpts, multiFile ? file : undefined);\n out += result;\n if (result) anyMatch = true;\n } catch {\n if (!suppressErrors)\n return fail(`grep: ${file}: No such file or directory\\n`);\n }\n }\n\n if (quiet) return anyMatch ? EXIT_OK : EXIT_FAIL;\n return anyMatch ? ok(out) : { stdout: out, stderr: \"\", exitCode: 1 };\n};\n\n/* ------------------------------------------------------------------ */\n/* sed */\n/* ------------------------------------------------------------------ */\n\ninterface SedCmd {\n addr?:\n | { type: \"line\"; n: number }\n | { type: \"range\"; from: number; to: number }\n | { type: \"last\" }\n | { type: \"regex\"; re: RegExp };\n type: string;\n pattern?: string;\n replacement?: string;\n sFlags?: string;\n text?: string;\n printAfter?: boolean;\n}\n\nfunction parseSedScript(script: string): SedCmd[] | string {\n const cmds: SedCmd[] = [];\n const parts = script.split(/\\s*;\\s*|\\n/).filter(Boolean);\n\n for (const part of parts) {\n let rest = part.trim();\n if (!rest) continue;\n\n let addr: SedCmd[\"addr\"];\n if (rest[0] === \"$\") {\n addr = { type: \"last\" };\n rest = rest.slice(1);\n } else if (/^\\d/.test(rest)) {\n const m = rest.match(/^(\\d+)(?:,(\\d+|\\$))?/);\n if (m) {\n rest = rest.slice(m[0].length);\n if (m[2]) {\n const to = m[2] === \"$\" ? Infinity : parseInt(m[2]);\n addr = { type: \"range\", from: parseInt(m[1]), to };\n } else {\n addr = { type: \"line\", n: parseInt(m[1]) };\n }\n }\n } else if (rest[0] === \"/\") {\n const end = rest.indexOf(\"/\", 1);\n if (end > 0) {\n const pattern = rest.slice(1, end);\n try {\n addr = { type: \"regex\", re: new RegExp(pattern) };\n } catch {\n return `invalid regular expression: ${pattern}`;\n }\n rest = rest.slice(end + 1);\n }\n }\n\n const cmd = rest[0];\n rest = rest.slice(1);\n\n if (cmd === \"s\") {\n const delim = rest[0];\n if (!delim) return `unsupported expression: ${part}`;\n const parts2 = rest.slice(1).split(delim);\n if (parts2.length < 2) return `unsupported expression: ${part}`;\n const printAfter = parts2[2]?.includes(\"p\") ?? false;\n const sFlags = (parts2[2] ?? \"\").replace(\"p\", \"\") || undefined;\n cmds.push({ addr, type: \"s\", pattern: parts2[0], replacement: parts2[1], sFlags, printAfter });\n } else if (cmd === \"d\") { cmds.push({ addr, type: \"d\" }); }\n else if (cmd === \"p\") { cmds.push({ addr, type: \"p\" }); }\n else if (cmd === \"q\") { cmds.push({ addr, type: \"q\" }); }\n else if (cmd === \"a\") { cmds.push({ addr, type: \"a\", text: rest.replace(/^\\\\?\\s*/, \"\") }); }\n else if (cmd === \"i\") { cmds.push({ addr, type: \"i\", text: rest.replace(/^\\\\?\\s*/, \"\") }); }\n else if (cmd === \"c\") { cmds.push({ addr, type: \"c\", text: rest.replace(/^\\\\?\\s*/, \"\") }); }\n else if (cmd === \"y\") {\n const delim2 = rest[0];\n const parts2 = rest.slice(1).split(delim2);\n if (parts2.length < 2) return `unsupported expression: ${part}`;\n cmds.push({ addr, type: \"y\", pattern: parts2[0], replacement: parts2[1] });\n } else if (cmd === \"=\") { cmds.push({ addr, type: \"=\" }); }\n else { return `unsupported command: ${cmd}`; }\n }\n return cmds;\n}\n\nfunction sedAddressMatch(\n addr: SedCmd[\"addr\"],\n lineNum: number,\n totalLines: number,\n _line: string,\n): boolean {\n if (!addr) return true;\n if (addr.type === \"line\") return lineNum === addr.n;\n if (addr.type === \"range\")\n return lineNum >= addr.from && lineNum <= (addr.to === Infinity ? totalLines : addr.to);\n if (addr.type === \"last\") return lineNum === totalLines;\n if (addr.type === \"regex\") return addr.re.test(_line);\n return true;\n}\n\nconst sed_cmd: BuiltinFn = (args, ctx, stdin) => {\n const { flags, positional } = parseArgs(args, [\"i\", \"n\", \"r\", \"E\"]);\n const inPlace = flags.has(\"i\");\n const quietMode = flags.has(\"n\");\n\n if (positional.length === 0) return fail(\"sed: missing expression\\n\");\n\n const expressions = positional[0];\n const files = positional.slice(1);\n\n const cmds = parseSedScript(expressions);\n if (typeof cmds === \"string\") return fail(`sed: ${cmds}\\n`);\n\n const doSed = (content: string): string => {\n const lines = content.split(\"\\n\");\n let out = \"\";\n for (let i = 0; i < lines.length; i++) {\n const lineNum = i + 1;\n const isLast = i === lines.length - 1;\n let line = lines[i];\n let suppress = quietMode;\n let deleted = false;\n\n for (const cmd of cmds) {\n if (deleted) break;\n if (!sedAddressMatch(cmd.addr, lineNum, lines.length, line)) continue;\n\n switch (cmd.type) {\n case \"s\": {\n let re: RegExp;\n try {\n re = new RegExp(cmd.pattern!, cmd.sFlags || undefined);\n } catch {\n break;\n }\n line = line.replace(re, cmd.replacement!);\n if (cmd.printAfter && re.test(lines[i])) suppress = false;\n break;\n }\n case \"d\": deleted = true; break;\n case \"p\": out += line + \"\\n\"; break;\n case \"q\": { if (!suppress) out += line + \"\\n\"; return out; }\n case \"a\": out += line + \"\\n\" + cmd.text! + \"\\n\"; suppress = true; break;\n case \"i\": out += cmd.text! + \"\\n\"; break;\n case \"c\": out += cmd.text! + \"\\n\"; deleted = true; break;\n case \"y\": {\n const from = cmd.pattern!;\n const to = cmd.replacement!;\n let result = \"\";\n for (const ch of line) {\n const idx = from.indexOf(ch);\n result += idx >= 0 ? to[idx] : ch;\n }\n line = result;\n break;\n }\n case \"=\": out += lineNum + \"\\n\"; break;\n }\n }\n if (!deleted && !suppress) {\n out += line + (isLast && !content.endsWith(\"\\n\") ? \"\" : \"\\n\");\n }\n }\n return out;\n };\n\n if (files.length === 0 && stdin !== undefined) return ok(doSed(stdin));\n if (files.length === 0) return fail(\"sed: missing input\\n\");\n\n let out = \"\";\n for (const file of files) {\n const p = resolvePath(file, ctx.cwd);\n try {\n const content = ctx.volume.readFileSync(p, \"utf8\");\n const result = doSed(content);\n if (inPlace) {\n ctx.volume.writeFileSync(p, result);\n } else {\n out += result;\n }\n } catch {\n return fail(`sed: ${file}: No such file or directory\\n`);\n }\n }\n return ok(out);\n};\n\n/* ------------------------------------------------------------------ */\n/* sort */\n/* ------------------------------------------------------------------ */\n\nconst sort_cmd: BuiltinFn = (args, ctx, stdin) => {\n const { flags, opts, positional } = parseArgs(\n args,\n [\"r\", \"n\", \"u\", \"f\", \"h\", \"V\", \"b\", \"s\"],\n [\"k\", \"t\", \"o\"],\n );\n const reverse = flags.has(\"r\");\n const numeric = flags.has(\"n\");\n const unique = flags.has(\"u\");\n const ignoreCase = flags.has(\"f\");\n const humanNumeric = flags.has(\"h\");\n const versionSort = flags.has(\"V\");\n const stable = flags.has(\"s\");\n const keySpec = opts[\"k\"];\n const fieldSep = opts[\"t\"];\n const outputFile = opts[\"o\"];\n\n let content = stdin ?? \"\";\n if (positional.length > 0) {\n const p = resolvePath(positional[0], ctx.cwd);\n try {\n content = ctx.volume.readFileSync(p, \"utf8\");\n } catch {\n return fail(`sort: ${positional[0]}: No such file or directory\\n`);\n }\n }\n\n let lines = content.split(\"\\n\").filter(Boolean);\n\n const getKey = (line: string): string => {\n if (!keySpec) return line;\n const sep = fieldSep || /\\s+/;\n const fields = line.split(sep);\n const [startSpec, endSpec] = keySpec.split(\",\");\n const startField = parseInt(startSpec) - 1;\n const endField = endSpec ? parseInt(endSpec) - 1 : startField;\n return fields\n .slice(startField, endField + 1)\n .join(typeof sep === \"string\" ? sep : \" \");\n };\n\n const parseHumanSize = (s: string): number => {\n const m = s.trim().match(/^([\\d.]+)([KMGTPE]i?)?$/i);\n if (!m) return 0;\n const n = parseFloat(m[1]);\n const u = (m[2] || \"\").toUpperCase().replace(\"I\", \"\");\n const mult: Record<string, number> = {\n \"\": 1, K: 1024, M: 1048576, G: 1073741824, T: 1099511627776,\n };\n return n * (mult[u] || 1);\n };\n\n const compare = (a: string, b: string): number => {\n let ka = getKey(a), kb = getKey(b);\n if (ignoreCase) { ka = ka.toLowerCase(); kb = kb.toLowerCase(); }\n if (numeric) return parseFloat(ka) - parseFloat(kb);\n if (humanNumeric) return parseHumanSize(ka) - parseHumanSize(kb);\n if (versionSort)\n return ka.localeCompare(kb, undefined, { numeric: true, sensitivity: \"base\" });\n return ka.localeCompare(kb);\n };\n\n if (stable) {\n const indexed = lines.map((l, i) => ({ l, i }));\n indexed.sort((a, b) => compare(a.l, b.l) || a.i - b.i);\n lines = indexed.map((x) => x.l);\n } else {\n lines.sort(compare);\n }\n if (reverse) lines.reverse();\n if (unique) {\n const seen = new Set<string>();\n lines = lines.filter((l) => {\n const k = ignoreCase ? getKey(l).toLowerCase() : getKey(l);\n if (seen.has(k)) return false;\n seen.add(k);\n return true;\n });\n }\n\n const result = lines.join(\"\\n\") + (lines.length ? \"\\n\" : \"\");\n if (outputFile) {\n const p = resolvePath(outputFile, ctx.cwd);\n try {\n ctx.volume.writeFileSync(p, result);\n } catch {\n /* */\n }\n }\n return ok(result);\n};\n\n/* ------------------------------------------------------------------ */\n/* uniq */\n/* ------------------------------------------------------------------ */\n\nconst uniq_cmd: BuiltinFn = (args, ctx, stdin) => {\n const { flags, opts, positional } = parseArgs(\n args,\n [\"c\", \"d\", \"u\", \"i\"],\n [\"f\", \"s\", \"w\"],\n );\n const count = flags.has(\"c\");\n const dupsOnly = flags.has(\"d\");\n const uniqueOnly = flags.has(\"u\");\n const ignoreCase = flags.has(\"i\");\n const skipFields = parseInt(opts[\"f\"] || \"0\");\n const skipChars = parseInt(opts[\"s\"] || \"0\");\n const checkChars = opts[\"w\"] ? parseInt(opts[\"w\"]) : Infinity;\n\n let content = stdin ?? \"\";\n if (positional.length > 0) {\n const p = resolvePath(positional[0], ctx.cwd);\n try {\n content = ctx.volume.readFileSync(p, \"utf8\");\n } catch {\n return fail(`uniq: ${positional[0]}: No such file or directory\\n`);\n }\n }\n\n const getKey = (line: string): string => {\n let l = line;\n if (skipFields > 0) {\n const parts = l.split(/\\s+/);\n l = parts.slice(skipFields).join(\" \");\n }\n if (skipChars > 0) l = l.slice(skipChars);\n if (checkChars < Infinity) l = l.slice(0, checkChars);\n if (ignoreCase) l = l.toLowerCase();\n return l;\n };\n\n const lines = content.split(\"\\n\");\n const result: string[] = [];\n let prev = \"\";\n let prevLine = \"\";\n let prevCount = 0;\n\n for (const line of lines) {\n const key = getKey(line);\n if (key === prev) {\n prevCount++;\n } else {\n if (prevCount > 0) {\n const show = dupsOnly ? prevCount > 1 : uniqueOnly ? prevCount === 1 : true;\n if (show)\n result.push(count ? `${String(prevCount).padStart(7)} ${prevLine}` : prevLine);\n }\n prev = key;\n prevLine = line;\n prevCount = 1;\n }\n }\n if (prevCount > 0 && prevLine !== \"\") {\n const show = dupsOnly ? prevCount > 1 : uniqueOnly ? prevCount === 1 : true;\n if (show)\n result.push(count ? `${String(prevCount).padStart(7)} ${prevLine}` : prevLine);\n }\n\n return ok(result.join(\"\\n\") + (result.length ? \"\\n\" : \"\"));\n};\n\n/* ------------------------------------------------------------------ */\n/* tr */\n/* ------------------------------------------------------------------ */\n\nfunction expandRange(s: string): string {\n return s.replace(/(.)-(.)/g, (_, a: string, b: string) => {\n let result = \"\";\n const start = a.charCodeAt(0);\n const end = b.charCodeAt(0);\n for (let i = start; i <= end; i++) result += String.fromCharCode(i);\n return result;\n });\n}\n\nfunction squeezeDups(s: string, chars: Set<string>): string {\n let out = \"\";\n let prev = \"\";\n for (const ch of s) {\n if (ch === prev && chars.has(ch)) continue;\n out += ch;\n prev = ch;\n }\n return out;\n}\n\nfunction buildComplement(set: string): string {\n const setChars = new Set(set);\n let result = \"\";\n for (let i = 0; i < 128; i++) {\n const ch = String.fromCharCode(i);\n if (!setChars.has(ch)) result += ch;\n }\n return result;\n}\n\nconst tr_cmd: BuiltinFn = (args, _ctx, stdin) => {\n const { flags, positional } = parseArgs(args, [\"d\", \"s\", \"c\", \"C\"]);\n const deleteMode = flags.has(\"d\");\n const squeeze = flags.has(\"s\");\n const complement = flags.has(\"c\") || flags.has(\"C\");\n\n if (positional.length === 0) return fail(\"tr: missing operand\\n\");\n const content = stdin ?? \"\";\n\n let set1 = expandCharClass(positional[0]);\n const set2 = positional.length > 1 ? expandCharClass(positional[1]) : \"\";\n\n set1 = expandRange(set1);\n const expandedSet2 = set2 ? expandRange(set2) : \"\";\n\n if (deleteMode) {\n const chars = complement ? null : new Set(set1);\n let out = \"\";\n for (const ch of content) {\n const inSet = chars ? chars.has(ch) : set1.includes(ch);\n if (complement ? inSet : !inSet) out += ch;\n }\n if (squeeze && expandedSet2) {\n const squeezeSet = new Set(expandedSet2);\n out = squeezeDups(out, squeezeSet);\n }\n return ok(out);\n }\n\n if (positional.length < 2 && !squeeze) return fail(\"tr: missing operand\\n\");\n\n if (squeeze && positional.length === 1) {\n const squeezeSet = new Set(set1);\n return ok(squeezeDups(content, squeezeSet));\n }\n\n let out = \"\";\n const s1 = complement ? buildComplement(set1) : set1;\n for (const ch of content) {\n const idx = s1.indexOf(ch);\n if (idx >= 0) {\n const replacement =\n idx < expandedSet2.length\n ? expandedSet2[idx]\n : expandedSet2[expandedSet2.length - 1] || ch;\n out += replacement;\n } else {\n out += ch;\n }\n }\n\n if (squeeze) {\n const squeezeSet = new Set(expandedSet2);\n out = squeezeDups(out, squeezeSet);\n }\n return ok(out);\n};\n\n/* ------------------------------------------------------------------ */\n/* cut */\n/* ------------------------------------------------------------------ */\n\nfunction parseRangeSpec(spec: string): number[] {\n const result: number[] = [];\n for (const part of spec.split(\",\")) {\n const range = part.match(/^(\\d+)-(\\d*)$/);\n if (range) {\n const start = parseInt(range[1]);\n const end = range[2] ? parseInt(range[2]) : start + 100;\n for (let i = start; i <= end; i++) result.push(i);\n } else {\n result.push(parseInt(part));\n }\n }\n return result.filter((n) => !isNaN(n));\n}\n\nconst cut_cmd: BuiltinFn = (args, ctx, stdin) => {\n let delimiter = \"\\t\";\n let fields: number[] = [];\n let bytes: number[] = [];\n let chars: number[] = [];\n let outputDelimiter: string | null = null;\n const files: string[] = [];\n\n for (let i = 0; i < args.length; i++) {\n if (args[i] === \"-d\" && i + 1 < args.length) delimiter = args[++i];\n else if (args[i] === \"-f\" && i + 1 < args.length)\n fields = parseRangeSpec(args[++i]);\n else if (args[i] === \"-b\" && i + 1 < args.length)\n bytes = parseRangeSpec(args[++i]);\n else if (args[i] === \"-c\" && i + 1 < args.length)\n chars = parseRangeSpec(args[++i]);\n else if (args[i] === \"--output-delimiter\" && i + 1 < args.length)\n outputDelimiter = args[++i];\n else if (!args[i].startsWith(\"-\")) files.push(args[i]);\n }\n\n const outDelim = outputDelimiter ?? delimiter;\n\n const doCut = (content: string) => {\n return content\n .split(\"\\n\")\n .map((line) => {\n if (bytes.length > 0 || chars.length > 0) {\n const indices = bytes.length > 0 ? bytes : chars;\n return indices.map((idx) => line[idx - 1] ?? \"\").join(\"\");\n }\n const parts = line.split(delimiter);\n return fields.map((f) => parts[f - 1] ?? \"\").join(outDelim);\n })\n .join(\"\\n\");\n };\n\n if (files.length === 0) return ok(doCut(stdin ?? \"\"));\n let out = \"\";\n for (const file of files) {\n const p = resolvePath(file, ctx.cwd);\n try {\n out += doCut(ctx.volume.readFileSync(p, \"utf8\"));\n } catch {\n return fail(`cut: ${file}: No such file or directory\\n`);\n }\n }\n return ok(out);\n};\n\n/* ------------------------------------------------------------------ */\n/* Small text utilities */\n/* ------------------------------------------------------------------ */\n\nconst rev_cmd: BuiltinFn = (args, ctx, stdin) => {\n let content = stdin ?? \"\";\n if (args.length > 0) {\n const p = resolvePath(args[0], ctx.cwd);\n try {\n content = ctx.volume.readFileSync(p, \"utf8\");\n } catch {\n return fail(`rev: ${args[0]}: No such file or directory\\n`);\n }\n }\n return ok(\n content\n .split(\"\\n\")\n .map((l) => [...l].reverse().join(\"\"))\n .join(\"\\n\"),\n );\n};\n\nconst paste_cmd: BuiltinFn = (args, ctx, stdin) => {\n const { opts, positional } = parseArgs(args, [\"s\"], [\"d\"]);\n const delim = opts[\"d\"] || \"\\t\";\n\n const contents: string[][] = [];\n for (const file of positional) {\n if (file === \"-\" && stdin) {\n contents.push(stdin.split(\"\\n\"));\n continue;\n }\n const p = resolvePath(file, ctx.cwd);\n try {\n contents.push(ctx.volume.readFileSync(p, \"utf8\").split(\"\\n\"));\n } catch {\n return fail(`paste: ${file}: No such file or directory\\n`);\n }\n }\n if (contents.length === 0 && stdin) contents.push(stdin.split(\"\\n\"));\n\n const maxLen = Math.max(...contents.map((c) => c.length));\n let out = \"\";\n for (let i = 0; i < maxLen; i++) {\n out += contents.map((c) => c[i] ?? \"\").join(delim) + \"\\n\";\n }\n return ok(out);\n};\n\nconst comm_cmd: BuiltinFn = (args, ctx) => {\n const { flags, positional } = parseArgs(args, [\"1\", \"2\", \"3\"]);\n if (positional.length < 2) return fail(\"comm: missing operand\\n\");\n\n const readFile = (f: string) => {\n const p = resolvePath(f, ctx.cwd);\n return ctx.volume.readFileSync(p, \"utf8\").split(\"\\n\").filter(Boolean);\n };\n\n try {\n const a = readFile(positional[0]);\n const b = readFile(positional[1]);\n let out = \"\";\n let ai = 0, bi = 0;\n while (ai < a.length || bi < b.length) {\n if (ai >= a.length) {\n if (!flags.has(\"2\"))\n out += \"\\t\" + (flags.has(\"1\") ? \"\" : \"\\t\") + b[bi] + \"\\n\";\n bi++;\n } else if (bi >= b.length) {\n if (!flags.has(\"1\")) out += a[ai] + \"\\n\";\n ai++;\n } else if (a[ai] < b[bi]) {\n if (!flags.has(\"1\")) out += a[ai] + \"\\n\";\n ai++;\n } else if (a[ai] > b[bi]) {\n if (!flags.has(\"2\"))\n out += \"\\t\" + (flags.has(\"1\") ? \"\" : \"\\t\") + b[bi] + \"\\n\";\n bi++;\n } else {\n if (!flags.has(\"3\")) out += \"\\t\\t\" + a[ai] + \"\\n\";\n ai++;\n bi++;\n }\n }\n return ok(out);\n } catch (e) {\n return fail(`comm: ${e instanceof Error ? e.message : String(e)}\\n`);\n }\n};\n\n/* ------------------------------------------------------------------ */\n/* diff */\n/* ------------------------------------------------------------------ */\n\nfunction simpleLCS(a: string[], b: string[]): string[] {\n const m = a.length, n = b.length;\n const dp: number[][] = Array.from({ length: m + 1 }, () =>\n new Array(n + 1).fill(0),\n );\n for (let i = 1; i <= m; i++) {\n for (let j = 1; j <= n; j++) {\n dp[i][j] =\n a[i - 1] === b[j - 1]\n ? dp[i - 1][j - 1] + 1\n : Math.max(dp[i - 1][j], dp[i][j - 1]);\n }\n }\n const result: string[] = [];\n let i = m, j = n;\n while (i > 0 && j > 0) {\n if (a[i - 1] === b[j - 1]) {\n result.unshift(a[i - 1]);\n i--;\n j--;\n } else if (dp[i - 1][j] > dp[i][j - 1]) i--;\n else j--;\n }\n return result;\n}\n\nconst diff_cmd: BuiltinFn = (args, ctx) => {\n const { flags, positional } = parseArgs(args, [\"u\", \"q\", \"r\", \"N\"]);\n if (positional.length < 2) return fail(\"diff: missing operand\\n\");\n\n const brief = flags.has(\"q\");\n const unified = flags.has(\"u\");\n\n const p1 = resolvePath(positional[0], ctx.cwd);\n const p2 = resolvePath(positional[1], ctx.cwd);\n\n try {\n const a = ctx.volume.readFileSync(p1, \"utf8\").split(\"\\n\");\n const b = ctx.volume.readFileSync(p2, \"utf8\").split(\"\\n\");\n\n if (a.join(\"\\n\") === b.join(\"\\n\")) return ok();\n if (brief)\n return {\n stdout: `Files ${positional[0]} and ${positional[1]} differ\\n`,\n stderr: \"\",\n exitCode: 1,\n };\n\n let out = \"\";\n if (unified) {\n out += `--- ${positional[0]}\\n+++ ${positional[1]}\\n`;\n out += `@@ -1,${a.length} +1,${b.length} @@\\n`;\n const lcs = simpleLCS(a, b);\n let ai = 0, bi = 0, li = 0;\n while (ai < a.length || bi < b.length) {\n if (\n li < lcs.length &&\n ai < a.length && a[ai] === lcs[li] &&\n bi < b.length && b[bi] === lcs[li]\n ) {\n out += ` ${a[ai]}\\n`;\n ai++; bi++; li++;\n } else if (ai < a.length && (li >= lcs.length || a[ai] !== lcs[li])) {\n out += `-${a[ai]}\\n`;\n ai++;\n } else if (bi < b.length) {\n out += `+${b[bi]}\\n`;\n bi++;\n }\n }\n } else {\n for (let i = 0; i < Math.max(a.length, b.length); i++) {\n if (i >= a.length) out += `> ${b[i]}\\n`;\n else if (i >= b.length) out += `< ${a[i]}\\n`;\n else if (a[i] !== b[i]) {\n out += `< ${a[i]}\\n---\\n> ${b[i]}\\n`;\n }\n }\n }\n\n return { stdout: out, stderr: \"\", exitCode: 1 };\n } catch (e) {\n return fail(`diff: ${e instanceof Error ? e.message : String(e)}\\n`);\n }\n};\n\n/* ------------------------------------------------------------------ */\n/* seq / yes */\n/* ------------------------------------------------------------------ */\n\nconst seq_cmd: BuiltinFn = (args) => {\n if (args.length === 0) return fail(\"seq: missing operand\\n\");\n let first = 1, increment = 1, last = 1;\n if (args.length === 1) {\n last = parseFloat(args[0]);\n } else if (args.length === 2) {\n first = parseFloat(args[0]);\n last = parseFloat(args[1]);\n } else {\n first = parseFloat(args[0]);\n increment = parseFloat(args[1]);\n last = parseFloat(args[2]);\n }\n\n const lines: string[] = [];\n if (increment > 0) {\n for (let i = first; i <= last; i += increment) lines.push(String(i));\n } else if (increment < 0) {\n for (let i = first; i >= last; i += increment) lines.push(String(i));\n }\n return ok(lines.join(\"\\n\") + (lines.length ? \"\\n\" : \"\"));\n};\n\nconst yes_cmd: BuiltinFn = (args) => {\n const text = args.length > 0 ? args.join(\" \") : \"y\";\n return ok((text + \"\\n\").repeat(YES_REPEAT_COUNT));\n};\n\n/* ------------------------------------------------------------------ */\n/* Registry */\n/* ------------------------------------------------------------------ */\n\nexport const textProcessingCommands: [string, BuiltinFn][] = [\n [\"echo\", echo],\n [\"printf\", printf_cmd],\n [\"grep\", grep_cmd],\n [\"egrep\", grep_cmd],\n [\"fgrep\", grep_cmd],\n [\"sed\", sed_cmd],\n [\"sort\", sort_cmd],\n [\"uniq\", uniq_cmd],\n [\"tr\", tr_cmd],\n [\"cut\", cut_cmd],\n [\"rev\", rev_cmd],\n [\"paste\", paste_cmd],\n [\"comm\", comm_cmd],\n [\"diff\", diff_cmd],\n [\"seq\", seq_cmd],\n [\"yes\", yes_cmd],\n];\n","import type { BuiltinFn } from \"../shell-types\";\nimport { ok, fail, resolvePath, globToRegex } from \"../shell-helpers\";\nimport { LS_BLOCK_SIZE } from \"../../constants/config\";\n\n/* ------------------------------------------------------------------ */\n/* Helpers */\n/* ------------------------------------------------------------------ */\n\nfunction matchSize(fileSize: number, spec: string): boolean {\n const m = spec.match(/^([+-]?)(\\d+)([cwbkMG]?)$/);\n if (!m) return true;\n const op = m[1];\n let n = parseInt(m[2]);\n const unit = m[3];\n if (unit === \"c\") {\n /* bytes */\n } else if (unit === \"w\") n *= 2;\n else if (unit === \"k\") n *= 1024;\n else if (unit === \"M\") n *= 1048576;\n else if (unit === \"G\") n *= 1073741824;\n else n *= LS_BLOCK_SIZE;\n\n if (op === \"+\") return fileSize > n;\n if (op === \"-\") return fileSize < n;\n return fileSize === n;\n}\n\nfunction matchMtime(mtimeMs: number, spec: string): boolean {\n const m = spec.match(/^([+-]?)(\\d+)$/);\n if (!m) return true;\n const op = m[1];\n const days = parseInt(m[2]);\n const age = (Date.now() - mtimeMs) / 86400000;\n if (op === \"+\") return age > days;\n if (op === \"-\") return age < days;\n return Math.floor(age) === days;\n}\n\n/* ------------------------------------------------------------------ */\n/* Commands */\n/* ------------------------------------------------------------------ */\n\nconst find_cmd: BuiltinFn = async (args, ctx) => {\n let searchDir = ctx.cwd;\n let namePattern = \"\";\n let inamePattern = \"\";\n let pathPattern = \"\";\n let typeFilter = \"\";\n let maxDepth = Infinity;\n let minDepth = 0;\n let sizeFilter = \"\";\n let mtimeFilter = \"\";\n let execCmd = \"\";\n let execArgs: string[] = [];\n let deleteMode = false;\n let print0 = false;\n let printMode = true;\n let emptyFilter = false;\n\n for (let i = 0; i < args.length; i++) {\n const a = args[i];\n if (a === \"-name\" && i + 1 < args.length) {\n namePattern = args[++i];\n } else if (a === \"-iname\" && i + 1 < args.length) {\n inamePattern = args[++i];\n } else if (a === \"-path\" || (a === \"-wholename\" && i + 1 < args.length)) {\n pathPattern = args[++i];\n } else if (a === \"-type\" && i + 1 < args.length) {\n typeFilter = args[++i];\n } else if (a === \"-maxdepth\" && i + 1 < args.length) {\n maxDepth = parseInt(args[++i]);\n } else if (a === \"-mindepth\" && i + 1 < args.length) {\n minDepth = parseInt(args[++i]);\n } else if (a === \"-size\" && i + 1 < args.length) {\n sizeFilter = args[++i];\n } else if (a === \"-mtime\" && i + 1 < args.length) {\n mtimeFilter = args[++i];\n } else if (a === \"-empty\") {\n emptyFilter = true;\n } else if (a === \"-delete\") {\n deleteMode = true;\n printMode = false;\n } else if (a === \"-print0\") {\n print0 = true;\n } else if (a === \"-print\") {\n printMode = true;\n } else if (a === \"-exec\") {\n const cmdParts: string[] = [];\n i++;\n while (i < args.length && args[i] !== \";\") {\n cmdParts.push(args[i]);\n i++;\n }\n if (cmdParts.length > 0) {\n execCmd = cmdParts[0];\n execArgs = cmdParts.slice(1);\n printMode = false;\n }\n } else if (!a.startsWith(\"-\")) {\n searchDir = resolvePath(a, ctx.cwd);\n }\n }\n\n const nameRe = namePattern\n ? new RegExp(\"^\" + globToRegex(namePattern) + \"$\")\n : null;\n const inameRe = inamePattern\n ? new RegExp(\"^\" + globToRegex(inamePattern) + \"$\", \"i\")\n : null;\n const pathRe = pathPattern ? new RegExp(globToRegex(pathPattern)) : null;\n\n const results: string[] = [];\n let execOut = \"\";\n\n const walk = (dir: string, depth: number) => {\n if (depth > maxDepth) return;\n try {\n for (const name of ctx.volume.readdirSync(dir)) {\n const full = dir === \"/\" ? `/${name}` : `${dir}/${name}`;\n try {\n const st = ctx.volume.statSync(full);\n const isDir = st.isDirectory();\n const isFile = st.isFile();\n\n if (depth >= minDepth) {\n let match = true;\n if (typeFilter) {\n if (typeFilter === \"f\" && !isFile) match = false;\n if (typeFilter === \"d\" && !isDir) match = false;\n }\n if (nameRe && !nameRe.test(name)) match = false;\n if (inameRe && !inameRe.test(name)) match = false;\n if (pathRe && !pathRe.test(full)) match = false;\n if (sizeFilter && isFile) {\n const fileSize = ctx.volume.readFileSync(full).length;\n if (!matchSize(fileSize, sizeFilter)) match = false;\n }\n if (mtimeFilter) {\n const mtime = st.mtimeMs || Date.now();\n if (!matchMtime(mtime, mtimeFilter)) match = false;\n }\n if (emptyFilter) {\n if (isDir) {\n try {\n if (ctx.volume.readdirSync(full).length > 0) match = false;\n } catch {\n match = false;\n }\n } else if (isFile) {\n if (ctx.volume.readFileSync(full).length > 0) match = false;\n } else match = false;\n }\n if (match) results.push(full);\n }\n if (isDir) walk(full, depth + 1);\n } catch {\n /* skip */\n }\n }\n } catch {\n /* skip */\n }\n };\n\n walk(searchDir, 1);\n\n if (deleteMode) {\n for (const path of results.reverse()) {\n try {\n const st = ctx.volume.statSync(path);\n if (st.isDirectory()) ctx.volume.rmdirSync(path);\n else ctx.volume.unlinkSync(path);\n } catch {\n /* */\n }\n }\n return ok();\n }\n\n if (execCmd) {\n for (const path of results) {\n const expandedArgs = execArgs.map((a) => (a === \"{}\" ? path : a));\n const fullCmd = [execCmd, ...expandedArgs].join(\" \");\n const result = await ctx.exec(fullCmd, { cwd: ctx.cwd, env: ctx.env });\n execOut += result.stdout;\n }\n return ok(execOut);\n }\n\n if (print0) return ok(results.join(\"\\0\"));\n if (printMode) return ok(results.join(\"\\n\") + (results.length ? \"\\n\" : \"\"));\n return ok();\n};\n\nconst xargs_cmd: BuiltinFn = async (args, ctx, stdin) => {\n if (!stdin) return ok();\n\n let maxArgs = Infinity;\n let placeholder = \"\";\n let nullDelim = false;\n const cmdParts: string[] = [];\n\n for (let i = 0; i < args.length; i++) {\n if (args[i] === \"-n\" && i + 1 < args.length)\n maxArgs = parseInt(args[++i]) || 1;\n else if (args[i] === \"-I\" && i + 1 < args.length) placeholder = args[++i];\n else if (args[i] === \"-0\" || args[i] === \"--null\") nullDelim = true;\n else if (args[i] === \"-t\") {\n /* */\n } else cmdParts.push(args[i]);\n }\n\n if (cmdParts.length === 0) cmdParts.push(\"echo\");\n\n const delim = nullDelim ? \"\\0\" : /\\s+/;\n const items = stdin.trim().split(delim).filter(Boolean);\n const cmd = cmdParts.join(\" \");\n let out = \"\";\n let err = \"\";\n let lastCode = 0;\n\n if (placeholder) {\n for (const item of items) {\n const expanded = cmd.replace(\n new RegExp(placeholder.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\"), \"g\"),\n item,\n );\n const result = await ctx.exec(expanded, { cwd: ctx.cwd, env: ctx.env });\n out += result.stdout;\n err += result.stderr;\n lastCode = result.exitCode;\n }\n } else if (maxArgs < Infinity) {\n for (let i = 0; i < items.length; i += maxArgs) {\n const batch = items.slice(i, i + maxArgs).join(\" \");\n const result = await ctx.exec(`${cmd} ${batch}`, {\n cwd: ctx.cwd,\n env: ctx.env,\n });\n out += result.stdout;\n err += result.stderr;\n lastCode = result.exitCode;\n }\n } else {\n const result = await ctx.exec(`${cmd} ${items.join(\" \")}`, {\n cwd: ctx.cwd,\n env: ctx.env,\n });\n out += result.stdout;\n err += result.stderr;\n lastCode = result.exitCode;\n }\n\n return { stdout: out, stderr: err, exitCode: lastCode };\n};\n\n/* ------------------------------------------------------------------ */\n/* Registry */\n/* ------------------------------------------------------------------ */\n\nexport const searchCommands: [string, BuiltinFn][] = [\n [\"find\", find_cmd],\n [\"xargs\", xargs_cmd],\n];\n","import type { BuiltinFn, ShellContext } from \"../shell-types\";\nimport {\n ok,\n fail,\n EXIT_FAIL,\n resolvePath,\n parseArgs,\n pathModule,\n MONTHS_SHORT,\n MONTHS_LONG,\n DAYS_SHORT,\n DAYS_LONG,\n} from \"../shell-helpers\";\n\n// set by the registry so `which` and `type` can check builtins\nlet _builtins: Map<string, BuiltinFn> | null = null;\n\nexport function setBuiltinsRef(b: Map<string, BuiltinFn>): void {\n _builtins = b;\n}\n\n/* ------------------------------------------------------------------ */\n/* Commands */\n/* ------------------------------------------------------------------ */\n\nconst exportCmd: BuiltinFn = (args, ctx) => {\n if (args.length === 0) {\n let out = \"\";\n for (const [k, v] of Object.entries(ctx.env)) {\n out += `declare -x ${k}=\"${v}\"\\n`;\n }\n return ok(out);\n }\n for (const arg of args) {\n const eq = arg.indexOf(\"=\");\n if (eq > 0) {\n ctx.env[arg.slice(0, eq)] = arg.slice(eq + 1);\n }\n }\n return ok();\n};\n\nconst unset: BuiltinFn = (args, ctx) => {\n for (const name of args) delete ctx.env[name];\n return ok();\n};\n\nconst envCmd: BuiltinFn = (_args, ctx) => {\n let out = \"\";\n for (const [k, v] of Object.entries(ctx.env)) out += `${k}=${v}\\n`;\n return ok(out);\n};\n\nconst which: BuiltinFn = (args, ctx) => {\n if (args.length === 0) return fail(\"which: missing argument\\n\");\n\n const { flags } = parseArgs(args, [\"a\"]);\n const showAll = flags.has(\"a\");\n const names = args.filter((a) => !a.startsWith(\"-\"));\n\n let out = \"\";\n for (const name of names) {\n const found: string[] = [];\n\n if (_builtins?.has(name)) found.push(`${name}: shell built-in command`);\n\n const knownBins: Record<string, string> = {\n node: \"/usr/local/bin/node\",\n npm: \"/usr/local/bin/npm\",\n npx: \"/usr/local/bin/npx\",\n pnpm: \"/usr/local/bin/pnpm\",\n yarn: \"/usr/local/bin/yarn\",\n bun: \"/usr/local/bin/bun\",\n bunx: \"/usr/local/bin/bunx\",\n };\n if (knownBins[name]) found.push(knownBins[name]);\n\n const binPath = `/node_modules/.bin/${name}`;\n if (ctx.volume.existsSync(binPath)) found.push(binPath);\n\n const pathDirs = (ctx.env.PATH || \"\").split(\":\").filter(Boolean);\n for (const dir of pathDirs) {\n const candidate = `${dir}/${name}`;\n if (ctx.volume.existsSync(candidate)) {\n if (!found.includes(candidate)) found.push(candidate);\n }\n }\n\n if (found.length === 0) {\n out += `${name} not found\\n`;\n } else if (showAll) {\n for (const f of found) out += f + \"\\n\";\n } else {\n out += found[0] + \"\\n\";\n }\n }\n return out.includes(\"not found\")\n ? { stdout: out, stderr: \"\", exitCode: 1 }\n : ok(out);\n};\n\nconst typeCmd: BuiltinFn = (args, ctx) => {\n if (args.length === 0) return fail(\"type: missing argument\\n\");\n const name = args[0];\n if (_builtins?.has(name)) return ok(`${name} is a shell builtin\\n`);\n\n const w = which([name], ctx);\n if (typeof w === \"object\" && \"exitCode\" in w && w.exitCode === 0) {\n return ok(`${name} is ${w.stdout.trim()}\\n`);\n }\n return fail(`type: ${name}: not found\\n`);\n};\n\nconst trueCmd: BuiltinFn = () => ok();\nconst falseCmd: BuiltinFn = () => EXIT_FAIL;\n\nconst exitCmd: BuiltinFn = (args) => {\n const code = args[0] ? parseInt(args[0], 10) : 0;\n return { stdout: \"\", stderr: \"\", exitCode: code };\n};\n\nconst clear: BuiltinFn = () => ok(\"\\x1b[2J\\x1b[H\");\n\n/* ------------------------------------------------------------------ */\n/* test / [ */\n/* ------------------------------------------------------------------ */\n\nfunction evalTest(args: string[], ctx: ShellContext): boolean {\n if (args.length === 0) return false;\n\n if (args[0] === \"!\") return !evalTest(args.slice(1), ctx);\n\n if (args[0] === \"(\" && args[args.length - 1] === \")\") {\n return evalTest(args.slice(1, -1), ctx);\n }\n\n for (let i = 0; i < args.length; i++) {\n if (args[i] === \"-o\") {\n return (\n evalTest(args.slice(0, i), ctx) || evalTest(args.slice(i + 1), ctx)\n );\n }\n }\n for (let i = 0; i < args.length; i++) {\n if (args[i] === \"-a\") {\n return (\n evalTest(args.slice(0, i), ctx) && evalTest(args.slice(i + 1), ctx)\n );\n }\n }\n\n if (args.length === 1) return args[0].length > 0;\n\n if (args.length === 2) {\n const [flag, val] = args;\n const p = resolvePath(val, ctx.cwd);\n\n if (flag === \"-f\") {\n try { return ctx.volume.statSync(p).isFile(); } catch { return false; }\n }\n if (flag === \"-d\") {\n try { return ctx.volume.statSync(p).isDirectory(); } catch { return false; }\n }\n if (flag === \"-e\") return ctx.volume.existsSync(p);\n if (flag === \"-L\" || flag === \"-h\") return ctx.volume.existsSync(p);\n if (flag === \"-s\") {\n try { return ctx.volume.readFileSync(p).length > 0; } catch { return false; }\n }\n if (flag === \"-r\" || flag === \"-w\") return ctx.volume.existsSync(p);\n if (flag === \"-x\") {\n if (ctx.volume.existsSync(p)) {\n const ext = pathModule.extname(p);\n return ext === \".sh\" || ext === \"\" || p.includes(\"/bin/\");\n }\n return false;\n }\n if (flag === \"-n\") return val.length > 0;\n if (flag === \"-z\") return val.length === 0;\n if (flag === \"-t\") return false;\n }\n\n if (args.length === 3) {\n const [left, op, right] = args;\n if (op === \"=\" || op === \"==\") return left === right;\n if (op === \"!=\") return left !== right;\n if (op === \"-eq\") return parseInt(left) === parseInt(right);\n if (op === \"-ne\") return parseInt(left) !== parseInt(right);\n if (op === \"-lt\") return parseInt(left) < parseInt(right);\n if (op === \"-le\") return parseInt(left) <= parseInt(right);\n if (op === \"-gt\") return parseInt(left) > parseInt(right);\n if (op === \"-ge\") return parseInt(left) >= parseInt(right);\n\n if (op === \"-nt\" || op === \"-ot\" || op === \"-ef\") {\n try {\n const sl = ctx.volume.statSync(resolvePath(left, ctx.cwd));\n const sr = ctx.volume.statSync(resolvePath(right, ctx.cwd));\n if (op === \"-nt\") return (sl.mtimeMs || 0) > (sr.mtimeMs || 0);\n if (op === \"-ot\") return (sl.mtimeMs || 0) < (sr.mtimeMs || 0);\n if (op === \"-ef\")\n return resolvePath(left, ctx.cwd) === resolvePath(right, ctx.cwd);\n } catch {\n return false;\n }\n }\n }\n\n return false;\n}\n\nconst test_cmd: BuiltinFn = (args, ctx) => {\n const testArgs = [...args];\n if (testArgs[testArgs.length - 1] === \"]\") testArgs.pop();\n return { stdout: \"\", stderr: \"\", exitCode: evalTest(testArgs, ctx) ? 0 : 1 };\n};\n\n/* ------------------------------------------------------------------ */\n/* date */\n/* ------------------------------------------------------------------ */\n\nfunction getTimezoneAbbr(d: Date): string {\n const str = d.toTimeString();\n const m = str.match(/\\((.+?)\\)/);\n if (m) {\n const words = m[1].split(\" \");\n if (words.length === 1) return words[0];\n return words.map((w) => w[0]).join(\"\");\n }\n const off = -d.getTimezoneOffset();\n const sign = off >= 0 ? \"+\" : \"-\";\n const h = String(Math.floor(Math.abs(off) / 60)).padStart(2, \"0\");\n const min = String(Math.abs(off) % 60).padStart(2, \"0\");\n return `${sign}${h}${min}`;\n}\n\nfunction formatDate(d: Date, fmt: string, utc: boolean): string {\n const g = utc\n ? {\n Y: d.getUTCFullYear(), m: d.getUTCMonth(), d: d.getUTCDate(),\n H: d.getUTCHours(), M: d.getUTCMinutes(), S: d.getUTCSeconds(),\n w: d.getUTCDay(),\n }\n : {\n Y: d.getFullYear(), m: d.getMonth(), d: d.getDate(),\n H: d.getHours(), M: d.getMinutes(), S: d.getSeconds(),\n w: d.getDay(),\n };\n let out = \"\";\n for (let i = 0; i < fmt.length; i++) {\n if (fmt[i] === \"%\" && i + 1 < fmt.length) {\n const s = fmt[++i];\n if (s === \"Y\") out += g.Y;\n else if (s === \"y\") out += String(g.Y).slice(-2);\n else if (s === \"m\") out += String(g.m + 1).padStart(2, \"0\");\n else if (s === \"d\") out += String(g.d).padStart(2, \"0\");\n else if (s === \"e\") out += String(g.d).padStart(2, \" \");\n else if (s === \"H\") out += String(g.H).padStart(2, \"0\");\n else if (s === \"M\") out += String(g.M).padStart(2, \"0\");\n else if (s === \"S\") out += String(g.S).padStart(2, \"0\");\n else if (s === \"I\") out += String(g.H % 12 || 12).padStart(2, \"0\");\n else if (s === \"p\") out += g.H < 12 ? \"AM\" : \"PM\";\n else if (s === \"P\") out += g.H < 12 ? \"am\" : \"pm\";\n else if (s === \"a\") out += DAYS_SHORT[g.w];\n else if (s === \"A\") out += DAYS_LONG[g.w];\n else if (s === \"b\" || s === \"h\") out += MONTHS_SHORT[g.m];\n else if (s === \"B\") out += MONTHS_LONG[g.m];\n else if (s === \"w\") out += g.w;\n else if (s === \"u\") out += g.w === 0 ? 7 : g.w;\n else if (s === \"j\") {\n const jan1 = new Date(g.Y, 0, 1);\n const diff = d.getTime() - jan1.getTime();\n out += String(Math.floor(diff / 86400000) + 1).padStart(3, \"0\");\n } else if (s === \"s\") out += Math.floor(d.getTime() / 1000);\n else if (s === \"N\") out += String(d.getMilliseconds() * 1000000).padStart(9, \"0\");\n else if (s === \"n\") out += \"\\n\";\n else if (s === \"t\") out += \"\\t\";\n else if (s === \"T\")\n out += `${String(g.H).padStart(2, \"0\")}:${String(g.M).padStart(2, \"0\")}:${String(g.S).padStart(2, \"0\")}`;\n else if (s === \"R\")\n out += `${String(g.H).padStart(2, \"0\")}:${String(g.M).padStart(2, \"0\")}`;\n else if (s === \"F\")\n out += `${g.Y}-${String(g.m + 1).padStart(2, \"0\")}-${String(g.d).padStart(2, \"0\")}`;\n else if (s === \"D\")\n out += `${String(g.m + 1).padStart(2, \"0\")}/${String(g.d).padStart(2, \"0\")}/${String(g.Y).slice(-2)}`;\n else if (s === \"Z\") out += utc ? \"UTC\" : getTimezoneAbbr(d);\n else if (s === \"%\") out += \"%\";\n else out += \"%\" + s;\n } else {\n out += fmt[i];\n }\n }\n return out;\n}\n\nconst date_cmd: BuiltinFn = (args) => {\n const { flags, opts, positional } = parseArgs(args, [\"u\", \"R\", \"I\"], [\"d\"]);\n const utc = flags.has(\"u\");\n const rfc = flags.has(\"R\");\n const iso = flags.has(\"I\");\n const dateStr = opts[\"d\"];\n\n const d = dateStr ? new Date(dateStr) : new Date();\n if (isNaN(d.getTime())) return fail(`date: invalid date '${dateStr}'\\n`);\n\n const fmt = positional.find((a) => a.startsWith(\"+\"));\n if (fmt) return ok(formatDate(d, fmt.slice(1), utc) + \"\\n\");\n if (rfc) return ok(d.toUTCString() + \"\\n\");\n if (iso) return ok(d.toISOString().slice(0, 10) + \"\\n\");\n\n const day = DAYS_SHORT[utc ? d.getUTCDay() : d.getDay()];\n const mon = MONTHS_SHORT[utc ? d.getUTCMonth() : d.getMonth()];\n const date = utc ? d.getUTCDate() : d.getDate();\n const hh = String(utc ? d.getUTCHours() : d.getHours()).padStart(2, \"0\");\n const mm = String(utc ? d.getUTCMinutes() : d.getMinutes()).padStart(2, \"0\");\n const ss = String(utc ? d.getUTCSeconds() : d.getSeconds()).padStart(2, \"0\");\n const year = utc ? d.getUTCFullYear() : d.getFullYear();\n const tz = utc ? \"UTC\" : getTimezoneAbbr(d);\n\n return ok(\n `${day} ${mon} ${String(date).padStart(2, \" \")} ${hh}:${mm}:${ss} ${tz} ${year}\\n`,\n );\n};\n\n/* ------------------------------------------------------------------ */\n/* sleep */\n/* ------------------------------------------------------------------ */\n\nconst sleep_cmd: BuiltinFn = async (args) => {\n const seconds = parseFloat(args[0] || \"0\");\n if (seconds > 0) await new Promise((r) => setTimeout(r, seconds * 1000));\n return ok();\n};\n\n/* ------------------------------------------------------------------ */\n/* Registry */\n/* ------------------------------------------------------------------ */\n\nexport const shellEnvCommands: [string, BuiltinFn][] = [\n [\"export\", exportCmd],\n [\"unset\", unset],\n [\"env\", envCmd],\n [\"which\", which],\n [\"type\", typeCmd],\n [\"true\", trueCmd],\n [\"false\", falseCmd],\n [\":\", trueCmd],\n [\"exit\", exitCmd],\n [\"clear\", clear],\n [\"test\", test_cmd],\n [\"[\", test_cmd],\n [\"date\", date_cmd],\n [\"sleep\", sleep_cmd],\n];\n","// Assembles all builtin commands from category modules into one map.\n\nimport type { BuiltinFn } from \"./shell-types\";\nimport { fileOpsCommands } from \"./commands/file-ops\";\nimport { directoryCommands } from \"./commands/directory\";\nimport { textProcessingCommands } from \"./commands/text-processing\";\nimport { searchCommands } from \"./commands/search\";\nimport { shellEnvCommands, setBuiltinsRef } from \"./commands/shell-env\";\n\nexport const builtins = new Map<string, BuiltinFn>([\n ...fileOpsCommands,\n ...directoryCommands,\n ...textProcessingCommands,\n ...searchCommands,\n ...shellEnvCommands,\n]);\n\n// shell-env needs the builtins ref for `which` and `type`\nsetBuiltinsRef(builtins);\n","// Shell interpreter: pipes, &&/||/;, redirections, variable expansion,\n// globbing, command substitution, builtins, and registered commands.\n\nimport type {\n ShellResult,\n ShellContext,\n ShellCommand,\n ListNode,\n PipelineNode,\n CommandNode,\n BuiltinFn,\n} from \"./shell-types\";\nimport type { MemoryVolume } from \"../memory-volume\";\nimport { parse, expandGlob } from \"./shell-parser\";\nimport { builtins } from \"./shell-builtins\";\n\n/* ------------------------------------------------------------------ */\n/* NodepodShell */\n/* ------------------------------------------------------------------ */\n\n// In a worker, the shell can't spawn new workers directly.\n// This callback sends a spawn request to the main thread's ProcessManager.\nexport type SpawnChildCallback = (\n command: string,\n args: string[],\n opts?: { cwd?: string; env?: Record<string, string>; stdio?: \"pipe\" | \"inherit\" },\n) => Promise<{ pid: number; exitCode: number; stdout: string; stderr: string }>;\n\nexport class NodepodShell {\n private volume: MemoryVolume;\n private cwd: string;\n private env: Record<string, string>;\n private commands = new Map<string, ShellCommand>();\n private lastExit = 0;\n private aliases = new Map<string, string>();\n // serializes concurrent exec() calls to prevent cwd save/restore races\n private _execQueue: Promise<ShellResult> = Promise.resolve({ stdout: \"\", stderr: \"\", exitCode: 0 });\n\n private _spawnChild: SpawnChildCallback | null = null;\n\n constructor(\n volume: MemoryVolume,\n opts?: { cwd?: string; env?: Record<string, string> },\n ) {\n this.volume = volume;\n this.cwd = opts?.cwd ?? \"/\";\n this.env = opts?.env ? { ...opts.env } : {};\n this.env.PWD = this.cwd;\n }\n\n registerCommand(cmd: ShellCommand): void {\n this.commands.set(cmd.name, cmd);\n }\n\n setSpawnChildCallback(cb: SpawnChildCallback | null): void {\n this._spawnChild = cb;\n }\n\n getSpawnChildCallback(): SpawnChildCallback | null {\n return this._spawnChild;\n }\n\n getCwd(): string {\n return this.cwd;\n }\n\n setCwd(cwd: string): void {\n this.cwd = cwd;\n this.env.PWD = cwd;\n }\n\n getEnv(): Record<string, string> {\n return this.env;\n }\n\n async exec(\n command: string,\n opts?: { cwd?: string; env?: Record<string, string> },\n ): Promise<ShellResult> {\n // serialize cwd/env-overriding calls to prevent save/restore races\n if (opts?.cwd || opts?.env) {\n const prev = this._execQueue;\n let resolve!: (r: ShellResult) => void;\n this._execQueue = new Promise<ShellResult>((r) => { resolve = r; });\n await prev.catch(() => {});\n try {\n const r = await this._execInner(command, opts);\n resolve(r);\n return r;\n } catch (e) {\n const err: ShellResult = {\n stdout: \"\",\n stderr: `shell: ${e instanceof Error ? e.message : String(e)}\\n`,\n exitCode: 1,\n };\n resolve(err);\n return err;\n }\n }\n return this._execInner(command, opts);\n }\n\n private async _execInner(\n command: string,\n opts?: { cwd?: string; env?: Record<string, string> },\n ): Promise<ShellResult> {\n const prevCwd = this.cwd;\n const prevEnv = { ...this.env };\n\n if (opts?.cwd) {\n this.cwd = opts.cwd;\n this.env.PWD = opts.cwd;\n }\n if (opts?.env) {\n Object.assign(this.env, opts.env);\n }\n\n try {\n const expanded = await this.expandCommandSubstitution(command);\n\n const ast = parse(expanded, this.env, this.lastExit);\n return await this.execList(ast);\n } catch (e) {\n return {\n stdout: \"\",\n stderr: `shell: ${e instanceof Error ? e.message : String(e)}\\n`,\n exitCode: 1,\n };\n } finally {\n // only restore cwd if cd didn't change it\n if (opts?.cwd && this.cwd === opts.cwd) {\n this.cwd = prevCwd;\n this.env.PWD = prevCwd;\n }\n if (opts?.env) {\n for (const key of Object.keys(opts.env)) {\n if (key in prevEnv) {\n this.env[key] = prevEnv[key];\n } else {\n delete this.env[key];\n }\n }\n }\n }\n }\n\n /* ---------------------------------------------------------------- */\n /* AST execution */\n /* ---------------------------------------------------------------- */\n\n private async execList(list: ListNode): Promise<ShellResult> {\n let result: ShellResult = { stdout: \"\", stderr: \"\", exitCode: 0 };\n\n for (let i = 0; i < list.entries.length; i++) {\n const entry = list.entries[i];\n const pipeResult = await this.execPipeline(entry.pipeline);\n\n result = {\n stdout: result.stdout + pipeResult.stdout,\n stderr: result.stderr + pipeResult.stderr,\n exitCode: pipeResult.exitCode,\n };\n this.lastExit = pipeResult.exitCode;\n\n if (entry.next === \"&&\" && pipeResult.exitCode !== 0) break;\n if (entry.next === \"||\" && pipeResult.exitCode === 0) break;\n }\n\n return result;\n }\n\n private async execPipeline(pipeline: PipelineNode): Promise<ShellResult> {\n if (pipeline.commands.length === 1) {\n return this.execCommand(pipeline.commands[0]);\n }\n\n let stdin: string | undefined;\n let lastResult: ShellResult = { stdout: \"\", stderr: \"\", exitCode: 0 };\n let allStderr = \"\";\n\n for (const cmd of pipeline.commands) {\n const result = await this.execCommand(cmd, stdin);\n allStderr += result.stderr;\n stdin = result.stdout;\n lastResult = result;\n }\n\n return {\n stdout: lastResult.stdout,\n stderr: allStderr,\n exitCode: lastResult.exitCode,\n };\n }\n\n private async execCommand(\n cmd: CommandNode,\n stdin?: string,\n ): Promise<ShellResult> {\n if (cmd.args.length === 0) {\n for (const [k, v] of Object.entries(cmd.assignments)) {\n this.env[k] = v;\n }\n return { stdout: \"\", stderr: \"\", exitCode: 0 };\n }\n\n let expandedArgs: string[] = [];\n for (const arg of cmd.args) {\n expandedArgs.push(...expandGlob(arg, this.cwd, this.volume));\n }\n\n const alias = this.aliases.get(expandedArgs[0]);\n if (alias) {\n const aliasArgs = alias.split(/\\s+/);\n expandedArgs = [...aliasArgs, ...expandedArgs.slice(1)];\n }\n\n const name = expandedArgs[0];\n const args = expandedArgs.slice(1);\n\n if (stdin === undefined) {\n for (const r of cmd.redirects) {\n if (r.type === \"read\") {\n const p = this.resolvePath(r.target);\n try {\n stdin = this.volume.readFileSync(p, \"utf8\");\n } catch {\n return {\n stdout: \"\",\n stderr: `shell: ${r.target}: No such file or directory\\n`,\n exitCode: 1,\n };\n }\n }\n }\n }\n\n const savedEnv: Record<string, string | undefined> = {};\n for (const [k, v] of Object.entries(cmd.assignments)) {\n savedEnv[k] = this.env[k];\n this.env[k] = v;\n }\n\n const ctx = this.buildContext();\n let result: ShellResult;\n\n // dispatch: builtin > registered command > PATH lookup > error\n const builtin = builtins.get(name);\n if (builtin) {\n const r = builtin(args, ctx, stdin);\n result = r instanceof Promise ? await r : r;\n if (name === \"cd\") {\n this.cwd = ctx.cwd;\n this.env = ctx.env;\n }\n if (name === \"export\" || name === \"unset\") {\n this.env = ctx.env;\n }\n } else if (name === \"alias\") {\n result = this.handleAlias(args);\n } else if (name === \"source\" || name === \".\") {\n result = await this.handleSource(args);\n } else if (name === \"history\") {\n result = { stdout: \"\", stderr: \"\", exitCode: 0 };\n } else if (this.commands.has(name)) {\n try {\n result = await this.commands.get(name)!.execute(args, ctx);\n } catch (e) {\n const msg = e instanceof Error ? e.message : String(e);\n result = {\n stdout: \"\",\n stderr: `${name}: ${msg}\\n`,\n exitCode: 1,\n };\n }\n this.cwd = ctx.cwd;\n this.env = ctx.env;\n } else {\n const resolvedBin = this.resolveFromPath(name);\n if (resolvedBin && this.commands.has(\"node\")) {\n try {\n result = await this.commands\n .get(\"node\")!\n .execute([resolvedBin, ...args], ctx);\n } catch (e) {\n const msg = e instanceof Error ? e.message : String(e);\n result = {\n stdout: \"\",\n stderr: `${name}: ${msg}\\n`,\n exitCode: 1,\n };\n }\n this.cwd = ctx.cwd;\n this.env = ctx.env;\n } else {\n result = {\n stdout: \"\",\n stderr: `${name}: command not found\\n`,\n exitCode: 127,\n };\n }\n }\n\n for (const [k, v] of Object.entries(savedEnv)) {\n if (v === undefined) delete this.env[k];\n else this.env[k] = v;\n }\n\n result = await this.applyRedirects(result, cmd);\n\n this.lastExit = result.exitCode;\n return result;\n }\n\n /* ---------------------------------------------------------------- */\n /* Helpers */\n /* ---------------------------------------------------------------- */\n\n private buildContext(): ShellContext {\n return {\n cwd: this.cwd,\n env: { ...this.env },\n volume: this.volume,\n exec: (cmd, opts) => this.exec(cmd, opts),\n };\n }\n\n private resolvePath(p: string): string {\n if (p.startsWith(\"/\")) return this.normalizePath(p);\n return this.normalizePath(`${this.cwd}/${p}`);\n }\n\n // Search PATH for a command. Parses .bin stubs to find the real JS entry point.\n private resolveFromPath(name: string): string | null {\n const pathStr = this.env.PATH || \"\";\n const dirs = pathStr.split(\":\");\n\n for (const dir of dirs) {\n if (!dir) continue;\n const candidate = `${dir}/${name}`;\n if (!this.volume.existsSync(candidate)) continue;\n\n try {\n const content = this.volume.readFileSync(candidate, \"utf8\");\n // bin stubs: node \"/node_modules/pkg/index.js\" \"$@\"\n const match = content.match(/node\\s+\"([^\"]+)\"/);\n if (match && this.volume.existsSync(match[1])) {\n return match[1];\n }\n if (\n content.startsWith(\"#!/\") ||\n content.startsWith(\"'use strict'\") ||\n content.startsWith('\"use strict\"') ||\n content.startsWith(\"var \") ||\n content.startsWith(\"const \") ||\n content.startsWith(\"import \") ||\n content.startsWith(\"module.\")\n ) {\n return candidate;\n }\n } catch {\n /* skip */\n }\n }\n\n return null;\n }\n\n private normalizePath(raw: string): string {\n const parts = raw.split(\"/\").filter(Boolean);\n const stack: string[] = [];\n for (const part of parts) {\n if (part === \"..\") stack.pop();\n else if (part !== \".\") stack.push(part);\n }\n return \"/\" + stack.join(\"/\");\n }\n\n private async applyRedirects(\n result: ShellResult,\n cmd: CommandNode,\n ): Promise<ShellResult> {\n let { stdout, stderr, exitCode } = result;\n\n for (const r of cmd.redirects) {\n if (r.type === \"stderr-to-stdout\") {\n stdout += stderr;\n stderr = \"\";\n continue;\n }\n\n if (r.type === \"write\" || r.type === \"append\") {\n const p = this.resolvePath(r.target);\n try {\n if (r.type === \"append\" && this.volume.existsSync(p)) {\n const existing = this.volume.readFileSync(p, \"utf8\");\n this.volume.writeFileSync(p, existing + stdout);\n } else {\n const dir = this.normalizePath(p.substring(0, p.lastIndexOf(\"/\")));\n if (dir && dir !== \"/\" && !this.volume.existsSync(dir)) {\n this.volume.mkdirSync(dir, { recursive: true });\n }\n this.volume.writeFileSync(p, stdout);\n }\n stdout = \"\";\n } catch (e) {\n stderr += `shell: ${r.target}: ${e instanceof Error ? e.message : \"Cannot write\"}\\n`;\n exitCode = 1;\n }\n }\n }\n\n return { stdout, stderr, exitCode };\n }\n\n private async expandCommandSubstitution(input: string): Promise<string> {\n let result = \"\";\n let i = 0;\n\n while (i < input.length) {\n if (input[i] === \"'\") {\n result += \"'\";\n i++;\n while (i < input.length && input[i] !== \"'\") {\n result += input[i++];\n }\n if (i < input.length) result += input[i++];\n continue;\n }\n\n if (input[i] === \"$\" && input[i + 1] === \"(\") {\n i += 2;\n let depth = 1;\n let subCmd = \"\";\n while (i < input.length && depth > 0) {\n if (input[i] === \"(\") depth++;\n if (input[i] === \")\") depth--;\n if (depth > 0) subCmd += input[i];\n i++;\n }\n const subResult = await this.exec(subCmd);\n result += subResult.stdout.replace(/\\n$/, \"\");\n continue;\n }\n\n if (input[i] === \"`\") {\n i++;\n let subCmd = \"\";\n while (i < input.length && input[i] !== \"`\") {\n subCmd += input[i++];\n }\n if (i < input.length) i++;\n const subResult = await this.exec(subCmd);\n result += subResult.stdout.replace(/\\n$/, \"\");\n continue;\n }\n\n result += input[i++];\n }\n\n return result;\n }\n\n private handleAlias(args: string[]): ShellResult {\n if (args.length === 0) {\n let out = \"\";\n for (const [k, v] of this.aliases) out += `alias ${k}='${v}'\\n`;\n return { stdout: out, stderr: \"\", exitCode: 0 };\n }\n for (const arg of args) {\n const eq = arg.indexOf(\"=\");\n if (eq > 0) {\n let val = arg.slice(eq + 1);\n if (\n (val.startsWith(\"'\") && val.endsWith(\"'\")) ||\n (val.startsWith('\"') && val.endsWith('\"'))\n ) {\n val = val.slice(1, -1);\n }\n this.aliases.set(arg.slice(0, eq), val);\n } else {\n const val = this.aliases.get(arg);\n if (val)\n return { stdout: `alias ${arg}='${val}'\\n`, stderr: \"\", exitCode: 0 };\n return {\n stdout: \"\",\n stderr: `alias: ${arg}: not found\\n`,\n exitCode: 1,\n };\n }\n }\n return { stdout: \"\", stderr: \"\", exitCode: 0 };\n }\n\n private async handleSource(args: string[]): Promise<ShellResult> {\n if (args.length === 0) {\n return {\n stdout: \"\",\n stderr: \"source: missing file argument\\n\",\n exitCode: 1,\n };\n }\n const p = this.resolvePath(args[0]);\n try {\n const content = this.volume.readFileSync(p, \"utf8\");\n return this.exec(content);\n } catch {\n return {\n stdout: \"\",\n stderr: `source: ${args[0]}: No such file or directory\\n`,\n exitCode: 1,\n };\n }\n }\n}\n","import type { ShellCommand } from \"../shell-types\";\nimport type { PmDeps } from \"./pm-types\";\nimport { VERSIONS, NPM_REGISTRY_URL_SLASH } from \"../../constants/config\";\n\nconst A_RESET = \"\\x1b[0m\";\nconst A_BOLD = \"\\x1b[1m\";\nconst A_CYAN = \"\\x1b[36m\";\n\nexport function createNpmCommand(deps: PmDeps): ShellCommand {\n return {\n name: \"npm\",\n async execute(params, ctx) {\n if (!deps.hasFile(\"/\"))\n return { stdout: \"\", stderr: \"Volume unavailable\\n\", exitCode: 1 };\n\n const sub = params[0];\n if (!sub || sub === \"help\" || sub === \"--help\") {\n return {\n stdout:\n `${A_BOLD}Usage:${A_RESET} npm <command>\\n\\n` +\n `${A_BOLD}Commands:${A_RESET}\\n` +\n ` ${A_CYAN}run${A_RESET} <script> Run a package.json script\\n` +\n ` ${A_CYAN}start${A_RESET} Alias for npm run start\\n` +\n ` ${A_CYAN}test${A_RESET} Alias for npm run test\\n` +\n ` ${A_CYAN}install${A_RESET} [pkg] Install packages\\n` +\n ` ${A_CYAN}uninstall${A_RESET} <pkg> Remove a package\\n` +\n ` ${A_CYAN}ls${A_RESET} List installed packages\\n` +\n ` ${A_CYAN}init${A_RESET} Create a package.json\\n` +\n ` ${A_CYAN}create${A_RESET} <pkg> Create a project (runs create-<pkg>)\\n` +\n ` ${A_CYAN}version${A_RESET} Show version info\\n` +\n ` ${A_CYAN}info${A_RESET} <pkg> Show package info\\n` +\n ` ${A_CYAN}exec${A_RESET} <cmd> Execute a package binary\\n` +\n ` ${A_CYAN}prefix${A_RESET} Show prefix\\n` +\n ` ${A_CYAN}root${A_RESET} Show node_modules path\\n` +\n ` ${A_CYAN}bin${A_RESET} Show bin directory\\n` +\n ` ${A_CYAN}config${A_RESET} Manage configuration\\n`,\n stderr: \"\",\n exitCode: 0,\n };\n }\n\n switch (sub) {\n case \"run\":\n case \"run-script\":\n return deps.runScript(params.slice(1), ctx);\n case \"start\":\n return deps.runScript([\"start\"], ctx);\n case \"test\":\n case \"t\":\n case \"tst\":\n return deps.runScript([\"test\"], ctx);\n case \"install\":\n case \"i\":\n case \"add\":\n return deps.installPackages(params.slice(1), ctx);\n case \"ci\":\n try {\n deps.removeNodeModules(ctx.cwd);\n } catch {\n /* */\n }\n return deps.installPackages([], ctx);\n case \"uninstall\":\n case \"remove\":\n case \"rm\":\n case \"un\":\n return deps.uninstallPackages(params.slice(1), ctx);\n case \"ls\":\n case \"list\":\n return deps.listPackages(ctx);\n case \"init\":\n case \"create\":\n return deps.npmInitOrCreate(params.slice(1), sub, ctx);\n case \"version\":\n case \"-v\":\n case \"--version\":\n return { stdout: VERSIONS.NPM + \"\\n\", stderr: \"\", exitCode: 0 };\n case \"info\":\n case \"view\":\n case \"show\":\n return deps.npmInfo(params.slice(1), ctx);\n case \"exec\":\n return deps.npxExecute(params.slice(1), ctx);\n case \"prefix\":\n return { stdout: ctx.cwd + \"\\n\", stderr: \"\", exitCode: 0 };\n case \"root\":\n return {\n stdout: ctx.cwd + \"/node_modules\\n\",\n stderr: \"\",\n exitCode: 0,\n };\n case \"bin\":\n return {\n stdout: ctx.cwd + \"/node_modules/.bin\\n\",\n stderr: \"\",\n exitCode: 0,\n };\n case \"pack\":\n return deps.npmPack(ctx);\n case \"config\":\n case \"c\":\n return deps.npmConfig(params.slice(1), ctx);\n case \"outdated\":\n return {\n stdout: \"\",\n stderr: deps.formatWarn(\n \"outdated check not available in nodepod\",\n \"npm\",\n ),\n exitCode: 0,\n };\n case \"audit\":\n return {\n stdout: \"found 0 vulnerabilities\\n\",\n stderr: \"\",\n exitCode: 0,\n };\n case \"fund\":\n return {\n stdout: \"0 packages are looking for funding\\n\",\n stderr: \"\",\n exitCode: 0,\n };\n case \"cache\":\n if (params[1] === \"clean\" || params[1] === \"clear\") {\n return { stdout: \"Cache cleared.\\n\", stderr: \"\", exitCode: 0 };\n }\n return {\n stdout: \"\",\n stderr: deps.formatErr(\n `cache: unknown subcommand ${params[1] ?? \"\"}`,\n \"npm\",\n ),\n exitCode: 1,\n };\n case \"whoami\":\n return { stdout: \"nodepod-user\\n\", stderr: \"\", exitCode: 0 };\n case \"ping\":\n return {\n stdout: `PING ${NPM_REGISTRY_URL_SLASH} - ok\\n`,\n stderr: \"\",\n exitCode: 0,\n };\n case \"set-script\": {\n const scriptName = params[1];\n const scriptCmd = params.slice(2).join(\" \");\n if (!scriptName || !scriptCmd) {\n return {\n stdout: \"\",\n stderr: deps.formatErr(\n \"Usage: npm set-script <name> <command>\",\n \"npm\",\n ),\n exitCode: 1,\n };\n }\n try {\n const pkgPath = ctx.cwd + \"/package.json\";\n const raw = deps.readFile(pkgPath);\n const pkg = JSON.parse(raw);\n if (!pkg.scripts) pkg.scripts = {};\n pkg.scripts[scriptName] = scriptCmd;\n deps.writeFile(pkgPath, JSON.stringify(pkg, null, 2) + \"\\n\");\n return {\n stdout: \"\",\n stderr: deps.formatWarn(\n \"`set-script` is deprecated. Use `npm pkg set scripts.${scriptName}=\\\"${scriptCmd}\\\"` instead.\",\n \"npm\",\n ),\n exitCode: 0,\n };\n } catch (e: any) {\n return {\n stdout: \"\",\n stderr: deps.formatErr(\n e.message || \"Failed to update package.json\",\n \"npm\",\n ),\n exitCode: 1,\n };\n }\n }\n case \"pkg\":\n return deps.npmPkg ? deps.npmPkg(params.slice(1), ctx) : {\n stdout: \"\",\n stderr: deps.formatErr(\"npm pkg not implemented\", \"npm\"),\n exitCode: 1,\n };\n default:\n return {\n stdout: \"\",\n stderr: deps.formatErr(`Unknown command \"${sub}\"`, \"npm\"),\n exitCode: 1,\n };\n }\n },\n };\n}\n","import type { ShellCommand } from \"../shell-types\";\nimport type { PmDeps } from \"./pm-types\";\nimport { VERSIONS } from \"../../constants/config\";\n\nconst A_RESET = \"\\x1b[0m\";\nconst A_BOLD = \"\\x1b[1m\";\nconst A_CYAN = \"\\x1b[36m\";\n\nexport function createPnpmCommand(deps: PmDeps): ShellCommand {\n return {\n name: \"pnpm\",\n async execute(params, ctx) {\n if (!deps.hasFile(\"/\"))\n return { stdout: \"\", stderr: \"Volume unavailable\\n\", exitCode: 1 };\n\n const sub = params[0];\n if (!sub || sub === \"help\" || sub === \"--help\") {\n return {\n stdout:\n `${A_BOLD}Usage:${A_RESET} pnpm <command>\\n\\n` +\n `${A_BOLD}Manage your dependencies:${A_RESET}\\n` +\n ` ${A_CYAN}add${A_RESET} [pkg] Install packages\\n` +\n ` ${A_CYAN}install${A_RESET} Install from manifest\\n` +\n ` ${A_CYAN}remove${A_RESET} <pkg> Remove a package\\n` +\n ` ${A_CYAN}list${A_RESET} List installed packages\\n\\n` +\n `${A_BOLD}Run your scripts:${A_RESET}\\n` +\n ` ${A_CYAN}run${A_RESET} <script> Run a script\\n` +\n ` ${A_CYAN}exec${A_RESET} <cmd> Execute a package binary\\n` +\n ` ${A_CYAN}dlx${A_RESET} <pkg> Download and execute a package\\n\\n` +\n `${A_BOLD}Create a project:${A_RESET}\\n` +\n ` ${A_CYAN}init${A_RESET} Create a package.json\\n` +\n ` ${A_CYAN}create${A_RESET} <pkg> Create a project\\n\\n` +\n ` ${A_CYAN}version${A_RESET} Show version info\\n`,\n stderr: \"\",\n exitCode: 0,\n };\n }\n\n switch (sub) {\n case \"add\":\n return deps.installPackages(params.slice(1), ctx, \"pnpm\");\n case \"install\":\n case \"i\":\n return deps.installPackages(params.slice(1), ctx, \"pnpm\");\n case \"remove\":\n case \"rm\":\n case \"uninstall\":\n case \"un\":\n return deps.uninstallPackages(params.slice(1), ctx, \"pnpm\");\n case \"list\":\n case \"ls\":\n return deps.listPackages(ctx, \"pnpm\");\n case \"run\":\n return deps.runScript(params.slice(1), ctx);\n case \"start\":\n return deps.runScript([\"start\"], ctx);\n case \"test\":\n case \"t\":\n return deps.runScript([\"test\"], ctx);\n case \"exec\":\n return deps.npxExecute(params.slice(1), ctx);\n case \"dlx\":\n return deps.npxExecute(params.slice(1), ctx);\n case \"init\":\n case \"create\":\n return deps.npmInitOrCreate(params.slice(1), sub, ctx);\n case \"version\":\n case \"-v\":\n case \"--version\":\n return { stdout: VERSIONS.PNPM + \"\\n\", stderr: \"\", exitCode: 0 };\n case \"audit\":\n return { stdout: \"No known vulnerabilities found\\n\", stderr: \"\", exitCode: 0 };\n case \"outdated\":\n return { stdout: \"\", stderr: \"\", exitCode: 0 };\n case \"why\":\n return { stdout: \"\", stderr: deps.formatWarn(\"why: not available in nodepod\", \"pnpm\"), exitCode: 0 };\n default:\n return { stdout: \"\", stderr: deps.formatErr(`Unknown command \"${sub}\"`, \"pnpm\"), exitCode: 1 };\n }\n },\n };\n}\n","import type { ShellCommand } from \"../shell-types\";\nimport type { PmDeps } from \"./pm-types\";\nimport { VERSIONS } from \"../../constants/config\";\n\nconst A_RESET = \"\\x1b[0m\";\nconst A_BOLD = \"\\x1b[1m\";\nconst A_CYAN = \"\\x1b[36m\";\n\nexport function createYarnCommand(deps: PmDeps): ShellCommand {\n return {\n name: \"yarn\",\n async execute(params, ctx) {\n if (!deps.hasFile(\"/\"))\n return { stdout: \"\", stderr: \"Volume unavailable\\n\", exitCode: 1 };\n\n const sub = params[0];\n if (!sub) return deps.installPackages([], ctx, \"yarn\");\n if (sub === \"help\" || sub === \"--help\") {\n return {\n stdout:\n `${A_BOLD}Usage:${A_RESET} yarn <command>\\n\\n` +\n `${A_BOLD}Commands:${A_RESET}\\n` +\n ` ${A_CYAN}add${A_RESET} [pkg] Install packages\\n` +\n ` ${A_CYAN}install${A_RESET} Install from manifest\\n` +\n ` ${A_CYAN}remove${A_RESET} <pkg> Remove a package\\n` +\n ` ${A_CYAN}list${A_RESET} List installed packages\\n` +\n ` ${A_CYAN}run${A_RESET} <script> Run a script\\n` +\n ` ${A_CYAN}dlx${A_RESET} <pkg> Download and execute a package\\n` +\n ` ${A_CYAN}init${A_RESET} Create a package.json\\n` +\n ` ${A_CYAN}create${A_RESET} <pkg> Create a project\\n` +\n ` ${A_CYAN}version${A_RESET} Show version info\\n`,\n stderr: \"\",\n exitCode: 0,\n };\n }\n\n switch (sub) {\n case \"add\":\n return deps.installPackages(params.slice(1), ctx, \"yarn\");\n case \"install\":\n case \"i\":\n return deps.installPackages(params.slice(1), ctx, \"yarn\");\n case \"remove\":\n case \"rm\":\n case \"uninstall\":\n return deps.uninstallPackages(params.slice(1), ctx, \"yarn\");\n case \"list\":\n case \"ls\":\n return deps.listPackages(ctx, \"yarn\");\n case \"run\":\n return deps.runScript(params.slice(1), ctx);\n case \"start\":\n return deps.runScript([\"start\"], ctx);\n case \"test\":\n case \"t\":\n return deps.runScript([\"test\"], ctx);\n case \"exec\":\n return deps.npxExecute(params.slice(1), ctx);\n case \"dlx\":\n return deps.npxExecute(params.slice(1), ctx);\n case \"init\":\n case \"create\":\n return deps.npmInitOrCreate(params.slice(1), sub, ctx);\n case \"version\":\n case \"-v\":\n case \"--version\":\n return { stdout: VERSIONS.YARN + \"\\n\", stderr: \"\", exitCode: 0 };\n case \"info\":\n return deps.npmInfo(params.slice(1), ctx);\n case \"audit\":\n return { stdout: \"0 vulnerabilities found\\n\", stderr: \"\", exitCode: 0 };\n case \"outdated\":\n return { stdout: \"\", stderr: \"\", exitCode: 0 };\n case \"why\":\n return { stdout: \"\", stderr: deps.formatWarn(\"why: not available in nodepod\", \"yarn\"), exitCode: 0 };\n case \"global\":\n return { stdout: \"\", stderr: deps.formatWarn(\"global: not available in nodepod\", \"yarn\"), exitCode: 0 };\n default:\n // yarn classic treats unknown commands as `yarn run <cmd>`\n return deps.runScript(params, ctx);\n }\n },\n };\n}\n","import type { ShellCommand } from \"../shell-types\";\nimport type { PmDeps } from \"./pm-types\";\nimport { VERSIONS } from \"../../constants/config\";\n\nconst A_RESET = \"\\x1b[0m\";\nconst A_BOLD = \"\\x1b[1m\";\nconst A_DIM = \"\\x1b[2m\";\nconst A_GREEN = \"\\x1b[32m\";\nconst A_CYAN = \"\\x1b[36m\";\n\nexport function createBunCommand(deps: PmDeps): ShellCommand {\n return {\n name: \"bun\",\n async execute(params, ctx) {\n if (!deps.hasFile(\"/\"))\n return { stdout: \"\", stderr: \"Volume unavailable\\n\", exitCode: 1 };\n\n const sub = params[0];\n if (!sub || sub === \"help\" || sub === \"--help\") {\n return {\n stdout:\n `${A_BOLD}Bun${A_RESET} is a fast JavaScript runtime, package manager, and bundler.\\n\\n` +\n `${A_DIM}Usage:${A_RESET} bun <command> [...flags] [...args]\\n\\n` +\n `${A_BOLD}Commands:${A_RESET}\\n` +\n ` ${A_CYAN}run${A_RESET} ${A_DIM}Run a package.json script or file${A_RESET}\\n` +\n ` ${A_CYAN}install${A_RESET} ${A_DIM}Install dependencies from package.json${A_RESET}\\n` +\n ` ${A_CYAN}add${A_RESET} ${A_DIM}Add a dependency${A_RESET}\\n` +\n ` ${A_CYAN}remove${A_RESET} ${A_DIM}Remove a dependency${A_RESET}\\n` +\n ` ${A_CYAN}init${A_RESET} ${A_DIM}Start an empty Bun project${A_RESET}\\n` +\n ` ${A_CYAN}create${A_RESET} ${A_DIM}Create a new project from a template${A_RESET}\\n` +\n ` ${A_CYAN}test${A_RESET} ${A_DIM}Run unit tests${A_RESET}\\n` +\n ` ${A_CYAN}x${A_RESET} ${A_DIM}Execute a package binary (bunx)${A_RESET}\\n` +\n ` ${A_CYAN}pm${A_RESET} ${A_DIM}Package manager utilities${A_RESET}\\n`,\n stderr: \"\",\n exitCode: 0,\n };\n }\n\n switch (sub) {\n case \"run\":\n if (\n params[1] &&\n (params[1].endsWith(\".js\") ||\n params[1].endsWith(\".ts\") ||\n params[1].endsWith(\".mjs\") ||\n params[1].endsWith(\".tsx\") ||\n params[1].endsWith(\".jsx\"))\n ) {\n return deps.executeNodeBinary(params[1], params.slice(2), ctx);\n }\n return deps.runScript(params.slice(1), ctx);\n case \"start\":\n return deps.runScript([\"start\"], ctx);\n case \"test\":\n case \"t\":\n return deps.runScript([\"test\"], ctx);\n case \"install\":\n case \"i\":\n return deps.installPackages(params.slice(1), ctx, \"bun\");\n case \"add\":\n return deps.installPackages(params.slice(1), ctx, \"bun\");\n case \"remove\":\n case \"rm\":\n return deps.uninstallPackages(params.slice(1), ctx, \"bun\");\n case \"x\":\n return deps.npxExecute(params.slice(1), ctx);\n case \"init\":\n case \"create\":\n return deps.npmInitOrCreate(params.slice(1), sub, ctx);\n case \"pm\": {\n const pmSub = params[1];\n if (pmSub === \"ls\" || pmSub === \"list\")\n return deps.listPackages(ctx, \"bun\");\n if (pmSub === \"cache\")\n return { stdout: \"Cache path: /tmp/bun-cache\\n\", stderr: \"\", exitCode: 0 };\n return {\n stdout: `${A_DIM}bun pm: available subcommands: ls, cache${A_RESET}\\n`,\n stderr: \"\",\n exitCode: 0,\n };\n }\n case \"version\":\n case \"-v\":\n case \"--version\":\n return { stdout: VERSIONS.BUN + \"\\n\", stderr: \"\", exitCode: 0 };\n case \"upgrade\":\n return {\n stdout: `${A_GREEN}Bun is already up to date.${A_RESET}\\n`,\n stderr: \"\",\n exitCode: 0,\n };\n default: {\n // bare `bun <file>` runs it directly, otherwise treat as script\n if (params[0] && !params[0].startsWith(\"-\")) {\n const filePath = params[0].startsWith(\"/\")\n ? params[0]\n : `${ctx.cwd}/${params[0]}`.replace(/\\/+/g, \"/\");\n if (deps.hasFile(filePath)) {\n return deps.executeNodeBinary(params[0], params.slice(1), ctx);\n }\n return deps.runScript(params, ctx);\n }\n return {\n stdout: \"\",\n stderr: `error: unknown command \"${sub}\"\\n`,\n exitCode: 1,\n };\n }\n }\n },\n };\n}\n\nexport function createBunxCommand(deps: PmDeps): ShellCommand {\n return {\n name: \"bunx\",\n async execute(params, ctx) {\n return deps.npxExecute(params, ctx);\n },\n };\n}\n","import type { ShellCommand } from \"../shell-types\";\nimport type { PmDeps } from \"./pm-types\";\nimport { VERSIONS } from \"../../constants/config\";\n\nconst A_RESET = \"\\x1b[0m\";\nconst A_BOLD = \"\\x1b[1m\";\n\nexport function createNodeCommand(deps: PmDeps): ShellCommand {\n return {\n name: \"node\",\n async execute(params, ctx) {\n if (!deps.hasFile(\"/\"))\n return { stdout: \"\", stderr: \"Volume unavailable\\n\", exitCode: 1 };\n\n let target: string | null = null;\n let evalCode: string | null = null;\n let printCode: string | null = null;\n const scriptArgs: string[] = [];\n let collectingArgs = false;\n\n for (let i = 0; i < params.length; i++) {\n if (collectingArgs) {\n scriptArgs.push(params[i]);\n continue;\n }\n if (params[i] === \"-e\" || params[i] === \"--eval\") {\n evalCode = params[++i] ?? \"\";\n } else if (params[i] === \"-p\" || params[i] === \"--print\") {\n printCode = params[++i] ?? \"\";\n } else if (params[i] === \"--version\" || params[i] === \"-v\") {\n return { stdout: VERSIONS.NODE + \"\\n\", stderr: \"\", exitCode: 0 };\n } else if (params[i] === \"--help\" || params[i] === \"-h\") {\n return {\n stdout: `${A_BOLD}Usage:${A_RESET} node [options] [script.js] [arguments]\\n`,\n stderr: \"\",\n exitCode: 0,\n };\n } else if (\n params[i] === \"-r\" ||\n params[i] === \"--require\" ||\n params[i] === \"--experimental-specifier-resolution\" ||\n params[i] === \"--loader\" ||\n params[i] === \"--import\"\n ) {\n i++;\n } else if (params[i].startsWith(\"-\")) {\n // skip unknown flags (--harmony, --inspect, etc.)\n } else {\n target = params[i];\n collectingArgs = true;\n }\n }\n\n if (evalCode !== null) {\n return deps.evalCode(evalCode, ctx);\n }\n if (printCode !== null) {\n return deps.printCode(printCode, ctx);\n }\n\n if (!target)\n return {\n stdout: \"\",\n stderr: `${A_BOLD}Usage:${A_RESET} node <file> [args...]\\n`,\n exitCode: 1,\n };\n\n return deps.executeNodeBinary(target, scriptArgs, ctx);\n },\n };\n}\n\nexport function createNpxCommand(deps: PmDeps): ShellCommand {\n return {\n name: \"npx\",\n async execute(params, ctx) {\n return deps.npxExecute(params, ctx);\n },\n };\n}\n","// optional CORS proxy for APIs that don't allow browser origins\n\nlet activeProxy: string | null = null;\n\nexport function setProxy(url: string | null): void {\n activeProxy = url;\n}\n\nexport function getProxy(): string | null {\n return activeProxy;\n}\n\nexport function isProxyActive(): boolean {\n return activeProxy !== null;\n}\n\nexport async function proxiedFetch(url: string, init?: RequestInit): Promise<Response> {\n if (activeProxy) {\n return fetch(activeProxy + encodeURIComponent(url), init);\n }\n return fetch(url, init);\n}\n\nexport function resolveProxyUrl(url: string): string {\n return activeProxy ? activeProxy + encodeURIComponent(url) : url;\n}\n","// Virtual git backed by the VFS (.git/ directories).\n// GitHub API support when GITHUB_TOKEN is set.\n\nimport type { ShellCommand, ShellContext, ShellResult } from \"../shell-types\";\nimport type { MemoryVolume } from \"../../memory-volume\";\nimport { ok, fail, RESET, DIM, GREEN, BOLD_RED, CYAN } from \"../shell-helpers\";\nimport { VERSIONS } from \"../../constants/config\";\nimport { proxiedFetch } from \"../../cross-origin\";\nimport * as pathModule from \"../../polyfills/path\";\nimport { createHash } from \"../../polyfills/crypto\";\n\n/* ------------------------------------------------------------------ */\n/* ANSI helpers */\n/* ------------------------------------------------------------------ */\n\nconst RED = \"\\x1b[31m\";\nconst YELLOW = \"\\x1b[33m\";\nconst BOLD = \"\\x1b[1m\";\n\n/* ------------------------------------------------------------------ */\n/* Types */\n/* ------------------------------------------------------------------ */\n\ninterface IndexEntry {\n path: string;\n hash: string;\n mode: number;\n mtime: number;\n}\n\ninterface CommitData {\n tree: string;\n parent: string | null;\n parent2?: string | null;\n author: string;\n committer: string;\n timestamp: number;\n message: string;\n}\n\ninterface TreeEntry {\n name: string;\n mode: string;\n type: \"blob\" | \"tree\";\n hash: string;\n}\n\ninterface DiffEntry {\n path: string;\n status: \"added\" | \"modified\" | \"deleted\";\n oldContent?: string;\n newContent?: string;\n}\n\ninterface EditOp {\n kind: \"equal\" | \"insert\" | \"delete\";\n oldIdx: number; // 0-based, -1 for inserts\n newIdx: number; // 0-based, -1 for deletes\n line: string;\n}\n\ninterface DiffHunk {\n oldStart: number; // 1-based\n oldCount: number;\n newStart: number; // 1-based\n newCount: number;\n lines: EditOp[];\n}\n\n/* ------------------------------------------------------------------ */\n/* Myers diff algorithm */\n/* ------------------------------------------------------------------ */\n\n// Myers O(ND) diff with backtracking\nfunction myersDiff(oldLines: string[], newLines: string[]): EditOp[] {\n const N = oldLines.length;\n const M = newLines.length;\n const MAX = N + M;\n\n if (MAX === 0) return [];\n\n const vHistory: Map<number, number>[] = [];\n const v = new Map<number, number>();\n v.set(1, 0);\n\n let foundD = -1;\n\n outer:\n for (let d = 0; d <= MAX; d++) {\n vHistory.push(new Map(v));\n\n for (let k = -d; k <= d; k += 2) {\n let x: number;\n if (k === -d || (k !== d && (v.get(k - 1) ?? 0) < (v.get(k + 1) ?? 0))) {\n x = v.get(k + 1) ?? 0;\n } else {\n x = (v.get(k - 1) ?? 0) + 1;\n }\n let y = x - k;\n\n while (x < N && y < M && oldLines[x] === newLines[y]) {\n x++;\n y++;\n }\n\n v.set(k, x);\n\n if (x >= N && y >= M) {\n foundD = d;\n break outer;\n }\n }\n }\n\n if (foundD < 0) foundD = MAX;\n\n let x = N;\n let y = M;\n const ops: EditOp[] = [];\n\n for (let d = foundD; d > 0; d--) {\n const vPrev = vHistory[d];\n const k = x - y;\n let prevK: number;\n\n if (k === -d || (k !== d && (vPrev.get(k - 1) ?? 0) < (vPrev.get(k + 1) ?? 0))) {\n prevK = k + 1;\n } else {\n prevK = k - 1;\n }\n\n const prevX = vPrev.get(prevK) ?? 0;\n const prevY = prevX - prevK;\n\n while (x > prevX && y > prevY) {\n x--;\n y--;\n ops.push({ kind: \"equal\", oldIdx: x, newIdx: y, line: oldLines[x] });\n }\n\n if (d > 0) {\n if (x === prevX) {\n y--;\n ops.push({ kind: \"insert\", oldIdx: -1, newIdx: y, line: newLines[y] });\n } else {\n x--;\n ops.push({ kind: \"delete\", oldIdx: x, newIdx: -1, line: oldLines[x] });\n }\n }\n }\n\n while (x > 0 && y > 0) {\n x--;\n y--;\n ops.push({ kind: \"equal\", oldIdx: x, newIdx: y, line: oldLines[x] });\n }\n\n ops.reverse();\n return ops;\n}\n\nfunction buildHunks(ops: EditOp[], contextLines = 3): DiffHunk[] {\n const hunks: DiffHunk[] = [];\n if (ops.length === 0) return hunks;\n\n const changeIndices: number[] = [];\n for (let i = 0; i < ops.length; i++) {\n if (ops[i].kind !== \"equal\") changeIndices.push(i);\n }\n if (changeIndices.length === 0) return hunks;\n\n let groupStart = changeIndices[0];\n let groupEnd = changeIndices[0];\n\n const groups: Array<[number, number]> = [];\n\n for (let i = 1; i < changeIndices.length; i++) {\n if (changeIndices[i] - groupEnd <= contextLines * 2) {\n groupEnd = changeIndices[i];\n } else {\n groups.push([groupStart, groupEnd]);\n groupStart = changeIndices[i];\n groupEnd = changeIndices[i];\n }\n }\n groups.push([groupStart, groupEnd]);\n\n for (const [gStart, gEnd] of groups) {\n const hunkOpsStart = Math.max(0, gStart - contextLines);\n const hunkOpsEnd = Math.min(ops.length - 1, gEnd + contextLines);\n\n const hunkOps = ops.slice(hunkOpsStart, hunkOpsEnd + 1);\n\n let oldStart = Infinity;\n let newStart = Infinity;\n let oldCount = 0;\n let newCount = 0;\n\n for (const op of hunkOps) {\n if (op.kind === \"equal\") {\n if (op.oldIdx < oldStart) oldStart = op.oldIdx;\n if (op.newIdx < newStart) newStart = op.newIdx;\n oldCount++;\n newCount++;\n } else if (op.kind === \"delete\") {\n if (op.oldIdx < oldStart) oldStart = op.oldIdx;\n oldCount++;\n } else {\n if (op.newIdx < newStart) newStart = op.newIdx;\n newCount++;\n }\n }\n\n hunks.push({\n oldStart: (oldStart === Infinity ? 0 : oldStart) + 1,\n oldCount,\n newStart: (newStart === Infinity ? 0 : newStart) + 1,\n newCount,\n lines: hunkOps,\n });\n }\n\n return hunks;\n}\n\nfunction countChanges(ops: EditOp[]): { insertions: number; deletions: number } {\n let insertions = 0;\n let deletions = 0;\n for (const op of ops) {\n if (op.kind === \"insert\") insertions++;\n else if (op.kind === \"delete\") deletions++;\n }\n return { insertions, deletions };\n}\n\ninterface StashEntry {\n message: string;\n commitHash: string;\n}\n\n/* ------------------------------------------------------------------ */\n/* GitRepo — core operations against the VFS */\n/* ------------------------------------------------------------------ */\n\nclass GitRepo {\n private vol: MemoryVolume;\n readonly gitDir: string;\n readonly workDir: string;\n\n constructor(vol: MemoryVolume, workDir: string, gitDir: string) {\n this.vol = vol;\n this.workDir = workDir;\n this.gitDir = gitDir;\n }\n\n /* -- object store -- */\n\n private readStore(): Record<string, { type: string; data: string }> {\n try {\n const raw = this.vol.readFileSync(this.gitDir + \"/objects/store.json\", \"utf8\" as any) as string;\n return JSON.parse(raw);\n } catch {\n return {};\n }\n }\n\n private writeStore(store: Record<string, { type: string; data: string }>): void {\n this.vol.writeFileSync(this.gitDir + \"/objects/store.json\", JSON.stringify(store));\n }\n\n hashContent(type: string, content: string): string {\n const header = `${type} ${content.length}\\0`;\n return createHash(\"sha1\").update(header + content).digest(\"hex\") as string;\n }\n\n writeObject(type: string, content: string): string {\n const hash = this.hashContent(type, content);\n const store = this.readStore();\n if (!store[hash]) {\n store[hash] = { type, data: content };\n this.writeStore(store);\n }\n return hash;\n }\n\n readObject(hash: string): { type: string; data: string } | null {\n const store = this.readStore();\n return store[hash] ?? null;\n }\n\n /* -- index (staging area) -- */\n\n readIndex(): IndexEntry[] {\n try {\n const raw = this.vol.readFileSync(this.gitDir + \"/index\", \"utf8\" as any) as string;\n return JSON.parse(raw).entries ?? [];\n } catch {\n return [];\n }\n }\n\n writeIndex(entries: IndexEntry[]): void {\n this.vol.writeFileSync(this.gitDir + \"/index\", JSON.stringify({ entries }));\n }\n\n addToIndex(relPath: string, content: string): void {\n const hash = this.writeObject(\"blob\", content);\n const entries = this.readIndex();\n const idx = entries.findIndex((e) => e.path === relPath);\n const entry: IndexEntry = { path: relPath, hash, mode: 100644, mtime: Date.now() };\n if (idx >= 0) entries[idx] = entry;\n else entries.push(entry);\n entries.sort((a, b) => a.path.localeCompare(b.path));\n this.writeIndex(entries);\n }\n\n removeFromIndex(relPath: string): void {\n const entries = this.readIndex().filter((e) => e.path !== relPath);\n this.writeIndex(entries);\n }\n\n /* -- refs -- */\n\n getHEAD(): string {\n try {\n return (this.vol.readFileSync(this.gitDir + \"/HEAD\", \"utf8\" as any) as string).trim();\n } catch {\n return \"ref: refs/heads/main\";\n }\n }\n\n setHEAD(value: string): void {\n this.vol.writeFileSync(this.gitDir + \"/HEAD\", value + \"\\n\");\n }\n\n getCurrentBranch(): string | null {\n const head = this.getHEAD();\n if (head.startsWith(\"ref: refs/heads/\")) return head.slice(16);\n return null;\n }\n\n resolveRef(ref: string): string | null {\n if (/^[0-9a-f]{40}$/.test(ref)) return ref;\n if (ref.startsWith(\"ref: \")) {\n const target = ref.slice(5);\n try {\n return (this.vol.readFileSync(this.gitDir + \"/\" + target, \"utf8\" as any) as string).trim();\n } catch {\n return null;\n }\n }\n // try branch, then tag\n try {\n return (this.vol.readFileSync(this.gitDir + \"/refs/heads/\" + ref, \"utf8\" as any) as string).trim();\n } catch { /* */ }\n try {\n return (this.vol.readFileSync(this.gitDir + \"/refs/tags/\" + ref, \"utf8\" as any) as string).trim();\n } catch { /* */ }\n return null;\n }\n\n resolveHEAD(): string | null {\n return this.resolveRef(this.getHEAD());\n }\n\n updateBranchRef(branch: string, hash: string): void {\n const refPath = this.gitDir + \"/refs/heads/\" + branch;\n const dir = refPath.substring(0, refPath.lastIndexOf(\"/\"));\n if (!this.vol.existsSync(dir)) this.vol.mkdirSync(dir, { recursive: true });\n this.vol.writeFileSync(refPath, hash + \"\\n\");\n }\n\n listBranches(): string[] {\n try {\n return this.vol.readdirSync(this.gitDir + \"/refs/heads\") as string[];\n } catch {\n return [];\n }\n }\n\n deleteBranch(name: string): boolean {\n try {\n const refPath = this.gitDir + \"/refs/heads/\" + name;\n if (this.vol.existsSync(refPath)) {\n this.vol.unlinkSync(refPath);\n return true;\n }\n } catch { /* */ }\n return false;\n }\n\n /* -- config -- */\n\n readConfig(): string {\n try {\n return this.vol.readFileSync(this.gitDir + \"/config\", \"utf8\" as any) as string;\n } catch {\n return \"\";\n }\n }\n\n writeConfig(content: string): void {\n this.vol.writeFileSync(this.gitDir + \"/config\", content);\n }\n\n getConfigValue(key: string): string | null {\n const config = this.readConfig();\n const parts = key.split(\".\");\n if (parts.length < 2) return null;\n\n // e.g. remote.origin.url → [remote \"origin\"] / url\n let sectionName: string;\n let subSection: string | null = null;\n let propName: string;\n\n if (parts.length === 3) {\n sectionName = parts[0];\n subSection = parts[1];\n propName = parts[2];\n } else {\n sectionName = parts[0];\n propName = parts[1];\n }\n\n const lines = config.split(\"\\n\");\n let inSection = false;\n for (const line of lines) {\n const trimmed = line.trim();\n if (trimmed.startsWith(\"[\")) {\n if (subSection) {\n const pat = `[${sectionName} \"${subSection}\"]`;\n inSection = trimmed === pat;\n } else {\n inSection = trimmed === `[${sectionName}]`;\n }\n continue;\n }\n if (inSection) {\n const match = trimmed.match(/^(\\w+)\\s*=\\s*(.*)$/);\n if (match && match[1] === propName) return match[2].trim();\n }\n }\n return null;\n }\n\n setConfigValue(key: string, value: string): void {\n const parts = key.split(\".\");\n let sectionHeader: string;\n let propName: string;\n\n if (parts.length === 3) {\n sectionHeader = `[${parts[0]} \"${parts[1]}\"]`;\n propName = parts[2];\n } else if (parts.length === 2) {\n sectionHeader = `[${parts[0]}]`;\n propName = parts[1];\n } else {\n return;\n }\n\n const config = this.readConfig();\n const lines = config.split(\"\\n\");\n let sectionIdx = -1;\n let propIdx = -1;\n let inSection = false;\n let lastLineInSection = -1;\n\n for (let i = 0; i < lines.length; i++) {\n const trimmed = lines[i].trim();\n if (trimmed.startsWith(\"[\")) {\n if (inSection && propIdx === -1) lastLineInSection = i - 1;\n inSection = trimmed === sectionHeader;\n if (inSection) sectionIdx = i;\n continue;\n }\n if (inSection) {\n lastLineInSection = i;\n const match = trimmed.match(/^(\\w+)\\s*=\\s*(.*)$/);\n if (match && match[1] === propName) propIdx = i;\n }\n }\n if (inSection && lastLineInSection === -1) lastLineInSection = sectionIdx;\n\n if (propIdx >= 0) {\n lines[propIdx] = `\\t${propName} = ${value}`;\n } else if (sectionIdx >= 0) {\n lines.splice(lastLineInSection + 1, 0, `\\t${propName} = ${value}`);\n } else {\n if (lines.length > 0 && lines[lines.length - 1] !== \"\") lines.push(\"\");\n lines.push(sectionHeader);\n lines.push(`\\t${propName} = ${value}`);\n }\n\n this.writeConfig(lines.join(\"\\n\"));\n }\n\n /* -- tree building -- */\n\n buildTree(entries: IndexEntry[]): string {\n const root: TreeEntry[] = [];\n const subdirs = new Map<string, IndexEntry[]>();\n\n for (const e of entries) {\n const slashIdx = e.path.indexOf(\"/\");\n if (slashIdx === -1) {\n root.push({ name: e.path, mode: String(e.mode), type: \"blob\", hash: e.hash });\n } else {\n const dir = e.path.substring(0, slashIdx);\n const rest: IndexEntry = { ...e, path: e.path.substring(slashIdx + 1) };\n if (!subdirs.has(dir)) subdirs.set(dir, []);\n subdirs.get(dir)!.push(rest);\n }\n }\n\n for (const [dir, subEntries] of subdirs) {\n const treeHash = this.buildTree(subEntries);\n root.push({ name: dir, mode: \"40000\", type: \"tree\", hash: treeHash });\n }\n\n root.sort((a, b) => a.name.localeCompare(b.name));\n const treeContent = JSON.stringify(root);\n return this.writeObject(\"tree\", treeContent);\n }\n\n /* -- commits -- */\n\n createCommit(message: string, parent: string | null, tree: string, parent2?: string | null): string {\n const author = `${this.getConfigValue(\"user.name\") ?? \"nodepod-user\"} <${this.getConfigValue(\"user.email\") ?? \"user@nodepod.dev\"}>`;\n const data: CommitData = {\n tree,\n parent,\n author,\n committer: author,\n timestamp: Date.now(),\n message,\n };\n if (parent2) data.parent2 = parent2;\n return this.writeObject(\"commit\", JSON.stringify(data));\n }\n\n readCommit(hash: string): CommitData | null {\n const obj = this.readObject(hash);\n if (!obj || obj.type !== \"commit\") return null;\n return JSON.parse(obj.data);\n }\n\n walkLog(startHash: string | null, limit: number): Array<{ hash: string } & CommitData> {\n const result: Array<{ hash: string } & CommitData> = [];\n let current = startHash;\n while (current && result.length < limit) {\n const commit = this.readCommit(current);\n if (!commit) break;\n result.push({ hash: current, ...commit });\n current = commit.parent;\n }\n return result;\n }\n\n /* -- working tree helpers -- */\n\n getCommitTree(commitHash: string): Map<string, string> {\n const commit = this.readCommit(commitHash);\n if (!commit) return new Map();\n return this.flattenTree(commit.tree, \"\");\n }\n\n private flattenTree(treeHash: string, prefix: string): Map<string, string> {\n const obj = this.readObject(treeHash);\n if (!obj || obj.type !== \"tree\") return new Map();\n const entries: TreeEntry[] = JSON.parse(obj.data);\n const result = new Map<string, string>();\n for (const e of entries) {\n const fullPath = prefix ? prefix + \"/\" + e.name : e.name;\n if (e.type === \"blob\") {\n result.set(fullPath, e.hash);\n } else {\n for (const [k, v] of this.flattenTree(e.hash, fullPath)) {\n result.set(k, v);\n }\n }\n }\n return result;\n }\n\n getBlobContent(hash: string): string | null {\n const obj = this.readObject(hash);\n if (!obj || obj.type !== \"blob\") return null;\n return obj.data;\n }\n\n /* -- diff helpers -- */\n\n diffWorkingVsIndex(): DiffEntry[] {\n const index = this.readIndex();\n const indexMap = new Map(index.map((e) => [e.path, e.hash]));\n const result: DiffEntry[] = [];\n const seen = new Set<string>();\n\n this.walkWorkTree(this.workDir, \"\", (relPath, content) => {\n seen.add(relPath);\n const currentHash = this.hashContent(\"blob\", content);\n const indexHash = indexMap.get(relPath);\n if (!indexHash) {\n // untracked, handled separately\n } else if (currentHash !== indexHash) {\n result.push({ path: relPath, status: \"modified\", oldContent: this.getBlobContent(indexHash) ?? \"\", newContent: content });\n }\n });\n\n for (const e of index) {\n if (!seen.has(e.path)) {\n result.push({ path: e.path, status: \"deleted\", oldContent: this.getBlobContent(e.hash) ?? \"\" });\n }\n }\n\n return result;\n }\n\n diffIndexVsHEAD(): DiffEntry[] {\n const index = this.readIndex();\n const headHash = this.resolveHEAD();\n const headTree = headHash ? this.getCommitTree(headHash) : new Map<string, string>();\n const result: DiffEntry[] = [];\n\n const indexMap = new Map(index.map((e) => [e.path, e.hash]));\n\n for (const e of index) {\n const headBlobHash = headTree.get(e.path);\n if (!headBlobHash) {\n result.push({ path: e.path, status: \"added\" });\n } else if (headBlobHash !== e.hash) {\n result.push({ path: e.path, status: \"modified\" });\n }\n }\n\n for (const [path] of headTree) {\n if (!indexMap.has(path)) {\n result.push({ path, status: \"deleted\" });\n }\n }\n\n return result;\n }\n\n getUntrackedFiles(): string[] {\n const index = this.readIndex();\n const indexPaths = new Set(index.map((e) => e.path));\n const untracked: string[] = [];\n\n this.walkWorkTree(this.workDir, \"\", (relPath) => {\n if (!indexPaths.has(relPath)) untracked.push(relPath);\n });\n\n return untracked.sort();\n }\n\n /* -- file tree walker -- */\n\n walkWorkTree(dir: string, prefix: string, cb: (relPath: string, content: string) => void): void {\n let entries: string[];\n try {\n entries = this.vol.readdirSync(dir) as string[];\n } catch {\n return;\n }\n for (const name of entries) {\n if (name === \".git\" || name === \"node_modules\") continue;\n const fullPath = dir + \"/\" + name;\n try {\n const stat = this.vol.statSync(fullPath);\n if (stat.isDirectory()) {\n this.walkWorkTree(fullPath, prefix ? prefix + \"/\" + name : name, cb);\n } else if (stat.isFile()) {\n const relPath = prefix ? prefix + \"/\" + name : name;\n const content = this.vol.readFileSync(fullPath, \"utf8\" as any) as string;\n cb(relPath, content);\n }\n } catch { /* skip unreadable */ }\n }\n }\n\n /* -- stash -- */\n\n readStashList(): StashEntry[] {\n try {\n const raw = this.vol.readFileSync(this.gitDir + \"/refs/stash\", \"utf8\" as any) as string;\n return JSON.parse(raw);\n } catch {\n return [];\n }\n }\n\n writeStashList(list: StashEntry[]): void {\n const dir = this.gitDir + \"/refs\";\n if (!this.vol.existsSync(dir)) this.vol.mkdirSync(dir, { recursive: true });\n this.vol.writeFileSync(this.gitDir + \"/refs/stash\", JSON.stringify(list));\n }\n\n /* -- remote helpers -- */\n\n getRemoteUrl(name: string): string | null {\n return this.getConfigValue(`remote.${name}.url`);\n }\n\n parseGitHubUrl(url: string): { owner: string; repo: string } | null {\n let m = url.match(/github\\.com\\/([^/]+)\\/([^/.]+?)(?:\\.git)?$/);\n if (m) return { owner: m[1], repo: m[2] };\n m = url.match(/github\\.com:([^/]+)\\/([^/.]+?)(?:\\.git)?$/);\n if (m) return { owner: m[1], repo: m[2] };\n return null;\n }\n}\n\n/* ------------------------------------------------------------------ */\n/* GitHub API helper */\n/* ------------------------------------------------------------------ */\n\nasync function githubApi(\n path: string,\n token: string,\n method = \"GET\",\n body?: any,\n): Promise<{ ok: boolean; status: number; data: any }> {\n const url = `https://api.github.com${path}`;\n const headers: Record<string, string> = {\n Accept: \"application/vnd.github.v3+json\",\n Authorization: `token ${token}`,\n \"User-Agent\": \"nodepod-git\",\n };\n if (body) headers[\"Content-Type\"] = \"application/json\";\n\n const resp = await proxiedFetch(url, {\n method,\n headers,\n body: body ? JSON.stringify(body) : undefined,\n });\n\n let data: any;\n try {\n data = await resp.json();\n } catch {\n data = null;\n }\n return { ok: resp.ok, status: resp.status, data };\n}\n\n/* ------------------------------------------------------------------ */\n/* Find .git directory */\n/* ------------------------------------------------------------------ */\n\nfunction findGitDir(vol: MemoryVolume, cwd: string): { gitDir: string; workDir: string } | null {\n let dir = cwd;\n while (true) {\n const gitPath = dir + \"/.git\";\n try {\n if (vol.existsSync(gitPath)) return { gitDir: gitPath, workDir: dir };\n } catch { /* */ }\n const parent = dir.substring(0, dir.lastIndexOf(\"/\")) || \"/\";\n if (parent === dir) break;\n dir = parent;\n }\n if (vol.existsSync(\"/.git\")) return { gitDir: \"/.git\", workDir: \"/\" };\n return null;\n}\n\nfunction requireRepo(vol: MemoryVolume, cwd: string): { repo: GitRepo } | { error: ShellResult } {\n const found = findGitDir(vol, cwd);\n if (!found) {\n return { error: fail(\"fatal: not a git repository (or any of the parent directories): .git\\n\", 128) };\n }\n return { repo: new GitRepo(vol, found.workDir, found.gitDir) };\n}\n\n/* ------------------------------------------------------------------ */\n/* Subcommand handlers */\n/* ------------------------------------------------------------------ */\n\nfunction gitInit(args: string[], ctx: ShellContext): ShellResult {\n let target = ctx.cwd;\n for (const a of args) {\n if (!a.startsWith(\"-\")) {\n target = pathModule.resolve(ctx.cwd, a);\n break;\n }\n }\n\n const gitDir = target + \"/.git\";\n if (ctx.volume.existsSync(gitDir)) {\n return ok(`Reinitialized existing Git repository in ${gitDir}/\\n`);\n }\n\n const dirs = [\n gitDir,\n gitDir + \"/objects\",\n gitDir + \"/refs\",\n gitDir + \"/refs/heads\",\n gitDir + \"/refs/tags\",\n ];\n for (const d of dirs) {\n if (!ctx.volume.existsSync(d)) ctx.volume.mkdirSync(d, { recursive: true });\n }\n\n ctx.volume.writeFileSync(gitDir + \"/HEAD\", \"ref: refs/heads/main\\n\");\n ctx.volume.writeFileSync(\n gitDir + \"/config\",\n \"[core]\\n\\tbare = false\\n\\tfilemode = false\\n[user]\\n\\tname = nodepod-user\\n\\temail = user@nodepod.dev\\n\",\n );\n ctx.volume.writeFileSync(gitDir + \"/objects/store.json\", \"{}\");\n ctx.volume.writeFileSync(gitDir + \"/index\", '{\"entries\":[]}');\n\n if (!ctx.volume.existsSync(target)) ctx.volume.mkdirSync(target, { recursive: true });\n\n return ok(`Initialized empty Git repository in ${gitDir}/\\n`);\n}\n\nfunction gitAdd(args: string[], ctx: ShellContext): ShellResult {\n const r = requireRepo(ctx.volume, ctx.cwd);\n if (\"error\" in r) return r.error;\n const { repo } = r;\n\n const addAll = args.includes(\"-A\") || args.includes(\"--all\") || args.includes(\".\");\n const pathspecs = addAll ? [] : args.filter((a) => !a.startsWith(\"-\"));\n\n if (!addAll && pathspecs.length === 0) {\n return fail(\"Nothing specified, nothing added.\\n\");\n }\n\n if (addAll) {\n repo.walkWorkTree(repo.workDir, \"\", (relPath, content) => {\n repo.addToIndex(relPath, content);\n });\n const index = repo.readIndex();\n const toRemove: string[] = [];\n for (const e of index) {\n const fullPath = repo.workDir + \"/\" + e.path;\n if (!ctx.volume.existsSync(fullPath)) toRemove.push(e.path);\n }\n for (const p of toRemove) repo.removeFromIndex(p);\n } else {\n for (const spec of pathspecs) {\n const absPath = pathModule.resolve(ctx.cwd, spec);\n const relPath = pathModule.relative(repo.workDir, absPath);\n if (relPath.startsWith(\"..\")) continue;\n\n if (ctx.volume.existsSync(absPath)) {\n try {\n const stat = ctx.volume.statSync(absPath);\n if (stat.isDirectory()) {\n repo.walkWorkTree(absPath, relPath, (rp, content) => {\n repo.addToIndex(rp, content);\n });\n } else {\n const content = ctx.volume.readFileSync(absPath, \"utf8\" as any) as string;\n repo.addToIndex(relPath, content);\n }\n } catch { /* skip */ }\n } else {\n repo.removeFromIndex(relPath);\n }\n }\n }\n\n return ok(\"\");\n}\n\nfunction gitStatus(args: string[], ctx: ShellContext): ShellResult {\n const r = requireRepo(ctx.volume, ctx.cwd);\n if (\"error\" in r) return r.error;\n const { repo } = r;\n\n const short = args.includes(\"-s\") || args.includes(\"--short\");\n const porcelain = args.includes(\"--porcelain\");\n\n const staged = repo.diffIndexVsHEAD();\n const unstaged = repo.diffWorkingVsIndex();\n const untracked = repo.getUntrackedFiles();\n\n if (short || porcelain) {\n let out = \"\";\n for (const d of staged) {\n const code = d.status === \"added\" ? \"A\" : d.status === \"deleted\" ? \"D\" : \"M\";\n out += `${code} ${d.path}\\n`;\n }\n for (const d of unstaged) {\n const code = d.status === \"deleted\" ? \"D\" : \"M\";\n out += ` ${code} ${d.path}\\n`;\n }\n for (const p of untracked) {\n out += `?? ${p}\\n`;\n }\n return ok(out);\n }\n\n const branch = repo.getCurrentBranch() ?? \"(HEAD detached)\";\n let out = `On branch ${branch}\\n`;\n\n if (staged.length === 0 && unstaged.length === 0 && untracked.length === 0) {\n out += \"nothing to commit, working tree clean\\n\";\n return ok(out);\n }\n\n if (staged.length > 0) {\n out += `\\nChanges to be committed:\\n`;\n out += ` (use \"git restore --staged <file>...\" to unstage)\\n`;\n for (const d of staged) {\n const label = d.status === \"added\" ? \"new file\" : d.status === \"deleted\" ? \"deleted\" : \"modified\";\n out += `\\t${GREEN}${label}: ${d.path}${RESET}\\n`;\n }\n }\n\n if (unstaged.length > 0) {\n out += `\\nChanges not staged for commit:\\n`;\n out += ` (use \"git add <file>...\" to update what will be committed)\\n`;\n for (const d of unstaged) {\n const label = d.status === \"deleted\" ? \"deleted\" : \"modified\";\n out += `\\t${RED}${label}: ${d.path}${RESET}\\n`;\n }\n }\n\n if (untracked.length > 0) {\n out += `\\nUntracked files:\\n`;\n out += ` (use \"git add <file>...\" to include in what will be committed)\\n`;\n for (const p of untracked) {\n out += `\\t${RED}${p}${RESET}\\n`;\n }\n }\n\n return ok(out);\n}\n\nfunction gitCommit(args: string[], ctx: ShellContext): ShellResult {\n const r = requireRepo(ctx.volume, ctx.cwd);\n if (\"error\" in r) return r.error;\n const { repo } = r;\n\n let message: string | null = null;\n let autoStage = false;\n let allowEmpty = false;\n\n for (let i = 0; i < args.length; i++) {\n if (args[i] === \"-m\" || args[i] === \"--message\") {\n message = args[++i] ?? \"\";\n } else if (args[i] === \"-a\" || args[i] === \"--all\") {\n autoStage = true;\n } else if (args[i] === \"--allow-empty\") {\n allowEmpty = true;\n } else if (args[i] === \"--allow-empty-message\") {\n /* */\n } else if (args[i].startsWith(\"-m\")) {\n message = args[i].slice(2);\n }\n }\n\n if (message === null) {\n return fail(\"error: switch `m' requires a value\\n\");\n }\n\n if (autoStage) {\n const index = repo.readIndex();\n for (const e of index) {\n const fullPath = repo.workDir + \"/\" + e.path;\n if (ctx.volume.existsSync(fullPath)) {\n try {\n const content = ctx.volume.readFileSync(fullPath, \"utf8\" as any) as string;\n repo.addToIndex(e.path, content);\n } catch { /* */ }\n } else {\n repo.removeFromIndex(e.path);\n }\n }\n }\n\n const entries = repo.readIndex();\n const staged = repo.diffIndexVsHEAD();\n\n if (staged.length === 0 && !allowEmpty) {\n return fail(\"nothing to commit, working tree clean\\n\");\n }\n\n const treeHash = repo.buildTree(entries);\n const parent = repo.resolveHEAD();\n const commitHash = repo.createCommit(message, parent, treeHash);\n\n const branch = repo.getCurrentBranch();\n if (branch) {\n repo.updateBranchRef(branch, commitHash);\n } else {\n repo.setHEAD(commitHash);\n }\n\n const shortHash = commitHash.slice(0, 7);\n const branchLabel = branch ?? \"HEAD\";\n const isRoot = !parent;\n const out = `[${branchLabel}${isRoot ? \" (root-commit)\" : \"\"} ${shortHash}] ${message}\\n` +\n ` ${staged.length} file${staged.length !== 1 ? \"s\" : \"\"} changed\\n`;\n\n return ok(out);\n}\n\nfunction gitLog(args: string[], ctx: ShellContext): ShellResult {\n const r = requireRepo(ctx.volume, ctx.cwd);\n if (\"error\" in r) return r.error;\n const { repo } = r;\n\n let limit = 50;\n let oneline = false;\n let format: string | null = null;\n\n for (let i = 0; i < args.length; i++) {\n if (args[i] === \"--oneline\") {\n oneline = true;\n } else if (args[i] === \"-n\" || args[i] === \"--max-count\") {\n limit = parseInt(args[++i], 10) || 50;\n } else if (args[i].startsWith(\"-\") && /^-\\d+$/.test(args[i])) {\n limit = parseInt(args[i].slice(1), 10) || 50;\n } else if (args[i].startsWith(\"--format=\")) {\n format = args[i].slice(9);\n } else if (args[i].startsWith(\"--pretty=format:\")) {\n format = args[i].slice(16);\n } else if (args[i].startsWith(\"--pretty=\")) {\n format = args[i].slice(9);\n }\n }\n\n const head = repo.resolveHEAD();\n if (!head) return ok(\"\");\n\n const commits = repo.walkLog(head, limit);\n if (commits.length === 0) return ok(\"\");\n\n const currentBranch = repo.getCurrentBranch();\n let out = \"\";\n\n for (const c of commits) {\n if (format !== null) {\n let line = format\n .replace(/%H/g, c.hash)\n .replace(/%h/g, c.hash.slice(0, 7))\n .replace(/%s/g, c.message.split(\"\\n\")[0])\n .replace(/%an/g, c.author.split(\" <\")[0])\n .replace(/%ae/g, (c.author.match(/<(.+?)>/) ?? [\"\", \"\"])[1])\n .replace(/%d/g, c.hash === head && currentBranch ? ` (HEAD -> ${currentBranch})` : \"\")\n .replace(/%n/g, \"\\n\");\n out += line + \"\\n\";\n } else if (oneline) {\n const decoration = c.hash === head && currentBranch ? ` ${YELLOW}(HEAD -> ${CYAN}${currentBranch}${YELLOW})${RESET}` : \"\";\n out += `${YELLOW}${c.hash.slice(0, 7)}${RESET}${decoration} ${c.message.split(\"\\n\")[0]}\\n`;\n } else {\n const decoration = c.hash === head && currentBranch ? ` ${YELLOW}(HEAD -> ${CYAN}${currentBranch}${YELLOW})${RESET}` : \"\";\n out += `${YELLOW}commit ${c.hash}${RESET}${decoration}\\n`;\n out += `Author: ${c.author}\\n`;\n out += `Date: ${new Date(c.timestamp).toUTCString()}\\n`;\n out += `\\n ${c.message}\\n\\n`;\n }\n }\n\n return ok(out);\n}\n\nfunction gitDiff(args: string[], ctx: ShellContext): ShellResult {\n const r = requireRepo(ctx.volume, ctx.cwd);\n if (\"error\" in r) return r.error;\n const { repo } = r;\n\n const staged = args.includes(\"--staged\") || args.includes(\"--cached\");\n const stat = args.includes(\"--stat\");\n\n let diffs: DiffEntry[];\n if (staged) {\n diffs = repo.diffIndexVsHEAD();\n const headHash = repo.resolveHEAD();\n const headTree = headHash ? repo.getCommitTree(headHash) : new Map<string, string>();\n const index = repo.readIndex();\n const indexMap = new Map(index.map((e) => [e.path, e.hash]));\n for (const d of diffs) {\n const oldHash = headTree.get(d.path);\n const newHash = indexMap.get(d.path);\n d.oldContent = oldHash ? repo.getBlobContent(oldHash) ?? \"\" : \"\";\n d.newContent = newHash ? repo.getBlobContent(newHash) ?? \"\" : \"\";\n }\n } else {\n diffs = repo.diffWorkingVsIndex();\n }\n\n if (diffs.length === 0) return ok(\"\");\n\n if (stat) {\n let out = \"\";\n let totalIns = 0;\n let totalDel = 0;\n for (const d of diffs) {\n const oldLines = d.oldContent ? d.oldContent.split(\"\\n\") : [];\n const newLines = d.newContent ? d.newContent.split(\"\\n\") : [];\n const ops = myersDiff(oldLines, newLines);\n const { insertions: ins, deletions: del } = countChanges(ops);\n totalIns += ins;\n totalDel += del;\n out += ` ${d.path} | ${ins + del} ${GREEN}${\"+\"\n .repeat(ins)}${RED}${\"-\".repeat(del)}${RESET}\\n`;\n }\n out += ` ${diffs.length} file${diffs.length !== 1 ? \"s\" : \"\"} changed`;\n if (totalIns > 0) out += `, ${totalIns} insertion${totalIns !== 1 ? \"s\" : \"\"}(+)`;\n if (totalDel > 0) out += `, ${totalDel} deletion${totalDel !== 1 ? \"s\" : \"\"}(-)`;\n out += \"\\n\";\n return ok(out);\n }\n\n let out = \"\";\n for (const d of diffs) {\n const oldLines = d.oldContent ? d.oldContent.split(\"\\n\") : [];\n const newLines = d.newContent ? d.newContent.split(\"\\n\") : [];\n\n out += `${BOLD}diff --git a/${d.path} b/${d.path}${RESET}\\n`;\n if (d.status === \"added\") out += \"new file mode 100644\\n\";\n if (d.status === \"deleted\") out += \"deleted file mode 100644\\n\";\n out += `--- ${d.status === \"added\" ? \"/dev/null\" : \"a/\" + d.path}\\n`;\n out += `+++ ${d.status === \"deleted\" ? \"/dev/null\" : \"b/\" + d.path}\\n`;\n\n const ops = myersDiff(oldLines, newLines);\n const hunks = buildHunks(ops, 3);\n\n for (const hunk of hunks) {\n out += `${CYAN}@@ -${hunk.oldStart},${hunk.oldCount} +${hunk.newStart},${hunk.newCount} @@${RESET}\\n`;\n for (const op of hunk.lines) {\n if (op.kind === \"equal\") {\n out += ` ${op.line}\\n`;\n } else if (op.kind === \"delete\") {\n out += `${RED}-${op.line}${RESET}\\n`;\n } else {\n out += `${GREEN}+${op.line}${RESET}\\n`;\n }\n }\n }\n }\n\n return ok(out);\n}\n\nfunction gitBranch(args: string[], ctx: ShellContext): ShellResult {\n const r = requireRepo(ctx.volume, ctx.cwd);\n if (\"error\" in r) return r.error;\n const { repo } = r;\n\n if (args.includes(\"--show-current\")) {\n const branch = repo.getCurrentBranch();\n return ok(branch ? branch + \"\\n\" : \"\\n\");\n }\n\n const deleteIdx = args.indexOf(\"-d\") !== -1 ? args.indexOf(\"-d\") : args.indexOf(\"-D\");\n if (deleteIdx >= 0) {\n const name = args[deleteIdx + 1];\n if (!name) return fail(\"error: branch name required\\n\");\n if (name === repo.getCurrentBranch()) {\n return fail(`error: Cannot delete branch '${name}' checked out.\\n`);\n }\n if (repo.deleteBranch(name)) {\n return ok(`Deleted branch ${name}.\\n`);\n }\n return fail(`error: branch '${name}' not found.\\n`);\n }\n\n const renameIdx = args.indexOf(\"-m\");\n if (renameIdx >= 0) {\n const oldName = args[renameIdx + 1];\n const newName = args[renameIdx + 2];\n if (!oldName || !newName) return fail(\"error: too few arguments to rename\\n\");\n const hash = repo.resolveRef(oldName);\n if (!hash) return fail(`error: refname ${oldName} not a valid ref\\n`);\n repo.updateBranchRef(newName, hash);\n repo.deleteBranch(oldName);\n if (repo.getCurrentBranch() === oldName) {\n repo.setHEAD(\"ref: refs/heads/\" + newName);\n }\n return ok(`Branch '${oldName}' renamed to '${newName}'.\\n`);\n }\n\n const nonFlags = args.filter((a) => !a.startsWith(\"-\"));\n if (nonFlags.length > 0) {\n const name = nonFlags[0];\n const startPoint = nonFlags[1];\n const hash = startPoint ? repo.resolveRef(startPoint) : repo.resolveHEAD();\n if (!hash) return fail(`fatal: not a valid object name: '${startPoint ?? \"HEAD\"}'\\n`, 128);\n repo.updateBranchRef(name, hash);\n return ok(\"\");\n }\n\n const branches = repo.listBranches();\n const current = repo.getCurrentBranch();\n let out = \"\";\n for (const b of branches.sort()) {\n if (b === current) {\n out += `* ${GREEN}${b}${RESET}\\n`;\n } else {\n out += ` ${b}\\n`;\n }\n }\n return ok(out);\n}\n\nfunction gitCheckout(args: string[], ctx: ShellContext): ShellResult {\n const r = requireRepo(ctx.volume, ctx.cwd);\n if (\"error\" in r) return r.error;\n const { repo } = r;\n\n const createNew = args.includes(\"-b\");\n const nonFlags = args.filter((a) => !a.startsWith(\"-\"));\n\n if (nonFlags.length === 0) return fail(\"error: you must specify a branch to checkout\\n\");\n\n let target: string;\n let newBranchName: string | null = null;\n\n if (createNew) {\n const bIdx = args.indexOf(\"-b\");\n newBranchName = args[bIdx + 1];\n if (!newBranchName) return fail(\"error: switch 'b' requires a value\\n\");\n target = args[bIdx + 2] ?? repo.getCurrentBranch() ?? \"HEAD\";\n } else {\n target = nonFlags[0];\n }\n\n let commitHash = repo.resolveRef(target);\n\n if (createNew) {\n if (!commitHash) commitHash = repo.resolveHEAD();\n if (!commitHash) return fail(`fatal: not a valid object name: '${target}'\\n`, 128);\n repo.updateBranchRef(newBranchName!, commitHash);\n repo.setHEAD(\"ref: refs/heads/\" + newBranchName!);\n return ok(`Switched to a new branch '${newBranchName}'\\n`);\n }\n\n const branches = repo.listBranches();\n const isBranch = branches.includes(target);\n\n if (!commitHash) {\n return fail(`error: pathspec '${target}' did not match any file(s) known to git.\\n`);\n }\n\n const currentHead = repo.resolveHEAD();\n if (commitHash !== currentHead) {\n const targetTree = repo.getCommitTree(commitHash);\n const currentTree = currentHead ? repo.getCommitTree(currentHead) : new Map<string, string>();\n\n for (const [path, blobHash] of targetTree) {\n const content = repo.getBlobContent(blobHash);\n if (content !== null) {\n const fullPath = repo.workDir + \"/\" + path;\n const dir = fullPath.substring(0, fullPath.lastIndexOf(\"/\"));\n if (dir && !ctx.volume.existsSync(dir)) {\n ctx.volume.mkdirSync(dir, { recursive: true });\n }\n ctx.volume.writeFileSync(fullPath, content);\n }\n }\n\n for (const [path] of currentTree) {\n if (!targetTree.has(path)) {\n const fullPath = repo.workDir + \"/\" + path;\n try {\n ctx.volume.unlinkSync(fullPath);\n } catch { /* */ }\n }\n }\n\n const newIndex: IndexEntry[] = [];\n for (const [path, blobHash] of targetTree) {\n newIndex.push({ path, hash: blobHash, mode: 100644, mtime: Date.now() });\n }\n newIndex.sort((a, b) => a.path.localeCompare(b.path));\n repo.writeIndex(newIndex);\n }\n\n if (isBranch) {\n repo.setHEAD(\"ref: refs/heads/\" + target);\n return ok(`Switched to branch '${target}'\\n`);\n } else {\n repo.setHEAD(commitHash);\n return ok(`HEAD is now at ${commitHash.slice(0, 7)}\\n`);\n }\n}\n\nfunction gitSwitch(args: string[], ctx: ShellContext): ShellResult {\n const newArgs: string[] = [];\n for (let i = 0; i < args.length; i++) {\n if (args[i] === \"-c\" || args[i] === \"--create\") {\n newArgs.push(\"-b\");\n } else {\n newArgs.push(args[i]);\n }\n }\n return gitCheckout(newArgs, ctx);\n}\n\nfunction gitRevParse(args: string[], ctx: ShellContext): ShellResult {\n const found = findGitDir(ctx.volume, ctx.cwd);\n\n for (const arg of args) {\n switch (arg) {\n case \"--show-toplevel\":\n if (!found) return fail(\"fatal: not a git repository\\n\", 128);\n return ok(found.workDir + \"\\n\");\n case \"--is-inside-work-tree\":\n return ok(found ? \"true\\n\" : \"false\\n\");\n case \"--git-dir\":\n if (!found) return fail(\"fatal: not a git repository\\n\", 128);\n return ok(\".git\\n\");\n case \"--is-bare-repository\":\n return ok(\"false\\n\");\n case \"--abbrev-ref\": {\n const refArg = args[args.indexOf(arg) + 1];\n if (refArg === \"HEAD\" && found) {\n const repo = new GitRepo(ctx.volume, found.workDir, found.gitDir);\n const branch = repo.getCurrentBranch();\n return ok((branch ?? \"HEAD\") + \"\\n\");\n }\n return ok(\"HEAD\\n\");\n }\n case \"--short\": {\n const refArg = args[args.indexOf(arg) + 1];\n if (refArg === \"HEAD\" && found) {\n const repo = new GitRepo(ctx.volume, found.workDir, found.gitDir);\n const hash = repo.resolveHEAD();\n return ok(hash ? hash.slice(0, 7) + \"\\n\" : \"\\n\");\n }\n return ok(\"\\n\");\n }\n case \"--verify\": {\n const refArg = args[args.indexOf(arg) + 1];\n if (!found) return fail(\"fatal: not a git repository\\n\", 128);\n const repo = new GitRepo(ctx.volume, found.workDir, found.gitDir);\n if (refArg === \"HEAD\") {\n const hash = repo.resolveHEAD();\n if (hash) return ok(hash + \"\\n\");\n return fail(\"fatal: Needed a single revision\\n\", 128);\n }\n const resolved = repo.resolveRef(refArg ?? \"\");\n if (resolved) return ok(resolved + \"\\n\");\n return fail(`fatal: Needed a single revision\\n`, 128);\n }\n default:\n break;\n }\n }\n\n const nonFlags = args.filter((a) => !a.startsWith(\"-\"));\n if (nonFlags.length > 0 && found) {\n const repo = new GitRepo(ctx.volume, found.workDir, found.gitDir);\n for (const ref of nonFlags) {\n if (ref === \"HEAD\") {\n const hash = repo.resolveHEAD();\n if (hash) return ok(hash + \"\\n\");\n } else {\n const hash = repo.resolveRef(ref);\n if (hash) return ok(hash + \"\\n\");\n }\n }\n }\n\n return ok(\"\\n\");\n}\n\nfunction gitConfig(args: string[], ctx: ShellContext): ShellResult {\n const found = findGitDir(ctx.volume, ctx.cwd);\n\n if (args.includes(\"--list\") || args.includes(\"-l\")) {\n if (!found) return fail(\"fatal: not a git repository\\n\", 128);\n const repo = new GitRepo(ctx.volume, found.workDir, found.gitDir);\n const config = repo.readConfig();\n const lines = config.split(\"\\n\");\n let section = \"\";\n let subSection = \"\";\n let out = \"\";\n for (const line of lines) {\n const trimmed = line.trim();\n const secMatch = trimmed.match(/^\\[(\\w+)\\s*(?:\"([^\"]*)\")?\\]$/);\n if (secMatch) {\n section = secMatch[1];\n subSection = secMatch[2] ?? \"\";\n continue;\n }\n const kvMatch = trimmed.match(/^(\\w+)\\s*=\\s*(.*)$/);\n if (kvMatch && section) {\n const key = subSection\n ? `${section}.${subSection}.${kvMatch[1]}`\n : `${section}.${kvMatch[1]}`;\n out += `${key}=${kvMatch[2].trim()}\\n`;\n }\n }\n return ok(out);\n }\n\n // no distinction between --global/--local in nodepod\n const filtered = args.filter((a) => a !== \"--global\" && a !== \"--local\" && a !== \"--get\");\n\n if (filtered.length === 0) return fail(\"error: key required\\n\");\n\n const key = filtered[0];\n const value = filtered[1];\n\n if (!found) {\n if (value !== undefined) return fail(\"fatal: not a git repository\\n\", 128);\n return ok(\"\\n\");\n }\n\n const repo = new GitRepo(ctx.volume, found.workDir, found.gitDir);\n\n if (value !== undefined) {\n repo.setConfigValue(key, value);\n return ok(\"\");\n }\n\n const val = repo.getConfigValue(key);\n if (val !== null) return ok(val + \"\\n\");\n return fail(\"\");\n}\n\nfunction gitRemote(args: string[], ctx: ShellContext): ShellResult {\n const r = requireRepo(ctx.volume, ctx.cwd);\n if (\"error\" in r) return r.error;\n const { repo } = r;\n\n const sub = args[0];\n\n if (sub === \"add\") {\n const name = args[1];\n const url = args[2];\n if (!name || !url) return fail(\"usage: git remote add <name> <url>\\n\");\n repo.setConfigValue(`remote.${name}.url`, url);\n repo.setConfigValue(`remote.${name}.fetch`, `+refs/heads/*:refs/remotes/${name}/*`);\n return ok(\"\");\n }\n\n if (sub === \"remove\" || sub === \"rm\") {\n const name = args[1];\n if (!name) return fail(\"usage: git remote remove <name>\\n\");\n const config = repo.readConfig();\n const lines = config.split(\"\\n\");\n const out: string[] = [];\n let skip = false;\n for (const line of lines) {\n if (line.trim() === `[remote \"${name}\"]`) {\n skip = true;\n continue;\n }\n if (line.trim().startsWith(\"[\") && skip) skip = false;\n if (!skip) out.push(line);\n }\n repo.writeConfig(out.join(\"\\n\"));\n return ok(\"\");\n }\n\n if (sub === \"get-url\") {\n const name = args[1] ?? \"origin\";\n const url = repo.getRemoteUrl(name);\n if (url) return ok(url + \"\\n\");\n return fail(`fatal: No such remote '${name}'\\n`, 2);\n }\n\n const verbose = args.includes(\"-v\") || args.includes(\"--verbose\");\n const config = repo.readConfig();\n const remotes: Array<{ name: string; url: string }> = [];\n const lines = config.split(\"\\n\");\n let currentRemote = \"\";\n for (const line of lines) {\n const match = line.trim().match(/^\\[remote\\s+\"([^\"]+)\"\\]$/);\n if (match) {\n currentRemote = match[1];\n continue;\n }\n if (currentRemote) {\n const kvMatch = line.trim().match(/^url\\s*=\\s*(.+)$/);\n if (kvMatch) {\n remotes.push({ name: currentRemote, url: kvMatch[1].trim() });\n currentRemote = \"\";\n }\n }\n }\n\n let out = \"\";\n for (const r of remotes) {\n if (verbose) {\n out += `${r.name}\\t${r.url} (fetch)\\n`;\n out += `${r.name}\\t${r.url} (push)\\n`;\n } else {\n out += r.name + \"\\n\";\n }\n }\n return ok(out);\n}\n\nfunction gitMerge(args: string[], ctx: ShellContext): ShellResult {\n const r = requireRepo(ctx.volume, ctx.cwd);\n if (\"error\" in r) return r.error;\n const { repo } = r;\n\n if (args.includes(\"--abort\")) {\n try {\n ctx.volume.unlinkSync(repo.gitDir + \"/MERGE_HEAD\");\n ctx.volume.unlinkSync(repo.gitDir + \"/MERGE_MSG\");\n } catch { /* */ }\n return ok(\"Merge aborted.\\n\");\n }\n\n const target = args.filter((a) => !a.startsWith(\"-\"))[0];\n if (!target) return fail(\"error: specify a branch to merge\\n\");\n\n const targetHash = repo.resolveRef(target);\n if (!targetHash) return fail(`merge: ${target} - not something we can merge\\n`);\n\n const currentHash = repo.resolveHEAD();\n if (!currentHash) {\n const branch = repo.getCurrentBranch();\n if (branch) repo.updateBranchRef(branch, targetHash);\n return ok(`Fast-forward\\n`);\n }\n\n if (currentHash === targetHash) {\n return ok(\"Already up to date.\\n\");\n }\n\n // check for fast-forward\n let walker: string | null = targetHash;\n let isFF = false;\n for (let i = 0; i < 1000; i++) {\n if (walker === currentHash) { isFF = true; break; }\n const commit = repo.readCommit(walker!);\n if (!commit || !commit.parent) break;\n walker = commit.parent;\n }\n\n if (isFF) {\n const branch = repo.getCurrentBranch();\n if (branch) repo.updateBranchRef(branch, targetHash);\n else repo.setHEAD(targetHash);\n\n const targetTree = repo.getCommitTree(targetHash);\n for (const [path, blobHash] of targetTree) {\n const content = repo.getBlobContent(blobHash);\n if (content !== null) {\n const fullPath = repo.workDir + \"/\" + path;\n const dir = fullPath.substring(0, fullPath.lastIndexOf(\"/\"));\n if (dir && !ctx.volume.existsSync(dir)) ctx.volume.mkdirSync(dir, { recursive: true });\n ctx.volume.writeFileSync(fullPath, content);\n }\n }\n\n const newIndex: IndexEntry[] = [];\n for (const [path, blobHash] of targetTree) {\n newIndex.push({ path, hash: blobHash, mode: 100644, mtime: Date.now() });\n }\n repo.writeIndex(newIndex);\n\n return ok(`Updating ${currentHash.slice(0, 7)}..${targetHash.slice(0, 7)}\\nFast-forward\\n`);\n }\n\n const entries = repo.readIndex();\n const treeHash = repo.buildTree(entries);\n const mergeMessage = `Merge branch '${target}'`;\n const mergeHash = repo.createCommit(mergeMessage, currentHash, treeHash, targetHash);\n\n const branch = repo.getCurrentBranch();\n if (branch) repo.updateBranchRef(branch, mergeHash);\n else repo.setHEAD(mergeHash);\n\n return ok(`Merge made by the 'recursive' strategy.\\n`);\n}\n\nfunction gitStash(args: string[], ctx: ShellContext): ShellResult {\n const r = requireRepo(ctx.volume, ctx.cwd);\n if (\"error\" in r) return r.error;\n const { repo } = r;\n\n const sub = args[0] ?? \"push\";\n\n if (sub === \"list\") {\n const list = repo.readStashList();\n let out = \"\";\n for (let i = 0; i < list.length; i++) {\n out += `stash@{${i}}: ${list[i].message}\\n`;\n }\n return ok(out);\n }\n\n if (sub === \"push\" || sub === \"save\" || !args[0]) {\n const message = args.find((a) => !a.startsWith(\"-\")) && args[0] !== \"push\" && args[0] !== \"save\"\n ? args.join(\" \")\n : \"WIP on \" + (repo.getCurrentBranch() ?? \"HEAD\");\n\n const unstaged = repo.diffWorkingVsIndex();\n const staged = repo.diffIndexVsHEAD();\n if (unstaged.length === 0 && staged.length === 0) {\n return ok(\"No local changes to save\\n\");\n }\n\n const entries = repo.readIndex();\n repo.walkWorkTree(repo.workDir, \"\", (relPath, content) => {\n repo.addToIndex(relPath, content);\n });\n const allEntries = repo.readIndex();\n const treeHash = repo.buildTree(allEntries);\n const parent = repo.resolveHEAD();\n const stashHash = repo.createCommit(\"stash: \" + message, parent, treeHash);\n\n repo.writeIndex(entries);\n\n const headHash = repo.resolveHEAD();\n if (headHash) {\n const headTree = repo.getCommitTree(headHash);\n for (const [path, blobHash] of headTree) {\n const content = repo.getBlobContent(blobHash);\n if (content !== null) {\n const fullPath = repo.workDir + \"/\" + path;\n const dir = fullPath.substring(0, fullPath.lastIndexOf(\"/\"));\n if (dir && !ctx.volume.existsSync(dir)) ctx.volume.mkdirSync(dir, { recursive: true });\n ctx.volume.writeFileSync(fullPath, content);\n }\n }\n }\n\n const list = repo.readStashList();\n list.unshift({ message, commitHash: stashHash });\n repo.writeStashList(list);\n\n return ok(`Saved working directory and index state ${message}\\n`);\n }\n\n if (sub === \"pop\" || sub === \"apply\") {\n const idxArg = args[1] ? parseInt(args[1], 10) : 0;\n const list = repo.readStashList();\n if (idxArg >= list.length) return fail(`error: stash@{${idxArg}} does not exist\\n`);\n\n const entry = list[idxArg];\n const stashTree = repo.getCommitTree(entry.commitHash);\n\n for (const [path, blobHash] of stashTree) {\n const content = repo.getBlobContent(blobHash);\n if (content !== null) {\n const fullPath = repo.workDir + \"/\" + path;\n const dir = fullPath.substring(0, fullPath.lastIndexOf(\"/\"));\n if (dir && !ctx.volume.existsSync(dir)) ctx.volume.mkdirSync(dir, { recursive: true });\n ctx.volume.writeFileSync(fullPath, content);\n }\n }\n\n if (sub === \"pop\") {\n list.splice(idxArg, 1);\n repo.writeStashList(list);\n }\n\n return ok(`Applied stash@{${idxArg}}\\n`);\n }\n\n if (sub === \"drop\") {\n const idxArg = args[1] ? parseInt(args[1], 10) : 0;\n const list = repo.readStashList();\n if (idxArg >= list.length) return fail(`error: stash@{${idxArg}} does not exist\\n`);\n list.splice(idxArg, 1);\n repo.writeStashList(list);\n return ok(`Dropped stash@{${idxArg}}\\n`);\n }\n\n return fail(`error: unknown stash subcommand '${sub}'\\n`);\n}\n\nfunction gitRm(args: string[], ctx: ShellContext): ShellResult {\n const r = requireRepo(ctx.volume, ctx.cwd);\n if (\"error\" in r) return r.error;\n const { repo } = r;\n\n const cached = args.includes(\"--cached\");\n const paths = args.filter((a) => !a.startsWith(\"-\"));\n\n if (paths.length === 0) return fail(\"usage: git rm [--cached] <file>...\\n\");\n\n for (const p of paths) {\n const absPath = pathModule.resolve(ctx.cwd, p);\n const relPath = pathModule.relative(repo.workDir, absPath);\n repo.removeFromIndex(relPath);\n if (!cached) {\n try { ctx.volume.unlinkSync(absPath); } catch { /* */ }\n }\n }\n\n return ok(\"\");\n}\n\nfunction gitReset(args: string[], ctx: ShellContext): ShellResult {\n const r = requireRepo(ctx.volume, ctx.cwd);\n if (\"error\" in r) return r.error;\n const { repo } = r;\n\n const hard = args.includes(\"--hard\");\n const soft = args.includes(\"--soft\");\n const paths = args.filter((a) => !a.startsWith(\"-\"));\n\n if (paths.length > 0 && !hard && !soft) {\n const headHash = repo.resolveHEAD();\n const headTree = headHash ? repo.getCommitTree(headHash) : new Map<string, string>();\n\n for (const p of paths) {\n const absPath = pathModule.resolve(ctx.cwd, p);\n const relPath = pathModule.relative(repo.workDir, absPath);\n const headBlobHash = headTree.get(relPath);\n if (headBlobHash) {\n const entries = repo.readIndex();\n const idx = entries.findIndex((e) => e.path === relPath);\n if (idx >= 0) {\n entries[idx].hash = headBlobHash;\n repo.writeIndex(entries);\n }\n } else {\n repo.removeFromIndex(relPath);\n }\n }\n return ok(\"\");\n }\n\n const targetRef = paths[0] ?? \"HEAD\";\n const targetHash = repo.resolveRef(targetRef) ?? repo.resolveHEAD();\n if (!targetHash) return fail(\"fatal: Failed to resolve HEAD\\n\", 128);\n\n if (!soft) {\n const tree = repo.getCommitTree(targetHash);\n const newIndex: IndexEntry[] = [];\n for (const [path, blobHash] of tree) {\n newIndex.push({ path, hash: blobHash, mode: 100644, mtime: Date.now() });\n }\n newIndex.sort((a, b) => a.path.localeCompare(b.path));\n repo.writeIndex(newIndex);\n }\n\n if (hard) {\n const tree = repo.getCommitTree(targetHash);\n for (const [path, blobHash] of tree) {\n const content = repo.getBlobContent(blobHash);\n if (content !== null) {\n const fullPath = repo.workDir + \"/\" + path;\n const dir = fullPath.substring(0, fullPath.lastIndexOf(\"/\"));\n if (dir && !ctx.volume.existsSync(dir)) ctx.volume.mkdirSync(dir, { recursive: true });\n ctx.volume.writeFileSync(fullPath, content);\n }\n }\n }\n\n const branch = repo.getCurrentBranch();\n if (branch) repo.updateBranchRef(branch, targetHash);\n\n return ok(`HEAD is now at ${targetHash.slice(0, 7)}\\n`);\n}\n\n/* ------------------------------------------------------------------ */\n/* Remote commands (GitHub API) */\n/* ------------------------------------------------------------------ */\n\nfunction requireToken(env: Record<string, string>): string | null {\n return env.GITHUB_TOKEN || env.GH_TOKEN || null;\n}\n\nasync function gitClone(args: string[], ctx: ShellContext): Promise<ShellResult> {\n const nonFlags = args.filter((a) => !a.startsWith(\"-\"));\n const url = nonFlags[0];\n if (!url) return fail(\"usage: git clone <repository> [<directory>]\\n\");\n\n let branch = \"main\";\n const bIdx = args.indexOf(\"-b\");\n if (bIdx >= 0 && args[bIdx + 1]) branch = args[bIdx + 1];\n\n const tmpRepo = new GitRepo(ctx.volume, \"/\", \"/\");\n const gh = tmpRepo.parseGitHubUrl(url);\n if (!gh) {\n return fail(`fatal: repository '${url}' is not a GitHub URL\\n`, 128);\n }\n\n const token = requireToken(ctx.env);\n if (!token) {\n return fail(\"fatal: authentication required. Set GITHUB_TOKEN environment variable.\\n\", 128);\n }\n\n let targetDir = nonFlags[1] ?? gh.repo;\n if (!targetDir.startsWith(\"/\")) targetDir = pathModule.resolve(ctx.cwd, targetDir);\n\n const repoInfo = await githubApi(`/repos/${gh.owner}/${gh.repo}`, token);\n if (!repoInfo.ok) {\n if (repoInfo.status === 404) return fail(`fatal: repository '${url}' not found\\n`, 128);\n return fail(`fatal: GitHub API error: ${repoInfo.status} ${repoInfo.data?.message ?? \"\"}\\n`, 128);\n }\n const defaultBranch = repoInfo.data.default_branch ?? \"main\";\n if (branch === \"main\" && defaultBranch !== \"main\") branch = defaultBranch;\n\n const refResp = await githubApi(`/repos/${gh.owner}/${gh.repo}/git/ref/heads/${branch}`, token);\n if (!refResp.ok) {\n return fail(`fatal: Remote branch '${branch}' not found\\n`, 128);\n }\n const commitSha = refResp.data.object.sha;\n\n const commitResp = await githubApi(`/repos/${gh.owner}/${gh.repo}/git/commits/${commitSha}`, token);\n if (!commitResp.ok) return fail(`fatal: could not fetch commit\\n`, 128);\n const treeSha = commitResp.data.tree.sha;\n\n const treeResp = await githubApi(`/repos/${gh.owner}/${gh.repo}/git/trees/${treeSha}?recursive=1`, token);\n if (!treeResp.ok) return fail(`fatal: could not fetch tree\\n`, 128);\n\n if (!ctx.volume.existsSync(targetDir)) ctx.volume.mkdirSync(targetDir, { recursive: true });\n\n let fileCount = 0;\n const blobs: Array<{ path: string; sha: string }> = [];\n for (const item of treeResp.data.tree) {\n if (item.type === \"blob\") {\n blobs.push({ path: item.path, sha: item.sha });\n }\n }\n\n const BATCH_SIZE = 10;\n for (let i = 0; i < blobs.length; i += BATCH_SIZE) {\n const batch = blobs.slice(i, i + BATCH_SIZE);\n const results = await Promise.all(\n batch.map((b) => githubApi(`/repos/${gh.owner}/${gh.repo}/git/blobs/${b.sha}`, token)),\n );\n for (let j = 0; j < batch.length; j++) {\n const blobResp = results[j];\n if (!blobResp.ok) continue;\n const filePath = targetDir + \"/\" + batch[j].path;\n const dir = filePath.substring(0, filePath.lastIndexOf(\"/\"));\n if (dir && !ctx.volume.existsSync(dir)) ctx.volume.mkdirSync(dir, { recursive: true });\n let content: string;\n if (blobResp.data.encoding === \"base64\") {\n content = atob(blobResp.data.content.replace(/\\n/g, \"\"));\n } else {\n content = blobResp.data.content;\n }\n ctx.volume.writeFileSync(filePath, content);\n fileCount++;\n }\n }\n\n const initResult = gitInit([], { ...ctx, cwd: targetDir });\n\n const clonedRepo = new GitRepo(ctx.volume, targetDir, targetDir + \"/.git\");\n clonedRepo.setConfigValue(\"remote.origin.url\", url);\n clonedRepo.setConfigValue(\"remote.origin.fetch\", \"+refs/heads/*:refs/remotes/origin/*\");\n clonedRepo.setConfigValue(\"branch.\" + branch + \".remote\", \"origin\");\n clonedRepo.setConfigValue(\"branch.\" + branch + \".merge\", \"refs/heads/\" + branch);\n\n clonedRepo.setHEAD(\"ref: refs/heads/\" + branch);\n\n clonedRepo.walkWorkTree(targetDir, \"\", (relPath, content) => {\n clonedRepo.addToIndex(relPath, content);\n });\n const entries = clonedRepo.readIndex();\n const treeHash = clonedRepo.buildTree(entries);\n const cloneCommitHash = clonedRepo.createCommit(`Clone of ${url}`, null, treeHash);\n clonedRepo.updateBranchRef(branch, cloneCommitHash);\n\n return ok(`Cloning into '${nonFlags[1] ?? gh.repo}'...\\nremote: Enumerating objects: ${fileCount}\\nReceiving objects: 100% (${fileCount}/${fileCount}), done.\\n`);\n}\n\nasync function gitPush(args: string[], ctx: ShellContext): Promise<ShellResult> {\n const r = requireRepo(ctx.volume, ctx.cwd);\n if (\"error\" in r) return r.error;\n const { repo } = r;\n\n const token = requireToken(ctx.env);\n if (!token) return fail(\"fatal: authentication required. Set GITHUB_TOKEN environment variable.\\n\", 128);\n\n const nonFlags = args.filter((a) => !a.startsWith(\"-\"));\n const remoteName = nonFlags[0] ?? \"origin\";\n const localBranch = repo.getCurrentBranch();\n if (!localBranch) return fail(\"fatal: not on a branch\\n\", 128);\n const remoteBranch = nonFlags[1] ?? localBranch;\n\n const remoteUrl = repo.getRemoteUrl(remoteName);\n if (!remoteUrl) return fail(`fatal: '${remoteName}' does not appear to be a git repository\\n`, 128);\n\n const gh = repo.parseGitHubUrl(remoteUrl);\n if (!gh) return fail(`fatal: remote '${remoteName}' is not a GitHub URL\\n`, 128);\n\n const headHash = repo.resolveHEAD();\n if (!headHash) return fail(\"fatal: nothing to push\\n\", 128);\n\n const commitTree = repo.getCommitTree(headHash);\n const blobShas: Map<string, string> = new Map();\n\n for (const [path, localHash] of commitTree) {\n const content = repo.getBlobContent(localHash);\n if (content === null) continue;\n const blobResp = await githubApi(`/repos/${gh.owner}/${gh.repo}/git/blobs`, token, \"POST\", {\n content: btoa(content),\n encoding: \"base64\",\n });\n if (!blobResp.ok) return fail(`fatal: failed to create blob for ${path}: ${blobResp.data?.message}\\n`, 128);\n blobShas.set(path, blobResp.data.sha);\n }\n\n const treeEntries = Array.from(blobShas).map(([path, sha]) => ({\n path,\n mode: \"100644\",\n type: \"blob\",\n sha,\n }));\n const treeResp = await githubApi(`/repos/${gh.owner}/${gh.repo}/git/trees`, token, \"POST\", {\n tree: treeEntries,\n });\n if (!treeResp.ok) return fail(`fatal: failed to create tree: ${treeResp.data?.message}\\n`, 128);\n\n let parentSha: string | null = null;\n const refResp = await githubApi(`/repos/${gh.owner}/${gh.repo}/git/ref/heads/${remoteBranch}`, token);\n if (refResp.ok) parentSha = refResp.data.object.sha;\n\n const commit = repo.readCommit(headHash);\n const commitBody: any = {\n message: commit?.message ?? \"Push from nodepod\",\n tree: treeResp.data.sha,\n };\n if (parentSha) commitBody.parents = [parentSha];\n\n const commitResp = await githubApi(`/repos/${gh.owner}/${gh.repo}/git/commits`, token, \"POST\", commitBody);\n if (!commitResp.ok) return fail(`fatal: failed to create commit: ${commitResp.data?.message}\\n`, 128);\n\n if (parentSha) {\n const force = args.includes(\"-f\") || args.includes(\"--force\");\n const updateResp = await githubApi(\n `/repos/${gh.owner}/${gh.repo}/git/refs/heads/${remoteBranch}`,\n token,\n \"PATCH\",\n { sha: commitResp.data.sha, force },\n );\n if (!updateResp.ok) return fail(`fatal: failed to update ref: ${updateResp.data?.message}\\n`, 128);\n } else {\n const createResp = await githubApi(`/repos/${gh.owner}/${gh.repo}/git/refs`, token, \"POST\", {\n ref: `refs/heads/${remoteBranch}`,\n sha: commitResp.data.sha,\n });\n if (!createResp.ok) return fail(`fatal: failed to create ref: ${createResp.data?.message}\\n`, 128);\n }\n\n return ok(`To ${remoteUrl}\\n ${(parentSha ?? \"000000\").slice(0, 7)}..${commitResp.data.sha.slice(0, 7)} ${localBranch} -> ${remoteBranch}\\n`);\n}\n\nasync function gitPull(args: string[], ctx: ShellContext): Promise<ShellResult> {\n const r = requireRepo(ctx.volume, ctx.cwd);\n if (\"error\" in r) return r.error;\n const { repo } = r;\n\n const token = requireToken(ctx.env);\n if (!token) return fail(\"fatal: authentication required. Set GITHUB_TOKEN environment variable.\\n\", 128);\n\n const nonFlags = args.filter((a) => !a.startsWith(\"-\"));\n const remoteName = nonFlags[0] ?? \"origin\";\n const currentBranch = repo.getCurrentBranch();\n if (!currentBranch) return fail(\"fatal: not on a branch\\n\", 128);\n const remoteBranch = nonFlags[1] ?? currentBranch;\n\n const remoteUrl = repo.getRemoteUrl(remoteName);\n if (!remoteUrl) return fail(`fatal: '${remoteName}' does not appear to be a git repository\\n`, 128);\n\n const gh = repo.parseGitHubUrl(remoteUrl);\n if (!gh) return fail(`fatal: remote '${remoteName}' is not a GitHub URL\\n`, 128);\n\n const refResp = await githubApi(`/repos/${gh.owner}/${gh.repo}/git/ref/heads/${remoteBranch}`, token);\n if (!refResp.ok) return fail(`fatal: couldn't find remote ref refs/heads/${remoteBranch}\\n`, 128);\n const remoteCommitSha = refResp.data.object.sha;\n\n const localHead = repo.resolveHEAD();\n if (localHead === remoteCommitSha) return ok(\"Already up to date.\\n\");\n\n const commitResp = await githubApi(`/repos/${gh.owner}/${gh.repo}/git/commits/${remoteCommitSha}`, token);\n if (!commitResp.ok) return fail(\"fatal: could not fetch remote commit\\n\", 128);\n const treeSha = commitResp.data.tree.sha;\n\n const treeResp = await githubApi(`/repos/${gh.owner}/${gh.repo}/git/trees/${treeSha}?recursive=1`, token);\n if (!treeResp.ok) return fail(\"fatal: could not fetch tree\\n\", 128);\n\n let updated = 0;\n const blobs: Array<{ path: string; sha: string }> = [];\n for (const item of treeResp.data.tree) {\n if (item.type === \"blob\") blobs.push({ path: item.path, sha: item.sha });\n }\n\n const BATCH_SIZE = 10;\n for (let i = 0; i < blobs.length; i += BATCH_SIZE) {\n const batch = blobs.slice(i, i + BATCH_SIZE);\n const results = await Promise.all(\n batch.map((b) => githubApi(`/repos/${gh.owner}/${gh.repo}/git/blobs/${b.sha}`, token)),\n );\n for (let j = 0; j < batch.length; j++) {\n const blobResp = results[j];\n if (!blobResp.ok) continue;\n const filePath = repo.workDir + \"/\" + batch[j].path;\n const dir = filePath.substring(0, filePath.lastIndexOf(\"/\"));\n if (dir && !ctx.volume.existsSync(dir)) ctx.volume.mkdirSync(dir, { recursive: true });\n let content: string;\n if (blobResp.data.encoding === \"base64\") {\n content = atob(blobResp.data.content.replace(/\\n/g, \"\"));\n } else {\n content = blobResp.data.content;\n }\n ctx.volume.writeFileSync(filePath, content);\n updated++;\n }\n }\n\n repo.walkWorkTree(repo.workDir, \"\", (relPath, content) => {\n repo.addToIndex(relPath, content);\n });\n const entries = repo.readIndex();\n const treeHash = repo.buildTree(entries);\n const pullCommit = repo.createCommit(`Pull from ${remoteName}/${remoteBranch}`, localHead, treeHash);\n repo.updateBranchRef(currentBranch, pullCommit);\n\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`);\n}\n\nasync function gitFetch(args: string[], ctx: ShellContext): Promise<ShellResult> {\n const r = requireRepo(ctx.volume, ctx.cwd);\n if (\"error\" in r) return r.error;\n const { repo } = r;\n\n const token = requireToken(ctx.env);\n if (!token) return fail(\"fatal: authentication required. Set GITHUB_TOKEN environment variable.\\n\", 128);\n\n const nonFlags = args.filter((a) => !a.startsWith(\"-\"));\n const remoteName = nonFlags[0] ?? \"origin\";\n\n const remoteUrl = repo.getRemoteUrl(remoteName);\n if (!remoteUrl) return fail(`fatal: '${remoteName}' does not appear to be a git repository\\n`, 128);\n\n const gh = repo.parseGitHubUrl(remoteUrl);\n if (!gh) return fail(`fatal: remote '${remoteName}' is not a GitHub URL\\n`, 128);\n\n const branchesResp = await githubApi(`/repos/${gh.owner}/${gh.repo}/branches`, token);\n if (!branchesResp.ok) return fail(`fatal: could not list remote branches\\n`, 128);\n\n let out = `From ${remoteUrl}\\n`;\n for (const b of branchesResp.data) {\n const refPath = repo.gitDir + \"/refs/remotes/\" + remoteName + \"/\" + b.name;\n const dir = refPath.substring(0, refPath.lastIndexOf(\"/\"));\n if (!ctx.volume.existsSync(dir)) ctx.volume.mkdirSync(dir, { recursive: true });\n ctx.volume.writeFileSync(refPath, b.commit.sha + \"\\n\");\n out += ` * [updated] ${b.name} -> ${remoteName}/${b.name}\\n`;\n }\n\n return ok(out);\n}\n\n/* ------------------------------------------------------------------ */\n/* Command factory */\n/* ------------------------------------------------------------------ */\n\nexport function createGitCommand(): ShellCommand {\n return {\n name: \"git\",\n async execute(args: string[], ctx: ShellContext): Promise<ShellResult> {\n if (args.length === 0) {\n return ok(`usage: git [--version] <command> [<args>]\\n`);\n }\n\n let effectiveCtx = ctx;\n if (args[0] === \"-C\" && args[1]) {\n const newCwd = pathModule.resolve(ctx.cwd, args[1]);\n effectiveCtx = { ...ctx, cwd: newCwd };\n args = args.slice(2);\n }\n\n const sub = args[0];\n const subArgs = args.slice(1);\n\n switch (sub) {\n case \"--version\":\n case \"-v\":\n return ok(`git version ${VERSIONS.GIT}\\n`);\n case \"--help\":\n case \"help\":\n return ok(\n `usage: git <command> [<args>]\\n\\n` +\n `Available commands:\\n` +\n ` init Create an empty Git repository\\n` +\n ` clone Clone a repository from GitHub\\n` +\n ` add Add file contents to the index\\n` +\n ` status Show the working tree status\\n` +\n ` commit Record changes to the repository\\n` +\n ` log Show commit logs\\n` +\n ` diff Show changes\\n` +\n ` branch List, create, or delete branches\\n` +\n ` checkout Switch branches or restore files\\n` +\n ` switch Switch branches\\n` +\n ` merge Join two development histories together\\n` +\n ` remote Manage set of tracked repositories\\n` +\n ` push Update remote refs (GitHub)\\n` +\n ` pull Fetch and integrate remote changes (GitHub)\\n` +\n ` fetch Download objects from remote (GitHub)\\n` +\n ` stash Stash the changes in a dirty working directory\\n` +\n ` reset Reset current HEAD to the specified state\\n` +\n ` rm Remove files from the working tree and index\\n` +\n ` rev-parse Ancillary plumbing command\\n` +\n ` config Get and set repository options\\n`,\n );\n case \"init\":\n return gitInit(subArgs, effectiveCtx);\n case \"clone\":\n return gitClone(subArgs, effectiveCtx);\n case \"add\":\n return gitAdd(subArgs, effectiveCtx);\n case \"status\":\n return gitStatus(subArgs, effectiveCtx);\n case \"commit\":\n return gitCommit(subArgs, effectiveCtx);\n case \"log\":\n return gitLog(subArgs, effectiveCtx);\n case \"diff\":\n return gitDiff(subArgs, effectiveCtx);\n case \"branch\":\n return gitBranch(subArgs, effectiveCtx);\n case \"checkout\":\n return gitCheckout(subArgs, effectiveCtx);\n case \"switch\":\n return gitSwitch(subArgs, effectiveCtx);\n case \"merge\":\n return gitMerge(subArgs, effectiveCtx);\n case \"remote\":\n return gitRemote(subArgs, effectiveCtx);\n case \"push\":\n return gitPush(subArgs, effectiveCtx);\n case \"pull\":\n return gitPull(subArgs, effectiveCtx);\n case \"fetch\":\n return gitFetch(subArgs, effectiveCtx);\n case \"stash\":\n return gitStash(subArgs, effectiveCtx);\n case \"reset\":\n return gitReset(subArgs, effectiveCtx);\n case \"rm\":\n return gitRm(subArgs, effectiveCtx);\n case \"rev-parse\":\n return gitRevParse(subArgs, effectiveCtx);\n case \"config\":\n return gitConfig(subArgs, effectiveCtx);\n default:\n return fail(`git: '${sub}' is not a git command. See 'git --help'.\\n`);\n }\n },\n };\n}\n","// child_process polyfill -- exec, execSync, spawn, fork backed by NodepodShell.\n// Integrates with MemoryVolume directly.\n\nimport { NodepodShell } from \"../shell/shell-interpreter\";\nimport type { ShellResult, ShellContext } from \"../shell/shell-types\";\nimport { EventEmitter } from \"./events\";\nimport { Readable, Writable } from \"./stream\";\nimport { Buffer } from \"./buffer\";\nimport type { MemoryVolume } from \"../memory-volume\";\nimport { ScriptEngine } from \"../script-engine\";\nimport type { PackageManifest } from \"../types/manifest\";\nimport { resetActiveInterfaceCount } from \"./readline\";\nimport { ref, unref, getRefCount, resetRefCount, addDrainListener } from \"../helpers/event-loop\";\nimport { getActiveContext, setActiveContext } from \"../threading/process-context\";\nimport type { ProcessContext } from \"../threading/process-context\";\nimport type { PmDeps, PkgManager } from \"../shell/commands/pm-types\";\nimport { createNpmCommand } from \"../shell/commands/npm\";\nimport { createPnpmCommand } from \"../shell/commands/pnpm\";\nimport { createYarnCommand } from \"../shell/commands/yarn\";\nimport { createBunCommand, createBunxCommand } from \"../shell/commands/bun\";\nimport { createNodeCommand, createNpxCommand } from \"../shell/commands/node\";\nimport { createGitCommand } from \"../shell/commands/git\";\nimport { format as utilFormat } from \"./util\";\nimport { VERSIONS, NPM_REGISTRY_URL_SLASH, TIMEOUTS, DEFAULT_ENV, MOCK_PID } from \"../constants/config\";\nimport { closeAllServers, getAllServers } from \"./http\";\nimport type { SyncChannelWorker } from \"../threading/sync-channel\";\n\nlet _shell: NodepodShell | null = null;\nlet _vol: MemoryVolume | null = null;\n\nlet _syncChannel: SyncChannelWorker | null = null;\n\nlet _stdoutSink: ((text: string) => void) | null = null;\nlet _stderrSink: ((text: string) => void) | null = null;\nlet _haltSignal: AbortSignal | null = null;\n\nlet _termCols: (() => number) | null = null;\nlet _termRows: (() => number) | null = null;\n\nlet _rawModeChangeCb: ((isRaw: boolean) => void) | null = null;\n\n// context-aware state accessors: check ProcessContext first, fall back to module globals\n\nfunction getStdoutSink(): ((text: string) => void) | null {\n const ctx = getActiveContext();\n return ctx?.stdoutSink ?? _stdoutSink;\n}\n\nfunction getStderrSink(): ((text: string) => void) | null {\n const ctx = getActiveContext();\n return ctx?.stderrSink ?? _stderrSink;\n}\n\nfunction getHaltSignal(): AbortSignal | null {\n const ctx = getActiveContext();\n return ctx ? ctx.abortController.signal : _haltSignal;\n}\n\nfunction getLiveStdin(): { emit: (e: string, ...a: unknown[]) => void } | null {\n const ctx = getActiveContext();\n return ctx?.liveStdin ?? _liveStdin;\n}\n\nfunction getTermCols(): number {\n const ctx = getActiveContext();\n return ctx?.termCols?.() ?? _termCols?.() ?? 80;\n}\n\nfunction getTermRows(): number {\n const ctx = getActiveContext();\n return ctx?.termRows?.() ?? _termRows?.() ?? 24;\n}\n\nfunction formatThrown(e: unknown): string {\n if (e instanceof Error) {\n const prefix =\n e.constructor?.name && e.constructor.name !== \"Error\"\n ? `${e.constructor.name}: `\n : \"\";\n let msg = prefix + (e.message || e.name || \"Unknown error\");\n if (e.stack) msg += \"\\n\" + e.stack;\n return msg;\n }\n if (e === null || e === undefined) return \"Script threw a falsy value\";\n return String(e) || \"Unknown error (non-Error object thrown)\";\n}\n\nexport function setStreamingCallbacks(cfg: {\n onStdout?: (t: string) => void;\n onStderr?: (t: string) => void;\n signal?: AbortSignal;\n getCols?: () => number;\n getRows?: () => number;\n onRawModeChange?: (isRaw: boolean) => void;\n}): void {\n _stdoutSink = cfg.onStdout ?? null;\n _stderrSink = cfg.onStderr ?? null;\n _haltSignal = cfg.signal ?? null;\n _termCols = cfg.getCols ?? null;\n _termRows = cfg.getRows ?? null;\n _rawModeChangeCb = cfg.onRawModeChange ?? null;\n\n // also update active ProcessContext if present\n const ctx = getActiveContext();\n if (ctx) {\n ctx.stdoutSink = cfg.onStdout ?? null;\n ctx.stderrSink = cfg.onStderr ?? null;\n if (cfg.signal) {\n cfg.signal.addEventListener(\"abort\", () => ctx.abortController.abort(), { once: true });\n }\n ctx.termCols = cfg.getCols ?? null;\n ctx.termRows = cfg.getRows ?? null;\n }\n}\n\nexport function clearStreamingCallbacks(): void {\n _stdoutSink = null;\n _stderrSink = null;\n _haltSignal = null;\n _termCols = null;\n _termRows = null;\n _rawModeChangeCb = null;\n\n // also clear active ProcessContext if present\n const ctx = getActiveContext();\n if (ctx) {\n ctx.stdoutSink = null;\n ctx.stderrSink = null;\n ctx.termCols = null;\n ctx.termRows = null;\n }\n}\n\n// set the SyncChannelWorker for true blocking execSync/spawnSync in worker mode\nexport function setSyncChannel(channel: SyncChannelWorker): void {\n _syncChannel = channel;\n}\n\n// onStdout/onStderr fire in real-time as output arrives; promise resolves on child exit\nexport type SpawnChildCallback = (\n command: string,\n args: string[],\n opts?: {\n cwd?: string;\n env?: Record<string, string>;\n stdio?: \"pipe\" | \"inherit\";\n onStdout?: (data: string) => void;\n onStderr?: (data: string) => void;\n },\n) => Promise<{ pid: number; exitCode: number; stdout: string; stderr: string }>;\n\nlet _spawnChildFn: SpawnChildCallback | null = null;\n\nexport function setSpawnChildCallback(fn: SpawnChildCallback): void {\n _spawnChildFn = fn;\n}\n\n// returns ForkHandle immediately; onExit fires when the child exits\nexport type ForkChildCallback = (\n modulePath: string,\n args: string[],\n opts: {\n cwd: string;\n env: Record<string, string>;\n onStdout?: (data: string) => void;\n onStderr?: (data: string) => void;\n onIPC?: (data: unknown) => void;\n onExit?: (exitCode: number) => void;\n },\n) => {\n sendIPC: (data: unknown) => void;\n disconnect: () => void;\n requestId: number;\n};\n\nlet _forkChildFn: ForkChildCallback | null = null;\n\nexport function setForkChildCallback(fn: ForkChildCallback): void {\n _forkChildFn = fn;\n}\n\n// IPC plumbing for when this worker IS a forked child\nlet _ipcSendFn: ((data: unknown) => void) | null = null;\nlet _ipcReceiveHandler: ((data: unknown) => void) | null = null;\n// messages that arrive before the handler is wired (parent sends before child's ENB sets up the handler)\nlet _ipcQueue: unknown[] = [];\n\nexport function setIPCSend(fn: (data: unknown) => void): void {\n _ipcSendFn = fn;\n}\n\nexport function setIPCReceiveHandler(fn: (data: unknown) => void): void {\n _ipcReceiveHandler = fn;\n // replay any messages that arrived before the handler was set\n if (_ipcQueue.length > 0) {\n const queued = _ipcQueue;\n _ipcQueue = [];\n for (const msg of queued) fn(msg);\n }\n}\n\n// called by process-worker-entry when an IPC message arrives\nexport function handleIPCFromParent(data: unknown): void {\n if (_ipcReceiveHandler) {\n _ipcReceiveHandler(data);\n } else {\n // handler not wired yet, queue for replay\n _ipcQueue.push(data);\n }\n}\n\nexport function getShellCwd(): string {\n return _shell?.getCwd() ?? \"/\";\n}\n\n// called by process.chdir() so subsequent exec/spawn without explicit cwd pick up the new dir\nexport function setShellCwd(dir: string): void {\n if (_shell) _shell.setCwd(dir);\n}\n\n// runs command inline in the current worker via NodepodShell (NOT a child process).\n// child_process.exec() spawns a new worker; shellExec() runs in THIS process.\nexport function shellExec(\n cmd: string,\n opts: { cwd?: string; env?: Record<string, string> },\n callback: (error: Error | null, stdout: string, stderr: string) => void,\n): void {\n if (!_shell) {\n callback(new Error(\"[Nodepod] Shell not initialized\"), \"\", \"\");\n return;\n }\n _shell.exec(cmd, opts).then(\n (result) => {\n if (result.exitCode !== 0) {\n const e = new Error(`Command failed: ${cmd}`);\n (e as any).code = result.exitCode;\n callback(e, result.stdout, result.stderr);\n } else {\n callback(null, result.stdout, result.stderr);\n }\n },\n (e) => {\n callback(e instanceof Error ? e : new Error(String(e)), \"\", \"\");\n },\n );\n}\n\nlet _liveStdin: { emit: (e: string, ...a: unknown[]) => void } | null = null;\n\n// check if the live process stdin is in raw mode (library handles its own echo)\nexport function isStdinRaw(): boolean {\n const stdin = getLiveStdin();\n if (!stdin) return false;\n return !!(stdin as any).isRaw;\n}\n\nexport function sendStdin(text: string): void {\n const stdin = getLiveStdin();\n if (!stdin) {\n return;\n }\n // emit 'data' only -- readline.emitKeypressEvents() parses data into 'keypress' events\n // automatically, matching real Node.js\n stdin.emit(\"data\", text);\n}\n\nexport function initShellExec(volume: MemoryVolume, opts?: { cwd?: string; env?: Record<string, string> }): void {\n _vol = volume;\n\n _shell = new NodepodShell(volume, {\n cwd: opts?.cwd ?? \"/\",\n env: {\n HOME: \"/home/user\",\n USER: \"user\",\n PATH: \"/usr/local/bin:/usr/bin:/bin:/node_modules/.bin\",\n NODE_ENV: \"development\",\n TERM: \"xterm-256color\",\n COLORTERM: \"truecolor\",\n npm_config_user_agent: DEFAULT_ENV.npm_config_user_agent,\n npm_execpath: DEFAULT_ENV.npm_execpath,\n npm_node_execpath: DEFAULT_ENV.npm_node_execpath,\n ...opts?.env,\n },\n });\n\n const pmDeps: PmDeps = {\n installPackages,\n uninstallPackages,\n listPackages,\n runScript,\n npmInitOrCreate,\n npmInfo,\n npmPack,\n npmConfig,\n npxExecute,\n executeNodeBinary,\n evalCode: (code, ctx) => evalNodeCode(code, ctx),\n printCode: (code, ctx) => printNodeCode(code, ctx),\n removeNodeModules: (cwd) => {\n const dir = `${cwd}/node_modules`.replace(/\\/+/g, \"/\");\n if (_vol!.existsSync(dir)) removeDir(_vol!, dir);\n },\n formatErr,\n formatWarn,\n hasFile: (p) => !!_vol && _vol.existsSync(p),\n readFile: (p) => _vol!.readFileSync(p, \"utf8\") as string,\n writeFile: (p, data) => _vol!.writeFileSync(p, data),\n };\n\n _shell.registerCommand(createNodeCommand(pmDeps));\n _shell.registerCommand(createNpxCommand(pmDeps));\n _shell.registerCommand(createNpmCommand(pmDeps));\n _shell.registerCommand(createPnpmCommand(pmDeps));\n _shell.registerCommand(createYarnCommand(pmDeps));\n _shell.registerCommand(createBunCommand(pmDeps));\n _shell.registerCommand(createBunxCommand(pmDeps));\n _shell.registerCommand(createGitCommand());\n}\n\n// node -e / -p helpers (used by PmDeps)\n\nfunction evalNodeCode(code: string, ctx: ShellContext): ShellResult {\n let out = \"\";\n let err = \"\";\n const sandbox = new ScriptEngine(_vol!, {\n cwd: ctx.cwd,\n env: ctx.env,\n onConsole: (m: string, args: unknown[]) => {\n const line = utilFormat(args[0], ...args.slice(1)) + \"\\n\";\n m === \"error\" ? (err += line) : (out += line);\n },\n onStdout: (s: string) => {\n out += s;\n },\n onStderr: (s: string) => {\n err += s;\n },\n });\n try {\n sandbox.execute(code, \"/<eval>.js\");\n } catch (e) {\n if (e instanceof Error && e.message.startsWith(\"Process exited with code\"))\n return { stdout: out, stderr: err, exitCode: 0 };\n err += `Error: ${e instanceof Error ? e.message : String(e)}\\n`;\n return { stdout: out, stderr: err, exitCode: 1 };\n }\n return { stdout: out, stderr: err, exitCode: 0 };\n}\n\nfunction printNodeCode(code: string, ctx: ShellContext): ShellResult {\n let out = \"\";\n let err = \"\";\n const sandbox = new ScriptEngine(_vol!, {\n cwd: ctx.cwd,\n env: ctx.env,\n onConsole: (m: string, args: unknown[]) => {\n const line = utilFormat(args[0], ...args.slice(1)) + \"\\n\";\n m === \"error\" ? (err += line) : (out += line);\n },\n onStdout: (s: string) => {\n out += s;\n },\n onStderr: (s: string) => {\n err += s;\n },\n });\n try {\n const result = sandbox.execute(code, \"/<print>.js\");\n out += String(result.exports) + \"\\n\";\n } catch (e) {\n err += `Error: ${e instanceof Error ? e.message : String(e)}\\n`;\n return { stdout: out, stderr: err, exitCode: 1 };\n }\n return { stdout: out, stderr: err, exitCode: 0 };\n}\n\n// npm helpers\n\nfunction removeDir(vol: MemoryVolume, dir: string): void {\n for (const name of vol.readdirSync(dir)) {\n const full = `${dir}/${name}`;\n const st = vol.statSync(full);\n if (st.isDirectory()) removeDir(vol, full);\n else vol.unlinkSync(full);\n }\n vol.rmdirSync(dir);\n}\n\nfunction loadManifest(\n cwd: string,\n): { pkg: PackageManifest } | { fail: ShellResult } {\n const p = `${cwd}/package.json`.replace(/\\/+/g, \"/\");\n if (!_vol!.existsSync(p))\n return {\n fail: {\n stdout: \"\",\n stderr: formatErr(\"package.json not found\", \"npm\"),\n exitCode: 1,\n },\n };\n try {\n return {\n pkg: JSON.parse(_vol!.readFileSync(p, \"utf8\")) as PackageManifest,\n };\n } catch {\n return {\n fail: {\n stdout: \"\",\n stderr: formatErr(\"Malformed package.json\", \"npm\"),\n exitCode: 1,\n },\n };\n }\n}\n\nasync function runScript(\n args: string[],\n ctx: ShellContext,\n): Promise<ShellResult> {\n const name = args[0];\n if (!name) {\n const r = loadManifest(ctx.cwd);\n if (\"fail\" in r) return r.fail;\n const scripts = r.pkg.scripts ?? {};\n const keys = Object.keys(scripts);\n if (keys.length === 0) return { stdout: \"\", stderr: \"\", exitCode: 0 };\n let text = `Scripts in ${r.pkg.name ?? \"\"}:\\n`;\n for (const k of keys) text += ` ${k}\\n ${scripts[k]}\\n`;\n return { stdout: text, stderr: \"\", exitCode: 0 };\n }\n\n // extra arguments after \"--\" separator (npm run dev -- --webpack)\n const dashIdx = args.indexOf(\"--\");\n const extraArgs = dashIdx >= 0 ? args.slice(dashIdx + 1) : [];\n\n const r = loadManifest(ctx.cwd);\n if (\"fail\" in r) return r.fail;\n const scripts = r.pkg.scripts ?? {};\n let cmd = scripts[name];\n if (!cmd) {\n let msg = formatErr(`Missing script: \"${name}\"`, \"npm\");\n const avail = Object.keys(scripts);\n if (avail.length) {\n msg += \"\\nAvailable:\\n\";\n for (const s of avail)\n msg += ` ${A_CYAN}${s}${A_RESET}: ${A_DIM}${scripts[s]}${A_RESET}\\n`;\n }\n return { stdout: \"\", stderr: msg, exitCode: 1 };\n }\n\n // append extra args after \"--\" to the script command (real npm behavior)\n if (extraArgs.length > 0) {\n cmd += \" \" + extraArgs.map(a => a.includes(\" \") ? `\"${a}\"` : a).join(\" \");\n }\n\n // prepend cwd's node_modules/.bin to PATH (matches real npm behavior)\n const binDir = `${ctx.cwd}/node_modules/.bin`.replace(/\\/+/g, \"/\");\n const existingPath = ctx.env.PATH || \"\";\n const pathWithBin = existingPath.includes(binDir)\n ? existingPath\n : `${binDir}:${existingPath}`;\n\n const env: Record<string, string> = {\n ...ctx.env,\n PATH: pathWithBin,\n npm_lifecycle_event: name,\n };\n if (r.pkg.name) env.npm_package_name = r.pkg.name;\n if (r.pkg.version) env.npm_package_version = r.pkg.version;\n\n let allOut = \"\";\n let allErr = \"\";\n const label = `${r.pkg.name ?? \"\"}@${r.pkg.version ?? \"\"}`;\n\n const pre = scripts[`pre${name}`];\n if (pre) {\n const hdr = `\\n> ${label} pre${name}\\n> ${pre}\\n\\n`;\n allErr += hdr;\n if (_stderrSink) _stderrSink(hdr);\n const pr = await ctx.exec(pre, { cwd: ctx.cwd, env });\n allOut += pr.stdout;\n allErr += pr.stderr;\n if (pr.exitCode !== 0)\n return { stdout: allOut, stderr: allErr, exitCode: pr.exitCode };\n }\n\n const mainHdr = `\\n> ${label} ${name}\\n> ${cmd}\\n\\n`;\n allErr += mainHdr;\n if (_stderrSink) _stderrSink(mainHdr);\n const mr = await ctx.exec(cmd, { cwd: ctx.cwd, env });\n allOut += mr.stdout;\n allErr += mr.stderr;\n if (mr.exitCode !== 0)\n return { stdout: allOut, stderr: allErr, exitCode: mr.exitCode };\n\n const post = scripts[`post${name}`];\n if (post) {\n const hdr = `\\n> ${label} post${name}\\n> ${post}\\n\\n`;\n allErr += hdr;\n if (_stderrSink) _stderrSink(hdr);\n const po = await ctx.exec(post, { cwd: ctx.cwd, env });\n allOut += po.stdout;\n allErr += po.stderr;\n if (po.exitCode !== 0)\n return { stdout: allOut, stderr: allErr, exitCode: po.exitCode };\n }\n\n return { stdout: allOut, stderr: allErr, exitCode: 0 };\n}\n\n// ANSI + spinner helpers for npm install output\n\nconst A_RESET = \"\\x1b[0m\";\nconst A_BOLD = \"\\x1b[1m\";\nconst A_DIM = \"\\x1b[2m\";\nconst A_RED = \"\\x1b[31m\";\nconst A_GREEN = \"\\x1b[32m\";\nconst A_YELLOW = \"\\x1b[33m\";\nconst A_BLUE = \"\\x1b[34m\";\nconst A_MAGENTA = \"\\x1b[35m\";\nconst A_CYAN = \"\\x1b[36m\";\nconst A_WHITE = \"\\x1b[37m\";\nconst ERASE_LINE = \"\\x1b[2K\";\n\nconst SPINNER_FRAMES = [\"⠋\", \"⠙\", \"⠹\", \"⠸\", \"⠼\", \"⠴\", \"⠦\", \"⠧\", \"⠇\", \"⠏\"];\n\nfunction createSpinner(text: string, writeFn: (s: string) => void) {\n let frame = 0;\n let current = text;\n const id = setInterval(() => {\n writeFn(\n `${ERASE_LINE}\\r${A_CYAN}${SPINNER_FRAMES[frame]}${A_RESET} ${current}`,\n );\n frame = (frame + 1) % SPINNER_FRAMES.length;\n }, 80);\n\n return {\n update(t: string) {\n current = t;\n },\n succeed(t: string) {\n clearInterval(id);\n writeFn(`${ERASE_LINE}\\r${A_GREEN}✔${A_RESET} ${t}\\n`);\n },\n fail(t: string) {\n clearInterval(id);\n writeFn(`${ERASE_LINE}\\r${A_RED}✖${A_RESET} ${t}\\n`);\n },\n stop() {\n clearInterval(id);\n },\n };\n}\n\n// per-PM accent colors\nconst PM_COLORS: Record<PkgManager, string> = {\n npm: A_RED,\n pnpm: A_YELLOW,\n yarn: A_BLUE,\n bun: A_WHITE,\n};\n\nfunction formatProgress(msg: string, pm: PkgManager = \"npm\"): string {\n const accent = PM_COLORS[pm];\n\n const resolving = msg.match(/^Resolving\\s+(.+?)\\.{3}$/);\n if (resolving)\n return `${A_DIM}Resolving${A_RESET} ${accent}${resolving[1]}${A_RESET}${A_DIM}...${A_RESET}`;\n\n const downloading = msg.match(/^Downloading\\s+(\\d+)\\s+package/);\n if (downloading)\n return `${A_DIM}Downloading${A_RESET} ${A_YELLOW}${downloading[1]}${A_RESET} ${A_DIM}packages...${A_RESET}`;\n\n const fetching = msg.match(/^(?:\\s*)?Fetching\\s+(.+?)\\.{3}$/);\n if (fetching)\n return `${A_DIM}Fetching${A_RESET} ${accent}${fetching[1]}${A_RESET}${A_DIM}...${A_RESET}`;\n\n const transformed = msg.match(/^(?:\\s*)?Transformed\\s+(\\d+)\\s+file/);\n if (transformed) return `${A_DIM}${msg.trim()}${A_RESET}`;\n\n const installed = msg.match(/^Installed\\s+(\\d+)/);\n if (installed) return `${A_GREEN}${msg}${A_RESET}`;\n\n const skipping = msg.match(/^Skipping\\s+(.+?)\\s+\\(up to date\\)$/);\n if (skipping)\n return `${A_DIM}Skipping${A_RESET} ${accent}${skipping[1]}${A_RESET} ${A_DIM}(up to date)${A_RESET}`;\n\n return msg;\n}\n\nfunction formatInstallSummary(\n totalAdded: number,\n elapsed: string,\n pm: PkgManager,\n): string {\n const pkgs = `${totalAdded} package${totalAdded !== 1 ? \"s\" : \"\"}`;\n switch (pm) {\n case \"npm\":\n return `${A_BOLD}added ${pkgs}${A_RESET} ${A_DIM}in ${elapsed}s${A_RESET}`;\n case \"pnpm\":\n return `${A_BOLD}packages:${A_RESET} ${A_GREEN}+${totalAdded}${A_RESET}\\n${A_DIM}Done in ${elapsed}s${A_RESET}`;\n case \"yarn\":\n return `${A_BOLD}${pkgs} added${A_RESET} ${A_DIM}in ${elapsed}s${A_RESET}`;\n case \"bun\":\n return `${A_BOLD}${pkgs} installed${A_RESET} ${A_DIM}[${elapsed}s]${A_RESET}`;\n }\n}\n\nfunction formatErr(msg: string, pm: PkgManager): string {\n switch (pm) {\n case \"npm\":\n return `${A_RED}npm ERR!${A_RESET} ${msg}\\n`;\n case \"pnpm\":\n return `${A_RED} ERR_PNPM${A_RESET} ${msg}\\n`;\n case \"yarn\":\n return `${A_RED}error${A_RESET} ${msg}\\n`;\n case \"bun\":\n return `${A_RED}error:${A_RESET} ${msg}\\n`;\n }\n}\n\nfunction formatWarn(msg: string, pm: PkgManager): string {\n switch (pm) {\n case \"npm\":\n return `${A_YELLOW}npm WARN${A_RESET} ${msg}\\n`;\n case \"pnpm\":\n return `${A_YELLOW} WARN${A_RESET} ${msg}\\n`;\n case \"yarn\":\n return `${A_YELLOW}warning${A_RESET} ${msg}\\n`;\n case \"bun\":\n return `${A_YELLOW}warn:${A_RESET} ${msg}\\n`;\n }\n}\n\nasync function installPackages(\n args: string[],\n ctx: ShellContext,\n pm: PkgManager = \"npm\",\n): Promise<ShellResult> {\n const { DependencyInstaller } = await import(\"../packages/installer\");\n const installer = new DependencyInstaller(_vol!, { cwd: ctx.cwd });\n let out = \"\";\n const write = _stdoutSink ?? ((_s: string) => {});\n const startTime = Date.now();\n const accent = PM_COLORS[pm];\n\n const spinnerText =\n pm === \"bun\"\n ? `${A_DIM}bun install${A_RESET} ${A_DIM}${VERSIONS.BUN_V}${A_RESET}`\n : `${A_DIM}Resolving dependencies...${A_RESET}`;\n const spinner = createSpinner(spinnerText, write);\n\n try {\n const names = args.filter((a: string) => !a.startsWith(\"-\"));\n const onProgress = (m: string) => {\n const colored = formatProgress(m, pm);\n out += m + \"\\n\";\n spinner.update(colored);\n };\n\n let totalAdded = 0;\n if (names.length === 0) {\n const ir = await installer.installFromManifest(undefined, {\n withDevDeps: true,\n onProgress,\n });\n totalAdded = ir.newPackages.length;\n } else {\n for (const n of names) {\n const ir = await installer.install(n, undefined, { onProgress });\n totalAdded += ir.newPackages.length;\n }\n }\n\n const elapsed = ((Date.now() - startTime) / 1000).toFixed(1);\n const summary = formatInstallSummary(totalAdded, elapsed, pm);\n spinner.succeed(summary);\n out += `added ${totalAdded} packages in ${elapsed}s\\n`;\n\n return { stdout: out, stderr: \"\", exitCode: 0 };\n } catch (e) {\n const msg = e instanceof Error ? e.message : String(e);\n spinner.fail(`${A_RED}${msg}${A_RESET}`);\n return {\n stdout: out,\n stderr: formatErr(msg, pm),\n exitCode: 1,\n };\n }\n}\n\nasync function uninstallPackages(\n args: string[],\n ctx: ShellContext,\n pm: PkgManager = \"npm\",\n): Promise<ShellResult> {\n const names = args.filter((a) => !a.startsWith(\"-\"));\n if (names.length === 0)\n return {\n stdout: \"\",\n stderr: formatErr(\"Must specify package to remove\", pm),\n exitCode: 1,\n };\n\n const write = _stdoutSink ?? ((_s: string) => {});\n let out = \"\";\n for (const name of names) {\n const pkgDir = `${ctx.cwd}/node_modules/${name}`.replace(/\\/+/g, \"/\");\n if (_vol!.existsSync(pkgDir)) {\n try {\n removeDir(_vol!, pkgDir);\n const msg =\n pm === \"bun\"\n ? `${A_DIM}-${A_RESET} ${name}`\n : pm === \"pnpm\"\n ? `${A_RED}-${A_RESET} ${name}`\n : `removed ${name}`;\n out += msg + \"\\n\";\n write(msg + \"\\n\");\n } catch (e) {\n return {\n stdout: out,\n stderr: formatErr(\n `Failed to remove ${name}: ${e instanceof Error ? e.message : String(e)}`,\n pm,\n ),\n exitCode: 1,\n };\n }\n } else {\n out += formatWarn(`${name} not installed`, pm);\n }\n\n const r = loadManifest(ctx.cwd);\n if (!(\"fail\" in r)) {\n const pkg = r.pkg;\n let changed = false;\n if (pkg.dependencies?.[name]) {\n delete pkg.dependencies[name];\n changed = true;\n }\n if (pkg.devDependencies?.[name]) {\n delete pkg.devDependencies[name];\n changed = true;\n }\n if (changed) {\n const p = `${ctx.cwd}/package.json`.replace(/\\/+/g, \"/\");\n _vol!.writeFileSync(p, JSON.stringify(pkg, null, 2));\n }\n }\n }\n\n return { stdout: out, stderr: \"\", exitCode: 0 };\n}\n\nasync function listPackages(\n ctx: ShellContext,\n pm: PkgManager = \"npm\",\n): Promise<ShellResult> {\n const { DependencyInstaller } = await import(\"../packages/installer\");\n const installer = new DependencyInstaller(_vol!, { cwd: ctx.cwd });\n const pkgs = installer.listInstalled();\n const entries = Object.entries(pkgs);\n if (entries.length === 0)\n return { stdout: `${A_DIM}(empty)${A_RESET}\\n`, stderr: \"\", exitCode: 0 };\n\n const r = loadManifest(ctx.cwd);\n const label = !(\"fail\" in r)\n ? `${r.pkg.name ?? \"project\"}@${r.pkg.version ?? \"0.0.0\"}`\n : ctx.cwd;\n\n let text = \"\";\n switch (pm) {\n case \"npm\":\n text += `${label} ${ctx.cwd}\\n`;\n for (let i = 0; i < entries.length; i++) {\n const [n, v] = entries[i];\n const isLast = i === entries.length - 1;\n text += `${isLast ? \"└──\" : \"├──\"} ${n}@${A_DIM}${v}${A_RESET}\\n`;\n }\n break;\n case \"pnpm\":\n text += `${A_DIM}Legend: production dependency, optional only, dev only${A_RESET}\\n\\n`;\n text += `${label} ${ctx.cwd}\\n\\n`;\n text += `${A_BOLD}dependencies:${A_RESET}\\n`;\n for (const [n, v] of entries) text += `${n} ${A_DIM}${v}${A_RESET}\\n`;\n break;\n case \"yarn\":\n text += `${A_BOLD}${label}${A_RESET}\\n`;\n for (let i = 0; i < entries.length; i++) {\n const [n, v] = entries[i];\n const isLast = i === entries.length - 1;\n text += `${isLast ? \"└─\" : \"├─\"} ${n}@${A_CYAN}${v}${A_RESET}\\n`;\n }\n break;\n case \"bun\":\n for (const [n, v] of entries) text += `${n}@${A_DIM}${v}${A_RESET}\\n`;\n text += `\\n${A_DIM}${entries.length} packages installed${A_RESET}\\n`;\n break;\n }\n return { stdout: text, stderr: \"\", exitCode: 0 };\n}\n\nasync function npmInitOrCreate(\n args: string[],\n sub: string,\n ctx: ShellContext,\n): Promise<ShellResult> {\n const flags = args.filter((a) => a.startsWith(\"-\"));\n const positional = args.filter((a) => !a.startsWith(\"-\"));\n\n // npm create <pkg> / npm init <pkg> → npx create-<pkg>\n if (sub === \"create\" || (sub === \"init\" && positional.length > 0)) {\n const initializer = positional[0];\n let pkgSpec: string;\n if (initializer.startsWith(\"@\")) {\n // scoped: npm create @scope/pkg → npx @scope/create-pkg\n pkgSpec = initializer;\n } else {\n // vite@latest → create-vite@latest\n const atIdx = initializer.indexOf(\"@\");\n if (atIdx > 0) {\n const name = initializer.slice(0, atIdx);\n const ver = initializer.slice(atIdx);\n pkgSpec = `create-${name}${ver}`;\n } else {\n pkgSpec = `create-${initializer}`;\n }\n }\n return npxExecute([\"-y\", pkgSpec, ...positional.slice(1), ...flags], ctx);\n }\n\n // plain npm init [-y] → create package.json\n const p = `${ctx.cwd}/package.json`.replace(/\\/+/g, \"/\");\n if (_vol!.existsSync(p)) {\n return {\n stdout: \"\",\n stderr: formatWarn(\"package.json already exists\", \"npm\"),\n exitCode: 0,\n };\n }\n\n const isYes = flags.includes(\"-y\") || flags.includes(\"--yes\");\n const name = ctx.cwd.split(\"/\").filter(Boolean).pop() || \"my-project\";\n\n const pkg: PackageManifest = {\n name,\n version: \"1.0.0\",\n description: \"\",\n main: \"index.js\",\n scripts: {\n test: 'echo \"Error: no test specified\" && exit 1',\n start: \"node index.js\",\n },\n keywords: [],\n author: \"\",\n license: \"ISC\",\n };\n\n _vol!.writeFileSync(p, JSON.stringify(pkg, null, 2));\n const out = isYes\n ? `Wrote to ${p}\\n`\n : `Wrote to ${p}\\n\\n${JSON.stringify(pkg, null, 2)}\\n`;\n return { stdout: out, stderr: \"\", exitCode: 0 };\n}\n\nasync function npmInfo(\n args: string[],\n ctx: ShellContext,\n): Promise<ShellResult> {\n const name = args[0];\n if (!name)\n return {\n stdout: \"\",\n stderr: formatErr(\"Usage: npm info <package>\", \"npm\"),\n exitCode: 1,\n };\n\n const pkgJsonPath = `/node_modules/${name}/package.json`;\n if (_vol!.existsSync(pkgJsonPath)) {\n try {\n const pkg = JSON.parse(\n _vol!.readFileSync(pkgJsonPath, \"utf8\"),\n ) as PackageManifest;\n let out = `${pkg.name}@${pkg.version}\\n`;\n if (pkg.description) out += `${pkg.description}\\n`;\n if (pkg.license) out += `license: ${pkg.license}\\n`;\n if (pkg.homepage) out += `homepage: ${pkg.homepage}\\n`;\n if (pkg.dependencies) {\n out += \"\\ndependencies:\\n\";\n for (const [k, v] of Object.entries(pkg.dependencies))\n out += ` ${k}: ${v}\\n`;\n }\n return { stdout: out, stderr: \"\", exitCode: 0 };\n } catch {\n /* fallthrough */\n }\n }\n\n // fall back to registry\n try {\n const { RegistryClient } = await import(\"../packages/registry-client\");\n const client = new RegistryClient();\n const meta = await client.fetchManifest(name);\n const latest = meta[\"dist-tags\"]?.latest;\n let out = `${name}@${latest ?? \"unknown\"}\\n`;\n if (latest && meta.versions[latest]) {\n const ver = meta.versions[latest] as unknown as Record<string, unknown>;\n if (ver.description) out += `${ver.description}\\n`;\n if (ver.license) out += `license: ${ver.license}\\n`;\n if (ver.homepage) out += `homepage: ${ver.homepage}\\n`;\n }\n return { stdout: out, stderr: \"\", exitCode: 0 };\n } catch (e) {\n return {\n stdout: \"\",\n stderr: formatErr(`Not found: ${name}`, \"npm\"),\n exitCode: 1,\n };\n }\n}\n\nfunction npmPack(ctx: ShellContext): ShellResult {\n const r = loadManifest(ctx.cwd);\n if (\"fail\" in r) return r.fail;\n\n const notice = `${A_DIM}npm notice${A_RESET}`;\n let out = `${notice}\\n`;\n out += `${notice} ${A_BOLD}package:${A_RESET} ${r.pkg.name}@${r.pkg.version}\\n`;\n\n const files: string[] = [];\n const walk = (dir: string) => {\n try {\n for (const name of _vol!.readdirSync(dir)) {\n if (name === \"node_modules\" || name.startsWith(\".\")) continue;\n const full = `${dir}/${name}`;\n const st = _vol!.statSync(full);\n if (st.isDirectory()) walk(full);\n else files.push(full);\n }\n } catch {\n /* */\n }\n };\n walk(ctx.cwd);\n\n for (const f of files) out += `${notice} ${f}\\n`;\n out += `${notice} ${A_BOLD}total files:${A_RESET} ${files.length}\\n`;\n return { stdout: out, stderr: \"\", exitCode: 0 };\n}\n\nfunction npmConfig(args: string[], ctx: ShellContext): ShellResult {\n const sub = args[0];\n if (!sub || sub === \"list\") {\n let out = \"; nodepod project config\\n\";\n out += `prefix = \"${ctx.cwd}\"\\n`;\n out += `registry = \"${NPM_REGISTRY_URL_SLASH}\"\\n`;\n return { stdout: out, stderr: \"\", exitCode: 0 };\n }\n if (sub === \"get\") {\n const key = args[1];\n if (key === \"prefix\")\n return { stdout: ctx.cwd + \"\\n\", stderr: \"\", exitCode: 0 };\n if (key === \"registry\")\n return {\n stdout: NPM_REGISTRY_URL_SLASH + \"\\n\",\n stderr: \"\",\n exitCode: 0,\n };\n return { stdout: \"undefined\\n\", stderr: \"\", exitCode: 0 };\n }\n if (sub === \"set\") {\n return {\n stdout: \"\",\n stderr: formatWarn(\"config set: not supported in nodepod\", \"npm\"),\n exitCode: 0,\n };\n }\n return {\n stdout: \"\",\n stderr: formatErr(`config: unknown subcommand \"${sub}\"`, \"npm\"),\n exitCode: 1,\n };\n}\n\n// Direct node binary execution (shared by node command & npx)\n\nexport async function executeNodeBinary(\n filePath: string,\n args: string[],\n ctx: ShellContext,\n opts?: {\n isFork?: boolean;\n workerThreadsOverride?: {\n isMainThread: boolean;\n parentPort: unknown;\n workerData: unknown;\n threadId: number;\n };\n },\n): Promise<ShellResult> {\n if (!_vol) return { stdout: \"\", stderr: \"Volume unavailable\\n\", exitCode: 1 };\n\n const rawPath = filePath.startsWith(\"/\")\n ? filePath\n : `${ctx.cwd}/${filePath}`.replace(/\\/+/g, \"/\");\n\n // resolve entry file: exact path, then extensions, then directory index\n let resolved = \"\";\n if (_vol.existsSync(rawPath) && !_vol.statSync(rawPath).isDirectory()) {\n resolved = rawPath;\n } else {\n const exts = [\".js\", \".mjs\", \".cjs\", \".ts\", \".tsx\", \".jsx\"];\n for (const ext of exts) {\n if (_vol.existsSync(rawPath + ext)) { resolved = rawPath + ext; break; }\n }\n if (!resolved) {\n // try as directory with index file\n const dirPath = rawPath.endsWith(\"/\") ? rawPath : rawPath + \"/\";\n for (const idx of [\"index.js\", \"index.mjs\", \"index.ts\", \"index.cjs\"]) {\n if (_vol.existsSync(dirPath + idx)) { resolved = dirPath + idx; break; }\n }\n }\n }\n\n if (!resolved) {\n const errMsg = `Cannot locate module '${rawPath}'\\n`;\n const errSink = getStderrSink();\n if (errSink) errSink(errMsg);\n return {\n stdout: \"\",\n stderr: errMsg,\n exitCode: 1,\n };\n }\n\n let out = \"\";\n let err = \"\";\n let didExit = false;\n let code = 0;\n\n const pushOut = (s: string): boolean => {\n out += s;\n const sink = getStdoutSink();\n if (sink) sink(s);\n return true;\n };\n const pushErr = (s: string): boolean => {\n err += s;\n const sink = getStderrSink();\n if (sink) sink(s);\n return true;\n };\n\n // ScriptEngine's module wrapper overwrites globalThis.process -- save and restore\n const savedProcess = (globalThis as any).process;\n\n const sandbox = new ScriptEngine(_vol, {\n cwd: ctx.cwd,\n env: ctx.env,\n onConsole: (m: string, cArgs: unknown[]) => {\n // filter out process.exit sentinel errors logged by library code\n if (cArgs.length === 1) {\n const a = cArgs[0];\n if (a instanceof Error && a.message.startsWith(\"Process exited with code\")) return;\n if (typeof a === \"string\" && a.startsWith(\"Error: Process exited with code\")) return;\n }\n // error/warn → stderr, everything else → stdout\n const line = utilFormat(cArgs[0], ...cArgs.slice(1)) + \"\\n\";\n m === \"error\" ? pushErr(line) : pushOut(line);\n },\n onStdout: pushOut,\n onStderr: pushErr,\n workerThreadsOverride: opts?.workerThreadsOverride,\n });\n\n const proc = sandbox.getProcess();\n\n // sync shell cwd when process.chdir() is called (create-next-app etc. depend on this)\n proc._chdirHook = (dir: string) => {\n if (_shell) _shell.setCwd(dir);\n };\n\n proc.exit = ((c = 0) => {\n // suppress exit when dev servers are active (SES/error handlers call exit(1) but we want to keep serving)\n if (getAllServers().size > 0 && c !== 0) {\n // process.exit suppressed — servers still active\n return;\n }\n if (!didExit) {\n didExit = true;\n code = c;\n proc.emit(\"exit\", c);\n }\n // Always throw to halt execution — mirrors real Node.js process.exit()\n // which terminates immediately. The TLA .catch() and try/catch both\n // handle \"Process exited with code\" errors.\n throw new Error(`Process exited with code ${c}`);\n }) as (c?: number) => never;\n\n proc.argv = [\"node\", resolved, ...args];\n\n // wire IPC for forked children\n if (_ipcSendFn) {\n proc.send = ((msg: unknown, _cb?: (e: Error | null) => void): boolean => {\n if (_ipcSendFn) {\n _ipcSendFn(msg);\n if (typeof _cb === \"function\") _cb(null);\n return true;\n }\n return false;\n }) as any;\n proc.connected = true;\n proc.disconnect = (() => {\n proc.connected = false;\n }) as () => void;\n\n // incoming IPC from parent → emit on process (also replays queued messages)\n setIPCReceiveHandler((data: unknown) => {\n proc.emit(\"message\", data);\n });\n }\n\n const prevLiveStdin = _liveStdin;\n // capture locally -- the module-level _haltSignal gets cleared by clearStreamingCallbacks()\n // while this ENB's wait loop may still be running\n const myHaltSignal = getHaltSignal();\n if (myHaltSignal) {\n proc.stdout.isTTY = true;\n proc.stderr.isTTY = true;\n proc.stdin.isTTY = true;\n // sync terminal dimensions for TUI libraries\n const cols = getTermCols();\n const rows = getTermRows();\n proc.stdout.columns = cols;\n proc.stdout.rows = rows;\n proc.stderr.columns = cols;\n proc.stderr.rows = rows;\n proc.stdin.setRawMode = (flag: boolean) => {\n proc.stdin.isRaw = flag;\n // notify terminal so it switches echo mode\n if (_rawModeChangeCb) _rawModeChangeCb(flag);\n return proc.stdin;\n };\n _liveStdin = proc.stdin;\n // also update context's liveStdin\n const ctx = getActiveContext();\n if (ctx) ctx.liveStdin = proc.stdin;\n }\n\n // for forked children: ref() to simulate the IPC channel handle.\n // real Node.js keeps the IPC channel ref'd until process.disconnect().\n // we hold a ref for the entire fork lifetime, released on disconnect or exit.\n const isFork = !!opts?.isFork;\n if (isFork) {\n ref();\n // disconnect → unref (mirrors Node.js IPC channel.unref())\n const origDisconnect = proc.disconnect;\n proc.disconnect = (() => {\n origDisconnect?.call(proc);\n unref();\n }) as () => void;\n }\n\n let scriptError: Error | null = null;\n let tlaSettled = false;\n\n try {\n const tlaPromise = sandbox.runFileTLA(resolved);\n tlaPromise\n .catch((e) => {\n if (\n e instanceof Error &&\n e.message.startsWith(\"Process exited with code\")\n ) {\n return;\n }\n const msg = formatThrown(e);\n pushErr(`Error: ${msg}\\n`);\n if (!didExit) {\n didExit = true;\n code = 1;\n }\n })\n .finally(() => {\n tlaSettled = true;\n });\n } catch (e) {\n if (\n e instanceof Error &&\n e.message.startsWith(\"Process exited with code\")\n ) {\n // process.exit() — handled by didExit flag\n } else {\n const msg = formatThrown(e);\n scriptError = e instanceof Error ? e : new Error(msg);\n }\n }\n\n const cleanup = () => {\n if (savedProcess) (globalThis as any).process = savedProcess;\n };\n\n if (scriptError) {\n cleanup();\n const errMsg = scriptError.message || scriptError.name || \"Unknown error\";\n const errStack = scriptError.stack || \"\";\n const fullMsg =\n errStack && !errStack.includes(errMsg)\n ? `${errMsg}\\n${errStack}`\n : errStack || errMsg;\n return { stdout: out, stderr: err + `Error: ${fullMsg}\\n`, exitCode: 1 };\n }\n\n // process.exit() called synchronously -- bail\n if (didExit) {\n cleanup();\n return { stdout: out, stderr: err, exitCode: code };\n }\n\n // yield one tick so microtasks settle\n await new Promise((r) => setTimeout(r, 0));\n\n // keep the process alive while TLA hasn't settled, ref handles exist,\n // or HTTP servers are registered. process.exit() and Ctrl+C break immediately.\n\n const shouldStayAlive = (): boolean => {\n if (!tlaSettled) return true;\n if (getRefCount() > 0) return true;\n if (getAllServers().size > 0) return true;\n return false;\n };\n\n // fast path: nothing keeping the process alive\n if (!myHaltSignal && !shouldStayAlive()) {\n cleanup();\n return { stdout: out, stderr: err, exitCode: 0 };\n }\n\n // avoid duplicate output when same error fires as both 'error' and 'unhandledrejection'\n const handledErrors = new WeakSet<object>();\n\n const rejHandler = (ev: PromiseRejectionEvent) => {\n ev.preventDefault();\n const r = ev.reason;\n if (\n r instanceof Error &&\n r.message.startsWith(\"Process exited with code\")\n ) {\n return;\n }\n // mark as handled to prevent errHandler double-logging\n if (r != null && typeof r === \"object\") handledErrors.add(r);\n // emit 'unhandledRejection' on process -- if a handler exists, it handles it\n try {\n const hasHandler = proc.listenerCount\n ? proc.listenerCount(\"unhandledRejection\") > 0\n : false;\n proc.emit(\"unhandledRejection\", r, ev.promise);\n if (hasHandler) return; // Handler dealt with it — don't log\n } catch { /* ignore handler errors */ }\n const rejMsg = r instanceof Error\n ? `Unhandled rejection: ${r.message}\\n${r.stack ?? \"\"}\\n`\n : `Unhandled rejection: ${String(r)}\\n`;\n pushErr(rejMsg);\n };\n const errHandler = (ev: ErrorEvent) => {\n ev.preventDefault();\n const e = ev.error ?? new Error(ev.message || \"Unknown error\");\n // skip if already handled by rejHandler (same error fires on both global events)\n if (e != null && typeof e === \"object\" && handledErrors.has(e)) return;\n if (e != null && typeof e === \"object\") handledErrors.add(e);\n // emit 'uncaughtException' -- frameworks like webpack register handlers for graceful recovery\n try {\n const hasUncaught = proc.listenerCount\n ? proc.listenerCount(\"uncaughtException\") > 0\n : false;\n proc.emit(\"uncaughtException\", e);\n if (hasUncaught) return; // Handler dealt with it — don't log or crash\n } catch { /* handler threw — fall through to default logging */ }\n // if there's an unhandledRejection listener, it'll handle this -- don't double-log\n try {\n const hasRej = proc.listenerCount\n ? proc.listenerCount(\"unhandledRejection\") > 0\n : false;\n if (hasRej) return;\n } catch { /* ignore */ }\n const msg = e instanceof Error\n ? `${e.stack || e.message}\\n`\n : `Uncaught: ${String(e)}\\n`;\n pushErr(msg);\n };\n globalThis.addEventListener(\"unhandledrejection\", rejHandler);\n globalThis.addEventListener(\"error\", errHandler);\n\n try {\n // resolves when Ctrl+C / signal fires\n const haltPromise = myHaltSignal\n ? new Promise<void>((r) => {\n if (myHaltSignal!.aborted) { r(); return; }\n myHaltSignal!.addEventListener(\"abort\", () => r(), { once: true });\n })\n : null;\n\n // give async startup code time to register handles before deciding the process is done\n let consecutiveEmpty = 0;\n let everNonEmpty = false;\n\n while (!didExit) {\n if (myHaltSignal?.aborted) {\n break;\n }\n\n // wake on drain notification or periodic tick\n let wakeResolve!: () => void;\n const wakePromise = new Promise<void>((r) => { wakeResolve = r; });\n const removeDrain = addDrainListener(wakeResolve);\n\n const tickMs = (!everNonEmpty && myHaltSignal && !out && !err)\n ? TIMEOUTS.WAIT_LOOP_TICK\n : 50;\n const racers: Promise<unknown>[] = [\n wakePromise,\n new Promise<void>((r) => setTimeout(r, tickMs)),\n ];\n if (haltPromise) racers.push(haltPromise);\n\n await Promise.race(racers);\n removeDrain();\n\n if (myHaltSignal?.aborted) {\n break;\n }\n if (didExit) {\n break;\n }\n\n if (!shouldStayAlive()) {\n // yield one microtask turn for async transitions (e.g. @clack closing/reopening readline)\n await new Promise<void>((r) => queueMicrotask(r));\n if (didExit || myHaltSignal?.aborted) break;\n if (shouldStayAlive()) {\n everNonEmpty = true;\n consecutiveEmpty = 0;\n continue;\n }\n\n consecutiveEmpty++;\n\n if (myHaltSignal) {\n // terminal mode: tiered timeout -- no output yet (10s), had refs before (5s), output but no refs (2s)\n if (!everNonEmpty && !out && !err) {\n if (consecutiveEmpty >= 50) {\n break;\n }\n } else if (!everNonEmpty) {\n if (consecutiveEmpty >= Math.ceil(2_000 / tickMs)) {\n break;\n }\n } else {\n if (consecutiveEmpty >= 100) {\n break;\n }\n }\n } else {\n break; // Non-terminal: exit immediately when empty.\n }\n } else {\n consecutiveEmpty = 0;\n everNonEmpty = true;\n }\n }\n\n return { stdout: out, stderr: err, exitCode: didExit ? code : 0 };\n } finally {\n cleanup();\n // defuse proc.exit so floating Promises don't throw unhandled rejections\n proc.exit = (() => {}) as unknown as (c?: number) => never;\n globalThis.removeEventListener(\"unhandledrejection\", rejHandler);\n globalThis.removeEventListener(\"error\", errHandler);\n // restore _liveStdin for the parent's stdin relay\n _liveStdin = prevLiveStdin;\n const ctxRestore = getActiveContext();\n if (ctxRestore) ctxRestore.liveStdin = prevLiveStdin;\n // full reset\n closeAllServers();\n resetRefCount();\n resetActiveInterfaceCount();\n }\n}\n\nasync function npxExecute(\n params: string[],\n ctx: ShellContext,\n): Promise<ShellResult> {\n if (!_vol) return { stdout: \"\", stderr: \"Volume unavailable\\n\", exitCode: 1 };\n\n // parse npx flags\n let autoInstall = true;\n let installPkg: string | null = null;\n const filteredParams: string[] = [];\n let separatorSeen = false;\n\n for (let i = 0; i < params.length; i++) {\n if (separatorSeen) {\n filteredParams.push(params[i]);\n continue;\n }\n if (params[i] === \"--\") {\n separatorSeen = true;\n continue;\n }\n if (params[i] === \"-y\" || params[i] === \"--yes\") {\n autoInstall = true;\n continue;\n }\n if (params[i] === \"-n\" || params[i] === \"--no\") {\n autoInstall = false;\n continue;\n }\n if (\n (params[i] === \"-p\" || params[i] === \"--package\") &&\n i + 1 < params.length\n ) {\n installPkg = params[++i];\n continue;\n }\n if (params[i] === \"--help\" || params[i] === \"-h\") {\n return {\n stdout:\n `${A_BOLD}Usage:${A_RESET} npx [options] <command> [args...]\\n\\n` +\n `${A_BOLD}Options:${A_RESET}\\n` +\n ` ${A_CYAN}-y${A_RESET}, ${A_CYAN}--yes${A_RESET} Auto-confirm install\\n` +\n ` ${A_CYAN}-n${A_RESET}, ${A_CYAN}--no${A_RESET} Don't install if not found\\n` +\n ` ${A_CYAN}-p${A_RESET}, ${A_CYAN}--package${A_RESET} Specify package to install\\n` +\n ` ${A_CYAN}--${A_RESET} Separator for command args\\n`,\n stderr: \"\",\n exitCode: 0,\n };\n }\n filteredParams.push(params[i]);\n }\n\n let pkgSpec = filteredParams[0];\n if (!pkgSpec) {\n return {\n stdout: \"\",\n stderr: formatErr(\"missing command\", \"npm\"),\n exitCode: 1,\n };\n }\n\n let cmdName: string;\n let version: string | undefined;\n if (pkgSpec.startsWith(\"@\")) {\n // scoped: @scope/name or @scope/name@version\n const rest = pkgSpec.slice(1);\n const atIdx = rest.indexOf(\"@\");\n if (atIdx > 0 && rest.indexOf(\"/\") < atIdx) {\n cmdName = \"@\" + rest.slice(0, atIdx);\n version = rest.slice(atIdx + 1);\n } else {\n cmdName = pkgSpec;\n }\n } else {\n const atIdx = pkgSpec.indexOf(\"@\");\n if (atIdx > 0) {\n cmdName = pkgSpec.slice(0, atIdx);\n version = pkgSpec.slice(atIdx + 1);\n } else {\n cmdName = pkgSpec;\n }\n }\n\n // -p overrides the package to install\n const actualPkg = installPkg || pkgSpec;\n const actualPkgName = installPkg\n ? installPkg.replace(/@[^@/]+$/, \"\").replace(/^@/, \"\")\n : cmdName;\n\n let resolvedBin = findBinary(cmdName, _vol, ctx.cwd);\n\n // not found locally -- try installing\n if (!resolvedBin && autoInstall) {\n const installResult = await installPackages([actualPkg], ctx);\n if (installResult.exitCode !== 0) return installResult;\n resolvedBin = findBinary(cmdName, _vol, ctx.cwd);\n }\n\n if (!resolvedBin) {\n return {\n stdout: \"\",\n stderr: `npx: command '${cmdName}' not found\\n`,\n exitCode: 1,\n };\n }\n\n // run directly via node handler to avoid shell re-parsing mangling arguments\n return executeNodeBinary(resolvedBin, filteredParams.slice(1), ctx);\n}\n\nfunction findBinary(\n name: string,\n vol: MemoryVolume,\n cwd?: string,\n): string | null {\n const cleanName = name.startsWith(\"@\") ? name : name;\n const shortName = cleanName.includes(\"/\")\n ? cleanName.split(\"/\").pop()!\n : cleanName;\n\n // cwd-local first, then root fallback\n const searchRoots =\n cwd && cwd !== \"/\"\n ? [`${cwd}/node_modules`, `/node_modules`]\n : [`/node_modules`];\n\n for (const nmDir of searchRoots) {\n // check package.json bin field for the real JS entry point\n const pkgJsonPath = `${nmDir}/${cleanName}/package.json`;\n if (vol.existsSync(pkgJsonPath)) {\n try {\n const pkg = JSON.parse(\n vol.readFileSync(pkgJsonPath, \"utf8\") as string,\n ) as PackageManifest;\n if (pkg.bin) {\n if (typeof pkg.bin === \"string\") {\n return `${nmDir}/${cleanName}/${pkg.bin}`;\n }\n if (typeof pkg.bin === \"object\") {\n const binMap = pkg.bin as Record<string, string>;\n const binEntry =\n binMap[shortName] ||\n binMap[cleanName] ||\n Object.values(binMap)[0];\n if (binEntry) return `${nmDir}/${cleanName}/${binEntry}`;\n }\n }\n // fallback to main\n if (pkg.main) return `${nmDir}/${cleanName}/${pkg.main}`;\n } catch {\n /* ignore */\n }\n }\n\n // .bin stubs -- resolve through to the actual JS target they reference\n const binPath = `${nmDir}/.bin/${name}`;\n if (vol.existsSync(binPath)) {\n try {\n const stub = vol.readFileSync(binPath, \"utf8\");\n // stubs look like: node \"/node_modules/pkg/index.js\" \"$@\"\n const match = stub.match(/node\\s+\"([^\"]+)\"/);\n if (match && vol.existsSync(match[1])) return match[1];\n } catch {\n /* ignore */\n }\n }\n }\n\n return null;\n}\n\nexport interface RunOptions {\n cwd?: string;\n env?: Record<string, string>;\n encoding?: BufferEncoding | \"buffer\";\n timeout?: number;\n maxBuffer?: number;\n shell?: string | boolean;\n}\n\nexport type RunCallback = (\n err: Error | null,\n stdout: string | Buffer,\n stderr: string | Buffer,\n) => void;\n\nexport interface SpawnConfig {\n cwd?: string;\n env?: Record<string, string>;\n shell?: boolean | string;\n stdio?: \"pipe\" | \"inherit\" | \"ignore\" | Array<\"pipe\" | \"inherit\" | \"ignore\">;\n}\n\nexport function exec(\n command: string,\n optsOrCb?: RunOptions | RunCallback,\n cb?: RunCallback,\n): ShellProcess {\n let options: RunOptions = {};\n let done: RunCallback | undefined;\n if (typeof optsOrCb === \"function\") {\n done = optsOrCb;\n } else if (optsOrCb) {\n options = optsOrCb;\n done = cb;\n }\n\n const child = new ShellProcess();\n\n if (!_shell) {\n const e = new Error(\"[Nodepod] exec requires shell. Call initShellExec() first.\");\n setTimeout(() => {\n child.emit(\"error\", e);\n if (done) done(e, \"\", \"\");\n }, 0);\n return child;\n }\n\n const cwd = options.cwd ?? getShellCwd();\n const env = (options.env as Record<string, string>) ?? undefined;\n\n // run inline via NodepodShell -- only fork() gets a dedicated worker\n _shell.exec(command, { cwd, env }).then(\n (result) => {\n const { stdout, stderr, exitCode } = result;\n if (stdout) child.stdout?.push(Buffer.from(stdout));\n if (stderr) child.stderr?.push(Buffer.from(stderr));\n child.stdout?.push(null);\n child.stderr?.push(null);\n child.exitCode = exitCode;\n child.emit(\"close\", exitCode, null);\n child.emit(\"exit\", exitCode, null);\n if (done) {\n if (exitCode !== 0) {\n const e = new Error(`Command failed: ${command}`);\n (e as any).code = exitCode;\n done(e, stdout ?? \"\", stderr ?? \"\");\n } else {\n done(null, stdout ?? \"\", stderr ?? \"\");\n }\n }\n },\n (e) => {\n child.emit(\"error\", e instanceof Error ? e : new Error(String(e)));\n if (done) done(e instanceof Error ? e : new Error(String(e)), \"\", \"\");\n },\n );\n\n return child;\n}\n\nexport function execSync(cmd: string, opts?: RunOptions): string | Buffer {\n const trimmed = cmd.trim();\n const encoding = opts?.encoding;\n\n // fast path: trivially synchronous commands (version checks, echo, pwd)\n const result = handleSyncCommand(trimmed, opts);\n if (result !== null) {\n if (encoding === \"buffer\") return Buffer.from(result);\n return result;\n }\n\n // true blocking path via Atomics.wait()\n if (!_syncChannel) {\n throw new Error(\n \"[Nodepod] execSync requires SyncChannel (worker mode with SharedArrayBuffer). \" +\n \"Ensure Nodepod is running in worker mode with COOP/COEP headers.\",\n );\n }\n\n const slot = _syncChannel.allocateSlot();\n const cwd = opts?.cwd ?? (globalThis as any).process?.cwd?.() ?? \"/\";\n const env = (opts?.env as Record<string, string>) ?? {};\n\n (self as any).postMessage({\n type: \"spawn-sync\",\n requestId: _nextSyncRequestId++,\n command: trimmed.split(/\\s+/)[0],\n args: trimmed.split(/\\s+/).slice(1),\n cwd,\n env,\n syncSlot: slot,\n shellCommand: trimmed,\n });\n\n // blocks until main thread spawns child and child completes\n const { exitCode, stdout } = _syncChannel.waitForResult(slot, 120_000);\n\n if (exitCode !== 0) {\n const err: any = new Error(`Command failed: ${trimmed}\\n${stdout}`);\n err.status = exitCode;\n err.stderr = Buffer.from(\"\");\n err.stdout = Buffer.from(stdout);\n err.output = [null, err.stdout, err.stderr];\n throw err;\n }\n\n if (encoding === \"buffer\") return Buffer.from(stdout);\n return stdout;\n}\n\nlet _nextSyncRequestId = 1;\n\nconst KNOWN_BINS: Record<string, string> = {\n node: \"/usr/local/bin/node\",\n npm: \"/usr/local/bin/npm\",\n npx: \"/usr/local/bin/npx\",\n pnpm: \"/usr/local/bin/pnpm\",\n yarn: \"/usr/local/bin/yarn\",\n bun: \"/usr/local/bin/bun\",\n bunx: \"/usr/local/bin/bunx\",\n git: \"/usr/bin/git\",\n};\n\nfunction isBinaryAvailable(name: string): string | null {\n if (KNOWN_BINS[name]) return KNOWN_BINS[name];\n if (_vol) {\n const binPath = `/node_modules/.bin/${name}`;\n if (_vol.existsSync(binPath)) return binPath;\n }\n return null;\n}\n\n// throw an error matching real Node.js execSync behaviour for failed commands\nfunction throwCommandNotFound(cmd: string): never {\n const err: any = new Error(\n `Command failed: ${cmd}\\n/bin/sh: 1: ${cmd.split(/\\s+/)[0]}: not found\\n`,\n );\n err.status = 127;\n err.stderr = Buffer.from(`/bin/sh: 1: ${cmd.split(/\\s+/)[0]}: not found\\n`);\n err.stdout = Buffer.from(\"\");\n throw err;\n}\n\nfunction _findGitDir(cwd: string): { gitDir: string; workDir: string } | null {\n if (!_vol) return null;\n let dir = cwd;\n while (true) {\n const gitPath = dir + \"/.git\";\n try { if (_vol.existsSync(gitPath)) return { gitDir: gitPath, workDir: dir }; } catch { /* */ }\n const parent = dir.substring(0, dir.lastIndexOf(\"/\")) || \"/\";\n if (parent === dir) break;\n dir = parent;\n }\n try { if (_vol.existsSync(\"/.git\")) return { gitDir: \"/.git\", workDir: \"/\" }; } catch { /* */ }\n return null;\n}\n\nfunction _readHeadBranch(gitDir: string): string {\n try {\n const head = (_vol!.readFileSync(gitDir + \"/HEAD\", \"utf8\" as any) as string).trim();\n if (head.startsWith(\"ref: refs/heads/\")) return head.slice(16);\n return head.slice(0, 7);\n } catch { return \"main\"; }\n}\n\nfunction _resolveHeadHash(gitDir: string): string | null {\n try {\n const head = (_vol!.readFileSync(gitDir + \"/HEAD\", \"utf8\" as any) as string).trim();\n if (head.startsWith(\"ref: \")) {\n const refPath = gitDir + \"/\" + head.slice(5);\n return (_vol!.readFileSync(refPath, \"utf8\" as any) as string).trim();\n }\n return head;\n } catch { return null; }\n}\n\nfunction _readGitConfigKey(gitDir: string, key: string): string | null {\n try {\n const config = _vol!.readFileSync(gitDir + \"/config\", \"utf8\" as any) as string;\n const parts = key.split(\".\");\n let sectionName: string, subSection: string | null = null, propName: string;\n if (parts.length === 3) { sectionName = parts[0]; subSection = parts[1]; propName = parts[2]; }\n else if (parts.length === 2) { sectionName = parts[0]; propName = parts[1]; }\n else return null;\n const lines = config.split(\"\\n\");\n let inSection = false;\n for (const line of lines) {\n const trimmed = line.trim();\n if (trimmed.startsWith(\"[\")) {\n inSection = subSection\n ? trimmed === `[${sectionName} \"${subSection}\"]`\n : trimmed === `[${sectionName}]`;\n continue;\n }\n if (inSection) {\n const m = trimmed.match(/^(\\w+)\\s*=\\s*(.*)$/);\n if (m && m[1] === propName) return m[2].trim();\n }\n }\n } catch { /* */ }\n return null;\n}\n\nfunction handleSyncCommand(cmd: string, opts?: RunOptions): string | null {\n if (/^node\\s+(--version|-v)\\s*$/.test(cmd)) return VERSIONS.NODE + \"\\n\";\n if (/^npm\\s+(--version|-v)\\s*$/.test(cmd)) return VERSIONS.NPM + \"\\n\";\n if (/^pnpm\\s+(--version|-v)\\s*$/.test(cmd)) return VERSIONS.PNPM + \"\\n\";\n if (/^yarn\\s+(--version|-v)\\s*$/.test(cmd)) return VERSIONS.YARN + \"\\n\";\n if (/^bun\\s+(--version|-v)\\s*$/.test(cmd)) return VERSIONS.BUN + \"\\n\";\n\n // which / command -v\n const whichMatch = cmd.match(/^(?:which|command\\s+-v)\\s+(\\S+)\\s*$/);\n if (whichMatch) {\n const binName = whichMatch[1];\n const binPath = isBinaryAvailable(binName);\n if (binPath) return binPath + \"\\n\";\n throwCommandNotFound(cmd);\n }\n\n // <binary> --version / -v\n const versionMatch = cmd.match(/^(\\S+)\\s+(--version|-v)\\s*$/);\n if (versionMatch) {\n const binName = versionMatch[1];\n if (\n binName === \"node\" ||\n binName === \"npm\" ||\n binName === \"pnpm\" ||\n binName === \"yarn\" ||\n binName === \"bun\"\n )\n return null; // handled above\n if (!isBinaryAvailable(binName)) throwCommandNotFound(cmd);\n // known binary but no version handler -- fall through to async\n }\n\n // registry queries (Next.js uses this to find npm registry)\n if (/^(?:npm|yarn|pnpm)\\s+config\\s+get\\s+registry\\s*$/.test(cmd)) {\n return NPM_REGISTRY_URL_SLASH.replace(/\\/$/, \"\") + \"\\n\";\n }\n\n const echoMatch = cmd.match(/^echo\\s+[\"']?(.*?)[\"']?\\s*$/);\n if (echoMatch) return echoMatch[1] + \"\\n\";\n if (/^uname\\s+-s\\s*$/.test(cmd)) return \"Linux\\n\";\n if (/^uname\\s+-m\\s*$/.test(cmd)) return \"x86_64\\n\";\n if (/^uname\\s+-a\\s*$/.test(cmd))\n return \"Linux nodepod 5.10.0 #1 SMP x86_64 GNU/Linux\\n\";\n // git fast-path for sync commands\n if (/^git\\s+(--version|-v)\\s*$/.test(cmd) || cmd === \"git --version\") {\n return \"git version \" + VERSIONS.GIT + \"\\n\";\n }\n if (_vol) {\n const gitRevParseMatch = cmd.match(/^git\\s+rev-parse\\s+(.+)$/);\n if (gitRevParseMatch) {\n const gitArgs = gitRevParseMatch[1].trim();\n const cwd = opts?.cwd || \"/\";\n const gd = _findGitDir(cwd);\n if (gitArgs === \"--show-toplevel\") return gd ? gd.workDir + \"\\n\" : \"\";\n if (gitArgs === \"--is-inside-work-tree\") return gd ? \"true\\n\" : \"false\\n\";\n if (gitArgs === \"--git-dir\") return gd ? \".git\\n\" : \"\";\n if (gitArgs === \"--is-bare-repository\") return \"false\\n\";\n if (gitArgs === \"--abbrev-ref HEAD\" && gd) return _readHeadBranch(gd.gitDir) + \"\\n\";\n if ((gitArgs === \"HEAD\" || gitArgs === \"--verify HEAD\") && gd) {\n const h = _resolveHeadHash(gd.gitDir);\n return h ? h + \"\\n\" : \"\";\n }\n if (gitArgs === \"--short HEAD\" && gd) {\n const h = _resolveHeadHash(gd.gitDir);\n return h ? h.slice(0, 7) + \"\\n\" : \"\";\n }\n }\n if (/^git\\s+branch\\s+--show-current\\s*$/.test(cmd)) {\n const cwd = opts?.cwd || \"/\";\n const gd = _findGitDir(cwd);\n if (gd) return _readHeadBranch(gd.gitDir) + \"\\n\";\n }\n const gitConfigGetMatch = cmd.match(/^git\\s+config\\s+(?:--get\\s+)?(\\S+)\\s*$/);\n if (gitConfigGetMatch) {\n const cwd = opts?.cwd || \"/\";\n const gd = _findGitDir(cwd);\n if (gd) {\n const val = _readGitConfigKey(gd.gitDir, gitConfigGetMatch[1]);\n return val !== null ? val + \"\\n\" : \"\";\n }\n return \"\";\n }\n }\n // catch-all for git\n if (/^git\\s/.test(cmd)) return \"\";\n if (cmd === \"true\" || cmd === \":\") return \"\";\n if (cmd === \"pwd\") return (opts?.cwd || \"/\") + \"\\n\";\n if (cmd.startsWith(\"cat \") && _vol) {\n const path = cmd.slice(4).trim().replace(/['\"]/g, \"\");\n try {\n return _vol.readFileSync(path, \"utf8\" as any);\n } catch {\n return \"\";\n }\n }\n if ((cmd === \"ls\" || cmd.startsWith(\"ls \")) && _vol) {\n const dir =\n cmd === \"ls\"\n ? opts?.cwd || \"/\"\n : cmd.slice(3).trim().replace(/['\"]/g, \"\");\n try {\n return _vol.readdirSync(dir).join(\"\\n\") + \"\\n\";\n } catch {\n return \"\";\n }\n }\n const testMatch = cmd.match(\n /^(?:test|\\[)\\s+(-[fd])\\s+[\"']?(.*?)[\"']?\\s*\\]?\\s*$/,\n );\n if (testMatch && _vol) {\n const flag = testMatch[1];\n const path = testMatch[2];\n try {\n const st = _vol.statSync(path);\n if (flag === \"-f\" && st.isFile()) return \"\";\n if (flag === \"-d\" && st.isDirectory()) return \"\";\n } catch {\n /* */\n }\n return \"\";\n }\n return null;\n}\n\nexport function spawn(\n command: string,\n argsOrOpts?: string[] | SpawnConfig,\n opts?: SpawnConfig,\n): ShellProcess {\n let spawnArgs: string[] = [];\n let cfg: SpawnConfig = {};\n if (Array.isArray(argsOrOpts)) {\n spawnArgs = argsOrOpts;\n cfg = opts ?? {};\n } else if (argsOrOpts) cfg = argsOrOpts;\n\n const child = new ShellProcess();\n\n // spawn() gets a dedicated worker (streaming output, long-lived processes).\n // exec() runs inline since it collects all output at the end.\n if (_spawnChildFn) {\n const cwd = cfg.cwd ?? getShellCwd();\n const env = (cfg.env as Record<string, string>) ?? {};\n const fullCmd = spawnArgs.length ? `${command} ${spawnArgs.join(\" \")}` : command;\n\n // keep parent alive while child is running\n ref();\n\n _spawnChildFn(command, spawnArgs, {\n cwd,\n env,\n stdio: \"pipe\",\n onStdout: (data: string) => {\n child.stdout?.push(Buffer.from(data));\n // also route through parent's stdout sink for terminal output\n const sink = getStdoutSink();\n if (sink) sink(data);\n },\n onStderr: (data: string) => {\n child.stderr?.push(Buffer.from(data));\n const sink = getStderrSink();\n if (sink) sink(data);\n },\n }).then(({ exitCode }) => {\n unref(); // Child done — release event loop hold\n child.stdout?.push(null);\n child.stderr?.push(null);\n child.exitCode = exitCode;\n child.emit(\"close\", exitCode, null);\n child.emit(\"exit\", exitCode, null);\n }).catch((e) => {\n unref(); // Child done — release event loop hold\n child.emit(\"error\", e instanceof Error ? e : new Error(String(e)));\n });\n } else if (_shell) {\n // fallback: inline execution (no streaming)\n const cwd = cfg.cwd ?? getShellCwd();\n const env = (cfg.env as Record<string, string>) ?? undefined;\n const fullCmd = spawnArgs.length\n ? `${command} ${spawnArgs.map((a) => a.includes(\" \") ? `\"${a}\"` : a).join(\" \")}`\n : command;\n\n _shell.exec(fullCmd, { cwd, env }).then(\n (result) => {\n const { stdout, stderr, exitCode } = result;\n if (stdout) child.stdout?.push(Buffer.from(stdout));\n if (stderr) child.stderr?.push(Buffer.from(stderr));\n child.stdout?.push(null);\n child.stderr?.push(null);\n child.exitCode = exitCode;\n child.emit(\"close\", exitCode, null);\n child.emit(\"exit\", exitCode, null);\n },\n (e) => {\n child.emit(\"error\", e instanceof Error ? e : new Error(String(e)));\n },\n );\n } else {\n setTimeout(() => {\n child.emit(\"error\", new Error(\"[Nodepod] spawn requires shell or worker mode.\"));\n }, 0);\n }\n\n return child;\n}\n\nexport function spawnSync(\n cmd: string,\n args?: string[] | SpawnConfig,\n opts?: SpawnConfig,\n): {\n stdout: Buffer;\n stderr: Buffer;\n status: number;\n signal: null;\n pid: number;\n output: [null, Buffer, Buffer];\n error?: Error;\n} {\n let spawnArgs: string[] = [];\n let cfg: SpawnConfig = {};\n if (Array.isArray(args)) {\n spawnArgs = args;\n cfg = opts ?? {};\n } else if (args) {\n cfg = args;\n }\n\n const full = spawnArgs.length ? `${cmd} ${spawnArgs.join(\" \")}` : cmd;\n const syncResult = handleSyncCommand(full, { cwd: cfg.cwd, env: cfg.env });\n\n if (syncResult !== null) {\n const stdout = Buffer.from(syncResult);\n const stderr = Buffer.from(\"\");\n return {\n stdout,\n stderr,\n status: 0,\n signal: null,\n pid: MOCK_PID.BASE + Math.floor(Math.random() * MOCK_PID.RANGE),\n output: [null, stdout, stderr],\n };\n }\n\n // true blocking path via Atomics.wait()\n if (!_syncChannel) {\n throw new Error(\n \"[Nodepod] spawnSync requires SyncChannel (worker mode with SharedArrayBuffer). \" +\n \"Ensure Nodepod is running in worker mode with COOP/COEP headers.\",\n );\n }\n\n const slot = _syncChannel.allocateSlot();\n const cwd = cfg.cwd ?? (globalThis as any).process?.cwd?.() ?? \"/\";\n const env = (cfg.env as Record<string, string>) ?? {};\n\n (self as any).postMessage({\n type: \"spawn-sync\",\n requestId: _nextSyncRequestId++,\n command: full.split(/\\s+/)[0],\n args: full.split(/\\s+/).slice(1),\n cwd,\n env,\n syncSlot: slot,\n shellCommand: full,\n });\n\n // blocks until main thread spawns child and child completes\n try {\n const { exitCode, stdout: stdoutStr } = _syncChannel.waitForResult(slot, 120_000);\n const stdout = Buffer.from(stdoutStr);\n const stderr = Buffer.from(\"\");\n return {\n stdout,\n stderr,\n status: exitCode,\n signal: null,\n pid: MOCK_PID.BASE + Math.floor(Math.random() * MOCK_PID.RANGE),\n output: [null, stdout, stderr],\n };\n } catch (e: any) {\n const stdout = Buffer.from(e?.stdout ?? \"\");\n const stderr = Buffer.from(e?.message ?? \"\");\n return {\n stdout,\n stderr,\n status: e?.status ?? 1,\n signal: null,\n pid: MOCK_PID.BASE + Math.floor(Math.random() * MOCK_PID.RANGE),\n output: [null, stdout, stderr],\n error: e instanceof Error ? e : new Error(String(e)),\n };\n }\n}\n\nexport function execFileSync(\n file: string,\n args?: string[],\n opts?: RunOptions,\n): string | Buffer {\n const cmd = args?.length ? `${file} ${args.join(\" \")}` : file;\n return execSync(cmd, opts);\n}\n\nexport function execFile(\n file: string,\n argsOrOpts?: string[] | RunOptions | RunCallback,\n optsOrCb?: RunOptions | RunCallback,\n cb?: RunCallback,\n): ShellProcess {\n let fileArgs: string[] = [];\n let options: RunOptions = {};\n let done: RunCallback | undefined;\n\n if (Array.isArray(argsOrOpts)) {\n fileArgs = argsOrOpts;\n if (typeof optsOrCb === \"function\") done = optsOrCb;\n else if (optsOrCb) {\n options = optsOrCb;\n done = cb;\n }\n } else if (typeof argsOrOpts === \"function\") {\n done = argsOrOpts;\n } else if (argsOrOpts) {\n options = argsOrOpts;\n done = optsOrCb as RunCallback;\n }\n\n const cmd = fileArgs.length ? `${file} ${fileArgs.join(\" \")}` : file;\n return exec(cmd, options, done);\n}\n\nexport function fork(\n modulePath: string,\n argsOrOpts?: string[] | Record<string, unknown>,\n opts?: Record<string, unknown>,\n): ShellProcess {\n let args: string[] = [];\n let cfg: Record<string, unknown> = {};\n if (Array.isArray(argsOrOpts)) {\n args = argsOrOpts;\n cfg = opts ?? {};\n } else if (argsOrOpts) cfg = argsOrOpts;\n\n const cwd = (cfg.cwd as string) || getShellCwd();\n const env = (cfg.env as Record<string, string>) ||\n (_shell?.getEnv() ?? {});\n\n const resolved = modulePath.startsWith(\"/\")\n ? modulePath\n : `${cwd}/${modulePath}`.replace(/\\/+/g, \"/\");\n\n const child = new ShellProcess();\n child.connected = true;\n child.spawnargs = [\"node\", resolved, ...args];\n child.spawnfile = \"node\";\n\n if (!_forkChildFn) {\n setTimeout(() => {\n child.emit(\"error\", new Error(\"[Nodepod] fork requires worker mode. No forkChild callback set.\"));\n }, 0);\n return child;\n }\n\n // keep parent alive while forked child is running\n ref();\n const handle = _forkChildFn(resolved, args, {\n cwd,\n env,\n onStdout: (data: string) => {\n child.stdout?.emit(\"data\", data);\n // also route through parent's stdout sink (fork inherits stdio by default)\n const sink = getStdoutSink();\n if (sink) sink(data);\n },\n onStderr: (data: string) => {\n child.stderr?.emit(\"data\", data);\n const sink = getStderrSink();\n if (sink) sink(data);\n },\n onIPC: (data: unknown) => {\n child.emit(\"message\", data);\n },\n onExit: (exitCode: number) => {\n unref(); // Child done — release event loop hold\n child.exitCode = exitCode;\n child.connected = false;\n child.emit(\"exit\", exitCode, null);\n child.emit(\"close\", exitCode, null);\n },\n });\n\n // parent→child IPC\n child.send = (msg: unknown, _cb?: (e: Error | null) => void): boolean => {\n if (!child.connected) return false;\n handle.sendIPC(msg);\n return true;\n };\n\n child.kill = (sig?: string): boolean => {\n child.killed = true;\n child.connected = false;\n handle.disconnect();\n child.emit(\"exit\", null, sig ?? \"SIGTERM\");\n child.emit(\"close\", null, sig ?? \"SIGTERM\");\n return true;\n };\n\n child.disconnect = (): void => {\n child.connected = false;\n handle.disconnect();\n child.emit(\"disconnect\");\n };\n\n return child;\n}\n\nexport interface ShellProcess extends EventEmitter {\n pid: number;\n connected: boolean;\n killed: boolean;\n exitCode: number | null;\n signalCode: string | null;\n spawnargs: string[];\n spawnfile: string;\n stdin: Writable | null;\n stdout: Readable | null;\n stderr: Readable | null;\n kill(sig?: string): boolean;\n disconnect(): void;\n send(msg: unknown, cb?: (e: Error | null) => void): boolean;\n ref(): this;\n unref(): this;\n}\n\ninterface ShellProcessConstructor {\n new (): ShellProcess;\n (this: any): void;\n prototype: any;\n}\n\nexport const ShellProcess = function ShellProcess(this: any) {\n if (!this) return;\n EventEmitter.call(this);\n this.pid = MOCK_PID.BASE + Math.floor(Math.random() * MOCK_PID.RANGE);\n this.connected = false;\n this.killed = false;\n this.exitCode = null;\n this.signalCode = null;\n this.spawnargs = [];\n this.spawnfile = \"\";\n this.stdin = new Writable();\n this.stdout = new Readable();\n this.stderr = new Readable();\n} as unknown as ShellProcessConstructor;\n\nObject.setPrototypeOf(ShellProcess.prototype, EventEmitter.prototype);\n\nShellProcess.prototype.kill = function kill(this: any, sig?: string): boolean {\n this.killed = true;\n this.emit(\"exit\", null, sig ?? \"SIGTERM\");\n return true;\n};\n\nShellProcess.prototype.disconnect = function disconnect(this: any): void {\n this.connected = false;\n};\n\nShellProcess.prototype.send = function send(this: any, msg: unknown, cb?: (e: Error | null) => void): boolean {\n if (cb) cb(new Error(\"IPC unavailable\"));\n return false;\n};\n\nShellProcess.prototype.ref = function ref(this: any): any {\n return this;\n};\n\nShellProcess.prototype.unref = function unref(this: any): any {\n return this;\n};\n\nexport default {\n exec,\n execSync,\n execFile,\n execFileSync,\n spawn,\n spawnSync,\n fork,\n ShellProcess,\n initShellExec,\n shellExec,\n setStreamingCallbacks,\n clearStreamingCallbacks,\n sendStdin,\n setSyncChannel,\n setSpawnChildCallback,\n setForkChildCallback,\n setIPCSend,\n setIPCReceiveHandler,\n handleIPCFromParent,\n executeNodeBinary,\n};\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","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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"}