@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,1094 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* seed-project.ts — Materialize a polished Vite + React + TS + Tailwind +
|
|
3
|
+
* React Router starter at /home/user/app on first boot.
|
|
4
|
+
*
|
|
5
|
+
* Invariants:
|
|
6
|
+
* - Idempotent: won't re-seed once the sentinel (~/.nimbus-seeded) exists.
|
|
7
|
+
* - Atomic-ish: file bodies written in ONE writeBatch(); sentinel written
|
|
8
|
+
* in a SECOND writeBatch() so a crash between the two re-runs the whole
|
|
9
|
+
* seed on next boot (writeFile is idempotent, so retry is safe).
|
|
10
|
+
* - User escape hatch: `rm -rf ~/app ~/.nimbus-seeded` → next session
|
|
11
|
+
* regenerates from factory defaults (hard reset semantics).
|
|
12
|
+
*
|
|
13
|
+
* Design choices (see plan):
|
|
14
|
+
* - Root: /home/user/app (doesn't pollute the home dir)
|
|
15
|
+
* - Polished deps: react-router, framer-motion, lucide-react, tailwindcss
|
|
16
|
+
* - No pre-install of node_modules (~200MB; let the user see install run)
|
|
17
|
+
* - No auto-start of vite (surprising; README says `npm run dev`)
|
|
18
|
+
* - Basename injection (commit 2) handles the /preview/ basepath wiring.
|
|
19
|
+
*/
|
|
20
|
+
|
|
21
|
+
import type {
|
|
22
|
+
SqliteVFS,
|
|
23
|
+
BatchInodeEntry,
|
|
24
|
+
BatchChunkEntry,
|
|
25
|
+
} from './sqlite-vfs.js';
|
|
26
|
+
import { CHUNK_SIZE } from '../constants.js';
|
|
27
|
+
import { enc } from '../_shared/bytes.js';
|
|
28
|
+
import { CRED_KERNEL } from '../runtime/os-contracts.js';
|
|
29
|
+
|
|
30
|
+
/** Sentinel: if present, seed never runs again (until user deletes it). */
|
|
31
|
+
export const SEED_SENTINEL_PATH = 'home/user/.nimbus-seeded';
|
|
32
|
+
|
|
33
|
+
/** Project root. Absolute VFS path (no leading slash). */
|
|
34
|
+
export const SEED_PROJECT_DIR = 'home/user/app';
|
|
35
|
+
|
|
36
|
+
export interface SeedFile {
|
|
37
|
+
/** VFS path, no leading slash. */
|
|
38
|
+
path: string;
|
|
39
|
+
content: string;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
// ── File bodies ─────────────────────────────────────────────────────────
|
|
43
|
+
|
|
44
|
+
const PACKAGE_JSON = `{
|
|
45
|
+
"name": "nimbus-starter",
|
|
46
|
+
"private": true,
|
|
47
|
+
"version": "0.1.0",
|
|
48
|
+
"type": "module",
|
|
49
|
+
"scripts": {
|
|
50
|
+
"dev": "vite",
|
|
51
|
+
"build": "vite build",
|
|
52
|
+
"preview": "vite preview"
|
|
53
|
+
},
|
|
54
|
+
"dependencies": {
|
|
55
|
+
"react": "^18.3.1",
|
|
56
|
+
"react-dom": "^18.3.1",
|
|
57
|
+
"react-router-dom": "^6.26.0",
|
|
58
|
+
"framer-motion": "^11.11.0",
|
|
59
|
+
"lucide-react": "^0.460.0"
|
|
60
|
+
},
|
|
61
|
+
"devDependencies": {
|
|
62
|
+
"@types/react": "^18.3.0",
|
|
63
|
+
"@types/react-dom": "^18.3.0",
|
|
64
|
+
"tailwindcss": "^3.4.17",
|
|
65
|
+
"typescript": "^5.5.0",
|
|
66
|
+
"vite": "^5.4.0"
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
`;
|
|
70
|
+
|
|
71
|
+
const INDEX_HTML = `<!DOCTYPE html>
|
|
72
|
+
<html lang="en">
|
|
73
|
+
<head>
|
|
74
|
+
<meta charset="UTF-8" />
|
|
75
|
+
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
76
|
+
<title>Nimbus Starter</title>
|
|
77
|
+
<link rel="stylesheet" href="/src/index.css" />
|
|
78
|
+
</head>
|
|
79
|
+
<body class="bg-slate-950 text-slate-100 antialiased">
|
|
80
|
+
<div id="root"></div>
|
|
81
|
+
<script type="module" src="/src/main.tsx"></script>
|
|
82
|
+
</body>
|
|
83
|
+
</html>
|
|
84
|
+
`;
|
|
85
|
+
|
|
86
|
+
const VITE_CONFIG = `import { defineConfig } from 'vite';
|
|
87
|
+
|
|
88
|
+
export default defineConfig({
|
|
89
|
+
server: {
|
|
90
|
+
host: '0.0.0.0',
|
|
91
|
+
port: 5173,
|
|
92
|
+
},
|
|
93
|
+
});
|
|
94
|
+
`;
|
|
95
|
+
|
|
96
|
+
const TAILWIND_CONFIG = `/** @type {import('tailwindcss').Config} */
|
|
97
|
+
export default {
|
|
98
|
+
content: ['./index.html', './src/**/*.{ts,tsx,js,jsx}'],
|
|
99
|
+
theme: {
|
|
100
|
+
extend: {
|
|
101
|
+
fontFamily: {
|
|
102
|
+
sans: ['ui-sans-serif', 'system-ui', '-apple-system', 'sans-serif'],
|
|
103
|
+
mono: ['ui-monospace', 'SFMono-Regular', 'Menlo', 'monospace'],
|
|
104
|
+
},
|
|
105
|
+
},
|
|
106
|
+
},
|
|
107
|
+
plugins: [],
|
|
108
|
+
};
|
|
109
|
+
`;
|
|
110
|
+
|
|
111
|
+
const TSCONFIG_JSON = `{
|
|
112
|
+
"compilerOptions": {
|
|
113
|
+
"target": "ES2022",
|
|
114
|
+
"useDefineForClassFields": true,
|
|
115
|
+
"lib": ["ES2022", "DOM", "DOM.Iterable"],
|
|
116
|
+
"module": "ESNext",
|
|
117
|
+
"skipLibCheck": true,
|
|
118
|
+
"moduleResolution": "bundler",
|
|
119
|
+
"allowImportingTsExtensions": true,
|
|
120
|
+
"resolveJsonModule": true,
|
|
121
|
+
"isolatedModules": true,
|
|
122
|
+
"noEmit": true,
|
|
123
|
+
"jsx": "react-jsx",
|
|
124
|
+
"strict": true,
|
|
125
|
+
"noUnusedLocals": false,
|
|
126
|
+
"noUnusedParameters": false,
|
|
127
|
+
"noFallthroughCasesInSwitch": true
|
|
128
|
+
},
|
|
129
|
+
"include": ["src"]
|
|
130
|
+
}
|
|
131
|
+
`;
|
|
132
|
+
|
|
133
|
+
const INDEX_CSS = `@tailwind base;
|
|
134
|
+
@tailwind components;
|
|
135
|
+
@tailwind utilities;
|
|
136
|
+
|
|
137
|
+
html,
|
|
138
|
+
body,
|
|
139
|
+
#root {
|
|
140
|
+
height: 100%;
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
body {
|
|
144
|
+
font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont,
|
|
145
|
+
'Segoe UI', sans-serif;
|
|
146
|
+
font-feature-settings: 'cv02', 'cv03', 'cv04', 'cv11';
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
/* Layered background:
|
|
150
|
+
* 1. Warm orange spotlight from the top
|
|
151
|
+
* 2. Cool violet rim light from the right (depth, not color)
|
|
152
|
+
* 3. Faint grid pattern (Linear / Vercel-style)
|
|
153
|
+
* 4. Deep slate base
|
|
154
|
+
*/
|
|
155
|
+
body {
|
|
156
|
+
background-color: #020617;
|
|
157
|
+
background-image:
|
|
158
|
+
radial-gradient(1100px 520px at 18% -8%, rgba(243, 128, 32, 0.18), transparent 60%),
|
|
159
|
+
radial-gradient(900px 600px at 95% 10%, rgba(99, 102, 241, 0.08), transparent 60%),
|
|
160
|
+
linear-gradient(rgba(148, 163, 184, 0.04) 1px, transparent 1px),
|
|
161
|
+
linear-gradient(90deg, rgba(148, 163, 184, 0.04) 1px, transparent 1px);
|
|
162
|
+
background-size: auto, auto, 40px 40px, 40px 40px;
|
|
163
|
+
background-position: 0 0, 0 0, -1px -1px, -1px -1px;
|
|
164
|
+
background-attachment: fixed;
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
/* Selection */
|
|
168
|
+
::selection { background: rgba(243, 128, 32, 0.35); color: #fff7ed; }
|
|
169
|
+
|
|
170
|
+
/* Custom scrollbar */
|
|
171
|
+
::-webkit-scrollbar { width: 10px; height: 10px; }
|
|
172
|
+
::-webkit-scrollbar-track { background: transparent; }
|
|
173
|
+
::-webkit-scrollbar-thumb { background: #1e293b; border-radius: 8px; }
|
|
174
|
+
::-webkit-scrollbar-thumb:hover { background: #334155; }
|
|
175
|
+
|
|
176
|
+
/* Hero gradient text — sized so the bg-clip mask doesn't crop descenders */
|
|
177
|
+
.hero-gradient {
|
|
178
|
+
background: linear-gradient(135deg, #fdba74 0%, #f97316 35%, #f38020 60%, #fb7185 100%);
|
|
179
|
+
-webkit-background-clip: text;
|
|
180
|
+
background-clip: text;
|
|
181
|
+
color: transparent;
|
|
182
|
+
background-size: 200% 200%;
|
|
183
|
+
animation: hero-shift 12s ease-in-out infinite;
|
|
184
|
+
}
|
|
185
|
+
@keyframes hero-shift {
|
|
186
|
+
0%, 100% { background-position: 0% 50%; }
|
|
187
|
+
50% { background-position: 100% 50%; }
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
/* Soft glow ring on hover for feature cards */
|
|
191
|
+
.card-glow {
|
|
192
|
+
position: relative;
|
|
193
|
+
isolation: isolate;
|
|
194
|
+
}
|
|
195
|
+
.card-glow::before {
|
|
196
|
+
content: '';
|
|
197
|
+
position: absolute;
|
|
198
|
+
inset: -1px;
|
|
199
|
+
border-radius: inherit;
|
|
200
|
+
padding: 1px;
|
|
201
|
+
background: linear-gradient(135deg, rgba(243, 128, 32, 0.0), rgba(243, 128, 32, 0.0));
|
|
202
|
+
-webkit-mask: linear-gradient(#000 0 0) content-box, linear-gradient(#000 0 0);
|
|
203
|
+
-webkit-mask-composite: xor;
|
|
204
|
+
mask-composite: exclude;
|
|
205
|
+
pointer-events: none;
|
|
206
|
+
transition: background 280ms ease;
|
|
207
|
+
z-index: -1;
|
|
208
|
+
}
|
|
209
|
+
.card-glow:hover::before {
|
|
210
|
+
background: linear-gradient(135deg, rgba(243, 128, 32, 0.55), rgba(251, 113, 133, 0.25));
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
/* Terminal block */
|
|
214
|
+
.terminal {
|
|
215
|
+
background: linear-gradient(180deg, rgba(15, 23, 42, 0.85), rgba(2, 6, 23, 0.85));
|
|
216
|
+
border: 1px solid rgba(148, 163, 184, 0.12);
|
|
217
|
+
box-shadow:
|
|
218
|
+
inset 0 1px 0 rgba(255, 255, 255, 0.04),
|
|
219
|
+
0 20px 60px -20px rgba(243, 128, 32, 0.18);
|
|
220
|
+
}
|
|
221
|
+
`;
|
|
222
|
+
|
|
223
|
+
const MAIN_TSX = `import { StrictMode } from 'react';
|
|
224
|
+
import { createRoot } from 'react-dom/client';
|
|
225
|
+
import { RouterProvider, createBrowserRouter } from 'react-router-dom';
|
|
226
|
+
import App from './App';
|
|
227
|
+
import Home from './pages/Home';
|
|
228
|
+
import Docs from './pages/Docs';
|
|
229
|
+
import Playground from './pages/Playground';
|
|
230
|
+
import './index.css';
|
|
231
|
+
|
|
232
|
+
// Note: Nimbus automatically injects a \`basename\` matching this session's
|
|
233
|
+
// preview URL (e.g. "/s/<id>/preview") so links like <NavLink to="/docs">
|
|
234
|
+
// resolve correctly. To opt out, add the comment "// nimbus-no-basename"
|
|
235
|
+
// anywhere in this file, or set an explicit basename yourself — Nimbus
|
|
236
|
+
// will not override user-supplied values.
|
|
237
|
+
const router = createBrowserRouter([
|
|
238
|
+
{
|
|
239
|
+
path: '/',
|
|
240
|
+
element: <App />,
|
|
241
|
+
children: [
|
|
242
|
+
{ index: true, element: <Home /> },
|
|
243
|
+
{ path: 'docs', element: <Docs /> },
|
|
244
|
+
{ path: 'playground', element: <Playground /> },
|
|
245
|
+
],
|
|
246
|
+
},
|
|
247
|
+
]);
|
|
248
|
+
|
|
249
|
+
createRoot(document.getElementById('root')!).render(
|
|
250
|
+
<StrictMode>
|
|
251
|
+
<RouterProvider router={router} />
|
|
252
|
+
</StrictMode>,
|
|
253
|
+
);
|
|
254
|
+
`;
|
|
255
|
+
|
|
256
|
+
const APP_TSX = `import { NavLink, Outlet, useLocation } from 'react-router-dom';
|
|
257
|
+
import { motion, AnimatePresence } from 'framer-motion';
|
|
258
|
+
import { Home, FileText, Zap } from 'lucide-react';
|
|
259
|
+
|
|
260
|
+
const nav = [
|
|
261
|
+
{ to: '/', label: 'Home', icon: Home, end: true },
|
|
262
|
+
{ to: '/docs', label: 'Docs', icon: FileText, end: false },
|
|
263
|
+
{ to: '/playground', label: 'Playground', icon: Zap, end: false },
|
|
264
|
+
];
|
|
265
|
+
|
|
266
|
+
function Logo() {
|
|
267
|
+
return (
|
|
268
|
+
<div className="flex items-center gap-2.5 mb-10">
|
|
269
|
+
<div className="relative w-8 h-8 rounded-lg bg-gradient-to-br from-orange-400 via-orange-500 to-rose-500 shadow-lg shadow-orange-500/20 flex items-center justify-center">
|
|
270
|
+
<div className="absolute inset-0 rounded-lg bg-gradient-to-br from-white/20 to-transparent" />
|
|
271
|
+
<svg viewBox="0 0 24 24" className="relative w-4 h-4 text-white" fill="none" stroke="currentColor" strokeWidth="2.5" strokeLinecap="round" strokeLinejoin="round">
|
|
272
|
+
<path d="M17.5 19a4.5 4.5 0 1 0-1.4-8.78A6 6 0 0 0 4 13a4 4 0 0 0 .5 7.95"/>
|
|
273
|
+
</svg>
|
|
274
|
+
</div>
|
|
275
|
+
<div className="flex flex-col leading-none">
|
|
276
|
+
<div className="font-semibold tracking-tight text-slate-100">Nimbus</div>
|
|
277
|
+
<div className="text-[10px] text-slate-500 mt-0.5 tracking-wider uppercase">Edge OS</div>
|
|
278
|
+
</div>
|
|
279
|
+
</div>
|
|
280
|
+
);
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
export default function App() {
|
|
284
|
+
const loc = useLocation();
|
|
285
|
+
return (
|
|
286
|
+
<div className="min-h-full flex">
|
|
287
|
+
<aside className="w-60 shrink-0 border-r border-slate-800/60 p-6 flex flex-col gap-1 bg-slate-950/30 backdrop-blur-xl">
|
|
288
|
+
<Logo />
|
|
289
|
+
<div className="text-[10px] font-semibold uppercase tracking-wider text-slate-500 px-3 mb-2">
|
|
290
|
+
Navigation
|
|
291
|
+
</div>
|
|
292
|
+
{nav.map((n) => (
|
|
293
|
+
<NavLink
|
|
294
|
+
key={n.to}
|
|
295
|
+
to={n.to}
|
|
296
|
+
end={n.end}
|
|
297
|
+
className={({ isActive }) =>
|
|
298
|
+
\`group relative flex items-center gap-3 px-3 py-2 rounded-lg text-sm transition-all duration-200 \${
|
|
299
|
+
isActive
|
|
300
|
+
? 'bg-orange-500/10 text-orange-200 ring-1 ring-orange-500/25 shadow-[inset_0_1px_0_rgba(255,255,255,0.04)]'
|
|
301
|
+
: 'text-slate-400 hover:bg-slate-800/50 hover:text-slate-100'
|
|
302
|
+
}\`
|
|
303
|
+
}
|
|
304
|
+
>
|
|
305
|
+
{({ isActive }) => (
|
|
306
|
+
<>
|
|
307
|
+
{isActive && (
|
|
308
|
+
<motion.span
|
|
309
|
+
layoutId="nav-indicator"
|
|
310
|
+
className="absolute left-0 top-1/2 -translate-y-1/2 w-1 h-5 rounded-r-full bg-orange-400"
|
|
311
|
+
transition={{ type: 'spring', stiffness: 380, damping: 30 }}
|
|
312
|
+
/>
|
|
313
|
+
)}
|
|
314
|
+
<n.icon className={\`w-4 h-4 transition \${isActive ? 'text-orange-300' : 'text-slate-500 group-hover:text-slate-300'}\`} />
|
|
315
|
+
<span className="font-medium">{n.label}</span>
|
|
316
|
+
</>
|
|
317
|
+
)}
|
|
318
|
+
</NavLink>
|
|
319
|
+
))}
|
|
320
|
+
<div className="mt-auto pt-6 border-t border-slate-800/60">
|
|
321
|
+
<div className="flex items-center gap-2 mb-2">
|
|
322
|
+
<span className="relative flex h-2 w-2">
|
|
323
|
+
<span className="animate-ping absolute inline-flex h-full w-full rounded-full bg-emerald-400 opacity-60"></span>
|
|
324
|
+
<span className="relative inline-flex rounded-full h-2 w-2 bg-emerald-500"></span>
|
|
325
|
+
</span>
|
|
326
|
+
<span className="text-[11px] font-medium text-slate-300">Live in a Durable Object</span>
|
|
327
|
+
</div>
|
|
328
|
+
<div className="text-[11px] text-slate-500 leading-relaxed">
|
|
329
|
+
Edit <code className="text-slate-300 font-mono text-[10px] px-1 py-0.5 bg-slate-800/60 rounded">src/pages/Home.tsx</code> and save \u2014 HMR reloads instantly.
|
|
330
|
+
</div>
|
|
331
|
+
</div>
|
|
332
|
+
</aside>
|
|
333
|
+
<main className="flex-1 overflow-auto">
|
|
334
|
+
<AnimatePresence mode="wait">
|
|
335
|
+
<motion.div
|
|
336
|
+
key={loc.pathname}
|
|
337
|
+
initial={{ opacity: 0, y: 12 }}
|
|
338
|
+
animate={{ opacity: 1, y: 0 }}
|
|
339
|
+
exit={{ opacity: 0, y: -8 }}
|
|
340
|
+
transition={{ duration: 0.25, ease: [0.22, 1, 0.36, 1] }}
|
|
341
|
+
className="p-10 lg:p-14 max-w-6xl mx-auto"
|
|
342
|
+
>
|
|
343
|
+
<Outlet />
|
|
344
|
+
</motion.div>
|
|
345
|
+
</AnimatePresence>
|
|
346
|
+
</main>
|
|
347
|
+
</div>
|
|
348
|
+
);
|
|
349
|
+
}
|
|
350
|
+
`;
|
|
351
|
+
|
|
352
|
+
const HOME_TSX = `import { motion } from 'framer-motion';
|
|
353
|
+
import { Zap, HardDrive, Languages, ArrowRight, BookOpen } from 'lucide-react';
|
|
354
|
+
import { Link } from 'react-router-dom';
|
|
355
|
+
import SystemStats from '../components/SystemStats';
|
|
356
|
+
import Card from '../components/Card';
|
|
357
|
+
|
|
358
|
+
const features = [
|
|
359
|
+
{
|
|
360
|
+
icon: Languages,
|
|
361
|
+
title: 'Multi-language',
|
|
362
|
+
desc: 'Node + npm + git out of the box. nimbus install clang | python | ruby adds LLVM, Pyodide CPython 3.13, and ruby.wasm 3.3 \u2014 each with REPLs and persistent state.',
|
|
363
|
+
accent: 'from-orange-400/20 to-orange-600/5',
|
|
364
|
+
iconBg: 'from-orange-500/20 to-orange-600/10',
|
|
365
|
+
iconColor: 'text-orange-300',
|
|
366
|
+
},
|
|
367
|
+
{
|
|
368
|
+
icon: Zap,
|
|
369
|
+
title: 'Sub-second HMR',
|
|
370
|
+
desc: 'esbuild + Vite serve straight from the VFS. Edit a file, save, and your preview reflects it before your eye reaches the tab.',
|
|
371
|
+
accent: 'from-amber-400/20 to-amber-600/5',
|
|
372
|
+
iconBg: 'from-amber-500/20 to-amber-600/10',
|
|
373
|
+
iconColor: 'text-amber-300',
|
|
374
|
+
},
|
|
375
|
+
{
|
|
376
|
+
icon: HardDrive,
|
|
377
|
+
title: '10 GB Persistent VFS',
|
|
378
|
+
desc: 'A SQLite-backed filesystem that survives restarts. Clone real repos, install real packages, never lose a thing.',
|
|
379
|
+
accent: 'from-rose-400/20 to-rose-600/5',
|
|
380
|
+
iconBg: 'from-rose-500/20 to-rose-600/10',
|
|
381
|
+
iconColor: 'text-rose-300',
|
|
382
|
+
},
|
|
383
|
+
];
|
|
384
|
+
|
|
385
|
+
const fadeUp = {
|
|
386
|
+
initial: { opacity: 0, y: 16 },
|
|
387
|
+
animate: { opacity: 1, y: 0 },
|
|
388
|
+
};
|
|
389
|
+
|
|
390
|
+
export default function Home() {
|
|
391
|
+
return (
|
|
392
|
+
<div className="space-y-20">
|
|
393
|
+
{/* HERO */}
|
|
394
|
+
<header className="relative pt-4">
|
|
395
|
+
<motion.div
|
|
396
|
+
{...fadeUp}
|
|
397
|
+
transition={{ duration: 0.4, ease: [0.22, 1, 0.36, 1] }}
|
|
398
|
+
>
|
|
399
|
+
<div className="inline-flex items-center gap-2 px-3 py-1 rounded-full bg-orange-500/10 ring-1 ring-orange-500/30 text-orange-200 text-xs font-medium backdrop-blur">
|
|
400
|
+
<span className="relative flex h-1.5 w-1.5">
|
|
401
|
+
<span className="animate-ping absolute inline-flex h-full w-full rounded-full bg-orange-400 opacity-75"></span>
|
|
402
|
+
<span className="relative inline-flex rounded-full h-1.5 w-1.5 bg-orange-400"></span>
|
|
403
|
+
</span>
|
|
404
|
+
<span className="tracking-wide">Running on Cloudflare\u2019s edge \u00b7 v0.1</span>
|
|
405
|
+
</div>
|
|
406
|
+
</motion.div>
|
|
407
|
+
|
|
408
|
+
<motion.h1
|
|
409
|
+
{...fadeUp}
|
|
410
|
+
transition={{ duration: 0.5, ease: [0.22, 1, 0.36, 1], delay: 0.06 }}
|
|
411
|
+
className="mt-6 text-6xl md:text-7xl font-bold tracking-tight leading-[1.05] hero-gradient max-w-4xl pb-2"
|
|
412
|
+
>
|
|
413
|
+
A dev environment<br />that lives at the edge.
|
|
414
|
+
</motion.h1>
|
|
415
|
+
|
|
416
|
+
<motion.p
|
|
417
|
+
{...fadeUp}
|
|
418
|
+
transition={{ duration: 0.5, delay: 0.14 }}
|
|
419
|
+
className="mt-6 text-xl text-slate-400 max-w-2xl leading-relaxed"
|
|
420
|
+
>
|
|
421
|
+
Nimbus is a full Linux-like workspace \u2014 node, npm, git, vite \u2014
|
|
422
|
+
running entirely inside a single Cloudflare Durable Object. No VMs.
|
|
423
|
+
No cold starts. Just code.
|
|
424
|
+
</motion.p>
|
|
425
|
+
|
|
426
|
+
<motion.div
|
|
427
|
+
{...fadeUp}
|
|
428
|
+
transition={{ duration: 0.5, delay: 0.22 }}
|
|
429
|
+
className="mt-8 flex flex-wrap items-center gap-3"
|
|
430
|
+
>
|
|
431
|
+
<Link
|
|
432
|
+
to="/playground"
|
|
433
|
+
className="group inline-flex items-center gap-2 px-5 py-2.5 rounded-lg bg-orange-500 hover:bg-orange-400 text-white font-medium text-sm shadow-lg shadow-orange-500/25 hover:shadow-orange-500/40 transition-all hover:-translate-y-0.5"
|
|
434
|
+
>
|
|
435
|
+
Try the Playground
|
|
436
|
+
<ArrowRight className="w-4 h-4 transition-transform group-hover:translate-x-0.5" />
|
|
437
|
+
</Link>
|
|
438
|
+
<Link
|
|
439
|
+
to="/docs"
|
|
440
|
+
className="inline-flex items-center gap-2 px-5 py-2.5 rounded-lg bg-slate-900/60 hover:bg-slate-800/80 text-slate-200 font-medium text-sm ring-1 ring-slate-700/60 hover:ring-slate-600 transition"
|
|
441
|
+
>
|
|
442
|
+
<BookOpen className="w-4 h-4" />
|
|
443
|
+
Read the docs
|
|
444
|
+
</Link>
|
|
445
|
+
</motion.div>
|
|
446
|
+
|
|
447
|
+
{/* Terminal block */}
|
|
448
|
+
<motion.div
|
|
449
|
+
initial={{ opacity: 0, y: 24 }}
|
|
450
|
+
animate={{ opacity: 1, y: 0 }}
|
|
451
|
+
transition={{ duration: 0.6, delay: 0.32, ease: [0.22, 1, 0.36, 1] }}
|
|
452
|
+
className="mt-12 terminal rounded-xl overflow-hidden max-w-2xl"
|
|
453
|
+
>
|
|
454
|
+
<div className="flex items-center gap-2 px-4 py-2.5 border-b border-slate-800/60 bg-slate-950/40">
|
|
455
|
+
<div className="flex gap-1.5">
|
|
456
|
+
<span className="w-3 h-3 rounded-full bg-rose-500/70"></span>
|
|
457
|
+
<span className="w-3 h-3 rounded-full bg-amber-500/70"></span>
|
|
458
|
+
<span className="w-3 h-3 rounded-full bg-emerald-500/70"></span>
|
|
459
|
+
</div>
|
|
460
|
+
<span className="ml-2 text-[11px] text-slate-500 font-mono">~/app</span>
|
|
461
|
+
</div>
|
|
462
|
+
<pre className="px-5 py-4 text-[13px] font-mono leading-relaxed overflow-x-auto">
|
|
463
|
+
<span className="text-slate-600">$</span> <span className="text-slate-300">npm install</span>
|
|
464
|
+
<span className="text-slate-500"> added 184 packages in 8.9s</span>
|
|
465
|
+
<span className="text-slate-600">$</span> <span className="text-slate-300">npm run dev</span>
|
|
466
|
+
<span className="text-slate-500"> </span><span className="text-orange-300">VITE</span><span className="text-slate-500"> v5.4.0 ready in </span><span className="text-emerald-300">312 ms</span>
|
|
467
|
+
<span className="text-slate-500"> \u279c</span> <span className="text-slate-300">Local: </span><span className="text-orange-300 underline decoration-orange-500/40">http://localhost:5173/</span>
|
|
468
|
+
</pre>
|
|
469
|
+
</motion.div>
|
|
470
|
+
</header>
|
|
471
|
+
|
|
472
|
+
{/* FEATURES */}
|
|
473
|
+
<section>
|
|
474
|
+
<motion.div
|
|
475
|
+
{...fadeUp}
|
|
476
|
+
transition={{ duration: 0.4, delay: 0.4 }}
|
|
477
|
+
viewport={{ once: true }}
|
|
478
|
+
whileInView={{ opacity: 1, y: 0 }}
|
|
479
|
+
className="mb-8"
|
|
480
|
+
>
|
|
481
|
+
<h2 className="text-sm font-semibold uppercase tracking-wider text-slate-500">
|
|
482
|
+
Why Nimbus
|
|
483
|
+
</h2>
|
|
484
|
+
<p className="mt-1 text-2xl font-semibold tracking-tight text-slate-100">
|
|
485
|
+
The full stack. None of the weight.
|
|
486
|
+
</p>
|
|
487
|
+
</motion.div>
|
|
488
|
+
<div className="grid grid-cols-1 md:grid-cols-3 gap-5">
|
|
489
|
+
{features.map((f, i) => (
|
|
490
|
+
<motion.div
|
|
491
|
+
key={f.title}
|
|
492
|
+
initial={{ opacity: 0, y: 16 }}
|
|
493
|
+
whileInView={{ opacity: 1, y: 0 }}
|
|
494
|
+
viewport={{ once: true, margin: '-50px' }}
|
|
495
|
+
transition={{ delay: 0.05 + i * 0.08, duration: 0.5, ease: [0.22, 1, 0.36, 1] }}
|
|
496
|
+
>
|
|
497
|
+
<Card className="card-glow group h-full transition-all duration-300 hover:-translate-y-1">
|
|
498
|
+
<div className={\`w-11 h-11 rounded-xl bg-gradient-to-br \${f.iconBg} ring-1 ring-white/5 flex items-center justify-center mb-5 group-hover:scale-110 transition-transform duration-300\`}>
|
|
499
|
+
<f.icon className={\`w-5 h-5 \${f.iconColor}\`} />
|
|
500
|
+
</div>
|
|
501
|
+
<h3 className="font-semibold text-slate-100 text-base">{f.title}</h3>
|
|
502
|
+
<p className="text-sm text-slate-400 mt-2 leading-relaxed">{f.desc}</p>
|
|
503
|
+
</Card>
|
|
504
|
+
</motion.div>
|
|
505
|
+
))}
|
|
506
|
+
</div>
|
|
507
|
+
</section>
|
|
508
|
+
|
|
509
|
+
{/* LIVE STATS */}
|
|
510
|
+
<section>
|
|
511
|
+
<div className="mb-6">
|
|
512
|
+
<h2 className="text-sm font-semibold uppercase tracking-wider text-slate-500">
|
|
513
|
+
Live system stats
|
|
514
|
+
</h2>
|
|
515
|
+
<p className="mt-1 text-sm text-slate-500">
|
|
516
|
+
Polled from <code className="text-slate-400 font-mono">/api/stats</code> every 3s \u2014 your real Durable Object talking back.
|
|
517
|
+
</p>
|
|
518
|
+
</div>
|
|
519
|
+
<SystemStats />
|
|
520
|
+
</section>
|
|
521
|
+
|
|
522
|
+
<footer className="text-sm text-slate-500 pt-8 border-t border-slate-800/60 flex flex-wrap items-center justify-between gap-4">
|
|
523
|
+
<div>
|
|
524
|
+
Hack on this page: <code className="text-slate-300 font-mono">src/pages/Home.tsx</code>
|
|
525
|
+
</div>
|
|
526
|
+
<div className="flex items-center gap-1 text-xs">
|
|
527
|
+
<span className="w-1.5 h-1.5 rounded-full bg-orange-400 animate-pulse"></span>
|
|
528
|
+
<span className="text-slate-400">HMR connected</span>
|
|
529
|
+
</div>
|
|
530
|
+
</footer>
|
|
531
|
+
</div>
|
|
532
|
+
);
|
|
533
|
+
}
|
|
534
|
+
`;
|
|
535
|
+
|
|
536
|
+
const DOCS_TSX = `import Card from '../components/Card';
|
|
537
|
+
import { Terminal, GitBranch, Package, Rocket, Cpu, Code2, Boxes } from 'lucide-react';
|
|
538
|
+
|
|
539
|
+
const sections = [
|
|
540
|
+
{
|
|
541
|
+
icon: Terminal,
|
|
542
|
+
title: 'Open the terminal',
|
|
543
|
+
body: 'Connect via WebSocket to /ws. You get a full shell with node, npm, git, vite, esbuild and about 60 Unix utilities.',
|
|
544
|
+
},
|
|
545
|
+
{
|
|
546
|
+
icon: Package,
|
|
547
|
+
title: 'Install npm packages',
|
|
548
|
+
body: 'npm install works against the real registry. Nimbus uses a batched VFS + content-addressed cache so 500-package installs land in ~80 seconds.',
|
|
549
|
+
},
|
|
550
|
+
{
|
|
551
|
+
icon: GitBranch,
|
|
552
|
+
title: 'Clone a real repo',
|
|
553
|
+
body: 'git clone https://github.com/you/your-repo. Network and packfile processing run in a facet worker to keep the supervisor DO unblocked.',
|
|
554
|
+
},
|
|
555
|
+
{
|
|
556
|
+
icon: Boxes,
|
|
557
|
+
title: 'Install more runtimes',
|
|
558
|
+
body: 'nimbus install clang | python | ruby. Per-user wasm bundles streamed from R2 into the VFS. nimbus install --list shows what is installed; --available shows the catalog.',
|
|
559
|
+
},
|
|
560
|
+
{
|
|
561
|
+
icon: Cpu,
|
|
562
|
+
title: 'Compile native code',
|
|
563
|
+
body: 'nimbus install clang, then clang hello.c -o hello && ./hello. LLVM 8 to wasm32-wasi-nimbus, multi-translation-unit + user headers + fopen. A starter hello.c is already in your home directory.',
|
|
564
|
+
},
|
|
565
|
+
{
|
|
566
|
+
icon: Code2,
|
|
567
|
+
title: 'Run Python and Ruby',
|
|
568
|
+
body: "After nimbus install python (Pyodide 3.13) or ruby (ruby.wasm 3.3): python -c 'print(1+1)' / ruby -e 'puts 1+1', or just type python / ruby for an interactive REPL with persistent state.",
|
|
569
|
+
},
|
|
570
|
+
{
|
|
571
|
+
icon: Rocket,
|
|
572
|
+
title: 'Ship',
|
|
573
|
+
body: 'vite build emits to dist/. Preview via this session\\'s preview URL, or wire it up to serve from the Worker itself.',
|
|
574
|
+
},
|
|
575
|
+
];
|
|
576
|
+
|
|
577
|
+
export default function Docs() {
|
|
578
|
+
return (
|
|
579
|
+
<div className="space-y-10">
|
|
580
|
+
<header>
|
|
581
|
+
<div className="text-xs font-semibold uppercase tracking-wider text-orange-400/80">Documentation</div>
|
|
582
|
+
<h1 className="mt-2 text-5xl font-bold tracking-tight text-slate-100">Get started</h1>
|
|
583
|
+
<p className="text-slate-400 mt-3 text-lg max-w-2xl">
|
|
584
|
+
Seven things worth knowing about Nimbus before you ship something with it.
|
|
585
|
+
</p>
|
|
586
|
+
</header>
|
|
587
|
+
<div className="space-y-4">
|
|
588
|
+
{sections.map((s, i) => (
|
|
589
|
+
<Card key={s.title} className="hover:border-orange-500/20 transition-colors">
|
|
590
|
+
<div className="flex gap-5">
|
|
591
|
+
<div className="shrink-0 w-11 h-11 rounded-xl bg-gradient-to-br from-orange-500/15 to-rose-500/5 ring-1 ring-orange-500/20 flex items-center justify-center">
|
|
592
|
+
<s.icon className="w-5 h-5 text-orange-300" />
|
|
593
|
+
</div>
|
|
594
|
+
<div className="flex-1">
|
|
595
|
+
<div className="flex items-center gap-3">
|
|
596
|
+
<span className="text-xs font-mono text-slate-500">0{i + 1}</span>
|
|
597
|
+
<h3 className="font-semibold text-slate-100 text-lg">{s.title}</h3>
|
|
598
|
+
</div>
|
|
599
|
+
<p className="text-sm text-slate-400 mt-2 leading-relaxed">{s.body}</p>
|
|
600
|
+
</div>
|
|
601
|
+
</div>
|
|
602
|
+
</Card>
|
|
603
|
+
))}
|
|
604
|
+
</div>
|
|
605
|
+
<div className="text-sm text-slate-500 pt-6 border-t border-slate-800/60">
|
|
606
|
+
Full source at <code className="text-slate-300 font-mono">src/pages/Docs.tsx</code>.
|
|
607
|
+
</div>
|
|
608
|
+
</div>
|
|
609
|
+
);
|
|
610
|
+
}
|
|
611
|
+
`;
|
|
612
|
+
|
|
613
|
+
const PLAYGROUND_TSX = `import { useState } from 'react';
|
|
614
|
+
import { motion } from 'framer-motion';
|
|
615
|
+
import { Heart, Star, Sparkles, Zap, RefreshCcw } from 'lucide-react';
|
|
616
|
+
import Card from '../components/Card';
|
|
617
|
+
|
|
618
|
+
export default function Playground() {
|
|
619
|
+
const [count, setCount] = useState(0);
|
|
620
|
+
const [liked, setLiked] = useState(false);
|
|
621
|
+
return (
|
|
622
|
+
<div className="space-y-10">
|
|
623
|
+
<header>
|
|
624
|
+
<div className="text-xs font-semibold uppercase tracking-wider text-orange-400/80">Playground</div>
|
|
625
|
+
<h1 className="mt-2 text-5xl font-bold tracking-tight text-slate-100">
|
|
626
|
+
Press buttons. Watch state.
|
|
627
|
+
</h1>
|
|
628
|
+
<p className="text-slate-400 mt-3 text-lg max-w-2xl">
|
|
629
|
+
Minimal React state demo. Edit this file and save \u2014 HMR keeps the counter value.
|
|
630
|
+
</p>
|
|
631
|
+
</header>
|
|
632
|
+
|
|
633
|
+
<Card>
|
|
634
|
+
<div className="flex items-center gap-6">
|
|
635
|
+
<div className="flex flex-col gap-4">
|
|
636
|
+
<div className="text-7xl font-bold tabular-nums bg-gradient-to-br from-orange-300 to-rose-400 bg-clip-text text-transparent">
|
|
637
|
+
{count}
|
|
638
|
+
</div>
|
|
639
|
+
<div className="flex gap-2">
|
|
640
|
+
<button
|
|
641
|
+
onClick={() => setCount((c) => c + 1)}
|
|
642
|
+
className="px-4 py-2 text-sm font-medium rounded-lg bg-orange-500 hover:bg-orange-400 text-white transition flex items-center gap-2 shadow-lg shadow-orange-500/20 hover:shadow-orange-500/30 hover:-translate-y-0.5"
|
|
643
|
+
>
|
|
644
|
+
<Zap className="w-4 h-4" />
|
|
645
|
+
Increment
|
|
646
|
+
</button>
|
|
647
|
+
<button
|
|
648
|
+
onClick={() => setCount(0)}
|
|
649
|
+
className="px-4 py-2 text-sm font-medium rounded-lg bg-slate-800/80 hover:bg-slate-700 text-slate-200 transition flex items-center gap-2 ring-1 ring-slate-700/60"
|
|
650
|
+
>
|
|
651
|
+
<RefreshCcw className="w-4 h-4" />
|
|
652
|
+
Reset
|
|
653
|
+
</button>
|
|
654
|
+
</div>
|
|
655
|
+
</div>
|
|
656
|
+
<div className="ml-auto">
|
|
657
|
+
<motion.button
|
|
658
|
+
onClick={() => setLiked((v) => !v)}
|
|
659
|
+
whileHover={{ scale: 1.08 }}
|
|
660
|
+
whileTap={{ scale: 0.92 }}
|
|
661
|
+
className={\`w-16 h-16 rounded-full flex items-center justify-center transition \${
|
|
662
|
+
liked
|
|
663
|
+
? 'bg-rose-500/20 ring-2 ring-rose-500/50 text-rose-400 shadow-lg shadow-rose-500/20'
|
|
664
|
+
: 'bg-slate-800/80 text-slate-400 hover:bg-slate-700 ring-1 ring-slate-700/60'
|
|
665
|
+
}\`}
|
|
666
|
+
>
|
|
667
|
+
<Heart className={\`w-6 h-6 \${liked ? 'fill-rose-400' : ''}\`} />
|
|
668
|
+
</motion.button>
|
|
669
|
+
</div>
|
|
670
|
+
</div>
|
|
671
|
+
</Card>
|
|
672
|
+
|
|
673
|
+
<Card>
|
|
674
|
+
<div className="flex items-center gap-3 mb-3">
|
|
675
|
+
<Sparkles className="w-5 h-5 text-amber-400" />
|
|
676
|
+
<h3 className="font-semibold">Try this</h3>
|
|
677
|
+
</div>
|
|
678
|
+
<ul className="space-y-2 text-sm text-slate-400 list-disc list-inside">
|
|
679
|
+
<li>Open the terminal and run <code className="text-slate-300">ls src/pages</code></li>
|
|
680
|
+
<li>Edit <code className="text-slate-300">src/pages/Playground.tsx</code> — save — HMR keeps state</li>
|
|
681
|
+
<li>Click <Star className="inline w-3.5 h-3.5 text-yellow-400 -mt-0.5" /> on <code className="text-slate-300">lucide-react</code> when you're done</li>
|
|
682
|
+
</ul>
|
|
683
|
+
</Card>
|
|
684
|
+
</div>
|
|
685
|
+
);
|
|
686
|
+
}
|
|
687
|
+
`;
|
|
688
|
+
|
|
689
|
+
const CARD_TSX = `import type { ReactNode } from 'react';
|
|
690
|
+
|
|
691
|
+
interface CardProps {
|
|
692
|
+
children: ReactNode;
|
|
693
|
+
className?: string;
|
|
694
|
+
}
|
|
695
|
+
|
|
696
|
+
export default function Card({ children, className = '' }: CardProps) {
|
|
697
|
+
return (
|
|
698
|
+
<div
|
|
699
|
+
className={
|
|
700
|
+
'p-6 rounded-xl bg-slate-900/50 border border-slate-800/70 backdrop-blur-sm ' +
|
|
701
|
+
'shadow-[inset_0_1px_0_rgba(255,255,255,0.03)] ' +
|
|
702
|
+
'hover:border-slate-700/80 transition-colors ' +
|
|
703
|
+
className
|
|
704
|
+
}
|
|
705
|
+
>
|
|
706
|
+
{children}
|
|
707
|
+
</div>
|
|
708
|
+
);
|
|
709
|
+
}
|
|
710
|
+
`;
|
|
711
|
+
|
|
712
|
+
const SYSTEM_STATS_TSX = `import { useEffect, useState } from 'react';
|
|
713
|
+
import { motion } from 'framer-motion';
|
|
714
|
+
import Card from './Card';
|
|
715
|
+
|
|
716
|
+
interface Stats {
|
|
717
|
+
files: number;
|
|
718
|
+
directories: number;
|
|
719
|
+
usedBytes: number;
|
|
720
|
+
capacityBytes: number;
|
|
721
|
+
inodes?: { total: number; files: number; directories: number };
|
|
722
|
+
cache?: { entries: number; hits: number; misses: number; hitRate: number };
|
|
723
|
+
}
|
|
724
|
+
|
|
725
|
+
export default function SystemStats() {
|
|
726
|
+
const [stats, setStats] = useState<Stats | null>(null);
|
|
727
|
+
const [error, setError] = useState<string | null>(null);
|
|
728
|
+
|
|
729
|
+
useEffect(() => {
|
|
730
|
+
let cancelled = false;
|
|
731
|
+
const load = () => {
|
|
732
|
+
// The preview is served at <session>/preview/... where <session> is
|
|
733
|
+
// either "" (legacy, single-DO mode) or "/s/<id>" (multi-session mode).
|
|
734
|
+
// Strip the /preview tail from the current URL to get the API root.
|
|
735
|
+
// Using location.pathname avoids hardcoding a session ID at build time.
|
|
736
|
+
const apiRoot = location.pathname.replace(/\\/preview(\\/.*)?$/, '');
|
|
737
|
+
fetch(apiRoot + '/api/stats')
|
|
738
|
+
.then((r) => {
|
|
739
|
+
if (!r.ok) throw new Error('HTTP ' + r.status);
|
|
740
|
+
return r.json();
|
|
741
|
+
})
|
|
742
|
+
.then((s) => { if (!cancelled) setStats(s); })
|
|
743
|
+
.catch((e) => { if (!cancelled) setError(String(e.message || e)); });
|
|
744
|
+
};
|
|
745
|
+
load();
|
|
746
|
+
const t = setInterval(load, 3000);
|
|
747
|
+
return () => { cancelled = true; clearInterval(t); };
|
|
748
|
+
}, []);
|
|
749
|
+
|
|
750
|
+
if (error) {
|
|
751
|
+
return (
|
|
752
|
+
<Card>
|
|
753
|
+
<div className="text-sm text-rose-300">Could not load /api/stats: {error}</div>
|
|
754
|
+
</Card>
|
|
755
|
+
);
|
|
756
|
+
}
|
|
757
|
+
if (!stats) {
|
|
758
|
+
return (
|
|
759
|
+
<Card>
|
|
760
|
+
<div className="text-sm text-slate-500">Loading stats…</div>
|
|
761
|
+
</Card>
|
|
762
|
+
);
|
|
763
|
+
}
|
|
764
|
+
|
|
765
|
+
const mb = (stats.usedBytes / 1_000_000).toFixed(1);
|
|
766
|
+
const cap = (stats.capacityBytes / 1_000_000_000).toFixed(1);
|
|
767
|
+
const pct = (stats.usedBytes / stats.capacityBytes) * 100;
|
|
768
|
+
|
|
769
|
+
return (
|
|
770
|
+
<div className="grid grid-cols-2 md:grid-cols-4 gap-3">
|
|
771
|
+
<StatTile label="Files" value={stats.files.toLocaleString()} />
|
|
772
|
+
<StatTile label="Directories" value={stats.directories.toLocaleString()} />
|
|
773
|
+
<StatTile label="Used" value={\`\${mb} MB\`} sub={\`of \${cap} GB\`} />
|
|
774
|
+
<StatTile
|
|
775
|
+
label="Used %"
|
|
776
|
+
value={pct.toFixed(2) + '%'}
|
|
777
|
+
sub={<ProgressBar value={pct} />}
|
|
778
|
+
/>
|
|
779
|
+
</div>
|
|
780
|
+
);
|
|
781
|
+
}
|
|
782
|
+
|
|
783
|
+
function StatTile({
|
|
784
|
+
label,
|
|
785
|
+
value,
|
|
786
|
+
sub,
|
|
787
|
+
}: {
|
|
788
|
+
label: string;
|
|
789
|
+
value: string;
|
|
790
|
+
sub?: React.ReactNode;
|
|
791
|
+
}) {
|
|
792
|
+
return (
|
|
793
|
+
<motion.div
|
|
794
|
+
initial={{ opacity: 0, scale: 0.98 }}
|
|
795
|
+
animate={{ opacity: 1, scale: 1 }}
|
|
796
|
+
transition={{ duration: 0.25 }}
|
|
797
|
+
className="p-4 rounded-xl bg-slate-900/60 border border-slate-800/80"
|
|
798
|
+
>
|
|
799
|
+
<div className="text-[11px] uppercase tracking-wider text-slate-500 font-semibold">
|
|
800
|
+
{label}
|
|
801
|
+
</div>
|
|
802
|
+
<div className="mt-2 text-2xl font-bold tabular-nums text-slate-100">
|
|
803
|
+
{value}
|
|
804
|
+
</div>
|
|
805
|
+
{sub ? <div className="mt-1 text-xs text-slate-500">{sub}</div> : null}
|
|
806
|
+
</motion.div>
|
|
807
|
+
);
|
|
808
|
+
}
|
|
809
|
+
|
|
810
|
+
function ProgressBar({ value }: { value: number }) {
|
|
811
|
+
return (
|
|
812
|
+
<div className="mt-1 h-1.5 rounded-full bg-slate-800 overflow-hidden">
|
|
813
|
+
<div
|
|
814
|
+
className="h-full bg-gradient-to-r from-orange-500 to-rose-500"
|
|
815
|
+
style={{ width: \`\${Math.min(100, Math.max(0.5, value))}%\` }}
|
|
816
|
+
/>
|
|
817
|
+
</div>
|
|
818
|
+
);
|
|
819
|
+
}
|
|
820
|
+
`;
|
|
821
|
+
|
|
822
|
+
const README_MD = `# Nimbus Starter
|
|
823
|
+
|
|
824
|
+
A polished Vite + React + TypeScript + Tailwind + React Router starter,
|
|
825
|
+
pre-seeded on first boot inside a Cloudflare Durable Object.
|
|
826
|
+
|
|
827
|
+
## Quickstart
|
|
828
|
+
|
|
829
|
+
cd app # you're probably already here
|
|
830
|
+
npm install # ~450 packages, ~80 seconds on first run
|
|
831
|
+
npm run dev # starts vite; preview opens in the sidebar
|
|
832
|
+
|
|
833
|
+
## What's inside
|
|
834
|
+
|
|
835
|
+
- **React 18** with automatic JSX runtime
|
|
836
|
+
- **React Router 6** — routes at \`/\`, \`/docs\`, \`/playground\`
|
|
837
|
+
- **Tailwind CSS** via the edge-vendored Play CDN (auto-injected by
|
|
838
|
+
Nimbus when it sees a \`tailwind.config.*\` file in the project root —
|
|
839
|
+
served from \`/__nimbus_assets/tailwind-play.js\`, no third-party CDN)
|
|
840
|
+
- **Framer Motion** for page transitions and micro-interactions
|
|
841
|
+
- **Lucide icons**
|
|
842
|
+
- **Live system stats** — \`src/components/SystemStats.tsx\` polls the
|
|
843
|
+
session-relative \`/api/stats\` endpoint so you can verify the whole stack
|
|
844
|
+
is wired end-to-end.
|
|
845
|
+
|
|
846
|
+
## Routing under the preview path
|
|
847
|
+
|
|
848
|
+
Your session has a shareable URL of the form
|
|
849
|
+
\`https://<host>/s/<session-id>/\`, and the preview is served at
|
|
850
|
+
\`https://<host>/s/<session-id>/preview/\`. Nimbus automatically injects the
|
|
851
|
+
matching \`basename\` into your \`createBrowserRouter\` / \`<BrowserRouter>\`
|
|
852
|
+
so \`<NavLink to="/docs">\` lands at the right path with no extra config.
|
|
853
|
+
|
|
854
|
+
To opt out:
|
|
855
|
+
|
|
856
|
+
- Set an explicit \`basename\` yourself — Nimbus never overrides user values, OR
|
|
857
|
+
- Add the comment \`// nimbus-no-basename\` anywhere in your entry file, OR
|
|
858
|
+
- Add \`nimbusInjectBasename: false\` to your \`vite.config.ts\`.
|
|
859
|
+
|
|
860
|
+
## Start fresh
|
|
861
|
+
|
|
862
|
+
rm -rf ~/app ~/.nimbus-seeded
|
|
863
|
+
|
|
864
|
+
Then restart the session. A factory-fresh copy of this starter will be
|
|
865
|
+
regenerated. (The sentinel file \`~/.nimbus-seeded\` is what prevents
|
|
866
|
+
re-seeding on normal boots; deleting it opts back in.)
|
|
867
|
+
|
|
868
|
+
## Customize
|
|
869
|
+
|
|
870
|
+
Delete anything you don't want. The seed never runs again once
|
|
871
|
+
\`~/.nimbus-seeded\` exists, so your edits are safe.
|
|
872
|
+
|
|
873
|
+
## Beyond JS
|
|
874
|
+
|
|
875
|
+
Nimbus ships a package manager (\`nimbus install\`) that streams
|
|
876
|
+
additional runtimes from R2 into your VFS on demand:
|
|
877
|
+
|
|
878
|
+
nimbus install --available # show catalog
|
|
879
|
+
nimbus install clang # LLVM 8 -> wasm32-wasi-nimbus, ~50 MiB
|
|
880
|
+
nimbus install python # Pyodide CPython 3.13, ~12 MiB
|
|
881
|
+
nimbus install ruby # ruby.wasm 3.3, ~34 MiB
|
|
882
|
+
|
|
883
|
+
Then use them like native binaries:
|
|
884
|
+
|
|
885
|
+
clang ~/hello.c -o hello && ./hello
|
|
886
|
+
python -c 'print("hi")'
|
|
887
|
+
ruby -e 'puts "hi"'
|
|
888
|
+
|
|
889
|
+
Or drop into an interactive REPL (state persists across pushes within
|
|
890
|
+
the same session):
|
|
891
|
+
|
|
892
|
+
python # >>> >>>
|
|
893
|
+
ruby # irb-style
|
|
894
|
+
node # bare REPL
|
|
895
|
+
bun # bun REPL
|
|
896
|
+
|
|
897
|
+
A starter \`~/hello.c\` is seeded alongside this project so \`nimbus
|
|
898
|
+
install clang && clang ~/hello.c -o hello && ./hello\` works out of the
|
|
899
|
+
box.
|
|
900
|
+
|
|
901
|
+
## Other frameworks
|
|
902
|
+
|
|
903
|
+
Nimbus also runs (W11 status):
|
|
904
|
+
|
|
905
|
+
- **SvelteKit** (\`@sveltejs/kit\`) — \u2705 dev + build
|
|
906
|
+
- **Astro** (\`astro\`) — \u2705 dev + build
|
|
907
|
+
- **Remix v2** (\`@remix-run/dev\` vite plugin) — \u2705 dev + build
|
|
908
|
+
- **Nuxt 3** (\`nuxt\`) — \u26A0\uFE0F caveats (Vite + Nitro single-server only;
|
|
909
|
+
HMR may degrade)
|
|
910
|
+
- **Next.js** (\`next\`) — \u274C blocked in Phase 1 (custom server,
|
|
911
|
+
webpack/Turbopack); tracked for W11.5
|
|
912
|
+
|
|
913
|
+
To use one of the supported frameworks, clone its starter or scaffold
|
|
914
|
+
with \`npm create <framework>@latest\` (or your usual scaffolder), then
|
|
915
|
+
\`npm install && npm run dev\` from the project directory.
|
|
916
|
+
`;
|
|
917
|
+
|
|
918
|
+
// ── SEED_FILES list (single source of truth) ────────────────────────────
|
|
919
|
+
|
|
920
|
+
export const SEED_FILES: SeedFile[] = [
|
|
921
|
+
{ path: SEED_PROJECT_DIR + '/package.json', content: PACKAGE_JSON },
|
|
922
|
+
{ path: SEED_PROJECT_DIR + '/index.html', content: INDEX_HTML },
|
|
923
|
+
{ path: SEED_PROJECT_DIR + '/vite.config.ts', content: VITE_CONFIG },
|
|
924
|
+
{ path: SEED_PROJECT_DIR + '/tailwind.config.js', content: TAILWIND_CONFIG },
|
|
925
|
+
{ path: SEED_PROJECT_DIR + '/tsconfig.json', content: TSCONFIG_JSON },
|
|
926
|
+
{ path: SEED_PROJECT_DIR + '/README.md', content: README_MD },
|
|
927
|
+
{ path: SEED_PROJECT_DIR + '/src/index.css', content: INDEX_CSS },
|
|
928
|
+
{ path: SEED_PROJECT_DIR + '/src/main.tsx', content: MAIN_TSX },
|
|
929
|
+
{ path: SEED_PROJECT_DIR + '/src/App.tsx', content: APP_TSX },
|
|
930
|
+
{ path: SEED_PROJECT_DIR + '/src/pages/Home.tsx', content: HOME_TSX },
|
|
931
|
+
{ path: SEED_PROJECT_DIR + '/src/pages/Docs.tsx', content: DOCS_TSX },
|
|
932
|
+
{ path: SEED_PROJECT_DIR + '/src/pages/Playground.tsx', content: PLAYGROUND_TSX },
|
|
933
|
+
{ path: SEED_PROJECT_DIR + '/src/components/Card.tsx', content: CARD_TSX },
|
|
934
|
+
{ path: SEED_PROJECT_DIR + '/src/components/SystemStats.tsx', content: SYSTEM_STATS_TSX },
|
|
935
|
+
];
|
|
936
|
+
|
|
937
|
+
// ── Seed logic ──────────────────────────────────────────────────────────
|
|
938
|
+
|
|
939
|
+
/**
|
|
940
|
+
* Should we run the starter-project seed?
|
|
941
|
+
* Returns false if:
|
|
942
|
+
* - Sentinel exists (already seeded; user can `rm ~/.nimbus-seeded` to opt in again)
|
|
943
|
+
* - Project dir already exists (user has their own ~/app we must not clobber)
|
|
944
|
+
*/
|
|
945
|
+
export function shouldSeedProject(vfs: SqliteVFS): boolean {
|
|
946
|
+
const view = vfs.as(CRED_KERNEL);
|
|
947
|
+
try {
|
|
948
|
+
if (view.exists(SEED_SENTINEL_PATH)) return false;
|
|
949
|
+
if (view.exists(SEED_PROJECT_DIR)) return false;
|
|
950
|
+
return true;
|
|
951
|
+
} catch {
|
|
952
|
+
return false;
|
|
953
|
+
}
|
|
954
|
+
}
|
|
955
|
+
|
|
956
|
+
/**
|
|
957
|
+
* Returns true if the sentinel is present (seed has completed at least once).
|
|
958
|
+
* Used to gate MOTD hints about the starter app.
|
|
959
|
+
*/
|
|
960
|
+
export function hasSeededProject(vfs: SqliteVFS): boolean {
|
|
961
|
+
try { return vfs.as(CRED_KERNEL).exists(SEED_SENTINEL_PATH); } catch { return false; }
|
|
962
|
+
}
|
|
963
|
+
|
|
964
|
+
/**
|
|
965
|
+
* Materialize the seed project.
|
|
966
|
+
*
|
|
967
|
+
* Two-phase write for crash recovery:
|
|
968
|
+
* 1. Write all file bodies + directory inodes in ONE writeBatch().
|
|
969
|
+
* 2. Only on success, write the sentinel in a SEPARATE writeBatch().
|
|
970
|
+
*
|
|
971
|
+
* If the process dies between (1) and (2), the next boot will re-run this
|
|
972
|
+
* function (sentinel absent). All writes are `INSERT OR REPLACE` so retry
|
|
973
|
+
* is idempotent. If (1) itself fails mid-transaction, sqlite rolls back and
|
|
974
|
+
* we start clean next boot.
|
|
975
|
+
*/
|
|
976
|
+
export function seedProject(
|
|
977
|
+
vfs: SqliteVFS,
|
|
978
|
+
opts?: { log?: (msg: string) => void },
|
|
979
|
+
): { seeded: boolean; files: number; reason?: string } {
|
|
980
|
+
const log = opts?.log;
|
|
981
|
+
const view = vfs.as(CRED_KERNEL);
|
|
982
|
+
|
|
983
|
+
if (!shouldSeedProject(vfs)) {
|
|
984
|
+
return { seeded: false, files: 0, reason: 'already-seeded-or-present' };
|
|
985
|
+
}
|
|
986
|
+
|
|
987
|
+
log?.('[seed] materializing starter app at /home/user/app ...');
|
|
988
|
+
|
|
989
|
+
const mtime = Date.now();
|
|
990
|
+
const inodes: BatchInodeEntry[] = [];
|
|
991
|
+
const chunks: BatchChunkEntry[] = [];
|
|
992
|
+
const dirSet = new Set<string>();
|
|
993
|
+
|
|
994
|
+
// Collect every directory on the path of every file
|
|
995
|
+
const addDir = (dir: string) => {
|
|
996
|
+
if (!dir) return;
|
|
997
|
+
const parts = dir.split('/').filter(Boolean);
|
|
998
|
+
let cur = '';
|
|
999
|
+
for (const p of parts) {
|
|
1000
|
+
cur = cur ? cur + '/' + p : p;
|
|
1001
|
+
dirSet.add(cur);
|
|
1002
|
+
}
|
|
1003
|
+
};
|
|
1004
|
+
|
|
1005
|
+
for (const { path, content } of SEED_FILES) {
|
|
1006
|
+
// Gather parent directories
|
|
1007
|
+
const lastSlash = path.lastIndexOf('/');
|
|
1008
|
+
if (lastSlash > 0) addDir(path.substring(0, lastSlash));
|
|
1009
|
+
|
|
1010
|
+
const data = enc.encode(content);
|
|
1011
|
+
const size = data.length;
|
|
1012
|
+
const chunkCount = size === 0 ? 0 : Math.ceil(size / CHUNK_SIZE);
|
|
1013
|
+
|
|
1014
|
+
inodes.push({
|
|
1015
|
+
path,
|
|
1016
|
+
parentPath: lastSlash > 0 ? path.substring(0, lastSlash) : '',
|
|
1017
|
+
isDir: false,
|
|
1018
|
+
size,
|
|
1019
|
+
mtime,
|
|
1020
|
+
mode: 0o644,
|
|
1021
|
+
uid: 1000,
|
|
1022
|
+
gid: 1000,
|
|
1023
|
+
chunkCount,
|
|
1024
|
+
});
|
|
1025
|
+
|
|
1026
|
+
if (size > 0) {
|
|
1027
|
+
if (size <= CHUNK_SIZE) {
|
|
1028
|
+
chunks.push({ path, chunkId: 0, data });
|
|
1029
|
+
} else {
|
|
1030
|
+
for (let i = 0; i < chunkCount; i++) {
|
|
1031
|
+
chunks.push({
|
|
1032
|
+
path,
|
|
1033
|
+
chunkId: i,
|
|
1034
|
+
data: data.slice(i * CHUNK_SIZE, (i + 1) * CHUNK_SIZE),
|
|
1035
|
+
});
|
|
1036
|
+
}
|
|
1037
|
+
}
|
|
1038
|
+
}
|
|
1039
|
+
}
|
|
1040
|
+
|
|
1041
|
+
// Add dir inodes (deduplicated by set)
|
|
1042
|
+
for (const dir of dirSet) {
|
|
1043
|
+
const lastSlash = dir.lastIndexOf('/');
|
|
1044
|
+
inodes.push({
|
|
1045
|
+
path: dir,
|
|
1046
|
+
parentPath: lastSlash > 0 ? dir.substring(0, lastSlash) : '',
|
|
1047
|
+
isDir: true,
|
|
1048
|
+
size: 0,
|
|
1049
|
+
mtime,
|
|
1050
|
+
mode: 0o755,
|
|
1051
|
+
uid: 1000,
|
|
1052
|
+
gid: 1000,
|
|
1053
|
+
chunkCount: 0,
|
|
1054
|
+
});
|
|
1055
|
+
}
|
|
1056
|
+
|
|
1057
|
+
let fileCount = 0;
|
|
1058
|
+
try {
|
|
1059
|
+
// Phase 1: all project files + directories in ONE transactionSync
|
|
1060
|
+
const result = view.writeBatch({ inodes, chunks });
|
|
1061
|
+
fileCount = SEED_FILES.length;
|
|
1062
|
+
log?.(`[seed] wrote ${SEED_FILES.length} files + ${dirSet.size} dirs (${result.inodes} inodes, ${result.chunks} chunks)`);
|
|
1063
|
+
|
|
1064
|
+
// Phase 2: sentinel in a SECOND batch — only runs if Phase 1 succeeded.
|
|
1065
|
+
// A crash between Phase 1 and Phase 2 leaves the project materialized but
|
|
1066
|
+
// no sentinel; next boot sees ~/app already exists → shouldSeedProject()
|
|
1067
|
+
// returns false → we skip harmlessly. (That's why we also check exists(~/app).)
|
|
1068
|
+
const sentinelData = enc.encode(
|
|
1069
|
+
`# Nimbus seed sentinel — delete this file AND ~/app to re-seed.\n` +
|
|
1070
|
+
`# Seeded at: ${new Date(mtime).toISOString()}\n` +
|
|
1071
|
+
`# Files: ${SEED_FILES.length}\n`,
|
|
1072
|
+
);
|
|
1073
|
+
view.writeBatch({
|
|
1074
|
+
inodes: [{
|
|
1075
|
+
path: SEED_SENTINEL_PATH,
|
|
1076
|
+
parentPath: 'home/user',
|
|
1077
|
+
isDir: false,
|
|
1078
|
+
size: sentinelData.length,
|
|
1079
|
+
mtime,
|
|
1080
|
+
mode: 0o644,
|
|
1081
|
+
uid: 1000,
|
|
1082
|
+
gid: 1000,
|
|
1083
|
+
chunkCount: 1,
|
|
1084
|
+
}],
|
|
1085
|
+
chunks: [{ path: SEED_SENTINEL_PATH, chunkId: 0, data: sentinelData }],
|
|
1086
|
+
});
|
|
1087
|
+
log?.(`[seed] sentinel written → ${SEED_SENTINEL_PATH}`);
|
|
1088
|
+
} catch (e: any) {
|
|
1089
|
+
log?.(`[seed] failed: ${e?.message || e}`);
|
|
1090
|
+
return { seeded: false, files: fileCount, reason: e?.message || 'write-failed' };
|
|
1091
|
+
}
|
|
1092
|
+
|
|
1093
|
+
return { seeded: true, files: fileCount };
|
|
1094
|
+
}
|