@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,215 @@
1
+ /**
2
+ * wasi-instance.ts — WASI snapshot_preview1 shim for Nimbus.
3
+ *
4
+ * Core WASI surface:
5
+ * args_get / args_sizes_get / environ_get / environ_sizes_get
6
+ * fd_close / fd_write / fd_read / fd_seek / fd_tell
7
+ * fd_fdstat_get / fd_fdstat_set_flags
8
+ * proc_exit
9
+ * clock_time_get / clock_res_get
10
+ * random_get
11
+ * sched_yield
12
+ *
13
+ * Filesystem WASI additions:
14
+ * path_open
15
+ * path_create_directory / path_remove_directory
16
+ * path_unlink_file
17
+ * path_rename
18
+ * path_filestat_get / path_filestat_set_times
19
+ * fd_readdir (cookie-paginated)
20
+ * fd_filestat_get / fd_filestat_set_size
21
+ * fd_pread / fd_pwrite
22
+ * fd_prestat_get / fd_prestat_dir_name (real preopens, not EBADF)
23
+ *
24
+ * Socket, polling, and metadata additions:
25
+ * - per-file mtime/atime/ctime tracking + in-memory symlink table
26
+ * (additive — files Map shape unchanged; parallel times/symlinks Maps)
27
+ * - fd_filestat_set_times / path_filestat_set_times — implementations that
28
+ * write mtime/atime; honor ATIM_NOW / MTIM_NOW flags via clock_realtime
29
+ * - path_symlink / path_readlink / path_link. Symlink
30
+ * resolution via __wasiResolvePathFull(baseFd, path, followFlag)
31
+ * with POSIX-style 40-deep loop detection (returns ELOOP).
32
+ * - fd_allocate extends bytes to offset+len and zero-fills.
33
+ * - proc_raise(sig) throws __WasiExit(128 + sig) per POSIX shell convention
34
+ * (SIGABRT=6 -> 134, SIGTERM=15 -> 143).
35
+ * - fd_fdstat_set_rights tracks per-fd rights mask;
36
+ * fd_fdstat_get returns the tracked mask instead of wide-open).
37
+ *
38
+ * Socket support via cloudflare:sockets + JSPI:
39
+ * - sock_send / sock_recv / sock_shutdown via
40
+ * WebAssembly.Suspending wrapping. path_open('/dev/tcp/<host>/<port>')
41
+ * synthetic-path triggers cloudflare:sockets connect().
42
+ *
43
+ * Poll support via JSPI:
44
+ * - poll_oneoff handles all three subscription types in a
45
+ * single Promise.race wrapped via WebAssembly.Suspending:
46
+ * CLOCK (REALTIME + MONOTONIC, relative + absolute deadlines via
47
+ * SUBSCRIPTION_CLOCK_ABSTIME flag) -> setTimeout to deadline.
48
+ * FD_READ/FD_WRITE on file/dir/stdio/symlink -> always-ready
49
+ * (POSIX: regular files never block).
50
+ * FD_READ on socket -> real await on
51
+ * socket.readable.getReader().read(); data is stashed on
52
+ * entry.readBuf so subsequent sock_recv sees it pre-loaded.
53
+ * FD_WRITE on socket -> always-ready (CF Workers writable
54
+ * streams have unbounded queue from wasm-side perspective).
55
+ * Concurrent-ready drain: after first-promise resolution, probes
56
+ * each remaining promise against a microtask sentinel; collects
57
+ * all currently-resolved events into the output.
58
+ *
59
+ * wasi-threads:
60
+ * Implemented, in runtime/wasi-threads.ts, whose preamble is appended to
61
+ * this one — threads syscall through THESE imports, so they share one
62
+ * evaluated scope. This file's only stake in it is two lines: a park
63
+ * releases the scheduler token (withParkDeadline) and sched_yield is a
64
+ * real scheduling point. Correct but never parallel; see
65
+ * docs/wasi-threads.md.
66
+ *
67
+ * Architecture (filesystem WASI strategy)
68
+ * ──────────────────────────────
69
+ *
70
+ * Strategy: live VFS, seeded cache. The session VFS (supervisor DO) is the
71
+ * single source of truth. The facet holds a CACHE of it:
72
+ *
73
+ * - `__wasiInitFS(seed)` installs a metadata manifest (dirs, modes, sizes,
74
+ * times, symlinks) plus optional file content. Content the seed did not
75
+ * carry is listed in `sizes` and demand-loaded through the SUPERVISOR
76
+ * binding (`fsReadRange`, 64 KiB chunks) on first read — a seed miss is
77
+ * a cache miss, never a correctness failure.
78
+ * - Writes apply to the cache synchronously and enqueue write-through ops
79
+ * (writeFile / fsWriteRange / unlink / mkdir / rename / …) on a FIFO
80
+ * persist queue that drains continuously. Callers await
81
+ * `__wasiDrainPersist()` before returning a result and at every resident
82
+ * park, so a server's writes are durable while it runs — there is no
83
+ * flush-on-exit and no diff-back.
84
+ * - Any live read (content fetch, stat miss, readdir refresh) first drains
85
+ * the queue, so the supervisor's answer always includes this process's
86
+ * own writes.
87
+ * - A metadata miss with a supervisor present goes to a live `stat` before
88
+ * reporting ENOENT, so files created after spawn are visible.
89
+ *
90
+ * Seeds are validated supervisor-side by the per-subtree VFS revision
91
+ * (runners rebuild the seed when the revision moved), so a served seed is
92
+ * never stale. Without a supervisor binding the seed is authoritative and
93
+ * behavior degrades to the closed-world snapshot semantics unit tests use.
94
+ *
95
+ * Blocking discipline: file/stdio ops that can be answered from the cache
96
+ * return a plain errno number (JSPI passes it through with no suspender, so
97
+ * sync callers — ruby _initialize, opentui render — are unaffected). Ops
98
+ * that need the supervisor return a Promise which the Suspending wrapper
99
+ * parks the guest on; the guest must run under WebAssembly.promising.
100
+ *
101
+ * Errno values (subset)
102
+ * ─────────────────────
103
+ * ESUCCESS = 0 EBADF = 8 ENOENT = 44 EEXIST = 20
104
+ * EISDIR = 31 ENOTDIR = 54 EINVAL = 28 ENOSYS = 52
105
+ * ELOOP = 32 ENOTEMPTY = 55 ENOTCAPABLE = 76
106
+ * ESPIPE = 70 (stdio is a non-seekable pipe)
107
+ *
108
+ * Clock IDs
109
+ * ─────────
110
+ * CLOCK_REALTIME = 0 / MONOTONIC = 1 / PROCESS_CPUTIME = 2 / THREAD = 3
111
+ *
112
+ * fstflags (filestat_set_times)
113
+ * ─────────────────────────────
114
+ * __WASI_FSTFLAGS_ATIM = 1
115
+ * __WASI_FSTFLAGS_ATIM_NOW = 2
116
+ * __WASI_FSTFLAGS_MTIM = 4
117
+ * __WASI_FSTFLAGS_MTIM_NOW = 8
118
+ */
119
+ /**
120
+ * Source string injected as the loader-pool `preamble`. The facet's
121
+ * module init evaluates this verbatim so the WASI helpers (`__wasiInitFS`,
122
+ * `__wasiMakeImports`, `__wasiRunStart`, `__wasiReadFilesB64`) are in scope
123
+ * when the user fn runs. Self-contained — no closure captures, no imports.
124
+ *
125
+ * The wasi-threads scheduler is appended rather than inlined: it is one
126
+ * evaluated scope with the syscall layer (it has to be — threads syscall
127
+ * through these very imports), but it is a separate concern and lives in its
128
+ * own file.
129
+ */
130
+ export declare const WASI_INSTANCE_PREAMBLE_SRC: string;
131
+ /**
132
+ * A bundle of file/dir state passed from supervisor → facet for a WASI
133
+ * invocation. Files are base64-encoded for structured-clone transport.
134
+ *
135
+ * WASI socket and polling support B1+B3: added optional `times` and `symlinks` fields.
136
+ * `roots` is additive and lets language runtimes snapshot a cwd plus targeted
137
+ * persistent runtime state without widening every command to the whole home
138
+ * directory. Backward-compatible — callers that omit it use `root` only.
139
+ */
140
+ /**
141
+ * The two WASI wire ABIs still in circulation. They share every function name
142
+ * and every signature, differing only in fd_seek's whence constants and the
143
+ * filestat struct layout — so binding the wrong one is silent, not a trap.
144
+ * `preview1` is `wasi_snapshot_preview1`; `preview0` is `wasi_unstable`.
145
+ */
146
+ export type WasiAbi = 'preview1' | 'preview0';
147
+ export declare const WASI_ABI_NAMESPACE: Readonly<Record<WasiAbi, string>>;
148
+ export interface WasiFsSnapshot {
149
+ /** Canonical VFS root (no leading slash). E.g. `home/user/wasi-files`. */
150
+ root: string;
151
+ /** Canonical VFS roots covered by this snapshot. Defaults to `[root]`. */
152
+ roots?: string[];
153
+ /** Preopen list (order matters; preopens are assigned to fd 3, 4, …). */
154
+ preopens: Array<{
155
+ wasiPath: string;
156
+ vfsPath: string;
157
+ }>;
158
+ /** vfsPath → base64-encoded content. Empty if a fresh file. */
159
+ files: Record<string, string>;
160
+ /** Initial directory list (vfsPaths). */
161
+ dirs: string[];
162
+ /**
163
+ * vfsPath → size for files the manifest knows but whose bytes were not
164
+ * seeded. First read demand-loads them through the supervisor. A seed that
165
+ * lists a file here instead of in `files` trades one round trip on first
166
+ * access for not shipping bytes the process may never open.
167
+ */
168
+ sizes?: Record<string, number>;
169
+ /**
170
+ * Files at or above this many bytes are never held resident; reads window
171
+ * through the supervisor instead. Defaults to 8 MiB.
172
+ */
173
+ residentFileCap?: number;
174
+ /**
175
+ * Roots this seed listed COMPLETELY. Only a producer that walked the subtree
176
+ * with no exclusions may claim one: inside a claimed root an unlisted path
177
+ * is treated as genuinely absent and answered without a round trip.
178
+ */
179
+ enumeratedRoots?: string[];
180
+ /** Supervisor VFS revision the seed was built against (see fsRevision). */
181
+ revision?: number;
182
+ /** Effective read/write/execute bits for the invoking process, keyed by vfsPath. */
183
+ modes: Record<string, number>;
184
+ /**
185
+ * WASI socket and polling support B1: per-path nanosecond timestamps. Values are decimal strings
186
+ * (JSON.stringify-safe; BigInt would throw). Optional — omitted paths
187
+ * default to wall-clock-now at init time.
188
+ */
189
+ times?: Record<string, {
190
+ mtime: string;
191
+ atime: string;
192
+ ctime: string;
193
+ }>;
194
+ /**
195
+ * WASI socket and polling support B3: initial symlink table. `vfsPath → targetPath`. Target is
196
+ * stored verbatim per POSIX (resolution at lookup time).
197
+ */
198
+ symlinks?: Record<string, string>;
199
+ }
200
+ /**
201
+ * Names of the WASI imports implemented by this shim.
202
+ *
203
+ * `wasm-runner --help` prints this to users, so under-reporting sends a caller
204
+ * away from a syscall that is right there.
205
+ *
206
+ * The list stays hand-ordered because it is read by people — grouped the way the
207
+ * spec groups them — but it is no longer hand-MAINTAINED. `satisfies` rejects a
208
+ * name the import table does not implement, and `_AllSyscallsListed` below
209
+ * rejects a syscall the table implements that nobody added here. Both directions
210
+ * are compile errors, so the list cannot drift from the table in either one.
211
+ * `tests/unit/wasi-implemented-fns.mjs` remains the runtime half of the check:
212
+ * types cannot see inside the emitted source string.
213
+ */
214
+ export declare const WASI_IMPLEMENTED_FNS: readonly ["args_get", "args_sizes_get", "environ_get", "environ_sizes_get", "fd_close", "fd_read", "fd_write", "fd_seek", "fd_tell", "fd_fdstat_get", "fd_fdstat_set_flags", "proc_exit", "proc_raise", "clock_time_get", "clock_res_get", "random_get", "sched_yield", "fd_prestat_get", "fd_prestat_dir_name", "path_open", "path_create_directory", "path_remove_directory", "path_unlink_file", "path_rename", "path_filestat_get", "path_filestat_set_times", "fd_filestat_get", "fd_filestat_set_size", "fd_filestat_set_times", "fd_pread", "fd_pwrite", "fd_readdir", "fd_renumber", "fd_advise", "fd_datasync", "fd_sync", "path_symlink", "path_readlink", "path_link", "fd_allocate", "fd_fdstat_set_rights", "sock_send", "sock_recv", "sock_shutdown", "sock_accept", "poll_oneoff"];
215
+ //# sourceMappingURL=wasi-instance.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wasi-instance.d.ts","sourceRoot":"","sources":["../../src/runtime/wasi-instance.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqHG;AAMH;;;;;;;;;;GAUG;AACH,eAAO,MAAM,0BAA0B,QAAqD,CAAC;AAE7F;;;;;;;;GAQG;AACH;;;;;GAKG;AACH,MAAM,MAAM,OAAO,GAAG,UAAU,GAAG,UAAU,CAAC;AAE9C,eAAO,MAAM,kBAAkB,EAAE,QAAQ,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,CAG/D,CAAC;AAEH,MAAM,WAAW,cAAc;IAC7B,0EAA0E;IAC1E,IAAI,EAAE,MAAM,CAAC;IACb,0EAA0E;IAC1E,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,yEAAyE;IACzE,QAAQ,EAAE,KAAK,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACvD,+DAA+D;IAC/D,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9B,yCAAyC;IACzC,IAAI,EAAE,MAAM,EAAE,CAAC;IACf;;;;;OAKG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B;;;OAGG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB;;;;OAIG;IACH,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,2EAA2E;IAC3E,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,oFAAoF;IACpF,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9B;;;;OAIG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACxE;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACnC;AAGD;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,oBAAoB,mwBA4BmB,CAAC"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * wasi-instance.generated.ts — AUTO-GENERATED. DO NOT EDIT.
3
+ *
4
+ * Produced by scripts/bundle-facet-workers.mjs from:
5
+ * - src/runtime/wasi/preamble.ts
6
+ *
7
+ * The WASI snapshot_preview1 shim as a flat ESM body, for splicing into a
8
+ * facet module source. wasi-instance.ts appends the wasi-threads scheduler
9
+ * and re-exports the result as WASI_INSTANCE_PREAMBLE_SRC.
10
+ *
11
+ * Size: 82.93 KiB
12
+ */
13
+ export declare const WASI_INSTANCE_BODY_SRC: string;
14
+ //# sourceMappingURL=wasi-instance.generated.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wasi-instance.generated.d.ts","sourceRoot":"","sources":["../../src/runtime/wasi-instance.generated.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,eAAO,MAAM,sBAAsB,EAAE,MAAo/qF,CAAC"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * wasi-instance.generated.ts — AUTO-GENERATED. DO NOT EDIT.
3
+ *
4
+ * Produced by scripts/bundle-facet-workers.mjs from:
5
+ * - src/runtime/wasi/preamble.ts
6
+ *
7
+ * The WASI snapshot_preview1 shim as a flat ESM body, for splicing into a
8
+ * facet module source. wasi-instance.ts appends the wasi-threads scheduler
9
+ * and re-exports the result as WASI_INSTANCE_PREAMBLE_SRC.
10
+ *
11
+ * Size: 82.93 KiB
12
+ */
13
+ export const WASI_INSTANCE_BODY_SRC = "// src/runtime/wasi/preamble.ts\nvar __WASI_ESUCCESS = 0;\nvar __WASI_EAGAIN = 6;\nvar __WASI_EACCES = 2;\nvar __WASI_EBADF = 8;\nvar __WASI_ECONNREFUSED = 14;\nvar __WASI_EEXIST = 20;\nvar __WASI_EHOSTUNREACH = 23;\nvar __WASI_EINVAL = 28;\nvar __WASI_EIO = 29;\nvar __WASI_EISDIR = 31;\nvar __WASI_ELOOP = 32;\nvar __WASI_ENOENT = 44;\nvar __WASI_ENOSYS = 52;\nvar __WASI_ENOTCONN = 53;\nvar __WASI_ENOTDIR = 54;\nvar __WASI_ENOTEMPTY = 55;\nvar __WASI_ENOTSOCK = 57;\nvar __WASI_EPIPE = 64;\nvar __WASI_ESPIPE = 70;\nvar __WASI_ETIMEDOUT = 73;\nvar __WASI_ENOTCAPABLE = 76;\nvar __WASI_CLOCK_REALTIME = 0;\nvar __WASI_CLOCK_MONOTONIC = 1;\nvar __WASI_CLOCK_PROCESS_CPUTIME_ID = 2;\nvar __WASI_CLOCK_THREAD_CPUTIME_ID = 3;\nvar __WASI_O_CREAT = 1;\nvar __WASI_O_DIRECTORY = 2;\nvar __WASI_O_EXCL = 4;\nvar __WASI_O_TRUNC = 8;\nvar __WASI_LOOKUPFLAGS_SYMLINK_FOLLOW = 1;\nvar __WASI_FDFLAGS_APPEND = 1;\nvar __WASI_FDFLAGS_NONBLOCK = 4;\nvar __WASI_FSTFLAGS_ATIM = 1;\nvar __WASI_FSTFLAGS_ATIM_NOW = 2;\nvar __WASI_FSTFLAGS_MTIM = 4;\nvar __WASI_FSTFLAGS_MTIM_NOW = 8;\nvar __WASI_FT_UNKNOWN = 0;\nvar __WASI_FT_BLOCK_DEVICE = 1;\nvar __WASI_FT_CHARACTER_DEVICE = 2;\nvar __WASI_FT_DIRECTORY = 3;\nvar __WASI_FT_REGULAR_FILE = 4;\nvar __WASI_FT_SOCKET_DGRAM = 5;\nvar __WASI_FT_SOCKET_STREAM = 6;\nvar __WASI_FT_SYMBOLIC_LINK = 7;\nvar __WASI_PREOPENTYPE_DIR = 0;\nvar __WASI_SYMLOOP_MAX = 40;\nvar __WASI_RIGHTS_ALL = 0xFFFFFFFFFFFFFFFFn;\nvar __WASI_RIGHT_FD_READ = 1n << 1n;\nvar __WASI_RIGHT_FD_WRITE = 1n << 6n;\nvar __WASI_SDFLAGS_RD = 1;\nvar __WASI_SDFLAGS_WR = 2;\nvar __WASI_EVENTTYPE_CLOCK = 0;\nvar __WASI_EVENTTYPE_FD_READ = 1;\nvar __WASI_EVENTTYPE_FD_WRITE = 2;\nvar __WASI_SUBCLOCKFLAGS_ABSTIME = 1;\nvar __WASI_TCP_PATH_PREFIX = \"/dev/tcp/\";\nvar __WASI_ACCEPTED_PATH_PREFIX = \"/dev/nimbus/socket/\";\nvar __WASI_LISTEN_PATH_PREFIX = \"/dev/nimbus/listen/\";\nvar __cfSocketConnect = null;\ntry {\n const __mod = await import(\"cloudflare:sockets\");\n __cfSocketConnect = __mod.connect;\n} catch (__e) {\n}\nvar __WasiExit = class {\n constructor(code) {\n this.code = code | 0;\n }\n};\nfunction __wasiEmptyFS() {\n return {\n root: \"\",\n files: /* @__PURE__ */ new Map(),\n dirs: /* @__PURE__ */ new Set(),\n times: /* @__PURE__ */ new Map(),\n symlinks: /* @__PURE__ */ new Map(),\n modes: /* @__PURE__ */ new Map(),\n sizes: /* @__PURE__ */ new Map(),\n origFiles: /* @__PURE__ */ new Map(),\n residentFileCap: 8 * 1024 * 1024,\n enumeratedRoots: [],\n revision: null\n };\n}\nvar __wasiFS = __wasiEmptyFS();\nvar __wasiPreopens = [];\nvar __wasiThreads = null;\nvar __wasiSup = null;\nvar __wasiPersistQ = { pending: [], tail: Promise.resolve(), failures: [] };\nfunction __wasiAdoptSupervisor(sup) {\n if (sup) __wasiSup = sup;\n}\nfunction __wasiExpectsLiveBacking() {\n return __wasiFS.revision !== null && __wasiFS.revision !== void 0;\n}\nfunction __wasiEnqueue(op, run) {\n if (!__wasiSup) {\n if (__wasiExpectsLiveBacking()) {\n __wasiPersistQ.failures.push(op + \": no supervisor adopted for a live-backed filesystem\");\n }\n return;\n }\n const sup = __wasiSup;\n const entry = { op };\n __wasiPersistQ.pending.push(entry);\n __wasiPersistQ.tail = __wasiPersistQ.tail.then(async () => {\n try {\n await run(sup);\n } catch (e) {\n __wasiPersistQ.failures.push(op + \": \" + (e && e.message || String(e)));\n } finally {\n const i = __wasiPersistQ.pending.indexOf(entry);\n if (i >= 0) __wasiPersistQ.pending.splice(i, 1);\n }\n });\n}\nvar __wasiDirty = /* @__PURE__ */ new Set();\nvar __wasiNegative = /* @__PURE__ */ new Set();\nfunction __wasiPersistFile(vfsPath) {\n if (__wasiDirty.has(vfsPath)) return;\n __wasiDirty.add(vfsPath);\n const fs = __wasiFS;\n __wasiEnqueue(\"writeFile \" + vfsPath, async (sup) => {\n __wasiDirty.delete(vfsPath);\n const bytes = fs && fs.files.get(vfsPath);\n if (!bytes) return;\n await sup.writeFile(vfsPath, bytes);\n });\n}\nfunction __wasiPersistTimes(vfsPath) {\n const t = __wasiFS.times.get(vfsPath);\n if (!t) return;\n const atimeMs = Number(t.atime / 1000000n);\n const mtimeMs = Number(t.mtime / 1000000n);\n __wasiEnqueue(\"utimes \" + vfsPath, (sup) => sup.utimes(vfsPath, atimeMs, mtimeMs));\n}\nfunction __wasiPersistSymlink(target, vfsPath) {\n __wasiEnqueue(\"symlink \" + vfsPath, (sup) => sup.symlink(target, vfsPath));\n}\nfunction __wasiEvictCleanContent() {\n if (!__wasiFS || !__wasiSup) return [];\n const evicted = [];\n for (const [path, bytes] of [...__wasiFS.files]) {\n if (__wasiDirty.has(path)) continue;\n const orig = __wasiFS.origFiles.get(path);\n if (!orig || orig.length !== bytes.length) continue;\n let same = true;\n for (let i = 0; i < orig.length; i++) {\n if (orig[i] !== bytes[i]) {\n same = false;\n break;\n }\n }\n if (!same) continue;\n __wasiFS.files.delete(path);\n __wasiFS.sizes.set(path, bytes.length);\n evicted.push(path);\n }\n return evicted;\n}\nasync function __wasiRevalidateFS() {\n if (!__wasiSup || !__wasiFS) return [];\n await __wasiDrainPersist();\n if (typeof __wasiSup.fsRevision === \"function\") {\n let revision;\n try {\n revision = await __wasiSup.fsRevision(__wasiFS.root);\n } catch {\n revision = null;\n }\n if (revision !== null && revision === __wasiFS.revision) return [];\n __wasiFS.revision = revision;\n }\n __wasiNegative.clear();\n return __wasiEvictCleanContent();\n}\nasync function __wasiDrainPersist() {\n await __wasiPersistQ.tail;\n if (__wasiPersistQ.failures.length > 0) {\n const failures = __wasiPersistQ.failures.slice();\n __wasiPersistQ.failures.length = 0;\n throw new Error(\"wasi persist failed: \" + failures.join(\"; \"));\n }\n}\nfunction __wasiCanonicalize(p) {\n if (!p) return \"\";\n const parts = p.split(\"/\");\n const out = [];\n for (const seg of parts) {\n if (seg === \"\" || seg === \".\") continue;\n if (seg === \"..\") {\n if (out.length > 0) out.pop();\n continue;\n }\n out.push(seg);\n }\n return out.join(\"/\");\n}\nvar __WASI_DEV = 1n;\nvar __WASI_INO_MASK = 0xFFFFFFFFFFFFFFFFn;\nfunction __wasiInode(path) {\n let h = 14695981039346656037n;\n const p = String(path === void 0 || path === null ? \"\" : path);\n for (let i = 0; i < p.length; i++) {\n h = (h ^ BigInt(p.charCodeAt(i) & 255)) * 1099511628211n & __WASI_INO_MASK;\n }\n return h === 0n ? 1n : h;\n}\nfunction __wasiNowNs() {\n return BigInt(Date.now()) * 1000000n;\n}\nfunction __wasiInitFS(opts) {\n __wasiSup = null;\n __wasiDirty.clear();\n __wasiNegative.clear();\n __wasiPersistQ.pending.length = 0;\n __wasiPersistQ.failures.length = 0;\n __wasiPersistQ.tail = Promise.resolve();\n const files = /* @__PURE__ */ new Map();\n const dirs = /* @__PURE__ */ new Set();\n const times = /* @__PURE__ */ new Map();\n const symlinks = /* @__PURE__ */ new Map();\n const modes = /* @__PURE__ */ new Map();\n const origFiles = /* @__PURE__ */ new Map();\n const nowNs = __wasiNowNs();\n for (const [path, b64] of Object.entries(opts.files || {})) {\n const canon = __wasiCanonicalize(path);\n const bin = atob(b64);\n const u8 = new Uint8Array(bin.length);\n for (let i = 0; i < bin.length; i++) u8[i] = bin.charCodeAt(i);\n files.set(canon, u8);\n origFiles.set(canon, u8.slice());\n times.set(canon, { mtime: nowNs, atime: nowNs, ctime: nowNs });\n }\n for (const path of opts.dirs || []) {\n const canon = __wasiCanonicalize(path);\n dirs.add(canon);\n if (!times.has(canon)) times.set(canon, { mtime: nowNs, atime: nowNs, ctime: nowNs });\n }\n for (const [path, mode] of Object.entries(opts.modes)) {\n modes.set(__wasiCanonicalize(path), Number(mode) & 7);\n }\n for (const [path, t] of Object.entries(opts.times || {})) {\n const canon = __wasiCanonicalize(path);\n const cur = times.get(canon);\n if (!cur) continue;\n const mtime = t && t.mtime !== void 0 ? BigInt(t.mtime) : cur.mtime;\n const atime = t && t.atime !== void 0 ? BigInt(t.atime) : cur.atime;\n const ctime = t && t.ctime !== void 0 ? BigInt(t.ctime) : cur.ctime;\n times.set(canon, { mtime, atime, ctime });\n }\n for (const [path, target] of Object.entries(opts.symlinks || {})) {\n const canon = __wasiCanonicalize(path);\n symlinks.set(canon, String(target));\n }\n const sizes = /* @__PURE__ */ new Map();\n for (const [path, size] of Object.entries(opts.sizes || {})) {\n const canon = __wasiCanonicalize(path);\n sizes.set(canon, Number(size));\n if (!times.has(canon)) times.set(canon, { mtime: nowNs, atime: nowNs, ctime: nowNs });\n }\n __wasiFS = {\n root: __wasiCanonicalize(opts.root || \"\"),\n files,\n dirs,\n times,\n symlinks,\n modes,\n sizes,\n origFiles,\n // Files at or above this size are never held whole; reads window through\n // the supervisor instead. Keeps a 200 MiB blob from ending the isolate.\n residentFileCap: Number(opts.residentFileCap ?? 8 * 1024 * 1024),\n // Roots the seed claims to have listed COMPLETELY. Only a producer that\n // walked a subtree without exclusions may claim one. Inside such a root a\n // path the manifest lacks is genuinely absent, so the miss is answered\n // here instead of costing a round trip — which is most of the traffic a\n // language runtime generates ($LOAD_PATH / sys.path probing walks\n // candidate names that mostly do not exist).\n enumeratedRoots: (opts.enumeratedRoots || []).map(__wasiCanonicalize),\n // Supervisor revision the seed was built against; a park re-checks it and\n // only then drops cached content. Without this the cache could serve\n // content another process has since changed.\n revision: opts.revision ?? null\n };\n __wasiPreopens = [];\n fdTable.clear();\n fdTable.set(0, { kind: \"stdin\" });\n fdTable.set(1, { kind: \"stdout\" });\n fdTable.set(2, { kind: \"stderr\" });\n nextFd = 3;\n for (const po of opts.preopens || []) {\n const fd = nextFd++;\n const vfsPath = __wasiCanonicalize(po.vfsPath);\n fdTable.set(fd, { kind: \"preopen\", wasiPath: po.wasiPath, vfsPath });\n __wasiPreopens.push({ fd, wasiPath: po.wasiPath, vfsPath });\n if (!dirs.has(vfsPath)) dirs.add(vfsPath);\n if (!times.has(vfsPath)) times.set(vfsPath, { mtime: nowNs, atime: nowNs, ctime: nowNs });\n }\n}\nfunction __wasiGuestPath(baseFd, pathArg) {\n if (pathArg.startsWith(\"/\")) return pathArg;\n const base = fdTable.get(baseFd);\n if (!base || base.kind !== \"preopen\") return pathArg;\n return base.wasiPath.endsWith(\"/\") ? base.wasiPath + pathArg : base.wasiPath + \"/\" + pathArg;\n}\nfunction __wasiIsLoopbackHost(host) {\n const h = host.toLowerCase().replace(/^\\[|\\]$/g, \"\");\n return h === \"localhost\" || h === \"::1\" || h === \"::\" || h === \"0.0.0.0\" || /^127\\.\\d+\\.\\d+\\.\\d+$/.test(h);\n}\nglobalThis.__nimbusWasiLastSocketError = \"\";\nfunction __wasiConnectLoopback(port) {\n const kernel = globalThis.__nimbusVirtualSockets;\n if (!kernel || typeof kernel.connectStream !== \"function\") {\n globalThis.__nimbusWasiLastSocketError = \"this process has no Nimbus virtual socket kernel, so in-session ports cannot be dialed\";\n return { errno: __WASI_ENOSYS, socket: null };\n }\n try {\n return { errno: __WASI_ESUCCESS, socket: kernel.connectStream(port) };\n } catch (e) {\n globalThis.__nimbusWasiLastSocketError = e && e.message ? e.message : String(e);\n return { errno: __WASI_ECONNREFUSED, socket: null };\n }\n}\nfunction __wasiConnectRemote(host, port) {\n if (typeof __cfSocketConnect !== \"function\") {\n globalThis.__nimbusWasiLastSocketError = \"outbound TCP is unavailable in this runtime\";\n return { errno: __WASI_ENOSYS, socket: null };\n }\n try {\n return { errno: __WASI_ESUCCESS, socket: __cfSocketConnect({ hostname: host, port }, { allowHalfOpen: true }) };\n } catch (e) {\n globalThis.__nimbusWasiLastSocketError = e && e.message ? e.message : String(e);\n return { errno: __WASI_ECONNREFUSED, socket: null };\n }\n}\nfunction __wasiOpenTcpSocket(pathArg, fdflags, fdOutPtr, writeU32LE) {\n const tail = pathArg.substring(__WASI_TCP_PATH_PREFIX.length);\n const slashIdx = tail.lastIndexOf(\"/\");\n if (slashIdx <= 0 || slashIdx === tail.length - 1) return __WASI_EINVAL;\n const host = tail.substring(0, slashIdx);\n const portStr = tail.substring(slashIdx + 1);\n const port = parseInt(portStr, 10);\n if (!host || !(port > 0 && port < 65536)) return __WASI_EINVAL;\n const opened = __wasiIsLoopbackHost(host) ? __wasiConnectLoopback(port) : __wasiConnectRemote(host, port);\n if (opened.errno !== __WASI_ESUCCESS) return opened.errno;\n writeU32LE(fdOutPtr, __wasiAdoptSocket(opened.socket, fdflags));\n return __WASI_ESUCCESS;\n}\nfunction __wasiKernelOrNull(what) {\n const kernel = globalThis.__nimbusVirtualSockets;\n if (kernel) return kernel;\n globalThis.__nimbusWasiLastSocketError = \"this process has no Nimbus virtual socket kernel, so \" + what;\n return null;\n}\nfunction __wasiOpenListener(pathArg, fdflags, fdOutPtr, writeU32LE) {\n const port = parseInt(pathArg.substring(__WASI_LISTEN_PATH_PREFIX.length), 10);\n if (!Number.isInteger(port) || port <= 0 || port >= 65536) return __WASI_EINVAL;\n const kernel = __wasiKernelOrNull(\"ports cannot be listened on\");\n if (!kernel) return __WASI_ENOSYS;\n if (!kernel.listeners.has(port)) {\n try {\n kernel.listen(port);\n } catch (e) {\n globalThis.__nimbusWasiLastSocketError = \"port \" + port + \" could not be bound: \" + (e && e.message ? e.message : String(e));\n return __WASI_ENOTCONN;\n }\n const announce = Reflect.get(globalThis, \"__nimbusVirtualSocketDidListen\");\n if (typeof announce === \"function\") announce(port);\n }\n const fd = nextFd++;\n fdTable.set(fd, { kind: \"listener\", port, fdflags: fdflags | 0 });\n writeU32LE(fdOutPtr, fd);\n return __WASI_ESUCCESS;\n}\nasync function __wasiAcceptRead(entry, iovsPtr, iovsLen, nreadPtr, writeU32LE, view, u8) {\n const kernel = __wasiKernelOrNull(\"connections cannot be accepted\");\n if (!kernel) return __WASI_ENOSYS;\n try {\n let accepted;\n if ((entry.fdflags & __WASI_FDFLAGS_NONBLOCK) !== 0) {\n accepted = kernel.acceptNow(entry.port);\n if (!accepted) {\n writeU32LE(nreadPtr, 0);\n return __WASI_EAGAIN;\n }\n } else {\n accepted = await kernel.accept(entry.port);\n }\n const bytes = new TextEncoder().encode(String(accepted.id) + \"\\n\");\n const dv = view();\n const memU8 = u8();\n let total = 0;\n for (let i = 0; i < iovsLen && total < bytes.length; i++) {\n const iov = iovsPtr + i * 8;\n const bufPtr = dv.getUint32(iov, true);\n const bufLen = dv.getUint32(iov + 4, true);\n const n = Math.min(bufLen, bytes.length - total);\n memU8.set(bytes.subarray(total, total + n), bufPtr);\n total += n;\n }\n writeU32LE(nreadPtr, total);\n return __WASI_ESUCCESS;\n } catch (e) {\n globalThis.__nimbusWasiLastSocketError = e && e.message ? e.message : String(e);\n return __WASI_ENOTCONN;\n }\n}\nfunction __wasiOpenAcceptedSocket(pathArg, fdflags, fdOutPtr, writeU32LE) {\n const id = parseInt(pathArg.substring(__WASI_ACCEPTED_PATH_PREFIX.length), 10);\n if (!Number.isInteger(id) || id <= 0) return __WASI_EINVAL;\n const kernel = globalThis.__nimbusVirtualSockets;\n if (!kernel || typeof kernel.streamFor !== \"function\") {\n globalThis.__nimbusWasiLastSocketError = \"this process has no Nimbus virtual socket kernel, so accepted connections cannot be bound\";\n return __WASI_ENOSYS;\n }\n let socket;\n try {\n socket = kernel.streamFor(id);\n } catch (e) {\n globalThis.__nimbusWasiLastSocketError = e && e.message ? e.message : String(e);\n return __WASI_ENOTCONN;\n }\n writeU32LE(fdOutPtr, __wasiAdoptSocket(socket, fdflags));\n return __WASI_ESUCCESS;\n}\nfunction __wasiAdoptSocket(socket, fdflags) {\n const fd = nextFd++;\n fdTable.set(fd, {\n kind: \"socket\",\n socket,\n reader: null,\n // lazy: getReader() on first sock_recv\n writer: null,\n // lazy: getWriter() on first sock_send\n readBuf: new Uint8Array(0),\n readBufOffset: 0,\n eof: false,\n closed: false,\n halfClosedWr: false,\n fdflags: fdflags | 0\n });\n return fd;\n}\nfunction __wasiTouchTimes(canonPath, mtimeNs, atimeNs, ctimeNs) {\n const cur = __wasiFS.times.get(canonPath);\n if (cur) {\n if (mtimeNs !== null) cur.mtime = mtimeNs;\n if (atimeNs !== null) cur.atime = atimeNs;\n if (ctimeNs !== null) cur.ctime = ctimeNs;\n } else {\n const now = __wasiNowNs();\n __wasiFS.times.set(canonPath, {\n mtime: mtimeNs !== null ? mtimeNs : now,\n atime: atimeNs !== null ? atimeNs : now,\n ctime: ctimeNs !== null ? ctimeNs : now\n });\n }\n}\nfunction __wasiBumpMtime(canonPath) {\n const now = __wasiNowNs();\n __wasiTouchTimes(canonPath, now, null, now);\n}\nfunction __wasiReadFilesB64(paths) {\n const out = {};\n for (const path of paths) {\n const canon = __wasiCanonicalize(path);\n const bytes = __wasiFS.files.get(canon);\n if (!bytes) continue;\n const CHUNK = 32768;\n let s = \"\";\n for (let i = 0; i < bytes.length; i += CHUNK) {\n s += String.fromCharCode.apply(null, bytes.subarray(i, Math.min(i + CHUNK, bytes.length)));\n }\n out[path] = btoa(s);\n }\n return out;\n}\nvar fdTable = /* @__PURE__ */ new Map();\nvar nextFd = 3;\nfunction __wasiResolvePath(baseFd, pathStr) {\n const entry = fdTable.get(baseFd);\n if (!entry) return null;\n let baseVfs;\n if (entry.kind === \"preopen\" || entry.kind === \"dir\") baseVfs = entry.vfsPath;\n else return null;\n let trimmed = pathStr.replace(/^\\.?\\/+/, \"\").replace(/^\\/+/, \"\");\n if (entry.kind === \"preopen\" && baseVfs.length > 0) {\n if (trimmed === baseVfs) {\n trimmed = \"\";\n } else if (trimmed.length > baseVfs.length && trimmed.charCodeAt(baseVfs.length) === 47 && trimmed.substring(0, baseVfs.length) === baseVfs) {\n trimmed = trimmed.substring(baseVfs.length + 1);\n }\n }\n return __wasiCanonicalize(baseVfs + \"/\" + trimmed);\n}\nfunction __wasiResolvePathFull(baseFd, pathStr, followFlag) {\n let p = __wasiResolvePath(baseFd, pathStr);\n if (p === null) return { path: \"\", isSymlink: false, err: __WASI_EBADF };\n if (!followFlag) {\n return { path: p, isSymlink: __wasiFS.symlinks.has(p), err: __WASI_ESUCCESS };\n }\n let depth = 0;\n while (__wasiFS.symlinks.has(p)) {\n if (depth++ >= __WASI_SYMLOOP_MAX) {\n return { path: p, isSymlink: true, err: __WASI_ELOOP };\n }\n const target = __wasiFS.symlinks.get(p);\n let next;\n if (target.startsWith(\"/\")) {\n const e = fdTable.get(baseFd);\n const baseVfs = e && (e.kind === \"preopen\" || e.kind === \"dir\") ? e.vfsPath : \"\";\n next = __wasiCanonicalize(baseVfs + \"/\" + target);\n } else {\n const lastSlash = p.lastIndexOf(\"/\");\n const parent = lastSlash >= 0 ? p.substring(0, lastSlash) : \"\";\n next = __wasiCanonicalize(parent + \"/\" + target);\n }\n p = next;\n }\n return { path: p, isSymlink: false, err: __WASI_ESUCCESS };\n}\nfunction __wasiEffectiveMode(path) {\n const mode = __wasiFS.modes.get(path);\n if (mode !== void 0) return mode;\n return __wasiInodeExists(path) ? 0 : 7;\n}\nfunction __wasiInodeExists(path) {\n return __wasiFS.files.has(path) || __wasiFS.dirs.has(path) || __wasiFS.symlinks.has(path) || __wasiFS.modes.has(path);\n}\nfunction __wasiCheckTraversal(baseFd, resolved) {\n const entry = fdTable.get(baseFd);\n if (!entry || entry.kind !== \"preopen\" && entry.kind !== \"dir\") return __WASI_EBADF;\n const base = entry.vfsPath;\n if (resolved === base) return __WASI_ESUCCESS;\n const prefix = base ? base + \"/\" : \"\";\n const relative = resolved.startsWith(prefix) ? resolved.substring(prefix.length) : resolved;\n const parts = relative.split(\"/\").filter(Boolean);\n let ancestor = base;\n for (let i = 0; i < parts.length; i++) {\n if (!__wasiFS.dirs.has(ancestor)) {\n return __wasiInodeExists(ancestor) ? __WASI_ENOTDIR : __WASI_ENOENT;\n }\n if ((__wasiEffectiveMode(ancestor) & 1) === 0) return __WASI_EACCES;\n if (i === parts.length - 1) break;\n ancestor = ancestor ? ancestor + \"/\" + parts[i] : parts[i];\n }\n return __WASI_ESUCCESS;\n}\nfunction __wasiCheckMode(path, requested) {\n return (__wasiEffectiveMode(path) & requested) === requested ? __WASI_ESUCCESS : __WASI_EACCES;\n}\nvar __WASI_PARK_CEILING_MS = 15e3;\nvar __WASI_PARK_DEADLINE_MS = 1e4;\nvoid __WASI_PARK_CEILING_MS;\nfunction withParkDeadline(fn) {\n return function parkGuarded(...args) {\n const r = fn.apply(this, args);\n if (!r || typeof r.then !== \"function\") return r;\n const guarded = new Promise((resolve) => {\n let settled = false;\n const timer = setTimeout(() => {\n if (settled) return;\n settled = true;\n resolve(__WASI_EAGAIN);\n }, __WASI_PARK_DEADLINE_MS);\n const finish = (value) => {\n if (settled) return;\n settled = true;\n clearTimeout(timer);\n resolve(value);\n };\n r.then(finish, () => finish(__WASI_EAGAIN));\n });\n return __wasiThreads ? __wasiThreads.parkIo(guarded) : guarded;\n };\n}\nfunction __wasiMakeImports(opts) {\n const preview0 = opts.abi === \"preview0\";\n const WHENCE_SET = preview0 ? 2 : 0;\n const WHENCE_CUR = preview0 ? 0 : 1;\n const WHENCE_END = preview0 ? 1 : 2;\n const argv = opts.argv || [];\n const envArr = [];\n if (opts.env) for (const k of Object.keys(opts.env)) envArr.push(k + \"=\" + opts.env[k]);\n const utf8enc = new TextEncoder();\n const utf8dec = new TextDecoder();\n function view() {\n return new DataView(opts.getMemory().buffer);\n }\n function u8() {\n return new Uint8Array(opts.getMemory().buffer);\n }\n function writeU32LE(off, v) {\n view().setUint32(off, v >>> 0, true);\n }\n function writeU64LE(off, v) {\n const dv = view();\n if (typeof v === \"bigint\") {\n dv.setBigUint64(off, v, true);\n return;\n }\n const lo = v >>> 0;\n const hi = Math.floor(v / 4294967296) >>> 0;\n dv.setUint32(off, lo, true);\n dv.setUint32(off + 4, hi, true);\n }\n function readPath(ptr, len) {\n const bytes = u8().subarray(ptr, ptr + len);\n return utf8dec.decode(bytes);\n }\n function writeFilestat(statPtr, path, ftype, size, t) {\n const dv = view();\n writeU64LE(statPtr, __WASI_DEV);\n writeU64LE(statPtr + 8, __wasiInode(path));\n dv.setUint8(statPtr + 16, ftype);\n if (preview0) {\n for (let i = 17; i < 20; i++) dv.setUint8(statPtr + i, 0);\n dv.setUint32(statPtr + 20, 1, true);\n writeU64LE(statPtr + 24, size);\n writeU64LE(statPtr + 32, t.atime);\n writeU64LE(statPtr + 40, t.mtime);\n writeU64LE(statPtr + 48, t.ctime);\n return __WASI_ESUCCESS;\n }\n for (let i = 17; i < 24; i++) dv.setUint8(statPtr + i, 0);\n writeU64LE(statPtr + 24, 1n);\n writeU64LE(statPtr + 32, size);\n writeU64LE(statPtr + 40, t.atime);\n writeU64LE(statPtr + 48, t.mtime);\n writeU64LE(statPtr + 56, t.ctime);\n return __WASI_ESUCCESS;\n }\n let stdoutBuf = \"\";\n let stderrBuf = \"\";\n function appendStream(kind, bytes) {\n const s = utf8dec.decode(bytes);\n if (kind === \"stdout\") {\n if (opts.stdoutWrite) opts.stdoutWrite(s);\n else stdoutBuf += s;\n } else {\n if (opts.stderrWrite) opts.stderrWrite(s);\n else stderrBuf += s;\n }\n }\n function getFile(vfsPath) {\n return __wasiFS.files.get(vfsPath) || null;\n }\n function fileKnown(vfsPath) {\n return __wasiFS.files.has(vfsPath) || __wasiFS.sizes.has(vfsPath);\n }\n function fileSize(vfsPath) {\n const resident = __wasiFS.files.get(vfsPath);\n if (resident) return resident.length;\n return __wasiFS.sizes.get(vfsPath) ?? 0;\n }\n function readRange(vfsPath, offset, length) {\n const resident = __wasiFS.files.get(vfsPath);\n if (resident) {\n const start = Math.min(offset, resident.length);\n return resident.subarray(start, Math.min(resident.length, start + length));\n }\n const size = __wasiFS.sizes.get(vfsPath);\n if (size === void 0) return new Uint8Array(0);\n if (!__wasiSup) return null;\n return (async () => {\n await __wasiDrainPersist();\n if (size <= __wasiFS.residentFileCap) {\n const whole = await __wasiSup.fsReadRange(vfsPath, 0, size);\n const bytes = whole instanceof Uint8Array ? whole : new Uint8Array(whole);\n __wasiFS.files.set(vfsPath, bytes);\n __wasiFS.origFiles.set(vfsPath, bytes.slice());\n const start = Math.min(offset, bytes.length);\n return bytes.subarray(start, Math.min(bytes.length, start + length));\n }\n const want = Math.max(0, Math.min(length, size - offset));\n if (want === 0) return new Uint8Array(0);\n const win = await __wasiSup.fsReadRange(vfsPath, offset, want);\n return win instanceof Uint8Array ? win : new Uint8Array(win);\n })();\n }\n function scatterIovs(bytes, iovsPtr, iovsLen, dv, memU8) {\n let done = 0;\n for (let i = 0; i < iovsLen && done < bytes.length; i++) {\n const iov = iovsPtr + i * 8;\n const bufPtr = dv.getUint32(iov, true);\n const bufLen = dv.getUint32(iov + 4, true);\n const n = Math.min(bufLen, bytes.length - done);\n if (n <= 0) break;\n memU8.set(bytes.subarray(done, done + n), bufPtr);\n done += n;\n if (n < bufLen) break;\n }\n return done;\n }\n function underEnumeratedRoot(vfsPath) {\n for (const root of __wasiFS.enumeratedRoots) {\n if (root === \"\" || vfsPath === root || vfsPath.startsWith(root + \"/\")) return true;\n }\n return false;\n }\n function statLive(vfsPath) {\n if (!__wasiSup || __wasiNegative.has(vfsPath)) return false;\n if (underEnumeratedRoot(vfsPath)) return false;\n return (async () => {\n await __wasiDrainPersist();\n const st = await __wasiSup.stat(vfsPath);\n if (!st) {\n __wasiNegative.add(vfsPath);\n return false;\n }\n ensureParentDirs(vfsPath);\n if (st.type === \"directory\") {\n __wasiFS.dirs.add(vfsPath);\n __wasiFS.modes.set(vfsPath, 7);\n } else {\n __wasiFS.sizes.set(vfsPath, Number(st.size ?? 0));\n __wasiFS.modes.set(vfsPath, 6);\n }\n const ns = BigInt(st.mtime ?? Date.now()) * 1000000n;\n __wasiFS.times.set(vfsPath, { mtime: ns, atime: ns, ctime: ns });\n return true;\n })();\n }\n function iovsCapacity(iovsPtr, iovsLen, dv) {\n let total = 0;\n for (let i = 0; i < iovsLen; i++) total += dv.getUint32(iovsPtr + i * 8 + 4, true);\n return total;\n }\n function hasDir(vfsPath) {\n if (__wasiFS.dirs.has(vfsPath)) return true;\n return false;\n }\n function setFile(vfsPath, bytes) {\n __wasiFS.files.set(vfsPath, bytes);\n __wasiFS.sizes.delete(vfsPath);\n __wasiNegative.delete(vfsPath);\n if (!__wasiFS.modes.has(vfsPath)) __wasiFS.modes.set(vfsPath, 6);\n __wasiBumpMtime(vfsPath);\n __wasiPersistFile(vfsPath);\n }\n function unsetFile(vfsPath) {\n __wasiFS.files.delete(vfsPath);\n __wasiFS.sizes.delete(vfsPath);\n __wasiFS.times.delete(vfsPath);\n __wasiFS.modes.delete(vfsPath);\n __wasiEnqueue(\"unlink \" + vfsPath, (sup) => sup.unlink(vfsPath));\n }\n function touchAccess(vfsPath) {\n const cur = __wasiFS.times.get(vfsPath);\n if (cur) cur.atime = __wasiNowNs();\n }\n function ensureParentDirs(vfsPath) {\n const parts = vfsPath.split(\"/\");\n if (parts.length <= 1) return;\n let p = \"\";\n for (let i = 0; i < parts.length - 1; i++) {\n p = p ? p + \"/\" + parts[i] : parts[i];\n __wasiFS.dirs.add(p);\n if (!__wasiFS.modes.has(p)) __wasiFS.modes.set(p, 7);\n if (!__wasiFS.times.has(p)) {\n const now = __wasiNowNs();\n __wasiFS.times.set(p, { mtime: now, atime: now, ctime: now });\n }\n }\n }\n function readdirChildren(vfsPath) {\n const out = [];\n const seen = /* @__PURE__ */ new Set();\n const prefix = vfsPath === \"\" ? \"\" : vfsPath + \"/\";\n for (const path of __wasiFS.files.keys()) {\n if (path.startsWith(prefix)) {\n const rest = path.substring(prefix.length);\n if (rest && rest.indexOf(\"/\") === -1) {\n out.push({ name: rest, type: __WASI_FT_REGULAR_FILE });\n seen.add(rest);\n }\n }\n }\n for (const path of __wasiFS.dirs) {\n if (path !== vfsPath && path.startsWith(prefix)) {\n const rest = path.substring(prefix.length);\n if (rest && rest.indexOf(\"/\") === -1) {\n out.push({ name: rest, type: __WASI_FT_DIRECTORY });\n seen.add(rest);\n }\n }\n }\n for (const path of __wasiFS.modes.keys()) {\n if (path.startsWith(prefix)) {\n const rest = path.substring(prefix.length);\n if (rest && rest.indexOf(\"/\") === -1 && !seen.has(rest)) {\n out.push({ name: rest, type: __WASI_FT_REGULAR_FILE });\n }\n }\n }\n return out;\n }\n const imports = {\n // ── args / env ──\n args_get(argvPtr, argvBufPtr) {\n let buf = argvBufPtr;\n const memU8 = u8();\n const dv = view();\n for (let i = 0; i < argv.length; i++) {\n dv.setUint32(argvPtr + i * 4, buf, true);\n const bytes = utf8enc.encode(argv[i] + \"\\0\");\n memU8.set(bytes, buf);\n buf += bytes.length;\n }\n return __WASI_ESUCCESS;\n },\n args_sizes_get(argcPtr, sizePtr) {\n let total = 0;\n for (let i = 0; i < argv.length; i++) total += utf8enc.encode(argv[i]).length + 1;\n writeU32LE(argcPtr, argv.length);\n writeU32LE(sizePtr, total);\n return __WASI_ESUCCESS;\n },\n environ_get(environPtr, envBufPtr) {\n let buf = envBufPtr;\n const memU8 = u8();\n const dv = view();\n for (let i = 0; i < envArr.length; i++) {\n dv.setUint32(environPtr + i * 4, buf, true);\n const bytes = utf8enc.encode(envArr[i] + \"\\0\");\n memU8.set(bytes, buf);\n buf += bytes.length;\n }\n return __WASI_ESUCCESS;\n },\n environ_sizes_get(envcPtr, sizePtr) {\n let total = 0;\n for (let i = 0; i < envArr.length; i++) total += utf8enc.encode(envArr[i]).length + 1;\n writeU32LE(envcPtr, envArr.length);\n writeU32LE(sizePtr, total);\n return __WASI_ESUCCESS;\n },\n // ── fd basic ──\n fd_close(fd) {\n if (fd === 0 || fd === 1 || fd === 2) return __WASI_ESUCCESS;\n if (!fdTable.has(fd)) return __WASI_EBADF;\n const entry = fdTable.get(fd);\n if (entry.kind === \"preopen\") return __WASI_ESUCCESS;\n if (entry.kind === \"socket\" && !entry.closed) {\n try {\n entry.socket.close();\n } catch {\n }\n entry.closed = true;\n }\n fdTable.delete(fd);\n return __WASI_ESUCCESS;\n },\n fd_read(fd, iovsPtr, iovsLen, nreadPtr) {\n if (fd === 0) {\n writeU32LE(nreadPtr, 0);\n return __WASI_ESUCCESS;\n }\n const entry = fdTable.get(fd);\n if (!entry) return __WASI_EBADF;\n if (entry.kind === \"socket\") return __rawSockRecv(fd, iovsPtr, iovsLen, 0, nreadPtr, 0);\n if (entry.kind === \"listener\") {\n return __wasiAcceptRead(entry, iovsPtr, iovsLen, nreadPtr, writeU32LE, view, u8);\n }\n if (entry.kind === \"dir\" || entry.kind === \"preopen\") return __WASI_EISDIR;\n if (entry.kind !== \"file\") return __WASI_EBADF;\n if (!fileKnown(entry.vfsPath)) return __WASI_ENOENT;\n const want = iovsCapacity(iovsPtr, iovsLen, view());\n const take = Math.min(want, Math.max(0, fileSize(entry.vfsPath) - entry.offset));\n if (take === 0) {\n writeU32LE(nreadPtr, 0);\n return __WASI_ESUCCESS;\n }\n const chunk = readRange(entry.vfsPath, entry.offset, take);\n const deliver = (bytes) => {\n if (bytes === null) return __WASI_EIO;\n const n = scatterIovs(bytes, iovsPtr, iovsLen, view(), u8());\n entry.offset += n;\n writeU32LE(nreadPtr, n);\n return __WASI_ESUCCESS;\n };\n return chunk && typeof chunk.then === \"function\" ? chunk.then(deliver) : deliver(chunk);\n },\n fd_write(fd, iovsPtr, iovsLen, nwrittenPtr) {\n const sockEntry = fdTable.get(fd);\n if (sockEntry && sockEntry.kind === \"socket\") {\n return __rawSockSend(fd, iovsPtr, iovsLen, 0, nwrittenPtr);\n }\n const dv = view();\n const memU8 = u8();\n let total = 0;\n const parts = [];\n for (let i = 0; i < iovsLen; i++) {\n const iov = iovsPtr + i * 8;\n const bufPtr = dv.getUint32(iov, true);\n const bufLen = dv.getUint32(iov + 4, true);\n if (bufLen > 0) parts.push(memU8.slice(bufPtr, bufPtr + bufLen));\n total += bufLen;\n }\n let combined;\n if (parts.length === 0) combined = new Uint8Array(0);\n else if (parts.length === 1) combined = parts[0];\n else {\n combined = new Uint8Array(total);\n let off = 0;\n for (const p of parts) {\n combined.set(p, off);\n off += p.length;\n }\n }\n if (fd === 1 || fd === 2) {\n appendStream(fd === 1 ? \"stdout\" : \"stderr\", combined);\n writeU32LE(nwrittenPtr, total);\n return __WASI_ESUCCESS;\n }\n const entry = fdTable.get(fd);\n if (!entry || entry.kind !== \"file\") return __WASI_EBADF;\n const file = getFile(entry.vfsPath) || new Uint8Array(0);\n const appendMode = (entry.fdflags & __WASI_FDFLAGS_APPEND) !== 0;\n const writeAt = appendMode ? file.length : entry.offset;\n const newLen = Math.max(file.length, writeAt + total);\n const next = new Uint8Array(newLen);\n next.set(file, 0);\n next.set(combined, writeAt);\n setFile(entry.vfsPath, next);\n entry.offset = writeAt + total;\n writeU32LE(nwrittenPtr, total);\n return __WASI_ESUCCESS;\n },\n fd_seek(fd, offsetArg, whence, newOffsetPtr) {\n if (fd === 0 || fd === 1 || fd === 2) {\n return __WASI_ESPIPE;\n }\n const entry = fdTable.get(fd);\n if (entry && (entry.kind === \"socket\" || entry.kind === \"listener\")) return __WASI_ESPIPE;\n if (!entry || entry.kind !== \"file\") return __WASI_EBADF;\n const delta = typeof offsetArg === \"bigint\" ? offsetArg : BigInt(offsetArg | 0);\n const cur = BigInt(entry.offset);\n const fileLen = BigInt(fileSize(entry.vfsPath));\n let next;\n if (whence === WHENCE_SET) next = delta;\n else if (whence === WHENCE_CUR) next = cur + delta;\n else if (whence === WHENCE_END) next = fileLen + delta;\n else return __WASI_EINVAL;\n if (next < 0n) return __WASI_EINVAL;\n entry.offset = Number(next);\n writeU64LE(newOffsetPtr, next);\n return __WASI_ESUCCESS;\n },\n fd_tell(fd, offsetPtr) {\n if (fd === 0 || fd === 1 || fd === 2) {\n return __WASI_ESPIPE;\n }\n const entry = fdTable.get(fd);\n if (entry && (entry.kind === \"socket\" || entry.kind === \"listener\")) return __WASI_ESPIPE;\n if (!entry || entry.kind !== \"file\") return __WASI_EBADF;\n writeU64LE(offsetPtr, BigInt(entry.offset));\n return __WASI_ESUCCESS;\n },\n fd_fdstat_get(fd, statPtr) {\n const entry = fdTable.get(fd);\n if (!entry) return __WASI_EBADF;\n const dv = view();\n let ftype = __WASI_FT_UNKNOWN;\n if (entry.kind === \"stdin\" || entry.kind === \"stdout\" || entry.kind === \"stderr\") {\n ftype = __WASI_FT_CHARACTER_DEVICE;\n } else if (entry.kind === \"preopen\" || entry.kind === \"dir\") {\n ftype = __WASI_FT_DIRECTORY;\n } else if (entry.kind === \"file\") {\n ftype = __WASI_FT_REGULAR_FILE;\n } else if (entry.kind === \"socket\" || entry.kind === \"listener\") {\n ftype = __WASI_FT_SOCKET_STREAM;\n }\n dv.setUint8(statPtr, ftype);\n dv.setUint8(statPtr + 1, 0);\n dv.setUint16(statPtr + 2, (entry.fdflags || 0) & 65535, true);\n dv.setUint32(statPtr + 4, 0, true);\n const rb = entry.rights !== void 0 ? entry.rights : __WASI_RIGHTS_ALL;\n const ri = entry.rightsInheriting !== void 0 ? entry.rightsInheriting : __WASI_RIGHTS_ALL;\n writeU64LE(statPtr + 8, rb);\n writeU64LE(statPtr + 16, ri);\n return __WASI_ESUCCESS;\n },\n fd_fdstat_set_flags(fd, flags) {\n const entry = fdTable.get(fd);\n if (!entry) return __WASI_EBADF;\n if (entry.kind === \"file\" || entry.kind === \"socket\" || entry.kind === \"listener\") entry.fdflags = flags;\n return __WASI_ESUCCESS;\n },\n // WASI socket and polling support B6: track per-fd rights mask. Callers narrow their own caps;\n // we record but don't enforce in v1 (single-tenant facet). The narrow\n // is visible to subsequent fd_fdstat_get calls, satisfying capability-\n // tightening probes that round-trip the mask.\n fd_fdstat_set_rights(fd, rightsBase, rightsInheriting) {\n const entry = fdTable.get(fd);\n if (!entry) return __WASI_EBADF;\n const rb = typeof rightsBase === \"bigint\" ? rightsBase : BigInt(rightsBase >>> 0);\n const ri = typeof rightsInheriting === \"bigint\" ? rightsInheriting : BigInt(rightsInheriting >>> 0);\n const curRb = entry.rights !== void 0 ? entry.rights : __WASI_RIGHTS_ALL;\n const curRi = entry.rightsInheriting !== void 0 ? entry.rightsInheriting : __WASI_RIGHTS_ALL;\n if ((rb & ~curRb) !== 0n) return __WASI_ENOTCAPABLE;\n if ((ri & ~curRi) !== 0n) return __WASI_ENOTCAPABLE;\n entry.rights = rb;\n entry.rightsInheriting = ri;\n return __WASI_ESUCCESS;\n },\n // ── preopens ──\n fd_prestat_get(fd, prestatPtr) {\n const entry = fdTable.get(fd);\n if (!entry || entry.kind !== \"preopen\") return __WASI_EBADF;\n const dv = view();\n dv.setUint8(prestatPtr, __WASI_PREOPENTYPE_DIR);\n const nameBytes = utf8enc.encode(entry.wasiPath);\n dv.setUint32(prestatPtr + 4, nameBytes.length, true);\n return __WASI_ESUCCESS;\n },\n fd_prestat_dir_name(fd, pathPtr, pathLen) {\n const entry = fdTable.get(fd);\n if (!entry || entry.kind !== \"preopen\") return __WASI_EBADF;\n const nameBytes = utf8enc.encode(entry.wasiPath);\n if (nameBytes.length > pathLen) return __WASI_EINVAL;\n u8().set(nameBytes, pathPtr);\n return __WASI_ESUCCESS;\n },\n // ── path_open ──\n path_open(baseFd, dirflags, pathPtr, pathLen, oflags, rightsBase, _rightsInheriting, fdflags, fdOutPtr) {\n const pathArg = readPath(pathPtr, pathLen);\n const guestPath = __wasiGuestPath(baseFd, pathArg);\n if (guestPath.startsWith(__WASI_TCP_PATH_PREFIX)) {\n return __wasiOpenTcpSocket(guestPath, fdflags, fdOutPtr, writeU32LE);\n }\n if (guestPath.startsWith(__WASI_ACCEPTED_PATH_PREFIX)) {\n return __wasiOpenAcceptedSocket(guestPath, fdflags, fdOutPtr, writeU32LE);\n }\n if (guestPath.startsWith(__WASI_LISTEN_PATH_PREFIX)) {\n return __wasiOpenListener(guestPath, fdflags, fdOutPtr, writeU32LE);\n }\n const follow = (dirflags & __WASI_LOOKUPFLAGS_SYMLINK_FOLLOW) !== 0;\n const rp = __wasiResolvePathFull(baseFd, pathArg, follow);\n if (rp.err === __WASI_EBADF) return __WASI_EBADF;\n if (rp.err === __WASI_ELOOP) return __WASI_ELOOP;\n const resolved = rp.path;\n const traversal = __wasiCheckTraversal(baseFd, resolved);\n if (traversal !== __WASI_ESUCCESS) return traversal;\n const isCreate = (oflags & __WASI_O_CREAT) !== 0;\n const isDirectory = (oflags & __WASI_O_DIRECTORY) !== 0;\n const isExcl = (oflags & __WASI_O_EXCL) !== 0;\n const isTrunc = (oflags & __WASI_O_TRUNC) !== 0;\n if (!follow && rp.isSymlink) {\n return __WASI_ELOOP;\n }\n const fileExists = __wasiFS.files.has(resolved) || __wasiFS.sizes.has(resolved) || __wasiFS.modes.has(resolved) && !__wasiFS.dirs.has(resolved) && !__wasiFS.symlinks.has(resolved);\n const dirExists = __wasiFS.dirs.has(resolved);\n if (isDirectory) {\n if (!dirExists) return __WASI_ENOENT;\n const access = __wasiCheckMode(resolved, 1);\n if (access !== __WASI_ESUCCESS) return access;\n const fd2 = nextFd++;\n fdTable.set(fd2, { kind: \"dir\", vfsPath: resolved, readdirEntries: null, cookie: 0n, oflags, fdflags });\n writeU32LE(fdOutPtr, fd2);\n return __WASI_ESUCCESS;\n }\n if (dirExists) {\n return __WASI_EISDIR;\n }\n if (!fileExists) {\n if (!isCreate) return __WASI_ENOENT;\n const parentSlash = resolved.lastIndexOf(\"/\");\n const parent = parentSlash < 0 ? \"\" : resolved.substring(0, parentSlash);\n const access = __wasiCheckMode(parent, 3);\n if (access !== __WASI_ESUCCESS) return access;\n ensureParentDirs(resolved);\n setFile(resolved, new Uint8Array(0));\n } else if (isExcl) {\n return __WASI_EEXIST;\n } else if (isTrunc) {\n const access = __wasiCheckMode(resolved, 2);\n if (access !== __WASI_ESUCCESS) return access;\n setFile(resolved, new Uint8Array(0));\n }\n const requested = typeof rightsBase === \"bigint\" ? rightsBase : BigInt(rightsBase >>> 0);\n let requiredMode = 0;\n if ((requested & __WASI_RIGHT_FD_READ) !== 0n) requiredMode |= 4;\n if ((requested & __WASI_RIGHT_FD_WRITE) !== 0n) requiredMode |= 2;\n if (requiredMode !== 0) {\n const access = __wasiCheckMode(resolved, requiredMode);\n if (access !== __WASI_ESUCCESS) return access;\n }\n const fd = nextFd++;\n fdTable.set(fd, { kind: \"file\", vfsPath: resolved, offset: 0, oflags, fdflags });\n writeU32LE(fdOutPtr, fd);\n return __WASI_ESUCCESS;\n },\n // ── path_create_directory ──\n path_create_directory(baseFd, pathPtr, pathLen) {\n const path = readPath(pathPtr, pathLen);\n const resolved = __wasiResolvePath(baseFd, path);\n if (resolved === null) return __WASI_EBADF;\n if (__wasiFS.dirs.has(resolved)) return __WASI_EEXIST;\n if (__wasiFS.files.has(resolved)) return __WASI_EEXIST;\n ensureParentDirs(resolved);\n __wasiFS.dirs.add(resolved);\n __wasiFS.modes.set(resolved, 7);\n __wasiNegative.delete(resolved);\n const now = __wasiNowNs();\n __wasiFS.times.set(resolved, { mtime: now, atime: now, ctime: now });\n __wasiEnqueue(\"mkdir \" + resolved, (sup) => sup.mkdir(resolved));\n return __WASI_ESUCCESS;\n },\n path_remove_directory(baseFd, pathPtr, pathLen) {\n const path = readPath(pathPtr, pathLen);\n const resolved = __wasiResolvePath(baseFd, path);\n if (resolved === null) return __WASI_EBADF;\n if (!__wasiFS.dirs.has(resolved)) return __WASI_ENOENT;\n const children = readdirChildren(resolved);\n if (children.length > 0) return __WASI_ENOTEMPTY;\n __wasiFS.dirs.delete(resolved);\n __wasiFS.modes.delete(resolved);\n __wasiEnqueue(\"rmdir \" + resolved, (sup) => sup.rmdir(resolved));\n return __WASI_ESUCCESS;\n },\n path_unlink_file(baseFd, pathPtr, pathLen) {\n const path = readPath(pathPtr, pathLen);\n const resolved = __wasiResolvePath(baseFd, path);\n if (resolved === null) return __WASI_EBADF;\n if (__wasiFS.dirs.has(resolved)) return __WASI_EISDIR;\n if (__wasiFS.symlinks.has(resolved)) {\n __wasiFS.symlinks.delete(resolved);\n __wasiFS.times.delete(resolved);\n __wasiFS.modes.delete(resolved);\n return __WASI_ESUCCESS;\n }\n if (!fileKnown(resolved)) return __WASI_ENOENT;\n unsetFile(resolved);\n return __WASI_ESUCCESS;\n },\n // ── path_rename (atomic; overwrites destination) ──\n path_rename(srcFd, srcPathPtr, srcPathLen, dstFd, dstPathPtr, dstPathLen) {\n const srcPath = readPath(srcPathPtr, srcPathLen);\n const dstPath = readPath(dstPathPtr, dstPathLen);\n const src = __wasiResolvePath(srcFd, srcPath);\n const dst = __wasiResolvePath(dstFd, dstPath);\n if (src === null || dst === null) return __WASI_EBADF;\n const srcFile = __wasiFS.files.get(src);\n const srcIsDir = __wasiFS.dirs.has(src);\n const srcIsSymlink = __wasiFS.symlinks.has(src);\n const srcIsLazy = srcFile === void 0 && __wasiFS.sizes.has(src);\n if (srcFile === void 0 && !srcIsLazy && !srcIsDir && !srcIsSymlink) return __WASI_ENOENT;\n if (src === dst) return __WASI_ESUCCESS;\n const moveTimes = (from, to) => {\n const t = __wasiFS.times.get(from);\n __wasiFS.times.delete(from);\n const now = __wasiNowNs();\n __wasiFS.times.set(to, t ? { mtime: t.mtime, atime: t.atime, ctime: now } : { mtime: now, atime: now, ctime: now });\n };\n const moveMode = (from, to) => {\n const mode = __wasiFS.modes.get(from);\n __wasiFS.modes.delete(from);\n if (mode !== void 0) __wasiFS.modes.set(to, mode);\n };\n __wasiFS.files.delete(dst);\n __wasiFS.sizes.delete(dst);\n __wasiFS.dirs.delete(dst);\n __wasiFS.symlinks.delete(dst);\n __wasiFS.times.delete(dst);\n __wasiFS.modes.delete(dst);\n if (srcIsLazy) {\n __wasiFS.sizes.set(dst, __wasiFS.sizes.get(src));\n __wasiFS.sizes.delete(src);\n moveTimes(src, dst);\n moveMode(src, dst);\n } else if (srcIsSymlink) {\n __wasiFS.symlinks.set(dst, __wasiFS.symlinks.get(src));\n __wasiFS.symlinks.delete(src);\n moveTimes(src, dst);\n moveMode(src, dst);\n } else if (srcFile !== void 0) {\n __wasiFS.files.set(dst, srcFile);\n __wasiFS.files.delete(src);\n moveTimes(src, dst);\n moveMode(src, dst);\n } else {\n __wasiFS.dirs.delete(src);\n __wasiFS.dirs.add(dst);\n moveTimes(src, dst);\n moveMode(src, dst);\n const srcPrefix = src + \"/\";\n const rebase = (key) => dst + \"/\" + key.substring(srcPrefix.length);\n for (const key of [...__wasiFS.files.keys()]) {\n if (key.startsWith(srcPrefix)) {\n const nk = rebase(key);\n __wasiFS.files.set(nk, __wasiFS.files.get(key));\n __wasiFS.files.delete(key);\n moveTimes(key, nk);\n moveMode(key, nk);\n }\n }\n for (const key of [...__wasiFS.dirs]) {\n if (key.startsWith(srcPrefix)) {\n const nk = rebase(key);\n __wasiFS.dirs.add(nk);\n __wasiFS.dirs.delete(key);\n moveTimes(key, nk);\n moveMode(key, nk);\n }\n }\n for (const key of [...__wasiFS.symlinks.keys()]) {\n if (key.startsWith(srcPrefix)) {\n const nk = rebase(key);\n __wasiFS.symlinks.set(nk, __wasiFS.symlinks.get(key));\n __wasiFS.symlinks.delete(key);\n moveTimes(key, nk);\n moveMode(key, nk);\n }\n }\n for (const key of [...__wasiFS.sizes.keys()]) {\n if (key.startsWith(srcPrefix)) {\n __wasiFS.sizes.set(rebase(key), __wasiFS.sizes.get(key));\n __wasiFS.sizes.delete(key);\n }\n }\n }\n __wasiEnqueue(\"rename \" + src + \" -> \" + dst, (sup) => sup.rename(src, dst));\n return __WASI_ESUCCESS;\n },\n // ── path_filestat_get ──\n path_filestat_get(baseFd, lookupflags, pathPtr, pathLen, statPtr) {\n const path = readPath(pathPtr, pathLen);\n const follow = (lookupflags & __WASI_LOOKUPFLAGS_SYMLINK_FOLLOW) !== 0;\n const rp = __wasiResolvePathFull(baseFd, path, follow);\n if (rp.err === __WASI_EBADF) return __WASI_EBADF;\n if (rp.err === __WASI_ELOOP) return __WASI_ELOOP;\n const resolved = rp.path;\n const traversal = __wasiCheckTraversal(baseFd, resolved);\n if (traversal !== __WASI_ESUCCESS) return traversal;\n const classify = () => {\n if (!follow && rp.isSymlink) {\n return [\n __WASI_FT_SYMBOLIC_LINK,\n BigInt(new TextEncoder().encode(__wasiFS.symlinks.get(resolved)).length)\n ];\n }\n if (__wasiFS.files.has(resolved) || __wasiFS.sizes.has(resolved)) {\n return [__WASI_FT_REGULAR_FILE, BigInt(fileSize(resolved))];\n }\n if (__wasiFS.dirs.has(resolved)) return [__WASI_FT_DIRECTORY, 0n];\n if (__wasiFS.modes.has(resolved)) return [__WASI_FT_REGULAR_FILE, 0n];\n return null;\n };\n let kind = classify();\n if (!kind) {\n const live = statLive(resolved);\n if (live && typeof live.then === \"function\") {\n return live.then((found) => {\n const settled = found ? classify() : null;\n return settled ? emitStat(...settled) : __WASI_ENOENT;\n });\n }\n return __WASI_ENOENT;\n }\n return emitStat(...kind);\n function emitStat(ftype, size) {\n const t = __wasiFS.times.get(resolved) || { mtime: 0n, atime: 0n, ctime: 0n };\n return writeFilestat(statPtr, resolved, ftype, size, t);\n }\n },\n // WASI socket and polling support B2: real path_filestat_set_times. Honors ATIM/ATIM_NOW/\n // MTIM/MTIM_NOW flags. Spec: atim_ns and mtim_ns are absolute\n // nanosecond timestamps; flags select which fields to update + whether\n // to clamp to \"now\". ENOENT if path doesn't exist.\n path_filestat_set_times(baseFd, lookupflags, pathPtr, pathLen, atimArg, mtimArg, fstflags) {\n const path = readPath(pathPtr, pathLen);\n const follow = (lookupflags & __WASI_LOOKUPFLAGS_SYMLINK_FOLLOW) !== 0;\n const rp = __wasiResolvePathFull(baseFd, path, follow);\n if (rp.err === __WASI_EBADF) return __WASI_EBADF;\n if (rp.err === __WASI_ELOOP) return __WASI_ELOOP;\n const resolved = rp.path;\n const isSymlinkOnly = !follow && rp.isSymlink;\n if (!isSymlinkOnly && !__wasiFS.files.has(resolved) && !__wasiFS.dirs.has(resolved)) {\n return __WASI_ENOENT;\n }\n const setAtim = (fstflags & __WASI_FSTFLAGS_ATIM) !== 0;\n const setAtimNow = (fstflags & __WASI_FSTFLAGS_ATIM_NOW) !== 0;\n const setMtim = (fstflags & __WASI_FSTFLAGS_MTIM) !== 0;\n const setMtimNow = (fstflags & __WASI_FSTFLAGS_MTIM_NOW) !== 0;\n if (setAtim && setAtimNow || setMtim && setMtimNow) return __WASI_EINVAL;\n const now = __wasiNowNs();\n const atimNs = setAtimNow ? now : setAtim ? typeof atimArg === \"bigint\" ? atimArg : BigInt(atimArg) : null;\n const mtimNs = setMtimNow ? now : setMtim ? typeof mtimArg === \"bigint\" ? mtimArg : BigInt(mtimArg) : null;\n __wasiTouchTimes(resolved, mtimNs, atimNs, now);\n __wasiPersistTimes(resolved);\n return __WASI_ESUCCESS;\n },\n // WASI socket and polling support B3: read the target string of a symlink. Spec:\n // path_readlink(fd, path, path_len, buf, buf_len, *bufused)\n // Truncates to buf_len; writes actual bytes to *bufused.\n path_readlink(baseFd, pathPtr, pathLen, bufPtr, bufLen, bufUsedPtr) {\n const path = readPath(pathPtr, pathLen);\n const rp = __wasiResolvePathFull(baseFd, path, false);\n if (rp.err === __WASI_EBADF) return __WASI_EBADF;\n if (rp.err === __WASI_ELOOP) return __WASI_ELOOP;\n const resolved = rp.path;\n if (!__wasiFS.symlinks.has(resolved)) return __WASI_EINVAL;\n const target = __wasiFS.symlinks.get(resolved);\n const enc = new TextEncoder();\n const targetBytes = enc.encode(target);\n const n = Math.min(targetBytes.length, bufLen);\n u8().set(targetBytes.subarray(0, n), bufPtr);\n writeU32LE(bufUsedPtr, n);\n return __WASI_ESUCCESS;\n },\n // WASI socket and polling support B3: create a symlink. Spec:\n // path_symlink(old_path, fd, new_path)\n // old_path is the symlink's TARGET (stored verbatim); fd+new_path\n // is the location where the symlink itself is created.\n path_symlink(oldPathPtr, oldPathLen, newFd, newPathPtr, newPathLen) {\n const oldPath = readPath(oldPathPtr, oldPathLen);\n const newPath = readPath(newPathPtr, newPathLen);\n const resolved = __wasiResolvePath(newFd, newPath);\n if (resolved === null) return __WASI_EBADF;\n if (__wasiFS.files.has(resolved)) return __WASI_EEXIST;\n if (__wasiFS.dirs.has(resolved)) return __WASI_EEXIST;\n if (__wasiFS.symlinks.has(resolved)) return __WASI_EEXIST;\n __wasiFS.symlinks.set(resolved, oldPath);\n __wasiFS.modes.set(resolved, 7);\n ensureParentDirs(resolved);\n const now = __wasiNowNs();\n __wasiFS.times.set(resolved, { mtime: now, atime: now, ctime: now });\n __wasiNegative.delete(resolved);\n __wasiPersistSymlink(oldPath, resolved);\n return __WASI_ESUCCESS;\n },\n // WASI socket and polling support B3: hardlink. Spec:\n // path_link(old_fd, old_flags, old_path, new_fd, new_path)\n // Implements as a shared-buffer alias. POSIX semantics: both names\n // point at the same inode, so writes through either are visible to\n // the other. In our in-memory FS the \"same inode\" is the same\n // Uint8Array reference. CAVEAT: our setFile/fd_write paths REPLACE\n // the buffer reference (immutable-style update) so subsequent writes\n // don't propagate. Matches link(2) at the WASI-layer (link itself\n // succeeds; concurrent-mutation semantics are filesystem-dependent\n // and our shim is a single-call sandbox).\n path_link(oldFd, oldFlags, oldPathPtr, oldPathLen, newFd, newPathPtr, newPathLen) {\n const oldPath = readPath(oldPathPtr, oldPathLen);\n const newPath = readPath(newPathPtr, newPathLen);\n const follow = (oldFlags & __WASI_LOOKUPFLAGS_SYMLINK_FOLLOW) !== 0;\n const rpOld = __wasiResolvePathFull(oldFd, oldPath, follow);\n if (rpOld.err === __WASI_EBADF) return __WASI_EBADF;\n if (rpOld.err === __WASI_ELOOP) return __WASI_ELOOP;\n const src = rpOld.path;\n const dst = __wasiResolvePath(newFd, newPath);\n if (dst === null) return __WASI_EBADF;\n if (!__wasiFS.files.has(src)) return __WASI_ENOENT;\n if (__wasiFS.files.has(dst) || __wasiFS.dirs.has(dst) || __wasiFS.symlinks.has(dst)) {\n return __WASI_EEXIST;\n }\n __wasiFS.files.set(dst, __wasiFS.files.get(src));\n __wasiFS.modes.set(dst, __wasiEffectiveMode(src));\n ensureParentDirs(dst);\n const now = __wasiNowNs();\n __wasiFS.times.set(dst, { mtime: now, atime: now, ctime: now });\n __wasiNegative.delete(dst);\n __wasiPersistFile(dst);\n return __WASI_ESUCCESS;\n },\n // ── fd_filestat_get / fd_filestat_set_size ──\n fd_filestat_get(fd, statPtr) {\n const entry = fdTable.get(fd);\n if (!entry) return __WASI_EBADF;\n let ftype = __WASI_FT_UNKNOWN;\n let size = 0n;\n let timesPath = null;\n if (entry.kind === \"file\") {\n ftype = __WASI_FT_REGULAR_FILE;\n size = BigInt(fileSize(entry.vfsPath));\n timesPath = entry.vfsPath;\n } else if (entry.kind === \"dir\" || entry.kind === \"preopen\") {\n ftype = __WASI_FT_DIRECTORY;\n timesPath = entry.vfsPath;\n } else if (entry.kind === \"stdin\" || entry.kind === \"stdout\" || entry.kind === \"stderr\") {\n ftype = __WASI_FT_CHARACTER_DEVICE;\n } else if (entry.kind === \"socket\" || entry.kind === \"listener\") {\n ftype = __WASI_FT_SOCKET_STREAM;\n }\n const t = timesPath && __wasiFS.times.get(timesPath) || { mtime: 0n, atime: 0n, ctime: 0n };\n return writeFilestat(statPtr, timesPath === null ? \"\\0fd/\" + fd : timesPath, ftype, size, t);\n },\n fd_filestat_set_size(fd, size) {\n const entry = fdTable.get(fd);\n if (!entry || entry.kind !== \"file\") return __WASI_EBADF;\n const cur = getFile(entry.vfsPath) || new Uint8Array(0);\n const newSize = Number(size);\n const next = new Uint8Array(newSize);\n next.set(cur.subarray(0, Math.min(cur.length, newSize)), 0);\n setFile(entry.vfsPath, next);\n return __WASI_ESUCCESS;\n },\n // WASI socket and polling support B2: real fd_filestat_set_times.\n fd_filestat_set_times(fd, atimArg, mtimArg, fstflags) {\n const entry = fdTable.get(fd);\n if (!entry) return __WASI_EBADF;\n if (entry.kind !== \"file\" && entry.kind !== \"dir\" && entry.kind !== \"preopen\") {\n return __WASI_ESUCCESS;\n }\n const setAtim = (fstflags & __WASI_FSTFLAGS_ATIM) !== 0;\n const setAtimNow = (fstflags & __WASI_FSTFLAGS_ATIM_NOW) !== 0;\n const setMtim = (fstflags & __WASI_FSTFLAGS_MTIM) !== 0;\n const setMtimNow = (fstflags & __WASI_FSTFLAGS_MTIM_NOW) !== 0;\n if (setAtim && setAtimNow || setMtim && setMtimNow) return __WASI_EINVAL;\n const now = __wasiNowNs();\n const atimNs = setAtimNow ? now : setAtim ? typeof atimArg === \"bigint\" ? atimArg : BigInt(atimArg) : null;\n const mtimNs = setMtimNow ? now : setMtim ? typeof mtimArg === \"bigint\" ? mtimArg : BigInt(mtimArg) : null;\n __wasiTouchTimes(entry.vfsPath, mtimNs, atimNs, now);\n __wasiPersistTimes(entry.vfsPath);\n return __WASI_ESUCCESS;\n },\n // ── fd_pread / fd_pwrite (offset-explicit) ──\n fd_pread(fd, iovsPtr, iovsLen, offsetArg, nreadPtr) {\n const entry = fdTable.get(fd);\n if (!entry || entry.kind !== \"file\") return __WASI_EBADF;\n if (!fileKnown(entry.vfsPath)) return __WASI_ENOENT;\n const offset = typeof offsetArg === \"bigint\" ? Number(offsetArg) : offsetArg >>> 0;\n const want = iovsCapacity(iovsPtr, iovsLen, view());\n const take = Math.min(want, Math.max(0, fileSize(entry.vfsPath) - offset));\n if (take === 0) {\n writeU32LE(nreadPtr, 0);\n return __WASI_ESUCCESS;\n }\n const chunk = readRange(entry.vfsPath, offset, take);\n const deliver = (bytes) => {\n if (bytes === null) return __WASI_EIO;\n writeU32LE(nreadPtr, scatterIovs(bytes, iovsPtr, iovsLen, view(), u8()));\n return __WASI_ESUCCESS;\n };\n return chunk && typeof chunk.then === \"function\" ? chunk.then(deliver) : deliver(chunk);\n },\n fd_pwrite(fd, iovsPtr, iovsLen, offsetArg, nwrittenPtr) {\n const entry = fdTable.get(fd);\n if (!entry || entry.kind !== \"file\") return __WASI_EBADF;\n let offset = typeof offsetArg === \"bigint\" ? Number(offsetArg) : offsetArg >>> 0;\n const dv = view();\n const memU8 = u8();\n let total = 0;\n const parts = [];\n for (let i = 0; i < iovsLen; i++) {\n const iov = iovsPtr + i * 8;\n const bufPtr = dv.getUint32(iov, true);\n const bufLen = dv.getUint32(iov + 4, true);\n if (bufLen > 0) parts.push(memU8.slice(bufPtr, bufPtr + bufLen));\n total += bufLen;\n }\n let combined;\n if (parts.length === 0) combined = new Uint8Array(0);\n else if (parts.length === 1) combined = parts[0];\n else {\n combined = new Uint8Array(total);\n let off = 0;\n for (const p of parts) {\n combined.set(p, off);\n off += p.length;\n }\n }\n const cur = getFile(entry.vfsPath) || new Uint8Array(0);\n const newLen = Math.max(cur.length, offset + total);\n const next = new Uint8Array(newLen);\n next.set(cur, 0);\n next.set(combined, offset);\n setFile(entry.vfsPath, next);\n writeU32LE(nwrittenPtr, total);\n return __WASI_ESUCCESS;\n },\n // ── fd_readdir ──\n //\n // WASI dirent layout (24 bytes per entry):\n // d_next u64 @ 0 (cookie for next entry)\n // d_ino u64 @ 8\n // d_namlen u32 @ 16\n // d_type u8 @ 20\n // pad 21..23\n // followed by name bytes (variable).\n fd_readdir(fd, bufPtr, bufLen, cookieArg, bufusedPtr) {\n const entry = fdTable.get(fd);\n if (!entry || entry.kind !== \"dir\" && entry.kind !== \"preopen\") return __WASI_EBADF;\n const access = __wasiCheckMode(entry.vfsPath, 4);\n if (access !== __WASI_ESUCCESS) return access;\n if (!entry.readdirEntries) {\n const kids = readdirChildren(entry.vfsPath);\n entry.readdirEntries = [\n { name: \".\", type: __WASI_FT_DIRECTORY },\n { name: \"..\", type: __WASI_FT_DIRECTORY },\n ...kids\n ];\n }\n let startCookie = typeof cookieArg === \"bigint\" ? Number(cookieArg) : cookieArg >>> 0;\n let written = 0;\n const dv = view();\n const memU8 = u8();\n for (let i = startCookie; i < entry.readdirEntries.length; i++) {\n const e = entry.readdirEntries[i];\n const nameBytes = utf8enc.encode(e.name);\n const recordSize = 24 + nameBytes.length;\n if (written + 24 > bufLen) break;\n writeU64LE(bufPtr + written, BigInt(i + 1));\n writeU64LE(bufPtr + written + 8, 0n);\n dv.setUint32(bufPtr + written + 16, nameBytes.length, true);\n dv.setUint8(bufPtr + written + 20, e.type);\n for (let j = 21; j < 24; j++) dv.setUint8(bufPtr + written + j, 0);\n written += 24;\n const nameRoom = Math.min(nameBytes.length, bufLen - written);\n memU8.set(nameBytes.subarray(0, nameRoom), bufPtr + written);\n written += nameRoom;\n if (nameRoom < nameBytes.length) break;\n }\n writeU32LE(bufusedPtr, written);\n return __WASI_ESUCCESS;\n },\n fd_advise() {\n return __WASI_ESUCCESS;\n },\n // WASI socket and polling support B4: real fd_allocate. Extends the file's byte buffer with\n // zeros so [offset, offset+len) is allocated. POSIX posix_fallocate\n // semantics. ENOSPC is not reachable in our in-memory FS (the\n // 32 MiB snapshot cap is enforced at supervisor level; in-call we\n // just allocate the JS Uint8Array).\n fd_allocate(fd, offsetArg, lenArg) {\n const entry = fdTable.get(fd);\n if (!entry || entry.kind !== \"file\") return __WASI_EBADF;\n const offset = typeof offsetArg === \"bigint\" ? Number(offsetArg) : offsetArg >>> 0;\n const len = typeof lenArg === \"bigint\" ? Number(lenArg) : lenArg >>> 0;\n const cur = getFile(entry.vfsPath) || new Uint8Array(0);\n const needed = offset + len;\n if (needed <= cur.length) return __WASI_ESUCCESS;\n const next = new Uint8Array(needed);\n next.set(cur, 0);\n setFile(entry.vfsPath, next);\n return __WASI_ESUCCESS;\n },\n fd_datasync() {\n return __WASI_ESUCCESS;\n },\n fd_sync() {\n return __WASI_ESUCCESS;\n },\n // dup2(2), and the only way to reach it: preview1 has no dup. Renumbering\n // CLOSES `to` — dropping the entry instead leaks whatever it held, and for\n // a socket that is a live stream the kernel is never told about.\n fd_renumber(from, to) {\n const entry = fdTable.get(from);\n if (!entry) return __WASI_EBADF;\n if (from === to) return __WASI_ESUCCESS;\n const target = fdTable.get(to);\n if (target && target.kind === \"preopen\") return __WASI_ENOTCAPABLE;\n if (target && target.kind === \"socket\" && !target.closed) {\n try {\n target.socket.close();\n } catch {\n }\n target.closed = true;\n }\n fdTable.delete(from);\n fdTable.set(to, entry);\n return __WASI_ESUCCESS;\n },\n // ── proc_exit ──\n proc_exit(code) {\n throw new __WasiExit(code | 0);\n },\n // WASI socket and polling support B5: proc_raise(sig) — POSIX shell convention encodes a\n // signal-terminated process as exit-status 128+sig. SIGABRT=6 → 134,\n // SIGTERM=15 → 143, SIGKILL=9 → 137. Returns errno (never actually;\n // throws via __WasiExit). The legacy 'throw new __WasiExit(128)' was\n // wrong: it discarded the signal number, so probes couldn't\n // distinguish SIGABRT from SIGTERM at the exit-code layer.\n proc_raise(sig) {\n throw new __WasiExit(128 + ((sig | 0) & 255));\n },\n // ── clock ──\n clock_time_get(clockId, _precision, timePtr) {\n let nowNs;\n if (clockId === __WASI_CLOCK_REALTIME) {\n nowNs = BigInt(Date.now()) * 1000000n;\n } else if (clockId === __WASI_CLOCK_MONOTONIC || clockId === __WASI_CLOCK_PROCESS_CPUTIME_ID || clockId === __WASI_CLOCK_THREAD_CPUTIME_ID) {\n const ms = typeof performance !== \"undefined\" && performance.now ? performance.now() : Date.now();\n nowNs = BigInt(Math.floor(ms * 1e3)) * 1000n;\n } else return __WASI_EINVAL;\n writeU64LE(timePtr, nowNs);\n return __WASI_ESUCCESS;\n },\n clock_res_get(clockId, resPtr) {\n if (clockId === __WASI_CLOCK_REALTIME) {\n writeU64LE(resPtr, 1000000n);\n return __WASI_ESUCCESS;\n }\n if (clockId === __WASI_CLOCK_MONOTONIC || clockId === __WASI_CLOCK_PROCESS_CPUTIME_ID || clockId === __WASI_CLOCK_THREAD_CPUTIME_ID) {\n writeU64LE(resPtr, 1000n);\n return __WASI_ESUCCESS;\n }\n return __WASI_EINVAL;\n },\n // ── random ──\n random_get(bufPtr, bufLen) {\n const memU8 = u8();\n const CHUNK = 65536;\n let off = 0;\n while (off < bufLen) {\n const n = Math.min(bufLen - off, CHUNK);\n crypto.getRandomValues(memU8.subarray(bufPtr + off, bufPtr + off + n));\n off += n;\n }\n return __WASI_ESUCCESS;\n },\n // A yield is a no-op for a single-threaded guest and a real scheduling\n // point for a threaded one — the same syscall, answered by whoever owns\n // the runnable set.\n sched_yield() {\n return __wasiThreads ? __wasiThreads.yieldNow() : __WASI_ESUCCESS;\n },\n // ── WASI socket and polling support B8: poll_oneoff FULL ────────────────────────────────\n //\n // Spec: WASI preview1 poll_oneoff(in_subscriptions, out_events,\n // nsubscriptions, *retNevents) blocks until at least one event fires,\n // writes events to out_events, returns count via *retNevents.\n //\n // Subscription layout (48B per entry, align 8):\n // +0 userdata: u64\n // +8 tag: u8 (EVENTTYPE_CLOCK=0 | FD_READ=1 | FD_WRITE=2)\n // +9..15 pad\n // +16 CLOCK: id:u32, +24 timeout:u64, +32 precision:u64, +40 flags:u16\n // FD_R/W: file_descriptor:u32\n //\n // Event layout (32B per entry, align 8):\n // +0 userdata: u64\n // +8 error: u16\n // +10 type: u8\n // +11..15 pad\n // +16 nbytes: u64 (fd events) — 0 for clock\n // +24 flags: u16 (fd events) — 0 here (no peer-hangup detection)\n // +26..31 pad\n //\n // Implementation: async fn that:\n // 1. Parses all subscriptions.\n // 2. Builds a Promise per subscription:\n // - CLOCK: setTimeout(deadline) → resolves with subscription idx.\n // - FD_READ/WRITE on regular file/dir/stdio: always-resolved Promise.\n // - FD_READ on socket: socket.readable.getReader().read() peek.\n // - FD_WRITE on socket: always-resolved (writable streams have\n // unbounded queue from the wasm side's perspective).\n // 3. Promise.race over all of them.\n // 4. After race resolves, drain all NOW-ready subscriptions\n // (winning + any others that also resolved or were always-ready).\n // 5. Write events; return count.\n //\n // Cancellation: pending setTimeouts and reader-locks are cleaned up\n // on every iteration to avoid leaking resources between poll calls.\n //\n // Wrapped in WebAssembly.Suspending at the imports-object finalise\n // point (with sock_*). When Suspending is unavailable, the bare async\n // fn returns a Promise which the wasm caller cannot consume — the\n // trap surfaces via __wasiRunStartAsync's catch.\n async poll_oneoff(inSubsPtr, outEventsPtr, nsubs, retNeventsPtr) {\n const dv = view();\n if ((nsubs | 0) <= 0) {\n writeU32LE(retNeventsPtr, 0);\n return __WASI_ESUCCESS;\n }\n const subs = [];\n for (let i = 0; i < nsubs; i++) {\n const base = inSubsPtr + i * 48;\n const userdata = dv.getBigUint64(base, true);\n const tag = dv.getUint8(base + 8);\n if (tag === __WASI_EVENTTYPE_CLOCK) {\n const id = dv.getUint32(base + 16, true);\n const timeout = dv.getBigUint64(base + 24, true);\n const precision = dv.getBigUint64(base + 32, true);\n const flags = dv.getUint16(base + 40, true);\n subs.push({ idx: i, userdata, tag, id, timeout, precision, flags });\n } else if (tag === __WASI_EVENTTYPE_FD_READ || tag === __WASI_EVENTTYPE_FD_WRITE) {\n const fd = dv.getUint32(base + 16, true);\n subs.push({ idx: i, userdata, tag, fd });\n } else {\n subs.push({ idx: i, userdata, tag, badTag: true });\n }\n }\n const timerIds = new Array(subs.length).fill(null);\n const readerLocks = [];\n const monoNowNs = () => {\n const ms = typeof performance !== \"undefined\" && performance.now ? performance.now() : Date.now();\n return BigInt(Math.floor(ms * 1e3)) * 1000n;\n };\n const promises = subs.map((s) => {\n if (s.badTag) {\n return Promise.resolve({\n idx: s.idx,\n error: __WASI_EINVAL,\n type: s.tag,\n nbytes: 0n,\n flags: 0\n });\n }\n if (s.tag === __WASI_EVENTTYPE_CLOCK) {\n let deadlineNs;\n if ((s.flags & __WASI_SUBCLOCKFLAGS_ABSTIME) !== 0) {\n deadlineNs = s.timeout;\n } else {\n const nowNs = s.id === __WASI_CLOCK_REALTIME ? BigInt(Date.now()) * 1000000n : monoNowNs();\n deadlineNs = nowNs + s.timeout;\n }\n const nowAgain = s.id === __WASI_CLOCK_REALTIME ? BigInt(Date.now()) * 1000000n : monoNowNs();\n const remainNs = deadlineNs > nowAgain ? deadlineNs - nowAgain : 0n;\n const remainMs = Number(remainNs / 1000000n);\n return new Promise((resolve) => {\n const t = setTimeout(() => resolve({\n idx: s.idx,\n error: __WASI_ESUCCESS,\n type: s.tag,\n nbytes: 0n,\n flags: 0\n }), remainMs > 0 ? remainMs : 0);\n timerIds[s.idx] = t;\n });\n }\n const entry = fdTable.get(s.fd);\n if (!entry) {\n return Promise.resolve({\n idx: s.idx,\n error: __WASI_EBADF,\n type: s.tag,\n nbytes: 0n,\n flags: 0\n });\n }\n if (entry.kind === \"file\" || entry.kind === \"dir\" || entry.kind === \"preopen\" || entry.kind === \"stdin\" || entry.kind === \"stdout\" || entry.kind === \"stderr\") {\n let nbytes = 0n;\n if (entry.kind === \"file\" && s.tag === __WASI_EVENTTYPE_FD_READ) {\n const f = getFile(entry.vfsPath);\n if (f) {\n const remain = f.length - (entry.offset || 0);\n nbytes = remain > 0 ? BigInt(remain) : 0n;\n }\n } else if (s.tag === __WASI_EVENTTYPE_FD_WRITE) {\n nbytes = 0xFFFFFFFFn;\n }\n return Promise.resolve({\n idx: s.idx,\n error: __WASI_ESUCCESS,\n type: s.tag,\n nbytes,\n flags: 0\n });\n }\n if (entry.kind === \"listener\") {\n if (s.tag === __WASI_EVENTTYPE_FD_WRITE) {\n return Promise.resolve({ idx: s.idx, error: __WASI_ESUCCESS, type: s.tag, nbytes: 0n, flags: 0 });\n }\n const kernel = globalThis.__nimbusVirtualSockets;\n if (!kernel) {\n return Promise.resolve({ idx: s.idx, error: __WASI_ENOSYS, type: s.tag, nbytes: 0n, flags: 0 });\n }\n const ready2 = () => ({\n idx: s.idx,\n error: __WASI_ESUCCESS,\n type: s.tag,\n nbytes: BigInt(kernel.pending(entry.port)),\n flags: 0\n });\n if (kernel.pending(entry.port) > 0) return Promise.resolve(ready2());\n return kernel.waitReadable([entry.port], null).then(ready2);\n }\n if (entry.kind === \"socket\") {\n if (s.tag === __WASI_EVENTTYPE_FD_WRITE) {\n return Promise.resolve({\n idx: s.idx,\n error: __WASI_ESUCCESS,\n type: s.tag,\n nbytes: 0xFFFFFFFFn,\n flags: 0\n });\n }\n if (entry.readBuf && entry.readBufOffset < entry.readBuf.length) {\n const avail = BigInt(entry.readBuf.length - entry.readBufOffset);\n return Promise.resolve({\n idx: s.idx,\n error: __WASI_ESUCCESS,\n type: s.tag,\n nbytes: avail,\n flags: 0\n });\n }\n if (entry.eof || entry.closed) {\n return Promise.resolve({\n idx: s.idx,\n error: __WASI_ESUCCESS,\n type: s.tag,\n nbytes: 0n,\n flags: 1\n // RECV_DATA_TRUNCATED bit doesn't apply; flag 1 == HANGUP per eventrwflags_t bit 0.\n });\n }\n return (async () => {\n try {\n if (!entry.reader) entry.reader = entry.socket.readable.getReader();\n await entry.socket.opened;\n const { value, done } = await entry.reader.read();\n if (done) {\n entry.eof = true;\n entry.readBuf = new Uint8Array(0);\n entry.readBufOffset = 0;\n return {\n idx: s.idx,\n error: __WASI_ESUCCESS,\n type: s.tag,\n nbytes: 0n,\n flags: 1\n // HANGUP\n };\n }\n entry.readBuf = value instanceof Uint8Array ? value : new Uint8Array(value.buffer, value.byteOffset, value.byteLength);\n entry.readBufOffset = 0;\n return {\n idx: s.idx,\n error: __WASI_ESUCCESS,\n type: s.tag,\n nbytes: BigInt(entry.readBuf.length),\n flags: 0\n };\n } catch (e) {\n return {\n idx: s.idx,\n error: __WASI_EIO,\n type: s.tag,\n nbytes: 0n,\n flags: 0\n };\n }\n })();\n }\n return Promise.resolve({\n idx: s.idx,\n error: __WASI_EBADF,\n type: s.tag,\n nbytes: 0n,\n flags: 0\n });\n });\n const winnerResult = await Promise.race(promises);\n const ready = [];\n ready.push(winnerResult);\n const sentinel = Promise.resolve(\"__not-ready__\");\n for (let i = 0; i < promises.length; i++) {\n if (i === winnerResult.idx) continue;\n const p = promises[i];\n const probed = await Promise.race([p, sentinel]);\n if (probed !== \"__not-ready__\") {\n ready.push(probed);\n } else {\n if (timerIds[i] !== null) {\n try {\n clearTimeout(timerIds[i]);\n } catch {\n }\n timerIds[i] = null;\n }\n }\n }\n let nevents = 0;\n for (const ev of ready) {\n const off = outEventsPtr + nevents * 32;\n const subUserdata = subs[ev.idx].userdata;\n dv.setBigUint64(off, subUserdata, true);\n dv.setUint16(off + 8, ev.error, true);\n dv.setUint8(off + 10, ev.type);\n for (let p = 11; p < 16; p++) dv.setUint8(off + p, 0);\n dv.setBigUint64(off + 16, ev.nbytes || 0n, true);\n dv.setUint16(off + 24, ev.flags || 0, true);\n for (let p = 26; p < 32; p++) dv.setUint8(off + p, 0);\n nevents++;\n }\n writeU32LE(retNeventsPtr, nevents);\n return __WASI_ESUCCESS;\n },\n // WASI socket and polling support B7: sockets via cloudflare:sockets connect() + JSPI.\n //\n // sock_send/sock_recv/sock_shutdown are ASYNC fns. They await on\n // ReadableStream/WritableStream readers/writers, which means the\n // wasm caller's expectation of a sync errno return must be bridged\n // via WebAssembly.Suspending. The Suspending wrapper is applied in\n // the return statement below where the imports object is finalised\n // (not here — wrapping at definition site would shadow the bare\n // function in the imports map). The async functions below have\n // signature compatible with 'new WebAssembly.Suspending(asyncFn)':\n // they return Promise<i32 errno>.\n async sock_send(fd, siDataPtr, siDataLen, _siFlags, retDataLenPtr) {\n const entry = fdTable.get(fd);\n if (!entry || entry.kind !== \"socket\") return __WASI_ENOTSOCK;\n if (entry.closed || entry.halfClosedWr) return __WASI_EPIPE;\n const dv = view();\n const memU8 = u8();\n let total = 0;\n const parts = [];\n for (let i = 0; i < siDataLen; i++) {\n const iov = siDataPtr + i * 8;\n const bufPtr = dv.getUint32(iov, true);\n const bufLen = dv.getUint32(iov + 4, true);\n if (bufLen > 0) parts.push(memU8.slice(bufPtr, bufPtr + bufLen));\n total += bufLen;\n }\n let combined;\n if (parts.length === 0) combined = new Uint8Array(0);\n else if (parts.length === 1) combined = parts[0];\n else {\n combined = new Uint8Array(total);\n let off = 0;\n for (const p of parts) {\n combined.set(p, off);\n off += p.length;\n }\n }\n try {\n if (!entry.writer) entry.writer = entry.socket.writable.getWriter();\n await entry.socket.opened;\n await entry.writer.write(combined);\n } catch (e) {\n const msg = e && e.message ? e.message : String(e);\n globalThis.__nimbusWasiLastSocketError = msg;\n if (/refused|ECONNREFUSED/i.test(msg)) return __WASI_ECONNREFUSED;\n if (/unreach|EHOSTUNREACH/i.test(msg)) return __WASI_EHOSTUNREACH;\n return __WASI_EIO;\n }\n writeU32LE(retDataLenPtr, total);\n return __WASI_ESUCCESS;\n },\n async sock_recv(fd, riDataPtr, riDataLen, _riFlags, retDataLenPtr, retFlagsPtr) {\n const entry = fdTable.get(fd);\n if (!entry || entry.kind !== \"socket\") return __WASI_ENOTSOCK;\n if (entry.closed) return __WASI_ENOTCONN;\n const dv = view();\n const memU8 = u8();\n if (entry.readBufOffset >= entry.readBuf.length && !entry.eof) {\n try {\n if (!entry.reader) entry.reader = entry.socket.readable.getReader();\n await entry.socket.opened;\n const { value, done } = await entry.reader.read();\n if (done) {\n entry.eof = true;\n entry.readBuf = new Uint8Array(0);\n entry.readBufOffset = 0;\n } else {\n entry.readBuf = value instanceof Uint8Array ? value : new Uint8Array(value.buffer, value.byteOffset, value.byteLength);\n entry.readBufOffset = 0;\n }\n } catch (e) {\n const msg = e && e.message ? e.message : String(e);\n if (/refused|ECONNREFUSED/i.test(msg)) return __WASI_ECONNREFUSED;\n if (/unreach|EHOSTUNREACH/i.test(msg)) return __WASI_EHOSTUNREACH;\n return __WASI_EIO;\n }\n }\n let total = 0;\n for (let i = 0; i < riDataLen; i++) {\n const iov = riDataPtr + i * 8;\n const bufPtr = dv.getUint32(iov, true);\n const bufLen = dv.getUint32(iov + 4, true);\n const remain = entry.readBuf.length - entry.readBufOffset;\n if (remain <= 0) break;\n const n = Math.min(bufLen, remain);\n memU8.set(entry.readBuf.subarray(entry.readBufOffset, entry.readBufOffset + n), bufPtr);\n entry.readBufOffset += n;\n total += n;\n if (n < bufLen) break;\n }\n writeU32LE(retDataLenPtr, total);\n if (typeof retFlagsPtr === \"number\") {\n dv.setUint16(retFlagsPtr, 0, true);\n }\n return __WASI_ESUCCESS;\n },\n async sock_shutdown(fd, how) {\n const entry = fdTable.get(fd);\n if (!entry || entry.kind !== \"socket\") return __WASI_ENOTSOCK;\n const wantRd = (how & __WASI_SDFLAGS_RD) !== 0;\n const wantWr = (how & __WASI_SDFLAGS_WR) !== 0;\n try {\n if (wantRd && wantWr) {\n if (entry.writer) {\n try {\n await entry.writer.close();\n } catch {\n }\n }\n if (entry.reader) {\n try {\n await entry.reader.cancel();\n } catch {\n }\n }\n try {\n await entry.socket.close();\n } catch {\n }\n entry.halfClosedWr = true;\n entry.eof = true;\n entry.closed = true;\n return __WASI_ESUCCESS;\n }\n if (wantWr && !entry.halfClosedWr) {\n entry.halfClosedWr = true;\n }\n if (wantRd && !entry.eof) {\n if (entry.reader) {\n try {\n await entry.reader.cancel();\n } catch {\n }\n }\n entry.eof = true;\n }\n } catch (e) {\n return __WASI_EIO;\n }\n return __WASI_ESUCCESS;\n },\n // The last preview1 syscall, and the one a guest written against libc\n // reaches for: wasi-libc's accept(2) is a direct call to this and nothing\n // else. The path_open route — open '/dev/nimbus/listen/N', read the id,\n // open '/dev/nimbus/socket/<id>' — exists because ruby.wasm resolves\n // descriptors through its own fd table and cannot use one handed to it out\n // of band. That constraint belongs to guests layered over wasi-vfs, not to\n // WASI. Both routes end at __wasiAdoptSocket, so an accepted connection is\n // the same kind of fd whichever way it arrived.\n async sock_accept(fd, flags, fdOutPtr) {\n const entry = fdTable.get(fd);\n if (!entry) return __WASI_EBADF;\n if (entry.kind !== \"listener\") return __WASI_ENOTSOCK;\n const kernel = __wasiKernelOrNull(\"connections cannot be accepted\");\n if (!kernel) return __WASI_ENOSYS;\n const nonblock = ((entry.fdflags | flags) & __WASI_FDFLAGS_NONBLOCK) !== 0;\n try {\n let accepted;\n if (nonblock) {\n accepted = kernel.acceptNow(entry.port);\n if (!accepted) return __WASI_EAGAIN;\n } else {\n accepted = await kernel.accept(entry.port);\n }\n const socket = kernel.streamFor(accepted.id);\n writeU32LE(fdOutPtr, __wasiAdoptSocket(socket, flags & __WASI_FDFLAGS_NONBLOCK));\n return __WASI_ESUCCESS;\n } catch (e) {\n globalThis.__nimbusWasiLastSocketError = e && e.message ? e.message : String(e);\n return __WASI_ENOTCONN;\n }\n }\n };\n const __rawSockRecv = imports.sock_recv;\n const __rawSockSend = imports.sock_send;\n const parkable = [\n \"sock_send\",\n \"sock_recv\",\n \"sock_shutdown\",\n \"sock_accept\",\n \"poll_oneoff\",\n \"fd_read\",\n \"fd_write\",\n \"fd_pread\",\n \"path_filestat_get\"\n ];\n for (const name of parkable) {\n if (typeof imports[name] === \"function\") imports[name] = withParkDeadline(imports[name]);\n }\n if (opts.parking === \"none\") {\n if (opts.threads) {\n throw new Error(\n \"wasi: a threads build cannot run with parking:none; its threads block on a software futex, which requires the guest to be entered under WebAssembly.promising\"\n );\n }\n for (const name of parkable) {\n const fn = imports[name];\n if (typeof fn !== \"function\") continue;\n imports[name] = function noPark(...args) {\n const r = fn.apply(this, args);\n if (r && typeof r.then === \"function\") {\n throw new Error(\n \"wasi: \" + name + \" parked in a non-suspending instance; a guest that cannot be entered under WebAssembly.promising must not be given a filesystem or socket that blocks\"\n );\n }\n return r;\n };\n }\n } else if (typeof WebAssembly !== \"undefined\" && typeof WebAssembly.Suspending === \"function\") {\n imports.sock_send = new WebAssembly.Suspending(imports.sock_send);\n imports.sock_recv = new WebAssembly.Suspending(imports.sock_recv);\n imports.sock_shutdown = new WebAssembly.Suspending(imports.sock_shutdown);\n imports.sock_accept = new WebAssembly.Suspending(imports.sock_accept);\n imports.poll_oneoff = new WebAssembly.Suspending(imports.poll_oneoff);\n imports.fd_read = new WebAssembly.Suspending(imports.fd_read);\n imports.fd_write = new WebAssembly.Suspending(imports.fd_write);\n imports.fd_pread = new WebAssembly.Suspending(imports.fd_pread);\n imports.path_filestat_get = new WebAssembly.Suspending(imports.path_filestat_get);\n if (opts.threads) imports.sched_yield = new WebAssembly.Suspending(imports.sched_yield);\n }\n return {\n wasiImport: imports,\n getStdout: () => stdoutBuf,\n getStderr: () => stderrBuf\n };\n}\nfunction __wasiRunStart(instance, ctx) {\n try {\n const start = instance.exports._start;\n if (typeof start !== \"function\") {\n return { exitCode: 1, error: \"_start is not a function (got \" + typeof start + \")\" };\n }\n start();\n return { exitCode: 0 };\n } catch (e) {\n if (e && e.constructor && e.constructor.name === \"__WasiExit\") {\n return { exitCode: e.code };\n }\n return { exitCode: 1, error: e && e.message ? e.message : String(e) };\n }\n}\nasync function __wasiRunStartAsync(instance, ctx) {\n try {\n const start = instance.exports._start;\n if (typeof start !== \"function\") {\n return { exitCode: 1, error: \"_start is not a function (got \" + typeof start + \")\" };\n }\n if (typeof WebAssembly !== \"undefined\" && typeof WebAssembly.promising === \"function\") {\n const promisingStart = WebAssembly.promising(start);\n await promisingStart();\n } else {\n start();\n }\n return { exitCode: 0 };\n } catch (e) {\n if (e && e.constructor && e.constructor.name === \"__WasiExit\") {\n return { exitCode: e.code };\n }\n return { exitCode: 1, error: e && e.message ? e.message : String(e) };\n }\n}\nglobalThis.__wasiAdoptSupervisor = __wasiAdoptSupervisor;\nglobalThis.__wasiDrainPersist = __wasiDrainPersist;\nglobalThis.__wasiRevalidateFS = __wasiRevalidateFS;";