@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.
- package/dist/_shared/ai-egress.d.ts +73 -0
- package/dist/_shared/ai-egress.d.ts.map +1 -0
- package/dist/_shared/ai-egress.js +88 -0
- package/dist/_shared/byte-stream.d.ts +59 -0
- package/dist/_shared/byte-stream.d.ts.map +1 -0
- package/dist/_shared/byte-stream.js +77 -0
- package/dist/_shared/bytes.d.ts +18 -0
- package/dist/_shared/bytes.d.ts.map +1 -0
- package/dist/_shared/bytes.js +17 -0
- package/dist/_shared/cache-stats.d.ts +145 -0
- package/dist/_shared/cache-stats.d.ts.map +1 -0
- package/dist/_shared/cache-stats.js +161 -0
- package/dist/_shared/crypto.d.ts +17 -0
- package/dist/_shared/crypto.d.ts.map +1 -0
- package/dist/_shared/crypto.js +131 -0
- package/dist/_shared/esbuild-facet-shim.d.ts +21 -0
- package/dist/_shared/esbuild-facet-shim.d.ts.map +1 -0
- package/dist/_shared/esbuild-facet-shim.js +22 -0
- package/dist/_shared/exports-resolver.d.ts +74 -0
- package/dist/_shared/exports-resolver.d.ts.map +1 -0
- package/dist/_shared/exports-resolver.js +284 -0
- package/dist/_shared/facet-vfs-cursor.d.ts +48 -0
- package/dist/_shared/facet-vfs-cursor.d.ts.map +1 -0
- package/dist/_shared/facet-vfs-cursor.js +51 -0
- package/dist/_shared/install-phase.d.ts +47 -0
- package/dist/_shared/install-phase.d.ts.map +1 -0
- package/dist/_shared/install-phase.js +1 -0
- package/dist/_shared/lru-map.d.ts +25 -0
- package/dist/_shared/lru-map.d.ts.map +1 -0
- package/dist/_shared/lru-map.js +57 -0
- package/dist/_shared/real-node-imports.d.ts +43 -0
- package/dist/_shared/real-node-imports.d.ts.map +1 -0
- package/dist/_shared/real-node-imports.js +52 -0
- package/dist/_shared/retry.d.ts +92 -0
- package/dist/_shared/retry.d.ts.map +1 -0
- package/dist/_shared/retry.js +155 -0
- package/dist/_shared/rpc-dispose.d.ts +4 -0
- package/dist/_shared/rpc-dispose.d.ts.map +1 -0
- package/dist/_shared/rpc-dispose.js +30 -0
- package/dist/_shared/terminal.d.ts +2 -0
- package/dist/_shared/terminal.d.ts.map +1 -0
- package/dist/_shared/terminal.js +3 -0
- package/dist/_shared/typescript-specifiers.d.ts +58 -0
- package/dist/_shared/typescript-specifiers.d.ts.map +1 -0
- package/dist/_shared/typescript-specifiers.js +84 -0
- package/dist/_shared/untrusted-request.d.ts +34 -0
- package/dist/_shared/untrusted-request.d.ts.map +1 -0
- package/dist/_shared/untrusted-request.js +74 -0
- package/dist/_shared/vfs-write-ledger.d.ts +3 -0
- package/dist/_shared/vfs-write-ledger.d.ts.map +1 -0
- package/dist/_shared/vfs-write-ledger.js +439 -0
- package/dist/_shared/w7-frame.d.ts +79 -0
- package/dist/_shared/w7-frame.d.ts.map +1 -0
- package/dist/_shared/w7-frame.js +839 -0
- package/dist/_shared/weighted-credit-pool.d.ts +61 -0
- package/dist/_shared/weighted-credit-pool.d.ts.map +1 -0
- package/dist/_shared/weighted-credit-pool.js +196 -0
- package/dist/constants.d.ts +64 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +264 -0
- package/dist/index.d.ts +16 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +13 -0
- package/dist/observability/diag-counters.d.ts +236 -0
- package/dist/observability/diag-counters.d.ts.map +1 -0
- package/dist/observability/diag-counters.js +195 -0
- package/dist/observability/heap-estimate.d.ts +225 -0
- package/dist/observability/heap-estimate.d.ts.map +1 -0
- package/dist/observability/heap-estimate.js +185 -0
- package/dist/observability/heavy-alloc-coord.d.ts +93 -0
- package/dist/observability/heavy-alloc-coord.d.ts.map +1 -0
- package/dist/observability/heavy-alloc-coord.js +181 -0
- package/dist/observability/oom-classify.d.ts +138 -0
- package/dist/observability/oom-classify.d.ts.map +1 -0
- package/dist/observability/oom-classify.js +261 -0
- package/dist/observability/oom-discriminator.d.ts +176 -0
- package/dist/observability/oom-discriminator.d.ts.map +1 -0
- package/dist/observability/oom-discriminator.js +272 -0
- package/dist/runtime/assets-loader.d.ts +71 -0
- package/dist/runtime/assets-loader.d.ts.map +1 -0
- package/dist/runtime/assets-loader.js +139 -0
- package/dist/runtime/barrel-detect.d.ts +46 -0
- package/dist/runtime/barrel-detect.d.ts.map +1 -0
- package/dist/runtime/barrel-detect.js +73 -0
- package/dist/runtime/bash/preamble.d.ts +2 -0
- package/dist/runtime/bash/preamble.d.ts.map +1 -0
- package/dist/runtime/bash/preamble.js +1849 -0
- package/dist/runtime/bash/types.d.ts +433 -0
- package/dist/runtime/bash/types.d.ts.map +1 -0
- package/dist/runtime/bash/types.js +1 -0
- package/dist/runtime/bundle-profile.d.ts +14 -0
- package/dist/runtime/bundle-profile.d.ts.map +1 -0
- package/dist/runtime/bundle-profile.js +20 -0
- package/dist/runtime/cirrus-vite-config-rewriter.d.ts +2 -0
- package/dist/runtime/cirrus-vite-config-rewriter.d.ts.map +1 -0
- package/dist/runtime/cirrus-vite-config-rewriter.js +28 -0
- package/dist/runtime/cli-flags.d.ts +2 -0
- package/dist/runtime/cli-flags.d.ts.map +1 -0
- package/dist/runtime/cli-flags.js +11 -0
- package/dist/runtime/comment-strip.d.ts +37 -0
- package/dist/runtime/comment-strip.d.ts.map +1 -0
- package/dist/runtime/comment-strip.js +74 -0
- package/dist/runtime/cpython-preamble.d.ts +32 -0
- package/dist/runtime/cpython-preamble.d.ts.map +1 -0
- package/dist/runtime/cpython-preamble.js +296 -0
- package/dist/runtime/esbuild-service.d.ts +242 -0
- package/dist/runtime/esbuild-service.d.ts.map +1 -0
- package/dist/runtime/esbuild-service.js +1452 -0
- package/dist/runtime/framework-detect.d.ts +70 -0
- package/dist/runtime/framework-detect.d.ts.map +1 -0
- package/dist/runtime/framework-detect.js +177 -0
- package/dist/runtime/import-meta-transform.d.ts +3 -0
- package/dist/runtime/import-meta-transform.d.ts.map +1 -0
- package/dist/runtime/import-meta-transform.js +15 -0
- package/dist/runtime/javascript-ast.d.ts +13 -0
- package/dist/runtime/javascript-ast.d.ts.map +1 -0
- package/dist/runtime/javascript-ast.js +57 -0
- package/dist/runtime/long-running-handle.d.ts +119 -0
- package/dist/runtime/long-running-handle.d.ts.map +1 -0
- package/dist/runtime/long-running-handle.js +169 -0
- package/dist/runtime/module-source-rewriter.d.ts +11 -0
- package/dist/runtime/module-source-rewriter.d.ts.map +1 -0
- package/dist/runtime/module-source-rewriter.js +61 -0
- package/dist/runtime/opentui-wasm-backend.d.ts +160 -0
- package/dist/runtime/opentui-wasm-backend.d.ts.map +1 -0
- package/dist/runtime/opentui-wasm-backend.js +416 -0
- package/dist/runtime/os-contracts.d.ts +436 -0
- package/dist/runtime/os-contracts.d.ts.map +1 -0
- package/dist/runtime/os-contracts.js +101 -0
- package/dist/runtime/port-registry.d.ts +100 -0
- package/dist/runtime/port-registry.d.ts.map +1 -0
- package/dist/runtime/port-registry.js +265 -0
- package/dist/runtime/process-input-routing.d.ts +33 -0
- package/dist/runtime/process-input-routing.d.ts.map +1 -0
- package/dist/runtime/process-input-routing.js +59 -0
- package/dist/runtime/process-input.d.ts +39 -0
- package/dist/runtime/process-input.d.ts.map +1 -0
- package/dist/runtime/process-input.js +117 -0
- package/dist/runtime/process-io-protocol.d.ts +90 -0
- package/dist/runtime/process-io-protocol.d.ts.map +1 -0
- package/dist/runtime/process-io-protocol.js +81 -0
- package/dist/runtime/process-logs.d.ts +352 -0
- package/dist/runtime/process-logs.d.ts.map +1 -0
- package/dist/runtime/process-logs.js +750 -0
- package/dist/runtime/process-table.d.ts +101 -0
- package/dist/runtime/process-table.d.ts.map +1 -0
- package/dist/runtime/process-table.js +175 -0
- package/dist/runtime/project-detect.d.ts +21 -0
- package/dist/runtime/project-detect.d.ts.map +1 -0
- package/dist/runtime/project-detect.js +46 -0
- package/dist/runtime/python-server-adapter.d.ts +33 -0
- package/dist/runtime/python-server-adapter.d.ts.map +1 -0
- package/dist/runtime/python-server-adapter.js +132 -0
- package/dist/runtime/require-resolver.d.ts +44 -0
- package/dist/runtime/require-resolver.d.ts.map +1 -0
- package/dist/runtime/require-resolver.js +698 -0
- package/dist/runtime/router-basename.d.ts +36 -0
- package/dist/runtime/router-basename.d.ts.map +1 -0
- package/dist/runtime/router-basename.js +310 -0
- package/dist/runtime/ruby-green-threads.d.ts +136 -0
- package/dist/runtime/ruby-green-threads.d.ts.map +1 -0
- package/dist/runtime/ruby-green-threads.js +904 -0
- package/dist/runtime/ruby-socket-shim.d.ts +2 -0
- package/dist/runtime/ruby-socket-shim.d.ts.map +1 -0
- package/dist/runtime/ruby-socket-shim.js +548 -0
- package/dist/runtime/session-process-supervisor.d.ts +156 -0
- package/dist/runtime/session-process-supervisor.d.ts.map +1 -0
- package/dist/runtime/session-process-supervisor.js +238 -0
- package/dist/runtime/sqlite-runtime-fs-bridge.d.ts +70 -0
- package/dist/runtime/sqlite-runtime-fs-bridge.d.ts.map +1 -0
- package/dist/runtime/sqlite-runtime-fs-bridge.js +425 -0
- package/dist/runtime/streams.d.ts +13 -0
- package/dist/runtime/streams.d.ts.map +1 -0
- package/dist/runtime/streams.js +546 -0
- package/dist/runtime/undici-shim.d.ts +62 -0
- package/dist/runtime/undici-shim.d.ts.map +1 -0
- package/dist/runtime/undici-shim.js +516 -0
- package/dist/runtime/vfs-manifest.d.ts +63 -0
- package/dist/runtime/vfs-manifest.d.ts.map +1 -0
- package/dist/runtime/vfs-manifest.js +141 -0
- package/dist/runtime/vfs-snapshot.d.ts +75 -0
- package/dist/runtime/vfs-snapshot.d.ts.map +1 -0
- package/dist/runtime/vfs-snapshot.js +220 -0
- package/dist/runtime/virtual-socket-kernel.d.ts +252 -0
- package/dist/runtime/virtual-socket-kernel.d.ts.map +1 -0
- package/dist/runtime/virtual-socket-kernel.js +1143 -0
- package/dist/runtime/vite-config-parser.d.ts +13 -0
- package/dist/runtime/vite-config-parser.d.ts.map +1 -0
- package/dist/runtime/vite-config-parser.js +258 -0
- package/dist/runtime/wasi/types.d.ts +347 -0
- package/dist/runtime/wasi/types.d.ts.map +1 -0
- package/dist/runtime/wasi/types.js +1 -0
- package/dist/runtime/wasi-instance.d.ts +215 -0
- package/dist/runtime/wasi-instance.d.ts.map +1 -0
- package/dist/runtime/wasi-instance.generated.d.ts +14 -0
- package/dist/runtime/wasi-instance.generated.d.ts.map +1 -0
- package/dist/runtime/wasi-instance.generated.js +13 -0
- package/dist/runtime/wasi-instance.js +179 -0
- package/dist/runtime/wasi-threads.d.ts +169 -0
- package/dist/runtime/wasi-threads.d.ts.map +1 -0
- package/dist/runtime/wasi-threads.js +669 -0
- package/dist/runtime/wasm-memory.d.ts +84 -0
- package/dist/runtime/wasm-memory.d.ts.map +1 -0
- package/dist/runtime/wasm-memory.js +235 -0
- package/dist/shell/elevation-commands.d.ts +5 -0
- package/dist/shell/elevation-commands.d.ts.map +1 -0
- package/dist/shell/elevation-commands.js +109 -0
- package/dist/shell/exec-dispatch.d.ts +57 -0
- package/dist/shell/exec-dispatch.d.ts.map +1 -0
- package/dist/shell/exec-dispatch.js +181 -0
- package/dist/shell/features.d.ts +154 -0
- package/dist/shell/features.d.ts.map +1 -0
- package/dist/shell/features.js +792 -0
- package/dist/shell/shell-entrypoints.d.ts +55 -0
- package/dist/shell/shell-entrypoints.d.ts.map +1 -0
- package/dist/shell/shell-entrypoints.js +230 -0
- package/dist/shell/shell-invocation.d.ts +36 -0
- package/dist/shell/shell-invocation.d.ts.map +1 -0
- package/dist/shell/shell-invocation.js +148 -0
- package/dist/shell/unix-accounts.d.ts +27 -0
- package/dist/shell/unix-accounts.d.ts.map +1 -0
- package/dist/shell/unix-accounts.js +105 -0
- package/dist/shell/unix-commands.d.ts +15 -0
- package/dist/shell/unix-commands.d.ts.map +1 -0
- package/dist/shell/unix-commands.js +4702 -0
- package/dist/substrate/lifo/commands/archive/gunzip.d.ts +4 -0
- package/dist/substrate/lifo/commands/archive/gunzip.d.ts.map +1 -0
- package/dist/substrate/lifo/commands/archive/gunzip.js +58 -0
- package/dist/substrate/lifo/commands/archive/gzip.d.ts +4 -0
- package/dist/substrate/lifo/commands/archive/gzip.d.ts.map +1 -0
- package/dist/substrate/lifo/commands/archive/gzip.js +73 -0
- package/dist/substrate/lifo/commands/archive/tar.d.ts +4 -0
- package/dist/substrate/lifo/commands/archive/tar.d.ts.map +1 -0
- package/dist/substrate/lifo/commands/archive/tar.js +158 -0
- package/dist/substrate/lifo/commands/archive/unzip.d.ts +4 -0
- package/dist/substrate/lifo/commands/archive/unzip.d.ts.map +1 -0
- package/dist/substrate/lifo/commands/archive/unzip.js +114 -0
- package/dist/substrate/lifo/commands/archive/zip.d.ts +4 -0
- package/dist/substrate/lifo/commands/archive/zip.d.ts.map +1 -0
- package/dist/substrate/lifo/commands/archive/zip.js +58 -0
- package/dist/substrate/lifo/commands/fs/basename.d.ts +4 -0
- package/dist/substrate/lifo/commands/fs/basename.d.ts.map +1 -0
- package/dist/substrate/lifo/commands/fs/basename.js +12 -0
- package/dist/substrate/lifo/commands/fs/cat.d.ts +4 -0
- package/dist/substrate/lifo/commands/fs/cat.d.ts.map +1 -0
- package/dist/substrate/lifo/commands/fs/cat.js +52 -0
- package/dist/substrate/lifo/commands/fs/chmod.d.ts +25 -0
- package/dist/substrate/lifo/commands/fs/chmod.d.ts.map +1 -0
- package/dist/substrate/lifo/commands/fs/chmod.js +97 -0
- package/dist/substrate/lifo/commands/fs/chown.d.ts +4 -0
- package/dist/substrate/lifo/commands/fs/chown.d.ts.map +1 -0
- package/dist/substrate/lifo/commands/fs/chown.js +41 -0
- package/dist/substrate/lifo/commands/fs/cp.d.ts +4 -0
- package/dist/substrate/lifo/commands/fs/cp.d.ts.map +1 -0
- package/dist/substrate/lifo/commands/fs/cp.js +29 -0
- package/dist/substrate/lifo/commands/fs/df.d.ts +4 -0
- package/dist/substrate/lifo/commands/fs/df.d.ts.map +1 -0
- package/dist/substrate/lifo/commands/fs/df.js +52 -0
- package/dist/substrate/lifo/commands/fs/dirname.d.ts +4 -0
- package/dist/substrate/lifo/commands/fs/dirname.d.ts.map +1 -0
- package/dist/substrate/lifo/commands/fs/dirname.js +12 -0
- package/dist/substrate/lifo/commands/fs/du.d.ts +4 -0
- package/dist/substrate/lifo/commands/fs/du.d.ts.map +1 -0
- package/dist/substrate/lifo/commands/fs/du.js +104 -0
- package/dist/substrate/lifo/commands/fs/file.d.ts +4 -0
- package/dist/substrate/lifo/commands/fs/file.d.ts.map +1 -0
- package/dist/substrate/lifo/commands/fs/file.js +84 -0
- package/dist/substrate/lifo/commands/fs/find.d.ts +4 -0
- package/dist/substrate/lifo/commands/fs/find.d.ts.map +1 -0
- package/dist/substrate/lifo/commands/fs/find.js +72 -0
- package/dist/substrate/lifo/commands/fs/ln.d.ts +4 -0
- package/dist/substrate/lifo/commands/fs/ln.d.ts.map +1 -0
- package/dist/substrate/lifo/commands/fs/ln.js +15 -0
- package/dist/substrate/lifo/commands/fs/ls.d.ts +4 -0
- package/dist/substrate/lifo/commands/fs/ls.d.ts.map +1 -0
- package/dist/substrate/lifo/commands/fs/ls.js +146 -0
- package/dist/substrate/lifo/commands/fs/mkdir.d.ts +4 -0
- package/dist/substrate/lifo/commands/fs/mkdir.d.ts.map +1 -0
- package/dist/substrate/lifo/commands/fs/mkdir.js +31 -0
- package/dist/substrate/lifo/commands/fs/mktemp.d.ts +4 -0
- package/dist/substrate/lifo/commands/fs/mktemp.d.ts.map +1 -0
- package/dist/substrate/lifo/commands/fs/mktemp.js +48 -0
- package/dist/substrate/lifo/commands/fs/mv.d.ts +4 -0
- package/dist/substrate/lifo/commands/fs/mv.d.ts.map +1 -0
- package/dist/substrate/lifo/commands/fs/mv.js +113 -0
- package/dist/substrate/lifo/commands/fs/realpath.d.ts +4 -0
- package/dist/substrate/lifo/commands/fs/realpath.d.ts.map +1 -0
- package/dist/substrate/lifo/commands/fs/realpath.js +27 -0
- package/dist/substrate/lifo/commands/fs/rm.d.ts +4 -0
- package/dist/substrate/lifo/commands/fs/rm.d.ts.map +1 -0
- package/dist/substrate/lifo/commands/fs/rm.js +48 -0
- package/dist/substrate/lifo/commands/fs/rmdir.d.ts +4 -0
- package/dist/substrate/lifo/commands/fs/rmdir.d.ts.map +1 -0
- package/dist/substrate/lifo/commands/fs/rmdir.js +44 -0
- package/dist/substrate/lifo/commands/fs/stat.d.ts +4 -0
- package/dist/substrate/lifo/commands/fs/stat.d.ts.map +1 -0
- package/dist/substrate/lifo/commands/fs/stat.js +35 -0
- package/dist/substrate/lifo/commands/fs/touch.d.ts +4 -0
- package/dist/substrate/lifo/commands/fs/touch.d.ts.map +1 -0
- package/dist/substrate/lifo/commands/fs/touch.js +26 -0
- package/dist/substrate/lifo/commands/fs/tree.d.ts +4 -0
- package/dist/substrate/lifo/commands/fs/tree.d.ts.map +1 -0
- package/dist/substrate/lifo/commands/fs/tree.js +69 -0
- package/dist/substrate/lifo/commands/index.d.ts +3 -0
- package/dist/substrate/lifo/commands/index.d.ts.map +1 -0
- package/dist/substrate/lifo/commands/index.js +1 -0
- package/dist/substrate/lifo/commands/io/dd.d.ts +4 -0
- package/dist/substrate/lifo/commands/io/dd.d.ts.map +1 -0
- package/dist/substrate/lifo/commands/io/dd.js +256 -0
- package/dist/substrate/lifo/commands/io/printf.d.ts +4 -0
- package/dist/substrate/lifo/commands/io/printf.d.ts.map +1 -0
- package/dist/substrate/lifo/commands/io/printf.js +82 -0
- package/dist/substrate/lifo/commands/io/tee.d.ts +4 -0
- package/dist/substrate/lifo/commands/io/tee.d.ts.map +1 -0
- package/dist/substrate/lifo/commands/io/tee.js +31 -0
- package/dist/substrate/lifo/commands/io/xargs.d.ts +4 -0
- package/dist/substrate/lifo/commands/io/xargs.d.ts.map +1 -0
- package/dist/substrate/lifo/commands/io/xargs.js +44 -0
- package/dist/substrate/lifo/commands/io/yes.d.ts +4 -0
- package/dist/substrate/lifo/commands/io/yes.d.ts.map +1 -0
- package/dist/substrate/lifo/commands/io/yes.js +10 -0
- package/dist/substrate/lifo/commands/net/curl.d.ts +6 -0
- package/dist/substrate/lifo/commands/net/curl.d.ts.map +1 -0
- package/dist/substrate/lifo/commands/net/curl.js +617 -0
- package/dist/substrate/lifo/commands/net/dig.d.ts +4 -0
- package/dist/substrate/lifo/commands/net/dig.d.ts.map +1 -0
- package/dist/substrate/lifo/commands/net/dig.js +77 -0
- package/dist/substrate/lifo/commands/net/forward.d.ts +14 -0
- package/dist/substrate/lifo/commands/net/forward.d.ts.map +1 -0
- package/dist/substrate/lifo/commands/net/forward.js +80 -0
- package/dist/substrate/lifo/commands/net/host.d.ts +14 -0
- package/dist/substrate/lifo/commands/net/host.d.ts.map +1 -0
- package/dist/substrate/lifo/commands/net/host.js +160 -0
- package/dist/substrate/lifo/commands/net/ifconfig.d.ts +8 -0
- package/dist/substrate/lifo/commands/net/ifconfig.d.ts.map +1 -0
- package/dist/substrate/lifo/commands/net/ifconfig.js +120 -0
- package/dist/substrate/lifo/commands/net/ip.d.ts +14 -0
- package/dist/substrate/lifo/commands/net/ip.d.ts.map +1 -0
- package/dist/substrate/lifo/commands/net/ip.js +508 -0
- package/dist/substrate/lifo/commands/net/netstat.d.ts +8 -0
- package/dist/substrate/lifo/commands/net/netstat.d.ts.map +1 -0
- package/dist/substrate/lifo/commands/net/netstat.js +94 -0
- package/dist/substrate/lifo/commands/net/ping.d.ts +4 -0
- package/dist/substrate/lifo/commands/net/ping.d.ts.map +1 -0
- package/dist/substrate/lifo/commands/net/ping.js +64 -0
- package/dist/substrate/lifo/commands/net/ports.d.ts +8 -0
- package/dist/substrate/lifo/commands/net/ports.d.ts.map +1 -0
- package/dist/substrate/lifo/commands/net/ports.js +36 -0
- package/dist/substrate/lifo/commands/net/route.d.ts +8 -0
- package/dist/substrate/lifo/commands/net/route.d.ts.map +1 -0
- package/dist/substrate/lifo/commands/net/route.js +128 -0
- package/dist/substrate/lifo/commands/net/tunnel-v2.d.ts +4 -0
- package/dist/substrate/lifo/commands/net/tunnel-v2.d.ts.map +1 -0
- package/dist/substrate/lifo/commands/net/tunnel-v2.js +141 -0
- package/dist/substrate/lifo/commands/net/tunnel.d.ts +6 -0
- package/dist/substrate/lifo/commands/net/tunnel.d.ts.map +1 -0
- package/dist/substrate/lifo/commands/net/tunnel.js +232 -0
- package/dist/substrate/lifo/commands/net/wget.d.ts +4 -0
- package/dist/substrate/lifo/commands/net/wget.d.ts.map +1 -0
- package/dist/substrate/lifo/commands/net/wget.js +78 -0
- package/dist/substrate/lifo/commands/registry.d.ts +15 -0
- package/dist/substrate/lifo/commands/registry.d.ts.map +1 -0
- package/dist/substrate/lifo/commands/registry.js +120 -0
- package/dist/substrate/lifo/commands/signal.d.ts +12 -0
- package/dist/substrate/lifo/commands/signal.d.ts.map +1 -0
- package/dist/substrate/lifo/commands/signal.js +47 -0
- package/dist/substrate/lifo/commands/system/bc.d.ts +4 -0
- package/dist/substrate/lifo/commands/system/bc.d.ts.map +1 -0
- package/dist/substrate/lifo/commands/system/bc.js +243 -0
- package/dist/substrate/lifo/commands/system/cal.d.ts +4 -0
- package/dist/substrate/lifo/commands/system/cal.d.ts.map +1 -0
- package/dist/substrate/lifo/commands/system/cal.js +81 -0
- package/dist/substrate/lifo/commands/system/date.d.ts +4 -0
- package/dist/substrate/lifo/commands/system/date.d.ts.map +1 -0
- package/dist/substrate/lifo/commands/system/date.js +79 -0
- package/dist/substrate/lifo/commands/system/env.d.ts +4 -0
- package/dist/substrate/lifo/commands/system/env.d.ts.map +1 -0
- package/dist/substrate/lifo/commands/system/env.js +7 -0
- package/dist/substrate/lifo/commands/system/fastfetch.d.ts +4 -0
- package/dist/substrate/lifo/commands/system/fastfetch.d.ts.map +1 -0
- package/dist/substrate/lifo/commands/system/fastfetch.js +385 -0
- package/dist/substrate/lifo/commands/system/free.d.ts +4 -0
- package/dist/substrate/lifo/commands/system/free.d.ts.map +1 -0
- package/dist/substrate/lifo/commands/system/free.js +36 -0
- package/dist/substrate/lifo/commands/system/help.d.ts +4 -0
- package/dist/substrate/lifo/commands/system/help.d.ts.map +1 -0
- package/dist/substrate/lifo/commands/system/help.js +46 -0
- package/dist/substrate/lifo/commands/system/hostname.d.ts +4 -0
- package/dist/substrate/lifo/commands/system/hostname.d.ts.map +1 -0
- package/dist/substrate/lifo/commands/system/hostname.js +6 -0
- package/dist/substrate/lifo/commands/system/kill.d.ts +4 -0
- package/dist/substrate/lifo/commands/system/kill.d.ts.map +1 -0
- package/dist/substrate/lifo/commands/system/kill.js +76 -0
- package/dist/substrate/lifo/commands/system/lifo.d.ts +41 -0
- package/dist/substrate/lifo/commands/system/lifo.d.ts.map +1 -0
- package/dist/substrate/lifo/commands/system/lifo.js +446 -0
- package/dist/substrate/lifo/commands/system/logout.d.ts +5 -0
- package/dist/substrate/lifo/commands/system/logout.d.ts.map +1 -0
- package/dist/substrate/lifo/commands/system/logout.js +15 -0
- package/dist/substrate/lifo/commands/system/man.d.ts +4 -0
- package/dist/substrate/lifo/commands/system/man.d.ts.map +1 -0
- package/dist/substrate/lifo/commands/system/man.js +144 -0
- package/dist/substrate/lifo/commands/system/node.d.ts +6 -0
- package/dist/substrate/lifo/commands/system/node.d.ts.map +1 -0
- package/dist/substrate/lifo/commands/system/node.js +1241 -0
- package/dist/substrate/lifo/commands/system/npm.d.ts +26 -0
- package/dist/substrate/lifo/commands/system/npm.d.ts.map +1 -0
- package/dist/substrate/lifo/commands/system/npm.js +934 -0
- package/dist/substrate/lifo/commands/system/pkg.d.ts +4 -0
- package/dist/substrate/lifo/commands/system/pkg.d.ts.map +1 -0
- package/dist/substrate/lifo/commands/system/pkg.js +97 -0
- package/dist/substrate/lifo/commands/system/ps.d.ts +5 -0
- package/dist/substrate/lifo/commands/system/ps.d.ts.map +1 -0
- package/dist/substrate/lifo/commands/system/ps.js +35 -0
- package/dist/substrate/lifo/commands/system/registry-schemas.d.ts +44 -0
- package/dist/substrate/lifo/commands/system/registry-schemas.d.ts.map +1 -0
- package/dist/substrate/lifo/commands/system/registry-schemas.js +28 -0
- package/dist/substrate/lifo/commands/system/sha256sum.d.ts +4 -0
- package/dist/substrate/lifo/commands/system/sha256sum.d.ts.map +1 -0
- package/dist/substrate/lifo/commands/system/sha256sum.js +86 -0
- package/dist/substrate/lifo/commands/system/sl.d.ts +4 -0
- package/dist/substrate/lifo/commands/system/sl.d.ts.map +1 -0
- package/dist/substrate/lifo/commands/system/sl.js +204 -0
- package/dist/substrate/lifo/commands/system/sleep.d.ts +4 -0
- package/dist/substrate/lifo/commands/system/sleep.d.ts.map +1 -0
- package/dist/substrate/lifo/commands/system/sleep.js +27 -0
- package/dist/substrate/lifo/commands/system/stty.d.ts +4 -0
- package/dist/substrate/lifo/commands/system/stty.d.ts.map +1 -0
- package/dist/substrate/lifo/commands/system/stty.js +61 -0
- package/dist/substrate/lifo/commands/system/systemctl.d.ts +4 -0
- package/dist/substrate/lifo/commands/system/systemctl.d.ts.map +1 -0
- package/dist/substrate/lifo/commands/system/systemctl.js +164 -0
- package/dist/substrate/lifo/commands/system/top.d.ts +4 -0
- package/dist/substrate/lifo/commands/system/top.d.ts.map +1 -0
- package/dist/substrate/lifo/commands/system/top.js +38 -0
- package/dist/substrate/lifo/commands/system/uname.d.ts +4 -0
- package/dist/substrate/lifo/commands/system/uname.d.ts.map +1 -0
- package/dist/substrate/lifo/commands/system/uname.js +55 -0
- package/dist/substrate/lifo/commands/system/uptime.d.ts +4 -0
- package/dist/substrate/lifo/commands/system/uptime.d.ts.map +1 -0
- package/dist/substrate/lifo/commands/system/uptime.js +16 -0
- package/dist/substrate/lifo/commands/system/watch.d.ts +4 -0
- package/dist/substrate/lifo/commands/system/watch.d.ts.map +1 -0
- package/dist/substrate/lifo/commands/system/watch.js +53 -0
- package/dist/substrate/lifo/commands/system/which.d.ts +4 -0
- package/dist/substrate/lifo/commands/system/which.d.ts.map +1 -0
- package/dist/substrate/lifo/commands/system/which.js +45 -0
- package/dist/substrate/lifo/commands/system/whoami.d.ts +4 -0
- package/dist/substrate/lifo/commands/system/whoami.d.ts.map +1 -0
- package/dist/substrate/lifo/commands/system/whoami.js +6 -0
- package/dist/substrate/lifo/commands/text/awk.d.ts +4 -0
- package/dist/substrate/lifo/commands/text/awk.d.ts.map +1 -0
- package/dist/substrate/lifo/commands/text/awk.js +200 -0
- package/dist/substrate/lifo/commands/text/base64.d.ts +4 -0
- package/dist/substrate/lifo/commands/text/base64.d.ts.map +1 -0
- package/dist/substrate/lifo/commands/text/base64.js +102 -0
- package/dist/substrate/lifo/commands/text/cut.d.ts +4 -0
- package/dist/substrate/lifo/commands/text/cut.d.ts.map +1 -0
- package/dist/substrate/lifo/commands/text/cut.js +91 -0
- package/dist/substrate/lifo/commands/text/diff.d.ts +4 -0
- package/dist/substrate/lifo/commands/text/diff.d.ts.map +1 -0
- package/dist/substrate/lifo/commands/text/diff.js +292 -0
- package/dist/substrate/lifo/commands/text/grep.d.ts +4 -0
- package/dist/substrate/lifo/commands/text/grep.d.ts.map +1 -0
- package/dist/substrate/lifo/commands/text/grep.js +189 -0
- package/dist/substrate/lifo/commands/text/head.d.ts +4 -0
- package/dist/substrate/lifo/commands/text/head.d.ts.map +1 -0
- package/dist/substrate/lifo/commands/text/head.js +111 -0
- package/dist/substrate/lifo/commands/text/less.d.ts +4 -0
- package/dist/substrate/lifo/commands/text/less.d.ts.map +1 -0
- package/dist/substrate/lifo/commands/text/less.js +335 -0
- package/dist/substrate/lifo/commands/text/nano.d.ts +4 -0
- package/dist/substrate/lifo/commands/text/nano.d.ts.map +1 -0
- package/dist/substrate/lifo/commands/text/nano.js +510 -0
- package/dist/substrate/lifo/commands/text/nl.d.ts +4 -0
- package/dist/substrate/lifo/commands/text/nl.d.ts.map +1 -0
- package/dist/substrate/lifo/commands/text/nl.js +64 -0
- package/dist/substrate/lifo/commands/text/rev.d.ts +4 -0
- package/dist/substrate/lifo/commands/text/rev.d.ts.map +1 -0
- package/dist/substrate/lifo/commands/text/rev.js +41 -0
- package/dist/substrate/lifo/commands/text/sed.d.ts +21 -0
- package/dist/substrate/lifo/commands/text/sed.d.ts.map +1 -0
- package/dist/substrate/lifo/commands/text/sed.js +248 -0
- package/dist/substrate/lifo/commands/text/seq.d.ts +4 -0
- package/dist/substrate/lifo/commands/text/seq.d.ts.map +1 -0
- package/dist/substrate/lifo/commands/text/seq.js +69 -0
- package/dist/substrate/lifo/commands/text/sort.d.ts +4 -0
- package/dist/substrate/lifo/commands/text/sort.d.ts.map +1 -0
- package/dist/substrate/lifo/commands/text/sort.js +90 -0
- package/dist/substrate/lifo/commands/text/strings.d.ts +4 -0
- package/dist/substrate/lifo/commands/text/strings.d.ts.map +1 -0
- package/dist/substrate/lifo/commands/text/strings.js +69 -0
- package/dist/substrate/lifo/commands/text/tac.d.ts +4 -0
- package/dist/substrate/lifo/commands/text/tac.d.ts.map +1 -0
- package/dist/substrate/lifo/commands/text/tac.js +32 -0
- package/dist/substrate/lifo/commands/text/tail.d.ts +4 -0
- package/dist/substrate/lifo/commands/text/tail.d.ts.map +1 -0
- package/dist/substrate/lifo/commands/text/tail.js +64 -0
- package/dist/substrate/lifo/commands/text/tr.d.ts +4 -0
- package/dist/substrate/lifo/commands/text/tr.d.ts.map +1 -0
- package/dist/substrate/lifo/commands/text/tr.js +180 -0
- package/dist/substrate/lifo/commands/text/uniq.d.ts +4 -0
- package/dist/substrate/lifo/commands/text/uniq.d.ts.map +1 -0
- package/dist/substrate/lifo/commands/text/uniq.js +82 -0
- package/dist/substrate/lifo/commands/text/wc.d.ts +4 -0
- package/dist/substrate/lifo/commands/text/wc.d.ts.map +1 -0
- package/dist/substrate/lifo/commands/text/wc.js +107 -0
- package/dist/substrate/lifo/commands/types.d.ts +49 -0
- package/dist/substrate/lifo/commands/types.d.ts.map +1 -0
- package/dist/substrate/lifo/commands/types.js +1 -0
- package/dist/substrate/lifo/index.d.ts +67 -0
- package/dist/substrate/lifo/index.d.ts.map +1 -0
- package/dist/substrate/lifo/index.js +66 -0
- package/dist/substrate/lifo/kernel/ServiceManager.d.ts +51 -0
- package/dist/substrate/lifo/kernel/ServiceManager.d.ts.map +1 -0
- package/dist/substrate/lifo/kernel/ServiceManager.js +302 -0
- package/dist/substrate/lifo/kernel/index.d.ts +40 -0
- package/dist/substrate/lifo/kernel/index.d.ts.map +1 -0
- package/dist/substrate/lifo/kernel/index.js +170 -0
- package/dist/substrate/lifo/kernel/network/Bridge.d.ts +110 -0
- package/dist/substrate/lifo/kernel/network/Bridge.d.ts.map +1 -0
- package/dist/substrate/lifo/kernel/network/Bridge.js +278 -0
- package/dist/substrate/lifo/kernel/network/DNSResolver.d.ts +50 -0
- package/dist/substrate/lifo/kernel/network/DNSResolver.d.ts.map +1 -0
- package/dist/substrate/lifo/kernel/network/DNSResolver.js +135 -0
- package/dist/substrate/lifo/kernel/network/NetworkInterface.d.ts +83 -0
- package/dist/substrate/lifo/kernel/network/NetworkInterface.d.ts.map +1 -0
- package/dist/substrate/lifo/kernel/network/NetworkInterface.js +183 -0
- package/dist/substrate/lifo/kernel/network/NetworkNamespace.d.ts +98 -0
- package/dist/substrate/lifo/kernel/network/NetworkNamespace.d.ts.map +1 -0
- package/dist/substrate/lifo/kernel/network/NetworkNamespace.js +149 -0
- package/dist/substrate/lifo/kernel/network/NetworkStack.d.ts +178 -0
- package/dist/substrate/lifo/kernel/network/NetworkStack.d.ts.map +1 -0
- package/dist/substrate/lifo/kernel/network/NetworkStack.js +460 -0
- package/dist/substrate/lifo/kernel/network/PortBridge.d.ts +44 -0
- package/dist/substrate/lifo/kernel/network/PortBridge.d.ts.map +1 -0
- package/dist/substrate/lifo/kernel/network/PortBridge.js +158 -0
- package/dist/substrate/lifo/kernel/network/RoutingTable.d.ts +55 -0
- package/dist/substrate/lifo/kernel/network/RoutingTable.d.ts.map +1 -0
- package/dist/substrate/lifo/kernel/network/RoutingTable.js +167 -0
- package/dist/substrate/lifo/kernel/network/Socket.d.ts +65 -0
- package/dist/substrate/lifo/kernel/network/Socket.d.ts.map +1 -0
- package/dist/substrate/lifo/kernel/network/Socket.js +201 -0
- package/dist/substrate/lifo/kernel/network/index.d.ts +11 -0
- package/dist/substrate/lifo/kernel/network/index.d.ts.map +1 -0
- package/dist/substrate/lifo/kernel/network/index.js +9 -0
- package/dist/substrate/lifo/kernel/network/tunnel/BaseTunnel.d.ts +55 -0
- package/dist/substrate/lifo/kernel/network/tunnel/BaseTunnel.d.ts.map +1 -0
- package/dist/substrate/lifo/kernel/network/tunnel/BaseTunnel.js +88 -0
- package/dist/substrate/lifo/kernel/network/tunnel/VETHPair.d.ts +71 -0
- package/dist/substrate/lifo/kernel/network/tunnel/VETHPair.d.ts.map +1 -0
- package/dist/substrate/lifo/kernel/network/tunnel/VETHPair.js +191 -0
- package/dist/substrate/lifo/kernel/network/tunnel/WebSocketTunnel.d.ts +89 -0
- package/dist/substrate/lifo/kernel/network/tunnel/WebSocketTunnel.d.ts.map +1 -0
- package/dist/substrate/lifo/kernel/network/tunnel/WebSocketTunnel.js +324 -0
- package/dist/substrate/lifo/kernel/network/types.d.ts +159 -0
- package/dist/substrate/lifo/kernel/network/types.d.ts.map +1 -0
- package/dist/substrate/lifo/kernel/network/types.js +5 -0
- package/dist/substrate/lifo/kernel/persistence/PersistenceManager.d.ts +12 -0
- package/dist/substrate/lifo/kernel/persistence/PersistenceManager.d.ts.map +1 -0
- package/dist/substrate/lifo/kernel/persistence/PersistenceManager.js +47 -0
- package/dist/substrate/lifo/kernel/persistence/backends.d.ts +15 -0
- package/dist/substrate/lifo/kernel/persistence/backends.d.ts.map +1 -0
- package/dist/substrate/lifo/kernel/persistence/backends.js +18 -0
- package/dist/substrate/lifo/kernel/persistence/index.d.ts +6 -0
- package/dist/substrate/lifo/kernel/persistence/index.d.ts.map +1 -0
- package/dist/substrate/lifo/kernel/persistence/index.js +3 -0
- package/dist/substrate/lifo/kernel/persistence/serializer.d.ts +21 -0
- package/dist/substrate/lifo/kernel/persistence/serializer.d.ts.map +1 -0
- package/dist/substrate/lifo/kernel/persistence/serializer.js +99 -0
- package/dist/substrate/lifo/kernel/samples.d.ts +3 -0
- package/dist/substrate/lifo/kernel/samples.d.ts.map +1 -0
- package/dist/substrate/lifo/kernel/samples.js +930 -0
- package/dist/substrate/lifo/kernel/storage/BlobStore.d.ts +22 -0
- package/dist/substrate/lifo/kernel/storage/BlobStore.d.ts.map +1 -0
- package/dist/substrate/lifo/kernel/storage/BlobStore.js +84 -0
- package/dist/substrate/lifo/kernel/storage/ContentStore.d.ts +54 -0
- package/dist/substrate/lifo/kernel/storage/ContentStore.d.ts.map +1 -0
- package/dist/substrate/lifo/kernel/storage/ContentStore.js +120 -0
- package/dist/substrate/lifo/kernel/storage/index.d.ts +6 -0
- package/dist/substrate/lifo/kernel/storage/index.d.ts.map +1 -0
- package/dist/substrate/lifo/kernel/storage/index.js +3 -0
- package/dist/substrate/lifo/kernel/unit-parser.d.ts +22 -0
- package/dist/substrate/lifo/kernel/unit-parser.d.ts.map +1 -0
- package/dist/substrate/lifo/kernel/unit-parser.js +80 -0
- package/dist/substrate/lifo/kernel/vfs/VFS.d.ts +99 -0
- package/dist/substrate/lifo/kernel/vfs/VFS.d.ts.map +1 -0
- package/dist/substrate/lifo/kernel/vfs/VFS.js +679 -0
- package/dist/substrate/lifo/kernel/vfs/index.d.ts +8 -0
- package/dist/substrate/lifo/kernel/vfs/index.d.ts.map +1 -0
- package/dist/substrate/lifo/kernel/vfs/index.js +5 -0
- package/dist/substrate/lifo/kernel/vfs/providers/DevProvider.d.ts +21 -0
- package/dist/substrate/lifo/kernel/vfs/providers/DevProvider.d.ts.map +1 -0
- package/dist/substrate/lifo/kernel/vfs/providers/DevProvider.js +137 -0
- package/dist/substrate/lifo/kernel/vfs/providers/NativeFsProvider.d.ts +63 -0
- package/dist/substrate/lifo/kernel/vfs/providers/NativeFsProvider.d.ts.map +1 -0
- package/dist/substrate/lifo/kernel/vfs/providers/NativeFsProvider.js +175 -0
- package/dist/substrate/lifo/kernel/vfs/providers/ProcProvider.d.ts +14 -0
- package/dist/substrate/lifo/kernel/vfs/providers/ProcProvider.d.ts.map +1 -0
- package/dist/substrate/lifo/kernel/vfs/providers/ProcProvider.js +126 -0
- package/dist/substrate/lifo/kernel/vfs/types.d.ts +117 -0
- package/dist/substrate/lifo/kernel/vfs/types.d.ts.map +1 -0
- package/dist/substrate/lifo/kernel/vfs/types.js +42 -0
- package/dist/substrate/lifo/node-compat/buffer.d.ts +44 -0
- package/dist/substrate/lifo/node-compat/buffer.d.ts.map +1 -0
- package/dist/substrate/lifo/node-compat/buffer.js +331 -0
- package/dist/substrate/lifo/node-compat/child_process.d.ts +10 -0
- package/dist/substrate/lifo/node-compat/child_process.d.ts.map +1 -0
- package/dist/substrate/lifo/node-compat/child_process.js +42 -0
- package/dist/substrate/lifo/node-compat/console.d.ts +21 -0
- package/dist/substrate/lifo/node-compat/console.d.ts.map +1 -0
- package/dist/substrate/lifo/node-compat/console.js +68 -0
- package/dist/substrate/lifo/node-compat/crypto.d.ts +24 -0
- package/dist/substrate/lifo/node-compat/crypto.d.ts.map +1 -0
- package/dist/substrate/lifo/node-compat/crypto.js +216 -0
- package/dist/substrate/lifo/node-compat/dns.d.ts +117 -0
- package/dist/substrate/lifo/node-compat/dns.d.ts.map +1 -0
- package/dist/substrate/lifo/node-compat/dns.js +144 -0
- package/dist/substrate/lifo/node-compat/esbuild.d.ts +10 -0
- package/dist/substrate/lifo/node-compat/esbuild.d.ts.map +1 -0
- package/dist/substrate/lifo/node-compat/esbuild.js +70 -0
- package/dist/substrate/lifo/node-compat/events.d.ts +19 -0
- package/dist/substrate/lifo/node-compat/events.d.ts.map +1 -0
- package/dist/substrate/lifo/node-compat/events.js +83 -0
- package/dist/substrate/lifo/node-compat/fs.d.ts +195 -0
- package/dist/substrate/lifo/node-compat/fs.d.ts.map +1 -0
- package/dist/substrate/lifo/node-compat/fs.js +624 -0
- package/dist/substrate/lifo/node-compat/http.d.ts +133 -0
- package/dist/substrate/lifo/node-compat/http.d.ts.map +1 -0
- package/dist/substrate/lifo/node-compat/http.js +452 -0
- package/dist/substrate/lifo/node-compat/index.d.ts +20 -0
- package/dist/substrate/lifo/node-compat/index.d.ts.map +1 -0
- package/dist/substrate/lifo/node-compat/index.js +291 -0
- package/dist/substrate/lifo/node-compat/module.d.ts +55 -0
- package/dist/substrate/lifo/node-compat/module.d.ts.map +1 -0
- package/dist/substrate/lifo/node-compat/module.js +124 -0
- package/dist/substrate/lifo/node-compat/os.d.ts +39 -0
- package/dist/substrate/lifo/node-compat/os.d.ts.map +1 -0
- package/dist/substrate/lifo/node-compat/os.js +45 -0
- package/dist/substrate/lifo/node-compat/path.d.ts +86 -0
- package/dist/substrate/lifo/node-compat/path.d.ts.map +1 -0
- package/dist/substrate/lifo/node-compat/path.js +49 -0
- package/dist/substrate/lifo/node-compat/process.d.ts +127 -0
- package/dist/substrate/lifo/node-compat/process.d.ts.map +1 -0
- package/dist/substrate/lifo/node-compat/process.js +173 -0
- package/dist/substrate/lifo/node-compat/readline.d.ts +85 -0
- package/dist/substrate/lifo/node-compat/readline.d.ts.map +1 -0
- package/dist/substrate/lifo/node-compat/readline.js +205 -0
- package/dist/substrate/lifo/node-compat/rimraf.d.ts +30 -0
- package/dist/substrate/lifo/node-compat/rimraf.d.ts.map +1 -0
- package/dist/substrate/lifo/node-compat/rimraf.js +63 -0
- package/dist/substrate/lifo/node-compat/stream.d.ts +36 -0
- package/dist/substrate/lifo/node-compat/stream.d.ts.map +1 -0
- package/dist/substrate/lifo/node-compat/stream.js +90 -0
- package/dist/substrate/lifo/node-compat/string_decoder.d.ts +11 -0
- package/dist/substrate/lifo/node-compat/string_decoder.d.ts.map +1 -0
- package/dist/substrate/lifo/node-compat/string_decoder.js +23 -0
- package/dist/substrate/lifo/node-compat/timers.d.ts +16 -0
- package/dist/substrate/lifo/node-compat/timers.d.ts.map +1 -0
- package/dist/substrate/lifo/node-compat/timers.js +18 -0
- package/dist/substrate/lifo/node-compat/tty.d.ts +32 -0
- package/dist/substrate/lifo/node-compat/tty.d.ts.map +1 -0
- package/dist/substrate/lifo/node-compat/tty.js +76 -0
- package/dist/substrate/lifo/node-compat/url.d.ts +37 -0
- package/dist/substrate/lifo/node-compat/url.d.ts.map +1 -0
- package/dist/substrate/lifo/node-compat/url.js +65 -0
- package/dist/substrate/lifo/node-compat/util.d.ts +42 -0
- package/dist/substrate/lifo/node-compat/util.d.ts.map +1 -0
- package/dist/substrate/lifo/node-compat/util.js +132 -0
- package/dist/substrate/lifo/node-compat/zlib.d.ts +66 -0
- package/dist/substrate/lifo/node-compat/zlib.d.ts.map +1 -0
- package/dist/substrate/lifo/node-compat/zlib.js +80 -0
- package/dist/substrate/lifo/pkg/PackageManager.d.ts +19 -0
- package/dist/substrate/lifo/pkg/PackageManager.d.ts.map +1 -0
- package/dist/substrate/lifo/pkg/PackageManager.js +97 -0
- package/dist/substrate/lifo/pkg/lifo-dev.d.ts +38 -0
- package/dist/substrate/lifo/pkg/lifo-dev.d.ts.map +1 -0
- package/dist/substrate/lifo/pkg/lifo-dev.js +98 -0
- package/dist/substrate/lifo/pkg/lifo-runtime.d.ts +44 -0
- package/dist/substrate/lifo/pkg/lifo-runtime.d.ts.map +1 -0
- package/dist/substrate/lifo/pkg/lifo-runtime.js +372 -0
- package/dist/substrate/lifo/pkg/loader.d.ts +4 -0
- package/dist/substrate/lifo/pkg/loader.d.ts.map +1 -0
- package/dist/substrate/lifo/pkg/loader.js +24 -0
- package/dist/substrate/lifo/sandbox/HeadlessTerminal.d.ts +18 -0
- package/dist/substrate/lifo/sandbox/HeadlessTerminal.d.ts.map +1 -0
- package/dist/substrate/lifo/sandbox/HeadlessTerminal.js +28 -0
- package/dist/substrate/lifo/sandbox/Sandbox.d.ts +59 -0
- package/dist/substrate/lifo/sandbox/Sandbox.d.ts.map +1 -0
- package/dist/substrate/lifo/sandbox/Sandbox.js +234 -0
- package/dist/substrate/lifo/sandbox/SandboxCommands.d.ts +18 -0
- package/dist/substrate/lifo/sandbox/SandboxCommands.d.ts.map +1 -0
- package/dist/substrate/lifo/sandbox/SandboxCommands.js +64 -0
- package/dist/substrate/lifo/sandbox/SandboxFs.d.ts +43 -0
- package/dist/substrate/lifo/sandbox/SandboxFs.d.ts.map +1 -0
- package/dist/substrate/lifo/sandbox/SandboxFs.js +136 -0
- package/dist/substrate/lifo/sandbox/index.d.ts +3 -0
- package/dist/substrate/lifo/sandbox/index.d.ts.map +1 -0
- package/dist/substrate/lifo/sandbox/index.js +1 -0
- package/dist/substrate/lifo/sandbox/types.d.ts +116 -0
- package/dist/substrate/lifo/sandbox/types.d.ts.map +1 -0
- package/dist/substrate/lifo/sandbox/types.js +1 -0
- package/dist/substrate/lifo/shell/ProcessRegistry.d.ts +142 -0
- package/dist/substrate/lifo/shell/ProcessRegistry.d.ts.map +1 -0
- package/dist/substrate/lifo/shell/ProcessRegistry.js +256 -0
- package/dist/substrate/lifo/shell/Shell.d.ts +170 -0
- package/dist/substrate/lifo/shell/Shell.d.ts.map +1 -0
- package/dist/substrate/lifo/shell/Shell.js +1863 -0
- package/dist/substrate/lifo/shell/completer.d.ts +19 -0
- package/dist/substrate/lifo/shell/completer.d.ts.map +1 -0
- package/dist/substrate/lifo/shell/completer.js +164 -0
- package/dist/substrate/lifo/shell/default-shell.d.ts +9 -0
- package/dist/substrate/lifo/shell/default-shell.d.ts.map +1 -0
- package/dist/substrate/lifo/shell/default-shell.js +53 -0
- package/dist/substrate/lifo/shell/expander.d.ts +48 -0
- package/dist/substrate/lifo/shell/expander.d.ts.map +1 -0
- package/dist/substrate/lifo/shell/expander.js +1204 -0
- package/dist/substrate/lifo/shell/history.d.ts +22 -0
- package/dist/substrate/lifo/shell/history.d.ts.map +1 -0
- package/dist/substrate/lifo/shell/history.js +121 -0
- package/dist/substrate/lifo/shell/interpreter.d.ts +257 -0
- package/dist/substrate/lifo/shell/interpreter.d.ts.map +1 -0
- package/dist/substrate/lifo/shell/interpreter.js +1490 -0
- package/dist/substrate/lifo/shell/jobs.d.ts +21 -0
- package/dist/substrate/lifo/shell/jobs.d.ts.map +1 -0
- package/dist/substrate/lifo/shell/jobs.js +48 -0
- package/dist/substrate/lifo/shell/lexer.d.ts +13 -0
- package/dist/substrate/lifo/shell/lexer.d.ts.map +1 -0
- package/dist/substrate/lifo/shell/lexer.js +614 -0
- package/dist/substrate/lifo/shell/parser.d.ts +7 -0
- package/dist/substrate/lifo/shell/parser.d.ts.map +1 -0
- package/dist/substrate/lifo/shell/parser.js +573 -0
- package/dist/substrate/lifo/shell/pipe.d.ts +15 -0
- package/dist/substrate/lifo/shell/pipe.d.ts.map +1 -0
- package/dist/substrate/lifo/shell/pipe.js +86 -0
- package/dist/substrate/lifo/shell/signals.d.ts +11 -0
- package/dist/substrate/lifo/shell/signals.d.ts.map +1 -0
- package/dist/substrate/lifo/shell/signals.js +57 -0
- package/dist/substrate/lifo/shell/terminal-stdin.d.ts +28 -0
- package/dist/substrate/lifo/shell/terminal-stdin.d.ts.map +1 -0
- package/dist/substrate/lifo/shell/terminal-stdin.js +100 -0
- package/dist/substrate/lifo/shell/test-builtin.d.ts +16 -0
- package/dist/substrate/lifo/shell/test-builtin.d.ts.map +1 -0
- package/dist/substrate/lifo/shell/test-builtin.js +237 -0
- package/dist/substrate/lifo/shell/types.d.ts +140 -0
- package/dist/substrate/lifo/shell/types.d.ts.map +1 -0
- package/dist/substrate/lifo/shell/types.js +25 -0
- package/dist/substrate/lifo/terminal/ITerminal.d.ts +10 -0
- package/dist/substrate/lifo/terminal/ITerminal.d.ts.map +1 -0
- package/dist/substrate/lifo/terminal/ITerminal.js +1 -0
- package/dist/substrate/lifo/utils/archive.d.ts +28 -0
- package/dist/substrate/lifo/utils/archive.d.ts.map +1 -0
- package/dist/substrate/lifo/utils/archive.js +323 -0
- package/dist/substrate/lifo/utils/args.d.ts +18 -0
- package/dist/substrate/lifo/utils/args.d.ts.map +1 -0
- package/dist/substrate/lifo/utils/args.js +73 -0
- package/dist/substrate/lifo/utils/colors.d.ts +27 -0
- package/dist/substrate/lifo/utils/colors.d.ts.map +1 -0
- package/dist/substrate/lifo/utils/colors.js +26 -0
- package/dist/substrate/lifo/utils/encoding.d.ts +4 -0
- package/dist/substrate/lifo/utils/encoding.d.ts.map +1 -0
- package/dist/substrate/lifo/utils/encoding.js +18 -0
- package/dist/substrate/lifo/utils/glob.d.ts +12 -0
- package/dist/substrate/lifo/utils/glob.d.ts.map +1 -0
- package/dist/substrate/lifo/utils/glob.js +150 -0
- package/dist/substrate/lifo/utils/mime.d.ts +4 -0
- package/dist/substrate/lifo/utils/mime.d.ts.map +1 -0
- package/dist/substrate/lifo/utils/mime.js +107 -0
- package/dist/substrate/lifo/utils/path.d.ts +12 -0
- package/dist/substrate/lifo/utils/path.d.ts.map +1 -0
- package/dist/substrate/lifo/utils/path.js +82 -0
- package/dist/vfs/events.d.ts +51 -0
- package/dist/vfs/events.d.ts.map +1 -0
- package/dist/vfs/events.js +127 -0
- package/dist/vfs/path.d.ts +46 -0
- package/dist/vfs/path.d.ts.map +1 -0
- package/dist/vfs/path.js +69 -0
- package/dist/vfs/seed-project.d.ts +62 -0
- package/dist/vfs/seed-project.d.ts.map +1 -0
- package/dist/vfs/seed-project.js +1054 -0
- package/dist/vfs/sqlite-vfs.d.ts +821 -0
- package/dist/vfs/sqlite-vfs.d.ts.map +1 -0
- package/dist/vfs/sqlite-vfs.js +4135 -0
- package/dist/vfs/symlink-registry.d.ts +60 -0
- package/dist/vfs/symlink-registry.d.ts.map +1 -0
- package/dist/vfs/symlink-registry.js +162 -0
- package/dist/workspace/nimbus-workspace.d.ts +94 -0
- package/dist/workspace/nimbus-workspace.d.ts.map +1 -0
- package/dist/workspace/nimbus-workspace.js +167 -0
- package/package.json +69 -0
- package/src/_shared/ai-egress.ts +91 -0
- package/src/_shared/byte-stream.ts +97 -0
- package/src/_shared/bytes.ts +19 -0
- package/src/_shared/cache-stats.ts +231 -0
- package/src/_shared/crypto.ts +184 -0
- package/src/_shared/esbuild-facet-shim.ts +22 -0
- package/src/_shared/exports-resolver.ts +308 -0
- package/src/_shared/facet-vfs-cursor.ts +58 -0
- package/src/_shared/install-phase.ts +56 -0
- package/src/_shared/lru-map.ts +59 -0
- package/src/_shared/real-node-imports.ts +53 -0
- package/src/_shared/retry.ts +202 -0
- package/src/_shared/rpc-dispose.ts +31 -0
- package/src/_shared/terminal.ts +3 -0
- package/src/_shared/typescript-specifiers.ts +86 -0
- package/src/_shared/untrusted-request.ts +75 -0
- package/src/_shared/vfs-write-ledger.ts +440 -0
- package/src/_shared/w7-frame.ts +1012 -0
- package/src/_shared/weighted-credit-pool.ts +244 -0
- package/src/constants.ts +285 -0
- package/src/index.ts +22 -0
- package/src/observability/diag-counters.ts +343 -0
- package/src/observability/heap-estimate.ts +331 -0
- package/src/observability/heavy-alloc-coord.ts +241 -0
- package/src/observability/oom-classify.ts +253 -0
- package/src/observability/oom-discriminator.ts +405 -0
- package/src/runtime/assets-loader.ts +189 -0
- package/src/runtime/barrel-detect.ts +69 -0
- package/src/runtime/bash/preamble.ts +1519 -0
- package/src/runtime/bash/types.ts +497 -0
- package/src/runtime/bundle-profile.ts +32 -0
- package/src/runtime/cirrus-vite-config-rewriter.ts +28 -0
- package/src/runtime/cli-flags.ts +11 -0
- package/src/runtime/comment-strip.ts +73 -0
- package/src/runtime/cpython-preamble.ts +298 -0
- package/src/runtime/esbuild-service.ts +1470 -0
- package/src/runtime/framework-detect.ts +245 -0
- package/src/runtime/import-meta-transform.ts +16 -0
- package/src/runtime/javascript-ast.ts +66 -0
- package/src/runtime/long-running-handle.ts +185 -0
- package/src/runtime/module-source-rewriter.ts +95 -0
- package/src/runtime/opentui-wasm-backend.ts +608 -0
- package/src/runtime/os-contracts.ts +529 -0
- package/src/runtime/port-registry.ts +298 -0
- package/src/runtime/process-input-routing.ts +92 -0
- package/src/runtime/process-input.ts +148 -0
- package/src/runtime/process-io-protocol.ts +97 -0
- package/src/runtime/process-logs.ts +882 -0
- package/src/runtime/process-table.ts +225 -0
- package/src/runtime/project-detect.ts +42 -0
- package/src/runtime/python-server-adapter.ts +133 -0
- package/src/runtime/require-resolver.ts +760 -0
- package/src/runtime/router-basename.ts +279 -0
- package/src/runtime/ruby-green-threads.ts +904 -0
- package/src/runtime/ruby-socket-shim.ts +548 -0
- package/src/runtime/session-process-supervisor.ts +323 -0
- package/src/runtime/sqlite-runtime-fs-bridge.ts +468 -0
- package/src/runtime/streams.ts +547 -0
- package/src/runtime/undici-shim.ts +517 -0
- package/src/runtime/vfs-manifest.ts +170 -0
- package/src/runtime/vfs-snapshot.ts +273 -0
- package/src/runtime/virtual-socket-kernel.ts +1370 -0
- package/src/runtime/vite-config-parser.ts +273 -0
- package/src/runtime/wasi/types.ts +448 -0
- package/src/runtime/wasi-instance.generated.ts +14 -0
- package/src/runtime/wasi-instance.ts +259 -0
- package/src/runtime/wasi-threads.ts +682 -0
- package/src/runtime/wasm-memory.ts +261 -0
- package/src/shell/elevation-commands.ts +117 -0
- package/src/shell/exec-dispatch.ts +201 -0
- package/src/shell/features.ts +870 -0
- package/src/shell/shell-entrypoints.ts +323 -0
- package/src/shell/shell-invocation.ts +181 -0
- package/src/shell/unix-accounts.ts +128 -0
- package/src/shell/unix-commands.ts +4335 -0
- package/src/substrate/lifo/UPSTREAM.md +14 -0
- package/src/substrate/lifo/commands/archive/gunzip.ts +63 -0
- package/src/substrate/lifo/commands/archive/gzip.ts +76 -0
- package/src/substrate/lifo/commands/archive/tar.ts +157 -0
- package/src/substrate/lifo/commands/archive/unzip.ts +112 -0
- package/src/substrate/lifo/commands/archive/zip.ts +70 -0
- package/src/substrate/lifo/commands/fs/basename.ts +16 -0
- package/src/substrate/lifo/commands/fs/cat.ts +54 -0
- package/src/substrate/lifo/commands/fs/chmod.ts +110 -0
- package/src/substrate/lifo/commands/fs/chown.ts +45 -0
- package/src/substrate/lifo/commands/fs/cp.ts +33 -0
- package/src/substrate/lifo/commands/fs/df.ts +56 -0
- package/src/substrate/lifo/commands/fs/dirname.ts +16 -0
- package/src/substrate/lifo/commands/fs/du.ts +100 -0
- package/src/substrate/lifo/commands/fs/file.ts +90 -0
- package/src/substrate/lifo/commands/fs/find.ts +76 -0
- package/src/substrate/lifo/commands/fs/ln.ts +19 -0
- package/src/substrate/lifo/commands/fs/ls.ts +164 -0
- package/src/substrate/lifo/commands/fs/mkdir.ts +37 -0
- package/src/substrate/lifo/commands/fs/mktemp.ts +56 -0
- package/src/substrate/lifo/commands/fs/mv.ts +111 -0
- package/src/substrate/lifo/commands/fs/realpath.ts +31 -0
- package/src/substrate/lifo/commands/fs/rm.ts +53 -0
- package/src/substrate/lifo/commands/fs/rmdir.ts +50 -0
- package/src/substrate/lifo/commands/fs/stat.ts +39 -0
- package/src/substrate/lifo/commands/fs/touch.ts +30 -0
- package/src/substrate/lifo/commands/fs/tree.ts +76 -0
- package/src/substrate/lifo/commands/index.ts +2 -0
- package/src/substrate/lifo/commands/io/dd.ts +289 -0
- package/src/substrate/lifo/commands/io/printf.ts +78 -0
- package/src/substrate/lifo/commands/io/tee.ts +37 -0
- package/src/substrate/lifo/commands/io/xargs.ts +49 -0
- package/src/substrate/lifo/commands/io/yes.ts +15 -0
- package/src/substrate/lifo/commands/net/curl.ts +739 -0
- package/src/substrate/lifo/commands/net/dig.ts +99 -0
- package/src/substrate/lifo/commands/net/forward.ts +90 -0
- package/src/substrate/lifo/commands/net/host.ts +182 -0
- package/src/substrate/lifo/commands/net/ifconfig.ts +139 -0
- package/src/substrate/lifo/commands/net/ip.ts +633 -0
- package/src/substrate/lifo/commands/net/netstat.ts +106 -0
- package/src/substrate/lifo/commands/net/ping.ts +74 -0
- package/src/substrate/lifo/commands/net/ports.ts +45 -0
- package/src/substrate/lifo/commands/net/route.ts +153 -0
- package/src/substrate/lifo/commands/net/tunnel-v2.ts +183 -0
- package/src/substrate/lifo/commands/net/tunnel.ts +272 -0
- package/src/substrate/lifo/commands/net/wget.ts +88 -0
- package/src/substrate/lifo/commands/registry.ts +141 -0
- package/src/substrate/lifo/commands/signal.ts +65 -0
- package/src/substrate/lifo/commands/system/bc.ts +265 -0
- package/src/substrate/lifo/commands/system/cal.ts +90 -0
- package/src/substrate/lifo/commands/system/date.ts +59 -0
- package/src/substrate/lifo/commands/system/env.ts +10 -0
- package/src/substrate/lifo/commands/system/fastfetch.ts +428 -0
- package/src/substrate/lifo/commands/system/free.ts +38 -0
- package/src/substrate/lifo/commands/system/help.ts +53 -0
- package/src/substrate/lifo/commands/system/hostname.ts +9 -0
- package/src/substrate/lifo/commands/system/kill.ts +89 -0
- package/src/substrate/lifo/commands/system/lifo.ts +525 -0
- package/src/substrate/lifo/commands/system/logout.ts +17 -0
- package/src/substrate/lifo/commands/system/man.ts +167 -0
- package/src/substrate/lifo/commands/system/node.ts +1305 -0
- package/src/substrate/lifo/commands/system/npm.ts +1078 -0
- package/src/substrate/lifo/commands/system/pkg.ts +111 -0
- package/src/substrate/lifo/commands/system/ps.ts +46 -0
- package/src/substrate/lifo/commands/system/registry-schemas.ts +33 -0
- package/src/substrate/lifo/commands/system/sha256sum.ts +89 -0
- package/src/substrate/lifo/commands/system/sl.ts +249 -0
- package/src/substrate/lifo/commands/system/sleep.ts +36 -0
- package/src/substrate/lifo/commands/system/stty.ts +69 -0
- package/src/substrate/lifo/commands/system/systemctl.ts +184 -0
- package/src/substrate/lifo/commands/system/top.ts +53 -0
- package/src/substrate/lifo/commands/system/uname.ts +59 -0
- package/src/substrate/lifo/commands/system/uptime.ts +19 -0
- package/src/substrate/lifo/commands/system/watch.ts +67 -0
- package/src/substrate/lifo/commands/system/which.ts +51 -0
- package/src/substrate/lifo/commands/system/whoami.ts +9 -0
- package/src/substrate/lifo/commands/text/awk.ts +210 -0
- package/src/substrate/lifo/commands/text/base64.ts +102 -0
- package/src/substrate/lifo/commands/text/cut.ts +92 -0
- package/src/substrate/lifo/commands/text/diff.ts +314 -0
- package/src/substrate/lifo/commands/text/grep.ts +170 -0
- package/src/substrate/lifo/commands/text/head.ts +95 -0
- package/src/substrate/lifo/commands/text/less.ts +335 -0
- package/src/substrate/lifo/commands/text/nano.ts +513 -0
- package/src/substrate/lifo/commands/text/nl.ts +74 -0
- package/src/substrate/lifo/commands/text/rev.ts +46 -0
- package/src/substrate/lifo/commands/text/sed.ts +297 -0
- package/src/substrate/lifo/commands/text/seq.ts +76 -0
- package/src/substrate/lifo/commands/text/sort.ts +88 -0
- package/src/substrate/lifo/commands/text/strings.ts +73 -0
- package/src/substrate/lifo/commands/text/tac.ts +37 -0
- package/src/substrate/lifo/commands/text/tail.ts +63 -0
- package/src/substrate/lifo/commands/text/tr.ts +192 -0
- package/src/substrate/lifo/commands/text/uniq.ts +77 -0
- package/src/substrate/lifo/commands/text/wc.ts +104 -0
- package/src/substrate/lifo/commands/types.ts +58 -0
- package/src/substrate/lifo/index.ts +173 -0
- package/src/substrate/lifo/kernel/ServiceManager.ts +371 -0
- package/src/substrate/lifo/kernel/index.ts +209 -0
- package/src/substrate/lifo/kernel/network/Bridge.ts +336 -0
- package/src/substrate/lifo/kernel/network/DNSResolver.ts +158 -0
- package/src/substrate/lifo/kernel/network/NetworkInterface.ts +235 -0
- package/src/substrate/lifo/kernel/network/NetworkNamespace.ts +182 -0
- package/src/substrate/lifo/kernel/network/NetworkStack.ts +590 -0
- package/src/substrate/lifo/kernel/network/PortBridge.ts +182 -0
- package/src/substrate/lifo/kernel/network/RoutingTable.ts +209 -0
- package/src/substrate/lifo/kernel/network/Socket.ts +245 -0
- package/src/substrate/lifo/kernel/network/index.ts +29 -0
- package/src/substrate/lifo/kernel/network/tunnel/BaseTunnel.ts +124 -0
- package/src/substrate/lifo/kernel/network/tunnel/VETHPair.ts +227 -0
- package/src/substrate/lifo/kernel/network/tunnel/WebSocketTunnel.ts +387 -0
- package/src/substrate/lifo/kernel/network/types.ts +178 -0
- package/src/substrate/lifo/kernel/persistence/PersistenceManager.ts +50 -0
- package/src/substrate/lifo/kernel/persistence/backends.ts +36 -0
- package/src/substrate/lifo/kernel/persistence/index.ts +5 -0
- package/src/substrate/lifo/kernel/persistence/serializer.ts +127 -0
- package/src/substrate/lifo/kernel/samples.ts +966 -0
- package/src/substrate/lifo/kernel/storage/BlobStore.ts +114 -0
- package/src/substrate/lifo/kernel/storage/ContentStore.ts +150 -0
- package/src/substrate/lifo/kernel/storage/index.ts +5 -0
- package/src/substrate/lifo/kernel/unit-parser.ts +95 -0
- package/src/substrate/lifo/kernel/vfs/VFS.ts +768 -0
- package/src/substrate/lifo/kernel/vfs/index.ts +9 -0
- package/src/substrate/lifo/kernel/vfs/providers/DevProvider.ts +172 -0
- package/src/substrate/lifo/kernel/vfs/providers/NativeFsProvider.ts +198 -0
- package/src/substrate/lifo/kernel/vfs/providers/ProcProvider.ts +144 -0
- package/src/substrate/lifo/kernel/vfs/types.ts +145 -0
- package/src/substrate/lifo/node-compat/buffer.ts +357 -0
- package/src/substrate/lifo/node-compat/child_process.ts +52 -0
- package/src/substrate/lifo/node-compat/console.ts +70 -0
- package/src/substrate/lifo/node-compat/crypto.ts +186 -0
- package/src/substrate/lifo/node-compat/dns.ts +214 -0
- package/src/substrate/lifo/node-compat/esbuild.ts +85 -0
- package/src/substrate/lifo/node-compat/events.ts +94 -0
- package/src/substrate/lifo/node-compat/fs.ts +762 -0
- package/src/substrate/lifo/node-compat/http.ts +561 -0
- package/src/substrate/lifo/node-compat/index.ts +300 -0
- package/src/substrate/lifo/node-compat/module.ts +148 -0
- package/src/substrate/lifo/node-compat/os.ts +44 -0
- package/src/substrate/lifo/node-compat/path.ts +74 -0
- package/src/substrate/lifo/node-compat/process.ts +178 -0
- package/src/substrate/lifo/node-compat/readline.ts +244 -0
- package/src/substrate/lifo/node-compat/rimraf.ts +80 -0
- package/src/substrate/lifo/node-compat/stream.ts +98 -0
- package/src/substrate/lifo/node-compat/string_decoder.ts +26 -0
- package/src/substrate/lifo/node-compat/timers.ts +21 -0
- package/src/substrate/lifo/node-compat/tty.ts +83 -0
- package/src/substrate/lifo/node-compat/url.ts +76 -0
- package/src/substrate/lifo/node-compat/util.ts +133 -0
- package/src/substrate/lifo/node-compat/zlib.ts +94 -0
- package/src/substrate/lifo/pkg/PackageManager.ts +105 -0
- package/src/substrate/lifo/pkg/lifo-dev.ts +130 -0
- package/src/substrate/lifo/pkg/lifo-runtime.ts +473 -0
- package/src/substrate/lifo/pkg/loader.ts +33 -0
- package/src/substrate/lifo/platform-globals.d.ts +41 -0
- package/src/substrate/lifo/sandbox/HeadlessTerminal.ts +38 -0
- package/src/substrate/lifo/sandbox/Sandbox.ts +279 -0
- package/src/substrate/lifo/sandbox/SandboxCommands.ts +74 -0
- package/src/substrate/lifo/sandbox/SandboxFs.ts +160 -0
- package/src/substrate/lifo/sandbox/index.ts +8 -0
- package/src/substrate/lifo/sandbox/types.ts +117 -0
- package/src/substrate/lifo/shell/ProcessRegistry.ts +379 -0
- package/src/substrate/lifo/shell/Shell.ts +2048 -0
- package/src/substrate/lifo/shell/completer.ts +212 -0
- package/src/substrate/lifo/shell/default-shell.ts +63 -0
- package/src/substrate/lifo/shell/expander.ts +1349 -0
- package/src/substrate/lifo/shell/history.ts +138 -0
- package/src/substrate/lifo/shell/interpreter.ts +1754 -0
- package/src/substrate/lifo/shell/jobs.ts +64 -0
- package/src/substrate/lifo/shell/lexer.ts +698 -0
- package/src/substrate/lifo/shell/parser.ts +711 -0
- package/src/substrate/lifo/shell/pipe.ts +92 -0
- package/src/substrate/lifo/shell/signals.ts +70 -0
- package/src/substrate/lifo/shell/terminal-stdin.ts +109 -0
- package/src/substrate/lifo/shell/test-builtin.ts +316 -0
- package/src/substrate/lifo/shell/types.ts +166 -0
- package/src/substrate/lifo/terminal/ITerminal.ts +9 -0
- package/src/substrate/lifo/utils/archive.ts +389 -0
- package/src/substrate/lifo/utils/args.ts +89 -0
- package/src/substrate/lifo/utils/colors.ts +29 -0
- package/src/substrate/lifo/utils/encoding.ts +21 -0
- package/src/substrate/lifo/utils/glob.ts +172 -0
- package/src/substrate/lifo/utils/mime.ts +114 -0
- package/src/substrate/lifo/utils/path.ts +83 -0
- package/src/types/assets.d.ts +4 -0
- package/src/vfs/events.ts +134 -0
- package/src/vfs/path.ts +71 -0
- package/src/vfs/seed-project.ts +1094 -0
- package/src/vfs/sqlite-vfs.ts +5035 -0
- package/src/vfs/symlink-registry.ts +172 -0
- package/src/workspace/nimbus-workspace.ts +213 -0
|
@@ -0,0 +1,669 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* wasi-threads.ts — pthread / wasi-threads parity for Nimbus.
|
|
3
|
+
*
|
|
4
|
+
* This is the host-side sibling of `ruby-green-threads.ts`. That file runs a
|
|
5
|
+
* green-thread scheduler INSIDE a guest VM (fibers of one wasm instance); this
|
|
6
|
+
* one runs the same model at the host layer, over MULTIPLE INSTANCES of one
|
|
7
|
+
* module sharing one `WebAssembly.Memory`. One concurrency model, two layers —
|
|
8
|
+
* the park set, run-to-park policy, deadlock detection and honest-limits
|
|
9
|
+
* statement below are deliberately the same contract, not a second one.
|
|
10
|
+
*
|
|
11
|
+
* ── Why this works at all ──────────────────────────────────────────────────
|
|
12
|
+
*
|
|
13
|
+
* Instantiating one compiled module N times against a single
|
|
14
|
+
* `new WebAssembly.Memory({ shared: true })` gives N wasm stacks over ONE
|
|
15
|
+
* linear memory, and — the load-bearing property — each instance gets its own
|
|
16
|
+
* GLOBALS, so every thread has a private `__stack_pointer` and `__tls_base`
|
|
17
|
+
* for free. wasi-libc's `wasi_thread_start` sets both from the start struct
|
|
18
|
+
* the spawning thread allocated, so TLS needs no host emulation.
|
|
19
|
+
*
|
|
20
|
+
* Threads of one process never cross an isolate boundary, so nothing here
|
|
21
|
+
* needs a primitive workerd lacks. What workerd does lack is request-time
|
|
22
|
+
* COMPILATION (`new WebAssembly.Module(bytes)` → "Wasm code generation
|
|
23
|
+
* disallowed by embedder"); instantiation of an already-compiled module is
|
|
24
|
+
* allowed. Every thread therefore reuses the one module the loader pool
|
|
25
|
+
* compiled at startup. That is why `startThread` is injected rather than built
|
|
26
|
+
* here: this file owns scheduling policy, the runner owns the module.
|
|
27
|
+
*
|
|
28
|
+
* ── 1. Scheduling policy ───────────────────────────────────────────────────
|
|
29
|
+
*
|
|
30
|
+
* Round-robin, run-to-park, creation order, exactly one thread executing at a
|
|
31
|
+
* time. A thread runs until it parks; each scheduling pass walks the threads in
|
|
32
|
+
* creation order and makes runnable every one whose wait condition is now
|
|
33
|
+
* satisfied; the head of the run queue then gets the token.
|
|
34
|
+
*
|
|
35
|
+
* Serialised execution is what makes correctness reachable without
|
|
36
|
+
* `Atomics.wait`: memory is genuinely shared, but access to it is serialised,
|
|
37
|
+
* so the scheduler introduces no data race of its own.
|
|
38
|
+
*
|
|
39
|
+
* ── 2. The park set ────────────────────────────────────────────────────────
|
|
40
|
+
*
|
|
41
|
+
* Every operation that can block MUST park, or it is a latent deadlock:
|
|
42
|
+
*
|
|
43
|
+
* futex wait (mutex, condvar, join, barrier, sem) here, `futexWait`
|
|
44
|
+
* sched_yield here, `yieldNow`
|
|
45
|
+
* every blocking WASI import (fd_read, poll_oneoff,
|
|
46
|
+
* sock_send/recv, …) wasi-instance,
|
|
47
|
+
* `withParkDeadline`
|
|
48
|
+
* → `parkIo`
|
|
49
|
+
*
|
|
50
|
+
* The WASI leg is one integration point rather than eight because
|
|
51
|
+
* `withParkDeadline` already wraps every parkable import and already knows
|
|
52
|
+
* "this call returned a promise, so it is a real park".
|
|
53
|
+
*
|
|
54
|
+
* ── 3. The software futex, and why there is no `futex_wake` ────────────────
|
|
55
|
+
*
|
|
56
|
+
* `Atomics.wait` throws in workerd (`SetAllowAtomicsWait(false)`), and the
|
|
57
|
+
* `memory.atomic.wait32` INSTRUCTION traps for the same reason — so a guest
|
|
58
|
+
* cannot block on memory by itself. wasi-libc provides the one hook that
|
|
59
|
+
* matters: `__wasilibc_futex_wait` calls the weak symbol
|
|
60
|
+
* `__wasilibc_futex_wait_maybe_busy` when it is defined, and falls back to the
|
|
61
|
+
* instruction when it is not. Defining it (see `runtime-contracts/`) routes
|
|
62
|
+
* every libc futex wait — mutex, condvar, join, barrier, semaphore — through
|
|
63
|
+
* the host import `nimbus_threads.futex_wait`.
|
|
64
|
+
*
|
|
65
|
+
* The matching wake is INLINED into libc as `memory.atomic.notify` and cannot
|
|
66
|
+
* be hooked. It does not need to be. A waiter parks on a PREDICATE —
|
|
67
|
+
* "*addr != expected" — and every scheduling pass re-evaluates it. Because
|
|
68
|
+
* exactly one thread runs at a time, memory can only change while some thread
|
|
69
|
+
* runs, and a scheduling pass happens at every park, yield and exit; so a
|
|
70
|
+
* predicate that is satisfiable at any instant a waiter could have run is
|
|
71
|
+
* observed at that instant. The futex is level-triggered rather than
|
|
72
|
+
* edge-triggered, which is strictly safer: a lost wakeup is not expressible.
|
|
73
|
+
*
|
|
74
|
+
* That same property makes deadlock detection EXACT rather than heuristic. If
|
|
75
|
+
* every live thread is parked on a predicate, none is satisfied, and no host
|
|
76
|
+
* I/O or timer is outstanding, then no thread can run, so memory can never
|
|
77
|
+
* change, so no predicate can ever become true. That is a proof, and it is
|
|
78
|
+
* reported as a deadlock instead of hanging — the `ruby-green-threads.ts`
|
|
79
|
+
* precedent ("every thread is blocked and nothing can wake them").
|
|
80
|
+
*
|
|
81
|
+
* ── 4. Timeouts and the suspension ceiling ─────────────────────────────────
|
|
82
|
+
*
|
|
83
|
+
* A wasm stack suspended inside a Durable Object resumes in a later request
|
|
84
|
+
* only under a measured ~15 s ceiling (`__WASI_PARK_CEILING_MS`); past it the
|
|
85
|
+
* promise never settles at all. A finite futex timeout longer than
|
|
86
|
+
* `__WASI_PARK_DEADLINE_MS` is therefore capped, and the capped expiry resolves
|
|
87
|
+
* as a SPURIOUS WAKEUP (0), not `ETIMEDOUT`. That composes correctly rather
|
|
88
|
+
* than by luck: POSIX permits spurious wakeups and every correct mutex/condvar
|
|
89
|
+
* caller re-checks its predicate in a loop, so the guest simply re-parks. An
|
|
90
|
+
* INFINITE wait gets no watchdog at all — the exact deadlock detection above
|
|
91
|
+
* is a better answer than waking a thread every ten seconds forever.
|
|
92
|
+
*
|
|
93
|
+
* ── 5. Honest limits ───────────────────────────────────────────────────────
|
|
94
|
+
*
|
|
95
|
+
* CORRECT: mutual exclusion, condition variables, `pthread_join`/detach, TLS,
|
|
96
|
+
* barriers, semaphores, once-init. A program correct under a real pthread
|
|
97
|
+
* library is correct here.
|
|
98
|
+
*
|
|
99
|
+
* NOT PARALLEL: one core, one runnable thread at a time. A CPU-bound N-thread
|
|
100
|
+
* program gets ZERO speedup and pays switching overhead on top. It finishes
|
|
101
|
+
* correctly and slower than the single-threaded version would. This is not a
|
|
102
|
+
* temporary state pending an offload path: every resident Nimbus process is a
|
|
103
|
+
* DO Facet, and facet siblings serialise on CPU (measured), so there is no
|
|
104
|
+
* independent-CPU substrate to escape to.
|
|
105
|
+
*
|
|
106
|
+
* NO PREEMPTION YET: a thread that never reaches the park set — a spinlock, a
|
|
107
|
+
* tight compute loop — holds the process until it does. Unlike the Ruby layer,
|
|
108
|
+
* which documents that preemption "is not possible" because it cannot rebuild
|
|
109
|
+
* the Ruby VM, that is fixable here (back-edge yield fuel in the module build)
|
|
110
|
+
* and is the next phase, not a permanent limit.
|
|
111
|
+
*
|
|
112
|
+
* LOUD, NEVER SILENTLY WRONG: a module that asks for `wasi.thread-spawn`
|
|
113
|
+
* without an imported shared memory, without exporting `wasi_thread_start`, or
|
|
114
|
+
* without the futex shim linked in is rejected at load with the exact remedy —
|
|
115
|
+
* see `wasiThreadsLoadError`. It is never run in a way that would corrupt.
|
|
116
|
+
*/
|
|
117
|
+
/** The import namespace the wasi-threads proposal defines. */
|
|
118
|
+
export const WASI_THREADS_NAMESPACE = 'wasi';
|
|
119
|
+
/** The import namespace carrying Nimbus's software futex. */
|
|
120
|
+
export const NIMBUS_THREADS_NAMESPACE = 'nimbus_threads';
|
|
121
|
+
/** The guest export a wasi-threads module must provide. */
|
|
122
|
+
export const WASI_THREAD_START_EXPORT = 'wasi_thread_start';
|
|
123
|
+
function readVarU32(bytes, at) {
|
|
124
|
+
let result = 0;
|
|
125
|
+
let shift = 0;
|
|
126
|
+
let i = at;
|
|
127
|
+
for (;;) {
|
|
128
|
+
if (i >= bytes.length)
|
|
129
|
+
throw new Error('wasm: truncated LEB128');
|
|
130
|
+
const b = bytes[i++];
|
|
131
|
+
result |= (b & 0x7f) << shift;
|
|
132
|
+
if ((b & 0x80) === 0)
|
|
133
|
+
return [result >>> 0, i];
|
|
134
|
+
shift += 7;
|
|
135
|
+
if (shift > 35)
|
|
136
|
+
throw new Error('wasm: LEB128 too long');
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Read the import and export sections of a wasm binary.
|
|
141
|
+
*
|
|
142
|
+
* The JS API exposes `WebAssembly.Module.imports()` but not the TYPE of an
|
|
143
|
+
* imported memory, and the host has to create that memory with the exact
|
|
144
|
+
* initial/maximum the module declares or instantiation fails. So the limits
|
|
145
|
+
* are read from the binary, supervisor-side, where the bytes already are.
|
|
146
|
+
* Only the two sections that matter are decoded; every other section is
|
|
147
|
+
* skipped by its declared length.
|
|
148
|
+
*/
|
|
149
|
+
export function inspectWasmThreads(bytes) {
|
|
150
|
+
const info = { spawns: false, futex: false, memory: null, threadStart: false };
|
|
151
|
+
if (bytes.length < 8)
|
|
152
|
+
return info;
|
|
153
|
+
if (bytes[0] !== 0x00 || bytes[1] !== 0x61 || bytes[2] !== 0x73 || bytes[3] !== 0x6d)
|
|
154
|
+
return info;
|
|
155
|
+
const utf8 = new TextDecoder();
|
|
156
|
+
let i = 8;
|
|
157
|
+
while (i < bytes.length) {
|
|
158
|
+
const id = bytes[i++];
|
|
159
|
+
let size;
|
|
160
|
+
[size, i] = readVarU32(bytes, i);
|
|
161
|
+
const end = i + size;
|
|
162
|
+
if (end > bytes.length)
|
|
163
|
+
break;
|
|
164
|
+
if (id === 2) {
|
|
165
|
+
let count;
|
|
166
|
+
let p = i;
|
|
167
|
+
[count, p] = readVarU32(bytes, p);
|
|
168
|
+
for (let n = 0; n < count; n++) {
|
|
169
|
+
let len;
|
|
170
|
+
[len, p] = readVarU32(bytes, p);
|
|
171
|
+
const mod = utf8.decode(bytes.subarray(p, p + len));
|
|
172
|
+
p += len;
|
|
173
|
+
[len, p] = readVarU32(bytes, p);
|
|
174
|
+
const name = utf8.decode(bytes.subarray(p, p + len));
|
|
175
|
+
p += len;
|
|
176
|
+
const kind = bytes[p++];
|
|
177
|
+
if (kind === 0x00) {
|
|
178
|
+
[, p] = readVarU32(bytes, p); // type index
|
|
179
|
+
if (mod === WASI_THREADS_NAMESPACE && name === 'thread-spawn')
|
|
180
|
+
info.spawns = true;
|
|
181
|
+
if (mod === NIMBUS_THREADS_NAMESPACE && name === 'futex_wait')
|
|
182
|
+
info.futex = true;
|
|
183
|
+
}
|
|
184
|
+
else if (kind === 0x01) {
|
|
185
|
+
p++; // reftype
|
|
186
|
+
const flags = bytes[p++];
|
|
187
|
+
[, p] = readVarU32(bytes, p); // initial
|
|
188
|
+
if (flags & 0x01)
|
|
189
|
+
[, p] = readVarU32(bytes, p);
|
|
190
|
+
}
|
|
191
|
+
else if (kind === 0x02) {
|
|
192
|
+
const flags = bytes[p++];
|
|
193
|
+
let initial;
|
|
194
|
+
[initial, p] = readVarU32(bytes, p);
|
|
195
|
+
let maximum = null;
|
|
196
|
+
if (flags & 0x01)
|
|
197
|
+
[maximum, p] = readVarU32(bytes, p);
|
|
198
|
+
info.memory = { module: mod, name, initial, maximum, shared: (flags & 0x02) !== 0 };
|
|
199
|
+
}
|
|
200
|
+
else if (kind === 0x03) {
|
|
201
|
+
p += 2; // valtype + mutability
|
|
202
|
+
}
|
|
203
|
+
else {
|
|
204
|
+
return info; // unknown import kind: stop, report what is known
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
else if (id === 7) {
|
|
209
|
+
let count;
|
|
210
|
+
let p = i;
|
|
211
|
+
[count, p] = readVarU32(bytes, p);
|
|
212
|
+
for (let n = 0; n < count; n++) {
|
|
213
|
+
let len;
|
|
214
|
+
[len, p] = readVarU32(bytes, p);
|
|
215
|
+
const name = utf8.decode(bytes.subarray(p, p + len));
|
|
216
|
+
p += len;
|
|
217
|
+
const kind = bytes[p++];
|
|
218
|
+
[, p] = readVarU32(bytes, p);
|
|
219
|
+
if (kind === 0x00 && name === WASI_THREAD_START_EXPORT)
|
|
220
|
+
info.threadStart = true;
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
i = end;
|
|
224
|
+
}
|
|
225
|
+
return info;
|
|
226
|
+
}
|
|
227
|
+
/**
|
|
228
|
+
* The build flags a threads module must have been linked with, quoted in every
|
|
229
|
+
* load error so the remedy travels with the diagnosis.
|
|
230
|
+
*/
|
|
231
|
+
const THREADS_LINK_FLAGS = '--target=wasm32-wasip1-threads -pthread '
|
|
232
|
+
+ '-Wl,--import-memory,--shared-memory,--max-memory=<bytes> '
|
|
233
|
+
+ 'and link runtime-contracts/nimbus-threads.c';
|
|
234
|
+
/**
|
|
235
|
+
* Why this module cannot be run with threads, or null when it can.
|
|
236
|
+
*
|
|
237
|
+
* Every unsupported shape fails HERE — at load, with the remedy — rather than
|
|
238
|
+
* part-way through a run with corrupted memory semantics. A module that does
|
|
239
|
+
* not ask for threads at all is not this function's business and returns null.
|
|
240
|
+
*/
|
|
241
|
+
export function wasiThreadsLoadError(info) {
|
|
242
|
+
if (!info.spawns)
|
|
243
|
+
return null;
|
|
244
|
+
if (!info.memory) {
|
|
245
|
+
return 'wasi-threads: this module imports wasi.thread-spawn but defines its own memory, so '
|
|
246
|
+
+ 'its threads could not share one address space. Rebuild with: ' + THREADS_LINK_FLAGS;
|
|
247
|
+
}
|
|
248
|
+
if (!info.memory.shared) {
|
|
249
|
+
return 'wasi-threads: this module imports a non-shared memory, which cannot back more than '
|
|
250
|
+
+ 'one instance. Rebuild with: ' + THREADS_LINK_FLAGS;
|
|
251
|
+
}
|
|
252
|
+
if (info.memory.maximum === null) {
|
|
253
|
+
return 'wasi-threads: a shared memory must declare a maximum size. Rebuild with: '
|
|
254
|
+
+ THREADS_LINK_FLAGS;
|
|
255
|
+
}
|
|
256
|
+
if (!info.threadStart) {
|
|
257
|
+
return 'wasi-threads: this module does not export ' + WASI_THREAD_START_EXPORT + ', so the host '
|
|
258
|
+
+ 'has no entry point to start a thread on. Rebuild with: ' + THREADS_LINK_FLAGS;
|
|
259
|
+
}
|
|
260
|
+
if (!info.futex) {
|
|
261
|
+
return 'wasi-threads: this module was not linked against the Nimbus futex shim, so every '
|
|
262
|
+
+ 'blocking pthread operation would execute memory.atomic.wait32, which traps on Workers '
|
|
263
|
+
+ '("Atomics.wait cannot be called in this context"). Link runtime-contracts/'
|
|
264
|
+
+ 'nimbus-threads.c into the program. If you DID link it, the wasi-libc you built against '
|
|
265
|
+
+ 'predates the weak __wasilibc_futex_wait_maybe_busy hook that file defines: nothing calls '
|
|
266
|
+
+ 'the definition, so the linker drops it and the build reports no error. Rebuild with '
|
|
267
|
+
+ 'wasi-sdk 27 or newer. Full build line: ' + THREADS_LINK_FLAGS;
|
|
268
|
+
}
|
|
269
|
+
return null;
|
|
270
|
+
}
|
|
271
|
+
/**
|
|
272
|
+
* Source string appended to the WASI preamble. Evaluated verbatim in the facet
|
|
273
|
+
* isolate, where the thread instances live — self-contained apart from the
|
|
274
|
+
* constants and the `__wasiThreads` slot the WASI preamble declares.
|
|
275
|
+
*/
|
|
276
|
+
export const WASI_THREADS_PREAMBLE_SRC = `
|
|
277
|
+
// ── BEGIN: wasi-threads preamble (green-thread scheduler + software futex) ───
|
|
278
|
+
// Source mirror: src/runtime/wasi-threads.ts. Keep in sync by hand.
|
|
279
|
+
|
|
280
|
+
// wasi-libc gives the main thread tid 1 and expects the host to allocate
|
|
281
|
+
// spawned tids above it; musl stores the tid as the mutex owner word, so a
|
|
282
|
+
// collision would make one thread able to unlock another's mutex.
|
|
283
|
+
const __WASI_THREAD_MAIN_TID = 1;
|
|
284
|
+
|
|
285
|
+
// A green thread costs an instance (its own globals + stack in shared memory),
|
|
286
|
+
// so an unbounded spawn loop is a memory fault with no error. pthread_create
|
|
287
|
+
// reports EAGAIN for exactly this, and the guest's own error path handles it.
|
|
288
|
+
const __WASI_THREADS_MAX = 128;
|
|
289
|
+
|
|
290
|
+
/**
|
|
291
|
+
* The scheduler. Owns every green thread and decides which one may run.
|
|
292
|
+
*
|
|
293
|
+
* It knows nothing about WebAssembly on purpose: \`startThread\` is supplied by
|
|
294
|
+
* whoever owns the compiled module, which keeps the "one startup-compiled
|
|
295
|
+
* module, instantiated per thread, never recompiled" rule where the module is.
|
|
296
|
+
*/
|
|
297
|
+
class __WasiThreadScheduler {
|
|
298
|
+
constructor(opts) {
|
|
299
|
+
// Re-read through .buffer on every access: a shared memory can grow, and a
|
|
300
|
+
// grown memory means a new backing buffer.
|
|
301
|
+
this.memory = opts.memory;
|
|
302
|
+
// (tid, startArg) -> Promise, resolving when that thread's body returns.
|
|
303
|
+
this.startThread = opts.startThread;
|
|
304
|
+
this.threads = []; // creation order — the scheduling pass walks this
|
|
305
|
+
this.nextTid = __WASI_THREAD_MAIN_TID + 1;
|
|
306
|
+
this.current = null; // the one thread holding the token
|
|
307
|
+
this.runQueue = [];
|
|
308
|
+
this.pendingIo = 0; // threads parked on a host promise
|
|
309
|
+
this.pendingTimers = 0; // futex waits with a live timer
|
|
310
|
+
this.finished = null; // { exitCode, error } once the process ends
|
|
311
|
+
this.settleProcess = null;
|
|
312
|
+
this.spawnError = null; // why the last thread-spawn returned EAGAIN
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
words() { return new Int32Array(this.memory.buffer); }
|
|
316
|
+
|
|
317
|
+
live() {
|
|
318
|
+
let n = 0;
|
|
319
|
+
for (const t of this.threads) if (t.state !== 'exited') n++;
|
|
320
|
+
return n;
|
|
321
|
+
}
|
|
322
|
+
|
|
323
|
+
// ── Import table ─────────────────────────────────────────────────────────
|
|
324
|
+
//
|
|
325
|
+
// thread-spawn returns i32 synchronously and must NOT be Suspending; futex
|
|
326
|
+
// waits park the caller and must be.
|
|
327
|
+
hostImports() {
|
|
328
|
+
const spawn = (startArg) => this.spawn(startArg | 0);
|
|
329
|
+
const futexWait = (addr, expected, maxWaitNs) => this.futexWait(addr | 0, expected | 0, maxWaitNs);
|
|
330
|
+
const suspending = (typeof WebAssembly !== 'undefined' && typeof WebAssembly.Suspending === 'function')
|
|
331
|
+
? new WebAssembly.Suspending(futexWait)
|
|
332
|
+
: futexWait;
|
|
333
|
+
return {
|
|
334
|
+
'${WASI_THREADS_NAMESPACE}': { 'thread-spawn': spawn },
|
|
335
|
+
'${NIMBUS_THREADS_NAMESPACE}': { futex_wait: suspending },
|
|
336
|
+
};
|
|
337
|
+
}
|
|
338
|
+
|
|
339
|
+
// ── Thread lifecycle ─────────────────────────────────────────────────────
|
|
340
|
+
|
|
341
|
+
record(tid) {
|
|
342
|
+
return {
|
|
343
|
+
tid,
|
|
344
|
+
state: 'runnable', // runnable | running | parked | exited
|
|
345
|
+
cond: null, // { word, expected } while futex-parked
|
|
346
|
+
timer: null,
|
|
347
|
+
settlePark: null,
|
|
348
|
+
resume: null,
|
|
349
|
+
};
|
|
350
|
+
}
|
|
351
|
+
|
|
352
|
+
/**
|
|
353
|
+
* wasi-threads \`thread-spawn\`: allocate a tid, hand the guest's start
|
|
354
|
+
* struct to a fresh instance, and queue it. Returns the tid, or a negative
|
|
355
|
+
* value the guest's pthread_create turns into EAGAIN.
|
|
356
|
+
*
|
|
357
|
+
* The child does not run here — the spawning thread keeps the token and runs
|
|
358
|
+
* to its next park, which is what run-to-park means and what makes the
|
|
359
|
+
* ordering reproducible.
|
|
360
|
+
*/
|
|
361
|
+
spawn(startArg) {
|
|
362
|
+
if (this.finished) return -__WASI_EAGAIN;
|
|
363
|
+
if (this.live() >= __WASI_THREADS_MAX) return -__WASI_EAGAIN;
|
|
364
|
+
const t = this.record(this.nextTid);
|
|
365
|
+
let begin;
|
|
366
|
+
try {
|
|
367
|
+
begin = this.startThread(t.tid, startArg);
|
|
368
|
+
} catch (e) {
|
|
369
|
+
// Instantiating the shared module failed (out of memory for the
|
|
370
|
+
// instance, or a host defect). The guest sees EAGAIN, which is the
|
|
371
|
+
// errno pthread_create already documents for "cannot create thread".
|
|
372
|
+
this.spawnError = 'thread-spawn failed: ' + ((e && e.message) ? e.message : String(e));
|
|
373
|
+
return -__WASI_EAGAIN;
|
|
374
|
+
}
|
|
375
|
+
this.nextTid++;
|
|
376
|
+
this.threads.push(t);
|
|
377
|
+
t.resume = () => {
|
|
378
|
+
let entered;
|
|
379
|
+
try {
|
|
380
|
+
entered = begin();
|
|
381
|
+
} catch (e) {
|
|
382
|
+
this.onThreadSettled(t, e);
|
|
383
|
+
return;
|
|
384
|
+
}
|
|
385
|
+
Promise.resolve(entered).then(() => this.onThreadSettled(t, null), (e) => this.onThreadSettled(t, e));
|
|
386
|
+
};
|
|
387
|
+
this.runQueue.push(t);
|
|
388
|
+
return t.tid;
|
|
389
|
+
}
|
|
390
|
+
|
|
391
|
+
/**
|
|
392
|
+
* Run the process. \`enter\` is the main thread's promising entry (_start).
|
|
393
|
+
* Resolves with the same shape __wasiRunStart returns.
|
|
394
|
+
*/
|
|
395
|
+
runMain(enter) {
|
|
396
|
+
const t = this.record(__WASI_THREAD_MAIN_TID);
|
|
397
|
+
t.state = 'running';
|
|
398
|
+
this.threads.push(t);
|
|
399
|
+
this.current = t;
|
|
400
|
+
const done = new Promise((resolve) => { this.settleProcess = resolve; });
|
|
401
|
+
let entered;
|
|
402
|
+
try {
|
|
403
|
+
entered = enter();
|
|
404
|
+
} catch (e) {
|
|
405
|
+
this.onThreadSettled(t, e);
|
|
406
|
+
return done;
|
|
407
|
+
}
|
|
408
|
+
Promise.resolve(entered).then(() => this.onThreadSettled(t, null), (e) => this.onThreadSettled(t, e));
|
|
409
|
+
return done;
|
|
410
|
+
}
|
|
411
|
+
|
|
412
|
+
onThreadSettled(t, err) {
|
|
413
|
+
t.state = 'exited';
|
|
414
|
+
if (t.timer !== null) { clearTimeout(t.timer); t.timer = null; this.pendingTimers--; }
|
|
415
|
+
if (this.current === t) this.current = null;
|
|
416
|
+
if (err) {
|
|
417
|
+
// proc_exit from ANY thread ends the process, which is POSIX exit(3).
|
|
418
|
+
if (err && err.constructor && err.constructor.name === '__WasiExit') {
|
|
419
|
+
this.endProcess({ exitCode: err.code });
|
|
420
|
+
return;
|
|
421
|
+
}
|
|
422
|
+
this.endProcess({
|
|
423
|
+
exitCode: 1,
|
|
424
|
+
error: 'thread ' + t.tid + ': ' + ((err && err.message) ? err.message : String(err)),
|
|
425
|
+
});
|
|
426
|
+
return;
|
|
427
|
+
}
|
|
428
|
+
// The main thread returning ends the process and every thread with it —
|
|
429
|
+
// POSIX semantics for exit(3), and the same rule ruby-green-threads
|
|
430
|
+
// applies when its main body finishes.
|
|
431
|
+
if (t.tid === __WASI_THREAD_MAIN_TID) {
|
|
432
|
+
this.endProcess({ exitCode: 0 });
|
|
433
|
+
return;
|
|
434
|
+
}
|
|
435
|
+
this.dispatch();
|
|
436
|
+
}
|
|
437
|
+
|
|
438
|
+
endProcess(result) {
|
|
439
|
+
if (this.finished) return;
|
|
440
|
+
this.finished = result;
|
|
441
|
+
this.current = null;
|
|
442
|
+
this.runQueue.length = 0;
|
|
443
|
+
for (const t of this.threads) {
|
|
444
|
+
if (t.timer !== null) { clearTimeout(t.timer); t.timer = null; }
|
|
445
|
+
}
|
|
446
|
+
this.pendingTimers = 0;
|
|
447
|
+
if (__wasiThreads === this) __wasiThreads = null;
|
|
448
|
+
// A failed spawn is reported to the guest as EAGAIN and usually surfaces
|
|
449
|
+
// as its own error message; if the program died without one, say why.
|
|
450
|
+
if (this.spawnError && !result.error && result.exitCode !== 0) result.error = this.spawnError;
|
|
451
|
+
this.settleProcess(result);
|
|
452
|
+
}
|
|
453
|
+
|
|
454
|
+
// ── The token ────────────────────────────────────────────────────────────
|
|
455
|
+
|
|
456
|
+
/**
|
|
457
|
+
* One scheduling pass, then hand the token to the head of the run queue.
|
|
458
|
+
*
|
|
459
|
+
* The pass walks the threads in creation order and makes runnable every one
|
|
460
|
+
* whose futex predicate now holds. It runs at every park, yield and exit —
|
|
461
|
+
* the only moments memory can have changed — which is what makes the
|
|
462
|
+
* level-triggered futex complete and the deadlock verdict exact.
|
|
463
|
+
*/
|
|
464
|
+
dispatch() {
|
|
465
|
+
if (this.finished || this.current) return;
|
|
466
|
+
const words = this.words();
|
|
467
|
+
for (const t of this.threads) {
|
|
468
|
+
if (t.state !== 'parked' || t.cond === null) continue;
|
|
469
|
+
if (Atomics.load(words, t.cond.word) !== t.cond.expected) this.makeRunnable(t, __WASI_ESUCCESS);
|
|
470
|
+
}
|
|
471
|
+
const next = this.runQueue.shift();
|
|
472
|
+
if (!next) { this.checkIdle(); return; }
|
|
473
|
+
this.current = next;
|
|
474
|
+
next.state = 'running';
|
|
475
|
+
const go = next.resume;
|
|
476
|
+
next.resume = null;
|
|
477
|
+
// Always a fresh task: a spawned thread's first entry runs wasm
|
|
478
|
+
// synchronously, and doing that from the parking thread's stack would nest
|
|
479
|
+
// one JS frame per context switch.
|
|
480
|
+
queueMicrotask(go);
|
|
481
|
+
}
|
|
482
|
+
|
|
483
|
+
makeRunnable(t, code) {
|
|
484
|
+
t.state = 'runnable';
|
|
485
|
+
t.cond = null;
|
|
486
|
+
if (t.timer !== null) { clearTimeout(t.timer); t.timer = null; this.pendingTimers--; }
|
|
487
|
+
const settle = t.settlePark;
|
|
488
|
+
t.settlePark = null;
|
|
489
|
+
t.resume = () => settle(code);
|
|
490
|
+
this.runQueue.push(t);
|
|
491
|
+
}
|
|
492
|
+
|
|
493
|
+
/**
|
|
494
|
+
* Nothing is runnable. Either the process is winding down, or every live
|
|
495
|
+
* thread is blocked on a predicate no thread can ever satisfy — which is a
|
|
496
|
+
* deadlock, provable rather than suspected, and reported instead of hung.
|
|
497
|
+
*/
|
|
498
|
+
checkIdle() {
|
|
499
|
+
if (this.finished || this.current || this.runQueue.length) return;
|
|
500
|
+
if (this.pendingIo > 0 || this.pendingTimers > 0) return;
|
|
501
|
+
const blocked = [];
|
|
502
|
+
for (const t of this.threads) if (t.state === 'parked') blocked.push(t.tid);
|
|
503
|
+
if (!blocked.length) return;
|
|
504
|
+
this.endProcess({
|
|
505
|
+
exitCode: 1,
|
|
506
|
+
error: 'deadlock: every thread is blocked and nothing can wake them (tids '
|
|
507
|
+
+ blocked.join(', ') + ')',
|
|
508
|
+
});
|
|
509
|
+
}
|
|
510
|
+
|
|
511
|
+
// ── The park set ─────────────────────────────────────────────────────────
|
|
512
|
+
|
|
513
|
+
/**
|
|
514
|
+
* The software futex. Returns 0 when woken, -EAGAIN when the word already
|
|
515
|
+
* moved (the race-free check uses the atomic load, which works — only
|
|
516
|
+
* Atomics.wait is blocked), and -ETIMEDOUT when a finite deadline expires.
|
|
517
|
+
* Mirrors the return contract of wasi-libc's own
|
|
518
|
+
* \`__wasilibc_futex_wait_atomic_wait\`, which is what it replaces.
|
|
519
|
+
*/
|
|
520
|
+
futexWait(addr, expected, maxWaitNs) {
|
|
521
|
+
if ((addr & 3) !== 0) return -__WASI_EINVAL;
|
|
522
|
+
const words = this.words();
|
|
523
|
+
const word = addr >>> 2;
|
|
524
|
+
if (word >= words.length) return -__WASI_EINVAL;
|
|
525
|
+
if (Atomics.load(words, word) !== expected) return -__WASI_EAGAIN;
|
|
526
|
+
const t = this.current;
|
|
527
|
+
if (!t) {
|
|
528
|
+
throw new Error('nimbus threads: futex_wait called outside a scheduled thread');
|
|
529
|
+
}
|
|
530
|
+
const ns = typeof maxWaitNs === 'bigint' ? maxWaitNs : BigInt(maxWaitNs === undefined ? -1 : maxWaitNs);
|
|
531
|
+
const infinite = ns < 0n;
|
|
532
|
+
const p = new Promise((resolve) => { t.settlePark = resolve; });
|
|
533
|
+
t.state = 'parked';
|
|
534
|
+
t.cond = { word, expected };
|
|
535
|
+
if (!infinite) {
|
|
536
|
+
// Capped at the park deadline: past the measured suspension ceiling a
|
|
537
|
+
// parked promise never settles at all. Expiry INSIDE the cap is a real
|
|
538
|
+
// ETIMEDOUT; expiry AT the cap is reported as a spurious wakeup, which
|
|
539
|
+
// POSIX permits and every correct futex caller already re-checks for.
|
|
540
|
+
const wantMs = Number(ns / 1000000n);
|
|
541
|
+
const waitMs = Math.min(wantMs, __WASI_PARK_DEADLINE_MS);
|
|
542
|
+
const timedOut = waitMs >= wantMs;
|
|
543
|
+
this.pendingTimers++;
|
|
544
|
+
t.timer = setTimeout(() => {
|
|
545
|
+
t.timer = null;
|
|
546
|
+
this.pendingTimers--;
|
|
547
|
+
if (t.state !== 'parked') return;
|
|
548
|
+
this.makeRunnable(t, timedOut ? -__WASI_ETIMEDOUT : __WASI_ESUCCESS);
|
|
549
|
+
this.dispatch();
|
|
550
|
+
}, waitMs);
|
|
551
|
+
}
|
|
552
|
+
this.current = null;
|
|
553
|
+
this.dispatch();
|
|
554
|
+
return p;
|
|
555
|
+
}
|
|
556
|
+
|
|
557
|
+
/**
|
|
558
|
+
* sched_yield: go to the BACK of the run queue so peers get a turn. This is
|
|
559
|
+
* also the primitive back-edge yield fuel will call once module builds carry
|
|
560
|
+
* it, which is why it is a scheduler operation rather than a WASI detail.
|
|
561
|
+
*/
|
|
562
|
+
yieldNow() {
|
|
563
|
+
const t = this.current;
|
|
564
|
+
if (!t || this.finished) return __WASI_ESUCCESS;
|
|
565
|
+
let settle;
|
|
566
|
+
const p = new Promise((resolve) => { settle = resolve; });
|
|
567
|
+
t.state = 'runnable';
|
|
568
|
+
t.resume = () => settle(__WASI_ESUCCESS);
|
|
569
|
+
this.runQueue.push(t);
|
|
570
|
+
this.current = null;
|
|
571
|
+
this.dispatch();
|
|
572
|
+
return p;
|
|
573
|
+
}
|
|
574
|
+
|
|
575
|
+
/**
|
|
576
|
+
* A blocking WASI import parked the running thread on a host promise. Give
|
|
577
|
+
* the token up while it waits, and take it back — through the run queue, not
|
|
578
|
+
* ahead of it — once the host answers.
|
|
579
|
+
*
|
|
580
|
+
* The promise is the one \`withParkDeadline\` already guarded, so it always
|
|
581
|
+
* settles; an unsettleable park would leave pendingIo raised and suppress
|
|
582
|
+
* the deadlock verdict, which is exactly what that watchdog exists to stop.
|
|
583
|
+
*/
|
|
584
|
+
parkIo(promise) {
|
|
585
|
+
const t = this.current;
|
|
586
|
+
if (!t || this.finished) return promise;
|
|
587
|
+
t.state = 'parked';
|
|
588
|
+
t.cond = null;
|
|
589
|
+
this.pendingIo++;
|
|
590
|
+
this.current = null;
|
|
591
|
+
this.dispatch();
|
|
592
|
+
const reacquire = (settle) => {
|
|
593
|
+
this.pendingIo--;
|
|
594
|
+
if (this.finished) return new Promise(() => {}); // the process is over; never resume
|
|
595
|
+
return new Promise((resolve) => {
|
|
596
|
+
t.state = 'runnable';
|
|
597
|
+
t.resume = () => resolve(undefined);
|
|
598
|
+
this.runQueue.push(t);
|
|
599
|
+
this.dispatch();
|
|
600
|
+
}).then(settle);
|
|
601
|
+
};
|
|
602
|
+
return promise.then(
|
|
603
|
+
(v) => reacquire(() => v),
|
|
604
|
+
(e) => reacquire(() => { throw e; }),
|
|
605
|
+
);
|
|
606
|
+
}
|
|
607
|
+
}
|
|
608
|
+
|
|
609
|
+
/**
|
|
610
|
+
* Create the process scheduler and publish it to the WASI layer, which routes
|
|
611
|
+
* its own parks through it. One facet is one process, so there is one
|
|
612
|
+
* scheduler, held the same way __wasiFS and __wasiSup are.
|
|
613
|
+
*/
|
|
614
|
+
function __wasiThreadsCreate(opts) {
|
|
615
|
+
__wasiThreads = new __WasiThreadScheduler(opts);
|
|
616
|
+
return __wasiThreads;
|
|
617
|
+
}
|
|
618
|
+
|
|
619
|
+
/**
|
|
620
|
+
* How a thread comes into existence: one more instance of the module the
|
|
621
|
+
* loader pool compiled at startup, bound to the same imports — and therefore
|
|
622
|
+
* the same shared memory, the same fd table and the same futex — entered at
|
|
623
|
+
* the guest's own \`wasi_thread_start\`, which sets that instance's private
|
|
624
|
+
* __stack_pointer and __tls_base from the start struct.
|
|
625
|
+
*
|
|
626
|
+
* Instantiating an already-compiled module is allowed at request time;
|
|
627
|
+
* COMPILING one is not ("Wasm code generation disallowed by embedder"), so
|
|
628
|
+
* nothing here may ever touch bytes.
|
|
629
|
+
*
|
|
630
|
+
* Returns a thunk rather than entering the guest, so a failed instantiation is
|
|
631
|
+
* reported to pthread_create as EAGAIN while the thread body itself starts
|
|
632
|
+
* only when the scheduler hands it the token.
|
|
633
|
+
*/
|
|
634
|
+
function __wasiThreadsStarter(module, importObject) {
|
|
635
|
+
return function startThread(tid, startArg) {
|
|
636
|
+
const child = new WebAssembly.Instance(module, importObject);
|
|
637
|
+
const entry = child.exports['${WASI_THREAD_START_EXPORT}'];
|
|
638
|
+
const promising = WebAssembly.promising(entry);
|
|
639
|
+
return () => promising(tid, startArg);
|
|
640
|
+
};
|
|
641
|
+
}
|
|
642
|
+
|
|
643
|
+
/**
|
|
644
|
+
* The threaded analogue of __wasiRunStartAsync: _start becomes thread 1 and
|
|
645
|
+
* the scheduler owns the process from there. Same result shape, so callers
|
|
646
|
+
* branch on nothing but which entry point they used.
|
|
647
|
+
*/
|
|
648
|
+
function __wasiRunStartThreads(instance, sched) {
|
|
649
|
+
const start = instance.exports._start;
|
|
650
|
+
if (typeof start !== 'function') {
|
|
651
|
+
return Promise.resolve({ exitCode: 1, error: '_start is not a function (got ' + typeof start + ')' });
|
|
652
|
+
}
|
|
653
|
+
if (typeof WebAssembly.promising !== 'function' || typeof WebAssembly.Suspending !== 'function') {
|
|
654
|
+
// Loud rather than "threads that are function calls": without JSPI a
|
|
655
|
+
// thread cannot be suspended, so the futex could not block and every
|
|
656
|
+
// contended lock would be silently wrong.
|
|
657
|
+
return Promise.resolve({
|
|
658
|
+
exitCode: 1,
|
|
659
|
+
error: 'wasi-threads requires JSPI (WebAssembly.promising / Suspending), which this runtime does not provide',
|
|
660
|
+
});
|
|
661
|
+
}
|
|
662
|
+
return sched.runMain(WebAssembly.promising(start));
|
|
663
|
+
}
|
|
664
|
+
|
|
665
|
+
globalThis.__wasiThreadsCreate = __wasiThreadsCreate;
|
|
666
|
+
globalThis.__wasiThreadsStarter = __wasiThreadsStarter;
|
|
667
|
+
globalThis.__wasiRunStartThreads = __wasiRunStartThreads;
|
|
668
|
+
// ── END: wasi-threads preamble ──────────────────────────────────────────────
|
|
669
|
+
`;
|