@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,882 @@
1
+ /**
2
+ * ProcessLogStore — per-PID ring buffer for facet stdout/stderr.
3
+ *
4
+ * Problem we solve:
5
+ * Facet stdout/stderr flows through `_rpcStdout`/`_rpcStderr` in
6
+ * NimbusSession. If the WebSocket terminal is attached, data reaches
7
+ * the user. If not — or if a process crashes synchronously before its
8
+ * output has been flushed through — the data is gone.
9
+ *
10
+ * What this does:
11
+ * - Buffer every stdout/stderr chunk in a fixed-byte ring, keyed by PID.
12
+ * - Split oversize chunks at 4 KB so no single write can swamp a PID's
13
+ * allotted 64 KB.
14
+ * - Tag binary chunks (null bytes / high non-printable ratio) as
15
+ * `{type: 'binary', size: N}` so replay shows `[N bytes of binary
16
+ * output]` instead of garbled terminal state.
17
+ * - Track process exit separately from the append stream so `logs` can
18
+ * print a clean footer and `_emitExitDump` can fire exactly once.
19
+ * - Retain logs for `retainAfterExitMs` (default 10 min) past exit —
20
+ * far longer than ProcessTable.reap's 60 s — so users have time to
21
+ * read a crash dump.
22
+ * - Provide pub-sub via `subscribe(pid, cb)` so `logs -f` is O(1) per
23
+ * chunk, not a poll loop.
24
+ *
25
+ * Non-goals:
26
+ * - Routing raw Uint8Array. RPC boundary already strings the data
27
+ * (SupervisorRPC.stdout(data: string)), so we store strings.
28
+ *
29
+ * Hibernation persistence:
30
+ * The store optionally accepts a `PersistAdapter` (set via
31
+ * `setPersist`). When set:
32
+ * - `append` / `markExit` mark the pid dirty in memory; the actual
33
+ * SQL write is batched into `flush()`. Callers schedule `flush()`
34
+ * from a debounced alarm OR a webSocketClose handler so writes
35
+ * don't run on the hot stdout path.
36
+ * - First read of a pid (`tail`/`all`/`subscribe`/`getExit`/`has`)
37
+ * lazily hydrates from the adapter. Subsequent reads stay in
38
+ * memory until eviction.
39
+ * - Eviction (per-pid byte cap, dropOlderThan, maxPids) cascades
40
+ * to the adapter on the next `flush()` — never inline, so eviction
41
+ * under load doesn't write-amplify.
42
+ * When NOT set: behaviour is byte-identical to pre-W9 (in-memory only).
43
+ */
44
+
45
+ export type LogStream = 'stdout' | 'stderr';
46
+
47
+ export interface LogChunk {
48
+ ts: number;
49
+ stream: LogStream;
50
+ /**
51
+ * `data` is the raw chunk content (ANSI escapes preserved). For
52
+ * binary-detected chunks it's a placeholder like
53
+ * `[237 bytes of binary output]\n`; the original bytes are dropped.
54
+ */
55
+ data: string;
56
+ /** Set for chunks we flagged as binary — lets UI render differently. */
57
+ binary?: boolean;
58
+ }
59
+
60
+ export interface SequencedLogChunk extends LogChunk {
61
+ seq: number;
62
+ }
63
+
64
+ export interface ProcessLogReadOptions {
65
+ cursor?: number;
66
+ lines?: number;
67
+ bytes?: number;
68
+ }
69
+
70
+ export interface ProcessExitInfo {
71
+ code: number;
72
+ /** When the exit was recorded (ms epoch). */
73
+ at: number;
74
+ /** Optional synthetic reason, used by external-exit path (timeout/abort). */
75
+ reason?: string;
76
+ }
77
+
78
+ interface PidState {
79
+ chunks: LogChunk[];
80
+ /** Total bytes of `data` across all chunks (for ring eviction). */
81
+ bytes: number;
82
+ exit: ProcessExitInfo | null;
83
+ /** Last touch (append, markExit) — used by dropOlderThan. */
84
+ lastActivity: number;
85
+ subscribers: Set<(c: LogChunk) => void>;
86
+ exitSubscribers: Set<(e: ProcessExitInfo) => void>;
87
+ /**
88
+ * W9: monotonic per-pid sequence. Each `append` increments by 1
89
+ * regardless of in-memory eviction; persisted alongside the chunk so
90
+ * after-hibernate hydrate restores chunks in append order. Resets only
91
+ * when the pid is fully dropped (dropPid / dropOlderThan / maxPids
92
+ * eviction) — same lifetime as the SQL row set for this pid.
93
+ */
94
+ nextSeq: number;
95
+ /**
96
+ * W9: chunks not yet flushed to the persist adapter. Indexed by `seq`,
97
+ * not by chunks-array offset, because in-memory eviction may shift
98
+ * the chunks array out from under a pending flush. The flush path
99
+ * iterates this list and posts to `persistChunks`.
100
+ */
101
+ dirtyChunks: { seq: number; chunk: LogChunk }[];
102
+ /** W9: set when `markExit` ran but exit not yet flushed. */
103
+ dirtyExit: boolean;
104
+ /** W9: hydrated from the adapter at least once this isolate-gen. */
105
+ hydrated: boolean;
106
+ /** W9: highest seq present in SQL after the last flush. Used by
107
+ * pruneBeforeSeq to tell the adapter how far to keep rows. */
108
+ flushedHighSeq: number;
109
+ }
110
+
111
+ /**
112
+ * live in NimbusSession (production: ctx.storage.sql) and in test
113
+ * harnesses (functional probes: in-memory mock).
114
+ *
115
+ * Contract:
116
+ * - load(pid) is called at most once per pid per isolate-gen, before
117
+ * the first read for that pid. Returning `null` means "no row" —
118
+ * the store treats the pid as fresh. Returning `{ chunks: [], exit: null }`
119
+ * means "explicitly empty" (also fresh).
120
+ * - persistChunks / persistExit are called ONLY from `flush()`. Each
121
+ * call carries every NEW chunk since the last flush for that pid;
122
+ * the adapter MUST insert all of them in seq order.
123
+ * - dropPid removes ALL rows for the pid from BOTH tables. Called on
124
+ * dropOlderThan + maxPids eviction.
125
+ * - pruneBeforeSeq removes chunk rows below the given seq. Called
126
+ * inside flush after the per-pid byte cap is exceeded; the store
127
+ * computes the cutoff seq from its own ring state.
128
+ * - Adapters MUST be synchronous from the store's POV. Real SQL
129
+ * calls in the DO are synchronous (storage.sql.exec is blocking
130
+ * against the SQLite engine); KV is not used by W9.
131
+ */
132
+ export interface PersistAdapter {
133
+ load(pid: number): { chunks: LogChunk[]; exit: ProcessExitInfo | null } | null;
134
+ persistChunks(pid: number, rows: { seq: number; chunk: LogChunk }[]): void;
135
+ persistExit(pid: number, info: ProcessExitInfo): void;
136
+ dropPid(pid: number): void;
137
+ pruneBeforeSeq(pid: number, seq: number): void;
138
+ }
139
+
140
+ export interface ProcessLogStoreOptions {
141
+ /** Per-PID ring cap in bytes. Default 64 KB. */
142
+ perPidBytes?: number;
143
+ /**
144
+ * Max chunk length in bytes. Writes longer than this are split into
145
+ * multiple chunks. Default 4 KB. Splitting may break a single ANSI
146
+ * escape sequence across chunks — tolerated because replay tools
147
+ * concatenate chunks before rendering.
148
+ */
149
+ maxChunkBytes?: number;
150
+ /** Retention past process exit. Default 10 min. */
151
+ retainAfterExitMs?: number;
152
+ /**
153
+ * Global cap on the number of tracked PIDs. When `_getOrCreate`
154
+ * would push the count above this, the store evicts in this order
155
+ * of preference:
156
+ * 1. Oldest EXITED pid with zero subscribers.
157
+ * 2. Oldest pid by `lastActivity` (any state) with zero subscribers.
158
+ * 3. Fail silently — an edge case where every pid is actively
159
+ * subscribed; the new entry is still inserted and the cap is
160
+ * briefly exceeded.
161
+ * Default 500. Protects against a 1000-pid fork-bomb pinning
162
+ * ~50 MB of ring buffers for 10 minutes.
163
+ */
164
+ maxPids?: number;
165
+ }
166
+
167
+ /** Detect binary content — rough but good enough for "this is not text". */
168
+ function looksBinary(s: string): boolean {
169
+ if (s.length === 0) return false;
170
+ // Null byte is the strongest signal.
171
+ if (s.indexOf('\x00') !== -1) return true;
172
+ // Otherwise sample up to 512 chars for non-printable non-whitespace.
173
+ const sample = s.length > 512 ? s.substring(0, 512) : s;
174
+ let bad = 0;
175
+ for (let i = 0; i < sample.length; i++) {
176
+ const c = sample.charCodeAt(i);
177
+ // Allow tab (9), LF (10), CR (13), ESC (27 — ANSI), and >= 32.
178
+ if (c === 9 || c === 10 || c === 13 || c === 27 || c >= 32) continue;
179
+ bad++;
180
+ }
181
+ return bad / sample.length > 0.1;
182
+ }
183
+
184
+ /**
185
+ * Strip ANSI CSI escape sequences (colors, cursor, etc.) for --plain mode.
186
+ * Keeps the rest of the text intact.
187
+ */
188
+ export function stripAnsi(s: string): string {
189
+ // Match CSI and OSC sequences.
190
+ return s
191
+ .replace(/\x1b\[[0-?]*[ -/]*[@-~]/g, '')
192
+ .replace(/\x1b\][^\x07\x1b]*(?:\x07|\x1b\\)/g, '')
193
+ .replace(/\x1b[=>()]/g, '');
194
+ }
195
+
196
+ export class ProcessLogStore {
197
+ private readonly perPidBytes: number;
198
+ private readonly maxChunkBytes: number;
199
+ private readonly retainAfterExitMs: number;
200
+ private readonly maxPids: number;
201
+ private pids = new Map<number, PidState>();
202
+ /** Cumulative count of PIDs evicted by the cap. */
203
+ private _droppedPids = 0;
204
+
205
+ // ── W9 persistence state ────────────────────────────────────────────
206
+ /** Optional persistence backend. When null, store is in-memory only. */
207
+ private _persist: PersistAdapter | null = null;
208
+ /**
209
+ * Pids whose rows are dropped on next flush (eviction queue). Keyed by
210
+ * pid; value is `true` for "pid was evicted from memory; ask adapter to
211
+ * delete all rows". Distinct from dirtyChunks because the adapter call
212
+ * is dropPid, not persistChunks.
213
+ */
214
+ private _dropQueue = new Set<number>();
215
+ /**
216
+ * Pids that need pruneBeforeSeq on next flush — keyed by pid → cutoff
217
+ * seq (delete all rows with seq < cutoff). Set whenever an in-memory
218
+ * `_evict` shifts the chunks array; the cutoff is the lowest seq that
219
+ * remains in memory.
220
+ */
221
+ private _pruneQueue = new Map<number, number>();
222
+ /** Cumulative flushed-bytes counter (telemetry). */
223
+ private _flushedChunks = 0;
224
+ private _flushedBytes = 0;
225
+ private _flushCount = 0;
226
+ private _lastFlushAt = 0;
227
+ private _lastFlushDurationMs = 0;
228
+ /** Cumulative hydrate counters. */
229
+ private _hydratedPids = 0;
230
+ private _hydratedChunks = 0;
231
+ private _hydratedBytes = 0;
232
+
233
+ constructor(opts: ProcessLogStoreOptions = {}) {
234
+ this.perPidBytes = opts.perPidBytes ?? 64 * 1024;
235
+ this.maxChunkBytes = opts.maxChunkBytes ?? 4 * 1024;
236
+ this.retainAfterExitMs = opts.retainAfterExitMs ?? 10 * 60 * 1000;
237
+ this.maxPids = opts.maxPids ?? 500;
238
+ }
239
+
240
+ /**
241
+ * W9: install a persistence adapter. Call once at NimbusSession init,
242
+ * after the SQL tables exist. Pre-existing in-memory state is NOT
243
+ * pushed to the adapter — only state mutated AFTER setPersist is
244
+ * subject to flush. This is fine in practice: NimbusSession sets the
245
+ * adapter in the constructor, before any append happens.
246
+ */
247
+ setPersist(adapter: PersistAdapter): void {
248
+ this._persist = adapter;
249
+ }
250
+
251
+ // ── Instance-level broadcast hooks ──────────────────────────────────
252
+ /**
253
+ * Fire for EVERY appended chunk / recorded exit, across all pids, in
254
+ * addition to the per-pid `subscribe`/`subscribeExit` callbacks.
255
+ *
256
+ * This is the hibernation-safe fan-out seam for the process-terminal
257
+ * WebSockets: per-connection subscriptions are closures on ONE DO
258
+ * instance and silently vanish when the instance is reset or restarted
259
+ * (the accepted WebSocket itself survives via the hibernation API, so
260
+ * a surviving client would otherwise stream nothing forever). The DO
261
+ * wires one broadcast hook per instance that routes chunks to accepted
262
+ * sockets by their serialized attachment — state that survives resets.
263
+ */
264
+ private _broadcastChunk: ((pid: number, chunk: LogChunk) => void) | null = null;
265
+ private _broadcastExit: ((pid: number, exit: ProcessExitInfo) => void) | null = null;
266
+
267
+ setBroadcast(
268
+ onChunk: (pid: number, chunk: LogChunk) => void,
269
+ onExit: (pid: number, exit: ProcessExitInfo) => void,
270
+ ): void {
271
+ this._broadcastChunk = onChunk;
272
+ this._broadcastExit = onExit;
273
+ }
274
+
275
+ /** Is there ANY state for this pid (including exit-only)? */
276
+ has(pid: number): boolean {
277
+ if (this.pids.has(pid)) return true;
278
+ return this._maybeHydrateRead(pid) !== null;
279
+ }
280
+
281
+ /** Current buffered bytes for this PID (post-eviction). */
282
+ size(pid: number): number {
283
+ return this.pids.get(pid)?.bytes ?? 0;
284
+ }
285
+
286
+ getExit(pid: number): ProcessExitInfo | null {
287
+ const s = this._maybeHydrateRead(pid);
288
+ return s?.exit ?? null;
289
+ }
290
+
291
+ /**
292
+ * W9: read-side helper. If we have an adapter and the pid has any rows
293
+ * in SQL, lazy-create the in-memory state (which triggers hydrate).
294
+ * Returns the state or null. Performs at most one adapter `load` per
295
+ * pid per isolate-gen by routing through `_getOrCreate` → `_hydrate`,
296
+ * which is guarded by `state.hydrated`.
297
+ */
298
+ private _maybeHydrateRead(pid: number): PidState | null {
299
+ let s = this.pids.get(pid) ?? null;
300
+ if (s) return s;
301
+ if (!this._persist) return null;
302
+ // _getOrCreate triggers _hydrate which calls load(). To avoid an
303
+ // extra load() just to decide whether to materialise, we always
304
+ // create and then check whether hydrate populated anything. If it
305
+ // didn't, drop the empty state to keep the maxPids cap clean.
306
+ s = this._getOrCreate(pid);
307
+ if (s.chunks.length === 0 && !s.exit) {
308
+ // Nothing came back from SQL — drop the empty state so we don't
309
+ // pin a cap slot for a pid that never existed.
310
+ this.pids.delete(pid);
311
+ return null;
312
+ }
313
+ return s;
314
+ }
315
+
316
+ /**
317
+ * Append a chunk. `data` may be huge or binary; we split / tag as
318
+ * needed. Notifies any `subscribe()`rs for this pid.
319
+ */
320
+ append(pid: number, stream: LogStream, data: string): void {
321
+ if (!data) return;
322
+ const state = this._getOrCreate(pid);
323
+
324
+ // Binary detection on the raw incoming chunk (before splitting).
325
+ if (looksBinary(data)) {
326
+ const placeholder = `[${data.length} bytes of binary output]\n`;
327
+ const chunk: LogChunk = {
328
+ ts: Date.now(),
329
+ stream,
330
+ data: placeholder,
331
+ binary: true,
332
+ };
333
+ this._appendChunk(pid, state, chunk);
334
+ return;
335
+ }
336
+
337
+ // Split oversize writes into multiple chunks.
338
+ let offset = 0;
339
+ while (offset < data.length) {
340
+ const slice = data.substring(offset, offset + this.maxChunkBytes);
341
+ const chunk: LogChunk = {
342
+ ts: Date.now(),
343
+ stream,
344
+ data: slice,
345
+ };
346
+ this._appendChunk(pid, state, chunk);
347
+ offset += slice.length;
348
+ }
349
+ }
350
+
351
+ /** W9: shared insert path — assigns a seq, marks dirty, evicts, fans out. */
352
+ private _appendChunk(pid: number, state: PidState, chunk: LogChunk): void {
353
+ const seq = state.nextSeq++;
354
+ state.chunks.push(chunk);
355
+ state.bytes += chunk.data.length;
356
+ state.lastActivity = chunk.ts;
357
+ if (this._persist) {
358
+ state.dirtyChunks.push({ seq, chunk });
359
+ }
360
+ this._evict(state, pid);
361
+ this._fanout(state, chunk);
362
+ if (this._broadcastChunk) {
363
+ try { this._broadcastChunk(pid, chunk); } catch { /* swallow broadcast errors */ }
364
+ }
365
+ }
366
+
367
+ /**
368
+ * Return chunks with stable per-PID sequence numbers. `cursor` is an
369
+ * exclusive read position: pass the previous returned `cursor` to receive only
370
+ * newer chunks. If older chunks have been evicted, `truncated` is true
371
+ * and the response starts at the oldest retained chunk.
372
+ */
373
+ read(
374
+ pid: number,
375
+ opts: ProcessLogReadOptions = {},
376
+ ): { chunks: SequencedLogChunk[]; cursor: number; truncated: boolean } {
377
+ const state = this._maybeHydrateRead(pid);
378
+ if (!state) return { chunks: [], cursor: 0, truncated: false };
379
+
380
+ const firstSeq = state.nextSeq - state.chunks.length;
381
+ const cursor = Number.isFinite(opts.cursor) ? Number(opts.cursor) : null;
382
+ const start = cursor === null
383
+ ? this._tailStartIndex(state, opts)
384
+ : Math.max(0, Math.floor(cursor) - firstSeq);
385
+ const truncated = cursor !== null && Math.floor(cursor) < firstSeq;
386
+
387
+ return {
388
+ chunks: state.chunks.slice(start).map((chunk, index) => ({
389
+ ...chunk,
390
+ seq: firstSeq + start + index,
391
+ })),
392
+ cursor: state.nextSeq,
393
+ truncated,
394
+ };
395
+ }
396
+
397
+ /** Return the last N chunks (by line count) in chronological order. */
398
+ tail(pid: number, opts: Pick<ProcessLogReadOptions, 'lines' | 'bytes'> = {}): LogChunk[] {
399
+ const state = this._maybeHydrateRead(pid);
400
+ if (!state) return [];
401
+ if (opts.lines === undefined && opts.bytes === undefined) return [...state.chunks];
402
+ if (opts.lines === 0 || opts.bytes === 0) return [];
403
+
404
+ // Walk from newest → oldest, accumulate until we hit the limit.
405
+ const out: LogChunk[] = [];
406
+ let lines = 0;
407
+ let bytes = 0;
408
+ for (let i = state.chunks.length - 1; i >= 0; i--) {
409
+ const c = state.chunks[i];
410
+ out.unshift(c);
411
+ bytes += c.data.length;
412
+ if (opts.lines !== undefined) {
413
+ // Count \n in chunk + 1 if chunk doesn't end with \n but has content.
414
+ for (let j = 0; j < c.data.length; j++) if (c.data.charCodeAt(j) === 10) lines++;
415
+ if (lines >= opts.lines) break;
416
+ }
417
+ if (opts.bytes !== undefined && bytes >= opts.bytes) break;
418
+ }
419
+ return out;
420
+ }
421
+
422
+ private _tailStartIndex(state: PidState, opts: Pick<ProcessLogReadOptions, 'lines' | 'bytes'>): number {
423
+ if (opts.lines === undefined && opts.bytes === undefined) return 0;
424
+ if (opts.lines === 0 || opts.bytes === 0) return state.chunks.length;
425
+
426
+ let lines = 0;
427
+ let bytes = 0;
428
+ for (let i = state.chunks.length - 1; i >= 0; i--) {
429
+ const chunk = state.chunks[i];
430
+ bytes += chunk.data.length;
431
+ if (opts.lines !== undefined) {
432
+ for (let j = 0; j < chunk.data.length; j++) {
433
+ if (chunk.data.charCodeAt(j) === 10) lines++;
434
+ }
435
+ if (lines >= opts.lines) return i;
436
+ }
437
+ if (opts.bytes !== undefined && bytes >= opts.bytes) return i;
438
+ }
439
+ return 0;
440
+ }
441
+
442
+ /** All chunks for a pid, chronological. */
443
+ all(pid: number): LogChunk[] {
444
+ const state = this._maybeHydrateRead(pid);
445
+ return state ? [...state.chunks] : [];
446
+ }
447
+
448
+ /**
449
+ * The chunks already buffered for a pid, without consulting the
450
+ * persistence adapter.
451
+ *
452
+ * For a pid whose whole life is inside the current request, a hydrate is a
453
+ * guaranteed miss — nothing has flushed it — and the miss is not free: the
454
+ * adapter's `load` bootstraps the W9 schema, so a session that never
455
+ * persists a process log still pays a durable DDL commit for the lookup.
456
+ * `all()` stays the right call for a pid that may predate this isolate.
457
+ */
458
+ buffered(pid: number): LogChunk[] {
459
+ const state = this.pids.get(pid);
460
+ return state ? [...state.chunks] : [];
461
+ }
462
+
463
+ /** Record exit. Idempotent: second call is ignored (preserves first). */
464
+ markExit(pid: number, code: number, reason?: string): void {
465
+ const state = this._getOrCreate(pid);
466
+ if (state.exit) return;
467
+ const info: ProcessExitInfo = { code, at: Date.now(), reason };
468
+ state.exit = info;
469
+ state.lastActivity = info.at;
470
+ if (this._persist) state.dirtyExit = true;
471
+ for (const cb of state.exitSubscribers) {
472
+ try { cb(info); } catch { /* swallow subscriber errors */ }
473
+ }
474
+ if (this._broadcastExit) {
475
+ try { this._broadcastExit(pid, info); } catch { /* swallow broadcast errors */ }
476
+ }
477
+ }
478
+
479
+ /**
480
+ * Subscribe to new chunks for this pid. Returns unsubscribe fn.
481
+ * Subscriber is called synchronously from within `append`.
482
+ * W9: also hydrates from SQL on first touch so a post-hibernate
483
+ * subscriber sees pre-hibernate context in the next backlog frame.
484
+ */
485
+ subscribe(pid: number, cb: (c: LogChunk) => void): () => void {
486
+ const state = this._getOrCreate(pid);
487
+ state.subscribers.add(cb);
488
+ return () => { state.subscribers.delete(cb); };
489
+ }
490
+
491
+ /** Subscribe to the exit event. Fires once. */
492
+ subscribeExit(pid: number, cb: (e: ProcessExitInfo) => void): () => void {
493
+ const state = this._getOrCreate(pid);
494
+ state.exitSubscribers.add(cb);
495
+ return () => { state.exitSubscribers.delete(cb); };
496
+ }
497
+
498
+ /**
499
+ * Drop all state for any PID whose process exited more than `ageMs`
500
+ * ago. Returns the number of PIDs purged.
501
+ *
502
+ * Optional `isOrphan(pid)` callback identifies PIDs whose owning
503
+ * process vanished without a recorded exit (e.g., a long-running
504
+ * facet that hung and was GC'd). Such entries are dropped after a
505
+ * longer grace window so leaked buffers don't accumulate forever.
506
+ */
507
+ dropOlderThan(
508
+ ageMs: number = this.retainAfterExitMs,
509
+ isOrphan?: (pid: number) => boolean,
510
+ ): number {
511
+ const now = Date.now();
512
+ const cutoff = now - ageMs;
513
+ const orphanCutoff = now - ageMs * 3; // 30 min default for orphans
514
+ let dropped = 0;
515
+ for (const [pid, state] of this.pids) {
516
+ if (state.subscribers.size !== 0) continue;
517
+ if (state.exit && state.exit.at < cutoff) {
518
+ this.pids.delete(pid);
519
+ if (this._persist) this._dropQueue.add(pid);
520
+ dropped++;
521
+ continue;
522
+ }
523
+ // Orphan sweep: no exit recorded, no live subscribers, last
524
+ // activity older than the orphan cutoff, AND the process table
525
+ // confirms the process is gone.
526
+ if (
527
+ !state.exit &&
528
+ state.lastActivity < orphanCutoff &&
529
+ isOrphan?.(pid)
530
+ ) {
531
+ this.pids.delete(pid);
532
+ if (this._persist) this._dropQueue.add(pid);
533
+ dropped++;
534
+ }
535
+ }
536
+ return dropped;
537
+ }
538
+
539
+ /**
540
+ * W9: drain dirty buffers into the persist adapter. Synchronous from
541
+ * the store's POV (the adapter's calls are sync; the production
542
+ * adapter wraps them in `ctx.storage.transactionSync`). Idempotent —
543
+ * second call without new data is a no-op.
544
+ *
545
+ * Order of operations (matters for crash resilience):
546
+ * 1. dropPid for every pid in the drop queue (frees SQL space first).
547
+ * 2. pruneBeforeSeq for any pid with a queued cutoff.
548
+ * 3. persistChunks for every pid with dirty chunks.
549
+ * 4. persistExit for every pid with a dirty exit.
550
+ *
551
+ * Step 3 BEFORE step 4 is the key crash-resilience invariant: if the
552
+ * actor terminates between (3) and (4), the chunks are persisted but
553
+ * the exit is not — on next hydrate we'll see the chunks but no exit
554
+ * row, which is the same state we'd be in if the process were still
555
+ * running. The reverse (exit row but missing chunks) would surface a
556
+ * misleading "exited cleanly with no output" frame.
557
+ */
558
+ flush(): void {
559
+ if (!this._persist) {
560
+ // No adapter — clear any dirty markers so the booleans stay sane.
561
+ this._dropQueue.clear();
562
+ this._pruneQueue.clear();
563
+ for (const state of this.pids.values()) {
564
+ state.dirtyChunks.length = 0;
565
+ state.dirtyExit = false;
566
+ }
567
+ return;
568
+ }
569
+ const t0 = Date.now();
570
+ const adapter = this._persist;
571
+
572
+ // Step 1: drop evicted pids first — the SQL DELETE for them might
573
+ // free space the chunk INSERTs need under tight memory.
574
+ for (const pid of this._dropQueue) {
575
+ try { adapter.dropPid(pid); } catch { /* fail-soft */ }
576
+ }
577
+ this._dropQueue.clear();
578
+
579
+ // Step 2: prune over-capped chunks for still-resident pids.
580
+ for (const [pid, cutoff] of this._pruneQueue) {
581
+ try { adapter.pruneBeforeSeq(pid, cutoff); } catch { /* fail-soft */ }
582
+ }
583
+ this._pruneQueue.clear();
584
+
585
+ let chunkBytesFlushed = 0;
586
+ let chunksFlushedCount = 0;
587
+
588
+ // Step 3: persist new chunks (per-pid batch).
589
+ for (const [pid, state] of this.pids) {
590
+ if (state.dirtyChunks.length === 0) continue;
591
+ const rows = state.dirtyChunks;
592
+ try {
593
+ adapter.persistChunks(pid, rows);
594
+ for (const r of rows) {
595
+ chunkBytesFlushed += r.chunk.data.length;
596
+ if (r.seq > state.flushedHighSeq) state.flushedHighSeq = r.seq;
597
+ }
598
+ chunksFlushedCount += rows.length;
599
+ } catch { /* fail-soft — leave dirty for next flush */
600
+ continue;
601
+ }
602
+ state.dirtyChunks = [];
603
+ }
604
+
605
+ // Step 4: persist exits AFTER chunks (crash resilience).
606
+ for (const [pid, state] of this.pids) {
607
+ if (!state.dirtyExit || !state.exit) continue;
608
+ try {
609
+ adapter.persistExit(pid, state.exit);
610
+ state.dirtyExit = false;
611
+ } catch { /* fail-soft */ }
612
+ }
613
+
614
+ this._flushCount++;
615
+ this._lastFlushAt = t0;
616
+ this._lastFlushDurationMs = Date.now() - t0;
617
+ this._flushedChunks += chunksFlushedCount;
618
+ this._flushedBytes += chunkBytesFlushed;
619
+ }
620
+
621
+ /**
622
+ * W9: counters for /api/_diag/memory hibernation telemetry. Cumulative
623
+ * since this isolate-gen started. Reset only when the store itself is
624
+ * reconstructed (i.e., on hibernation/wake).
625
+ */
626
+ hibStats(): {
627
+ rehydratedPids: number;
628
+ rehydratedChunks: number;
629
+ rehydratedBytes: number;
630
+ flushedChunks: number;
631
+ flushedBytes: number;
632
+ flushCount: number;
633
+ lastFlushAt: number;
634
+ lastFlushDurationMs: number;
635
+ pendingDirtyPids: number;
636
+ pendingDropPids: number;
637
+ } {
638
+ let pendingDirtyPids = 0;
639
+ for (const state of this.pids.values()) {
640
+ if (state.dirtyChunks.length > 0 || state.dirtyExit) pendingDirtyPids++;
641
+ }
642
+ return {
643
+ rehydratedPids: this._hydratedPids,
644
+ rehydratedChunks: this._hydratedChunks,
645
+ rehydratedBytes: this._hydratedBytes,
646
+ flushedChunks: this._flushedChunks,
647
+ flushedBytes: this._flushedBytes,
648
+ flushCount: this._flushCount,
649
+ lastFlushAt: this._lastFlushAt,
650
+ lastFlushDurationMs: this._lastFlushDurationMs,
651
+ pendingDirtyPids,
652
+ pendingDropPids: this._dropQueue.size,
653
+ };
654
+ }
655
+
656
+ /** Introspection. Used by `ps -l` for LOGS column. */
657
+ snapshot(pid: number): { bytes: number; chunks: number; exit: ProcessExitInfo | null } | null {
658
+ const s = this._maybeHydrateRead(pid);
659
+ if (!s) return null;
660
+ return { bytes: s.bytes, chunks: s.chunks.length, exit: s.exit };
661
+ }
662
+
663
+ // ── Private ──────────────────────────────────────────────────────────
664
+
665
+ private _getOrCreate(pid: number): PidState {
666
+ let s = this.pids.get(pid);
667
+ if (!s) {
668
+ // Enforce the global cap before inserting. A 1000-pid fork-bomb
669
+ // would otherwise pin ~50 MB of
670
+ // buffers for the full 10-min retention window, crowding the
671
+ // 128 MB DO isolate cap alongside npm install / git clone peaks.
672
+ if (this.pids.size >= this.maxPids) {
673
+ this._evictOnePid();
674
+ }
675
+ s = {
676
+ chunks: [],
677
+ bytes: 0,
678
+ exit: null,
679
+ lastActivity: Date.now(),
680
+ subscribers: new Set(),
681
+ exitSubscribers: new Set(),
682
+ nextSeq: 0,
683
+ dirtyChunks: [],
684
+ dirtyExit: false,
685
+ hydrated: false,
686
+ flushedHighSeq: -1,
687
+ };
688
+ this.pids.set(pid, s);
689
+ // W9: lazy hydrate the freshly-created state from persistent
690
+ // storage. If we have an adapter and rows exist for this pid
691
+ // (e.g., DO was hibernated and now woke), pull them into the
692
+ // ring before any caller can observe an empty ring.
693
+ this._hydrate(pid, s);
694
+ }
695
+ return s;
696
+ }
697
+
698
+ /**
699
+ * W9: pull rows from the persist adapter for this pid into the in-memory
700
+ * ring. Idempotent — guarded by `state.hydrated`. Bounded by
701
+ * `perPidBytes`: if SQL has more bytes than the in-memory cap, we keep
702
+ * only the newest rows that fit and queue a `pruneBeforeSeq` for the
703
+ * next flush so SQL converges.
704
+ *
705
+ * Called from `_getOrCreate` (covers append/tail/all/has/snapshot/
706
+ * subscribe — any first-touch read or write). Failures are swallowed:
707
+ * a broken adapter must not break the in-memory ring's correctness.
708
+ */
709
+ private _hydrate(pid: number, state: PidState): void {
710
+ if (state.hydrated) return;
711
+ state.hydrated = true;
712
+ if (!this._persist) return;
713
+ let loaded: { chunks: LogChunk[]; exit: ProcessExitInfo | null } | null;
714
+ try {
715
+ loaded = this._persist.load(pid);
716
+ } catch {
717
+ return;
718
+ }
719
+ if (!loaded) return;
720
+
721
+ // Restore exit first so pid-existence checks are correct even if
722
+ // we drop chunks below.
723
+ if (loaded.exit) {
724
+ state.exit = loaded.exit;
725
+ state.lastActivity = loaded.exit.at;
726
+ }
727
+
728
+ if (loaded.chunks.length === 0) return;
729
+
730
+ // Trim to perPidBytes from the newest end. Each persisted chunk has
731
+ // a `seq` (we appended it during `persistChunks`); fall back to
732
+ // index-based seq when a chunk lacks it (defensive).
733
+ const newest: LogChunk[] = [];
734
+ let bytes = 0;
735
+ let oldestKeptSeq = Number.POSITIVE_INFINITY;
736
+ let highestSeq = -1;
737
+ for (let i = loaded.chunks.length - 1; i >= 0; i--) {
738
+ const c = loaded.chunks[i];
739
+ const seq = (c as any).seq ?? i;
740
+ if (seq > highestSeq) highestSeq = seq;
741
+ const size = c.data.length;
742
+ if (bytes + size > this.perPidBytes && newest.length > 0) {
743
+ // Anything below this seq is overshoot — schedule a prune.
744
+ this._pruneQueue.set(pid, oldestKeptSeq);
745
+ break;
746
+ }
747
+ newest.unshift({ ts: c.ts, stream: c.stream, data: c.data, binary: c.binary });
748
+ bytes += size;
749
+ oldestKeptSeq = seq;
750
+ }
751
+ state.chunks = newest;
752
+ state.bytes = bytes;
753
+ state.nextSeq = highestSeq + 1;
754
+ state.flushedHighSeq = highestSeq;
755
+ if (loaded.chunks[loaded.chunks.length - 1]) {
756
+ state.lastActivity = Math.max(state.lastActivity, loaded.chunks[loaded.chunks.length - 1].ts);
757
+ }
758
+ this._hydratedPids++;
759
+ this._hydratedChunks += newest.length;
760
+ this._hydratedBytes += bytes;
761
+ }
762
+
763
+ /**
764
+ * Evict one PID to make room when the map hits its global cap.
765
+ *
766
+ * Policy (in order of preference):
767
+ * 1. Oldest EXITED pid with zero subscribers — safe: nobody's
768
+ * reading, process is done, ring buffer is cold.
769
+ * 2. Oldest pid by `lastActivity` with zero subscribers — any
770
+ * state; covers the case where every exited pid has a live
771
+ * subscriber (log tab open).
772
+ * 3. Give up — an actively-subscribed long-running pid flood is
773
+ * degenerate; we'd rather let the map briefly exceed the cap
774
+ * than silently drop a subscribed stream.
775
+ *
776
+ * Map iteration order in JS is insertion order, so "oldest" here
777
+ * means "earliest inserted." That's a reasonable proxy for
778
+ * `lastActivity` for PIDs that haven't been written to recently.
779
+ * We still check `lastActivity` explicitly so active-write pids
780
+ * beat cold ones even if they were inserted earlier.
781
+ */
782
+ private _evictOnePid(): void {
783
+ // Tier 1: oldest exited + no subscribers.
784
+ let bestPid: number | null = null;
785
+ let bestActivity = Infinity;
786
+ for (const [pid, state] of this.pids) {
787
+ if (state.exit && state.subscribers.size === 0 && state.exitSubscribers.size === 0) {
788
+ if (state.lastActivity < bestActivity) {
789
+ bestPid = pid;
790
+ bestActivity = state.lastActivity;
791
+ }
792
+ }
793
+ }
794
+ if (bestPid !== null) {
795
+ this.pids.delete(bestPid);
796
+ this._droppedPids++;
797
+ if (this._persist) this._dropQueue.add(bestPid);
798
+ return;
799
+ }
800
+
801
+ // Tier 2: oldest by lastActivity with zero subscribers.
802
+ bestPid = null;
803
+ bestActivity = Infinity;
804
+ for (const [pid, state] of this.pids) {
805
+ if (state.subscribers.size === 0 && state.exitSubscribers.size === 0) {
806
+ if (state.lastActivity < bestActivity) {
807
+ bestPid = pid;
808
+ bestActivity = state.lastActivity;
809
+ }
810
+ }
811
+ }
812
+ if (bestPid !== null) {
813
+ this.pids.delete(bestPid);
814
+ this._droppedPids++;
815
+ if (this._persist) this._dropQueue.add(bestPid);
816
+ return;
817
+ }
818
+
819
+ // Tier 3: every pid has a subscriber. Don't silently drop a
820
+ // subscribed stream — let the cap be briefly exceeded.
821
+ }
822
+
823
+ /** Diagnostics snapshot for /api/stats rollup. */
824
+ get stats() {
825
+ let running = 0;
826
+ let exited = 0;
827
+ let totalBytes = 0;
828
+ let subscribers = 0;
829
+ for (const state of this.pids.values()) {
830
+ if (state.exit) exited++;
831
+ else running++;
832
+ totalBytes += state.bytes;
833
+ subscribers += state.subscribers.size + state.exitSubscribers.size;
834
+ }
835
+ return {
836
+ totalPids: this.pids.size,
837
+ maxPids: this.maxPids,
838
+ runningPids: running,
839
+ exitedPids: exited,
840
+ totalBufferBytes: totalBytes,
841
+ subscribers,
842
+ droppedPids: this._droppedPids,
843
+ };
844
+ }
845
+
846
+ private _evict(state: PidState, pid?: number): void {
847
+ let droppedAny = false;
848
+ while (state.bytes > this.perPidBytes && state.chunks.length > 0) {
849
+ const dropped = state.chunks.shift()!;
850
+ state.bytes -= dropped.data.length;
851
+ droppedAny = true;
852
+ }
853
+ if (!droppedAny || pid === undefined || !this._persist) return;
854
+
855
+ // W9: cutoff = lowest in-memory seq. Any persisted seq below this is
856
+ // dead weight in SQL (and dead weight in the dirty queue if not yet
857
+ // flushed). Drop them from BOTH:
858
+ //
859
+ // 1. Queue a `pruneBeforeSeq(pid, cutoff)` so already-flushed rows
860
+ // below cutoff are deleted from SQL on next flush.
861
+ // 2. Drop entries from `dirtyChunks` whose seq is below cutoff —
862
+ // they were evicted from memory before they ever made it to SQL,
863
+ // no point persisting now.
864
+ //
865
+ // Without (2), a chatty process whose in-memory ring runs hot would
866
+ // still write every byte to SQL on the first flush, defeating the
867
+ // per-pid byte cap.
868
+ const cutoff = state.nextSeq - state.chunks.length;
869
+ const existing = this._pruneQueue.get(pid) ?? -1;
870
+ if (cutoff > existing) this._pruneQueue.set(pid, cutoff);
871
+ if (state.dirtyChunks.length > 0) {
872
+ state.dirtyChunks = state.dirtyChunks.filter((d) => d.seq >= cutoff);
873
+ }
874
+ }
875
+
876
+ private _fanout(state: PidState, chunk: LogChunk): void {
877
+ if (state.subscribers.size === 0) return;
878
+ for (const cb of state.subscribers) {
879
+ try { cb(chunk); } catch { /* swallow subscriber errors */ }
880
+ }
881
+ }
882
+ }