@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,904 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ruby-green-threads.ts - the concurrency substrate for ruby.wasm.
|
|
3
|
+
*
|
|
4
|
+
* This is a kernel component, not a shim to make one library pass. It is the
|
|
5
|
+
* model every guest runtime on Nimbus can use, so the contract is written down
|
|
6
|
+
* rather than left to be inferred.
|
|
7
|
+
*
|
|
8
|
+
* ── Why fibers ─────────────────────────────────────────────────────────────
|
|
9
|
+
*
|
|
10
|
+
* ruby.wasm has one thread of execution; `Thread.new` raises
|
|
11
|
+
* NotImplementedError. Running the block inline and returning a thread-shaped
|
|
12
|
+
* object is not a thread - it is a function call wearing a thread's name, and
|
|
13
|
+
* every program that uses threads for concurrency deadlocks or answers wrongly
|
|
14
|
+
* with no error.
|
|
15
|
+
*
|
|
16
|
+
* A fiber is a real suspension, and - this is the load-bearing property -
|
|
17
|
+
* one that survives a workerd request boundary. See "State ownership" below.
|
|
18
|
+
* So a thread is a fiber, and the scheduler here runs them: M:1 green threads,
|
|
19
|
+
* the model Ruby itself used before 1.9 and the model Node still uses to serve
|
|
20
|
+
* thousands of concurrent connections on one thread.
|
|
21
|
+
*
|
|
22
|
+
* ── 1. Scheduling policy ───────────────────────────────────────────────────
|
|
23
|
+
*
|
|
24
|
+
* Round-robin, run-to-park, no priorities. Each scheduling pass walks the
|
|
25
|
+
* threads in creation order and resumes every one whose wait condition is
|
|
26
|
+
* satisfied. A resumed thread runs until it parks or finishes.
|
|
27
|
+
*
|
|
28
|
+
* There is NO preemption, and none is possible: nothing can interrupt a fiber
|
|
29
|
+
* that does not yield. A CPU-bound thread therefore holds the process until it
|
|
30
|
+
* finishes. That is bounded and observable rather than silent - the virtual
|
|
31
|
+
* socket kernel's response timer fires and the caller gets a 504 naming the
|
|
32
|
+
* port, instead of a request that hangs forever. It is not hidden and it is
|
|
33
|
+
* not a bug to be "fixed" by going back to inline execution.
|
|
34
|
+
*
|
|
35
|
+
* ── 2. The park set ────────────────────────────────────────────────────────
|
|
36
|
+
*
|
|
37
|
+
* Every operation that can block MUST park, or it is a latent deadlock. The
|
|
38
|
+
* complete set, and where each lives:
|
|
39
|
+
*
|
|
40
|
+
* Thread#join, Thread#value here
|
|
41
|
+
* Queue#pop (empty), SizedQueue#push (full) here
|
|
42
|
+
* Mutex#lock (held), ConditionVariable#wait here
|
|
43
|
+
* sleep, on a thread or the main body here
|
|
44
|
+
* Timeout.timeout's deadline here
|
|
45
|
+
* TCPServer#accept ruby-socket-shim
|
|
46
|
+
* IO.select, over Nimbus sockets or a timeout ruby-socket-shim
|
|
47
|
+
* IO.pipe read on an empty pipe ruby-socket-shim
|
|
48
|
+
*
|
|
49
|
+
* ── 2a. Why a timed wait cannot wait here ──────────────────────────────────
|
|
50
|
+
*
|
|
51
|
+
* workerd freezes the clock inside a turn - a deliberate timing-attack
|
|
52
|
+
* mitigation, measured at 0ms elapsed across 200,000 Time.now reads. So a wait
|
|
53
|
+
* that watches the clock can never end: it consumes the process's whole CPU
|
|
54
|
+
* budget and the invocation is killed with nothing to show for it. Ruby's own
|
|
55
|
+
* sleep is exactly that loop, which is why nothing here calls it.
|
|
56
|
+
*
|
|
57
|
+
* The clock belongs to the host, so a deadline is something to hand back
|
|
58
|
+
* rather than something to watch. A parked thread records when it wants
|
|
59
|
+
* waking; the main body hands the earliest such moment to the host and yields;
|
|
60
|
+
* the host waits on a real timer and resumes the process with the clock moved
|
|
61
|
+
* on. Every wait shape above therefore takes a deadline, and one that has no
|
|
62
|
+
* deadline and nothing that could ever satisfy it is reported as a deadlock.
|
|
63
|
+
*
|
|
64
|
+
* That clock also has a RESOLUTION - Date.now, whole milliseconds - and a
|
|
65
|
+
* deadline landing between two of them is one it can never report reaching.
|
|
66
|
+
* `Time.now + 0.2` is exactly that deadline, because the double nearest 0.2 is
|
|
67
|
+
* 0.2000000000000000111: measured on workerd, the host resumes the process at
|
|
68
|
+
* precisely +200ms and the guest finds itself 1.1e-17s short, re-arms for the
|
|
69
|
+
* remainder, is resumed again with the clock unmoved, and burns the budget one
|
|
70
|
+
* round trip at a time. So a deadline is rounded UP onto the clock's grid as
|
|
71
|
+
* it enters the scheduler, which is the only form of it that can be reached.
|
|
72
|
+
*
|
|
73
|
+
* Ruby exports the synchronisation primitives under two names each - ::Queue
|
|
74
|
+
* and Thread::Queue - and defines both itself. BOTH have to resolve to the
|
|
75
|
+
* implementations here: the real ones wait for an OS thread to wake them,
|
|
76
|
+
* which a fiber can never be, so the first green thread that reaches one stops
|
|
77
|
+
* the process for good. WEBrick's timeout watcher reaches Thread::Queue#pop on
|
|
78
|
+
* its second connection, which is exactly how that was found.
|
|
79
|
+
*
|
|
80
|
+
* Deliberately NOT parked, and why it is safe: reads and writes on a CONNECTED
|
|
81
|
+
* socket descriptor suspend the wasm stack through JSPI instead of yielding to
|
|
82
|
+
* peers. An accepted connection's request is already buffered when it is
|
|
83
|
+
* accepted, and a dialed connection's response is produced by the host within
|
|
84
|
+
* the same request, so neither can wait on another green thread - they cannot
|
|
85
|
+
* deadlock. They do not interleave either: a thread blocked in a socket read
|
|
86
|
+
* stops its peers until the bytes arrive.
|
|
87
|
+
*
|
|
88
|
+
* ── 3. State ownership across the request boundary ─────────────────────────
|
|
89
|
+
*
|
|
90
|
+
* A workerd request context will NOT resume a wasm stack that a different
|
|
91
|
+
* request suspended. Measured: three requests inside one context all serve in
|
|
92
|
+
* 6ms; the first request in a new context times out at 30s. So what a thread
|
|
93
|
+
* is suspended in decides whether it survives:
|
|
94
|
+
*
|
|
95
|
+
* Fiber stacks, Ruby objects, thread-locals Ruby VM linear memory - SURVIVES
|
|
96
|
+
* A JSPI-suspended wasm stack bound to its request - DOES NOT
|
|
97
|
+
* Accept queues, connection byte queues host JS (the kernel) - SURVIVES
|
|
98
|
+
*
|
|
99
|
+
* The rule that falls out: a thread that must outlive the current request may
|
|
100
|
+
* only ever be suspended by Fiber.yield. That is why every entry in the park
|
|
101
|
+
* set above routes through Threading.park, and why the socket shim's blocking
|
|
102
|
+
* accept parks instead of awaiting the host.
|
|
103
|
+
*
|
|
104
|
+
* ── 4. Termination ─────────────────────────────────────────────────────────
|
|
105
|
+
*
|
|
106
|
+
* Thread#kill and process shutdown raise inside the fiber (Fiber#raise), so
|
|
107
|
+
* `ensure` blocks run and sockets close. Nothing is left parked holding a
|
|
108
|
+
* descriptor: when the main body finishes, every surviving thread is killed
|
|
109
|
+
* the same way, which is Ruby's own semantics for process exit.
|
|
110
|
+
*
|
|
111
|
+
* ── 5. Honest limits ───────────────────────────────────────────────────────
|
|
112
|
+
*
|
|
113
|
+
* No parallelism: one thread of execution, so CPU-bound work in a fiber blocks
|
|
114
|
+
* everyone until it yields. No preemption: scheduling points are the park set,
|
|
115
|
+
* nothing else. For I/O-bound work - per-connection handlers, watchdogs,
|
|
116
|
+
* timeouts - that is the whole of what threads are for here. CPU-parallel work
|
|
117
|
+
* sharing a heap is not available at this level, and it is not available at any
|
|
118
|
+
* other level either: every resident process is a DO Facet and facet siblings
|
|
119
|
+
* serialise on CPU, so there is nowhere to offload it to.
|
|
120
|
+
*
|
|
121
|
+
* The sharp edge of no preemption is a hand-rolled busy-wait: `until Time.now
|
|
122
|
+
* - t0 > 0.05; end` has no scheduling point, so nothing can reach it, and
|
|
123
|
+
* because the clock is frozen (§2a) it does not merely spin - it never ends.
|
|
124
|
+
* That is the one wait shape the scheduler cannot rescue. A program that wants
|
|
125
|
+
* to wait has to say so, through one of the park-set entries above.
|
|
126
|
+
*
|
|
127
|
+
* ── 6. The same model, one layer down ──────────────────────────────────────
|
|
128
|
+
*
|
|
129
|
+
* runtime/wasi-threads.ts is this contract at the HOST layer: green threads as
|
|
130
|
+
* multiple wasm instances over one shared linear memory, for guests whose
|
|
131
|
+
* threads are pthreads rather than fibers. Same park set, same run-to-park
|
|
132
|
+
* policy, same deadlock verdict, same honest limits. Two implementations of one
|
|
133
|
+
* concurrency model at two layers - not two models.
|
|
134
|
+
*/
|
|
135
|
+
export const RUBY_GREEN_THREADS = String.raw`
|
|
136
|
+
module Nimbus
|
|
137
|
+
# The scheduler. Owns every green thread and decides which may run.
|
|
138
|
+
module Threading
|
|
139
|
+
# Raised into a fiber to unwind it. Not a StandardError, so a bare
|
|
140
|
+
# rescue-StandardError in user code cannot swallow a kill.
|
|
141
|
+
class Killed < Exception; end
|
|
142
|
+
|
|
143
|
+
class << self
|
|
144
|
+
attr_accessor :running
|
|
145
|
+
|
|
146
|
+
# A process becomes host-driven the moment it listens: from then on an
|
|
147
|
+
# inbound request can resume it, so a wait with nothing else to wake it
|
|
148
|
+
# is still a wait rather than a deadlock.
|
|
149
|
+
attr_accessor :host_driven
|
|
150
|
+
|
|
151
|
+
# The main body is not a GreenThread, so the scheduler holds its wait
|
|
152
|
+
# state: when it wants waking, and any Timeout deadline armed over it.
|
|
153
|
+
attr_accessor :main_deadline
|
|
154
|
+
|
|
155
|
+
# The clock reports whole milliseconds and nothing finer, so a deadline
|
|
156
|
+
# between two of them is unreachable and its wait never ends. Round up
|
|
157
|
+
# onto the grid: rounding down would let a wait return early, and any
|
|
158
|
+
# deadline built as now + a Float is a hair above one almost every time.
|
|
159
|
+
CLOCK_RESOLUTION = Rational(1, 1000)
|
|
160
|
+
|
|
161
|
+
def on_the_clock(deadline)
|
|
162
|
+
Time.at((deadline.to_r / CLOCK_RESOLUTION).ceil * CLOCK_RESOLUTION)
|
|
163
|
+
end
|
|
164
|
+
|
|
165
|
+
def main_timeouts
|
|
166
|
+
@main_timeouts ||= []
|
|
167
|
+
end
|
|
168
|
+
|
|
169
|
+
def threads
|
|
170
|
+
@threads ||= []
|
|
171
|
+
end
|
|
172
|
+
|
|
173
|
+
def register(thread)
|
|
174
|
+
threads << thread
|
|
175
|
+
thread
|
|
176
|
+
end
|
|
177
|
+
|
|
178
|
+
def any_runnable?
|
|
179
|
+
threads.any? { |t| !t.finished? && t.runnable? }
|
|
180
|
+
end
|
|
181
|
+
|
|
182
|
+
# The soonest moment any waiting context wants to be woken: its own
|
|
183
|
+
# deadline, and any Timeout deadline armed over it. A wake is only ever a
|
|
184
|
+
# chance to re-check, so waking early costs a turn and waking late misses
|
|
185
|
+
# a deadline - which is why every deadline in the process is in here.
|
|
186
|
+
def wake_moments
|
|
187
|
+
moments = [main_deadline]
|
|
188
|
+
main_timeouts.each { |entry| moments << entry[0] }
|
|
189
|
+
threads.each do |thread|
|
|
190
|
+
next if thread.finished?
|
|
191
|
+
moments << thread.deadline
|
|
192
|
+
thread.timeouts.each { |entry| moments << entry[0] }
|
|
193
|
+
end
|
|
194
|
+
moments
|
|
195
|
+
end
|
|
196
|
+
|
|
197
|
+
def earliest_deadline
|
|
198
|
+
wake_moments.compact.min
|
|
199
|
+
end
|
|
200
|
+
|
|
201
|
+
# The deadlines Timeout has armed over whichever context is running.
|
|
202
|
+
def timeouts
|
|
203
|
+
running ? running.timeouts : main_timeouts
|
|
204
|
+
end
|
|
205
|
+
|
|
206
|
+
# Timeout can only fire where the block yields: nothing here can
|
|
207
|
+
# interrupt code that does not. So the deadline is registered against the
|
|
208
|
+
# context running the block and delivered at its next park - which is
|
|
209
|
+
# every entry in the park set, and so every point at which the block was
|
|
210
|
+
# going to be slow.
|
|
211
|
+
def with_timeout(seconds, error_class, message)
|
|
212
|
+
entry = [on_the_clock(Time.now + seconds), error_class, message]
|
|
213
|
+
armed = timeouts
|
|
214
|
+
armed << entry
|
|
215
|
+
begin
|
|
216
|
+
yield
|
|
217
|
+
ensure
|
|
218
|
+
armed.delete(entry)
|
|
219
|
+
end
|
|
220
|
+
end
|
|
221
|
+
|
|
222
|
+
# Ruby's own Timeout raises INTO the thread running the block, from a
|
|
223
|
+
# watchdog thread. The main body is the fiber the host resumes rather
|
|
224
|
+
# than a thread anything can raise into, so that delivery has nowhere to
|
|
225
|
+
# land. Registering the deadline here delivers it at the block's next
|
|
226
|
+
# wait instead, which is every point where the block was going to be
|
|
227
|
+
# slow, and the only point anything here can interrupt it at all.
|
|
228
|
+
def install_timeout_shim
|
|
229
|
+
return unless defined?(::Timeout)
|
|
230
|
+
return if ::Timeout.respond_to?(:__nimbus_scheduled_timeout)
|
|
231
|
+
::Timeout.singleton_class.class_eval do
|
|
232
|
+
define_method(:__nimbus_scheduled_timeout) { true }
|
|
233
|
+
define_method(:timeout) do |sec = nil, klass = nil, message = nil, &block|
|
|
234
|
+
raise LocalJumpError, 'no block given (yield)' unless block
|
|
235
|
+
return block.call(sec) if sec.nil? || sec.to_f <= 0
|
|
236
|
+
Nimbus::Threading.with_timeout(
|
|
237
|
+
sec.to_f, klass || ::Timeout::Error, message || 'execution expired'
|
|
238
|
+
) { block.call(sec) }
|
|
239
|
+
end
|
|
240
|
+
end
|
|
241
|
+
end
|
|
242
|
+
|
|
243
|
+
# Deliver a deadline that has passed for the context now running. Called
|
|
244
|
+
# at every scheduling point, which is the whole of when it can be.
|
|
245
|
+
def check_timeouts
|
|
246
|
+
armed = timeouts
|
|
247
|
+
entry = armed.find { |candidate| Time.now >= candidate[0] }
|
|
248
|
+
return nil unless entry
|
|
249
|
+
armed.delete(entry)
|
|
250
|
+
raise entry[1], entry[2]
|
|
251
|
+
end
|
|
252
|
+
|
|
253
|
+
# One scheduling pass: every runnable thread, in creation order, gets a
|
|
254
|
+
# turn. Returns whether any of them ran.
|
|
255
|
+
def run_others
|
|
256
|
+
ran = false
|
|
257
|
+
threads.dup.each do |thread|
|
|
258
|
+
next if thread.finished? || thread.equal?(running) || !thread.runnable?
|
|
259
|
+
thread.__nimbus_step
|
|
260
|
+
ran = true
|
|
261
|
+
end
|
|
262
|
+
ran
|
|
263
|
+
end
|
|
264
|
+
|
|
265
|
+
# Wait, optionally until a deadline. What waiting means depends on who is
|
|
266
|
+
# waiting.
|
|
267
|
+
#
|
|
268
|
+
# A spawned thread yields to the scheduler, recording what would unblock
|
|
269
|
+
# it and when it wants waking. The main body has no scheduler above it,
|
|
270
|
+
# so it runs its peers instead; if none of them can move either, it hands
|
|
271
|
+
# the earliest deadline in the process to the host and yields, because
|
|
272
|
+
# the host is what owns the clock and what advances it.
|
|
273
|
+
def park(condition = nil, deadline = nil)
|
|
274
|
+
deadline = on_the_clock(deadline) if deadline
|
|
275
|
+
wait = if condition && deadline
|
|
276
|
+
-> { condition.call || Time.now >= deadline }
|
|
277
|
+
elsif deadline
|
|
278
|
+
-> { Time.now >= deadline }
|
|
279
|
+
else
|
|
280
|
+
condition
|
|
281
|
+
end
|
|
282
|
+
thread = running
|
|
283
|
+
if thread
|
|
284
|
+
thread.blocked_on = wait
|
|
285
|
+
thread.deadline = deadline
|
|
286
|
+
begin
|
|
287
|
+
Fiber.yield
|
|
288
|
+
ensure
|
|
289
|
+
thread.blocked_on = nil
|
|
290
|
+
thread.deadline = nil
|
|
291
|
+
end
|
|
292
|
+
check_timeouts
|
|
293
|
+
return nil
|
|
294
|
+
end
|
|
295
|
+
previous = main_deadline
|
|
296
|
+
self.main_deadline = deadline
|
|
297
|
+
begin
|
|
298
|
+
progressed = run_others
|
|
299
|
+
check_timeouts
|
|
300
|
+
return nil if wait && wait.call
|
|
301
|
+
return nil if progressed
|
|
302
|
+
return nil if wait.nil?
|
|
303
|
+
soonest = earliest_deadline
|
|
304
|
+
# Nothing in the process is due, and no request will arrive to change
|
|
305
|
+
# that. Every context is blocked on something none of them can
|
|
306
|
+
# produce, so say so instead of hanging.
|
|
307
|
+
unless soonest || host_driven
|
|
308
|
+
raise ThreadError, 'deadlock: every thread is blocked and nothing can wake them'
|
|
309
|
+
end
|
|
310
|
+
# Hand the host the earliest deadline and give control back: it owns
|
|
311
|
+
# the clock, so it can serve other inbound connections meanwhile
|
|
312
|
+
# instead of the process sitting in one sleep.
|
|
313
|
+
$__nimbus_wake_after = soonest ? [soonest - Time.now, 0.0].max : nil
|
|
314
|
+
begin
|
|
315
|
+
Fiber.yield
|
|
316
|
+
ensure
|
|
317
|
+
$__nimbus_wake_after = nil
|
|
318
|
+
end
|
|
319
|
+
check_timeouts
|
|
320
|
+
ensure
|
|
321
|
+
self.main_deadline = previous
|
|
322
|
+
end
|
|
323
|
+
nil
|
|
324
|
+
end
|
|
325
|
+
|
|
326
|
+
# Give up this turn without waiting for anything in particular.
|
|
327
|
+
def pass
|
|
328
|
+
thread = running
|
|
329
|
+
if thread
|
|
330
|
+
thread.blocked_on = nil
|
|
331
|
+
Fiber.yield
|
|
332
|
+
else
|
|
333
|
+
run_others
|
|
334
|
+
end
|
|
335
|
+
check_timeouts
|
|
336
|
+
nil
|
|
337
|
+
end
|
|
338
|
+
|
|
339
|
+
# Process exit: unwind every surviving thread so its ensure blocks run
|
|
340
|
+
# and its descriptors close. Ruby's own semantics for the main thread
|
|
341
|
+
# ending, and the reason a parked fiber never leaks a socket.
|
|
342
|
+
#
|
|
343
|
+
# The scheduler's own state goes with them. A pooled VM runs one program
|
|
344
|
+
# after another, and a deadline, an armed timeout or a host-driven flag
|
|
345
|
+
# left behind would belong to the program before.
|
|
346
|
+
def shutdown
|
|
347
|
+
threads.dup.each { |t| t.kill unless t.finished? }
|
|
348
|
+
threads.clear
|
|
349
|
+
main_timeouts.clear
|
|
350
|
+
self.main_deadline = nil
|
|
351
|
+
self.host_driven = false
|
|
352
|
+
nil
|
|
353
|
+
end
|
|
354
|
+
end
|
|
355
|
+
end
|
|
356
|
+
|
|
357
|
+
# One green thread: a fiber, what it is waiting for, and its result.
|
|
358
|
+
class GreenThread
|
|
359
|
+
attr_accessor :blocked_on, :deadline
|
|
360
|
+
attr_accessor :name, :abort_on_exception, :report_on_exception
|
|
361
|
+
|
|
362
|
+
def initialize(*args, &block)
|
|
363
|
+
@locals = {}
|
|
364
|
+
@finished = false
|
|
365
|
+
@blocked_on = nil
|
|
366
|
+
@deadline = nil
|
|
367
|
+
@value = nil
|
|
368
|
+
@error = nil
|
|
369
|
+
@fiber = Fiber.new do
|
|
370
|
+
begin
|
|
371
|
+
@value = block.call(*args)
|
|
372
|
+
rescue Nimbus::Threading::Killed
|
|
373
|
+
# Killed: unwound on purpose, not an error to re-raise at join.
|
|
374
|
+
rescue Exception => e
|
|
375
|
+
@error = e
|
|
376
|
+
__nimbus_report_exception(e)
|
|
377
|
+
end
|
|
378
|
+
end
|
|
379
|
+
Nimbus::Threading.register(self)
|
|
380
|
+
end
|
|
381
|
+
|
|
382
|
+
# Ruby reports a thread that dies with an exception unless asked not to,
|
|
383
|
+
# and a thread nobody joins is exactly the case where that report is the
|
|
384
|
+
# only evidence there is. A green thread that reaches a primitive it cannot
|
|
385
|
+
# satisfy dies here, so staying silent turns a broken program into a
|
|
386
|
+
# program that merely does less than it was asked.
|
|
387
|
+
def __nimbus_report_exception(error)
|
|
388
|
+
report = @report_on_exception.nil? ? Thread.report_on_exception : @report_on_exception
|
|
389
|
+
return unless report
|
|
390
|
+
$stderr.write("#<Thread:#{object_id} #{@name || 'green'}> terminated with exception:\n")
|
|
391
|
+
$stderr.write(error.full_message(highlight: false, order: :top))
|
|
392
|
+
end
|
|
393
|
+
|
|
394
|
+
# Deadlines Timeout has armed over this thread, innermost last.
|
|
395
|
+
def timeouts
|
|
396
|
+
@timeouts ||= []
|
|
397
|
+
end
|
|
398
|
+
|
|
399
|
+
def runnable?
|
|
400
|
+
return false if @finished
|
|
401
|
+
return true if timeouts.any? { |entry| Time.now >= entry[0] }
|
|
402
|
+
return true if @blocked_on.nil?
|
|
403
|
+
@blocked_on.call
|
|
404
|
+
end
|
|
405
|
+
|
|
406
|
+
def finished?
|
|
407
|
+
@finished
|
|
408
|
+
end
|
|
409
|
+
|
|
410
|
+
def __nimbus_step
|
|
411
|
+
previous = Nimbus::Threading.running
|
|
412
|
+
Nimbus::Threading.running = self
|
|
413
|
+
begin
|
|
414
|
+
@fiber.resume if @fiber.alive?
|
|
415
|
+
ensure
|
|
416
|
+
Nimbus::Threading.running = previous
|
|
417
|
+
@finished = !@fiber.alive?
|
|
418
|
+
end
|
|
419
|
+
end
|
|
420
|
+
|
|
421
|
+
def join(limit = nil)
|
|
422
|
+
deadline = limit ? Time.now + limit : nil
|
|
423
|
+
until finished?
|
|
424
|
+
return nil if deadline && Time.now >= deadline
|
|
425
|
+
Nimbus::Threading.park(-> { finished? }, deadline)
|
|
426
|
+
end
|
|
427
|
+
# Kernel.raise, not Thread#raise: this class defines the latter, which
|
|
428
|
+
# would deliver the error back INTO the finished thread instead of
|
|
429
|
+
# re-raising it here.
|
|
430
|
+
Kernel.raise(@error) if @error
|
|
431
|
+
self
|
|
432
|
+
end
|
|
433
|
+
|
|
434
|
+
def value
|
|
435
|
+
join
|
|
436
|
+
@value
|
|
437
|
+
end
|
|
438
|
+
|
|
439
|
+
def alive?
|
|
440
|
+
!@finished
|
|
441
|
+
end
|
|
442
|
+
|
|
443
|
+
def status
|
|
444
|
+
return false if @finished && @error.nil?
|
|
445
|
+
return nil if @error
|
|
446
|
+
@blocked_on ? 'sleep' : 'run'
|
|
447
|
+
end
|
|
448
|
+
|
|
449
|
+
def stop?
|
|
450
|
+
@finished || !@blocked_on.nil?
|
|
451
|
+
end
|
|
452
|
+
|
|
453
|
+
# Unwind the fiber so ensure blocks run and descriptors close.
|
|
454
|
+
def kill
|
|
455
|
+
return self if @finished
|
|
456
|
+
begin
|
|
457
|
+
@fiber.raise(Nimbus::Threading::Killed, 'thread killed') if @fiber.alive?
|
|
458
|
+
rescue Exception
|
|
459
|
+
# The fiber may already be unwinding; either way it is done.
|
|
460
|
+
ensure
|
|
461
|
+
@finished = true
|
|
462
|
+
@blocked_on = nil
|
|
463
|
+
end
|
|
464
|
+
self
|
|
465
|
+
end
|
|
466
|
+
alias exit kill
|
|
467
|
+
alias terminate kill
|
|
468
|
+
|
|
469
|
+
def wakeup
|
|
470
|
+
@blocked_on = nil
|
|
471
|
+
self
|
|
472
|
+
end
|
|
473
|
+
alias run wakeup
|
|
474
|
+
|
|
475
|
+
# Thread#raise: deliver an exception INTO another thread. Watchdogs and
|
|
476
|
+
# timeout handlers are built on it, so a thread without it is not a thread.
|
|
477
|
+
# Fiber#raise resumes the target with the exception, which is exactly the
|
|
478
|
+
# delivery semantics - the target unwinds through its own ensure blocks.
|
|
479
|
+
def raise(*args)
|
|
480
|
+
return self if @finished
|
|
481
|
+
error = case args.length
|
|
482
|
+
when 0 then RuntimeError.new('unhandled exception')
|
|
483
|
+
when 1 then args[0].is_a?(String) ? RuntimeError.new(args[0]) : args[0]
|
|
484
|
+
else args[0].exception(args[1])
|
|
485
|
+
end
|
|
486
|
+
previous = Nimbus::Threading.running
|
|
487
|
+
Nimbus::Threading.running = self
|
|
488
|
+
begin
|
|
489
|
+
@fiber.raise(error) if @fiber.alive?
|
|
490
|
+
rescue Exception => e
|
|
491
|
+
@error = e
|
|
492
|
+
ensure
|
|
493
|
+
Nimbus::Threading.running = previous
|
|
494
|
+
@finished = !@fiber.alive?
|
|
495
|
+
@blocked_on = nil
|
|
496
|
+
end
|
|
497
|
+
self
|
|
498
|
+
end
|
|
499
|
+
|
|
500
|
+
def priority
|
|
501
|
+
0
|
|
502
|
+
end
|
|
503
|
+
|
|
504
|
+
def priority=(value)
|
|
505
|
+
value
|
|
506
|
+
end
|
|
507
|
+
|
|
508
|
+
def group
|
|
509
|
+
nil
|
|
510
|
+
end
|
|
511
|
+
|
|
512
|
+
def backtrace
|
|
513
|
+
[]
|
|
514
|
+
end
|
|
515
|
+
|
|
516
|
+
def inspect
|
|
517
|
+
'#<Thread green ' + (@finished ? 'dead' : 'run') + '>'
|
|
518
|
+
end
|
|
519
|
+
|
|
520
|
+
def [](key)
|
|
521
|
+
@locals[key]
|
|
522
|
+
end
|
|
523
|
+
|
|
524
|
+
def []=(key, value)
|
|
525
|
+
@locals[key] = value
|
|
526
|
+
end
|
|
527
|
+
|
|
528
|
+
def key?(key)
|
|
529
|
+
@locals.key?(key)
|
|
530
|
+
end
|
|
531
|
+
|
|
532
|
+
def keys
|
|
533
|
+
@locals.keys
|
|
534
|
+
end
|
|
535
|
+
|
|
536
|
+
def thread_variable_get(key)
|
|
537
|
+
@locals[key]
|
|
538
|
+
end
|
|
539
|
+
|
|
540
|
+
def thread_variable_set(key, value)
|
|
541
|
+
@locals[key] = value
|
|
542
|
+
end
|
|
543
|
+
|
|
544
|
+
def thread_variable?(key)
|
|
545
|
+
@locals.key?(key)
|
|
546
|
+
end
|
|
547
|
+
end
|
|
548
|
+
|
|
549
|
+
# The main body is not a GreenThread - it is the fiber the host resumes - but
|
|
550
|
+
# Thread.current has to answer for it, so it gets a stand-in carrying
|
|
551
|
+
# thread-locals.
|
|
552
|
+
class MainThread
|
|
553
|
+
def initialize
|
|
554
|
+
@locals = {}
|
|
555
|
+
end
|
|
556
|
+
|
|
557
|
+
def alive?
|
|
558
|
+
true
|
|
559
|
+
end
|
|
560
|
+
|
|
561
|
+
def status
|
|
562
|
+
'run'
|
|
563
|
+
end
|
|
564
|
+
|
|
565
|
+
def join(_limit = nil)
|
|
566
|
+
self
|
|
567
|
+
end
|
|
568
|
+
|
|
569
|
+
def value
|
|
570
|
+
nil
|
|
571
|
+
end
|
|
572
|
+
|
|
573
|
+
def name
|
|
574
|
+
'main'
|
|
575
|
+
end
|
|
576
|
+
|
|
577
|
+
def name=(value)
|
|
578
|
+
value
|
|
579
|
+
end
|
|
580
|
+
|
|
581
|
+
def kill
|
|
582
|
+
self
|
|
583
|
+
end
|
|
584
|
+
|
|
585
|
+
def [](key)
|
|
586
|
+
@locals[key]
|
|
587
|
+
end
|
|
588
|
+
|
|
589
|
+
def []=(key, value)
|
|
590
|
+
@locals[key] = value
|
|
591
|
+
end
|
|
592
|
+
|
|
593
|
+
def key?(key)
|
|
594
|
+
@locals.key?(key)
|
|
595
|
+
end
|
|
596
|
+
|
|
597
|
+
def keys
|
|
598
|
+
@locals.keys
|
|
599
|
+
end
|
|
600
|
+
|
|
601
|
+
def thread_variable_get(key)
|
|
602
|
+
@locals[key]
|
|
603
|
+
end
|
|
604
|
+
|
|
605
|
+
def thread_variable_set(key, value)
|
|
606
|
+
@locals[key] = value
|
|
607
|
+
end
|
|
608
|
+
|
|
609
|
+
def abort_on_exception=(value)
|
|
610
|
+
value
|
|
611
|
+
end
|
|
612
|
+
|
|
613
|
+
def report_on_exception=(value)
|
|
614
|
+
value
|
|
615
|
+
end
|
|
616
|
+
end
|
|
617
|
+
end
|
|
618
|
+
|
|
619
|
+
class Thread
|
|
620
|
+
class << self
|
|
621
|
+
def new(*args, &block)
|
|
622
|
+
raise ThreadError, 'must be called with a block' unless block
|
|
623
|
+
Nimbus::GreenThread.new(*args, &block)
|
|
624
|
+
end
|
|
625
|
+
alias_method :start, :new
|
|
626
|
+
alias_method :fork, :new
|
|
627
|
+
|
|
628
|
+
def current
|
|
629
|
+
Nimbus::Threading.running || main
|
|
630
|
+
end
|
|
631
|
+
|
|
632
|
+
def main
|
|
633
|
+
@__nimbus_main ||= Nimbus::MainThread.new
|
|
634
|
+
end
|
|
635
|
+
|
|
636
|
+
def pass
|
|
637
|
+
Nimbus::Threading.pass
|
|
638
|
+
end
|
|
639
|
+
|
|
640
|
+
def list
|
|
641
|
+
[main] + Nimbus::Threading.threads.reject(&:finished?)
|
|
642
|
+
end
|
|
643
|
+
|
|
644
|
+
# The default a thread inherits for reporting its own death. Ruby's is on,
|
|
645
|
+
# and a program that turns it off has to be able to.
|
|
646
|
+
attr_writer :report_on_exception
|
|
647
|
+
|
|
648
|
+
def report_on_exception
|
|
649
|
+
defined?(@report_on_exception) ? @report_on_exception : true
|
|
650
|
+
end
|
|
651
|
+
end
|
|
652
|
+
end
|
|
653
|
+
|
|
654
|
+
# ThreadGroup only tracks threads; with green threads there is nothing to
|
|
655
|
+
# isolate, but servers still add to one and join its members.
|
|
656
|
+
class NimbusThreadGroup
|
|
657
|
+
def initialize
|
|
658
|
+
@members = []
|
|
659
|
+
end
|
|
660
|
+
|
|
661
|
+
def add(thread)
|
|
662
|
+
@members << thread
|
|
663
|
+
self
|
|
664
|
+
end
|
|
665
|
+
|
|
666
|
+
def list
|
|
667
|
+
@members
|
|
668
|
+
end
|
|
669
|
+
|
|
670
|
+
def enclose
|
|
671
|
+
self
|
|
672
|
+
end
|
|
673
|
+
|
|
674
|
+
def enclosed?
|
|
675
|
+
false
|
|
676
|
+
end
|
|
677
|
+
end
|
|
678
|
+
|
|
679
|
+
# A queue that blocks the way a queue should: popping an empty one parks the
|
|
680
|
+
# caller until a push arrives. That hand-off is exactly what cannot work
|
|
681
|
+
# without real threads, so it is the sharpest test that these are real.
|
|
682
|
+
class NimbusQueue
|
|
683
|
+
def initialize
|
|
684
|
+
@items = []
|
|
685
|
+
@closed = false
|
|
686
|
+
end
|
|
687
|
+
|
|
688
|
+
def push(item)
|
|
689
|
+
raise ClosedQueueError, 'queue closed' if @closed
|
|
690
|
+
@items << item
|
|
691
|
+
self
|
|
692
|
+
end
|
|
693
|
+
alias << push
|
|
694
|
+
alias enq push
|
|
695
|
+
|
|
696
|
+
def pop(non_block = false)
|
|
697
|
+
loop do
|
|
698
|
+
return @items.shift unless @items.empty?
|
|
699
|
+
return nil if @closed
|
|
700
|
+
raise ThreadError, 'queue empty' if non_block
|
|
701
|
+
Nimbus::Threading.park(-> { !@items.empty? || @closed })
|
|
702
|
+
end
|
|
703
|
+
end
|
|
704
|
+
alias shift pop
|
|
705
|
+
alias deq pop
|
|
706
|
+
|
|
707
|
+
def close
|
|
708
|
+
@closed = true
|
|
709
|
+
self
|
|
710
|
+
end
|
|
711
|
+
|
|
712
|
+
def closed?
|
|
713
|
+
@closed
|
|
714
|
+
end
|
|
715
|
+
|
|
716
|
+
def empty?
|
|
717
|
+
@items.empty?
|
|
718
|
+
end
|
|
719
|
+
|
|
720
|
+
def size
|
|
721
|
+
@items.size
|
|
722
|
+
end
|
|
723
|
+
alias length size
|
|
724
|
+
|
|
725
|
+
def clear
|
|
726
|
+
@items.clear
|
|
727
|
+
self
|
|
728
|
+
end
|
|
729
|
+
|
|
730
|
+
def num_waiting
|
|
731
|
+
0
|
|
732
|
+
end
|
|
733
|
+
end
|
|
734
|
+
|
|
735
|
+
class NimbusSizedQueue < NimbusQueue
|
|
736
|
+
attr_reader :max
|
|
737
|
+
|
|
738
|
+
def initialize(max)
|
|
739
|
+
raise ArgumentError, 'queue size must be positive' unless max.to_i > 0
|
|
740
|
+
@max = max.to_i
|
|
741
|
+
super()
|
|
742
|
+
end
|
|
743
|
+
|
|
744
|
+
def push(item)
|
|
745
|
+
Nimbus::Threading.park(-> { size < @max }) while size >= @max
|
|
746
|
+
super
|
|
747
|
+
end
|
|
748
|
+
alias << push
|
|
749
|
+
alias enq push
|
|
750
|
+
end
|
|
751
|
+
|
|
752
|
+
# A mutex that parks rather than deadlocking. Ruby's own Mutex assumes real
|
|
753
|
+
# threads: locking one already held raises on the single OS thread instead of
|
|
754
|
+
# waiting, which is wrong once the waiter is a fiber that could yield.
|
|
755
|
+
class NimbusMutex
|
|
756
|
+
def initialize
|
|
757
|
+
@owner = nil
|
|
758
|
+
end
|
|
759
|
+
|
|
760
|
+
def lock
|
|
761
|
+
Nimbus::Threading.park(-> { @owner.nil? }) until @owner.nil?
|
|
762
|
+
@owner = Nimbus::Threading.running || :main
|
|
763
|
+
self
|
|
764
|
+
end
|
|
765
|
+
|
|
766
|
+
def unlock
|
|
767
|
+
@owner = nil
|
|
768
|
+
self
|
|
769
|
+
end
|
|
770
|
+
|
|
771
|
+
def try_lock
|
|
772
|
+
return false unless @owner.nil?
|
|
773
|
+
lock
|
|
774
|
+
true
|
|
775
|
+
end
|
|
776
|
+
|
|
777
|
+
def locked?
|
|
778
|
+
!@owner.nil?
|
|
779
|
+
end
|
|
780
|
+
|
|
781
|
+
def owned?
|
|
782
|
+
@owner == (Nimbus::Threading.running || :main)
|
|
783
|
+
end
|
|
784
|
+
|
|
785
|
+
def synchronize
|
|
786
|
+
lock
|
|
787
|
+
begin
|
|
788
|
+
yield
|
|
789
|
+
ensure
|
|
790
|
+
unlock
|
|
791
|
+
end
|
|
792
|
+
end
|
|
793
|
+
|
|
794
|
+
def sleep(timeout = nil)
|
|
795
|
+
unlock
|
|
796
|
+
begin
|
|
797
|
+
Kernel.sleep(timeout)
|
|
798
|
+
ensure
|
|
799
|
+
lock
|
|
800
|
+
end
|
|
801
|
+
end
|
|
802
|
+
end
|
|
803
|
+
|
|
804
|
+
class NimbusConditionVariable
|
|
805
|
+
def initialize
|
|
806
|
+
@signalled = 0
|
|
807
|
+
end
|
|
808
|
+
|
|
809
|
+
def wait(mutex, timeout = nil)
|
|
810
|
+
mutex.unlock
|
|
811
|
+
begin
|
|
812
|
+
deadline = timeout ? Time.now + timeout : nil
|
|
813
|
+
target = @signalled + 1
|
|
814
|
+
until @signalled >= target
|
|
815
|
+
break if deadline && Time.now >= deadline
|
|
816
|
+
Nimbus::Threading.park(-> { @signalled >= target }, deadline)
|
|
817
|
+
end
|
|
818
|
+
ensure
|
|
819
|
+
mutex.lock
|
|
820
|
+
end
|
|
821
|
+
self
|
|
822
|
+
end
|
|
823
|
+
|
|
824
|
+
def signal
|
|
825
|
+
@signalled += 1
|
|
826
|
+
self
|
|
827
|
+
end
|
|
828
|
+
|
|
829
|
+
def broadcast
|
|
830
|
+
@signalled += 1_000_000
|
|
831
|
+
self
|
|
832
|
+
end
|
|
833
|
+
end
|
|
834
|
+
|
|
835
|
+
# Ruby's own Queue, SizedQueue, Mutex and ConditionVariable block the VM: they
|
|
836
|
+
# wait for an OS thread to wake them, which a fiber can never be, so the first
|
|
837
|
+
# green thread that touches one stops the whole process - and dies with a
|
|
838
|
+
# fatal nobody sees. Ruby exports each of them under BOTH ::Queue and
|
|
839
|
+
# Thread::Queue, and defines both itself, so these are replacements rather than
|
|
840
|
+
# defaults: a guard that only fills in what is missing would never fire, and
|
|
841
|
+
# leaving either spelling on the real class is worse than leaving both, because
|
|
842
|
+
# a program then gets one parking primitive and one blocking one.
|
|
843
|
+
{
|
|
844
|
+
Queue: NimbusQueue,
|
|
845
|
+
SizedQueue: NimbusSizedQueue,
|
|
846
|
+
Mutex: NimbusMutex,
|
|
847
|
+
ConditionVariable: NimbusConditionVariable,
|
|
848
|
+
}.each_pair do |name, impl|
|
|
849
|
+
[Object, Thread].each do |scope|
|
|
850
|
+
scope.send(:remove_const, name) if scope.const_defined?(name, false)
|
|
851
|
+
scope.const_set(name, impl)
|
|
852
|
+
end
|
|
853
|
+
end
|
|
854
|
+
|
|
855
|
+
# ThreadGroup has no namespaced spelling; it only tracks threads, so a
|
|
856
|
+
# green-thread group has nothing to isolate.
|
|
857
|
+
Object.send(:remove_const, :ThreadGroup) if Object.const_defined?(:ThreadGroup, false)
|
|
858
|
+
Object.const_set(:ThreadGroup, NimbusThreadGroup)
|
|
859
|
+
|
|
860
|
+
module Kernel
|
|
861
|
+
# Ruby's own sleep waits by watching the clock, which is frozen inside a
|
|
862
|
+
# turn: it cannot end, and consumes the process's whole CPU budget trying. So
|
|
863
|
+
# sleeping is parking with a deadline, and the host is what waits.
|
|
864
|
+
#
|
|
865
|
+
# With no duration, sleep means "until something wakes me". A thread parks on
|
|
866
|
+
# a condition only Thread#wakeup can clear. The main body has no such caller,
|
|
867
|
+
# so it keeps running its peers - and if none of them can move either, park
|
|
868
|
+
# reports the deadlock rather than waiting for a caller that cannot exist.
|
|
869
|
+
#
|
|
870
|
+
# Guard on BOTH visibilities: module_function below makes the method public,
|
|
871
|
+
# so a private-only check would fail on a second application and re-alias
|
|
872
|
+
# sleep onto itself, recursing until the stack dies.
|
|
873
|
+
unless method_defined?(:__nimbus_scheduled_sleep) || private_method_defined?(:__nimbus_scheduled_sleep)
|
|
874
|
+
def __nimbus_scheduled_sleep(seconds = nil)
|
|
875
|
+
started = Time.now
|
|
876
|
+
if seconds.nil?
|
|
877
|
+
if Nimbus::Threading.running
|
|
878
|
+
Nimbus::Threading.park(-> { false })
|
|
879
|
+
else
|
|
880
|
+
loop { Nimbus::Threading.park(-> { false }) }
|
|
881
|
+
end
|
|
882
|
+
else
|
|
883
|
+
# Park first, then test: a zero or already-elapsed duration is Ruby's
|
|
884
|
+
# spelling of "give someone else a turn", and returning without one
|
|
885
|
+
# turns that idiom into a busy loop.
|
|
886
|
+
deadline = started + seconds
|
|
887
|
+
loop do
|
|
888
|
+
Nimbus::Threading.park(nil, deadline)
|
|
889
|
+
break if Time.now >= deadline
|
|
890
|
+
end
|
|
891
|
+
end
|
|
892
|
+
(Time.now - started).round
|
|
893
|
+
end
|
|
894
|
+
module_function :__nimbus_scheduled_sleep
|
|
895
|
+
public :__nimbus_scheduled_sleep
|
|
896
|
+
|
|
897
|
+
# Kernel.sleep is a SEPARATE copy taken when Ruby ran module_function on
|
|
898
|
+
# its own sleep, so redefining the instance method leaves callers of the
|
|
899
|
+
# module function on the original - the one that cannot end.
|
|
900
|
+
alias_method :sleep, :__nimbus_scheduled_sleep
|
|
901
|
+
module_function :sleep
|
|
902
|
+
end
|
|
903
|
+
end
|
|
904
|
+
`;
|