@nimbus-sh/core 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1056) hide show
  1. package/dist/_shared/ai-egress.d.ts +73 -0
  2. package/dist/_shared/ai-egress.d.ts.map +1 -0
  3. package/dist/_shared/ai-egress.js +88 -0
  4. package/dist/_shared/byte-stream.d.ts +59 -0
  5. package/dist/_shared/byte-stream.d.ts.map +1 -0
  6. package/dist/_shared/byte-stream.js +77 -0
  7. package/dist/_shared/bytes.d.ts +18 -0
  8. package/dist/_shared/bytes.d.ts.map +1 -0
  9. package/dist/_shared/bytes.js +17 -0
  10. package/dist/_shared/cache-stats.d.ts +145 -0
  11. package/dist/_shared/cache-stats.d.ts.map +1 -0
  12. package/dist/_shared/cache-stats.js +161 -0
  13. package/dist/_shared/crypto.d.ts +17 -0
  14. package/dist/_shared/crypto.d.ts.map +1 -0
  15. package/dist/_shared/crypto.js +131 -0
  16. package/dist/_shared/esbuild-facet-shim.d.ts +21 -0
  17. package/dist/_shared/esbuild-facet-shim.d.ts.map +1 -0
  18. package/dist/_shared/esbuild-facet-shim.js +22 -0
  19. package/dist/_shared/exports-resolver.d.ts +74 -0
  20. package/dist/_shared/exports-resolver.d.ts.map +1 -0
  21. package/dist/_shared/exports-resolver.js +284 -0
  22. package/dist/_shared/facet-vfs-cursor.d.ts +48 -0
  23. package/dist/_shared/facet-vfs-cursor.d.ts.map +1 -0
  24. package/dist/_shared/facet-vfs-cursor.js +51 -0
  25. package/dist/_shared/install-phase.d.ts +47 -0
  26. package/dist/_shared/install-phase.d.ts.map +1 -0
  27. package/dist/_shared/install-phase.js +1 -0
  28. package/dist/_shared/lru-map.d.ts +25 -0
  29. package/dist/_shared/lru-map.d.ts.map +1 -0
  30. package/dist/_shared/lru-map.js +57 -0
  31. package/dist/_shared/real-node-imports.d.ts +43 -0
  32. package/dist/_shared/real-node-imports.d.ts.map +1 -0
  33. package/dist/_shared/real-node-imports.js +52 -0
  34. package/dist/_shared/retry.d.ts +92 -0
  35. package/dist/_shared/retry.d.ts.map +1 -0
  36. package/dist/_shared/retry.js +155 -0
  37. package/dist/_shared/rpc-dispose.d.ts +4 -0
  38. package/dist/_shared/rpc-dispose.d.ts.map +1 -0
  39. package/dist/_shared/rpc-dispose.js +30 -0
  40. package/dist/_shared/terminal.d.ts +2 -0
  41. package/dist/_shared/terminal.d.ts.map +1 -0
  42. package/dist/_shared/terminal.js +3 -0
  43. package/dist/_shared/typescript-specifiers.d.ts +58 -0
  44. package/dist/_shared/typescript-specifiers.d.ts.map +1 -0
  45. package/dist/_shared/typescript-specifiers.js +84 -0
  46. package/dist/_shared/untrusted-request.d.ts +34 -0
  47. package/dist/_shared/untrusted-request.d.ts.map +1 -0
  48. package/dist/_shared/untrusted-request.js +74 -0
  49. package/dist/_shared/vfs-write-ledger.d.ts +3 -0
  50. package/dist/_shared/vfs-write-ledger.d.ts.map +1 -0
  51. package/dist/_shared/vfs-write-ledger.js +439 -0
  52. package/dist/_shared/w7-frame.d.ts +79 -0
  53. package/dist/_shared/w7-frame.d.ts.map +1 -0
  54. package/dist/_shared/w7-frame.js +839 -0
  55. package/dist/_shared/weighted-credit-pool.d.ts +61 -0
  56. package/dist/_shared/weighted-credit-pool.d.ts.map +1 -0
  57. package/dist/_shared/weighted-credit-pool.js +196 -0
  58. package/dist/constants.d.ts +64 -0
  59. package/dist/constants.d.ts.map +1 -0
  60. package/dist/constants.js +264 -0
  61. package/dist/index.d.ts +16 -0
  62. package/dist/index.d.ts.map +1 -0
  63. package/dist/index.js +13 -0
  64. package/dist/observability/diag-counters.d.ts +236 -0
  65. package/dist/observability/diag-counters.d.ts.map +1 -0
  66. package/dist/observability/diag-counters.js +195 -0
  67. package/dist/observability/heap-estimate.d.ts +225 -0
  68. package/dist/observability/heap-estimate.d.ts.map +1 -0
  69. package/dist/observability/heap-estimate.js +185 -0
  70. package/dist/observability/heavy-alloc-coord.d.ts +93 -0
  71. package/dist/observability/heavy-alloc-coord.d.ts.map +1 -0
  72. package/dist/observability/heavy-alloc-coord.js +181 -0
  73. package/dist/observability/oom-classify.d.ts +138 -0
  74. package/dist/observability/oom-classify.d.ts.map +1 -0
  75. package/dist/observability/oom-classify.js +261 -0
  76. package/dist/observability/oom-discriminator.d.ts +176 -0
  77. package/dist/observability/oom-discriminator.d.ts.map +1 -0
  78. package/dist/observability/oom-discriminator.js +272 -0
  79. package/dist/runtime/assets-loader.d.ts +71 -0
  80. package/dist/runtime/assets-loader.d.ts.map +1 -0
  81. package/dist/runtime/assets-loader.js +139 -0
  82. package/dist/runtime/barrel-detect.d.ts +46 -0
  83. package/dist/runtime/barrel-detect.d.ts.map +1 -0
  84. package/dist/runtime/barrel-detect.js +73 -0
  85. package/dist/runtime/bash/preamble.d.ts +2 -0
  86. package/dist/runtime/bash/preamble.d.ts.map +1 -0
  87. package/dist/runtime/bash/preamble.js +1849 -0
  88. package/dist/runtime/bash/types.d.ts +433 -0
  89. package/dist/runtime/bash/types.d.ts.map +1 -0
  90. package/dist/runtime/bash/types.js +1 -0
  91. package/dist/runtime/bundle-profile.d.ts +14 -0
  92. package/dist/runtime/bundle-profile.d.ts.map +1 -0
  93. package/dist/runtime/bundle-profile.js +20 -0
  94. package/dist/runtime/cirrus-vite-config-rewriter.d.ts +2 -0
  95. package/dist/runtime/cirrus-vite-config-rewriter.d.ts.map +1 -0
  96. package/dist/runtime/cirrus-vite-config-rewriter.js +28 -0
  97. package/dist/runtime/cli-flags.d.ts +2 -0
  98. package/dist/runtime/cli-flags.d.ts.map +1 -0
  99. package/dist/runtime/cli-flags.js +11 -0
  100. package/dist/runtime/comment-strip.d.ts +37 -0
  101. package/dist/runtime/comment-strip.d.ts.map +1 -0
  102. package/dist/runtime/comment-strip.js +74 -0
  103. package/dist/runtime/cpython-preamble.d.ts +32 -0
  104. package/dist/runtime/cpython-preamble.d.ts.map +1 -0
  105. package/dist/runtime/cpython-preamble.js +296 -0
  106. package/dist/runtime/esbuild-service.d.ts +242 -0
  107. package/dist/runtime/esbuild-service.d.ts.map +1 -0
  108. package/dist/runtime/esbuild-service.js +1452 -0
  109. package/dist/runtime/framework-detect.d.ts +70 -0
  110. package/dist/runtime/framework-detect.d.ts.map +1 -0
  111. package/dist/runtime/framework-detect.js +177 -0
  112. package/dist/runtime/import-meta-transform.d.ts +3 -0
  113. package/dist/runtime/import-meta-transform.d.ts.map +1 -0
  114. package/dist/runtime/import-meta-transform.js +15 -0
  115. package/dist/runtime/javascript-ast.d.ts +13 -0
  116. package/dist/runtime/javascript-ast.d.ts.map +1 -0
  117. package/dist/runtime/javascript-ast.js +57 -0
  118. package/dist/runtime/long-running-handle.d.ts +119 -0
  119. package/dist/runtime/long-running-handle.d.ts.map +1 -0
  120. package/dist/runtime/long-running-handle.js +169 -0
  121. package/dist/runtime/module-source-rewriter.d.ts +11 -0
  122. package/dist/runtime/module-source-rewriter.d.ts.map +1 -0
  123. package/dist/runtime/module-source-rewriter.js +61 -0
  124. package/dist/runtime/opentui-wasm-backend.d.ts +160 -0
  125. package/dist/runtime/opentui-wasm-backend.d.ts.map +1 -0
  126. package/dist/runtime/opentui-wasm-backend.js +416 -0
  127. package/dist/runtime/os-contracts.d.ts +436 -0
  128. package/dist/runtime/os-contracts.d.ts.map +1 -0
  129. package/dist/runtime/os-contracts.js +101 -0
  130. package/dist/runtime/port-registry.d.ts +100 -0
  131. package/dist/runtime/port-registry.d.ts.map +1 -0
  132. package/dist/runtime/port-registry.js +265 -0
  133. package/dist/runtime/process-input-routing.d.ts +33 -0
  134. package/dist/runtime/process-input-routing.d.ts.map +1 -0
  135. package/dist/runtime/process-input-routing.js +59 -0
  136. package/dist/runtime/process-input.d.ts +39 -0
  137. package/dist/runtime/process-input.d.ts.map +1 -0
  138. package/dist/runtime/process-input.js +117 -0
  139. package/dist/runtime/process-io-protocol.d.ts +90 -0
  140. package/dist/runtime/process-io-protocol.d.ts.map +1 -0
  141. package/dist/runtime/process-io-protocol.js +81 -0
  142. package/dist/runtime/process-logs.d.ts +352 -0
  143. package/dist/runtime/process-logs.d.ts.map +1 -0
  144. package/dist/runtime/process-logs.js +750 -0
  145. package/dist/runtime/process-table.d.ts +101 -0
  146. package/dist/runtime/process-table.d.ts.map +1 -0
  147. package/dist/runtime/process-table.js +175 -0
  148. package/dist/runtime/project-detect.d.ts +21 -0
  149. package/dist/runtime/project-detect.d.ts.map +1 -0
  150. package/dist/runtime/project-detect.js +46 -0
  151. package/dist/runtime/python-server-adapter.d.ts +33 -0
  152. package/dist/runtime/python-server-adapter.d.ts.map +1 -0
  153. package/dist/runtime/python-server-adapter.js +132 -0
  154. package/dist/runtime/require-resolver.d.ts +44 -0
  155. package/dist/runtime/require-resolver.d.ts.map +1 -0
  156. package/dist/runtime/require-resolver.js +698 -0
  157. package/dist/runtime/router-basename.d.ts +36 -0
  158. package/dist/runtime/router-basename.d.ts.map +1 -0
  159. package/dist/runtime/router-basename.js +310 -0
  160. package/dist/runtime/ruby-green-threads.d.ts +136 -0
  161. package/dist/runtime/ruby-green-threads.d.ts.map +1 -0
  162. package/dist/runtime/ruby-green-threads.js +904 -0
  163. package/dist/runtime/ruby-socket-shim.d.ts +2 -0
  164. package/dist/runtime/ruby-socket-shim.d.ts.map +1 -0
  165. package/dist/runtime/ruby-socket-shim.js +548 -0
  166. package/dist/runtime/session-process-supervisor.d.ts +156 -0
  167. package/dist/runtime/session-process-supervisor.d.ts.map +1 -0
  168. package/dist/runtime/session-process-supervisor.js +238 -0
  169. package/dist/runtime/sqlite-runtime-fs-bridge.d.ts +70 -0
  170. package/dist/runtime/sqlite-runtime-fs-bridge.d.ts.map +1 -0
  171. package/dist/runtime/sqlite-runtime-fs-bridge.js +425 -0
  172. package/dist/runtime/streams.d.ts +13 -0
  173. package/dist/runtime/streams.d.ts.map +1 -0
  174. package/dist/runtime/streams.js +546 -0
  175. package/dist/runtime/undici-shim.d.ts +62 -0
  176. package/dist/runtime/undici-shim.d.ts.map +1 -0
  177. package/dist/runtime/undici-shim.js +516 -0
  178. package/dist/runtime/vfs-manifest.d.ts +63 -0
  179. package/dist/runtime/vfs-manifest.d.ts.map +1 -0
  180. package/dist/runtime/vfs-manifest.js +141 -0
  181. package/dist/runtime/vfs-snapshot.d.ts +75 -0
  182. package/dist/runtime/vfs-snapshot.d.ts.map +1 -0
  183. package/dist/runtime/vfs-snapshot.js +220 -0
  184. package/dist/runtime/virtual-socket-kernel.d.ts +252 -0
  185. package/dist/runtime/virtual-socket-kernel.d.ts.map +1 -0
  186. package/dist/runtime/virtual-socket-kernel.js +1143 -0
  187. package/dist/runtime/vite-config-parser.d.ts +13 -0
  188. package/dist/runtime/vite-config-parser.d.ts.map +1 -0
  189. package/dist/runtime/vite-config-parser.js +258 -0
  190. package/dist/runtime/wasi/types.d.ts +347 -0
  191. package/dist/runtime/wasi/types.d.ts.map +1 -0
  192. package/dist/runtime/wasi/types.js +1 -0
  193. package/dist/runtime/wasi-instance.d.ts +215 -0
  194. package/dist/runtime/wasi-instance.d.ts.map +1 -0
  195. package/dist/runtime/wasi-instance.generated.d.ts +14 -0
  196. package/dist/runtime/wasi-instance.generated.d.ts.map +1 -0
  197. package/dist/runtime/wasi-instance.generated.js +13 -0
  198. package/dist/runtime/wasi-instance.js +179 -0
  199. package/dist/runtime/wasi-threads.d.ts +169 -0
  200. package/dist/runtime/wasi-threads.d.ts.map +1 -0
  201. package/dist/runtime/wasi-threads.js +669 -0
  202. package/dist/runtime/wasm-memory.d.ts +84 -0
  203. package/dist/runtime/wasm-memory.d.ts.map +1 -0
  204. package/dist/runtime/wasm-memory.js +235 -0
  205. package/dist/shell/elevation-commands.d.ts +5 -0
  206. package/dist/shell/elevation-commands.d.ts.map +1 -0
  207. package/dist/shell/elevation-commands.js +109 -0
  208. package/dist/shell/exec-dispatch.d.ts +57 -0
  209. package/dist/shell/exec-dispatch.d.ts.map +1 -0
  210. package/dist/shell/exec-dispatch.js +181 -0
  211. package/dist/shell/features.d.ts +154 -0
  212. package/dist/shell/features.d.ts.map +1 -0
  213. package/dist/shell/features.js +792 -0
  214. package/dist/shell/shell-entrypoints.d.ts +55 -0
  215. package/dist/shell/shell-entrypoints.d.ts.map +1 -0
  216. package/dist/shell/shell-entrypoints.js +230 -0
  217. package/dist/shell/shell-invocation.d.ts +36 -0
  218. package/dist/shell/shell-invocation.d.ts.map +1 -0
  219. package/dist/shell/shell-invocation.js +148 -0
  220. package/dist/shell/unix-accounts.d.ts +27 -0
  221. package/dist/shell/unix-accounts.d.ts.map +1 -0
  222. package/dist/shell/unix-accounts.js +105 -0
  223. package/dist/shell/unix-commands.d.ts +15 -0
  224. package/dist/shell/unix-commands.d.ts.map +1 -0
  225. package/dist/shell/unix-commands.js +4702 -0
  226. package/dist/substrate/lifo/commands/archive/gunzip.d.ts +4 -0
  227. package/dist/substrate/lifo/commands/archive/gunzip.d.ts.map +1 -0
  228. package/dist/substrate/lifo/commands/archive/gunzip.js +58 -0
  229. package/dist/substrate/lifo/commands/archive/gzip.d.ts +4 -0
  230. package/dist/substrate/lifo/commands/archive/gzip.d.ts.map +1 -0
  231. package/dist/substrate/lifo/commands/archive/gzip.js +73 -0
  232. package/dist/substrate/lifo/commands/archive/tar.d.ts +4 -0
  233. package/dist/substrate/lifo/commands/archive/tar.d.ts.map +1 -0
  234. package/dist/substrate/lifo/commands/archive/tar.js +158 -0
  235. package/dist/substrate/lifo/commands/archive/unzip.d.ts +4 -0
  236. package/dist/substrate/lifo/commands/archive/unzip.d.ts.map +1 -0
  237. package/dist/substrate/lifo/commands/archive/unzip.js +114 -0
  238. package/dist/substrate/lifo/commands/archive/zip.d.ts +4 -0
  239. package/dist/substrate/lifo/commands/archive/zip.d.ts.map +1 -0
  240. package/dist/substrate/lifo/commands/archive/zip.js +58 -0
  241. package/dist/substrate/lifo/commands/fs/basename.d.ts +4 -0
  242. package/dist/substrate/lifo/commands/fs/basename.d.ts.map +1 -0
  243. package/dist/substrate/lifo/commands/fs/basename.js +12 -0
  244. package/dist/substrate/lifo/commands/fs/cat.d.ts +4 -0
  245. package/dist/substrate/lifo/commands/fs/cat.d.ts.map +1 -0
  246. package/dist/substrate/lifo/commands/fs/cat.js +52 -0
  247. package/dist/substrate/lifo/commands/fs/chmod.d.ts +25 -0
  248. package/dist/substrate/lifo/commands/fs/chmod.d.ts.map +1 -0
  249. package/dist/substrate/lifo/commands/fs/chmod.js +97 -0
  250. package/dist/substrate/lifo/commands/fs/chown.d.ts +4 -0
  251. package/dist/substrate/lifo/commands/fs/chown.d.ts.map +1 -0
  252. package/dist/substrate/lifo/commands/fs/chown.js +41 -0
  253. package/dist/substrate/lifo/commands/fs/cp.d.ts +4 -0
  254. package/dist/substrate/lifo/commands/fs/cp.d.ts.map +1 -0
  255. package/dist/substrate/lifo/commands/fs/cp.js +29 -0
  256. package/dist/substrate/lifo/commands/fs/df.d.ts +4 -0
  257. package/dist/substrate/lifo/commands/fs/df.d.ts.map +1 -0
  258. package/dist/substrate/lifo/commands/fs/df.js +52 -0
  259. package/dist/substrate/lifo/commands/fs/dirname.d.ts +4 -0
  260. package/dist/substrate/lifo/commands/fs/dirname.d.ts.map +1 -0
  261. package/dist/substrate/lifo/commands/fs/dirname.js +12 -0
  262. package/dist/substrate/lifo/commands/fs/du.d.ts +4 -0
  263. package/dist/substrate/lifo/commands/fs/du.d.ts.map +1 -0
  264. package/dist/substrate/lifo/commands/fs/du.js +104 -0
  265. package/dist/substrate/lifo/commands/fs/file.d.ts +4 -0
  266. package/dist/substrate/lifo/commands/fs/file.d.ts.map +1 -0
  267. package/dist/substrate/lifo/commands/fs/file.js +84 -0
  268. package/dist/substrate/lifo/commands/fs/find.d.ts +4 -0
  269. package/dist/substrate/lifo/commands/fs/find.d.ts.map +1 -0
  270. package/dist/substrate/lifo/commands/fs/find.js +72 -0
  271. package/dist/substrate/lifo/commands/fs/ln.d.ts +4 -0
  272. package/dist/substrate/lifo/commands/fs/ln.d.ts.map +1 -0
  273. package/dist/substrate/lifo/commands/fs/ln.js +15 -0
  274. package/dist/substrate/lifo/commands/fs/ls.d.ts +4 -0
  275. package/dist/substrate/lifo/commands/fs/ls.d.ts.map +1 -0
  276. package/dist/substrate/lifo/commands/fs/ls.js +146 -0
  277. package/dist/substrate/lifo/commands/fs/mkdir.d.ts +4 -0
  278. package/dist/substrate/lifo/commands/fs/mkdir.d.ts.map +1 -0
  279. package/dist/substrate/lifo/commands/fs/mkdir.js +31 -0
  280. package/dist/substrate/lifo/commands/fs/mktemp.d.ts +4 -0
  281. package/dist/substrate/lifo/commands/fs/mktemp.d.ts.map +1 -0
  282. package/dist/substrate/lifo/commands/fs/mktemp.js +48 -0
  283. package/dist/substrate/lifo/commands/fs/mv.d.ts +4 -0
  284. package/dist/substrate/lifo/commands/fs/mv.d.ts.map +1 -0
  285. package/dist/substrate/lifo/commands/fs/mv.js +113 -0
  286. package/dist/substrate/lifo/commands/fs/realpath.d.ts +4 -0
  287. package/dist/substrate/lifo/commands/fs/realpath.d.ts.map +1 -0
  288. package/dist/substrate/lifo/commands/fs/realpath.js +27 -0
  289. package/dist/substrate/lifo/commands/fs/rm.d.ts +4 -0
  290. package/dist/substrate/lifo/commands/fs/rm.d.ts.map +1 -0
  291. package/dist/substrate/lifo/commands/fs/rm.js +48 -0
  292. package/dist/substrate/lifo/commands/fs/rmdir.d.ts +4 -0
  293. package/dist/substrate/lifo/commands/fs/rmdir.d.ts.map +1 -0
  294. package/dist/substrate/lifo/commands/fs/rmdir.js +44 -0
  295. package/dist/substrate/lifo/commands/fs/stat.d.ts +4 -0
  296. package/dist/substrate/lifo/commands/fs/stat.d.ts.map +1 -0
  297. package/dist/substrate/lifo/commands/fs/stat.js +35 -0
  298. package/dist/substrate/lifo/commands/fs/touch.d.ts +4 -0
  299. package/dist/substrate/lifo/commands/fs/touch.d.ts.map +1 -0
  300. package/dist/substrate/lifo/commands/fs/touch.js +26 -0
  301. package/dist/substrate/lifo/commands/fs/tree.d.ts +4 -0
  302. package/dist/substrate/lifo/commands/fs/tree.d.ts.map +1 -0
  303. package/dist/substrate/lifo/commands/fs/tree.js +69 -0
  304. package/dist/substrate/lifo/commands/index.d.ts +3 -0
  305. package/dist/substrate/lifo/commands/index.d.ts.map +1 -0
  306. package/dist/substrate/lifo/commands/index.js +1 -0
  307. package/dist/substrate/lifo/commands/io/dd.d.ts +4 -0
  308. package/dist/substrate/lifo/commands/io/dd.d.ts.map +1 -0
  309. package/dist/substrate/lifo/commands/io/dd.js +256 -0
  310. package/dist/substrate/lifo/commands/io/printf.d.ts +4 -0
  311. package/dist/substrate/lifo/commands/io/printf.d.ts.map +1 -0
  312. package/dist/substrate/lifo/commands/io/printf.js +82 -0
  313. package/dist/substrate/lifo/commands/io/tee.d.ts +4 -0
  314. package/dist/substrate/lifo/commands/io/tee.d.ts.map +1 -0
  315. package/dist/substrate/lifo/commands/io/tee.js +31 -0
  316. package/dist/substrate/lifo/commands/io/xargs.d.ts +4 -0
  317. package/dist/substrate/lifo/commands/io/xargs.d.ts.map +1 -0
  318. package/dist/substrate/lifo/commands/io/xargs.js +44 -0
  319. package/dist/substrate/lifo/commands/io/yes.d.ts +4 -0
  320. package/dist/substrate/lifo/commands/io/yes.d.ts.map +1 -0
  321. package/dist/substrate/lifo/commands/io/yes.js +10 -0
  322. package/dist/substrate/lifo/commands/net/curl.d.ts +6 -0
  323. package/dist/substrate/lifo/commands/net/curl.d.ts.map +1 -0
  324. package/dist/substrate/lifo/commands/net/curl.js +617 -0
  325. package/dist/substrate/lifo/commands/net/dig.d.ts +4 -0
  326. package/dist/substrate/lifo/commands/net/dig.d.ts.map +1 -0
  327. package/dist/substrate/lifo/commands/net/dig.js +77 -0
  328. package/dist/substrate/lifo/commands/net/forward.d.ts +14 -0
  329. package/dist/substrate/lifo/commands/net/forward.d.ts.map +1 -0
  330. package/dist/substrate/lifo/commands/net/forward.js +80 -0
  331. package/dist/substrate/lifo/commands/net/host.d.ts +14 -0
  332. package/dist/substrate/lifo/commands/net/host.d.ts.map +1 -0
  333. package/dist/substrate/lifo/commands/net/host.js +160 -0
  334. package/dist/substrate/lifo/commands/net/ifconfig.d.ts +8 -0
  335. package/dist/substrate/lifo/commands/net/ifconfig.d.ts.map +1 -0
  336. package/dist/substrate/lifo/commands/net/ifconfig.js +120 -0
  337. package/dist/substrate/lifo/commands/net/ip.d.ts +14 -0
  338. package/dist/substrate/lifo/commands/net/ip.d.ts.map +1 -0
  339. package/dist/substrate/lifo/commands/net/ip.js +508 -0
  340. package/dist/substrate/lifo/commands/net/netstat.d.ts +8 -0
  341. package/dist/substrate/lifo/commands/net/netstat.d.ts.map +1 -0
  342. package/dist/substrate/lifo/commands/net/netstat.js +94 -0
  343. package/dist/substrate/lifo/commands/net/ping.d.ts +4 -0
  344. package/dist/substrate/lifo/commands/net/ping.d.ts.map +1 -0
  345. package/dist/substrate/lifo/commands/net/ping.js +64 -0
  346. package/dist/substrate/lifo/commands/net/ports.d.ts +8 -0
  347. package/dist/substrate/lifo/commands/net/ports.d.ts.map +1 -0
  348. package/dist/substrate/lifo/commands/net/ports.js +36 -0
  349. package/dist/substrate/lifo/commands/net/route.d.ts +8 -0
  350. package/dist/substrate/lifo/commands/net/route.d.ts.map +1 -0
  351. package/dist/substrate/lifo/commands/net/route.js +128 -0
  352. package/dist/substrate/lifo/commands/net/tunnel-v2.d.ts +4 -0
  353. package/dist/substrate/lifo/commands/net/tunnel-v2.d.ts.map +1 -0
  354. package/dist/substrate/lifo/commands/net/tunnel-v2.js +141 -0
  355. package/dist/substrate/lifo/commands/net/tunnel.d.ts +6 -0
  356. package/dist/substrate/lifo/commands/net/tunnel.d.ts.map +1 -0
  357. package/dist/substrate/lifo/commands/net/tunnel.js +232 -0
  358. package/dist/substrate/lifo/commands/net/wget.d.ts +4 -0
  359. package/dist/substrate/lifo/commands/net/wget.d.ts.map +1 -0
  360. package/dist/substrate/lifo/commands/net/wget.js +78 -0
  361. package/dist/substrate/lifo/commands/registry.d.ts +15 -0
  362. package/dist/substrate/lifo/commands/registry.d.ts.map +1 -0
  363. package/dist/substrate/lifo/commands/registry.js +120 -0
  364. package/dist/substrate/lifo/commands/signal.d.ts +12 -0
  365. package/dist/substrate/lifo/commands/signal.d.ts.map +1 -0
  366. package/dist/substrate/lifo/commands/signal.js +47 -0
  367. package/dist/substrate/lifo/commands/system/bc.d.ts +4 -0
  368. package/dist/substrate/lifo/commands/system/bc.d.ts.map +1 -0
  369. package/dist/substrate/lifo/commands/system/bc.js +243 -0
  370. package/dist/substrate/lifo/commands/system/cal.d.ts +4 -0
  371. package/dist/substrate/lifo/commands/system/cal.d.ts.map +1 -0
  372. package/dist/substrate/lifo/commands/system/cal.js +81 -0
  373. package/dist/substrate/lifo/commands/system/date.d.ts +4 -0
  374. package/dist/substrate/lifo/commands/system/date.d.ts.map +1 -0
  375. package/dist/substrate/lifo/commands/system/date.js +79 -0
  376. package/dist/substrate/lifo/commands/system/env.d.ts +4 -0
  377. package/dist/substrate/lifo/commands/system/env.d.ts.map +1 -0
  378. package/dist/substrate/lifo/commands/system/env.js +7 -0
  379. package/dist/substrate/lifo/commands/system/fastfetch.d.ts +4 -0
  380. package/dist/substrate/lifo/commands/system/fastfetch.d.ts.map +1 -0
  381. package/dist/substrate/lifo/commands/system/fastfetch.js +385 -0
  382. package/dist/substrate/lifo/commands/system/free.d.ts +4 -0
  383. package/dist/substrate/lifo/commands/system/free.d.ts.map +1 -0
  384. package/dist/substrate/lifo/commands/system/free.js +36 -0
  385. package/dist/substrate/lifo/commands/system/help.d.ts +4 -0
  386. package/dist/substrate/lifo/commands/system/help.d.ts.map +1 -0
  387. package/dist/substrate/lifo/commands/system/help.js +46 -0
  388. package/dist/substrate/lifo/commands/system/hostname.d.ts +4 -0
  389. package/dist/substrate/lifo/commands/system/hostname.d.ts.map +1 -0
  390. package/dist/substrate/lifo/commands/system/hostname.js +6 -0
  391. package/dist/substrate/lifo/commands/system/kill.d.ts +4 -0
  392. package/dist/substrate/lifo/commands/system/kill.d.ts.map +1 -0
  393. package/dist/substrate/lifo/commands/system/kill.js +76 -0
  394. package/dist/substrate/lifo/commands/system/lifo.d.ts +41 -0
  395. package/dist/substrate/lifo/commands/system/lifo.d.ts.map +1 -0
  396. package/dist/substrate/lifo/commands/system/lifo.js +446 -0
  397. package/dist/substrate/lifo/commands/system/logout.d.ts +5 -0
  398. package/dist/substrate/lifo/commands/system/logout.d.ts.map +1 -0
  399. package/dist/substrate/lifo/commands/system/logout.js +15 -0
  400. package/dist/substrate/lifo/commands/system/man.d.ts +4 -0
  401. package/dist/substrate/lifo/commands/system/man.d.ts.map +1 -0
  402. package/dist/substrate/lifo/commands/system/man.js +144 -0
  403. package/dist/substrate/lifo/commands/system/node.d.ts +6 -0
  404. package/dist/substrate/lifo/commands/system/node.d.ts.map +1 -0
  405. package/dist/substrate/lifo/commands/system/node.js +1241 -0
  406. package/dist/substrate/lifo/commands/system/npm.d.ts +26 -0
  407. package/dist/substrate/lifo/commands/system/npm.d.ts.map +1 -0
  408. package/dist/substrate/lifo/commands/system/npm.js +934 -0
  409. package/dist/substrate/lifo/commands/system/pkg.d.ts +4 -0
  410. package/dist/substrate/lifo/commands/system/pkg.d.ts.map +1 -0
  411. package/dist/substrate/lifo/commands/system/pkg.js +97 -0
  412. package/dist/substrate/lifo/commands/system/ps.d.ts +5 -0
  413. package/dist/substrate/lifo/commands/system/ps.d.ts.map +1 -0
  414. package/dist/substrate/lifo/commands/system/ps.js +35 -0
  415. package/dist/substrate/lifo/commands/system/registry-schemas.d.ts +44 -0
  416. package/dist/substrate/lifo/commands/system/registry-schemas.d.ts.map +1 -0
  417. package/dist/substrate/lifo/commands/system/registry-schemas.js +28 -0
  418. package/dist/substrate/lifo/commands/system/sha256sum.d.ts +4 -0
  419. package/dist/substrate/lifo/commands/system/sha256sum.d.ts.map +1 -0
  420. package/dist/substrate/lifo/commands/system/sha256sum.js +86 -0
  421. package/dist/substrate/lifo/commands/system/sl.d.ts +4 -0
  422. package/dist/substrate/lifo/commands/system/sl.d.ts.map +1 -0
  423. package/dist/substrate/lifo/commands/system/sl.js +204 -0
  424. package/dist/substrate/lifo/commands/system/sleep.d.ts +4 -0
  425. package/dist/substrate/lifo/commands/system/sleep.d.ts.map +1 -0
  426. package/dist/substrate/lifo/commands/system/sleep.js +27 -0
  427. package/dist/substrate/lifo/commands/system/stty.d.ts +4 -0
  428. package/dist/substrate/lifo/commands/system/stty.d.ts.map +1 -0
  429. package/dist/substrate/lifo/commands/system/stty.js +61 -0
  430. package/dist/substrate/lifo/commands/system/systemctl.d.ts +4 -0
  431. package/dist/substrate/lifo/commands/system/systemctl.d.ts.map +1 -0
  432. package/dist/substrate/lifo/commands/system/systemctl.js +164 -0
  433. package/dist/substrate/lifo/commands/system/top.d.ts +4 -0
  434. package/dist/substrate/lifo/commands/system/top.d.ts.map +1 -0
  435. package/dist/substrate/lifo/commands/system/top.js +38 -0
  436. package/dist/substrate/lifo/commands/system/uname.d.ts +4 -0
  437. package/dist/substrate/lifo/commands/system/uname.d.ts.map +1 -0
  438. package/dist/substrate/lifo/commands/system/uname.js +55 -0
  439. package/dist/substrate/lifo/commands/system/uptime.d.ts +4 -0
  440. package/dist/substrate/lifo/commands/system/uptime.d.ts.map +1 -0
  441. package/dist/substrate/lifo/commands/system/uptime.js +16 -0
  442. package/dist/substrate/lifo/commands/system/watch.d.ts +4 -0
  443. package/dist/substrate/lifo/commands/system/watch.d.ts.map +1 -0
  444. package/dist/substrate/lifo/commands/system/watch.js +53 -0
  445. package/dist/substrate/lifo/commands/system/which.d.ts +4 -0
  446. package/dist/substrate/lifo/commands/system/which.d.ts.map +1 -0
  447. package/dist/substrate/lifo/commands/system/which.js +45 -0
  448. package/dist/substrate/lifo/commands/system/whoami.d.ts +4 -0
  449. package/dist/substrate/lifo/commands/system/whoami.d.ts.map +1 -0
  450. package/dist/substrate/lifo/commands/system/whoami.js +6 -0
  451. package/dist/substrate/lifo/commands/text/awk.d.ts +4 -0
  452. package/dist/substrate/lifo/commands/text/awk.d.ts.map +1 -0
  453. package/dist/substrate/lifo/commands/text/awk.js +200 -0
  454. package/dist/substrate/lifo/commands/text/base64.d.ts +4 -0
  455. package/dist/substrate/lifo/commands/text/base64.d.ts.map +1 -0
  456. package/dist/substrate/lifo/commands/text/base64.js +102 -0
  457. package/dist/substrate/lifo/commands/text/cut.d.ts +4 -0
  458. package/dist/substrate/lifo/commands/text/cut.d.ts.map +1 -0
  459. package/dist/substrate/lifo/commands/text/cut.js +91 -0
  460. package/dist/substrate/lifo/commands/text/diff.d.ts +4 -0
  461. package/dist/substrate/lifo/commands/text/diff.d.ts.map +1 -0
  462. package/dist/substrate/lifo/commands/text/diff.js +292 -0
  463. package/dist/substrate/lifo/commands/text/grep.d.ts +4 -0
  464. package/dist/substrate/lifo/commands/text/grep.d.ts.map +1 -0
  465. package/dist/substrate/lifo/commands/text/grep.js +189 -0
  466. package/dist/substrate/lifo/commands/text/head.d.ts +4 -0
  467. package/dist/substrate/lifo/commands/text/head.d.ts.map +1 -0
  468. package/dist/substrate/lifo/commands/text/head.js +111 -0
  469. package/dist/substrate/lifo/commands/text/less.d.ts +4 -0
  470. package/dist/substrate/lifo/commands/text/less.d.ts.map +1 -0
  471. package/dist/substrate/lifo/commands/text/less.js +335 -0
  472. package/dist/substrate/lifo/commands/text/nano.d.ts +4 -0
  473. package/dist/substrate/lifo/commands/text/nano.d.ts.map +1 -0
  474. package/dist/substrate/lifo/commands/text/nano.js +510 -0
  475. package/dist/substrate/lifo/commands/text/nl.d.ts +4 -0
  476. package/dist/substrate/lifo/commands/text/nl.d.ts.map +1 -0
  477. package/dist/substrate/lifo/commands/text/nl.js +64 -0
  478. package/dist/substrate/lifo/commands/text/rev.d.ts +4 -0
  479. package/dist/substrate/lifo/commands/text/rev.d.ts.map +1 -0
  480. package/dist/substrate/lifo/commands/text/rev.js +41 -0
  481. package/dist/substrate/lifo/commands/text/sed.d.ts +21 -0
  482. package/dist/substrate/lifo/commands/text/sed.d.ts.map +1 -0
  483. package/dist/substrate/lifo/commands/text/sed.js +248 -0
  484. package/dist/substrate/lifo/commands/text/seq.d.ts +4 -0
  485. package/dist/substrate/lifo/commands/text/seq.d.ts.map +1 -0
  486. package/dist/substrate/lifo/commands/text/seq.js +69 -0
  487. package/dist/substrate/lifo/commands/text/sort.d.ts +4 -0
  488. package/dist/substrate/lifo/commands/text/sort.d.ts.map +1 -0
  489. package/dist/substrate/lifo/commands/text/sort.js +90 -0
  490. package/dist/substrate/lifo/commands/text/strings.d.ts +4 -0
  491. package/dist/substrate/lifo/commands/text/strings.d.ts.map +1 -0
  492. package/dist/substrate/lifo/commands/text/strings.js +69 -0
  493. package/dist/substrate/lifo/commands/text/tac.d.ts +4 -0
  494. package/dist/substrate/lifo/commands/text/tac.d.ts.map +1 -0
  495. package/dist/substrate/lifo/commands/text/tac.js +32 -0
  496. package/dist/substrate/lifo/commands/text/tail.d.ts +4 -0
  497. package/dist/substrate/lifo/commands/text/tail.d.ts.map +1 -0
  498. package/dist/substrate/lifo/commands/text/tail.js +64 -0
  499. package/dist/substrate/lifo/commands/text/tr.d.ts +4 -0
  500. package/dist/substrate/lifo/commands/text/tr.d.ts.map +1 -0
  501. package/dist/substrate/lifo/commands/text/tr.js +180 -0
  502. package/dist/substrate/lifo/commands/text/uniq.d.ts +4 -0
  503. package/dist/substrate/lifo/commands/text/uniq.d.ts.map +1 -0
  504. package/dist/substrate/lifo/commands/text/uniq.js +82 -0
  505. package/dist/substrate/lifo/commands/text/wc.d.ts +4 -0
  506. package/dist/substrate/lifo/commands/text/wc.d.ts.map +1 -0
  507. package/dist/substrate/lifo/commands/text/wc.js +107 -0
  508. package/dist/substrate/lifo/commands/types.d.ts +49 -0
  509. package/dist/substrate/lifo/commands/types.d.ts.map +1 -0
  510. package/dist/substrate/lifo/commands/types.js +1 -0
  511. package/dist/substrate/lifo/index.d.ts +67 -0
  512. package/dist/substrate/lifo/index.d.ts.map +1 -0
  513. package/dist/substrate/lifo/index.js +66 -0
  514. package/dist/substrate/lifo/kernel/ServiceManager.d.ts +51 -0
  515. package/dist/substrate/lifo/kernel/ServiceManager.d.ts.map +1 -0
  516. package/dist/substrate/lifo/kernel/ServiceManager.js +302 -0
  517. package/dist/substrate/lifo/kernel/index.d.ts +40 -0
  518. package/dist/substrate/lifo/kernel/index.d.ts.map +1 -0
  519. package/dist/substrate/lifo/kernel/index.js +170 -0
  520. package/dist/substrate/lifo/kernel/network/Bridge.d.ts +110 -0
  521. package/dist/substrate/lifo/kernel/network/Bridge.d.ts.map +1 -0
  522. package/dist/substrate/lifo/kernel/network/Bridge.js +278 -0
  523. package/dist/substrate/lifo/kernel/network/DNSResolver.d.ts +50 -0
  524. package/dist/substrate/lifo/kernel/network/DNSResolver.d.ts.map +1 -0
  525. package/dist/substrate/lifo/kernel/network/DNSResolver.js +135 -0
  526. package/dist/substrate/lifo/kernel/network/NetworkInterface.d.ts +83 -0
  527. package/dist/substrate/lifo/kernel/network/NetworkInterface.d.ts.map +1 -0
  528. package/dist/substrate/lifo/kernel/network/NetworkInterface.js +183 -0
  529. package/dist/substrate/lifo/kernel/network/NetworkNamespace.d.ts +98 -0
  530. package/dist/substrate/lifo/kernel/network/NetworkNamespace.d.ts.map +1 -0
  531. package/dist/substrate/lifo/kernel/network/NetworkNamespace.js +149 -0
  532. package/dist/substrate/lifo/kernel/network/NetworkStack.d.ts +178 -0
  533. package/dist/substrate/lifo/kernel/network/NetworkStack.d.ts.map +1 -0
  534. package/dist/substrate/lifo/kernel/network/NetworkStack.js +460 -0
  535. package/dist/substrate/lifo/kernel/network/PortBridge.d.ts +44 -0
  536. package/dist/substrate/lifo/kernel/network/PortBridge.d.ts.map +1 -0
  537. package/dist/substrate/lifo/kernel/network/PortBridge.js +158 -0
  538. package/dist/substrate/lifo/kernel/network/RoutingTable.d.ts +55 -0
  539. package/dist/substrate/lifo/kernel/network/RoutingTable.d.ts.map +1 -0
  540. package/dist/substrate/lifo/kernel/network/RoutingTable.js +167 -0
  541. package/dist/substrate/lifo/kernel/network/Socket.d.ts +65 -0
  542. package/dist/substrate/lifo/kernel/network/Socket.d.ts.map +1 -0
  543. package/dist/substrate/lifo/kernel/network/Socket.js +201 -0
  544. package/dist/substrate/lifo/kernel/network/index.d.ts +11 -0
  545. package/dist/substrate/lifo/kernel/network/index.d.ts.map +1 -0
  546. package/dist/substrate/lifo/kernel/network/index.js +9 -0
  547. package/dist/substrate/lifo/kernel/network/tunnel/BaseTunnel.d.ts +55 -0
  548. package/dist/substrate/lifo/kernel/network/tunnel/BaseTunnel.d.ts.map +1 -0
  549. package/dist/substrate/lifo/kernel/network/tunnel/BaseTunnel.js +88 -0
  550. package/dist/substrate/lifo/kernel/network/tunnel/VETHPair.d.ts +71 -0
  551. package/dist/substrate/lifo/kernel/network/tunnel/VETHPair.d.ts.map +1 -0
  552. package/dist/substrate/lifo/kernel/network/tunnel/VETHPair.js +191 -0
  553. package/dist/substrate/lifo/kernel/network/tunnel/WebSocketTunnel.d.ts +89 -0
  554. package/dist/substrate/lifo/kernel/network/tunnel/WebSocketTunnel.d.ts.map +1 -0
  555. package/dist/substrate/lifo/kernel/network/tunnel/WebSocketTunnel.js +324 -0
  556. package/dist/substrate/lifo/kernel/network/types.d.ts +159 -0
  557. package/dist/substrate/lifo/kernel/network/types.d.ts.map +1 -0
  558. package/dist/substrate/lifo/kernel/network/types.js +5 -0
  559. package/dist/substrate/lifo/kernel/persistence/PersistenceManager.d.ts +12 -0
  560. package/dist/substrate/lifo/kernel/persistence/PersistenceManager.d.ts.map +1 -0
  561. package/dist/substrate/lifo/kernel/persistence/PersistenceManager.js +47 -0
  562. package/dist/substrate/lifo/kernel/persistence/backends.d.ts +15 -0
  563. package/dist/substrate/lifo/kernel/persistence/backends.d.ts.map +1 -0
  564. package/dist/substrate/lifo/kernel/persistence/backends.js +18 -0
  565. package/dist/substrate/lifo/kernel/persistence/index.d.ts +6 -0
  566. package/dist/substrate/lifo/kernel/persistence/index.d.ts.map +1 -0
  567. package/dist/substrate/lifo/kernel/persistence/index.js +3 -0
  568. package/dist/substrate/lifo/kernel/persistence/serializer.d.ts +21 -0
  569. package/dist/substrate/lifo/kernel/persistence/serializer.d.ts.map +1 -0
  570. package/dist/substrate/lifo/kernel/persistence/serializer.js +99 -0
  571. package/dist/substrate/lifo/kernel/samples.d.ts +3 -0
  572. package/dist/substrate/lifo/kernel/samples.d.ts.map +1 -0
  573. package/dist/substrate/lifo/kernel/samples.js +930 -0
  574. package/dist/substrate/lifo/kernel/storage/BlobStore.d.ts +22 -0
  575. package/dist/substrate/lifo/kernel/storage/BlobStore.d.ts.map +1 -0
  576. package/dist/substrate/lifo/kernel/storage/BlobStore.js +84 -0
  577. package/dist/substrate/lifo/kernel/storage/ContentStore.d.ts +54 -0
  578. package/dist/substrate/lifo/kernel/storage/ContentStore.d.ts.map +1 -0
  579. package/dist/substrate/lifo/kernel/storage/ContentStore.js +120 -0
  580. package/dist/substrate/lifo/kernel/storage/index.d.ts +6 -0
  581. package/dist/substrate/lifo/kernel/storage/index.d.ts.map +1 -0
  582. package/dist/substrate/lifo/kernel/storage/index.js +3 -0
  583. package/dist/substrate/lifo/kernel/unit-parser.d.ts +22 -0
  584. package/dist/substrate/lifo/kernel/unit-parser.d.ts.map +1 -0
  585. package/dist/substrate/lifo/kernel/unit-parser.js +80 -0
  586. package/dist/substrate/lifo/kernel/vfs/VFS.d.ts +99 -0
  587. package/dist/substrate/lifo/kernel/vfs/VFS.d.ts.map +1 -0
  588. package/dist/substrate/lifo/kernel/vfs/VFS.js +679 -0
  589. package/dist/substrate/lifo/kernel/vfs/index.d.ts +8 -0
  590. package/dist/substrate/lifo/kernel/vfs/index.d.ts.map +1 -0
  591. package/dist/substrate/lifo/kernel/vfs/index.js +5 -0
  592. package/dist/substrate/lifo/kernel/vfs/providers/DevProvider.d.ts +21 -0
  593. package/dist/substrate/lifo/kernel/vfs/providers/DevProvider.d.ts.map +1 -0
  594. package/dist/substrate/lifo/kernel/vfs/providers/DevProvider.js +137 -0
  595. package/dist/substrate/lifo/kernel/vfs/providers/NativeFsProvider.d.ts +63 -0
  596. package/dist/substrate/lifo/kernel/vfs/providers/NativeFsProvider.d.ts.map +1 -0
  597. package/dist/substrate/lifo/kernel/vfs/providers/NativeFsProvider.js +175 -0
  598. package/dist/substrate/lifo/kernel/vfs/providers/ProcProvider.d.ts +14 -0
  599. package/dist/substrate/lifo/kernel/vfs/providers/ProcProvider.d.ts.map +1 -0
  600. package/dist/substrate/lifo/kernel/vfs/providers/ProcProvider.js +126 -0
  601. package/dist/substrate/lifo/kernel/vfs/types.d.ts +117 -0
  602. package/dist/substrate/lifo/kernel/vfs/types.d.ts.map +1 -0
  603. package/dist/substrate/lifo/kernel/vfs/types.js +42 -0
  604. package/dist/substrate/lifo/node-compat/buffer.d.ts +44 -0
  605. package/dist/substrate/lifo/node-compat/buffer.d.ts.map +1 -0
  606. package/dist/substrate/lifo/node-compat/buffer.js +331 -0
  607. package/dist/substrate/lifo/node-compat/child_process.d.ts +10 -0
  608. package/dist/substrate/lifo/node-compat/child_process.d.ts.map +1 -0
  609. package/dist/substrate/lifo/node-compat/child_process.js +42 -0
  610. package/dist/substrate/lifo/node-compat/console.d.ts +21 -0
  611. package/dist/substrate/lifo/node-compat/console.d.ts.map +1 -0
  612. package/dist/substrate/lifo/node-compat/console.js +68 -0
  613. package/dist/substrate/lifo/node-compat/crypto.d.ts +24 -0
  614. package/dist/substrate/lifo/node-compat/crypto.d.ts.map +1 -0
  615. package/dist/substrate/lifo/node-compat/crypto.js +216 -0
  616. package/dist/substrate/lifo/node-compat/dns.d.ts +117 -0
  617. package/dist/substrate/lifo/node-compat/dns.d.ts.map +1 -0
  618. package/dist/substrate/lifo/node-compat/dns.js +144 -0
  619. package/dist/substrate/lifo/node-compat/esbuild.d.ts +10 -0
  620. package/dist/substrate/lifo/node-compat/esbuild.d.ts.map +1 -0
  621. package/dist/substrate/lifo/node-compat/esbuild.js +70 -0
  622. package/dist/substrate/lifo/node-compat/events.d.ts +19 -0
  623. package/dist/substrate/lifo/node-compat/events.d.ts.map +1 -0
  624. package/dist/substrate/lifo/node-compat/events.js +83 -0
  625. package/dist/substrate/lifo/node-compat/fs.d.ts +195 -0
  626. package/dist/substrate/lifo/node-compat/fs.d.ts.map +1 -0
  627. package/dist/substrate/lifo/node-compat/fs.js +624 -0
  628. package/dist/substrate/lifo/node-compat/http.d.ts +133 -0
  629. package/dist/substrate/lifo/node-compat/http.d.ts.map +1 -0
  630. package/dist/substrate/lifo/node-compat/http.js +452 -0
  631. package/dist/substrate/lifo/node-compat/index.d.ts +20 -0
  632. package/dist/substrate/lifo/node-compat/index.d.ts.map +1 -0
  633. package/dist/substrate/lifo/node-compat/index.js +291 -0
  634. package/dist/substrate/lifo/node-compat/module.d.ts +55 -0
  635. package/dist/substrate/lifo/node-compat/module.d.ts.map +1 -0
  636. package/dist/substrate/lifo/node-compat/module.js +124 -0
  637. package/dist/substrate/lifo/node-compat/os.d.ts +39 -0
  638. package/dist/substrate/lifo/node-compat/os.d.ts.map +1 -0
  639. package/dist/substrate/lifo/node-compat/os.js +45 -0
  640. package/dist/substrate/lifo/node-compat/path.d.ts +86 -0
  641. package/dist/substrate/lifo/node-compat/path.d.ts.map +1 -0
  642. package/dist/substrate/lifo/node-compat/path.js +49 -0
  643. package/dist/substrate/lifo/node-compat/process.d.ts +127 -0
  644. package/dist/substrate/lifo/node-compat/process.d.ts.map +1 -0
  645. package/dist/substrate/lifo/node-compat/process.js +173 -0
  646. package/dist/substrate/lifo/node-compat/readline.d.ts +85 -0
  647. package/dist/substrate/lifo/node-compat/readline.d.ts.map +1 -0
  648. package/dist/substrate/lifo/node-compat/readline.js +205 -0
  649. package/dist/substrate/lifo/node-compat/rimraf.d.ts +30 -0
  650. package/dist/substrate/lifo/node-compat/rimraf.d.ts.map +1 -0
  651. package/dist/substrate/lifo/node-compat/rimraf.js +63 -0
  652. package/dist/substrate/lifo/node-compat/stream.d.ts +36 -0
  653. package/dist/substrate/lifo/node-compat/stream.d.ts.map +1 -0
  654. package/dist/substrate/lifo/node-compat/stream.js +90 -0
  655. package/dist/substrate/lifo/node-compat/string_decoder.d.ts +11 -0
  656. package/dist/substrate/lifo/node-compat/string_decoder.d.ts.map +1 -0
  657. package/dist/substrate/lifo/node-compat/string_decoder.js +23 -0
  658. package/dist/substrate/lifo/node-compat/timers.d.ts +16 -0
  659. package/dist/substrate/lifo/node-compat/timers.d.ts.map +1 -0
  660. package/dist/substrate/lifo/node-compat/timers.js +18 -0
  661. package/dist/substrate/lifo/node-compat/tty.d.ts +32 -0
  662. package/dist/substrate/lifo/node-compat/tty.d.ts.map +1 -0
  663. package/dist/substrate/lifo/node-compat/tty.js +76 -0
  664. package/dist/substrate/lifo/node-compat/url.d.ts +37 -0
  665. package/dist/substrate/lifo/node-compat/url.d.ts.map +1 -0
  666. package/dist/substrate/lifo/node-compat/url.js +65 -0
  667. package/dist/substrate/lifo/node-compat/util.d.ts +42 -0
  668. package/dist/substrate/lifo/node-compat/util.d.ts.map +1 -0
  669. package/dist/substrate/lifo/node-compat/util.js +132 -0
  670. package/dist/substrate/lifo/node-compat/zlib.d.ts +66 -0
  671. package/dist/substrate/lifo/node-compat/zlib.d.ts.map +1 -0
  672. package/dist/substrate/lifo/node-compat/zlib.js +80 -0
  673. package/dist/substrate/lifo/pkg/PackageManager.d.ts +19 -0
  674. package/dist/substrate/lifo/pkg/PackageManager.d.ts.map +1 -0
  675. package/dist/substrate/lifo/pkg/PackageManager.js +97 -0
  676. package/dist/substrate/lifo/pkg/lifo-dev.d.ts +38 -0
  677. package/dist/substrate/lifo/pkg/lifo-dev.d.ts.map +1 -0
  678. package/dist/substrate/lifo/pkg/lifo-dev.js +98 -0
  679. package/dist/substrate/lifo/pkg/lifo-runtime.d.ts +44 -0
  680. package/dist/substrate/lifo/pkg/lifo-runtime.d.ts.map +1 -0
  681. package/dist/substrate/lifo/pkg/lifo-runtime.js +372 -0
  682. package/dist/substrate/lifo/pkg/loader.d.ts +4 -0
  683. package/dist/substrate/lifo/pkg/loader.d.ts.map +1 -0
  684. package/dist/substrate/lifo/pkg/loader.js +24 -0
  685. package/dist/substrate/lifo/sandbox/HeadlessTerminal.d.ts +18 -0
  686. package/dist/substrate/lifo/sandbox/HeadlessTerminal.d.ts.map +1 -0
  687. package/dist/substrate/lifo/sandbox/HeadlessTerminal.js +28 -0
  688. package/dist/substrate/lifo/sandbox/Sandbox.d.ts +59 -0
  689. package/dist/substrate/lifo/sandbox/Sandbox.d.ts.map +1 -0
  690. package/dist/substrate/lifo/sandbox/Sandbox.js +234 -0
  691. package/dist/substrate/lifo/sandbox/SandboxCommands.d.ts +18 -0
  692. package/dist/substrate/lifo/sandbox/SandboxCommands.d.ts.map +1 -0
  693. package/dist/substrate/lifo/sandbox/SandboxCommands.js +64 -0
  694. package/dist/substrate/lifo/sandbox/SandboxFs.d.ts +43 -0
  695. package/dist/substrate/lifo/sandbox/SandboxFs.d.ts.map +1 -0
  696. package/dist/substrate/lifo/sandbox/SandboxFs.js +136 -0
  697. package/dist/substrate/lifo/sandbox/index.d.ts +3 -0
  698. package/dist/substrate/lifo/sandbox/index.d.ts.map +1 -0
  699. package/dist/substrate/lifo/sandbox/index.js +1 -0
  700. package/dist/substrate/lifo/sandbox/types.d.ts +116 -0
  701. package/dist/substrate/lifo/sandbox/types.d.ts.map +1 -0
  702. package/dist/substrate/lifo/sandbox/types.js +1 -0
  703. package/dist/substrate/lifo/shell/ProcessRegistry.d.ts +142 -0
  704. package/dist/substrate/lifo/shell/ProcessRegistry.d.ts.map +1 -0
  705. package/dist/substrate/lifo/shell/ProcessRegistry.js +256 -0
  706. package/dist/substrate/lifo/shell/Shell.d.ts +170 -0
  707. package/dist/substrate/lifo/shell/Shell.d.ts.map +1 -0
  708. package/dist/substrate/lifo/shell/Shell.js +1863 -0
  709. package/dist/substrate/lifo/shell/completer.d.ts +19 -0
  710. package/dist/substrate/lifo/shell/completer.d.ts.map +1 -0
  711. package/dist/substrate/lifo/shell/completer.js +164 -0
  712. package/dist/substrate/lifo/shell/default-shell.d.ts +9 -0
  713. package/dist/substrate/lifo/shell/default-shell.d.ts.map +1 -0
  714. package/dist/substrate/lifo/shell/default-shell.js +53 -0
  715. package/dist/substrate/lifo/shell/expander.d.ts +48 -0
  716. package/dist/substrate/lifo/shell/expander.d.ts.map +1 -0
  717. package/dist/substrate/lifo/shell/expander.js +1204 -0
  718. package/dist/substrate/lifo/shell/history.d.ts +22 -0
  719. package/dist/substrate/lifo/shell/history.d.ts.map +1 -0
  720. package/dist/substrate/lifo/shell/history.js +121 -0
  721. package/dist/substrate/lifo/shell/interpreter.d.ts +257 -0
  722. package/dist/substrate/lifo/shell/interpreter.d.ts.map +1 -0
  723. package/dist/substrate/lifo/shell/interpreter.js +1490 -0
  724. package/dist/substrate/lifo/shell/jobs.d.ts +21 -0
  725. package/dist/substrate/lifo/shell/jobs.d.ts.map +1 -0
  726. package/dist/substrate/lifo/shell/jobs.js +48 -0
  727. package/dist/substrate/lifo/shell/lexer.d.ts +13 -0
  728. package/dist/substrate/lifo/shell/lexer.d.ts.map +1 -0
  729. package/dist/substrate/lifo/shell/lexer.js +614 -0
  730. package/dist/substrate/lifo/shell/parser.d.ts +7 -0
  731. package/dist/substrate/lifo/shell/parser.d.ts.map +1 -0
  732. package/dist/substrate/lifo/shell/parser.js +573 -0
  733. package/dist/substrate/lifo/shell/pipe.d.ts +15 -0
  734. package/dist/substrate/lifo/shell/pipe.d.ts.map +1 -0
  735. package/dist/substrate/lifo/shell/pipe.js +86 -0
  736. package/dist/substrate/lifo/shell/signals.d.ts +11 -0
  737. package/dist/substrate/lifo/shell/signals.d.ts.map +1 -0
  738. package/dist/substrate/lifo/shell/signals.js +57 -0
  739. package/dist/substrate/lifo/shell/terminal-stdin.d.ts +28 -0
  740. package/dist/substrate/lifo/shell/terminal-stdin.d.ts.map +1 -0
  741. package/dist/substrate/lifo/shell/terminal-stdin.js +100 -0
  742. package/dist/substrate/lifo/shell/test-builtin.d.ts +16 -0
  743. package/dist/substrate/lifo/shell/test-builtin.d.ts.map +1 -0
  744. package/dist/substrate/lifo/shell/test-builtin.js +237 -0
  745. package/dist/substrate/lifo/shell/types.d.ts +140 -0
  746. package/dist/substrate/lifo/shell/types.d.ts.map +1 -0
  747. package/dist/substrate/lifo/shell/types.js +25 -0
  748. package/dist/substrate/lifo/terminal/ITerminal.d.ts +10 -0
  749. package/dist/substrate/lifo/terminal/ITerminal.d.ts.map +1 -0
  750. package/dist/substrate/lifo/terminal/ITerminal.js +1 -0
  751. package/dist/substrate/lifo/utils/archive.d.ts +28 -0
  752. package/dist/substrate/lifo/utils/archive.d.ts.map +1 -0
  753. package/dist/substrate/lifo/utils/archive.js +323 -0
  754. package/dist/substrate/lifo/utils/args.d.ts +18 -0
  755. package/dist/substrate/lifo/utils/args.d.ts.map +1 -0
  756. package/dist/substrate/lifo/utils/args.js +73 -0
  757. package/dist/substrate/lifo/utils/colors.d.ts +27 -0
  758. package/dist/substrate/lifo/utils/colors.d.ts.map +1 -0
  759. package/dist/substrate/lifo/utils/colors.js +26 -0
  760. package/dist/substrate/lifo/utils/encoding.d.ts +4 -0
  761. package/dist/substrate/lifo/utils/encoding.d.ts.map +1 -0
  762. package/dist/substrate/lifo/utils/encoding.js +18 -0
  763. package/dist/substrate/lifo/utils/glob.d.ts +12 -0
  764. package/dist/substrate/lifo/utils/glob.d.ts.map +1 -0
  765. package/dist/substrate/lifo/utils/glob.js +150 -0
  766. package/dist/substrate/lifo/utils/mime.d.ts +4 -0
  767. package/dist/substrate/lifo/utils/mime.d.ts.map +1 -0
  768. package/dist/substrate/lifo/utils/mime.js +107 -0
  769. package/dist/substrate/lifo/utils/path.d.ts +12 -0
  770. package/dist/substrate/lifo/utils/path.d.ts.map +1 -0
  771. package/dist/substrate/lifo/utils/path.js +82 -0
  772. package/dist/vfs/events.d.ts +51 -0
  773. package/dist/vfs/events.d.ts.map +1 -0
  774. package/dist/vfs/events.js +127 -0
  775. package/dist/vfs/path.d.ts +46 -0
  776. package/dist/vfs/path.d.ts.map +1 -0
  777. package/dist/vfs/path.js +69 -0
  778. package/dist/vfs/seed-project.d.ts +62 -0
  779. package/dist/vfs/seed-project.d.ts.map +1 -0
  780. package/dist/vfs/seed-project.js +1054 -0
  781. package/dist/vfs/sqlite-vfs.d.ts +821 -0
  782. package/dist/vfs/sqlite-vfs.d.ts.map +1 -0
  783. package/dist/vfs/sqlite-vfs.js +4135 -0
  784. package/dist/vfs/symlink-registry.d.ts +60 -0
  785. package/dist/vfs/symlink-registry.d.ts.map +1 -0
  786. package/dist/vfs/symlink-registry.js +162 -0
  787. package/dist/workspace/nimbus-workspace.d.ts +94 -0
  788. package/dist/workspace/nimbus-workspace.d.ts.map +1 -0
  789. package/dist/workspace/nimbus-workspace.js +167 -0
  790. package/package.json +69 -0
  791. package/src/_shared/ai-egress.ts +91 -0
  792. package/src/_shared/byte-stream.ts +97 -0
  793. package/src/_shared/bytes.ts +19 -0
  794. package/src/_shared/cache-stats.ts +231 -0
  795. package/src/_shared/crypto.ts +184 -0
  796. package/src/_shared/esbuild-facet-shim.ts +22 -0
  797. package/src/_shared/exports-resolver.ts +308 -0
  798. package/src/_shared/facet-vfs-cursor.ts +58 -0
  799. package/src/_shared/install-phase.ts +56 -0
  800. package/src/_shared/lru-map.ts +59 -0
  801. package/src/_shared/real-node-imports.ts +53 -0
  802. package/src/_shared/retry.ts +202 -0
  803. package/src/_shared/rpc-dispose.ts +31 -0
  804. package/src/_shared/terminal.ts +3 -0
  805. package/src/_shared/typescript-specifiers.ts +86 -0
  806. package/src/_shared/untrusted-request.ts +75 -0
  807. package/src/_shared/vfs-write-ledger.ts +440 -0
  808. package/src/_shared/w7-frame.ts +1012 -0
  809. package/src/_shared/weighted-credit-pool.ts +244 -0
  810. package/src/constants.ts +285 -0
  811. package/src/index.ts +22 -0
  812. package/src/observability/diag-counters.ts +343 -0
  813. package/src/observability/heap-estimate.ts +331 -0
  814. package/src/observability/heavy-alloc-coord.ts +241 -0
  815. package/src/observability/oom-classify.ts +253 -0
  816. package/src/observability/oom-discriminator.ts +405 -0
  817. package/src/runtime/assets-loader.ts +189 -0
  818. package/src/runtime/barrel-detect.ts +69 -0
  819. package/src/runtime/bash/preamble.ts +1519 -0
  820. package/src/runtime/bash/types.ts +497 -0
  821. package/src/runtime/bundle-profile.ts +32 -0
  822. package/src/runtime/cirrus-vite-config-rewriter.ts +28 -0
  823. package/src/runtime/cli-flags.ts +11 -0
  824. package/src/runtime/comment-strip.ts +73 -0
  825. package/src/runtime/cpython-preamble.ts +298 -0
  826. package/src/runtime/esbuild-service.ts +1470 -0
  827. package/src/runtime/framework-detect.ts +245 -0
  828. package/src/runtime/import-meta-transform.ts +16 -0
  829. package/src/runtime/javascript-ast.ts +66 -0
  830. package/src/runtime/long-running-handle.ts +185 -0
  831. package/src/runtime/module-source-rewriter.ts +95 -0
  832. package/src/runtime/opentui-wasm-backend.ts +608 -0
  833. package/src/runtime/os-contracts.ts +529 -0
  834. package/src/runtime/port-registry.ts +298 -0
  835. package/src/runtime/process-input-routing.ts +92 -0
  836. package/src/runtime/process-input.ts +148 -0
  837. package/src/runtime/process-io-protocol.ts +97 -0
  838. package/src/runtime/process-logs.ts +882 -0
  839. package/src/runtime/process-table.ts +225 -0
  840. package/src/runtime/project-detect.ts +42 -0
  841. package/src/runtime/python-server-adapter.ts +133 -0
  842. package/src/runtime/require-resolver.ts +760 -0
  843. package/src/runtime/router-basename.ts +279 -0
  844. package/src/runtime/ruby-green-threads.ts +904 -0
  845. package/src/runtime/ruby-socket-shim.ts +548 -0
  846. package/src/runtime/session-process-supervisor.ts +323 -0
  847. package/src/runtime/sqlite-runtime-fs-bridge.ts +468 -0
  848. package/src/runtime/streams.ts +547 -0
  849. package/src/runtime/undici-shim.ts +517 -0
  850. package/src/runtime/vfs-manifest.ts +170 -0
  851. package/src/runtime/vfs-snapshot.ts +273 -0
  852. package/src/runtime/virtual-socket-kernel.ts +1370 -0
  853. package/src/runtime/vite-config-parser.ts +273 -0
  854. package/src/runtime/wasi/types.ts +448 -0
  855. package/src/runtime/wasi-instance.generated.ts +14 -0
  856. package/src/runtime/wasi-instance.ts +259 -0
  857. package/src/runtime/wasi-threads.ts +682 -0
  858. package/src/runtime/wasm-memory.ts +261 -0
  859. package/src/shell/elevation-commands.ts +117 -0
  860. package/src/shell/exec-dispatch.ts +201 -0
  861. package/src/shell/features.ts +870 -0
  862. package/src/shell/shell-entrypoints.ts +323 -0
  863. package/src/shell/shell-invocation.ts +181 -0
  864. package/src/shell/unix-accounts.ts +128 -0
  865. package/src/shell/unix-commands.ts +4335 -0
  866. package/src/substrate/lifo/UPSTREAM.md +14 -0
  867. package/src/substrate/lifo/commands/archive/gunzip.ts +63 -0
  868. package/src/substrate/lifo/commands/archive/gzip.ts +76 -0
  869. package/src/substrate/lifo/commands/archive/tar.ts +157 -0
  870. package/src/substrate/lifo/commands/archive/unzip.ts +112 -0
  871. package/src/substrate/lifo/commands/archive/zip.ts +70 -0
  872. package/src/substrate/lifo/commands/fs/basename.ts +16 -0
  873. package/src/substrate/lifo/commands/fs/cat.ts +54 -0
  874. package/src/substrate/lifo/commands/fs/chmod.ts +110 -0
  875. package/src/substrate/lifo/commands/fs/chown.ts +45 -0
  876. package/src/substrate/lifo/commands/fs/cp.ts +33 -0
  877. package/src/substrate/lifo/commands/fs/df.ts +56 -0
  878. package/src/substrate/lifo/commands/fs/dirname.ts +16 -0
  879. package/src/substrate/lifo/commands/fs/du.ts +100 -0
  880. package/src/substrate/lifo/commands/fs/file.ts +90 -0
  881. package/src/substrate/lifo/commands/fs/find.ts +76 -0
  882. package/src/substrate/lifo/commands/fs/ln.ts +19 -0
  883. package/src/substrate/lifo/commands/fs/ls.ts +164 -0
  884. package/src/substrate/lifo/commands/fs/mkdir.ts +37 -0
  885. package/src/substrate/lifo/commands/fs/mktemp.ts +56 -0
  886. package/src/substrate/lifo/commands/fs/mv.ts +111 -0
  887. package/src/substrate/lifo/commands/fs/realpath.ts +31 -0
  888. package/src/substrate/lifo/commands/fs/rm.ts +53 -0
  889. package/src/substrate/lifo/commands/fs/rmdir.ts +50 -0
  890. package/src/substrate/lifo/commands/fs/stat.ts +39 -0
  891. package/src/substrate/lifo/commands/fs/touch.ts +30 -0
  892. package/src/substrate/lifo/commands/fs/tree.ts +76 -0
  893. package/src/substrate/lifo/commands/index.ts +2 -0
  894. package/src/substrate/lifo/commands/io/dd.ts +289 -0
  895. package/src/substrate/lifo/commands/io/printf.ts +78 -0
  896. package/src/substrate/lifo/commands/io/tee.ts +37 -0
  897. package/src/substrate/lifo/commands/io/xargs.ts +49 -0
  898. package/src/substrate/lifo/commands/io/yes.ts +15 -0
  899. package/src/substrate/lifo/commands/net/curl.ts +739 -0
  900. package/src/substrate/lifo/commands/net/dig.ts +99 -0
  901. package/src/substrate/lifo/commands/net/forward.ts +90 -0
  902. package/src/substrate/lifo/commands/net/host.ts +182 -0
  903. package/src/substrate/lifo/commands/net/ifconfig.ts +139 -0
  904. package/src/substrate/lifo/commands/net/ip.ts +633 -0
  905. package/src/substrate/lifo/commands/net/netstat.ts +106 -0
  906. package/src/substrate/lifo/commands/net/ping.ts +74 -0
  907. package/src/substrate/lifo/commands/net/ports.ts +45 -0
  908. package/src/substrate/lifo/commands/net/route.ts +153 -0
  909. package/src/substrate/lifo/commands/net/tunnel-v2.ts +183 -0
  910. package/src/substrate/lifo/commands/net/tunnel.ts +272 -0
  911. package/src/substrate/lifo/commands/net/wget.ts +88 -0
  912. package/src/substrate/lifo/commands/registry.ts +141 -0
  913. package/src/substrate/lifo/commands/signal.ts +65 -0
  914. package/src/substrate/lifo/commands/system/bc.ts +265 -0
  915. package/src/substrate/lifo/commands/system/cal.ts +90 -0
  916. package/src/substrate/lifo/commands/system/date.ts +59 -0
  917. package/src/substrate/lifo/commands/system/env.ts +10 -0
  918. package/src/substrate/lifo/commands/system/fastfetch.ts +428 -0
  919. package/src/substrate/lifo/commands/system/free.ts +38 -0
  920. package/src/substrate/lifo/commands/system/help.ts +53 -0
  921. package/src/substrate/lifo/commands/system/hostname.ts +9 -0
  922. package/src/substrate/lifo/commands/system/kill.ts +89 -0
  923. package/src/substrate/lifo/commands/system/lifo.ts +525 -0
  924. package/src/substrate/lifo/commands/system/logout.ts +17 -0
  925. package/src/substrate/lifo/commands/system/man.ts +167 -0
  926. package/src/substrate/lifo/commands/system/node.ts +1305 -0
  927. package/src/substrate/lifo/commands/system/npm.ts +1078 -0
  928. package/src/substrate/lifo/commands/system/pkg.ts +111 -0
  929. package/src/substrate/lifo/commands/system/ps.ts +46 -0
  930. package/src/substrate/lifo/commands/system/registry-schemas.ts +33 -0
  931. package/src/substrate/lifo/commands/system/sha256sum.ts +89 -0
  932. package/src/substrate/lifo/commands/system/sl.ts +249 -0
  933. package/src/substrate/lifo/commands/system/sleep.ts +36 -0
  934. package/src/substrate/lifo/commands/system/stty.ts +69 -0
  935. package/src/substrate/lifo/commands/system/systemctl.ts +184 -0
  936. package/src/substrate/lifo/commands/system/top.ts +53 -0
  937. package/src/substrate/lifo/commands/system/uname.ts +59 -0
  938. package/src/substrate/lifo/commands/system/uptime.ts +19 -0
  939. package/src/substrate/lifo/commands/system/watch.ts +67 -0
  940. package/src/substrate/lifo/commands/system/which.ts +51 -0
  941. package/src/substrate/lifo/commands/system/whoami.ts +9 -0
  942. package/src/substrate/lifo/commands/text/awk.ts +210 -0
  943. package/src/substrate/lifo/commands/text/base64.ts +102 -0
  944. package/src/substrate/lifo/commands/text/cut.ts +92 -0
  945. package/src/substrate/lifo/commands/text/diff.ts +314 -0
  946. package/src/substrate/lifo/commands/text/grep.ts +170 -0
  947. package/src/substrate/lifo/commands/text/head.ts +95 -0
  948. package/src/substrate/lifo/commands/text/less.ts +335 -0
  949. package/src/substrate/lifo/commands/text/nano.ts +513 -0
  950. package/src/substrate/lifo/commands/text/nl.ts +74 -0
  951. package/src/substrate/lifo/commands/text/rev.ts +46 -0
  952. package/src/substrate/lifo/commands/text/sed.ts +297 -0
  953. package/src/substrate/lifo/commands/text/seq.ts +76 -0
  954. package/src/substrate/lifo/commands/text/sort.ts +88 -0
  955. package/src/substrate/lifo/commands/text/strings.ts +73 -0
  956. package/src/substrate/lifo/commands/text/tac.ts +37 -0
  957. package/src/substrate/lifo/commands/text/tail.ts +63 -0
  958. package/src/substrate/lifo/commands/text/tr.ts +192 -0
  959. package/src/substrate/lifo/commands/text/uniq.ts +77 -0
  960. package/src/substrate/lifo/commands/text/wc.ts +104 -0
  961. package/src/substrate/lifo/commands/types.ts +58 -0
  962. package/src/substrate/lifo/index.ts +173 -0
  963. package/src/substrate/lifo/kernel/ServiceManager.ts +371 -0
  964. package/src/substrate/lifo/kernel/index.ts +209 -0
  965. package/src/substrate/lifo/kernel/network/Bridge.ts +336 -0
  966. package/src/substrate/lifo/kernel/network/DNSResolver.ts +158 -0
  967. package/src/substrate/lifo/kernel/network/NetworkInterface.ts +235 -0
  968. package/src/substrate/lifo/kernel/network/NetworkNamespace.ts +182 -0
  969. package/src/substrate/lifo/kernel/network/NetworkStack.ts +590 -0
  970. package/src/substrate/lifo/kernel/network/PortBridge.ts +182 -0
  971. package/src/substrate/lifo/kernel/network/RoutingTable.ts +209 -0
  972. package/src/substrate/lifo/kernel/network/Socket.ts +245 -0
  973. package/src/substrate/lifo/kernel/network/index.ts +29 -0
  974. package/src/substrate/lifo/kernel/network/tunnel/BaseTunnel.ts +124 -0
  975. package/src/substrate/lifo/kernel/network/tunnel/VETHPair.ts +227 -0
  976. package/src/substrate/lifo/kernel/network/tunnel/WebSocketTunnel.ts +387 -0
  977. package/src/substrate/lifo/kernel/network/types.ts +178 -0
  978. package/src/substrate/lifo/kernel/persistence/PersistenceManager.ts +50 -0
  979. package/src/substrate/lifo/kernel/persistence/backends.ts +36 -0
  980. package/src/substrate/lifo/kernel/persistence/index.ts +5 -0
  981. package/src/substrate/lifo/kernel/persistence/serializer.ts +127 -0
  982. package/src/substrate/lifo/kernel/samples.ts +966 -0
  983. package/src/substrate/lifo/kernel/storage/BlobStore.ts +114 -0
  984. package/src/substrate/lifo/kernel/storage/ContentStore.ts +150 -0
  985. package/src/substrate/lifo/kernel/storage/index.ts +5 -0
  986. package/src/substrate/lifo/kernel/unit-parser.ts +95 -0
  987. package/src/substrate/lifo/kernel/vfs/VFS.ts +768 -0
  988. package/src/substrate/lifo/kernel/vfs/index.ts +9 -0
  989. package/src/substrate/lifo/kernel/vfs/providers/DevProvider.ts +172 -0
  990. package/src/substrate/lifo/kernel/vfs/providers/NativeFsProvider.ts +198 -0
  991. package/src/substrate/lifo/kernel/vfs/providers/ProcProvider.ts +144 -0
  992. package/src/substrate/lifo/kernel/vfs/types.ts +145 -0
  993. package/src/substrate/lifo/node-compat/buffer.ts +357 -0
  994. package/src/substrate/lifo/node-compat/child_process.ts +52 -0
  995. package/src/substrate/lifo/node-compat/console.ts +70 -0
  996. package/src/substrate/lifo/node-compat/crypto.ts +186 -0
  997. package/src/substrate/lifo/node-compat/dns.ts +214 -0
  998. package/src/substrate/lifo/node-compat/esbuild.ts +85 -0
  999. package/src/substrate/lifo/node-compat/events.ts +94 -0
  1000. package/src/substrate/lifo/node-compat/fs.ts +762 -0
  1001. package/src/substrate/lifo/node-compat/http.ts +561 -0
  1002. package/src/substrate/lifo/node-compat/index.ts +300 -0
  1003. package/src/substrate/lifo/node-compat/module.ts +148 -0
  1004. package/src/substrate/lifo/node-compat/os.ts +44 -0
  1005. package/src/substrate/lifo/node-compat/path.ts +74 -0
  1006. package/src/substrate/lifo/node-compat/process.ts +178 -0
  1007. package/src/substrate/lifo/node-compat/readline.ts +244 -0
  1008. package/src/substrate/lifo/node-compat/rimraf.ts +80 -0
  1009. package/src/substrate/lifo/node-compat/stream.ts +98 -0
  1010. package/src/substrate/lifo/node-compat/string_decoder.ts +26 -0
  1011. package/src/substrate/lifo/node-compat/timers.ts +21 -0
  1012. package/src/substrate/lifo/node-compat/tty.ts +83 -0
  1013. package/src/substrate/lifo/node-compat/url.ts +76 -0
  1014. package/src/substrate/lifo/node-compat/util.ts +133 -0
  1015. package/src/substrate/lifo/node-compat/zlib.ts +94 -0
  1016. package/src/substrate/lifo/pkg/PackageManager.ts +105 -0
  1017. package/src/substrate/lifo/pkg/lifo-dev.ts +130 -0
  1018. package/src/substrate/lifo/pkg/lifo-runtime.ts +473 -0
  1019. package/src/substrate/lifo/pkg/loader.ts +33 -0
  1020. package/src/substrate/lifo/platform-globals.d.ts +41 -0
  1021. package/src/substrate/lifo/sandbox/HeadlessTerminal.ts +38 -0
  1022. package/src/substrate/lifo/sandbox/Sandbox.ts +279 -0
  1023. package/src/substrate/lifo/sandbox/SandboxCommands.ts +74 -0
  1024. package/src/substrate/lifo/sandbox/SandboxFs.ts +160 -0
  1025. package/src/substrate/lifo/sandbox/index.ts +8 -0
  1026. package/src/substrate/lifo/sandbox/types.ts +117 -0
  1027. package/src/substrate/lifo/shell/ProcessRegistry.ts +379 -0
  1028. package/src/substrate/lifo/shell/Shell.ts +2048 -0
  1029. package/src/substrate/lifo/shell/completer.ts +212 -0
  1030. package/src/substrate/lifo/shell/default-shell.ts +63 -0
  1031. package/src/substrate/lifo/shell/expander.ts +1349 -0
  1032. package/src/substrate/lifo/shell/history.ts +138 -0
  1033. package/src/substrate/lifo/shell/interpreter.ts +1754 -0
  1034. package/src/substrate/lifo/shell/jobs.ts +64 -0
  1035. package/src/substrate/lifo/shell/lexer.ts +698 -0
  1036. package/src/substrate/lifo/shell/parser.ts +711 -0
  1037. package/src/substrate/lifo/shell/pipe.ts +92 -0
  1038. package/src/substrate/lifo/shell/signals.ts +70 -0
  1039. package/src/substrate/lifo/shell/terminal-stdin.ts +109 -0
  1040. package/src/substrate/lifo/shell/test-builtin.ts +316 -0
  1041. package/src/substrate/lifo/shell/types.ts +166 -0
  1042. package/src/substrate/lifo/terminal/ITerminal.ts +9 -0
  1043. package/src/substrate/lifo/utils/archive.ts +389 -0
  1044. package/src/substrate/lifo/utils/args.ts +89 -0
  1045. package/src/substrate/lifo/utils/colors.ts +29 -0
  1046. package/src/substrate/lifo/utils/encoding.ts +21 -0
  1047. package/src/substrate/lifo/utils/glob.ts +172 -0
  1048. package/src/substrate/lifo/utils/mime.ts +114 -0
  1049. package/src/substrate/lifo/utils/path.ts +83 -0
  1050. package/src/types/assets.d.ts +4 -0
  1051. package/src/vfs/events.ts +134 -0
  1052. package/src/vfs/path.ts +71 -0
  1053. package/src/vfs/seed-project.ts +1094 -0
  1054. package/src/vfs/sqlite-vfs.ts +5035 -0
  1055. package/src/vfs/symlink-registry.ts +172 -0
  1056. package/src/workspace/nimbus-workspace.ts +213 -0
@@ -0,0 +1,1305 @@
1
+ import type { Command } from '../types.js';
2
+ import { resolve, dirname, join, extname } from '../../utils/path.js';
3
+ import { createModuleMap, ProcessExitError } from '../../node-compat/index.js';
4
+ import type { NodeContext } from '../../node-compat/index.js';
5
+ import { createProcess } from '../../node-compat/process.js';
6
+ import { createConsole } from '../../node-compat/console.js';
7
+ import { Buffer } from '../../node-compat/buffer.js';
8
+ import { VFSError } from '../../kernel/vfs/index.js';
9
+ import { ACTIVE_SERVERS } from '../../node-compat/http.js';
10
+ import type { VirtualRequestHandler, Kernel } from '../../kernel/index.js';
11
+
12
+ const NODE_VERSION = 'v20.0.0';
13
+
14
+ // ── Rollup / esbuild CJS-ESM interop helpers ──
15
+ // Bundled npm packages (Vite, Rollup, etc.) reference these helpers at the module
16
+ // scope. When our ESM→CJS transform converts imports, the helpers may lose their
17
+ // binding. Making them available on globalThis acts as a fallback – if the module
18
+ // defines its own copy the local declaration naturally shadows the global.
19
+ //
20
+ // Complete set from @rollup/plugin-commonjs interop:
21
+ const _rollupHelpers: Record<string, (...args: unknown[]) => unknown> = {
22
+ getDefaultExportFromCjs(x: unknown): unknown {
23
+ const o = x as Record<string, unknown>;
24
+ return o && o.__esModule && Object.prototype.hasOwnProperty.call(o, 'default') ? o.default : o;
25
+ },
26
+ getDefaultExportFromNamespaceIfPresent(n: unknown): unknown {
27
+ const o = n as Record<string, unknown>;
28
+ return o && Object.prototype.hasOwnProperty.call(o, 'default') && Object.keys(o).length === 1 ? o.default : o;
29
+ },
30
+ getAugmentedNamespace(n: unknown): unknown {
31
+ const o = n as Record<string, unknown>;
32
+ if (o.__esModule) return o;
33
+ const a: Record<string, unknown> = Object.defineProperty({}, '__esModule', { value: true });
34
+ Object.keys(o).forEach(function (k) {
35
+ const d = Object.getOwnPropertyDescriptor(o, k);
36
+ Object.defineProperty(a, k, d && d.get ? d : { enumerable: true, get() { return o[k]; } });
37
+ });
38
+ a.default = n;
39
+ return Object.freeze(a);
40
+ },
41
+ _mergeNamespaces(n: unknown, ...ms: unknown[]): unknown {
42
+ const o = n as Record<string, unknown>;
43
+ const modules = ms.flat() as Array<Record<string, unknown>>;
44
+ for (const m of modules) {
45
+ for (const k of Object.keys(m)) {
46
+ if (k !== 'default' && !(k in o)) {
47
+ Object.defineProperty(o, k, { enumerable: true, get: () => m[k] });
48
+ }
49
+ }
50
+ }
51
+ return Object.freeze(o);
52
+ },
53
+ };
54
+
55
+ /** Strip shebang line (e.g. #!/usr/bin/env node) – replace with blank to preserve line numbers */
56
+ function stripShebang(src: string): string {
57
+ if (src.charCodeAt(0) === 0x23 /* # */ && src.charCodeAt(1) === 0x21 /* ! */) {
58
+ const nl = src.indexOf('\n');
59
+ if (nl === -1) return '';
60
+ return '\n' + src.slice(nl + 1);
61
+ }
62
+ return src;
63
+ }
64
+
65
+ /** Check if source contains ESM import/export syntax */
66
+ function isEsmSource(source: string): boolean {
67
+ // Match import/export at line start, after semicolon, or minified (import{, import*)
68
+ return /(?:^|\n|;)\s*(?:import\s*[\w{*('".]|export\s+|export\s*\{)/.test(source);
69
+ }
70
+
71
+ /** Determine if source should be treated as ESM based on filename, content, and package.json type */
72
+ function shouldTreatAsEsm(source: string, filename: string, vfs?: { exists(p: string): boolean; readFileString(p: string): string }): boolean {
73
+ const ext = extname(filename);
74
+ if (ext === '.mjs') return true;
75
+ if (ext === '.cjs') return false;
76
+ // Check nearest package.json "type" field (Node.js semantics)
77
+ if (vfs && ext === '.js') {
78
+ let dir = dirname(filename);
79
+ for (; ;) {
80
+ const pkgPath = join(dir, 'package.json');
81
+ if (vfs.exists(pkgPath)) {
82
+ try {
83
+ const pkg = JSON.parse(vfs.readFileString(pkgPath));
84
+ if (pkg.type === 'module') return true;
85
+ if (pkg.type === 'commonjs') return false;
86
+ } catch { /* ignore */ }
87
+ break;
88
+ }
89
+ const parent = dirname(dir);
90
+ if (parent === dir) break;
91
+ dir = parent;
92
+ }
93
+ }
94
+ return isEsmSource(source);
95
+ }
96
+
97
+ // Names that collide with the new Function() CJS wrapper parameters.
98
+ // Using `const` for these would throw "Identifier X has already been declared",
99
+ // so we emit `var` instead (var can shadow function params in non-strict mode).
100
+ const CJS_WRAPPER_PARAMS = new Set([
101
+ 'exports', 'require', 'module', '__filename', '__dirname',
102
+ 'console', 'process', 'Buffer', 'setTimeout', 'setInterval',
103
+ 'clearTimeout', 'clearInterval', 'global',
104
+ '__importMetaUrl', '__importMeta', '__importMetaResolve',
105
+ ]);
106
+ function cjsDecl(name: string): string {
107
+ return CJS_WRAPPER_PARAMS.has(name) ? 'var' : 'const';
108
+ }
109
+
110
+ /**
111
+ * Mask string/template literals with safe placeholders so that
112
+ * import/export regexes don't match keywords inside string content.
113
+ * Returns the masked source and an array of original literals for restoration.
114
+ */
115
+ function maskStringLiterals(src: string): { masked: string; literals: string[] } {
116
+ const literals: string[] = [];
117
+ let masked = '';
118
+ let i = 0;
119
+
120
+ while (i < src.length) {
121
+ const ch = src[i];
122
+
123
+ // Skip single-line comments (may contain unmatched quotes)
124
+ if (ch === '/' && i + 1 < src.length && src[i + 1] === '/') {
125
+ const nl = src.indexOf('\n', i);
126
+ const end = nl === -1 ? src.length : nl;
127
+ masked += src.slice(i, end);
128
+ i = end;
129
+ continue;
130
+ }
131
+ // Skip multi-line comments
132
+ if (ch === '/' && i + 1 < src.length && src[i + 1] === '*') {
133
+ const end = src.indexOf('*/', i + 2);
134
+ const close = end === -1 ? src.length : end + 2;
135
+ masked += src.slice(i, close);
136
+ i = close;
137
+ continue;
138
+ }
139
+
140
+ // Regex literals — skip to avoid confusing backticks inside /regex/ with templates
141
+ if (ch === '/' && i + 1 < src.length && src[i + 1] !== '/' && src[i + 1] !== '*') {
142
+ // Heuristic: '/' is a regex if preceded by an operator, keyword, or start-of-line.
143
+ // IMPORTANT: We include ')' and '}' even though they can precede division too,
144
+ // because under-detection is catastrophic: a backtick inside an undetected
145
+ // regex triggers the template-literal parser which can eat the rest of the file.
146
+ // Over-detection is harmless: the regex scanner copies content as-is and stops
147
+ // at newline, so the output is identical either way.
148
+ let k = i - 1;
149
+ while (k >= 0 && (src[k] === ' ' || src[k] === '\t' || src[k] === '\n' || src[k] === '\r')) k--;
150
+ const prev = k >= 0 ? src[k] : '\0';
151
+ if ('\0=([{,;!&|^~?:+-*%<>/)]}'.includes(prev) ||
152
+ (k >= 1 && /\b(?:return|typeof|void|delete|throw|new|case|of|in|yield|await)\s*$/.test(src.slice(Math.max(0, k - 11), k + 1)))) {
153
+ const regStart = i;
154
+ i++; // skip opening /
155
+ while (i < src.length && src[i] !== '\n') {
156
+ if (src[i] === '\\') { i += 2; continue; }
157
+ if (src[i] === '/') { i++; break; }
158
+ if (src[i] === '[') { // character class — / doesn't end regex inside [...]
159
+ i++;
160
+ while (i < src.length && src[i] !== ']' && src[i] !== '\n') {
161
+ if (src[i] === '\\') i++;
162
+ i++;
163
+ }
164
+ if (i < src.length && src[i] === ']') i++;
165
+ continue;
166
+ }
167
+ i++;
168
+ }
169
+ while (i < src.length && /[gimsuyv]/.test(src[i])) i++; // flags
170
+ masked += src.slice(regStart, i);
171
+ continue;
172
+ }
173
+ }
174
+
175
+ // String/template literals
176
+ if (ch === '"' || ch === "'" || ch === '`') {
177
+ const start = i;
178
+ const quote = ch;
179
+ i++; // skip opening quote
180
+ while (i < src.length) {
181
+ if (src[i] === '\\') { i += 2; continue; }
182
+ if (src[i] === quote) { i++; break; }
183
+ // Template literal ${...} expressions — skip with depth tracking
184
+ if (quote === '`' && src[i] === '$' && i + 1 < src.length && src[i + 1] === '{') {
185
+ let depth = 1;
186
+ i += 2;
187
+ while (i < src.length && depth > 0) {
188
+ if (src[i] === '{') depth++;
189
+ else if (src[i] === '}') depth--;
190
+ else if (src[i] === '\\') i++;
191
+ else if (src[i] === "'" || src[i] === '"') {
192
+ const q = src[i]; i++;
193
+ while (i < src.length && src[i] !== q) {
194
+ if (src[i] === '\\') i++;
195
+ i++;
196
+ }
197
+ if (i < src.length) i++; // skip closing quote
198
+ continue;
199
+ } else if (src[i] === '`') {
200
+ // Nested template literal inside expression
201
+ i++;
202
+ while (i < src.length && src[i] !== '`') {
203
+ if (src[i] === '\\') i++;
204
+ i++;
205
+ }
206
+ if (i < src.length) i++;
207
+ continue;
208
+ }
209
+ i++;
210
+ }
211
+ continue;
212
+ }
213
+ i++;
214
+ }
215
+
216
+ const literal = src.slice(start, i);
217
+ const idx = literals.length;
218
+ literals.push(literal);
219
+
220
+ // Placeholder uses same quote style so import regexes that capture
221
+ // ['"][^'"]+['"] still work (they see e.g. "__LIFO_S0__").
222
+ masked += quote + '__LIFO_S' + idx + '__' + quote;
223
+ continue;
224
+ }
225
+
226
+ masked += ch;
227
+ i++;
228
+ }
229
+
230
+ return { masked, literals };
231
+ }
232
+
233
+ /**
234
+ * Restore original string/template literals from masked placeholders.
235
+ */
236
+ function unmaskStringLiterals(src: string, literals: string[]): string {
237
+ return src.replace(
238
+ /(['"`])__LIFO_S(\d+)__\1/g,
239
+ (_match, _quote, idxStr) => literals[parseInt(idxStr, 10)]
240
+ );
241
+ }
242
+
243
+ /** Transform ESM import/export syntax to CJS require/exports equivalents */
244
+ function transformEsmToCjs(source: string): string {
245
+ // Normalize \r\n → \n so regexes anchored on \n work with Windows line endings
246
+ let result = source.replace(/\r\n/g, '\n').replace(/\r/g, '\n');
247
+
248
+ // import.meta.* replacements MUST run before masking.
249
+ // The masker may incorrectly consume code regions (e.g. regex literals with
250
+ // backticks), so import.meta must be replaced on the raw source first.
251
+ // These are safe on raw source: replacements are plain identifiers that won't
252
+ // cause issues even if they accidentally match inside string literals.
253
+ result = result.split('import.meta.url').join('__importMetaUrl');
254
+ result = result.split('import.meta.dirname').join('__dirname');
255
+ result = result.split('import.meta.filename').join('__filename');
256
+ result = result.split('import.meta.require').join('require');
257
+ result = result.split('import.meta.resolve').join('__importMetaResolve');
258
+ // Bare import.meta (catch-all, must come AFTER specific property replacements)
259
+ result = result.split('import.meta').join('__importMeta');
260
+
261
+ // Mask string/template literal contents so import/export regexes don't
262
+ // match keywords inside strings (e.g. const HELPERS = `export function ...`)
263
+ const { masked, literals } = maskStringLiterals(result);
264
+
265
+ result = masked;
266
+ // Split semicolon-separated import/export onto their own lines
267
+ // so that the (?:^|\n) anchored regexes below can find them in minified code
268
+ result = result.replace(
269
+ /;([ \t]*(?:import\s*[\w${*('".]|export[\s{*]))/g,
270
+ ';\n$1'
271
+ );
272
+ const trailingExports: string[] = [];
273
+ let hasDefaultExport = false;
274
+ let hasNamedExport = false;
275
+ // Track import sources: localName → { modRef, prop } for live-binding exports
276
+ const importSources = new Map<string, { modRef: string; prop: string }>();
277
+
278
+ // Scan for export types to decide default export strategy
279
+ hasDefaultExport = /(?:^|\n)\s*export\s+default\s+/.test(result);
280
+ hasNamedExport = /(?:^|\n)\s*export\s+(?:const|let|var|function|class|\{|\*\s+from)/.test(result);
281
+
282
+ // --- Import transforms ---
283
+ // NOTE: JS identifiers can contain $ (e.g. fs$8, path$b in esbuild bundles).
284
+ // We use [\w$]+ instead of \w+ throughout to match these correctly.
285
+
286
+ // Combined: import X, { a, b as c } from 'mod'
287
+ result = result.replace(
288
+ /(?:^|\n)([ \t]*)import\s+([\w$]+)\s*,\s*\{([^}]+)\}\s*from\s*(['"][^'"]+['"])[ \t]*;?/g,
289
+ (match, indent, defaultName, imports, mod) => {
290
+ // Guard: ${ in captured names means regex matched inside a template literal
291
+ if (imports.includes('${')) return match;
292
+ const tmp = '__mod_' + defaultName;
293
+ const mapped = imports.split(',').map((s: string) => {
294
+ const parts = s.trim().split(/\s+as\s+/);
295
+ const sourceProp = parts[0].trim();
296
+ const localName = parts.length === 2 ? parts[1].trim() : sourceProp;
297
+ if (localName) importSources.set(localName, { modRef: tmp, prop: sourceProp });
298
+ if (parts.length === 2) return `${sourceProp}: ${localName}`;
299
+ return sourceProp;
300
+ }).filter((s: string) => s).join(', ');
301
+ return `\n${indent}${cjsDecl(tmp)} ${tmp} = require(${mod});\n${indent}${cjsDecl(defaultName)} ${defaultName} = ${tmp}.default || ${tmp};\n${indent}const { ${mapped} } = ${tmp};`;
302
+ }
303
+ );
304
+
305
+ // Combined: import X, * as Y from 'mod'
306
+ result = result.replace(
307
+ /(?:^|\n)([ \t]*)import\s+([\w$]+)\s*,\s*\*\s*as\s+([\w$]+)\s+from\s*(['"][^'"]+['"])[ \t]*;?/g,
308
+ (_match, indent, defaultName, nsName, mod) => {
309
+ return `\n${indent}${cjsDecl(nsName)} ${nsName} = require(${mod});\n${indent}${cjsDecl(defaultName)} ${defaultName} = ${nsName}.default || ${nsName};`;
310
+ }
311
+ );
312
+
313
+ // import { a, b as c } from 'mod'
314
+ result = result.replace(
315
+ /(?:^|\n)([ \t]*)import\s*\{([^}]+)\}\s*from\s*(['"][^'"]+['"])[ \t]*;?/g,
316
+ (match, indent, imports, mod) => {
317
+ // Guard: ${ in captured names means regex matched inside a template literal
318
+ if (imports.includes('${')) return match;
319
+ const modRef = '__imp_' + Math.random().toString(36).slice(2, 8);
320
+ const mapped = imports.split(',').map((s: string) => {
321
+ const parts = s.trim().split(/\s+as\s+/);
322
+ const sourceProp = parts[0].trim();
323
+ const localName = parts.length === 2 ? parts[1].trim() : sourceProp;
324
+ if (localName) importSources.set(localName, { modRef, prop: sourceProp });
325
+ if (parts.length === 2) return `${sourceProp}: ${localName}`;
326
+ return sourceProp;
327
+ }).filter((s: string) => s).join(', ');
328
+ return `\n${indent}const ${modRef} = require(${mod});\n${indent}const { ${mapped} } = ${modRef};`;
329
+ }
330
+ );
331
+
332
+ // import * as X from 'mod'
333
+ result = result.replace(
334
+ /(?:^|\n)([ \t]*)import\s*\*\s*as\s+([\w$]+)\s+from\s*(['"][^'"]+['"])[ \t]*;?/g,
335
+ (_match, indent, name, mod) => `\n${indent}${cjsDecl(name)} ${name} = require(${mod});`
336
+ );
337
+
338
+ // import X from 'mod' (default import)
339
+ result = result.replace(
340
+ /(?:^|\n)([ \t]*)import\s+([\w$]+)\s+from\s*(['"][^'"]+['"])[ \t]*;?/g,
341
+ (_match, indent, name, mod) => `\n${indent}${cjsDecl(name)} ${name} = require(${mod});`
342
+ );
343
+
344
+ // import 'mod' (side-effect)
345
+ result = result.replace(
346
+ /(?:^|\n)([ \t]*)import\s*(['"][^'"]+['"])[ \t]*;?/g,
347
+ (_match, indent, mod) => `\n${indent}require(${mod});`
348
+ );
349
+
350
+ // --- Export transforms ---
351
+
352
+ // Strip empty export{} (bundler ESM marker, no-op)
353
+ result = result.replace(/(?:^|\n)[ \t]*export\s*\{\s*\}[ \t]*;?/g, '');
354
+
355
+ // export * from 'mod' — use getter-based forwarding for live bindings
356
+ result = result.replace(
357
+ /(?:^|\n)([ \t]*)export\s*\*\s*from\s*(['"][^'"]+['"])[ \t]*;?/g,
358
+ (_match, indent, mod) => {
359
+ const tmpVar = '__star_' + Math.random().toString(36).slice(2, 8);
360
+ return `\n${indent}const ${tmpVar} = require(${mod});\n${indent}Object.keys(${tmpVar}).forEach(function(k) { if (k !== 'default' && !exports.hasOwnProperty(k)) Object.defineProperty(exports, k, { get: function() { return ${tmpVar}[k]; }, enumerable: true, configurable: true }); });`;
361
+ }
362
+ );
363
+
364
+ // export { a, b } from 'mod' (re-export) — use getters for live bindings
365
+ // (handles circular dependencies where source module isn't fully populated yet)
366
+ result = result.replace(
367
+ /(?:^|\n)([ \t]*)export\s*\{([^}]+)\}\s*from\s*(['"][^'"]+['"])[ \t]*;?/g,
368
+ (match, indent, names, mod) => {
369
+ // Guard: ${ in captured names means regex matched inside a template literal
370
+ if (names.includes('${')) return match;
371
+ const tmpVar = '__re_' + Math.random().toString(36).slice(2, 8);
372
+ const assignments = names.split(',').map((s: string) => {
373
+ const parts = s.trim().split(/\s+as\s+/);
374
+ const local = parts[0].trim();
375
+ const exported = parts.length === 2 ? parts[1].trim() : local;
376
+ return `${indent}Object.defineProperty(exports, '${exported}', { get() { return ${tmpVar}.${local}; }, enumerable: true, configurable: true });`;
377
+ }).join('\n');
378
+ return `\n${indent}const ${tmpVar} = require(${mod});\n${assignments}`;
379
+ }
380
+ );
381
+
382
+ // export default <expr> — must come before named export { }
383
+ if (hasDefaultExport && hasNamedExport) {
384
+ result = result.replace(
385
+ /(?:^|\n)([ \t]*)export\s+default\s+/g,
386
+ (_match, indent) => `\n${indent}exports.default = `
387
+ );
388
+ } else {
389
+ result = result.replace(
390
+ /(?:^|\n)([ \t]*)export\s+default\s+/g,
391
+ (_match, indent) => `\n${indent}module.exports = `
392
+ );
393
+ }
394
+
395
+ // export const/let/var x = ...
396
+ result = result.replace(
397
+ /(?:^|\n)([ \t]*)export\s+(const|let|var)\s+([\w$]+)\s*=/g,
398
+ (match, indent, keyword, name) => {
399
+ // Guard: ${ means regex matched inside a template literal
400
+ if (match.includes('${')) return match;
401
+ return `\n${indent}${keyword} ${name} = exports.${name} =`;
402
+ }
403
+ );
404
+
405
+ // export function f(...) / export async function f(...) / export class C
406
+ result = result.replace(
407
+ /(?:^|\n)([ \t]*)export\s+(async\s+function\s+([\w$]+)|function\s+([\w$]+)|class\s+([\w$]+))/g,
408
+ (match, indent, decl, asyncFnName, fnName, className, offset: number) => {
409
+ // Guard: if char after match is '{', it's a template literal `export function ${fn}`
410
+ // Real exports have '(' after function name or '{' after class + whitespace
411
+ const nextChar = result.charAt(offset + match.length);
412
+ if (nextChar === '{') return match;
413
+ const name = asyncFnName || fnName || className;
414
+ trailingExports.push(`exports.${name} = ${name};`);
415
+ return `\n${indent}${decl}`;
416
+ }
417
+ );
418
+
419
+ // export { a, b as c } (local exports, no from)
420
+ // Use trailing exports to ensure declarations are fully initialized.
421
+ // For names that were imported from another module, use getters pointing
422
+ // back to the source module reference — this creates ESM-like live bindings
423
+ // that survive circular dependencies.
424
+ result = result.replace(
425
+ /(?:^|\n)([ \t]*)export\s*\{([^}]+)\}[ \t]*;?/g,
426
+ (match, _indent, names) => {
427
+ // Guard: ${ in captured names means regex matched inside a template literal
428
+ if (names.includes('${')) return match;
429
+ names.split(',').forEach((s: string) => {
430
+ const parts = s.trim().split(/\s+as\s+/);
431
+ const local = parts[0].trim();
432
+ const exported = parts.length === 2 ? parts[1].trim() : local;
433
+ if (!local) return;
434
+ const src = importSources.get(local);
435
+ if (src) {
436
+ // Imported name → lazy getter reading from source module reference
437
+ trailingExports.push(`Object.defineProperty(exports, '${exported}', { get: function() { return ${src.modRef}.${src.prop}; }, enumerable: true, configurable: true });`);
438
+ } else {
439
+ // Locally defined → direct assignment at end of file
440
+ trailingExports.push(`exports.${exported} = ${local};`);
441
+ }
442
+ });
443
+ return '';
444
+ }
445
+ );
446
+
447
+ // --- Other transforms ---
448
+
449
+ // Dynamic import() with string literal → Promise.resolve(require())
450
+ // Negative lookbehind: skip obj.import('...') where '.' precedes import
451
+ result = result.replace(
452
+ /(?<!\.)(?<!\w)\bimport\s*\(\s*(['"][^'"]+['"])\s*\)/g,
453
+ (_match, mod) => `Promise.resolve(require(${mod}))`
454
+ );
455
+
456
+ // Dynamic import() with any expression (variables, template literals, nested parens, etc.)
457
+ // Must come AFTER the string-literal version above.
458
+ // Use programmatic paren-balancing since regex can't handle nested parens.
459
+ {
460
+ let i = 0;
461
+ let out = '';
462
+ while (i < result.length) {
463
+ // Look for `import(`
464
+ const importIdx = result.indexOf('import(', i);
465
+ if (importIdx === -1) { out += result.slice(i); break; }
466
+ // Check word boundary: char before 'import' must not be [\w$.] (dot = method call)
467
+ if (importIdx > 0 && /[\w$.]/.test(result[importIdx - 1])) {
468
+ out += result.slice(i, importIdx + 7);
469
+ i = importIdx + 7;
470
+ continue;
471
+ }
472
+ // Skip class/object method definitions like `async import(url) {` or `import(url) {`
473
+ // Method definitions have `) {` after the parameter list (opening method body).
474
+ // Dynamic imports NEVER have `{` directly after `)`.
475
+ {
476
+ let depth = 1;
477
+ let k = importIdx + 7;
478
+ while (k < result.length && depth > 0) {
479
+ if (result[k] === '(') depth++;
480
+ else if (result[k] === ')') depth--;
481
+ k++;
482
+ }
483
+ if (depth === 0) {
484
+ let afterClose = k;
485
+ while (afterClose < result.length && /[ \t]/.test(result[afterClose])) afterClose++;
486
+ if (result[afterClose] === '{') {
487
+ // This is a method/function definition, not a dynamic import — skip
488
+ out += result.slice(i, importIdx + 7);
489
+ i = importIdx + 7;
490
+ continue;
491
+ }
492
+ }
493
+ }
494
+ out += result.slice(i, importIdx);
495
+ // Find matching close paren with depth tracking
496
+ let depth = 1;
497
+ let j = importIdx + 7; // after 'import('
498
+ while (j < result.length && depth > 0) {
499
+ if (result[j] === '(') depth++;
500
+ else if (result[j] === ')') depth--;
501
+ j++;
502
+ }
503
+ if (depth === 0) {
504
+ const arg = result.slice(importIdx + 7, j - 1);
505
+ out += `Promise.resolve().then(function() { return require(${arg}); })`;
506
+ } else {
507
+ // Unbalanced — leave as-is
508
+ out += result.slice(importIdx, j);
509
+ }
510
+ i = j;
511
+ }
512
+ result = out;
513
+ }
514
+
515
+ // --- Final fixups ---
516
+
517
+ // Replace const/let declarations of CJS wrapper param names with var.
518
+ // esbuild bundles often emit `const __dirname = ...` which collides with
519
+ // the new Function() wrapper parameters. `var` can shadow them safely.
520
+ result = result.replace(
521
+ /\b(const|let)\s+(__dirname|__filename|exports|require|module|console|process|Buffer|global)\b/g,
522
+ (_match, _kw, name) => `var ${name}`
523
+ );
524
+
525
+ // Append trailing exports for exported functions/classes
526
+ if (trailingExports.length > 0) {
527
+ result += '\n' + trailingExports.join('\n');
528
+ }
529
+
530
+ // Restore original string/template literal contents
531
+ result = unmaskStringLiterals(result, literals);
532
+
533
+ return result;
534
+ }
535
+
536
+ function createNodeImpl(kernelOrPortRegistry?: Kernel | Map<number, VirtualRequestHandler>): Command {
537
+ return async (ctx) => {
538
+ // Handle -v/--version
539
+ if (ctx.args.length > 0 && (ctx.args[0] === '-v' || ctx.args[0] === '--version')) {
540
+ ctx.stdout.write(NODE_VERSION + '\n');
541
+ return 0;
542
+ }
543
+
544
+ // Handle --help
545
+ if (ctx.args.length > 0 && ctx.args[0] === '--help') {
546
+ ctx.stdout.write('Usage: node [-e code] [script.js] [args...]\n');
547
+ ctx.stdout.write(' node -v\n\n');
548
+ ctx.stdout.write('Options:\n');
549
+ ctx.stdout.write(' -e, --eval <code> evaluate code\n');
550
+ ctx.stdout.write(' -v, --version print version\n\n');
551
+ ctx.stdout.write('Limitations:\n');
552
+ ctx.stdout.write(' - ESM support via auto-transform (import/export → require/exports)\n');
553
+ ctx.stdout.write(' - No event loop (top-level async does not settle)\n');
554
+ ctx.stdout.write(' - No native modules\n');
555
+ ctx.stdout.write(' - require() resolves: built-in modules, relative VFS files, installed packages\n');
556
+ return 0;
557
+ }
558
+
559
+ let source: string;
560
+ let filename: string;
561
+ let scriptArgs: string[];
562
+
563
+ // Handle -e / --eval
564
+ if (ctx.args.length > 0 && (ctx.args[0] === '-e' || ctx.args[0] === '--eval')) {
565
+ if (ctx.args.length < 2) {
566
+ ctx.stderr.write('node: -e requires an argument\n');
567
+ return 1;
568
+ }
569
+ source = ctx.args[1];
570
+ filename = '[eval]';
571
+ scriptArgs = ctx.args.slice(2);
572
+ } else if (ctx.args.length > 0) {
573
+ // Run script file
574
+ const scriptPath = resolve(ctx.cwd, ctx.args[0]);
575
+ try {
576
+ source = ctx.vfs.readFileString(scriptPath);
577
+ } catch (e) {
578
+ if (e instanceof VFSError) {
579
+ ctx.stderr.write(`node: ${ctx.args[0]}: ${e.message}\n`);
580
+ return 1;
581
+ }
582
+ throw e;
583
+ }
584
+ filename = scriptPath;
585
+ scriptArgs = ctx.args.slice(1);
586
+ } else {
587
+ // No args -- print usage hint
588
+ ctx.stderr.write('Usage: node [-e code] [script.js] [args...]\n');
589
+ return 1;
590
+ }
591
+
592
+ const dir = filename === '[eval]' ? ctx.cwd : dirname(filename);
593
+
594
+ // Extract portRegistry from either Kernel or direct Map
595
+ const portRegistry = kernelOrPortRegistry instanceof Map
596
+ ? kernelOrPortRegistry
597
+ : kernelOrPortRegistry?.portRegistry;
598
+
599
+ const nodeCtx: NodeContext = {
600
+ vfs: ctx.vfs,
601
+ cwd: ctx.cwd,
602
+ env: ctx.env,
603
+ stdout: ctx.stdout,
604
+ stderr: ctx.stderr,
605
+ argv: [filename, ...scriptArgs],
606
+ filename,
607
+ dirname: dir,
608
+ signal: ctx.signal,
609
+ portRegistry,
610
+ routeLoopback: kernelOrPortRegistry instanceof Map
611
+ ? undefined
612
+ : kernelOrPortRegistry?.routeLoopback,
613
+ };
614
+
615
+ const moduleMap = createModuleMap(nodeCtx);
616
+ const moduleCache = new Map<string, unknown>();
617
+
618
+ // Stub for @rollup/rollup-* native binary packages (platform-specific NAPI addons).
619
+ // These can't work in a browser environment. Provide shims for the exported functions.
620
+ // Vite's dev server primarily uses es-module-lexer, not rollup's parser, so these
621
+ // may never be called. If they are, hash stubs return safe defaults; parse stubs throw.
622
+ const rollupNativeStub = {
623
+ parse: () => { throw new Error('[lifo] rollup native parser is not available in browser'); },
624
+ parseAsync: () => Promise.reject(new Error('[lifo] rollup native parser is not available in browser')),
625
+ xxhashBase64Url: (data: unknown) => {
626
+ // Simple fallback hash — not cryptographically equivalent but sufficient for cache keys
627
+ const s = typeof data === 'string' ? data : String(data);
628
+ let h = 0;
629
+ for (let i = 0; i < s.length; i++) h = (Math.imul(31, h) + s.charCodeAt(i)) | 0;
630
+ return (h >>> 0).toString(36);
631
+ },
632
+ xxhashBase36: (data: unknown) => {
633
+ const s = typeof data === 'string' ? data : String(data);
634
+ let h = 0;
635
+ for (let i = 0; i < s.length; i++) h = (Math.imul(31, h) + s.charCodeAt(i)) | 0;
636
+ return (h >>> 0).toString(36);
637
+ },
638
+ xxhashBase16: (data: unknown) => {
639
+ const s = typeof data === 'string' ? data : String(data);
640
+ let h = 0;
641
+ for (let i = 0; i < s.length; i++) h = (Math.imul(31, h) + s.charCodeAt(i)) | 0;
642
+ return (h >>> 0).toString(16);
643
+ },
644
+ };
645
+
646
+ // Build require function (declared first, module shim overrides below)
647
+ function nodeRequire(name: string): unknown {
648
+ // Strip node: prefix
649
+ if (name.startsWith('node:')) name = name.slice(5);
650
+
651
+ // Check cache
652
+ if (moduleCache.has(name)) return moduleCache.get(name);
653
+
654
+ // Built-in modules
655
+ if (moduleMap[name]) {
656
+ const mod = moduleMap[name]();
657
+ moduleCache.set(name, mod);
658
+ return mod;
659
+ }
660
+
661
+ // Subpath imports (#specifier)
662
+ if (name.startsWith('#')) {
663
+ const resolved = resolvePackageImport(name, dir);
664
+ if (resolved) {
665
+ const cached = moduleCache.get(resolved.path);
666
+ if (cached) return cached;
667
+ const modSource = ctx.vfs.readFileString(resolved.path);
668
+ return executeModule(modSource, resolved.path, resolved.path);
669
+ }
670
+ throw new Error(`Cannot find module '${name}'`);
671
+ }
672
+
673
+ // Relative VFS files
674
+ if (name.startsWith('./') || name.startsWith('../') || name.startsWith('/')) {
675
+ const resolved = resolveVfsModule(name, dir);
676
+ if (resolved) {
677
+ const cached = moduleCache.get(resolved.path);
678
+ if (cached) return cached;
679
+
680
+ if (resolved.path.endsWith('.json')) {
681
+ const content = ctx.vfs.readFileString(resolved.path);
682
+ const parsed = JSON.parse(content);
683
+ moduleCache.set(resolved.path, parsed);
684
+ return parsed;
685
+ }
686
+
687
+ const modSource = ctx.vfs.readFileString(resolved.path);
688
+ return executeModule(modSource, resolved.path, resolved.path);
689
+ }
690
+
691
+ throw new Error(`Cannot find module '${name}'`);
692
+ }
693
+
694
+ // Node-modules resolution (walk up node_modules, global, legacy)
695
+ const nmResolved = resolveNodeModule(name, dir);
696
+ if (nmResolved) {
697
+ const cached = moduleCache.get(nmResolved.path);
698
+ if (cached) return cached;
699
+
700
+ if (nmResolved.path.endsWith('.json')) {
701
+ const content = ctx.vfs.readFileString(nmResolved.path);
702
+ const parsed = JSON.parse(content);
703
+ moduleCache.set(nmResolved.path, parsed);
704
+ return parsed;
705
+ }
706
+
707
+ const modSource = ctx.vfs.readFileString(nmResolved.path);
708
+ return executeModule(modSource, nmResolved.path, nmResolved.path);
709
+ }
710
+
711
+ // Stub for rollup native binary packages
712
+ if (name.startsWith('@rollup/rollup-')) return rollupNativeStub;
713
+
714
+ throw new Error(`Cannot find module '${name}'`);
715
+ }
716
+
717
+ // Override module shim so createRequire returns nodeRequire (resolves VFS + node_modules)
718
+ moduleMap.module = () => {
719
+ const createRequire = (_filename: string | URL) => nodeRequire;
720
+ const builtinNames = Object.keys(moduleMap);
721
+ const isBuiltin = (s: string) => {
722
+ const n = s.startsWith('node:') ? s.slice(5) : s;
723
+ return builtinNames.includes(n);
724
+ };
725
+ return { createRequire, builtinModules: builtinNames, isBuiltin, default: { createRequire } };
726
+ };
727
+
728
+ function resolveVfsModule(name: string, fromDir: string): { path: string } | null {
729
+ const absPath = resolve(fromDir, name);
730
+
731
+ // Try exact path
732
+ if (ctx.vfs.exists(absPath)) {
733
+ try {
734
+ const stat = ctx.vfs.stat(absPath);
735
+ if (stat.type === 'file') return { path: absPath };
736
+ // Directory -- try index.js
737
+ const indexPath = join(absPath, 'index.js');
738
+ if (ctx.vfs.exists(indexPath)) return { path: indexPath };
739
+ } catch { /* fall through */ }
740
+ }
741
+
742
+ // Try .js extension
743
+ if (!extname(absPath) && ctx.vfs.exists(absPath + '.js')) {
744
+ return { path: absPath + '.js' };
745
+ }
746
+
747
+ // Try .mjs extension
748
+ if (!extname(absPath) && ctx.vfs.exists(absPath + '.mjs')) {
749
+ return { path: absPath + '.mjs' };
750
+ }
751
+
752
+ // Try .json extension
753
+ if (!extname(absPath) && ctx.vfs.exists(absPath + '.json')) {
754
+ return { path: absPath + '.json' };
755
+ }
756
+
757
+ return null;
758
+ }
759
+
760
+ // ── Subpath imports (#specifier) resolution ──
761
+ // Node.js package.json "imports" field: #name → conditional file path
762
+
763
+ function resolvePackageImport(name: string, fromDir: string): { path: string } | null {
764
+ // Walk up to find the nearest package.json with an "imports" field
765
+ let current = fromDir;
766
+ for (; ;) {
767
+ const pkgPath = join(current, 'package.json');
768
+ if (ctx.vfs.exists(pkgPath)) {
769
+ try {
770
+ const pkg = JSON.parse(ctx.vfs.readFileString(pkgPath));
771
+ if (pkg.imports && typeof pkg.imports === 'object') {
772
+ const importsMap = pkg.imports as Record<string, unknown>;
773
+ if (name in importsMap) {
774
+ const target = resolveExportsCondition(importsMap[name]);
775
+ if (target) {
776
+ return resolveVfsModule(target, current);
777
+ }
778
+ }
779
+ }
780
+ } catch { /* ignore parse errors */ }
781
+ break; // Stop at nearest package.json (Node.js semantics)
782
+ }
783
+ const parent = dirname(current);
784
+ if (parent === current) break;
785
+ current = parent;
786
+ }
787
+ return null;
788
+ }
789
+
790
+ // ── Node-modules resolution (walk up, global, legacy) ──
791
+
792
+ function resolveNodeModule(name: string, fromDir: string): { path: string } | null {
793
+ // Parse package name and optional subpath
794
+ let packageName: string;
795
+ let subpath: string | null = null;
796
+
797
+ if (name.startsWith('@')) {
798
+ const parts = name.split('/');
799
+ if (parts.length < 2) return null;
800
+ packageName = parts[0] + '/' + parts[1];
801
+ if (parts.length > 2) subpath = parts.slice(2).join('/');
802
+ } else {
803
+ const slashIdx = name.indexOf('/');
804
+ if (slashIdx !== -1) {
805
+ packageName = name.slice(0, slashIdx);
806
+ subpath = name.slice(slashIdx + 1);
807
+ } else {
808
+ packageName = name;
809
+ }
810
+ }
811
+
812
+ // Walk up from fromDir
813
+ let current = fromDir;
814
+ for (; ;) {
815
+ const candidate = join(current, 'node_modules', packageName);
816
+ if (ctx.vfs.exists(candidate)) {
817
+ const resolved = resolvePackageEntry(candidate, subpath);
818
+ if (resolved) return resolved;
819
+ }
820
+ const parent = dirname(current);
821
+ if (parent === current) break;
822
+ current = parent;
823
+ }
824
+
825
+ // Global modules
826
+ const globalCandidate = join('/usr/lib/node_modules', packageName);
827
+ if (ctx.vfs.exists(globalCandidate)) {
828
+ const resolved = resolvePackageEntry(globalCandidate, subpath);
829
+ if (resolved) return resolved;
830
+ }
831
+
832
+ // Legacy location (pkg command)
833
+ const legacyCandidate = join('/usr/share/pkg/node_modules', packageName);
834
+ if (ctx.vfs.exists(legacyCandidate)) {
835
+ const resolved = resolvePackageEntry(legacyCandidate, subpath);
836
+ if (resolved) return resolved;
837
+ }
838
+
839
+ return null;
840
+ }
841
+
842
+ /** Resolve a conditional exports value (string | { require, import, default, ... }) */
843
+ function resolveExportsCondition(value: unknown): string | null {
844
+ if (typeof value === 'string') return value;
845
+ if (value && typeof value === 'object' && !Array.isArray(value)) {
846
+ const cond = value as Record<string, unknown>;
847
+ // Prefer require (CJS), then default, then import (ESM)
848
+ if (typeof cond.require === 'string') return cond.require;
849
+ if (typeof cond.default === 'string') return cond.default;
850
+ if (typeof cond.import === 'string') return cond.import;
851
+ // Recurse into nested conditions (e.g. { node: { require: ... } })
852
+ for (const key of Object.keys(cond)) {
853
+ if (key === 'types') continue; // skip TS declarations
854
+ const nested = resolveExportsCondition(cond[key]);
855
+ if (nested) return nested;
856
+ }
857
+ }
858
+ return null;
859
+ }
860
+
861
+ function resolvePackageEntry(pkgDir: string, subpath: string | null): { path: string } | null {
862
+ const pkgJsonPath = join(pkgDir, 'package.json');
863
+ let pkgJson: Record<string, unknown> | null = null;
864
+ if (ctx.vfs.exists(pkgJsonPath)) {
865
+ try { pkgJson = JSON.parse(ctx.vfs.readFileString(pkgJsonPath)); } catch { /* ignore */ }
866
+ }
867
+
868
+ // --- Subpath resolution (e.g. require('rollup/parseAst')) ---
869
+ if (subpath) {
870
+ // 1. Check exports map first (Node.js subpath exports)
871
+ if (pkgJson?.exports && typeof pkgJson.exports === 'object') {
872
+ const exportsMap = pkgJson.exports as Record<string, unknown>;
873
+ const key = './' + subpath;
874
+ if (key in exportsMap) {
875
+ const target = resolveExportsCondition(exportsMap[key]);
876
+ if (target) {
877
+ const resolved = resolveVfsModule(target, pkgDir);
878
+ if (resolved) return resolved;
879
+ }
880
+ }
881
+ // Also try wildcard/glob patterns like "./dist/*": "./dist/*"
882
+ for (const pattern of Object.keys(exportsMap)) {
883
+ if (pattern.endsWith('/*') && key.startsWith(pattern.slice(0, -1))) {
884
+ const targetPattern = resolveExportsCondition(exportsMap[pattern]);
885
+ if (targetPattern && targetPattern.endsWith('/*')) {
886
+ const suffix = key.slice(pattern.length - 1);
887
+ const target = targetPattern.slice(0, -1) + suffix;
888
+ const resolved = resolveVfsModule(target, pkgDir);
889
+ if (resolved) return resolved;
890
+ }
891
+ }
892
+ }
893
+ }
894
+ // 2. Fall back to direct file resolution
895
+ return resolveVfsModule('./' + subpath, pkgDir);
896
+ }
897
+
898
+ // --- Root resolution (e.g. require('rollup')) ---
899
+
900
+ // 1. Check exports["."] first
901
+ if (pkgJson?.exports) {
902
+ const exportsVal = pkgJson.exports;
903
+ let rootExport: unknown = null;
904
+ if (typeof exportsVal === 'string') {
905
+ rootExport = exportsVal;
906
+ } else if (typeof exportsVal === 'object' && !Array.isArray(exportsVal)) {
907
+ const exportsMap = exportsVal as Record<string, unknown>;
908
+ rootExport = exportsMap['.'] ?? null;
909
+ // Handle case where exports IS the condition map (no "." key)
910
+ if (!rootExport && ('require' in exportsMap || 'import' in exportsMap || 'default' in exportsMap)) {
911
+ rootExport = exportsMap;
912
+ }
913
+ }
914
+ if (rootExport) {
915
+ const target = resolveExportsCondition(rootExport);
916
+ if (target) {
917
+ const resolved = resolveVfsModule(target, pkgDir);
918
+ if (resolved) return resolved;
919
+ }
920
+ }
921
+ }
922
+
923
+ // 2. Check main field
924
+ if (pkgJson?.main && typeof pkgJson.main === 'string') {
925
+ const resolved = resolveVfsModule('./' + pkgJson.main, pkgDir);
926
+ if (resolved) return resolved;
927
+ }
928
+
929
+ // 3. Default to index.js
930
+ const indexPath = join(pkgDir, 'index.js');
931
+ if (ctx.vfs.exists(indexPath)) return { path: indexPath };
932
+
933
+ return null;
934
+ }
935
+
936
+ function executeModule(modSource: string, modFilename: string, cacheAs?: string): unknown {
937
+ const modDir = dirname(modFilename);
938
+ const modModule = { exports: {} as Record<string, unknown> };
939
+ const modExports = modModule.exports;
940
+
941
+ // Pre-cache to handle circular dependencies (Node.js behaviour)
942
+ if (cacheAs) {
943
+ moduleCache.set(cacheAs, modExports);
944
+ }
945
+
946
+ const modNodeCtx: NodeContext = { ...nodeCtx, filename: modFilename, dirname: modDir };
947
+ const modModuleMap = createModuleMap(modNodeCtx);
948
+ const modProcess = createProcess({
949
+ argv: nodeCtx.argv,
950
+ env: nodeCtx.env,
951
+ cwd: nodeCtx.cwd,
952
+ stdout: ctx.stdout,
953
+ stderr: ctx.stderr,
954
+ });
955
+ const modConsole = createConsole(ctx.stdout, ctx.stderr);
956
+
957
+ function modRequire(name: string): unknown {
958
+ // Strip node: prefix
959
+ if (name.startsWith('node:')) name = name.slice(5);
960
+
961
+ // Built-in modules from child context
962
+ if (modModuleMap[name]) {
963
+ const cached = moduleCache.get(name);
964
+ if (cached) return cached;
965
+ const mod = modModuleMap[name]();
966
+ moduleCache.set(name, mod);
967
+ return mod;
968
+ }
969
+
970
+ // Subpath imports (#specifier)
971
+ if (name.startsWith('#')) {
972
+ const resolved = resolvePackageImport(name, modDir);
973
+ if (resolved) {
974
+ const cached = moduleCache.get(resolved.path);
975
+ if (cached) return cached;
976
+ const childSource = ctx.vfs.readFileString(resolved.path);
977
+ return executeModule(childSource, resolved.path, resolved.path);
978
+ }
979
+ throw new Error(`Cannot find module '${name}'`);
980
+ }
981
+
982
+ if (name.startsWith('./') || name.startsWith('../') || name.startsWith('/')) {
983
+ const resolved = resolveVfsModule(name, modDir);
984
+ if (resolved) {
985
+ const cached = moduleCache.get(resolved.path);
986
+ if (cached) return cached;
987
+
988
+ if (resolved.path.endsWith('.json')) {
989
+ const content = ctx.vfs.readFileString(resolved.path);
990
+ const parsed = JSON.parse(content);
991
+ moduleCache.set(resolved.path, parsed);
992
+ return parsed;
993
+ }
994
+
995
+ const childSource = ctx.vfs.readFileString(resolved.path);
996
+ return executeModule(childSource, resolved.path, resolved.path);
997
+ }
998
+ throw new Error(`Cannot find module '${name}'`);
999
+ }
1000
+
1001
+ // Node-modules resolution from this module's directory
1002
+ const nmResolved = resolveNodeModule(name, modDir);
1003
+ if (nmResolved) {
1004
+ const cached = moduleCache.get(nmResolved.path);
1005
+ if (cached) return cached;
1006
+
1007
+ if (nmResolved.path.endsWith('.json')) {
1008
+ const content = ctx.vfs.readFileString(nmResolved.path);
1009
+ const parsed = JSON.parse(content);
1010
+ moduleCache.set(nmResolved.path, parsed);
1011
+ return parsed;
1012
+ }
1013
+
1014
+ const childSource = ctx.vfs.readFileString(nmResolved.path);
1015
+ return executeModule(childSource, nmResolved.path, nmResolved.path);
1016
+ }
1017
+
1018
+ // Stub for rollup native binary packages
1019
+ if (name.startsWith('@rollup/rollup-')) return rollupNativeStub;
1020
+
1021
+ throw new Error(`Cannot find module '${name}'`);
1022
+ }
1023
+
1024
+ // Override module shim so createRequire returns modRequire (resolves VFS + node_modules too)
1025
+ modModuleMap.module = () => {
1026
+ const createRequire = (_filename: string | URL) => modRequire;
1027
+ const builtinNames = Object.keys(modModuleMap);
1028
+ const isBuiltin = (s: string) => {
1029
+ const n = s.startsWith('node:') ? s.slice(5) : s;
1030
+ return builtinNames.includes(n);
1031
+ };
1032
+ return { createRequire, builtinModules: builtinNames, isBuiltin, default: { createRequire } };
1033
+ };
1034
+
1035
+ let cleanSource = stripShebang(modSource);
1036
+ if (shouldTreatAsEsm(cleanSource, modFilename, ctx.vfs)) {
1037
+ cleanSource = transformEsmToCjs(cleanSource);
1038
+ }
1039
+ const wrapped = `(function(exports, require, module, __filename, __dirname, console, process, Buffer, setTimeout, setInterval, clearTimeout, clearInterval, global, __importMetaUrl, __importMeta, __importMetaResolve) {\n${cleanSource}\n})`;
1040
+
1041
+ let fn: (...args: unknown[]) => void;
1042
+ try {
1043
+ fn = new Function('return ' + wrapped)();
1044
+ } catch (e) {
1045
+ const err = e instanceof Error ? e : new Error(String(e));
1046
+ ctx.stderr.write(`[ESM-FAIL] file=${modFilename} srcLen=${modSource.length} err=${err.message}\n`);
1047
+ // Binary search for exact error location, matching specific error
1048
+ const lines = cleanSource.split('\n');
1049
+ const targetErr = err.message;
1050
+ let lo = 0, hi = lines.length;
1051
+ while (hi - lo > 3) {
1052
+ const mid = (lo + hi) >>> 1;
1053
+ const partial = lines.slice(0, mid).join('\n');
1054
+ try { new Function(partial); lo = mid; } catch (e2) {
1055
+ if (e2 instanceof Error && e2.message === targetErr) hi = mid;
1056
+ else lo = mid; // Different error (e.g. unclosed), keep going
1057
+ }
1058
+ }
1059
+ ctx.stderr.write(`[ESM-FAIL] error at L${lo}-${hi}, showing L${Math.max(1, lo - 25)} to L${hi + 3}:\n`);
1060
+ for (let li = Math.max(0, lo - 25); li < Math.min(lines.length, hi + 3); li++) {
1061
+ ctx.stderr.write(`[ESM-FAIL] ${li + 1 === lo || li + 1 === hi ? '>>>' : ' '} L${li + 1}: ${lines[li]?.slice(0, 200)}\n`);
1062
+ }
1063
+ err.message = `[${modFilename}] ${err.message}`;
1064
+ throw err;
1065
+ }
1066
+ const global = { process: modProcess, Buffer, console: modConsole };
1067
+ // Many npm bundles access globalThis.process directly (not the wrapper param).
1068
+ // Only override in browser-like envs; skip in real Node.js (test runner).
1069
+ const ga = globalThis as Record<string, unknown>;
1070
+ const isRealNode = typeof (ga.process as Record<string, unknown>)?.pid === 'number';
1071
+ const savedProcess = ga.process;
1072
+ const savedBuffer = ga.Buffer;
1073
+ const savedConsole = ga.console;
1074
+ if (!isRealNode) {
1075
+ ga.process = modProcess;
1076
+ ga.Buffer = Buffer;
1077
+ ga.console = modConsole;
1078
+ }
1079
+ // Inject Rollup/esbuild interop helpers so bundled npm packages can find them
1080
+ const savedHelpers: Record<string, unknown> = {};
1081
+ for (const k of Object.keys(_rollupHelpers)) { savedHelpers[k] = ga[k]; ga[k] = _rollupHelpers[k]; }
1082
+ const importMetaUrl = 'file://' + modFilename;
1083
+ const importMeta = { url: importMetaUrl, dirname: modDir, filename: modFilename };
1084
+ const importMetaResolve = (specifier: string) => { throw new Error(`import.meta.resolve('${specifier}') is not supported`); };
1085
+ try {
1086
+ fn(
1087
+ modExports, modRequire, modModule, modFilename, modDir,
1088
+ modConsole, modProcess, Buffer,
1089
+ globalThis.setTimeout, globalThis.setInterval,
1090
+ globalThis.clearTimeout, globalThis.clearInterval,
1091
+ global,
1092
+ importMetaUrl, importMeta, importMetaResolve,
1093
+ );
1094
+ } catch (e) {
1095
+ if (e instanceof ProcessExitError) throw e;
1096
+ const err = e instanceof Error ? e : new Error(String(e));
1097
+ if (!err.message.includes('[/')) {
1098
+ err.message = `[${modFilename}] ${err.message}`;
1099
+ }
1100
+ throw err;
1101
+ } finally {
1102
+ for (const k of Object.keys(savedHelpers)) ga[k] = savedHelpers[k];
1103
+ if (!isRealNode) {
1104
+ ga.process = savedProcess;
1105
+ ga.Buffer = savedBuffer;
1106
+ ga.console = savedConsole;
1107
+ }
1108
+ }
1109
+
1110
+ // Update cache if module.exports was reassigned (not just mutated)
1111
+ if (cacheAs && modModule.exports !== modExports) {
1112
+ moduleCache.set(cacheAs, modModule.exports);
1113
+ }
1114
+
1115
+ return modModule.exports;
1116
+ }
1117
+
1118
+ // Execute main script
1119
+ const process = createProcess({
1120
+ argv: nodeCtx.argv,
1121
+ env: nodeCtx.env,
1122
+ cwd: nodeCtx.cwd,
1123
+ stdout: ctx.stdout,
1124
+ stderr: ctx.stderr,
1125
+ });
1126
+ const nodeConsole = createConsole(ctx.stdout, ctx.stderr);
1127
+
1128
+ const module = { exports: {} as Record<string, unknown> };
1129
+ const exports = module.exports;
1130
+ const global = { process, Buffer, console: nodeConsole };
1131
+
1132
+ let cleanMainSource = stripShebang(source);
1133
+ const isEsm = shouldTreatAsEsm(cleanMainSource, filename, ctx.vfs);
1134
+ if (isEsm) {
1135
+ cleanMainSource = transformEsmToCjs(cleanMainSource);
1136
+ }
1137
+
1138
+ // Use async IIFE for ESM (supports top-level await)
1139
+ const wrapped = isEsm
1140
+ ? `(async function(exports, require, module, __filename, __dirname, console, process, Buffer, setTimeout, setInterval, clearTimeout, clearInterval, global, __importMetaUrl, __importMeta, __importMetaResolve) {\n${cleanMainSource}\n})`
1141
+ : `(function(exports, require, module, __filename, __dirname, console, process, Buffer, setTimeout, setInterval, clearTimeout, clearInterval, global, __importMetaUrl, __importMeta, __importMetaResolve) {\n${cleanMainSource}\n})`;
1142
+
1143
+ // Many npm bundles access globalThis.process directly (not the wrapper param).
1144
+ // Only override in browser-like envs; skip in real Node.js (test runner).
1145
+ const ga = globalThis as Record<string, unknown>;
1146
+ const isRealNode = typeof (ga.process as Record<string, unknown>)?.pid === 'number';
1147
+ const savedProcess = ga.process;
1148
+ const savedBuffer = ga.Buffer;
1149
+ const savedConsole = ga.console;
1150
+ if (!isRealNode) {
1151
+ ga.process = process;
1152
+ ga.Buffer = Buffer;
1153
+ ga.console = nodeConsole;
1154
+ }
1155
+ // Inject Rollup/esbuild interop helpers so bundled npm packages can find them
1156
+ const savedHelpers: Record<string, unknown> = {};
1157
+ for (const k of Object.keys(_rollupHelpers)) { savedHelpers[k] = ga[k]; ga[k] = _rollupHelpers[k]; }
1158
+ // Capture unhandled promise rejections from fire-and-forget async actions
1159
+ let pendingRejection: unknown = null;
1160
+ const rejectionHandler = (event: PromiseRejectionEvent) => {
1161
+ pendingRejection = event.reason;
1162
+ event.preventDefault(); // prevent browser default logging
1163
+ ctx.stderr.write(`Unhandled promise rejection: ${event.reason instanceof Error ? event.reason.stack || event.reason.message : String(event.reason)}\n`);
1164
+ };
1165
+ if (typeof globalThis.addEventListener === 'function') {
1166
+ globalThis.addEventListener('unhandledrejection', rejectionHandler as EventListener);
1167
+ }
1168
+
1169
+ const mainImportMetaUrl = 'file://' + filename;
1170
+ const mainImportMeta = { url: mainImportMetaUrl, dirname: dir, filename };
1171
+ const mainImportMetaResolve = (specifier: string) => { throw new Error(`import.meta.resolve('${specifier}') is not supported`); };
1172
+ try {
1173
+ const fn = new Function('return ' + wrapped)();
1174
+ const result = fn(
1175
+ exports, nodeRequire, module, filename, dir,
1176
+ nodeConsole, process, Buffer,
1177
+ globalThis.setTimeout, globalThis.setInterval,
1178
+ globalThis.clearTimeout, globalThis.clearInterval,
1179
+ global,
1180
+ mainImportMetaUrl, mainImportMeta, mainImportMetaResolve,
1181
+ );
1182
+
1183
+ // Await if ESM (async IIFE returns a promise)
1184
+ if (isEsm && result && typeof result.then === 'function') {
1185
+ await result;
1186
+ }
1187
+
1188
+ // Check if any servers were started (long-running process).
1189
+ // Many CLI tools (e.g. vite) fire async actions from cli.parse() whose
1190
+ // promises are discarded. We poll briefly to let those async chains
1191
+ // progress and create servers before deciding the process is done.
1192
+ // Only poll if http was actually loaded (indicating server intent).
1193
+ const getActiveServers = () => {
1194
+ const httpMod = moduleCache.get('http') as { [key: symbol]: unknown[] } | undefined;
1195
+ return httpMod?.[ACTIVE_SERVERS] as Array<{ getPromise(): Promise<void> | null; close(): void }> | undefined;
1196
+ };
1197
+ let activeServers = getActiveServers();
1198
+ if ((!activeServers || activeServers.length === 0) && isEsm) {
1199
+ // ESM scripts may have fire-and-forget async actions (e.g. vite's
1200
+ // cli.parse() triggers an async action whose promise is discarded).
1201
+ // Yield briefly to let those chains start, then poll for servers.
1202
+ // Phase 1: Quick yield — watch for new modules being loaded, which
1203
+ // indicates async work is in progress. Stop early if nothing changes.
1204
+ let prevCacheSize = moduleCache.size;
1205
+ let staleCount = 0;
1206
+ const quickDeadline = Date.now() + 2000;
1207
+ while (Date.now() < quickDeadline) {
1208
+ await new Promise<void>((r) => setTimeout(r, 30));
1209
+ activeServers = getActiveServers();
1210
+ if (activeServers && activeServers.length > 0) break;
1211
+ if (ctx.signal.aborted || pendingRejection) break;
1212
+ // If new modules are loading, async work is progressing
1213
+ const newSize = moduleCache.size;
1214
+ if (newSize > prevCacheSize) {
1215
+ staleCount = 0;
1216
+ prevCacheSize = newSize;
1217
+ } else {
1218
+ staleCount++;
1219
+ // No new modules for 5 ticks (150ms) — async chain likely done
1220
+ if (staleCount >= 5) break;
1221
+ }
1222
+ }
1223
+ // Phase 2: If http was loaded during Phase 1 (indicating server intent)
1224
+ // but no servers yet, keep polling up to 10s for the full server startup.
1225
+ if ((!activeServers || activeServers.length === 0) && moduleCache.has('http')) {
1226
+ const longDeadline = Date.now() + 10000;
1227
+ while (Date.now() < longDeadline) {
1228
+ await new Promise<void>((r) => setTimeout(r, 50));
1229
+ activeServers = getActiveServers();
1230
+ if (activeServers && activeServers.length > 0) break;
1231
+ if (ctx.signal.aborted || pendingRejection) break;
1232
+ }
1233
+ }
1234
+ }
1235
+
1236
+ if (activeServers && activeServers.length > 0) {
1237
+ // Collect all server promises
1238
+ const serverPromises = activeServers
1239
+ .map((s) => s.getPromise())
1240
+ .filter((p): p is Promise<void> => p !== null);
1241
+
1242
+ if (serverPromises.length > 0) {
1243
+ // Wait for all servers to close OR for abort signal
1244
+ const abortPromise = new Promise<void>((resolve) => {
1245
+ if (ctx.signal.aborted) {
1246
+ resolve();
1247
+ return;
1248
+ }
1249
+ ctx.signal.addEventListener('abort', () => resolve(), { once: true });
1250
+ });
1251
+
1252
+ await Promise.race([
1253
+ Promise.all(serverPromises),
1254
+ abortPromise,
1255
+ ]);
1256
+
1257
+ // On abort, close all active servers
1258
+ if (ctx.signal.aborted) {
1259
+ for (const server of [...activeServers]) {
1260
+ server.close();
1261
+ }
1262
+ }
1263
+ }
1264
+ }
1265
+
1266
+ // If an async action failed (e.g. unhandled rejection from ProcessExitError)
1267
+ if (pendingRejection) {
1268
+ if (pendingRejection instanceof ProcessExitError) return pendingRejection.exitCode;
1269
+ return 1;
1270
+ }
1271
+ return 0;
1272
+ } catch (e) {
1273
+ if (e instanceof ProcessExitError) {
1274
+ return e.exitCode;
1275
+ }
1276
+ if (e instanceof Error) {
1277
+ ctx.stderr.write(`${e.stack || e.message}\n`);
1278
+ } else {
1279
+ ctx.stderr.write(`${String(e)}\n`);
1280
+ }
1281
+ return 1;
1282
+ } finally {
1283
+ for (const k of Object.keys(savedHelpers)) ga[k] = savedHelpers[k];
1284
+ if (!isRealNode) {
1285
+ ga.process = savedProcess;
1286
+ ga.Buffer = savedBuffer;
1287
+ ga.console = savedConsole;
1288
+ }
1289
+ // Remove unhandled rejection listener
1290
+ if (typeof globalThis.removeEventListener === 'function') {
1291
+ globalThis.removeEventListener('unhandledrejection', rejectionHandler as EventListener);
1292
+ }
1293
+ }
1294
+ };
1295
+ }
1296
+
1297
+ export function createNodeCommand(kernel: Kernel): Command {
1298
+ return createNodeImpl(kernel);
1299
+ }
1300
+
1301
+ // Default command with a shared portRegistry so http.createServer works
1302
+ const defaultPortRegistry = new Map<number, VirtualRequestHandler>();
1303
+ const command: Command = createNodeImpl(defaultPortRegistry);
1304
+
1305
+ export default command;