@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.
Files changed (408) hide show
  1. package/README.md +219 -0
  2. package/dist/_shared/bytes.d.ts +18 -0
  3. package/dist/_shared/bytes.d.ts.map +1 -0
  4. package/dist/_shared/bytes.js +17 -0
  5. package/dist/_shared/cache-stats.d.ts +146 -0
  6. package/dist/_shared/cache-stats.d.ts.map +1 -0
  7. package/dist/_shared/cache-stats.js +162 -0
  8. package/dist/_shared/exports-resolver.d.ts +76 -0
  9. package/dist/_shared/exports-resolver.d.ts.map +1 -0
  10. package/dist/_shared/exports-resolver.js +284 -0
  11. package/dist/_shared/install-phase.d.ts +47 -0
  12. package/dist/_shared/install-phase.d.ts.map +1 -0
  13. package/dist/_shared/install-phase.js +1 -0
  14. package/dist/_shared/real-node-imports.d.ts +38 -0
  15. package/dist/_shared/real-node-imports.d.ts.map +1 -0
  16. package/dist/_shared/real-node-imports.js +46 -0
  17. package/dist/_shared/retry.d.ts +93 -0
  18. package/dist/_shared/retry.d.ts.map +1 -0
  19. package/dist/_shared/retry.js +161 -0
  20. package/dist/_shared/session-id.d.ts +39 -0
  21. package/dist/_shared/session-id.d.ts.map +1 -0
  22. package/dist/_shared/session-id.js +127 -0
  23. package/dist/_shared/session-router.d.ts +104 -0
  24. package/dist/_shared/session-router.d.ts.map +1 -0
  25. package/dist/_shared/session-router.js +165 -0
  26. package/dist/_shared/w7-frame.d.ts +93 -0
  27. package/dist/_shared/w7-frame.d.ts.map +1 -0
  28. package/dist/_shared/w7-frame.js +402 -0
  29. package/dist/auth/index.d.ts +16 -0
  30. package/dist/auth/index.d.ts.map +1 -0
  31. package/dist/auth/index.js +15 -0
  32. package/dist/auth/middleware.d.ts +85 -0
  33. package/dist/auth/middleware.d.ts.map +1 -0
  34. package/dist/auth/middleware.js +150 -0
  35. package/dist/auth/token.d.ts +96 -0
  36. package/dist/auth/token.d.ts.map +1 -0
  37. package/dist/auth/token.js +226 -0
  38. package/dist/auth/types.d.ts +141 -0
  39. package/dist/auth/types.d.ts.map +1 -0
  40. package/dist/auth/types.js +114 -0
  41. package/dist/bindings/d1.d.ts +102 -0
  42. package/dist/bindings/d1.d.ts.map +1 -0
  43. package/dist/bindings/d1.js +549 -0
  44. package/dist/bindings/kv.d.ts +82 -0
  45. package/dist/bindings/kv.d.ts.map +1 -0
  46. package/dist/bindings/kv.js +290 -0
  47. package/dist/bindings/r2.d.ts +137 -0
  48. package/dist/bindings/r2.d.ts.map +1 -0
  49. package/dist/bindings/r2.js +379 -0
  50. package/dist/cirrus-npm-cjs.generated.d.ts +17 -0
  51. package/dist/cirrus-npm-cjs.generated.d.ts.map +1 -0
  52. package/dist/cirrus-npm-cjs.generated.js +41 -0
  53. package/dist/cirrus-plugin-react.generated.d.ts +34 -0
  54. package/dist/cirrus-plugin-react.generated.d.ts.map +1 -0
  55. package/dist/cirrus-plugin-react.generated.js +33 -0
  56. package/dist/constants.d.ts +34 -0
  57. package/dist/constants.d.ts.map +1 -0
  58. package/dist/constants.js +116 -0
  59. package/dist/esbuild-wasm-bundle.generated.d.ts +41 -0
  60. package/dist/esbuild-wasm-bundle.generated.d.ts.map +1 -0
  61. package/dist/esbuild-wasm-bundle.generated.js +40 -0
  62. package/dist/facets/cirrus-real.d.ts +147 -0
  63. package/dist/facets/cirrus-real.d.ts.map +1 -0
  64. package/dist/facets/cirrus-real.js +981 -0
  65. package/dist/facets/inner-do-registry.d.ts +41 -0
  66. package/dist/facets/inner-do-registry.d.ts.map +1 -0
  67. package/dist/facets/inner-do-registry.js +51 -0
  68. package/dist/facets/manager.d.ts +314 -0
  69. package/dist/facets/manager.d.ts.map +1 -0
  70. package/dist/facets/manager.js +2681 -0
  71. package/dist/facets/process.d.ts +318 -0
  72. package/dist/facets/process.d.ts.map +1 -0
  73. package/dist/facets/process.js +567 -0
  74. package/dist/facets/real-vite-fs-shim.d.ts +151 -0
  75. package/dist/facets/real-vite-fs-shim.d.ts.map +1 -0
  76. package/dist/facets/real-vite-fs-shim.js +1279 -0
  77. package/dist/facets/real-vite-hmr.d.ts +142 -0
  78. package/dist/facets/real-vite-hmr.d.ts.map +1 -0
  79. package/dist/facets/real-vite-hmr.js +476 -0
  80. package/dist/facets/vite-dev-server.d.ts +293 -0
  81. package/dist/facets/vite-dev-server.d.ts.map +1 -0
  82. package/dist/facets/vite-dev-server.js +2580 -0
  83. package/dist/facets/wasm-swap-registry.d.ts +261 -0
  84. package/dist/facets/wasm-swap-registry.d.ts.map +1 -0
  85. package/dist/facets/wasm-swap-registry.js +551 -0
  86. package/dist/facets/ws-terminal.d.ts +107 -0
  87. package/dist/facets/ws-terminal.d.ts.map +1 -0
  88. package/dist/facets/ws-terminal.js +207 -0
  89. package/dist/git/commands.d.ts +13 -0
  90. package/dist/git/commands.d.ts.map +1 -0
  91. package/dist/git/commands.js +633 -0
  92. package/dist/git/network-facet.d.ts +61 -0
  93. package/dist/git/network-facet.d.ts.map +1 -0
  94. package/dist/git/network-facet.js +700 -0
  95. package/dist/git-bundle.generated.d.ts +16 -0
  96. package/dist/git-bundle.generated.d.ts.map +1 -0
  97. package/dist/git-bundle.generated.js +15 -0
  98. package/dist/index.d.ts +41 -0
  99. package/dist/index.d.ts.map +1 -0
  100. package/dist/index.js +73 -0
  101. package/dist/loaders/child-process/spawn-facet.d.ts +90 -0
  102. package/dist/loaders/child-process/spawn-facet.d.ts.map +1 -0
  103. package/dist/loaders/child-process/spawn-facet.js +103 -0
  104. package/dist/loaders/child-process/spawn-pool.d.ts +110 -0
  105. package/dist/loaders/child-process/spawn-pool.d.ts.map +1 -0
  106. package/dist/loaders/child-process/spawn-pool.js +161 -0
  107. package/dist/loaders/fanout-pool.d.ts +195 -0
  108. package/dist/loaders/fanout-pool.d.ts.map +1 -0
  109. package/dist/loaders/fanout-pool.js +326 -0
  110. package/dist/loaders/generated-workers.d.ts +26 -0
  111. package/dist/loaders/generated-workers.d.ts.map +1 -0
  112. package/dist/loaders/generated-workers.js +25 -0
  113. package/dist/loaders/index.d.ts +15 -0
  114. package/dist/loaders/index.d.ts.map +1 -0
  115. package/dist/loaders/index.js +13 -0
  116. package/dist/loaders/loader-pool.d.ts +273 -0
  117. package/dist/loaders/loader-pool.d.ts.map +1 -0
  118. package/dist/loaders/loader-pool.js +624 -0
  119. package/dist/loaders/npm-resolve-preamble.d.ts +34 -0
  120. package/dist/loaders/npm-resolve-preamble.d.ts.map +1 -0
  121. package/dist/loaders/npm-resolve-preamble.js +237 -0
  122. package/dist/loaders/pre-bundle-preamble.d.ts +41 -0
  123. package/dist/loaders/pre-bundle-preamble.d.ts.map +1 -0
  124. package/dist/loaders/pre-bundle-preamble.js +114 -0
  125. package/dist/loaders/vendor/codegen.d.ts +24 -0
  126. package/dist/loaders/vendor/codegen.d.ts.map +1 -0
  127. package/dist/loaders/vendor/codegen.js +44 -0
  128. package/dist/loaders/vendor/errors.d.ts +24 -0
  129. package/dist/loaders/vendor/errors.d.ts.map +1 -0
  130. package/dist/loaders/vendor/errors.js +46 -0
  131. package/dist/loaders/vendor/index.d.ts +16 -0
  132. package/dist/loaders/vendor/index.d.ts.map +1 -0
  133. package/dist/loaders/vendor/index.js +11 -0
  134. package/dist/loaders/vendor/pool.d.ts +88 -0
  135. package/dist/loaders/vendor/pool.d.ts.map +1 -0
  136. package/dist/loaders/vendor/pool.js +353 -0
  137. package/dist/loaders/vendor/primitives.d.ts +11 -0
  138. package/dist/loaders/vendor/primitives.d.ts.map +1 -0
  139. package/dist/loaders/vendor/primitives.js +33 -0
  140. package/dist/loaders/vendor/serialize.d.ts +3 -0
  141. package/dist/loaders/vendor/serialize.d.ts.map +1 -0
  142. package/dist/loaders/vendor/serialize.js +25 -0
  143. package/dist/loaders/vendor/types.d.ts +60 -0
  144. package/dist/loaders/vendor/types.d.ts.map +1 -0
  145. package/dist/loaders/vendor/types.js +4 -0
  146. package/dist/npm/cache.d.ts +136 -0
  147. package/dist/npm/cache.d.ts.map +1 -0
  148. package/dist/npm/cache.js +429 -0
  149. package/dist/npm/install-batch-facet.d.ts +129 -0
  150. package/dist/npm/install-batch-facet.d.ts.map +1 -0
  151. package/dist/npm/install-batch-facet.js +598 -0
  152. package/dist/npm/install-facet.d.ts +29 -0
  153. package/dist/npm/install-facet.d.ts.map +1 -0
  154. package/dist/npm/install-facet.js +9 -0
  155. package/dist/npm/installer.d.ts +239 -0
  156. package/dist/npm/installer.d.ts.map +1 -0
  157. package/dist/npm/installer.js +2022 -0
  158. package/dist/npm/npx-install.d.ts +74 -0
  159. package/dist/npm/npx-install.d.ts.map +1 -0
  160. package/dist/npm/npx-install.js +302 -0
  161. package/dist/npm/pre-bundle-facet.d.ts +168 -0
  162. package/dist/npm/pre-bundle-facet.d.ts.map +1 -0
  163. package/dist/npm/pre-bundle-facet.js +653 -0
  164. package/dist/npm/r2-cache.d.ts +286 -0
  165. package/dist/npm/r2-cache.d.ts.map +1 -0
  166. package/dist/npm/r2-cache.js +506 -0
  167. package/dist/npm/resolve-facet.d.ts +202 -0
  168. package/dist/npm/resolve-facet.d.ts.map +1 -0
  169. package/dist/npm/resolve-facet.js +833 -0
  170. package/dist/npm/resolve-one-facet.d.ts +204 -0
  171. package/dist/npm/resolve-one-facet.d.ts.map +1 -0
  172. package/dist/npm/resolve-one-facet.js +437 -0
  173. package/dist/npm/resolver.d.ts +109 -0
  174. package/dist/npm/resolver.d.ts.map +1 -0
  175. package/dist/npm/resolver.js +899 -0
  176. package/dist/npm/tarball-stream.d.ts +85 -0
  177. package/dist/npm/tarball-stream.d.ts.map +1 -0
  178. package/dist/npm/tarball-stream.js +205 -0
  179. package/dist/npm/tarball.d.ts +51 -0
  180. package/dist/npm/tarball.d.ts.map +1 -0
  181. package/dist/npm/tarball.js +185 -0
  182. package/dist/observability/diag-counters.d.ts +292 -0
  183. package/dist/observability/diag-counters.d.ts.map +1 -0
  184. package/dist/observability/diag-counters.js +302 -0
  185. package/dist/observability/heap-estimate.d.ts +166 -0
  186. package/dist/observability/heap-estimate.d.ts.map +1 -0
  187. package/dist/observability/heap-estimate.js +192 -0
  188. package/dist/observability/heavy-alloc-coord.d.ts +95 -0
  189. package/dist/observability/heavy-alloc-coord.d.ts.map +1 -0
  190. package/dist/observability/heavy-alloc-coord.js +149 -0
  191. package/dist/observability/oom-classify.d.ts +56 -0
  192. package/dist/observability/oom-classify.d.ts.map +1 -0
  193. package/dist/observability/oom-classify.js +118 -0
  194. package/dist/observability/oom-discriminator.d.ts +192 -0
  195. package/dist/observability/oom-discriminator.d.ts.map +1 -0
  196. package/dist/observability/oom-discriminator.js +233 -0
  197. package/dist/real-vite-bundle.generated.d.ts +46 -0
  198. package/dist/real-vite-bundle.generated.d.ts.map +1 -0
  199. package/dist/real-vite-bundle.generated.js +53 -0
  200. package/dist/replica/routing.d.ts +171 -0
  201. package/dist/replica/routing.d.ts.map +1 -0
  202. package/dist/replica/routing.js +288 -0
  203. package/dist/replica/suspension.d.ts +36 -0
  204. package/dist/replica/suspension.d.ts.map +1 -0
  205. package/dist/replica/suspension.js +49 -0
  206. package/dist/router/index.d.ts +156 -0
  207. package/dist/router/index.d.ts.map +1 -0
  208. package/dist/router/index.js +220 -0
  209. package/dist/runtime/assets-loader.d.ts +71 -0
  210. package/dist/runtime/assets-loader.d.ts.map +1 -0
  211. package/dist/runtime/assets-loader.js +128 -0
  212. package/dist/runtime/barrel-detect.d.ts +46 -0
  213. package/dist/runtime/barrel-detect.d.ts.map +1 -0
  214. package/dist/runtime/barrel-detect.js +73 -0
  215. package/dist/runtime/barrel-synthesizer.d.ts +181 -0
  216. package/dist/runtime/barrel-synthesizer.d.ts.map +1 -0
  217. package/dist/runtime/barrel-synthesizer.js +541 -0
  218. package/dist/runtime/bun-repl.d.ts +46 -0
  219. package/dist/runtime/bun-repl.d.ts.map +1 -0
  220. package/dist/runtime/bun-repl.js +326 -0
  221. package/dist/runtime/bun-runner.d.ts +66 -0
  222. package/dist/runtime/bun-runner.d.ts.map +1 -0
  223. package/dist/runtime/bun-runner.js +219 -0
  224. package/dist/runtime/clang-runner.d.ts +38 -0
  225. package/dist/runtime/clang-runner.d.ts.map +1 -0
  226. package/dist/runtime/clang-runner.js +1033 -0
  227. package/dist/runtime/comment-strip.d.ts +37 -0
  228. package/dist/runtime/comment-strip.d.ts.map +1 -0
  229. package/dist/runtime/comment-strip.js +74 -0
  230. package/dist/runtime/esbuild-service.d.ts +201 -0
  231. package/dist/runtime/esbuild-service.d.ts.map +1 -0
  232. package/dist/runtime/esbuild-service.js +1444 -0
  233. package/dist/runtime/esbuild-wasm-bytes.d.ts +87 -0
  234. package/dist/runtime/esbuild-wasm-bytes.d.ts.map +1 -0
  235. package/dist/runtime/esbuild-wasm-bytes.js +131 -0
  236. package/dist/runtime/framework-detect.d.ts +71 -0
  237. package/dist/runtime/framework-detect.d.ts.map +1 -0
  238. package/dist/runtime/framework-detect.js +178 -0
  239. package/dist/runtime/long-running-handle.d.ts +133 -0
  240. package/dist/runtime/long-running-handle.d.ts.map +1 -0
  241. package/dist/runtime/long-running-handle.js +192 -0
  242. package/dist/runtime/node-repl.d.ts +36 -0
  243. package/dist/runtime/node-repl.d.ts.map +1 -0
  244. package/dist/runtime/node-repl.js +293 -0
  245. package/dist/runtime/node-runner.d.ts +111 -0
  246. package/dist/runtime/node-runner.d.ts.map +1 -0
  247. package/dist/runtime/node-runner.js +194 -0
  248. package/dist/runtime/node-shims.d.ts +24 -0
  249. package/dist/runtime/node-shims.d.ts.map +1 -0
  250. package/dist/runtime/node-shims.js +3019 -0
  251. package/dist/runtime/package-manager.d.ts +118 -0
  252. package/dist/runtime/package-manager.d.ts.map +1 -0
  253. package/dist/runtime/package-manager.js +420 -0
  254. package/dist/runtime/port-registry.d.ts +80 -0
  255. package/dist/runtime/port-registry.d.ts.map +1 -0
  256. package/dist/runtime/port-registry.js +166 -0
  257. package/dist/runtime/process-logs-api.d.ts +102 -0
  258. package/dist/runtime/process-logs-api.d.ts.map +1 -0
  259. package/dist/runtime/process-logs-api.js +253 -0
  260. package/dist/runtime/process-logs.d.ts +311 -0
  261. package/dist/runtime/process-logs.d.ts.map +1 -0
  262. package/dist/runtime/process-logs.js +656 -0
  263. package/dist/runtime/process-table.d.ts +65 -0
  264. package/dist/runtime/process-table.d.ts.map +1 -0
  265. package/dist/runtime/process-table.js +107 -0
  266. package/dist/runtime/project-detect.d.ts +21 -0
  267. package/dist/runtime/project-detect.d.ts.map +1 -0
  268. package/dist/runtime/project-detect.js +46 -0
  269. package/dist/runtime/python-repl.d.ts +66 -0
  270. package/dist/runtime/python-repl.d.ts.map +1 -0
  271. package/dist/runtime/python-repl.js +563 -0
  272. package/dist/runtime/python-runner.d.ts +50 -0
  273. package/dist/runtime/python-runner.d.ts.map +1 -0
  274. package/dist/runtime/python-runner.js +870 -0
  275. package/dist/runtime/repl-session.d.ts +160 -0
  276. package/dist/runtime/repl-session.d.ts.map +1 -0
  277. package/dist/runtime/repl-session.js +393 -0
  278. package/dist/runtime/require-resolver.d.ts +52 -0
  279. package/dist/runtime/require-resolver.d.ts.map +1 -0
  280. package/dist/runtime/require-resolver.js +690 -0
  281. package/dist/runtime/router-basename.d.ts +36 -0
  282. package/dist/runtime/router-basename.d.ts.map +1 -0
  283. package/dist/runtime/router-basename.js +310 -0
  284. package/dist/runtime/ruby-repl.d.ts +43 -0
  285. package/dist/runtime/ruby-repl.d.ts.map +1 -0
  286. package/dist/runtime/ruby-repl.js +229 -0
  287. package/dist/runtime/ruby-runner.d.ts +62 -0
  288. package/dist/runtime/ruby-runner.d.ts.map +1 -0
  289. package/dist/runtime/ruby-runner.js +737 -0
  290. package/dist/runtime/runtime-catalog.d.ts +99 -0
  291. package/dist/runtime/runtime-catalog.d.ts.map +1 -0
  292. package/dist/runtime/runtime-catalog.js +183 -0
  293. package/dist/runtime/runtime-registry.d.ts +136 -0
  294. package/dist/runtime/runtime-registry.d.ts.map +1 -0
  295. package/dist/runtime/runtime-registry.js +318 -0
  296. package/dist/runtime/streams.d.ts +13 -0
  297. package/dist/runtime/streams.d.ts.map +1 -0
  298. package/dist/runtime/streams.js +402 -0
  299. package/dist/runtime/wasi-instance.d.ts +190 -0
  300. package/dist/runtime/wasi-instance.d.ts.map +1 -0
  301. package/dist/runtime/wasi-instance.js +2044 -0
  302. package/dist/runtime/wasm-runner.d.ts +117 -0
  303. package/dist/runtime/wasm-runner.d.ts.map +1 -0
  304. package/dist/runtime/wasm-runner.js +705 -0
  305. package/dist/session/bindings.d.ts +168 -0
  306. package/dist/session/bindings.d.ts.map +1 -0
  307. package/dist/session/bindings.js +524 -0
  308. package/dist/session/ctx-exports.d.ts +16 -0
  309. package/dist/session/ctx-exports.d.ts.map +1 -0
  310. package/dist/session/ctx-exports.js +22 -0
  311. package/dist/session/diag.d.ts +62 -0
  312. package/dist/session/diag.d.ts.map +1 -0
  313. package/dist/session/diag.js +118 -0
  314. package/dist/session/fs-watch.d.ts +132 -0
  315. package/dist/session/fs-watch.d.ts.map +1 -0
  316. package/dist/session/fs-watch.js +255 -0
  317. package/dist/session/helpers.d.ts +150 -0
  318. package/dist/session/helpers.d.ts.map +1 -0
  319. package/dist/session/helpers.js +472 -0
  320. package/dist/session/hibernation.d.ts +145 -0
  321. package/dist/session/hibernation.d.ts.map +1 -0
  322. package/dist/session/hibernation.js +385 -0
  323. package/dist/session/init-phases.d.ts +87 -0
  324. package/dist/session/init-phases.d.ts.map +1 -0
  325. package/dist/session/init-phases.js +137 -0
  326. package/dist/session/init.d.ts +46 -0
  327. package/dist/session/init.d.ts.map +1 -0
  328. package/dist/session/init.js +3579 -0
  329. package/dist/session/keys.d.ts +56 -0
  330. package/dist/session/keys.d.ts.map +1 -0
  331. package/dist/session/keys.js +55 -0
  332. package/dist/session/nimbus-session.d.ts +434 -0
  333. package/dist/session/nimbus-session.d.ts.map +1 -0
  334. package/dist/session/nimbus-session.js +1084 -0
  335. package/dist/session/programmatic.d.ts +105 -0
  336. package/dist/session/programmatic.d.ts.map +1 -0
  337. package/dist/session/programmatic.js +326 -0
  338. package/dist/session/replica-routes.d.ts +68 -0
  339. package/dist/session/replica-routes.d.ts.map +1 -0
  340. package/dist/session/replica-routes.js +77 -0
  341. package/dist/session/routes.d.ts +29 -0
  342. package/dist/session/routes.d.ts.map +1 -0
  343. package/dist/session/routes.js +1331 -0
  344. package/dist/session/rpc.d.ts +323 -0
  345. package/dist/session/rpc.d.ts.map +1 -0
  346. package/dist/session/rpc.js +808 -0
  347. package/dist/session/state-store.d.ts +210 -0
  348. package/dist/session/state-store.d.ts.map +1 -0
  349. package/dist/session/state-store.js +459 -0
  350. package/dist/session/supervisor-rpc.d.ts +269 -0
  351. package/dist/session/supervisor-rpc.d.ts.map +1 -0
  352. package/dist/session/supervisor-rpc.js +437 -0
  353. package/dist/session/ws-hibernation-config.d.ts +64 -0
  354. package/dist/session/ws-hibernation-config.d.ts.map +1 -0
  355. package/dist/session/ws-hibernation-config.js +89 -0
  356. package/dist/session/ws.d.ts +95 -0
  357. package/dist/session/ws.d.ts.map +1 -0
  358. package/dist/session/ws.js +395 -0
  359. package/dist/shell/features.d.ts +410 -0
  360. package/dist/shell/features.d.ts.map +1 -0
  361. package/dist/shell/features.js +1885 -0
  362. package/dist/shell/unix-commands.d.ts +15 -0
  363. package/dist/shell/unix-commands.d.ts.map +1 -0
  364. package/dist/shell/unix-commands.js +3703 -0
  365. package/dist/stubs/lifo-ui.d.ts +10 -0
  366. package/dist/stubs/lifo-ui.d.ts.map +1 -0
  367. package/dist/stubs/lifo-ui.js +1 -0
  368. package/dist/tailwind-play.generated.d.ts +19 -0
  369. package/dist/tailwind-play.generated.d.ts.map +1 -0
  370. package/dist/tailwind-play.generated.js +18 -0
  371. package/dist/vfs/dev-provider.d.ts +64 -0
  372. package/dist/vfs/dev-provider.d.ts.map +1 -0
  373. package/dist/vfs/dev-provider.js +191 -0
  374. package/dist/vfs/events.d.ts +51 -0
  375. package/dist/vfs/events.d.ts.map +1 -0
  376. package/dist/vfs/events.js +127 -0
  377. package/dist/vfs/path.d.ts +30 -0
  378. package/dist/vfs/path.d.ts.map +1 -0
  379. package/dist/vfs/path.js +41 -0
  380. package/dist/vfs/seed-project.d.ts +62 -0
  381. package/dist/vfs/seed-project.d.ts.map +1 -0
  382. package/dist/vfs/seed-project.js +1045 -0
  383. package/dist/vfs/sqlite-vfs.d.ts +435 -0
  384. package/dist/vfs/sqlite-vfs.d.ts.map +1 -0
  385. package/dist/vfs/sqlite-vfs.js +1670 -0
  386. package/dist/vfs/symlink-registry.d.ts +64 -0
  387. package/dist/vfs/symlink-registry.d.ts.map +1 -0
  388. package/dist/vfs/symlink-registry.js +137 -0
  389. package/dist/wrangler/nimbus-wrangler.d.ts +157 -0
  390. package/dist/wrangler/nimbus-wrangler.d.ts.map +1 -0
  391. package/dist/wrangler/nimbus-wrangler.js +931 -0
  392. package/package.json +77 -0
  393. package/public/_assets/cirrus-plugin-react.bundle.js +70740 -0
  394. package/public/_assets/esbuild-0.24.2.wasm +0 -0
  395. package/public/_assets/real-vite-bundle.js +101478 -0
  396. package/public/_assets/rollup.wasm +0 -0
  397. package/public/favicon.svg +8 -0
  398. package/public/index.html +565 -0
  399. package/public/s/index.html +2379 -0
  400. package/scripts/bundle-esbuild-wasm.mjs +244 -0
  401. package/scripts/bundle-facet-workers.mjs +137 -0
  402. package/scripts/bundle-git.mjs +118 -0
  403. package/scripts/bundle-npm-cjs.mjs +363 -0
  404. package/scripts/bundle-plugin-react.mjs +480 -0
  405. package/scripts/bundle-real-vite.mjs +959 -0
  406. package/scripts/bundle-runtime.mjs +600 -0
  407. package/scripts/bundle-tailwind-play.mjs +130 -0
  408. package/scripts/patch-lifo-ui.mjs +131 -0
@@ -0,0 +1,118 @@
1
+ /**
2
+ * package-manager.ts — `nimbus install <runtime>` shell verb.
3
+ *
4
+ * Implements True-OS Wave-3's package-manager surface per
5
+ * /workspace/.seal-internal/2026-05-10-true-os/plan.md §2.
6
+ *
7
+ * Subcommands (all under `nimbus install`):
8
+ *
9
+ * nimbus install <name> install latest of <name>
10
+ * nimbus install <name>@<version> install specific version
11
+ * nimbus install --list show installed runtimes
12
+ * nimbus install --available show catalog of installables
13
+ * nimbus install --reinstall <name> force refetch
14
+ * nimbus uninstall <name> remove installed runtime
15
+ *
16
+ * Per-user-VFS layout (decision D-install-1 (a) baked):
17
+ *
18
+ * ~/.nimbus/runtimes/<name>/<version>/
19
+ * manifest.json
20
+ * bin/<entry>
21
+ * share/<name>/...
22
+ * LICENSE
23
+ *
24
+ * Survives DO eviction (SqliteFS-backed). Boot-time rehydration reads
25
+ * every `~/.nimbus/runtimes/STAR/STAR/manifest.json` and re-registers
26
+ * each `entrypoints[].binName` as a shell command pointing at the
27
+ * named runner factory.
28
+ *
29
+ * Anti-reqs (inherited from plan §8.1):
30
+ * - NO setTimeout / NO retry / NO defensive-catch in dispatch path.
31
+ * - Errors throw + bubble up to the user as a single diagnostic line.
32
+ */
33
+ import { type RuntimeCatalogEnv, type RuntimeManifest } from './runtime-catalog.js';
34
+ import type { SqliteVFS } from '../vfs/sqlite-vfs.js';
35
+ /** Minimal shell-registry shape we depend on. */
36
+ export interface MinShellRegistry {
37
+ register(name: string, handler: (ctx: any) => Promise<number>): void;
38
+ unregister?(name: string): void;
39
+ resolve?(name: string): any;
40
+ }
41
+ /** Runner-factory contract. Each registered runner produces a shell-
42
+ * command handler given the manifest + the installed root dir. The
43
+ * package manager invokes the factory at install-time + at boot-time
44
+ * rehydration. */
45
+ export type RunnerFactory = (manifest: RuntimeManifest, installRoot: string, binName: string, binKind: string | undefined) => (ctx: any) => Promise<number>;
46
+ export declare function registerRunnerFactory(key: string, factory: RunnerFactory): void;
47
+ export declare function getRegisteredRunners(): string[];
48
+ export interface RuntimeInstallSummary {
49
+ spec: string;
50
+ exitCode: number;
51
+ stdout: string;
52
+ stderr: string;
53
+ }
54
+ export interface RuntimeSummary {
55
+ name: string;
56
+ version: string;
57
+ root: string;
58
+ bins: string[];
59
+ sizeBytes: number;
60
+ license: string;
61
+ }
62
+ /** Compute the per-user install root for (name, version). Uses
63
+ * `process.env.HOME` if present; falls back to `/home/user`. */
64
+ export declare function installRoot(homeDir: string, name: string, version: string): string;
65
+ /** Read all installed manifests off SqliteFS. Used by both `--list`
66
+ * and boot-time rehydration. */
67
+ export declare function listInstalledManifests(vfs: SqliteVFS, homeDir: string): Array<{
68
+ root: string;
69
+ manifest: RuntimeManifest;
70
+ }>;
71
+ /**
72
+ * Re-register every installed runtime's entrypoints in the shell
73
+ * registry. Call once at session-init time after all runner factories
74
+ * are registered (init.ts:registerRunnerFactory blocks).
75
+ */
76
+ export declare function rehydrateInstalledRuntimes(vfs: SqliteVFS, registry: MinShellRegistry, homeDir: string): {
77
+ count: number;
78
+ bins: string[];
79
+ };
80
+ export declare function listInstalledRuntimes(vfs: SqliteVFS, homeDir: string): RuntimeSummary[];
81
+ export declare function listAvailableRuntimes(env: RuntimeCatalogEnv): Promise<Array<{
82
+ name: string;
83
+ defaultVersion: string;
84
+ versions: Array<{
85
+ version: string;
86
+ sizeBytes: number;
87
+ license: string;
88
+ }>;
89
+ }>>;
90
+ export declare function installRuntimeProgrammatic(deps: {
91
+ env: RuntimeCatalogEnv;
92
+ vfs: SqliteVFS;
93
+ registry: MinShellRegistry;
94
+ getHome(): string;
95
+ }, spec: string, opts?: {
96
+ force?: boolean;
97
+ }): Promise<RuntimeInstallSummary>;
98
+ export declare function ensureRuntimesProgrammatic(deps: {
99
+ env: RuntimeCatalogEnv;
100
+ vfs: SqliteVFS;
101
+ registry: MinShellRegistry;
102
+ getHome(): string;
103
+ }, specs: string[], opts?: {
104
+ force?: boolean;
105
+ }): Promise<RuntimeInstallSummary[]>;
106
+ /**
107
+ * Build the shell-command handler that implements `nimbus install …`,
108
+ * `nimbus uninstall …`. Registered under the name `nimbus`.
109
+ */
110
+ export declare function makeNimbusVerbHandler(deps: {
111
+ env: RuntimeCatalogEnv;
112
+ vfs: SqliteVFS;
113
+ registry: MinShellRegistry;
114
+ /** Returns `process.env.HOME` for the session. Computed by the
115
+ * caller (init.ts) from the shell env. */
116
+ getHome(): string;
117
+ }): (ctx: any) => Promise<number>;
118
+ //# sourceMappingURL=package-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"package-manager.d.ts","sourceRoot":"","sources":["../../src/runtime/package-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,420 @@
1
+ /**
2
+ * package-manager.ts — `nimbus install <runtime>` shell verb.
3
+ *
4
+ * Implements True-OS Wave-3's package-manager surface per
5
+ * /workspace/.seal-internal/2026-05-10-true-os/plan.md §2.
6
+ *
7
+ * Subcommands (all under `nimbus install`):
8
+ *
9
+ * nimbus install <name> install latest of <name>
10
+ * nimbus install <name>@<version> install specific version
11
+ * nimbus install --list show installed runtimes
12
+ * nimbus install --available show catalog of installables
13
+ * nimbus install --reinstall <name> force refetch
14
+ * nimbus uninstall <name> remove installed runtime
15
+ *
16
+ * Per-user-VFS layout (decision D-install-1 (a) baked):
17
+ *
18
+ * ~/.nimbus/runtimes/<name>/<version>/
19
+ * manifest.json
20
+ * bin/<entry>
21
+ * share/<name>/...
22
+ * LICENSE
23
+ *
24
+ * Survives DO eviction (SqliteFS-backed). Boot-time rehydration reads
25
+ * every `~/.nimbus/runtimes/STAR/STAR/manifest.json` and re-registers
26
+ * each `entrypoints[].binName` as a shell command pointing at the
27
+ * named runner factory.
28
+ *
29
+ * Anti-reqs (inherited from plan §8.1):
30
+ * - NO setTimeout / NO retry / NO defensive-catch in dispatch path.
31
+ * - Errors throw + bubble up to the user as a single diagnostic line.
32
+ */
33
+ import { fetchCatalog, fetchManifest, fetchBlob } from './runtime-catalog.js';
34
+ /** Map of runner-key → factory. Populated by init.ts before install. */
35
+ const runnerFactories = {};
36
+ export function registerRunnerFactory(key, factory) {
37
+ runnerFactories[key] = factory;
38
+ }
39
+ export function getRegisteredRunners() {
40
+ return Object.keys(runnerFactories);
41
+ }
42
+ /** Compute the per-user install root for (name, version). Uses
43
+ * `process.env.HOME` if present; falls back to `/home/user`. */
44
+ export function installRoot(homeDir, name, version) {
45
+ // Strip leading slash so SqliteFS sees a relative-looking VFS path,
46
+ // matching the convention used elsewhere in src/session/init.ts.
47
+ const home = homeDir.replace(/^\/+/, '').replace(/\/+$/, '');
48
+ return `${home}/.nimbus/runtimes/${name}/${version}`;
49
+ }
50
+ /** Read all installed manifests off SqliteFS. Used by both `--list`
51
+ * and boot-time rehydration. */
52
+ export function listInstalledManifests(vfs, homeDir) {
53
+ const home = homeDir.replace(/^\/+/, '').replace(/\/+$/, '');
54
+ const runtimesRoot = `${home}/.nimbus/runtimes`;
55
+ const out = [];
56
+ if (!vfs.exists(runtimesRoot))
57
+ return out;
58
+ // Each entry under runtimesRoot is a <name>; each entry under that
59
+ // is a <version>; each <version> dir has a manifest.json.
60
+ for (const nameEntry of vfs.readdir(runtimesRoot)) {
61
+ if (nameEntry.type !== 'directory')
62
+ continue;
63
+ const nameDir = `${runtimesRoot}/${nameEntry.name}`;
64
+ for (const verEntry of vfs.readdir(nameDir)) {
65
+ if (verEntry.type !== 'directory')
66
+ continue;
67
+ const verDir = `${nameDir}/${verEntry.name}`;
68
+ const manifestPath = `${verDir}/manifest.json`;
69
+ if (!vfs.exists(manifestPath))
70
+ continue;
71
+ try {
72
+ const manifest = JSON.parse(vfs.readFileString(manifestPath));
73
+ out.push({ root: verDir, manifest });
74
+ }
75
+ catch {
76
+ // Malformed manifest — skip silently. Surfacing via stderr
77
+ // would require a ctx we don't have at boot-time rehydration.
78
+ }
79
+ }
80
+ }
81
+ return out;
82
+ }
83
+ /**
84
+ * Re-register every installed runtime's entrypoints in the shell
85
+ * registry. Call once at session-init time after all runner factories
86
+ * are registered (init.ts:registerRunnerFactory blocks).
87
+ */
88
+ export function rehydrateInstalledRuntimes(vfs, registry, homeDir) {
89
+ const bins = [];
90
+ for (const { root, manifest } of listInstalledManifests(vfs, homeDir)) {
91
+ for (const ep of manifest.entrypoints) {
92
+ const factory = runnerFactories[ep.runner];
93
+ if (!factory)
94
+ continue; // runner not registered yet — skip
95
+ const handler = factory(manifest, root, ep.binName, ep.kind);
96
+ registry.register(ep.binName, handler);
97
+ bins.push(ep.binName);
98
+ }
99
+ }
100
+ return { count: bins.length, bins };
101
+ }
102
+ export function listInstalledRuntimes(vfs, homeDir) {
103
+ return listInstalledManifests(vfs, homeDir).map(({ root, manifest }) => ({
104
+ name: manifest.name,
105
+ version: manifest.version,
106
+ root,
107
+ bins: manifest.entrypoints.map((e) => e.binName),
108
+ sizeBytes: manifest.files.reduce((a, f) => a + f.size, 0),
109
+ license: manifest.license,
110
+ }));
111
+ }
112
+ export async function listAvailableRuntimes(env) {
113
+ const catalog = await fetchCatalog(env);
114
+ return Object.entries(catalog.runtimes)
115
+ .sort(([a], [b]) => a.localeCompare(b))
116
+ .map(([name, entry]) => ({
117
+ name,
118
+ defaultVersion: entry.default,
119
+ versions: Object.entries(entry.versions)
120
+ .sort(([a], [b]) => a.localeCompare(b))
121
+ .map(([version, v]) => ({
122
+ version,
123
+ sizeBytes: v.size_bytes,
124
+ license: v.license,
125
+ })),
126
+ }));
127
+ }
128
+ export async function installRuntimeProgrammatic(deps, spec, opts = {}) {
129
+ const stdout = [];
130
+ const stderr = [];
131
+ const ctx = {
132
+ args: [],
133
+ env: {},
134
+ cwd: deps.getHome(),
135
+ stdout: { write: (s) => stdout.push(String(s)) },
136
+ stderr: { write: (s) => stderr.push(String(s)) },
137
+ };
138
+ const args = opts.force ? ['--reinstall', spec] : [spec];
139
+ const exitCode = await runInstall(args, ctx, deps);
140
+ return {
141
+ spec,
142
+ exitCode,
143
+ stdout: stdout.join(''),
144
+ stderr: stderr.join(''),
145
+ };
146
+ }
147
+ export async function ensureRuntimesProgrammatic(deps, specs, opts = {}) {
148
+ const results = [];
149
+ for (const spec of specs) {
150
+ results.push(await installRuntimeProgrammatic(deps, spec, opts));
151
+ }
152
+ return results;
153
+ }
154
+ /**
155
+ * Build the shell-command handler that implements `nimbus install …`,
156
+ * `nimbus uninstall …`. Registered under the name `nimbus`.
157
+ */
158
+ export function makeNimbusVerbHandler(deps) {
159
+ const { env, vfs, registry, getHome } = deps;
160
+ return async function nimbus(ctx) {
161
+ const argv = ctx.args || [];
162
+ const verb = argv[0];
163
+ const rest = argv.slice(1);
164
+ if (verb === 'install') {
165
+ return runInstall(rest, ctx, { env, vfs, registry, getHome });
166
+ }
167
+ if (verb === 'uninstall') {
168
+ return runUninstall(rest, ctx, { vfs, registry, getHome });
169
+ }
170
+ // Unknown verb.
171
+ ctx.stderr.write(`nimbus: unknown subcommand '${verb || '(none)'}'\n`);
172
+ ctx.stderr.write(`usage: nimbus install <name>[@<version>] | nimbus install --list | nimbus install --available | nimbus uninstall <name>\n`);
173
+ return 2;
174
+ };
175
+ }
176
+ // ── install ──────────────────────────────────────────────────────────
177
+ async function runInstall(args, ctx, deps) {
178
+ // Flag parsing.
179
+ const listOnly = args.includes('--list');
180
+ const availOnly = args.includes('--available');
181
+ const force = args.includes('--reinstall') || args.includes('--force');
182
+ const positional = args.filter((a) => !a.startsWith('--'));
183
+ if (listOnly)
184
+ return runList(ctx, deps);
185
+ if (availOnly)
186
+ return runAvailable(ctx, deps);
187
+ if (positional.length === 0) {
188
+ ctx.stderr.write('nimbus install: missing runtime name\n');
189
+ ctx.stderr.write('usage: nimbus install <name>[@<version>]\n');
190
+ return 2;
191
+ }
192
+ // Parse `<name>` or `<name>@<version>`.
193
+ const spec = positional[0];
194
+ const atIdx = spec.indexOf('@');
195
+ const name = atIdx >= 0 ? spec.slice(0, atIdx) : spec;
196
+ const versionOverride = atIdx >= 0 ? spec.slice(atIdx + 1) : null;
197
+ // Fetch catalog.
198
+ let catalog;
199
+ try {
200
+ catalog = await fetchCatalog(deps.env);
201
+ }
202
+ catch (e) {
203
+ ctx.stderr.write(`nimbus install: ${e?.message || e}\n`);
204
+ return 1;
205
+ }
206
+ const runtimeEntry = catalog.runtimes[name];
207
+ if (!runtimeEntry) {
208
+ ctx.stderr.write(`nimbus install: '${name}' is not in catalog\n`);
209
+ ctx.stderr.write(`nimbus install: try 'nimbus install --available' to see installable runtimes\n`);
210
+ return 1;
211
+ }
212
+ const version = versionOverride || runtimeEntry.default;
213
+ const versionEntry = runtimeEntry.versions[version];
214
+ if (!versionEntry) {
215
+ ctx.stderr.write(`nimbus install: '${name}@${version}' not in catalog\n`);
216
+ return 1;
217
+ }
218
+ const home = deps.getHome();
219
+ const root = installRoot(home, name, version);
220
+ // Idempotent: if manifest already on disk + sha-equivalent, skip.
221
+ if (!force && deps.vfs.exists(`${root}/manifest.json`)) {
222
+ // We could re-verify all blob sha256s, but that's expensive. The
223
+ // manifest's presence implies the install completed; we trust it.
224
+ ctx.stdout.write(`[${name}] already installed at ${root} (use --reinstall to refetch)\n`);
225
+ // Still re-register bins in case the registry lost them — idempotent.
226
+ rehydrateInstalledRuntimes(deps.vfs, deps.registry, home);
227
+ return 0;
228
+ }
229
+ // Fetch manifest from R2.
230
+ ctx.stdout.write(`[${name}] fetching manifest...\n`);
231
+ let manifest;
232
+ try {
233
+ manifest = await fetchManifest(deps.env, versionEntry.manifest);
234
+ }
235
+ catch (e) {
236
+ ctx.stderr.write(`nimbus install: ${e?.message || e}\n`);
237
+ return 1;
238
+ }
239
+ // Pre-flight: budget check.
240
+ const totalBytes = manifest.files.reduce((a, f) => a + f.size, 0);
241
+ ctx.stdout.write(`[${name}] manifest: ${manifest.files.length} files, ${(totalBytes / 1024 / 1024).toFixed(1)} MiB\n`);
242
+ // Create install root.
243
+ deps.vfs.mkdir(root, { recursive: true });
244
+ // Write manifest.json first (so a partial install can be retried
245
+ // and the manifest is the source of truth).
246
+ deps.vfs.writeFile(`${root}/manifest.json`, JSON.stringify(manifest, null, 2));
247
+ // W2: bounded-parallel blob fetch (concurrency=3).
248
+ //
249
+ // Pre-W2 this was a serial for-loop awaiting fetchBlob one at a time.
250
+ // For multi-blob bundles (clang has 5 blobs with the two largest
251
+ // dominating wall-clock at ~31 MB + ~19 MB), overlap of network/L2
252
+ // reads cuts cold-install wall-clock by 30-50%. Concurrency capped
253
+ // at 3 to bound memory peak: worst-case clang holds 3 in-flight
254
+ // blobs ≈ ~50-60 MB; well under the DO's 128 MB cap. Memory peak
255
+ // is further bounded by sqlite-vfs.ts pendingWrites auto-flush at
256
+ // 500 chunks / ~32 MiB (`src/vfs/sqlite-vfs.ts:606`).
257
+ //
258
+ // mkdir-parent is hoisted OUT of the worker body so concurrent
259
+ // workers don't race against vfs.mkdir for the same parent. Each
260
+ // unique parent dir is created exactly once, synchronously, BEFORE
261
+ // any worker starts.
262
+ //
263
+ // Manifest-first invariant preserved: this loop runs AFTER the
264
+ // manifest.json write above. Partial-install detection unchanged.
265
+ //
266
+ // Progress UX: with parallel workers, lines arrive in completion
267
+ // order, not start order. The final "[name] installed at … (Y MiB)"
268
+ // line is still the authoritative completion signal.
269
+ const FETCH_CONCURRENCY = 3;
270
+ // Pre-compute + create all unique parent dirs sync. Avoids a
271
+ // mkdir race between workers and is faster than per-blob exists()
272
+ // checks.
273
+ const uniqueParents = new Set();
274
+ for (const f of manifest.files) {
275
+ const target = `${root}/${f.path}`;
276
+ const lastSlash = target.lastIndexOf('/');
277
+ if (lastSlash > 0) {
278
+ uniqueParents.add(target.slice(0, lastSlash));
279
+ }
280
+ }
281
+ for (const parent of uniqueParents) {
282
+ if (!deps.vfs.exists(parent))
283
+ deps.vfs.mkdir(parent, { recursive: true });
284
+ }
285
+ // Hand-rolled worker pool: N workers consume indices off a shared
286
+ // cursor until the queue is empty. Avoids head-of-line blocking
287
+ // that chunked Promise.all suffers (a slow blob in batch i doesn't
288
+ // delay blob i+N from starting).
289
+ const files = manifest.files;
290
+ const total = files.length;
291
+ let nextIdx = 0;
292
+ let completed = 0;
293
+ const workers = Array.from({ length: Math.min(FETCH_CONCURRENCY, total) }, async () => {
294
+ while (true) {
295
+ const i = nextIdx++;
296
+ if (i >= total)
297
+ return;
298
+ const f = files[i];
299
+ const target = `${root}/${f.path}`;
300
+ const bytes = await fetchBlob(deps.env, f.content, f.sha256);
301
+ deps.vfs.writeFile(target, bytes);
302
+ completed++;
303
+ ctx.stdout.write(`[${name}] fetched ${f.path} (${(f.size / 1024 / 1024).toFixed(2)} MiB) ${completed}/${total}\n`);
304
+ }
305
+ });
306
+ await Promise.all(workers);
307
+ // Register entrypoints.
308
+ for (const ep of manifest.entrypoints) {
309
+ const factory = runnerFactories[ep.runner];
310
+ if (!factory) {
311
+ ctx.stderr.write(`[${name}] warning: runner '${ep.runner}' not registered; bin '${ep.binName}' will not be invokable\n`);
312
+ continue;
313
+ }
314
+ const handler = factory(manifest, root, ep.binName, ep.kind);
315
+ deps.registry.register(ep.binName, handler);
316
+ }
317
+ ctx.stdout.write(`[${name}] installed at ${root} (${(totalBytes / 1024 / 1024).toFixed(1)} MiB)\n`);
318
+ return 0;
319
+ }
320
+ // ── --list ───────────────────────────────────────────────────────────
321
+ async function runList(ctx, deps) {
322
+ const home = deps.getHome();
323
+ const installed = listInstalledManifests(deps.vfs, home);
324
+ if (installed.length === 0) {
325
+ ctx.stdout.write('(no runtimes installed)\n');
326
+ return 0;
327
+ }
328
+ ctx.stdout.write(`installed runtimes (${installed.length}):\n`);
329
+ for (const { root, manifest } of installed) {
330
+ const totalBytes = manifest.files.reduce((a, f) => a + f.size, 0);
331
+ const bins = manifest.entrypoints.map((e) => e.binName).join(', ');
332
+ ctx.stdout.write(` ${manifest.name}@${manifest.version} ${(totalBytes / 1024 / 1024).toFixed(1)} MiB bins=[${bins}] ${root}\n`);
333
+ }
334
+ return 0;
335
+ }
336
+ // ── --available ──────────────────────────────────────────────────────
337
+ async function runAvailable(ctx, deps) {
338
+ let catalog;
339
+ try {
340
+ catalog = await fetchCatalog(deps.env);
341
+ }
342
+ catch (e) {
343
+ ctx.stderr.write(`nimbus install --available: ${e?.message || e}\n`);
344
+ return 1;
345
+ }
346
+ const names = Object.keys(catalog.runtimes).sort();
347
+ if (names.length === 0) {
348
+ ctx.stdout.write('(no runtimes in catalog)\n');
349
+ return 0;
350
+ }
351
+ ctx.stdout.write(`available runtimes (${names.length}):\n`);
352
+ for (const name of names) {
353
+ const r = catalog.runtimes[name];
354
+ const versions = Object.keys(r.versions);
355
+ ctx.stdout.write(` ${name} default=${r.default} versions=[${versions.join(', ')}]\n`);
356
+ for (const v of versions) {
357
+ const ve = r.versions[v];
358
+ ctx.stdout.write(` ${v} ${(ve.size_bytes / 1024 / 1024).toFixed(1)} MiB license=${ve.license}\n`);
359
+ }
360
+ }
361
+ return 0;
362
+ }
363
+ // ── uninstall ────────────────────────────────────────────────────────
364
+ async function runUninstall(args, ctx, deps) {
365
+ if (args.length === 0 || args[0].startsWith('--')) {
366
+ ctx.stderr.write('nimbus uninstall: missing runtime name\n');
367
+ return 2;
368
+ }
369
+ const spec = args[0];
370
+ const atIdx = spec.indexOf('@');
371
+ const name = atIdx >= 0 ? spec.slice(0, atIdx) : spec;
372
+ const versionOverride = atIdx >= 0 ? spec.slice(atIdx + 1) : null;
373
+ const home = deps.getHome();
374
+ const installed = listInstalledManifests(deps.vfs, home);
375
+ const matches = installed.filter((x) => x.manifest.name === name && (!versionOverride || x.manifest.version === versionOverride));
376
+ if (matches.length === 0) {
377
+ ctx.stderr.write(`nimbus uninstall: '${name}' is not installed\n`);
378
+ return 1;
379
+ }
380
+ for (const m of matches) {
381
+ // Unregister bins.
382
+ for (const ep of m.manifest.entrypoints) {
383
+ // We don't have a guaranteed `unregister`; bins shadowing is OK
384
+ // because boot-rehydration only re-registers what's still on disk.
385
+ if (typeof deps.registry.unregister === 'function') {
386
+ deps.registry.unregister(ep.binName);
387
+ }
388
+ }
389
+ // Recursive delete via VFS — readdir + unlink + rmdir.
390
+ rmrfVfs(deps.vfs, m.root);
391
+ ctx.stdout.write(`[${m.manifest.name}@${m.manifest.version}] uninstalled (removed ${m.root})\n`);
392
+ }
393
+ // Clean up empty parent dirs (~/.nimbus/runtimes/<name>/ if no
394
+ // versions left; runtimes/ if no runtimes left).
395
+ const runtimeDir = `${home.replace(/^\/+/, '').replace(/\/+$/, '')}/.nimbus/runtimes/${name}`;
396
+ cleanupEmpty(deps.vfs, runtimeDir);
397
+ cleanupEmpty(deps.vfs, `${home.replace(/^\/+/, '').replace(/\/+$/, '')}/.nimbus/runtimes`);
398
+ return 0;
399
+ }
400
+ function rmrfVfs(vfs, path) {
401
+ if (!vfs.exists(path))
402
+ return;
403
+ for (const entry of vfs.readdir(path)) {
404
+ const child = `${path}/${entry.name}`;
405
+ if (entry.type === 'directory') {
406
+ rmrfVfs(vfs, child);
407
+ }
408
+ else {
409
+ vfs.unlink(child);
410
+ }
411
+ }
412
+ vfs.rmdir(path);
413
+ }
414
+ function cleanupEmpty(vfs, path) {
415
+ if (!vfs.exists(path))
416
+ return;
417
+ if (vfs.readdir(path).length === 0) {
418
+ vfs.rmdir(path);
419
+ }
420
+ }
@@ -0,0 +1,80 @@
1
+ /**
2
+ * port-registry.ts — Maps virtual ports to facet stubs.
3
+ *
4
+ * When a facet calls http.createServer().listen(3000), it notifies the
5
+ * supervisor via SupervisorRPC.registerPort(3000). The supervisor stores
6
+ * the facet stub here. When the DO receives a request to /port/3000/*,
7
+ * it looks up the facet and forwards the request.
8
+ *
9
+ * Transport (audit C2):
10
+ * The proxy forwards a real Request and returns a real Response.
11
+ * Workers RPC natively transfers Request/Response values between
12
+ * isolates with streaming bodies and flow control (they are NOT
13
+ * structured-cloneable — RPC has its own transfer mechanism for
14
+ * these types). Binary payloads (images, wasm, gzip, multipart
15
+ * uploads, audio/video) go through byte-for-byte with no UTF-8
16
+ * coercion or JSON envelope anywhere in the path.
17
+ *
18
+ * Facet contract for handleHttpRequest:
19
+ * async handleHttpRequest(request: Request): Promise<Response>
20
+ *
21
+ * where `request.url` is the inner URL the user's HTTP server
22
+ * expects (pathname + search, absolute against a synthetic origin),
23
+ * `request.method`/`headers` mirror the outer request, and
24
+ * `request.body` is a ReadableStream (or null for GET/HEAD) that
25
+ * the facet can consume once. The returned Response is returned
26
+ * to the outer fetch as-is; its body is streamed directly.
27
+ */
28
+ export interface PortEntry {
29
+ port: number;
30
+ pid: number;
31
+ /**
32
+ * Facet stub exposing `handleHttpRequest(Request): Promise<Response>`.
33
+ * May be null when a facet has reserved a port but not yet wired up
34
+ * the request handler (see _rpcRegisterPort in nimbus-session.ts).
35
+ */
36
+ facetStub: any;
37
+ registeredAt: number;
38
+ }
39
+ export declare class PortRegistry {
40
+ private ports;
41
+ /** Register a facet as listening on a port. */
42
+ register(port: number, pid: number, facetStub: any): void;
43
+ /** Unregister a port. */
44
+ unregister(port: number): boolean;
45
+ /** Unregister all ports owned by a specific PID. */
46
+ unregisterByPid(pid: number): number;
47
+ /** Look up a port entry. */
48
+ get(port: number): PortEntry | undefined;
49
+ /** Check if a port is registered. */
50
+ has(port: number): boolean;
51
+ /** Get all registered ports. */
52
+ getAll(): PortEntry[];
53
+ /**
54
+ * Forward an HTTP request to the facet owning a port.
55
+ *
56
+ * Returns null if no facet is listening on this port (or if a port
57
+ * is registered but its stub is not yet attached — see PortEntry).
58
+ *
59
+ * The Request passed to the facet has a rewritten URL whose pathname
60
+ * is the inner path (without the `/port/<n>` prefix) and whose origin
61
+ * matches the outer request, so user code reading `request.url`
62
+ * sees a URL shape consistent with "my server is running at this
63
+ * port". Headers and body are forwarded unchanged; the body is a
64
+ * ReadableStream so binary payloads aren't materialised in memory.
65
+ *
66
+ * Binary safety: both directions use structured-cloneable Request/
67
+ * Response values over Workers RPC. No UTF-8 round-trip anywhere.
68
+ * A user-facet serving a PNG will return the exact same bytes the
69
+ * client receives.
70
+ */
71
+ routeRequest(port: number, request: Request, pathname: string): Promise<Response | null>;
72
+ get stats(): {
73
+ activePorts: number;
74
+ ports: {
75
+ port: number;
76
+ pid: number;
77
+ }[];
78
+ };
79
+ }
80
+ //# sourceMappingURL=port-registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"port-registry.d.ts","sourceRoot":"","sources":["../../src/runtime/port-registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAEH,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ;;;;OAIG;IACH,SAAS,EAAE,GAAG,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,qBAAa,YAAY;IACvB,OAAO,CAAC,KAAK,CAAgC;IAE7C,+CAA+C;IAC/C,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,GAAG,IAAI;IAIzD,yBAAyB;IACzB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAIjC,oDAAoD;IACpD,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IAWpC,4BAA4B;IAC5B,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS;IAIxC,qCAAqC;IACrC,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAI1B,gCAAgC;IAChC,MAAM,IAAI,SAAS,EAAE;IAIrB;;;;;;;;;;;;;;;;;OAiBG;IACG,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;IA8F9F,IAAI,KAAK;;;;;;MAKR;CACF"}