@nimbus-sh/worker 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/README.md +219 -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 +146 -0
- package/dist/_shared/cache-stats.d.ts.map +1 -0
- package/dist/_shared/cache-stats.js +162 -0
- package/dist/_shared/exports-resolver.d.ts +76 -0
- package/dist/_shared/exports-resolver.d.ts.map +1 -0
- package/dist/_shared/exports-resolver.js +284 -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/real-node-imports.d.ts +38 -0
- package/dist/_shared/real-node-imports.d.ts.map +1 -0
- package/dist/_shared/real-node-imports.js +46 -0
- package/dist/_shared/retry.d.ts +93 -0
- package/dist/_shared/retry.d.ts.map +1 -0
- package/dist/_shared/retry.js +161 -0
- package/dist/_shared/session-id.d.ts +39 -0
- package/dist/_shared/session-id.d.ts.map +1 -0
- package/dist/_shared/session-id.js +127 -0
- package/dist/_shared/session-router.d.ts +104 -0
- package/dist/_shared/session-router.d.ts.map +1 -0
- package/dist/_shared/session-router.js +165 -0
- package/dist/_shared/w7-frame.d.ts +93 -0
- package/dist/_shared/w7-frame.d.ts.map +1 -0
- package/dist/_shared/w7-frame.js +402 -0
- package/dist/auth/index.d.ts +16 -0
- package/dist/auth/index.d.ts.map +1 -0
- package/dist/auth/index.js +15 -0
- package/dist/auth/middleware.d.ts +85 -0
- package/dist/auth/middleware.d.ts.map +1 -0
- package/dist/auth/middleware.js +150 -0
- package/dist/auth/token.d.ts +96 -0
- package/dist/auth/token.d.ts.map +1 -0
- package/dist/auth/token.js +226 -0
- package/dist/auth/types.d.ts +141 -0
- package/dist/auth/types.d.ts.map +1 -0
- package/dist/auth/types.js +114 -0
- package/dist/bindings/d1.d.ts +102 -0
- package/dist/bindings/d1.d.ts.map +1 -0
- package/dist/bindings/d1.js +549 -0
- package/dist/bindings/kv.d.ts +82 -0
- package/dist/bindings/kv.d.ts.map +1 -0
- package/dist/bindings/kv.js +290 -0
- package/dist/bindings/r2.d.ts +137 -0
- package/dist/bindings/r2.d.ts.map +1 -0
- package/dist/bindings/r2.js +379 -0
- package/dist/cirrus-npm-cjs.generated.d.ts +17 -0
- package/dist/cirrus-npm-cjs.generated.d.ts.map +1 -0
- package/dist/cirrus-npm-cjs.generated.js +41 -0
- package/dist/cirrus-plugin-react.generated.d.ts +34 -0
- package/dist/cirrus-plugin-react.generated.d.ts.map +1 -0
- package/dist/cirrus-plugin-react.generated.js +33 -0
- package/dist/constants.d.ts +34 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +116 -0
- package/dist/esbuild-wasm-bundle.generated.d.ts +41 -0
- package/dist/esbuild-wasm-bundle.generated.d.ts.map +1 -0
- package/dist/esbuild-wasm-bundle.generated.js +40 -0
- package/dist/facets/cirrus-real.d.ts +147 -0
- package/dist/facets/cirrus-real.d.ts.map +1 -0
- package/dist/facets/cirrus-real.js +981 -0
- package/dist/facets/inner-do-registry.d.ts +41 -0
- package/dist/facets/inner-do-registry.d.ts.map +1 -0
- package/dist/facets/inner-do-registry.js +51 -0
- package/dist/facets/manager.d.ts +314 -0
- package/dist/facets/manager.d.ts.map +1 -0
- package/dist/facets/manager.js +2681 -0
- package/dist/facets/process.d.ts +318 -0
- package/dist/facets/process.d.ts.map +1 -0
- package/dist/facets/process.js +567 -0
- package/dist/facets/real-vite-fs-shim.d.ts +151 -0
- package/dist/facets/real-vite-fs-shim.d.ts.map +1 -0
- package/dist/facets/real-vite-fs-shim.js +1279 -0
- package/dist/facets/real-vite-hmr.d.ts +142 -0
- package/dist/facets/real-vite-hmr.d.ts.map +1 -0
- package/dist/facets/real-vite-hmr.js +476 -0
- package/dist/facets/vite-dev-server.d.ts +293 -0
- package/dist/facets/vite-dev-server.d.ts.map +1 -0
- package/dist/facets/vite-dev-server.js +2580 -0
- package/dist/facets/wasm-swap-registry.d.ts +261 -0
- package/dist/facets/wasm-swap-registry.d.ts.map +1 -0
- package/dist/facets/wasm-swap-registry.js +551 -0
- package/dist/facets/ws-terminal.d.ts +107 -0
- package/dist/facets/ws-terminal.d.ts.map +1 -0
- package/dist/facets/ws-terminal.js +207 -0
- package/dist/git/commands.d.ts +13 -0
- package/dist/git/commands.d.ts.map +1 -0
- package/dist/git/commands.js +633 -0
- package/dist/git/network-facet.d.ts +61 -0
- package/dist/git/network-facet.d.ts.map +1 -0
- package/dist/git/network-facet.js +700 -0
- package/dist/git-bundle.generated.d.ts +16 -0
- package/dist/git-bundle.generated.d.ts.map +1 -0
- package/dist/git-bundle.generated.js +15 -0
- package/dist/index.d.ts +41 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +73 -0
- package/dist/loaders/child-process/spawn-facet.d.ts +90 -0
- package/dist/loaders/child-process/spawn-facet.d.ts.map +1 -0
- package/dist/loaders/child-process/spawn-facet.js +103 -0
- package/dist/loaders/child-process/spawn-pool.d.ts +110 -0
- package/dist/loaders/child-process/spawn-pool.d.ts.map +1 -0
- package/dist/loaders/child-process/spawn-pool.js +161 -0
- package/dist/loaders/fanout-pool.d.ts +195 -0
- package/dist/loaders/fanout-pool.d.ts.map +1 -0
- package/dist/loaders/fanout-pool.js +326 -0
- package/dist/loaders/generated-workers.d.ts +26 -0
- package/dist/loaders/generated-workers.d.ts.map +1 -0
- package/dist/loaders/generated-workers.js +25 -0
- package/dist/loaders/index.d.ts +15 -0
- package/dist/loaders/index.d.ts.map +1 -0
- package/dist/loaders/index.js +13 -0
- package/dist/loaders/loader-pool.d.ts +273 -0
- package/dist/loaders/loader-pool.d.ts.map +1 -0
- package/dist/loaders/loader-pool.js +624 -0
- package/dist/loaders/npm-resolve-preamble.d.ts +34 -0
- package/dist/loaders/npm-resolve-preamble.d.ts.map +1 -0
- package/dist/loaders/npm-resolve-preamble.js +237 -0
- package/dist/loaders/pre-bundle-preamble.d.ts +41 -0
- package/dist/loaders/pre-bundle-preamble.d.ts.map +1 -0
- package/dist/loaders/pre-bundle-preamble.js +114 -0
- package/dist/loaders/vendor/codegen.d.ts +24 -0
- package/dist/loaders/vendor/codegen.d.ts.map +1 -0
- package/dist/loaders/vendor/codegen.js +44 -0
- package/dist/loaders/vendor/errors.d.ts +24 -0
- package/dist/loaders/vendor/errors.d.ts.map +1 -0
- package/dist/loaders/vendor/errors.js +46 -0
- package/dist/loaders/vendor/index.d.ts +16 -0
- package/dist/loaders/vendor/index.d.ts.map +1 -0
- package/dist/loaders/vendor/index.js +11 -0
- package/dist/loaders/vendor/pool.d.ts +88 -0
- package/dist/loaders/vendor/pool.d.ts.map +1 -0
- package/dist/loaders/vendor/pool.js +353 -0
- package/dist/loaders/vendor/primitives.d.ts +11 -0
- package/dist/loaders/vendor/primitives.d.ts.map +1 -0
- package/dist/loaders/vendor/primitives.js +33 -0
- package/dist/loaders/vendor/serialize.d.ts +3 -0
- package/dist/loaders/vendor/serialize.d.ts.map +1 -0
- package/dist/loaders/vendor/serialize.js +25 -0
- package/dist/loaders/vendor/types.d.ts +60 -0
- package/dist/loaders/vendor/types.d.ts.map +1 -0
- package/dist/loaders/vendor/types.js +4 -0
- package/dist/npm/cache.d.ts +136 -0
- package/dist/npm/cache.d.ts.map +1 -0
- package/dist/npm/cache.js +429 -0
- package/dist/npm/install-batch-facet.d.ts +129 -0
- package/dist/npm/install-batch-facet.d.ts.map +1 -0
- package/dist/npm/install-batch-facet.js +598 -0
- package/dist/npm/install-facet.d.ts +29 -0
- package/dist/npm/install-facet.d.ts.map +1 -0
- package/dist/npm/install-facet.js +9 -0
- package/dist/npm/installer.d.ts +239 -0
- package/dist/npm/installer.d.ts.map +1 -0
- package/dist/npm/installer.js +2022 -0
- package/dist/npm/npx-install.d.ts +74 -0
- package/dist/npm/npx-install.d.ts.map +1 -0
- package/dist/npm/npx-install.js +302 -0
- package/dist/npm/pre-bundle-facet.d.ts +168 -0
- package/dist/npm/pre-bundle-facet.d.ts.map +1 -0
- package/dist/npm/pre-bundle-facet.js +653 -0
- package/dist/npm/r2-cache.d.ts +286 -0
- package/dist/npm/r2-cache.d.ts.map +1 -0
- package/dist/npm/r2-cache.js +506 -0
- package/dist/npm/resolve-facet.d.ts +202 -0
- package/dist/npm/resolve-facet.d.ts.map +1 -0
- package/dist/npm/resolve-facet.js +833 -0
- package/dist/npm/resolve-one-facet.d.ts +204 -0
- package/dist/npm/resolve-one-facet.d.ts.map +1 -0
- package/dist/npm/resolve-one-facet.js +437 -0
- package/dist/npm/resolver.d.ts +109 -0
- package/dist/npm/resolver.d.ts.map +1 -0
- package/dist/npm/resolver.js +899 -0
- package/dist/npm/tarball-stream.d.ts +85 -0
- package/dist/npm/tarball-stream.d.ts.map +1 -0
- package/dist/npm/tarball-stream.js +205 -0
- package/dist/npm/tarball.d.ts +51 -0
- package/dist/npm/tarball.d.ts.map +1 -0
- package/dist/npm/tarball.js +185 -0
- package/dist/observability/diag-counters.d.ts +292 -0
- package/dist/observability/diag-counters.d.ts.map +1 -0
- package/dist/observability/diag-counters.js +302 -0
- package/dist/observability/heap-estimate.d.ts +166 -0
- package/dist/observability/heap-estimate.d.ts.map +1 -0
- package/dist/observability/heap-estimate.js +192 -0
- package/dist/observability/heavy-alloc-coord.d.ts +95 -0
- package/dist/observability/heavy-alloc-coord.d.ts.map +1 -0
- package/dist/observability/heavy-alloc-coord.js +149 -0
- package/dist/observability/oom-classify.d.ts +56 -0
- package/dist/observability/oom-classify.d.ts.map +1 -0
- package/dist/observability/oom-classify.js +118 -0
- package/dist/observability/oom-discriminator.d.ts +192 -0
- package/dist/observability/oom-discriminator.d.ts.map +1 -0
- package/dist/observability/oom-discriminator.js +233 -0
- package/dist/real-vite-bundle.generated.d.ts +46 -0
- package/dist/real-vite-bundle.generated.d.ts.map +1 -0
- package/dist/real-vite-bundle.generated.js +53 -0
- package/dist/replica/routing.d.ts +171 -0
- package/dist/replica/routing.d.ts.map +1 -0
- package/dist/replica/routing.js +288 -0
- package/dist/replica/suspension.d.ts +36 -0
- package/dist/replica/suspension.d.ts.map +1 -0
- package/dist/replica/suspension.js +49 -0
- package/dist/router/index.d.ts +156 -0
- package/dist/router/index.d.ts.map +1 -0
- package/dist/router/index.js +220 -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 +128 -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/barrel-synthesizer.d.ts +181 -0
- package/dist/runtime/barrel-synthesizer.d.ts.map +1 -0
- package/dist/runtime/barrel-synthesizer.js +541 -0
- package/dist/runtime/bun-repl.d.ts +46 -0
- package/dist/runtime/bun-repl.d.ts.map +1 -0
- package/dist/runtime/bun-repl.js +326 -0
- package/dist/runtime/bun-runner.d.ts +66 -0
- package/dist/runtime/bun-runner.d.ts.map +1 -0
- package/dist/runtime/bun-runner.js +219 -0
- package/dist/runtime/clang-runner.d.ts +38 -0
- package/dist/runtime/clang-runner.d.ts.map +1 -0
- package/dist/runtime/clang-runner.js +1033 -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/esbuild-service.d.ts +201 -0
- package/dist/runtime/esbuild-service.d.ts.map +1 -0
- package/dist/runtime/esbuild-service.js +1444 -0
- package/dist/runtime/esbuild-wasm-bytes.d.ts +87 -0
- package/dist/runtime/esbuild-wasm-bytes.d.ts.map +1 -0
- package/dist/runtime/esbuild-wasm-bytes.js +131 -0
- package/dist/runtime/framework-detect.d.ts +71 -0
- package/dist/runtime/framework-detect.d.ts.map +1 -0
- package/dist/runtime/framework-detect.js +178 -0
- package/dist/runtime/long-running-handle.d.ts +133 -0
- package/dist/runtime/long-running-handle.d.ts.map +1 -0
- package/dist/runtime/long-running-handle.js +192 -0
- package/dist/runtime/node-repl.d.ts +36 -0
- package/dist/runtime/node-repl.d.ts.map +1 -0
- package/dist/runtime/node-repl.js +293 -0
- package/dist/runtime/node-runner.d.ts +111 -0
- package/dist/runtime/node-runner.d.ts.map +1 -0
- package/dist/runtime/node-runner.js +194 -0
- package/dist/runtime/node-shims.d.ts +24 -0
- package/dist/runtime/node-shims.d.ts.map +1 -0
- package/dist/runtime/node-shims.js +3019 -0
- package/dist/runtime/package-manager.d.ts +118 -0
- package/dist/runtime/package-manager.d.ts.map +1 -0
- package/dist/runtime/package-manager.js +420 -0
- package/dist/runtime/port-registry.d.ts +80 -0
- package/dist/runtime/port-registry.d.ts.map +1 -0
- package/dist/runtime/port-registry.js +166 -0
- package/dist/runtime/process-logs-api.d.ts +102 -0
- package/dist/runtime/process-logs-api.d.ts.map +1 -0
- package/dist/runtime/process-logs-api.js +253 -0
- package/dist/runtime/process-logs.d.ts +311 -0
- package/dist/runtime/process-logs.d.ts.map +1 -0
- package/dist/runtime/process-logs.js +656 -0
- package/dist/runtime/process-table.d.ts +65 -0
- package/dist/runtime/process-table.d.ts.map +1 -0
- package/dist/runtime/process-table.js +107 -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-repl.d.ts +66 -0
- package/dist/runtime/python-repl.d.ts.map +1 -0
- package/dist/runtime/python-repl.js +563 -0
- package/dist/runtime/python-runner.d.ts +50 -0
- package/dist/runtime/python-runner.d.ts.map +1 -0
- package/dist/runtime/python-runner.js +870 -0
- package/dist/runtime/repl-session.d.ts +160 -0
- package/dist/runtime/repl-session.d.ts.map +1 -0
- package/dist/runtime/repl-session.js +393 -0
- package/dist/runtime/require-resolver.d.ts +52 -0
- package/dist/runtime/require-resolver.d.ts.map +1 -0
- package/dist/runtime/require-resolver.js +690 -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-repl.d.ts +43 -0
- package/dist/runtime/ruby-repl.d.ts.map +1 -0
- package/dist/runtime/ruby-repl.js +229 -0
- package/dist/runtime/ruby-runner.d.ts +62 -0
- package/dist/runtime/ruby-runner.d.ts.map +1 -0
- package/dist/runtime/ruby-runner.js +737 -0
- package/dist/runtime/runtime-catalog.d.ts +99 -0
- package/dist/runtime/runtime-catalog.d.ts.map +1 -0
- package/dist/runtime/runtime-catalog.js +183 -0
- package/dist/runtime/runtime-registry.d.ts +136 -0
- package/dist/runtime/runtime-registry.d.ts.map +1 -0
- package/dist/runtime/runtime-registry.js +318 -0
- package/dist/runtime/streams.d.ts +13 -0
- package/dist/runtime/streams.d.ts.map +1 -0
- package/dist/runtime/streams.js +402 -0
- package/dist/runtime/wasi-instance.d.ts +190 -0
- package/dist/runtime/wasi-instance.d.ts.map +1 -0
- package/dist/runtime/wasi-instance.js +2044 -0
- package/dist/runtime/wasm-runner.d.ts +117 -0
- package/dist/runtime/wasm-runner.d.ts.map +1 -0
- package/dist/runtime/wasm-runner.js +705 -0
- package/dist/session/bindings.d.ts +168 -0
- package/dist/session/bindings.d.ts.map +1 -0
- package/dist/session/bindings.js +524 -0
- package/dist/session/ctx-exports.d.ts +16 -0
- package/dist/session/ctx-exports.d.ts.map +1 -0
- package/dist/session/ctx-exports.js +22 -0
- package/dist/session/diag.d.ts +62 -0
- package/dist/session/diag.d.ts.map +1 -0
- package/dist/session/diag.js +118 -0
- package/dist/session/fs-watch.d.ts +132 -0
- package/dist/session/fs-watch.d.ts.map +1 -0
- package/dist/session/fs-watch.js +255 -0
- package/dist/session/helpers.d.ts +150 -0
- package/dist/session/helpers.d.ts.map +1 -0
- package/dist/session/helpers.js +472 -0
- package/dist/session/hibernation.d.ts +145 -0
- package/dist/session/hibernation.d.ts.map +1 -0
- package/dist/session/hibernation.js +385 -0
- package/dist/session/init-phases.d.ts +87 -0
- package/dist/session/init-phases.d.ts.map +1 -0
- package/dist/session/init-phases.js +137 -0
- package/dist/session/init.d.ts +46 -0
- package/dist/session/init.d.ts.map +1 -0
- package/dist/session/init.js +3579 -0
- package/dist/session/keys.d.ts +56 -0
- package/dist/session/keys.d.ts.map +1 -0
- package/dist/session/keys.js +55 -0
- package/dist/session/nimbus-session.d.ts +434 -0
- package/dist/session/nimbus-session.d.ts.map +1 -0
- package/dist/session/nimbus-session.js +1084 -0
- package/dist/session/programmatic.d.ts +105 -0
- package/dist/session/programmatic.d.ts.map +1 -0
- package/dist/session/programmatic.js +326 -0
- package/dist/session/replica-routes.d.ts +68 -0
- package/dist/session/replica-routes.d.ts.map +1 -0
- package/dist/session/replica-routes.js +77 -0
- package/dist/session/routes.d.ts +29 -0
- package/dist/session/routes.d.ts.map +1 -0
- package/dist/session/routes.js +1331 -0
- package/dist/session/rpc.d.ts +323 -0
- package/dist/session/rpc.d.ts.map +1 -0
- package/dist/session/rpc.js +808 -0
- package/dist/session/state-store.d.ts +210 -0
- package/dist/session/state-store.d.ts.map +1 -0
- package/dist/session/state-store.js +459 -0
- package/dist/session/supervisor-rpc.d.ts +269 -0
- package/dist/session/supervisor-rpc.d.ts.map +1 -0
- package/dist/session/supervisor-rpc.js +437 -0
- package/dist/session/ws-hibernation-config.d.ts +64 -0
- package/dist/session/ws-hibernation-config.d.ts.map +1 -0
- package/dist/session/ws-hibernation-config.js +89 -0
- package/dist/session/ws.d.ts +95 -0
- package/dist/session/ws.d.ts.map +1 -0
- package/dist/session/ws.js +395 -0
- package/dist/shell/features.d.ts +410 -0
- package/dist/shell/features.d.ts.map +1 -0
- package/dist/shell/features.js +1885 -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 +3703 -0
- package/dist/stubs/lifo-ui.d.ts +10 -0
- package/dist/stubs/lifo-ui.d.ts.map +1 -0
- package/dist/stubs/lifo-ui.js +1 -0
- package/dist/tailwind-play.generated.d.ts +19 -0
- package/dist/tailwind-play.generated.d.ts.map +1 -0
- package/dist/tailwind-play.generated.js +18 -0
- package/dist/vfs/dev-provider.d.ts +64 -0
- package/dist/vfs/dev-provider.d.ts.map +1 -0
- package/dist/vfs/dev-provider.js +191 -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 +30 -0
- package/dist/vfs/path.d.ts.map +1 -0
- package/dist/vfs/path.js +41 -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 +1045 -0
- package/dist/vfs/sqlite-vfs.d.ts +435 -0
- package/dist/vfs/sqlite-vfs.d.ts.map +1 -0
- package/dist/vfs/sqlite-vfs.js +1670 -0
- package/dist/vfs/symlink-registry.d.ts +64 -0
- package/dist/vfs/symlink-registry.d.ts.map +1 -0
- package/dist/vfs/symlink-registry.js +137 -0
- package/dist/wrangler/nimbus-wrangler.d.ts +157 -0
- package/dist/wrangler/nimbus-wrangler.d.ts.map +1 -0
- package/dist/wrangler/nimbus-wrangler.js +931 -0
- package/package.json +77 -0
- package/public/_assets/cirrus-plugin-react.bundle.js +70740 -0
- package/public/_assets/esbuild-0.24.2.wasm +0 -0
- package/public/_assets/real-vite-bundle.js +101478 -0
- package/public/_assets/rollup.wasm +0 -0
- package/public/favicon.svg +8 -0
- package/public/index.html +565 -0
- package/public/s/index.html +2379 -0
- package/scripts/bundle-esbuild-wasm.mjs +244 -0
- package/scripts/bundle-facet-workers.mjs +137 -0
- package/scripts/bundle-git.mjs +118 -0
- package/scripts/bundle-npm-cjs.mjs +363 -0
- package/scripts/bundle-plugin-react.mjs +480 -0
- package/scripts/bundle-real-vite.mjs +959 -0
- package/scripts/bundle-runtime.mjs +600 -0
- package/scripts/bundle-tailwind-play.mjs +130 -0
- package/scripts/patch-lifo-ui.mjs +131 -0
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* index.ts — Workers entrypoint.
|
|
3
|
+
*
|
|
4
|
+
* Two responsibilities, kept here because both must execute on every
|
|
5
|
+
* request before any DO dispatch:
|
|
6
|
+
*
|
|
7
|
+
* 1. Re-export the DO classes + RPC service bindings so wrangler
|
|
8
|
+
* bundles them and `enable_ctx_exports` (compat date 2026-04-01+)
|
|
9
|
+
* auto-populates them under ctx.exports. NimbusSession
|
|
10
|
+
* (the Durable Object) and SupervisorRPC + the inner-Worker
|
|
11
|
+
* binding shims (NimbusAssetsRPC, NimbusLoaderRPC,
|
|
12
|
+
* NimbusLoadedWorker, NimbusLoadedEntrypoint,
|
|
13
|
+
* NimbusDurableObjectNamespace, NimbusDOStub) all need to be
|
|
14
|
+
* reachable as exports of the entrypoint module.
|
|
15
|
+
*
|
|
16
|
+
* 2. Route HTTP/WS requests to the right session via the session
|
|
17
|
+
* ID embedded in /s/<id>/* paths. URL → DO mapping is a stable
|
|
18
|
+
* contract delegated to {@link createNimbusHandler}.
|
|
19
|
+
*
|
|
20
|
+
* The fetch handler delegates to `createNimbusHandler({ auth: { mode:
|
|
21
|
+
* 'auto' } })` — same shape an external embedder uses via
|
|
22
|
+
* `@nimbus-sh/worker`. This file's only deploy-specific logic is the
|
|
23
|
+
* W6.5 registry-event sink installed at module-load time.
|
|
24
|
+
*/
|
|
25
|
+
import { NimbusSession, NimbusAssetsRPC, NimbusLoaderRPC, NimbusLoadedWorker, NimbusLoadedEntrypoint, NimbusDurableObjectNamespace, NimbusDOStub } from './session/nimbus-session.js';
|
|
26
|
+
import { SupervisorRPC } from './session/supervisor-rpc.js';
|
|
27
|
+
import { CirrusHmrRPC } from './facets/real-vite-hmr.js';
|
|
28
|
+
export { createNimbusHandler } from './router/index.js';
|
|
29
|
+
export type { NimbusHandler, NimbusHooks, NimbusHookContext, CustomRoutes, CreateNimbusHandlerOptions, AuthMode, NimbusAuthConfig, } from './router/index.js';
|
|
30
|
+
export { issueNimbusToken, verifyNimbusToken, NimbusAuthError, } from './auth/index.js';
|
|
31
|
+
export type { NimbusAuthEnv, NimbusTokenClaims, VerifiedNimbusToken, } from './auth/index.js';
|
|
32
|
+
export { NimbusSession, SupervisorRPC, NimbusAssetsRPC, NimbusLoaderRPC, NimbusLoadedWorker, NimbusLoadedEntrypoint, NimbusDurableObjectNamespace, NimbusDOStub, CirrusHmrRPC, };
|
|
33
|
+
/**
|
|
34
|
+
* Module-level reference to ctx.exports from the fetch handler.
|
|
35
|
+
* Used by NimbusSession to create loopback bindings for facets.
|
|
36
|
+
* Set once on the first fetch() call by createNimbusHandler.
|
|
37
|
+
*/
|
|
38
|
+
export declare function getCtxExports(): any;
|
|
39
|
+
declare const _default: import("./index.js").NimbusHandler;
|
|
40
|
+
export default _default;
|
|
41
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,EACL,aAAa,EACb,eAAe,EACf,eAAe,EACf,kBAAkB,EAClB,sBAAsB,EACtB,4BAA4B,EAC5B,YAAY,EACb,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAUzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,YAAY,EACV,aAAa,EACb,WAAW,EACX,iBAAiB,EACjB,YAAY,EACZ,0BAA0B,EAC1B,QAAQ,EACR,gBAAgB,GACjB,MAAM,mBAAmB,CAAC;AAK3B,OAAO,EACL,gBAAgB,EAChB,iBAAiB,EACjB,eAAe,GAChB,MAAM,iBAAiB,CAAC;AACzB,YAAY,EACV,aAAa,EACb,iBAAiB,EACjB,mBAAmB,GACpB,MAAM,iBAAiB,CAAC;AAmBzB,OAAO,EACL,aAAa,EACb,aAAa,EACb,eAAe,EACf,eAAe,EACf,kBAAkB,EAClB,sBAAsB,EACtB,4BAA4B,EAC5B,YAAY,EACZ,YAAY,GACb,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,aAAa,IAAI,GAAG,CAEnC;;AAOD,wBAAqC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* index.ts — Workers entrypoint.
|
|
3
|
+
*
|
|
4
|
+
* Two responsibilities, kept here because both must execute on every
|
|
5
|
+
* request before any DO dispatch:
|
|
6
|
+
*
|
|
7
|
+
* 1. Re-export the DO classes + RPC service bindings so wrangler
|
|
8
|
+
* bundles them and `enable_ctx_exports` (compat date 2026-04-01+)
|
|
9
|
+
* auto-populates them under ctx.exports. NimbusSession
|
|
10
|
+
* (the Durable Object) and SupervisorRPC + the inner-Worker
|
|
11
|
+
* binding shims (NimbusAssetsRPC, NimbusLoaderRPC,
|
|
12
|
+
* NimbusLoadedWorker, NimbusLoadedEntrypoint,
|
|
13
|
+
* NimbusDurableObjectNamespace, NimbusDOStub) all need to be
|
|
14
|
+
* reachable as exports of the entrypoint module.
|
|
15
|
+
*
|
|
16
|
+
* 2. Route HTTP/WS requests to the right session via the session
|
|
17
|
+
* ID embedded in /s/<id>/* paths. URL → DO mapping is a stable
|
|
18
|
+
* contract delegated to {@link createNimbusHandler}.
|
|
19
|
+
*
|
|
20
|
+
* The fetch handler delegates to `createNimbusHandler({ auth: { mode:
|
|
21
|
+
* 'auto' } })` — same shape an external embedder uses via
|
|
22
|
+
* `@nimbus-sh/worker`. This file's only deploy-specific logic is the
|
|
23
|
+
* W6.5 registry-event sink installed at module-load time.
|
|
24
|
+
*/
|
|
25
|
+
import { NimbusSession, NimbusAssetsRPC, NimbusLoaderRPC, NimbusLoadedWorker, NimbusLoadedEntrypoint, NimbusDurableObjectNamespace, NimbusDOStub, } from './session/nimbus-session.js';
|
|
26
|
+
import { SupervisorRPC } from './session/supervisor-rpc.js';
|
|
27
|
+
import { CirrusHmrRPC } from './facets/real-vite-hmr.js';
|
|
28
|
+
import { createNimbusHandler } from './router/index.js';
|
|
29
|
+
import { getCtxExports as _getCtxExports } from './session/ctx-exports.js';
|
|
30
|
+
import { setRegistryEventSink } from './facets/wasm-swap-registry.js';
|
|
31
|
+
// Re-export the composable factory + companion types so embedders can
|
|
32
|
+
// build their own default-export handlers. The thin path:
|
|
33
|
+
// import { createNimbusHandler, NimbusSession } from '@nimbus-sh/worker';
|
|
34
|
+
// export { NimbusSession };
|
|
35
|
+
// export default createNimbusHandler();
|
|
36
|
+
export { createNimbusHandler } from './router/index.js';
|
|
37
|
+
// Auth surface — embedders need `issueNimbusToken` / `verifyNimbusToken`
|
|
38
|
+
// to mint tokens from custom routes. Re-exported here for the canonical
|
|
39
|
+
// `@nimbus-sh/worker` entry; `@nimbus-sh/sdk/token` re-re-exports from
|
|
40
|
+
// the dedicated auth subpath for non-Worker callers.
|
|
41
|
+
export { issueNimbusToken, verifyNimbusToken, NimbusAuthError, } from './auth/index.js';
|
|
42
|
+
// W6.5: install the default registry-event sink at module top so events
|
|
43
|
+
// emitted from any code path (supervisor BFS, facet drain, applyW6Registry)
|
|
44
|
+
// land in `wrangler tail` as one JSON line per event. When F-observability
|
|
45
|
+
// lands, replace this with `env.INSTALL_METRICS.writeDataPoint(...)`.
|
|
46
|
+
//
|
|
47
|
+
// Format: `[w6.5/registry] {"type":"swap","from":"...","to":"...","ctx":"top"}`
|
|
48
|
+
setRegistryEventSink((e) => {
|
|
49
|
+
try {
|
|
50
|
+
console.log(`[w6.5/registry] ${JSON.stringify(e)}`);
|
|
51
|
+
}
|
|
52
|
+
catch {
|
|
53
|
+
// Defensive — never break the install path on telemetry serialization.
|
|
54
|
+
}
|
|
55
|
+
});
|
|
56
|
+
// Re-export inner-Worker binding shims so wrangler bundles them AND
|
|
57
|
+
// ctx.exports auto-populates Service Bindings for them (via
|
|
58
|
+
// enable_ctx_exports; default at compat date 2026-04-01+).
|
|
59
|
+
export { NimbusSession, SupervisorRPC, NimbusAssetsRPC, NimbusLoaderRPC, NimbusLoadedWorker, NimbusLoadedEntrypoint, NimbusDurableObjectNamespace, NimbusDOStub, CirrusHmrRPC, };
|
|
60
|
+
/**
|
|
61
|
+
* Module-level reference to ctx.exports from the fetch handler.
|
|
62
|
+
* Used by NimbusSession to create loopback bindings for facets.
|
|
63
|
+
* Set once on the first fetch() call by createNimbusHandler.
|
|
64
|
+
*/
|
|
65
|
+
export function getCtxExports() {
|
|
66
|
+
return _getCtxExports();
|
|
67
|
+
}
|
|
68
|
+
// Worker default export — a `createNimbusHandler()` instance running in
|
|
69
|
+
// auto auth mode. The live demo and dogfood embedder are bit-identical
|
|
70
|
+
// from here on; the only difference is `NIMBUS_LEGACY_PUBLIC=1` env var
|
|
71
|
+
// (set on the live demo, unset for the dogfood) flipping auth.mode to
|
|
72
|
+
// 'legacy' inside the auto-resolver.
|
|
73
|
+
export default createNimbusHandler();
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* spawn-facet.ts — Per-spawn task body run inside a fresh Worker Loader
|
|
3
|
+
* isolate via NimbusFanoutPool.
|
|
4
|
+
*
|
|
5
|
+
* Why this exists (gap #1 from arch-gaps wave)
|
|
6
|
+
* ────────────────────────────────────────────
|
|
7
|
+
* Pre-arch-gaps, child_process.spawn from inside a node facet RPCs back
|
|
8
|
+
* to the supervisor's FacetProcessManager._dispatch, which directly
|
|
9
|
+
* invokes either commandRegistry.runPureBuiltin or facetMgr.execStream.
|
|
10
|
+
* Both paths execute IN THE SUPERVISOR'S V8 CONTEXT. The supervisor's
|
|
11
|
+
* heap thus accumulates per-spawn allocation pressure.
|
|
12
|
+
*
|
|
13
|
+
* arch-gaps target: every cp.spawn / spawnSync / exec / execFile call
|
|
14
|
+
* runs inside a fresh Worker Loader isolate. NimbusFanoutPool (proven
|
|
15
|
+
* by F-1 install-batch and F-2 resolver fan-out) provides the auto-
|
|
16
|
+
* routing primitive (in-DO POC C for <5, peer-DO POC B for ≥5).
|
|
17
|
+
*
|
|
18
|
+
* What this task does
|
|
19
|
+
* ───────────────────
|
|
20
|
+
* 1. Mints a per-isolate token (`globalThis.__nimbus_g3_token__`).
|
|
21
|
+
* The first call into a fresh isolate creates the token; warm
|
|
22
|
+
* slots reuse it. Distinct tokens across calls = distinct
|
|
23
|
+
* isolates. Probe surface: audit/probes/arch-gaps/g3-e2e/
|
|
24
|
+
* child-spawn-isolation.mjs.
|
|
25
|
+
* 2. Delegates the actual command execution to
|
|
26
|
+
* `env.SUPERVISOR.cpDispatchInline(req, kind)`. This RPC reuses
|
|
27
|
+
* the existing pure-builtin / facet-direct execution paths
|
|
28
|
+
* (preserves correctness) but the dispatch envelope itself ran
|
|
29
|
+
* in a fresh isolate.
|
|
30
|
+
* 3. Returns `{ exitCode, marker, stdout, stderr }`. The supervisor-
|
|
31
|
+
* side ChildProcessSpawnPool wraps the marker into a per-spawn
|
|
32
|
+
* stderr line and forwards stdout/stderr to the parent's WS.
|
|
33
|
+
*
|
|
34
|
+
* Single-ownership invariant (carried over from git-freeze Q-fix):
|
|
35
|
+
* stdin (if any) is passed by-value as a string in `req.stdin`; no
|
|
36
|
+
* shared ArrayBuffer/Uint8Array refs. The result envelope returns
|
|
37
|
+
* stdout/stderr as strings (already copied by the structured-clone
|
|
38
|
+
* boundary).
|
|
39
|
+
*
|
|
40
|
+
* Stability invariants (cloudflare-parallel serialises via fn.toString):
|
|
41
|
+
* - No `this` references.
|
|
42
|
+
* - No closure capture other than args + (optional) preamble.
|
|
43
|
+
* - The function is the only export's body; helpers inlined.
|
|
44
|
+
*/
|
|
45
|
+
export interface SpawnInIsolateSpec {
|
|
46
|
+
/** The original cp.spawn payload from node-shims.ts. */
|
|
47
|
+
req: {
|
|
48
|
+
command: string;
|
|
49
|
+
args: string[];
|
|
50
|
+
env: Record<string, string>;
|
|
51
|
+
cwd: string;
|
|
52
|
+
stdio?: any;
|
|
53
|
+
detached?: boolean;
|
|
54
|
+
shell?: boolean | string;
|
|
55
|
+
stdin?: string;
|
|
56
|
+
};
|
|
57
|
+
/** Pre-resolved kind from FacetProcessManager._dispatch. */
|
|
58
|
+
kind: 'pure-builtin' | 'facet-direct' | 'unknown';
|
|
59
|
+
/** Stable id the parent captured for the spawn (for hooks-routing). */
|
|
60
|
+
parentChildId: number | string;
|
|
61
|
+
}
|
|
62
|
+
export interface SpawnInIsolateResult {
|
|
63
|
+
exitCode: number;
|
|
64
|
+
/** Per-isolate token line: `[g3-spawn-isolate] tok=<TOKEN>\n`.
|
|
65
|
+
* Pre-pended to stderr by the supervisor-side spawn-pool when the
|
|
66
|
+
* result is forwarded to the cp.spawn parent. Distinct values across
|
|
67
|
+
* results = distinct isolates ran the dispatch. */
|
|
68
|
+
marker: string;
|
|
69
|
+
stdout: string;
|
|
70
|
+
stderr: string;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Per-spawn task body. Serialised via fn.toString() and dispatched
|
|
74
|
+
* by NimbusFanoutPool.submitMany. Signature must be (spec, env) so
|
|
75
|
+
* NimbusFanoutPool's internal `fn(item, env)` lines up.
|
|
76
|
+
*
|
|
77
|
+
* `env.SUPERVISOR` is the supervisor-rpc binding wired automatically
|
|
78
|
+
* by NimbusLoaderPool (see src/loaders/loader-pool.ts:288 — bindings
|
|
79
|
+
* default to `{ SUPERVISOR }`).
|
|
80
|
+
*/
|
|
81
|
+
export declare const runSpawnInIsolate: (spec: SpawnInIsolateSpec, env: {
|
|
82
|
+
SUPERVISOR: {
|
|
83
|
+
cpDispatchInline(req: any, kind: string): Promise<{
|
|
84
|
+
exitCode: number;
|
|
85
|
+
stdout: string;
|
|
86
|
+
stderr: string;
|
|
87
|
+
}>;
|
|
88
|
+
};
|
|
89
|
+
}) => Promise<SpawnInIsolateResult>;
|
|
90
|
+
//# sourceMappingURL=spawn-facet.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spawn-facet.d.ts","sourceRoot":"","sources":["../../../src/loaders/child-process/spawn-facet.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG;AAEH,MAAM,WAAW,kBAAkB;IACjC,wDAAwD;IACxD,GAAG,EAAE;QACH,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,EAAE,MAAM,EAAE,CAAC;QACf,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC5B,GAAG,EAAE,MAAM,CAAC;QACZ,KAAK,CAAC,EAAE,GAAG,CAAC;QACZ,QAAQ,CAAC,EAAE,OAAO,CAAC;QACnB,KAAK,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;QACzB,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,4DAA4D;IAC5D,IAAI,EAAE,cAAc,GAAG,cAAc,GAAG,SAAS,CAAC;IAClD,uEAAuE;IACvE,aAAa,EAAE,MAAM,GAAG,MAAM,CAAC;CAChC;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,MAAM,CAAC;IACjB;;;wDAGoD;IACpD,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;;GAQG;AACH,eAAO,MAAM,iBAAiB,GAC5B,MAAM,kBAAkB,EACxB,KAAK;IACH,UAAU,EAAE;QACV,gBAAgB,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;YAChD,QAAQ,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,MAAM,CAAC;SAClD,CAAC,CAAC;KACJ,CAAC;CACH,KACA,OAAO,CAAC,oBAAoB,CAoD9B,CAAC"}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* spawn-facet.ts — Per-spawn task body run inside a fresh Worker Loader
|
|
3
|
+
* isolate via NimbusFanoutPool.
|
|
4
|
+
*
|
|
5
|
+
* Why this exists (gap #1 from arch-gaps wave)
|
|
6
|
+
* ────────────────────────────────────────────
|
|
7
|
+
* Pre-arch-gaps, child_process.spawn from inside a node facet RPCs back
|
|
8
|
+
* to the supervisor's FacetProcessManager._dispatch, which directly
|
|
9
|
+
* invokes either commandRegistry.runPureBuiltin or facetMgr.execStream.
|
|
10
|
+
* Both paths execute IN THE SUPERVISOR'S V8 CONTEXT. The supervisor's
|
|
11
|
+
* heap thus accumulates per-spawn allocation pressure.
|
|
12
|
+
*
|
|
13
|
+
* arch-gaps target: every cp.spawn / spawnSync / exec / execFile call
|
|
14
|
+
* runs inside a fresh Worker Loader isolate. NimbusFanoutPool (proven
|
|
15
|
+
* by F-1 install-batch and F-2 resolver fan-out) provides the auto-
|
|
16
|
+
* routing primitive (in-DO POC C for <5, peer-DO POC B for ≥5).
|
|
17
|
+
*
|
|
18
|
+
* What this task does
|
|
19
|
+
* ───────────────────
|
|
20
|
+
* 1. Mints a per-isolate token (`globalThis.__nimbus_g3_token__`).
|
|
21
|
+
* The first call into a fresh isolate creates the token; warm
|
|
22
|
+
* slots reuse it. Distinct tokens across calls = distinct
|
|
23
|
+
* isolates. Probe surface: audit/probes/arch-gaps/g3-e2e/
|
|
24
|
+
* child-spawn-isolation.mjs.
|
|
25
|
+
* 2. Delegates the actual command execution to
|
|
26
|
+
* `env.SUPERVISOR.cpDispatchInline(req, kind)`. This RPC reuses
|
|
27
|
+
* the existing pure-builtin / facet-direct execution paths
|
|
28
|
+
* (preserves correctness) but the dispatch envelope itself ran
|
|
29
|
+
* in a fresh isolate.
|
|
30
|
+
* 3. Returns `{ exitCode, marker, stdout, stderr }`. The supervisor-
|
|
31
|
+
* side ChildProcessSpawnPool wraps the marker into a per-spawn
|
|
32
|
+
* stderr line and forwards stdout/stderr to the parent's WS.
|
|
33
|
+
*
|
|
34
|
+
* Single-ownership invariant (carried over from git-freeze Q-fix):
|
|
35
|
+
* stdin (if any) is passed by-value as a string in `req.stdin`; no
|
|
36
|
+
* shared ArrayBuffer/Uint8Array refs. The result envelope returns
|
|
37
|
+
* stdout/stderr as strings (already copied by the structured-clone
|
|
38
|
+
* boundary).
|
|
39
|
+
*
|
|
40
|
+
* Stability invariants (cloudflare-parallel serialises via fn.toString):
|
|
41
|
+
* - No `this` references.
|
|
42
|
+
* - No closure capture other than args + (optional) preamble.
|
|
43
|
+
* - The function is the only export's body; helpers inlined.
|
|
44
|
+
*/
|
|
45
|
+
/**
|
|
46
|
+
* Per-spawn task body. Serialised via fn.toString() and dispatched
|
|
47
|
+
* by NimbusFanoutPool.submitMany. Signature must be (spec, env) so
|
|
48
|
+
* NimbusFanoutPool's internal `fn(item, env)` lines up.
|
|
49
|
+
*
|
|
50
|
+
* `env.SUPERVISOR` is the supervisor-rpc binding wired automatically
|
|
51
|
+
* by NimbusLoaderPool (see src/loaders/loader-pool.ts:288 — bindings
|
|
52
|
+
* default to `{ SUPERVISOR }`).
|
|
53
|
+
*/
|
|
54
|
+
export const runSpawnInIsolate = async function runSpawnInIsolate(spec, env) {
|
|
55
|
+
// Mint or reuse the per-isolate token.
|
|
56
|
+
const g = globalThis;
|
|
57
|
+
if (typeof g.__nimbus_g3_token__ !== 'string') {
|
|
58
|
+
g.__nimbus_g3_token__ = Math.random().toString(36).slice(2, 10) +
|
|
59
|
+
Math.random().toString(36).slice(2, 6);
|
|
60
|
+
}
|
|
61
|
+
const marker = '[g3-spawn-isolate] tok=' + g.__nimbus_g3_token__ + '\n';
|
|
62
|
+
if (!spec || !spec.req) {
|
|
63
|
+
return { exitCode: 1, marker, stdout: '', stderr: 'spawn-facet: missing spec.req\n' };
|
|
64
|
+
}
|
|
65
|
+
if (spec.kind === 'unknown') {
|
|
66
|
+
return {
|
|
67
|
+
exitCode: 127,
|
|
68
|
+
marker,
|
|
69
|
+
stdout: '',
|
|
70
|
+
stderr: spec.req.command + ': command not found\n',
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
// env.SUPERVISOR is auto-injected by NimbusLoaderPool and pinned to
|
|
74
|
+
// THIS DO's id (props.doId = ctx.id.toString()). With the in-DO
|
|
75
|
+
// POC C route, "this DO" IS the user-session DO whose _cpRegistry
|
|
76
|
+
// is populated; cpDispatchInline therefore reaches the right
|
|
77
|
+
// dispatcher.
|
|
78
|
+
if (!env || !env.SUPERVISOR || typeof env.SUPERVISOR.cpDispatchInline !== 'function') {
|
|
79
|
+
return {
|
|
80
|
+
exitCode: 1,
|
|
81
|
+
marker,
|
|
82
|
+
stdout: '',
|
|
83
|
+
stderr: 'spawn-facet: env.SUPERVISOR.cpDispatchInline missing\n',
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
try {
|
|
87
|
+
const r = await env.SUPERVISOR.cpDispatchInline(spec.req, spec.kind);
|
|
88
|
+
return {
|
|
89
|
+
exitCode: typeof r.exitCode === 'number' ? r.exitCode : 1,
|
|
90
|
+
marker,
|
|
91
|
+
stdout: typeof r.stdout === 'string' ? r.stdout : '',
|
|
92
|
+
stderr: typeof r.stderr === 'string' ? r.stderr : '',
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
catch (e) {
|
|
96
|
+
return {
|
|
97
|
+
exitCode: 1,
|
|
98
|
+
marker,
|
|
99
|
+
stdout: '',
|
|
100
|
+
stderr: 'spawn-facet error: ' + (e && e.message ? e.message : String(e)) + '\n',
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
};
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* spawn-pool.ts — Supervisor-side wrapper that runs each cp.spawn
|
|
3
|
+
* dispatch in a fresh Worker Loader isolate via NimbusFanoutPool.
|
|
4
|
+
*
|
|
5
|
+
* Why this exists (gap #1 from arch-gaps wave)
|
|
6
|
+
* ────────────────────────────────────────────
|
|
7
|
+
* Closes the architectural gap surfaced by G1 S6: pre-arch-gaps,
|
|
8
|
+
* cp.spawn / spawnSync / exec / execFile from inside a node facet
|
|
9
|
+
* RPCs back to the supervisor's FacetProcessManager._dispatch, which
|
|
10
|
+
* directly invokes commandRegistry.runPureBuiltin / facetMgr.execStream
|
|
11
|
+
* IN-SUPERVISOR. The supervisor accumulates per-spawn allocation
|
|
12
|
+
* pressure.
|
|
13
|
+
*
|
|
14
|
+
* Post-arch-gaps, FacetProcessManager._dispatch routes through this
|
|
15
|
+
* pool, which submits ONE NimbusFanoutPool.submitMany task per spawn.
|
|
16
|
+
* NimbusFanoutPool auto-routes:
|
|
17
|
+
* < IN_DO_THRESHOLD (5) → POC C in-DO (concurrency = task count, capped at 4)
|
|
18
|
+
* ≥ IN_DO_THRESHOLD → POC B peer-DO with stable-id router
|
|
19
|
+
* (key = command name, so re-installs of
|
|
20
|
+
* the same toolchain cluster on warm peers).
|
|
21
|
+
*
|
|
22
|
+
* The per-spawn task body (`runSpawnInIsolate`) emits a per-isolate
|
|
23
|
+
* marker token and delegates the actual command execution back to the
|
|
24
|
+
* supervisor via `env.SUPERVISOR.cpDispatchInline(req, kind)` — that
|
|
25
|
+
* RPC reuses the existing pure-builtin / facet-direct paths (no
|
|
26
|
+
* correctness regression). The architectural win is the dispatch
|
|
27
|
+
* envelope itself running in a fresh isolate.
|
|
28
|
+
*
|
|
29
|
+
* Why one-task-per-spawn (not batched)
|
|
30
|
+
* ────────────────────────────────────
|
|
31
|
+
* cp.spawn is asynchronous from the parent's perspective: each spawn
|
|
32
|
+
* call returns an emitter immediately, with output streaming as data
|
|
33
|
+
* arrives. Batching multiple unrelated spawns into one submitMany
|
|
34
|
+
* call would couple their lifetimes (any failure aborts the batch).
|
|
35
|
+
* Per-spawn submit gives each call its own isolate-lifecycle envelope,
|
|
36
|
+
* matching the cp.spawn contract.
|
|
37
|
+
*
|
|
38
|
+
* Anti-requirements observed
|
|
39
|
+
* ──────────────────────────
|
|
40
|
+
* - NO setTimeout / sleep on hot paths.
|
|
41
|
+
* - NO fallback to in-supervisor dispatch when env.LOADER missing —
|
|
42
|
+
* NimbusFanoutPool throws BindingError at construction. Caller
|
|
43
|
+
* (FacetProcessManager._dispatch) propagates the error to the
|
|
44
|
+
* parent's stderr.
|
|
45
|
+
* - Single-ownership: stdin/stdout/stderr crossing the loader RPC
|
|
46
|
+
* boundary are strings (structured-clone boundary copies them).
|
|
47
|
+
*/
|
|
48
|
+
export interface SpawnPoolHooks {
|
|
49
|
+
onStdout(data: string): void;
|
|
50
|
+
onStderr(data: string): void;
|
|
51
|
+
}
|
|
52
|
+
export interface SpawnPoolReq {
|
|
53
|
+
command: string;
|
|
54
|
+
args: string[];
|
|
55
|
+
env: Record<string, string>;
|
|
56
|
+
cwd: string;
|
|
57
|
+
stdio?: any;
|
|
58
|
+
detached?: boolean;
|
|
59
|
+
shell?: boolean | string;
|
|
60
|
+
stdin?: string;
|
|
61
|
+
}
|
|
62
|
+
export declare class ChildProcessSpawnPool {
|
|
63
|
+
private readonly env;
|
|
64
|
+
private readonly ctx;
|
|
65
|
+
/**
|
|
66
|
+
* Shared NimbusLoaderPool with concurrency=4 (the workerd
|
|
67
|
+
* dynamic-worker cap). `submit` lands on slot 0 — 8 concurrent
|
|
68
|
+
* submits all share slot 0 sequentially via the slot's ownership
|
|
69
|
+
* (one in-flight LOADER.get per slot). Re-using the same pool
|
|
70
|
+
* across runOne calls avoids the 4-cap entirely: only ONE
|
|
71
|
+
* LOADER.get ref is held at a time per slot, and there are at
|
|
72
|
+
* most 4 slots = 4 concurrent LOADER.get refs from this pool.
|
|
73
|
+
*
|
|
74
|
+
* The map() variant distributes items across slots (concurrency=4
|
|
75
|
+
* items at a time). For per-spawn isolation we use submit() so
|
|
76
|
+
* each spawn runs serially through one slot; that gives the
|
|
77
|
+
* architectural win (spawn dispatch runs in a Worker Loader
|
|
78
|
+
* isolate, NOT in the supervisor's V8 context) without tripping
|
|
79
|
+
* the workerd cap.
|
|
80
|
+
*
|
|
81
|
+
* Trade-off: 8 concurrent cp.spawn calls become serial through
|
|
82
|
+
* slot 0. Wall-clock cost: ~50ms per spawn dispatch (warm-isolate
|
|
83
|
+
* RPC round-trip). For typical interactive shell usage (1-3
|
|
84
|
+
* spawns) this is invisible. Heavy parallel patterns (npm test
|
|
85
|
+
* launching N jest workers) sequentialise — accepted trade-off
|
|
86
|
+
* vs the prod-failure-mode of "Too many concurrent dynamic
|
|
87
|
+
* workers." Future improvement: distribute via map() when batch
|
|
88
|
+
* shape is known.
|
|
89
|
+
*/
|
|
90
|
+
private readonly pool;
|
|
91
|
+
/**
|
|
92
|
+
* Promise chain for serializing submits. Each new submit awaits
|
|
93
|
+
* the previous one's completion BEFORE invoking pool.submit.
|
|
94
|
+
* This gives us strict 1-in-flight-at-a-time on slot 0; 4-cap
|
|
95
|
+
* never trips even with 8 concurrent cp.spawn invocations.
|
|
96
|
+
*/
|
|
97
|
+
private chain;
|
|
98
|
+
constructor(env: any, ctx: DurableObjectState);
|
|
99
|
+
/**
|
|
100
|
+
* Dispatch a single cp.spawn request through a fresh Worker Loader
|
|
101
|
+
* isolate. Streams stdout/stderr to the parent via `hooks` once the
|
|
102
|
+
* task completes (we don't have incremental streaming yet — the
|
|
103
|
+
* supervisor-side cpDispatchInline returns final strings; future
|
|
104
|
+
* improvement: pull-RPC streaming from the loader isolate).
|
|
105
|
+
*
|
|
106
|
+
* Returns the exit code.
|
|
107
|
+
*/
|
|
108
|
+
runOne(req: SpawnPoolReq, kind: 'pure-builtin' | 'facet-direct' | 'unknown', hooks: SpawnPoolHooks, childId: number | string): Promise<number>;
|
|
109
|
+
}
|
|
110
|
+
//# sourceMappingURL=spawn-pool.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spawn-pool.d.ts","sourceRoot":"","sources":["../../../src/loaders/child-process/spawn-pool.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8CG;AAKH,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,GAAG,CAAC;IACZ,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,qBAAa,qBAAqB;IAChC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAM;IAC1B,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAqB;IACzC;;;;;;;;;;;;;;;;;;;;;;;;OAwBG;IACH,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAmB;IACxC;;;;;OAKG;IACH,OAAO,CAAC,KAAK,CAAuC;gBAExC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,kBAAkB;IAW7C;;;;;;;;OAQG;IACG,MAAM,CACV,GAAG,EAAE,YAAY,EACjB,IAAI,EAAE,cAAc,GAAG,cAAc,GAAG,SAAS,EACjD,KAAK,EAAE,cAAc,EACrB,OAAO,EAAE,MAAM,GAAG,MAAM,GACvB,OAAO,CAAC,MAAM,CAAC;CAyDnB"}
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* spawn-pool.ts — Supervisor-side wrapper that runs each cp.spawn
|
|
3
|
+
* dispatch in a fresh Worker Loader isolate via NimbusFanoutPool.
|
|
4
|
+
*
|
|
5
|
+
* Why this exists (gap #1 from arch-gaps wave)
|
|
6
|
+
* ────────────────────────────────────────────
|
|
7
|
+
* Closes the architectural gap surfaced by G1 S6: pre-arch-gaps,
|
|
8
|
+
* cp.spawn / spawnSync / exec / execFile from inside a node facet
|
|
9
|
+
* RPCs back to the supervisor's FacetProcessManager._dispatch, which
|
|
10
|
+
* directly invokes commandRegistry.runPureBuiltin / facetMgr.execStream
|
|
11
|
+
* IN-SUPERVISOR. The supervisor accumulates per-spawn allocation
|
|
12
|
+
* pressure.
|
|
13
|
+
*
|
|
14
|
+
* Post-arch-gaps, FacetProcessManager._dispatch routes through this
|
|
15
|
+
* pool, which submits ONE NimbusFanoutPool.submitMany task per spawn.
|
|
16
|
+
* NimbusFanoutPool auto-routes:
|
|
17
|
+
* < IN_DO_THRESHOLD (5) → POC C in-DO (concurrency = task count, capped at 4)
|
|
18
|
+
* ≥ IN_DO_THRESHOLD → POC B peer-DO with stable-id router
|
|
19
|
+
* (key = command name, so re-installs of
|
|
20
|
+
* the same toolchain cluster on warm peers).
|
|
21
|
+
*
|
|
22
|
+
* The per-spawn task body (`runSpawnInIsolate`) emits a per-isolate
|
|
23
|
+
* marker token and delegates the actual command execution back to the
|
|
24
|
+
* supervisor via `env.SUPERVISOR.cpDispatchInline(req, kind)` — that
|
|
25
|
+
* RPC reuses the existing pure-builtin / facet-direct paths (no
|
|
26
|
+
* correctness regression). The architectural win is the dispatch
|
|
27
|
+
* envelope itself running in a fresh isolate.
|
|
28
|
+
*
|
|
29
|
+
* Why one-task-per-spawn (not batched)
|
|
30
|
+
* ────────────────────────────────────
|
|
31
|
+
* cp.spawn is asynchronous from the parent's perspective: each spawn
|
|
32
|
+
* call returns an emitter immediately, with output streaming as data
|
|
33
|
+
* arrives. Batching multiple unrelated spawns into one submitMany
|
|
34
|
+
* call would couple their lifetimes (any failure aborts the batch).
|
|
35
|
+
* Per-spawn submit gives each call its own isolate-lifecycle envelope,
|
|
36
|
+
* matching the cp.spawn contract.
|
|
37
|
+
*
|
|
38
|
+
* Anti-requirements observed
|
|
39
|
+
* ──────────────────────────
|
|
40
|
+
* - NO setTimeout / sleep on hot paths.
|
|
41
|
+
* - NO fallback to in-supervisor dispatch when env.LOADER missing —
|
|
42
|
+
* NimbusFanoutPool throws BindingError at construction. Caller
|
|
43
|
+
* (FacetProcessManager._dispatch) propagates the error to the
|
|
44
|
+
* parent's stderr.
|
|
45
|
+
* - Single-ownership: stdin/stdout/stderr crossing the loader RPC
|
|
46
|
+
* boundary are strings (structured-clone boundary copies them).
|
|
47
|
+
*/
|
|
48
|
+
import { NimbusLoaderPool } from '../loader-pool.js';
|
|
49
|
+
import { runSpawnInIsolate } from './spawn-facet.js';
|
|
50
|
+
export class ChildProcessSpawnPool {
|
|
51
|
+
env;
|
|
52
|
+
ctx;
|
|
53
|
+
/**
|
|
54
|
+
* Shared NimbusLoaderPool with concurrency=4 (the workerd
|
|
55
|
+
* dynamic-worker cap). `submit` lands on slot 0 — 8 concurrent
|
|
56
|
+
* submits all share slot 0 sequentially via the slot's ownership
|
|
57
|
+
* (one in-flight LOADER.get per slot). Re-using the same pool
|
|
58
|
+
* across runOne calls avoids the 4-cap entirely: only ONE
|
|
59
|
+
* LOADER.get ref is held at a time per slot, and there are at
|
|
60
|
+
* most 4 slots = 4 concurrent LOADER.get refs from this pool.
|
|
61
|
+
*
|
|
62
|
+
* The map() variant distributes items across slots (concurrency=4
|
|
63
|
+
* items at a time). For per-spawn isolation we use submit() so
|
|
64
|
+
* each spawn runs serially through one slot; that gives the
|
|
65
|
+
* architectural win (spawn dispatch runs in a Worker Loader
|
|
66
|
+
* isolate, NOT in the supervisor's V8 context) without tripping
|
|
67
|
+
* the workerd cap.
|
|
68
|
+
*
|
|
69
|
+
* Trade-off: 8 concurrent cp.spawn calls become serial through
|
|
70
|
+
* slot 0. Wall-clock cost: ~50ms per spawn dispatch (warm-isolate
|
|
71
|
+
* RPC round-trip). For typical interactive shell usage (1-3
|
|
72
|
+
* spawns) this is invisible. Heavy parallel patterns (npm test
|
|
73
|
+
* launching N jest workers) sequentialise — accepted trade-off
|
|
74
|
+
* vs the prod-failure-mode of "Too many concurrent dynamic
|
|
75
|
+
* workers." Future improvement: distribute via map() when batch
|
|
76
|
+
* shape is known.
|
|
77
|
+
*/
|
|
78
|
+
pool;
|
|
79
|
+
/**
|
|
80
|
+
* Promise chain for serializing submits. Each new submit awaits
|
|
81
|
+
* the previous one's completion BEFORE invoking pool.submit.
|
|
82
|
+
* This gives us strict 1-in-flight-at-a-time on slot 0; 4-cap
|
|
83
|
+
* never trips even with 8 concurrent cp.spawn invocations.
|
|
84
|
+
*/
|
|
85
|
+
chain = Promise.resolve();
|
|
86
|
+
constructor(env, ctx) {
|
|
87
|
+
this.env = env;
|
|
88
|
+
this.ctx = ctx;
|
|
89
|
+
this.pool = new NimbusLoaderPool(env, ctx, {
|
|
90
|
+
tag: 'cp-spawn',
|
|
91
|
+
concurrency: 1,
|
|
92
|
+
timeoutMs: 2 * 60_000,
|
|
93
|
+
retries: 0,
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Dispatch a single cp.spawn request through a fresh Worker Loader
|
|
98
|
+
* isolate. Streams stdout/stderr to the parent via `hooks` once the
|
|
99
|
+
* task completes (we don't have incremental streaming yet — the
|
|
100
|
+
* supervisor-side cpDispatchInline returns final strings; future
|
|
101
|
+
* improvement: pull-RPC streaming from the loader isolate).
|
|
102
|
+
*
|
|
103
|
+
* Returns the exit code.
|
|
104
|
+
*/
|
|
105
|
+
async runOne(req, kind, hooks, childId) {
|
|
106
|
+
const spec = {
|
|
107
|
+
req: {
|
|
108
|
+
// Single-ownership: defensive copy of the request fields that
|
|
109
|
+
// cross the RPC boundary. Strings are copied by structured-clone;
|
|
110
|
+
// we explicitly copy `args` and `env` arrays/objects so a
|
|
111
|
+
// post-call mutation in the caller doesn't affect the task body.
|
|
112
|
+
command: String(req.command || ''),
|
|
113
|
+
args: Array.isArray(req.args) ? req.args.map(String) : [],
|
|
114
|
+
env: { ...(req.env || {}) },
|
|
115
|
+
cwd: String(req.cwd || '/home/user'),
|
|
116
|
+
stdio: req.stdio,
|
|
117
|
+
detached: !!req.detached,
|
|
118
|
+
shell: req.shell ?? false,
|
|
119
|
+
stdin: typeof req.stdin === 'string' ? req.stdin : '',
|
|
120
|
+
},
|
|
121
|
+
kind,
|
|
122
|
+
parentChildId: childId,
|
|
123
|
+
};
|
|
124
|
+
// Serialize through slot 0 of the shared pool so workerd's per-
|
|
125
|
+
// method-context dynamic-worker cap (4) is never tripped. The
|
|
126
|
+
// chain promise links each spawn to wait for the previous one to
|
|
127
|
+
// settle BEFORE issuing pool.submit. Slot 0 has at most one
|
|
128
|
+
// in-flight LOADER.get ref at any moment.
|
|
129
|
+
let result;
|
|
130
|
+
const myTurn = this.chain.then(async () => {
|
|
131
|
+
try {
|
|
132
|
+
return await this.pool.submit(runSpawnInIsolate, spec);
|
|
133
|
+
}
|
|
134
|
+
catch (e) {
|
|
135
|
+
const msg = (e && e.message) ? String(e.message) : String(e);
|
|
136
|
+
return { exitCode: 1, marker: '', stdout: '', stderr: 'spawn-pool: ' + msg + '\n' };
|
|
137
|
+
}
|
|
138
|
+
});
|
|
139
|
+
// Update the chain BEFORE awaiting so the next caller serializes
|
|
140
|
+
// behind us. .catch consumed so a runOne failure doesn't break
|
|
141
|
+
// the chain for subsequent calls.
|
|
142
|
+
this.chain = myTurn.catch(() => undefined);
|
|
143
|
+
result = await myTurn;
|
|
144
|
+
const results = [result];
|
|
145
|
+
if (!results || results.length === 0) {
|
|
146
|
+
hooks.onStderr('spawn-pool: no result returned\n');
|
|
147
|
+
return 1;
|
|
148
|
+
}
|
|
149
|
+
const r = results[0];
|
|
150
|
+
// Emit the per-isolate marker FIRST so the probe sees it ahead of
|
|
151
|
+
// any user-command stderr. The probe's regex `[g3-spawn-isolate]
|
|
152
|
+
// tok=…` matches this exact line.
|
|
153
|
+
if (r.marker)
|
|
154
|
+
hooks.onStderr(r.marker);
|
|
155
|
+
if (r.stdout)
|
|
156
|
+
hooks.onStdout(r.stdout);
|
|
157
|
+
if (r.stderr)
|
|
158
|
+
hooks.onStderr(r.stderr);
|
|
159
|
+
return typeof r.exitCode === 'number' ? r.exitCode : 1;
|
|
160
|
+
}
|
|
161
|
+
}
|