@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
Binary file
@@ -0,0 +1,8 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32" width="32" height="32">
2
+ <!-- Nimbus mark: green dot on near-black disc with monospace "N". -->
3
+ <circle cx="16" cy="16" r="16" fill="#0a0a0a"/>
4
+ <circle cx="16" cy="16" r="14" fill="none" stroke="#64ffda" stroke-opacity="0.25" stroke-width="1"/>
5
+ <text x="16" y="21" text-anchor="middle"
6
+ font-family="ui-monospace, SFMono-Regular, Menlo, monospace"
7
+ font-size="16" font-weight="700" fill="#64ffda">N</text>
8
+ </svg>
@@ -0,0 +1,565 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width,initial-scale=1">
6
+ <title>Nimbus — A cloud dev environment at the edge</title>
7
+ <meta name="description" content="A cloud development environment running entirely on Cloudflare's edge. Terminal, 10 GB filesystem, npm, node, git — in your browser.">
8
+ <meta name="theme-color" content="#0a0a0a">
9
+ <meta property="og:title" content="Nimbus">
10
+ <meta property="og:description" content="A cloud development environment running entirely on Cloudflare's edge.">
11
+ <meta property="og:type" content="website">
12
+ <meta name="twitter:card" content="summary">
13
+ <link rel="icon" type="image/svg+xml" href="/favicon.svg">
14
+ <style>
15
+ /* ─────────────────────────────── Tokens ─────────────────────────────── */
16
+ :root {
17
+ --bg: #0a0a0a;
18
+ --bg-2: #111;
19
+ --bg-card: #0f1011;
20
+ --fg: #e6edf3;
21
+ --fg-dim: #c9d1d9;
22
+ --muted: #8b949e;
23
+ --muted-2: #6e7681;
24
+ --accent: #64ffda; /* primary — green */
25
+ --accent-2: #58a6ff; /* secondary — blue */
26
+ --border: #1f2428;
27
+ --border-2: #30363d;
28
+ --code-bg: #0d1117;
29
+ }
30
+ * { margin: 0; padding: 0; box-sizing: border-box; }
31
+ html, body { background: var(--bg); color: var(--fg); }
32
+ body {
33
+ font: 15px/1.6 ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif;
34
+ min-height: 100vh;
35
+ overflow-x: hidden;
36
+ background-image:
37
+ radial-gradient(900px 420px at 15% -5%, rgba(100, 255, 218, 0.06), transparent 55%),
38
+ radial-gradient(800px 450px at 100% 105%, rgba(88, 166, 255, 0.04), transparent 55%);
39
+ background-attachment: fixed;
40
+ }
41
+ a { color: var(--accent); text-decoration: none; }
42
+ a:hover { color: #8bffe6; }
43
+ code { font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, "Courier New", monospace; }
44
+ .sr-only { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); }
45
+
46
+ /* ─────────────────────────────── Nav ─────────────────────────────── */
47
+ .nav {
48
+ display: flex; align-items: center; justify-content: space-between;
49
+ padding: 18px 32px; border-bottom: 1px solid var(--border);
50
+ max-width: 1200px; margin: 0 auto;
51
+ }
52
+ .brand {
53
+ display: flex; align-items: center; gap: 8px;
54
+ color: var(--fg); font-weight: 700; font-size: 15px; letter-spacing: -0.01em;
55
+ }
56
+ .brand .dot {
57
+ width: 8px; height: 8px; border-radius: 50%;
58
+ background: var(--accent);
59
+ /* Tight inner glow only — no large radiating halo. */
60
+ box-shadow: 0 0 4px var(--accent);
61
+ animation: pulse 2.4s ease-in-out infinite;
62
+ }
63
+ @keyframes pulse { 0%, 100% { opacity: 1; } 50% { opacity: 0.55; } }
64
+ .nav nav { display: flex; gap: 16px; align-items: center; font-size: 14px; }
65
+ .nav nav a { color: var(--muted); display: inline-flex; align-items: center; gap: 6px; }
66
+ .nav nav a:hover { color: var(--fg); }
67
+ /* GitHub pill button in header nav. Compact variant of .btn-ghost so the
68
+ header stays airy; matches the in-hero CTA GitHub button by using the
69
+ same inline SVG mark + label. */
70
+ .nav .btn-nav {
71
+ display: inline-flex; align-items: center; gap: 7px;
72
+ padding: 7px 13px;
73
+ font-size: 13px; font-weight: 600; color: var(--fg);
74
+ background: transparent;
75
+ border: 1px solid var(--border-2);
76
+ border-radius: 8px;
77
+ text-decoration: none;
78
+ transition: background 0.15s ease, border-color 0.15s ease, color 0.15s ease;
79
+ }
80
+ .nav .btn-nav:hover { background: var(--bg-card); border-color: var(--muted); color: var(--fg); }
81
+ .nav .btn-nav svg { flex-shrink: 0; }
82
+ .nav .btn-nav .ext {
83
+ font-size: 11px; color: var(--muted-2);
84
+ margin-left: -2px; transform: translateY(-1px);
85
+ }
86
+
87
+ /* ─────────────────────────────── Hero ─────────────────────────────── */
88
+ main { max-width: 1200px; margin: 0 auto; padding: 0 32px; }
89
+ .hero { padding: 72px 0 64px; text-align: center; }
90
+ .ascii {
91
+ color: var(--accent);
92
+ font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, monospace;
93
+ font-size: clamp(7px, 1.55vw, 14px);
94
+ line-height: 1.05;
95
+ letter-spacing: 0;
96
+ white-space: pre;
97
+ display: inline-block;
98
+ margin-bottom: 28px;
99
+ /* Compact inner glow — keeps the banner crisp rather than hazy. */
100
+ filter: drop-shadow(0 0 2px rgba(100, 255, 218, 0.35));
101
+ user-select: none;
102
+ }
103
+ .tagline {
104
+ font-size: clamp(16px, 2.2vw, 20px);
105
+ color: var(--fg-dim);
106
+ max-width: 620px;
107
+ margin: 0 auto 28px;
108
+ line-height: 1.45;
109
+ }
110
+ .tagline .accent { color: var(--accent); }
111
+
112
+ /* Badges */
113
+ .badges {
114
+ display: flex; flex-wrap: wrap; gap: 10px;
115
+ justify-content: center; align-items: center;
116
+ list-style: none; margin: 0 auto 40px; max-width: 760px;
117
+ }
118
+ .badges li {
119
+ font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
120
+ font-size: 12px; color: var(--muted);
121
+ padding: 5px 12px;
122
+ background: var(--bg-card);
123
+ border: 1px solid var(--border-2);
124
+ border-radius: 999px;
125
+ }
126
+
127
+ /* CTA
128
+ *
129
+ * Matched-pair sizing: .btn-primary (filled accent) and .btn-ghost
130
+ * (outlined) share identical box metrics — height 44px, horizontal
131
+ * padding 22px, 14px font, same radius. Only surface differs.
132
+ * This keeps them visually balanced next to each other on the landing.
133
+ */
134
+ .cta {
135
+ display: flex; gap: 12px; justify-content: center; flex-wrap: wrap;
136
+ margin: 0 auto 12px;
137
+ }
138
+ .cta form { display: inline; }
139
+ .btn {
140
+ display: inline-flex; align-items: center; gap: 8px;
141
+ box-sizing: border-box;
142
+ height: 44px;
143
+ padding: 0 22px;
144
+ font-size: 14px; font-weight: 600;
145
+ line-height: 1; letter-spacing: 0.005em;
146
+ border: 1px solid transparent;
147
+ border-radius: 8px;
148
+ cursor: pointer; text-decoration: none;
149
+ transition: transform 0.1s ease, filter 0.15s ease, background 0.15s ease,
150
+ border-color 0.15s ease, color 0.15s ease;
151
+ font-family: inherit;
152
+ }
153
+ .btn:focus-visible {
154
+ outline: 2px solid var(--accent);
155
+ outline-offset: 2px;
156
+ }
157
+ .btn svg { flex-shrink: 0; }
158
+ .btn-primary {
159
+ background: var(--accent);
160
+ color: #000;
161
+ border-color: var(--accent);
162
+ box-shadow: 0 6px 24px -6px rgba(100, 255, 218, 0.35);
163
+ }
164
+ .btn-primary:hover { filter: brightness(1.08); transform: translateY(-1px); color: #000; }
165
+ .btn-primary:active { transform: translateY(0); }
166
+ .btn-primary .arrow { transition: transform 0.18s ease; }
167
+ .btn-primary:hover .arrow { transform: translateX(3px); }
168
+ .btn-ghost {
169
+ background: transparent;
170
+ color: var(--fg);
171
+ border-color: var(--border-2);
172
+ }
173
+ .btn-ghost:hover { background: var(--bg-card); border-color: var(--muted); color: var(--fg); }
174
+ .cta-sub {
175
+ font-size: 13px; color: var(--muted);
176
+ margin-top: 16px;
177
+ font-family: ui-monospace, Menlo, monospace;
178
+ }
179
+ .cta-sub .sep { color: var(--muted-2); margin: 0 6px; }
180
+
181
+ /* Snippet */
182
+ .snippet {
183
+ margin: 56px auto 0; max-width: 620px;
184
+ text-align: left;
185
+ border: 1px solid var(--border);
186
+ background: var(--code-bg);
187
+ border-radius: 10px;
188
+ overflow: hidden;
189
+ box-shadow: 0 20px 48px -8px rgba(0, 0, 0, 0.5);
190
+ }
191
+ .snippet-head {
192
+ display: flex; align-items: center; gap: 8px;
193
+ padding: 10px 16px;
194
+ background: #161b22;
195
+ border-bottom: 1px solid var(--border);
196
+ font-size: 12px; color: var(--muted);
197
+ }
198
+ .snippet-head .dot { width: 10px; height: 10px; border-radius: 50%; }
199
+ .snippet-head .dot.r { background: #ff5f57; }
200
+ .snippet-head .dot.y { background: #febc2e; }
201
+ .snippet-head .dot.g { background: #28c940; }
202
+ .snippet-head .title { margin-left: 8px; font-family: ui-monospace, Menlo, monospace; }
203
+ .snippet pre {
204
+ padding: 18px 20px; margin: 0;
205
+ font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
206
+ font-size: 13px; line-height: 1.75;
207
+ color: var(--fg-dim);
208
+ overflow-x: auto;
209
+ }
210
+ .c-prompt { color: var(--accent); user-select: none; margin-right: 10px; font-weight: 600; }
211
+ .c-cmd { color: var(--accent-2); }
212
+ .c-op { color: var(--muted); }
213
+ .c-comment { color: var(--muted-2); }
214
+ .c-str { color: #a5d6ff; }
215
+
216
+ /* ─────────────────────────── Demo terminal ─────────────────────────── */
217
+ .demo { padding: 24px 0 96px; }
218
+ .terminal-frame {
219
+ max-width: 860px; margin: 0 auto;
220
+ background: var(--code-bg);
221
+ border: 1px solid var(--border);
222
+ border-radius: 10px;
223
+ overflow: hidden;
224
+ box-shadow: 0 30px 80px -16px rgba(0, 0, 0, 0.55);
225
+ }
226
+ .terminal-chrome {
227
+ display: flex; align-items: center; gap: 8px;
228
+ padding: 11px 16px;
229
+ background: #161b22;
230
+ border-bottom: 1px solid var(--border);
231
+ }
232
+ .tc-dot { width: 11px; height: 11px; border-radius: 50%; }
233
+ .tc-dot.r { background: #ff5f57; }
234
+ .tc-dot.y { background: #febc2e; }
235
+ .tc-dot.g { background: #28c940; }
236
+ .tc-title {
237
+ margin-left: auto; margin-right: auto;
238
+ color: var(--muted); font-family: ui-monospace, Menlo, monospace; font-size: 12px;
239
+ transform: translateX(-22px);
240
+ }
241
+ .terminal-body {
242
+ padding: 22px 24px;
243
+ min-height: 300px;
244
+ color: var(--fg-dim);
245
+ font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
246
+ font-size: 13.5px; line-height: 1.65;
247
+ white-space: pre-wrap;
248
+ word-break: break-word;
249
+ }
250
+ .term-cursor {
251
+ display: inline-block; width: 8px; height: 15px;
252
+ background: var(--accent); vertical-align: text-bottom;
253
+ animation: blink 1s steps(1, end) infinite;
254
+ margin-left: 2px;
255
+ }
256
+ @keyframes blink { 50% { opacity: 0; } }
257
+ .term-prompt { color: var(--accent); }
258
+ .term-ok { color: var(--accent); }
259
+ .term-info { color: var(--accent-2); }
260
+ .term-dim { color: var(--muted); }
261
+
262
+ /* ─────────────────────────── Feature grid ─────────────────────────── */
263
+ .features { padding: 32px 0 96px; border-top: 1px solid var(--border); }
264
+ .features h2 {
265
+ text-align: center;
266
+ font-size: clamp(24px, 3vw, 32px);
267
+ font-weight: 700;
268
+ letter-spacing: -0.02em;
269
+ margin: 56px 0 44px;
270
+ }
271
+ .features h2 .accent { color: var(--accent); }
272
+ .feature-grid {
273
+ display: grid;
274
+ grid-template-columns: repeat(auto-fit, minmax(260px, 1fr));
275
+ gap: 16px;
276
+ }
277
+ .feature-grid article {
278
+ background: var(--bg-card);
279
+ border: 1px solid var(--border);
280
+ border-radius: 10px;
281
+ padding: 22px 22px 20px;
282
+ transition: border-color 0.2s, transform 0.2s;
283
+ }
284
+ .feature-grid article:hover {
285
+ border-color: var(--border-2);
286
+ transform: translateY(-2px);
287
+ }
288
+ .feature-grid article h3 {
289
+ font-size: 15px;
290
+ color: var(--accent);
291
+ margin-bottom: 8px;
292
+ font-family: ui-monospace, Menlo, monospace;
293
+ letter-spacing: 0.01em;
294
+ }
295
+ .feature-grid article p {
296
+ font-size: 14px; color: var(--muted);
297
+ line-height: 1.6;
298
+ }
299
+
300
+ /* ─────────────────────────────── Footer ─────────────────────────────── */
301
+ footer {
302
+ max-width: 1200px; margin: 0 auto;
303
+ padding: 28px 32px 40px;
304
+ border-top: 1px solid var(--border);
305
+ display: flex; justify-content: space-between; align-items: center;
306
+ flex-wrap: wrap; gap: 16px;
307
+ font-size: 13px; color: var(--muted);
308
+ }
309
+ footer a { color: var(--muted); }
310
+ footer a:hover { color: var(--fg); }
311
+
312
+ /* ─────────────────────────── Responsive ─────────────────────────── */
313
+ @media (max-width: 640px) {
314
+ .nav { padding: 14px 18px; }
315
+ .nav nav { gap: 14px; font-size: 13px; }
316
+ main { padding: 0 18px; }
317
+ .hero { padding: 48px 0 32px; }
318
+ .badges li { font-size: 11px; padding: 4px 10px; }
319
+ .btn { height: 42px; padding: 0 18px; font-size: 13.5px; }
320
+ .terminal-body { font-size: 12px; padding: 16px 18px; }
321
+ }
322
+
323
+ /* Reduced motion */
324
+ @media (prefers-reduced-motion: reduce) {
325
+ .brand .dot, .term-cursor { animation: none; }
326
+ }
327
+ </style>
328
+ </head>
329
+ <body>
330
+ <header class="nav">
331
+ <a class="brand" href="/">
332
+ <span class="dot"></span>
333
+ <span>nimbus</span>
334
+ </a>
335
+ <nav>
336
+ <a href="#features">Features</a>
337
+ <a class="btn-nav" href="https://github.com/AshishKumar4/Nimbus" target="_blank" rel="noopener">
338
+ <svg viewBox="0 0 16 16" width="16" height="16" aria-hidden="true"><path fill="currentColor" d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.013 8.013 0 0 0 16 8c0-4.42-3.58-8-8-8z"/></svg>
339
+ <span>GitHub</span>
340
+ <span class="ext" aria-hidden="true">&#x2197;</span>
341
+ </a>
342
+ </nav>
343
+ </header>
344
+
345
+ <main>
346
+ <!-- HERO -->
347
+ <section class="hero">
348
+ <pre class="ascii" aria-hidden="true">███╗ ██╗██╗███╗ ███╗██████╗ ██╗ ██╗███████╗
349
+ ████╗ ██║██║████╗ ████║██╔══██╗██║ ██║██╔════╝
350
+ ██╔██╗ ██║██║██╔████╔██║██████╔╝██║ ██║███████╗
351
+ ██║╚██╗██║██║██║╚██╔╝██║██╔══██╗██║ ██║╚════██║
352
+ ██║ ╚████║██║██║ ╚═╝ ██║██████╔╝╚██████╔╝███████║
353
+ ╚═╝ ╚═══╝╚═╝╚═╝ ╚═╝╚═════╝ ╚═════╝ ╚══════╝</pre>
354
+
355
+ <h1 class="sr-only">Nimbus</h1>
356
+
357
+ <p class="tagline">
358
+ A cloud dev environment running entirely on <span class="accent">Cloudflare&rsquo;s edge</span>.
359
+ </p>
360
+
361
+ <ul class="badges" role="list">
362
+ <li>10 GB per session</li>
363
+ <li>Boots in seconds</li>
364
+ <li>Shareable URL</li>
365
+ <li>MIT</li>
366
+ </ul>
367
+
368
+ <div class="cta">
369
+ <form action="/new" method="POST">
370
+ <button type="submit" class="btn btn-primary" autofocus>
371
+ <span>Launch</span>
372
+ <span class="arrow" aria-hidden="true">&rarr;</span>
373
+ </button>
374
+ </form>
375
+ <a class="btn btn-ghost" href="https://github.com/AshishKumar4/Nimbus" target="_blank" rel="noopener">
376
+ <svg viewBox="0 0 16 16" width="16" height="16" aria-hidden="true"><path fill="currentColor" d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.013 8.013 0 0 0 16 8c0-4.42-3.58-8-8-8z"/></svg>
377
+ <span>GitHub</span>
378
+ </a>
379
+ </div>
380
+ <p class="cta-sub">Fresh 10&nbsp;GB sandbox<span class="sep" aria-hidden="true">·</span>URL is shareable<span class="sep" aria-hidden="true">·</span>Boots in ~1s</p>
381
+
382
+ <!-- Snippet -->
383
+ <figure class="snippet">
384
+ <div class="snippet-head">
385
+ <span class="dot r"></span><span class="dot y"></span><span class="dot g"></span>
386
+ <span class="title">inside your sandbox</span>
387
+ </div>
388
+ <pre><code><span class="c-prompt">$</span> <span class="c-cmd">git clone</span> <span class="c-str">https://github.com/you/your-app.git</span>
389
+ <span class="c-prompt">$</span> <span class="c-cmd">cd</span> your-app <span class="c-op">&amp;&amp;</span> <span class="c-cmd">npm install</span>
390
+ <span class="c-prompt">$</span> <span class="c-cmd">npm run dev</span>
391
+ <span class="c-comment"> ➜ VITE ready — preview is live</span></code></pre>
392
+ </figure>
393
+ </section>
394
+
395
+ <!-- DEMO -->
396
+ <section class="demo" aria-label="Nimbus in action">
397
+ <div class="terminal-frame">
398
+ <div class="terminal-chrome">
399
+ <span class="tc-dot r"></span><span class="tc-dot y"></span><span class="tc-dot g"></span>
400
+ <span class="tc-title">nimbus — ~/app</span>
401
+ </div>
402
+ <pre class="terminal-body" id="demo-body"></pre>
403
+ </div>
404
+ </section>
405
+
406
+ <!-- FEATURES -->
407
+ <section class="features" id="features">
408
+ <h2>Everything a dev environment needs. <span class="accent">Nothing you don&rsquo;t.</span></h2>
409
+ <div class="feature-grid">
410
+ <article>
411
+ <h3>real shell</h3>
412
+ <p>60+ Unix commands. Pipes, redirects, jobs, globs, heredocs. Not a toy &mdash; a bash-compatible interpreter.</p>
413
+ </article>
414
+ <article>
415
+ <h3>10 GB filesystem</h3>
416
+ <p>Persistent SQLite VFS inside a Durable Object. Survives reloads, device changes, and hibernation.</p>
417
+ </article>
418
+ <article>
419
+ <h3>npm + node</h3>
420
+ <p>Production installer with content-addressed cache. Node.js runs in sandboxed V8 isolates.</p>
421
+ </article>
422
+ <article>
423
+ <h3>git</h3>
424
+ <p>Full isomorphic-git over the real network. Clone, branch, commit, push &mdash; same flows you know.</p>
425
+ </article>
426
+ <article>
427
+ <h3>vite dev server</h3>
428
+ <p>In-process HMR, Tailwind, React Router basename auto-injection, runtime error overlay. No local tooling.</p>
429
+ </article>
430
+ <article>
431
+ <h3>shareable URLs</h3>
432
+ <p>Every sandbox gets a human-readable URL. Send it to a teammate &mdash; they join the same session instantly.</p>
433
+ </article>
434
+ </div>
435
+ </section>
436
+ </main>
437
+
438
+ <footer>
439
+ <div>MIT · Built on <a href="https://github.com/lifo-sh/lifo" target="_blank" rel="noopener">LIFO&nbsp;OS</a> · Running on Cloudflare Workers</div>
440
+ <div><a href="https://github.com/AshishKumar4/Nimbus" target="_blank" rel="noopener">GitHub&nbsp;↗</a></div>
441
+ </footer>
442
+
443
+ <script>
444
+ // ─────────────────────────── Typewriter demo ───────────────────────────
445
+ // Cycles through a canned shell session. Single-threaded, no external
446
+ // deps, under 50 lines. Respects prefers-reduced-motion by skipping the
447
+ // animation and rendering the final state immediately.
448
+ (function() {
449
+ var body = document.getElementById('demo-body');
450
+ if (!body) return;
451
+
452
+ var reduced = matchMedia('(prefers-reduced-motion: reduce)').matches;
453
+
454
+ // Each step is one line with pre-set styling. Null step = pause.
455
+ // Numbers below are REAL output from running this flow inside a
456
+ // live Nimbus sandbox (see runtime test logs); not synthesized.
457
+ var script = [
458
+ { t: 'prompt', s: '$ ' },
459
+ { t: 'typing', s: 'git clone https://github.com/AshishKumar4/personal-website', delay: 35 },
460
+ { t: 'nl' },
461
+ { t: 'dim', s: 'Cloning into personal-website...' },
462
+ { t: 'dim', s: 'Receiving objects: 100% (173/173), 2.4 MiB | 1.2 MiB/s, done.' },
463
+ { t: 'prompt', s: '$ ' },
464
+ { t: 'typing', s: 'cd personal-website && npm install', delay: 35 },
465
+ { t: 'nl' },
466
+ { t: 'dim', s: ' resolving 96 direct deps \u2192 447 packages' },
467
+ { t: 'dim', s: ' writing 56,897 files in batches...' },
468
+ { t: 'ok', s: 'added 447 packages in 59s' },
469
+ { t: 'prompt', s: '$ ' },
470
+ { t: 'typing', s: 'npm run dev', delay: 40 },
471
+ { t: 'nl' },
472
+ { t: 'nl' },
473
+ { t: 'info', s: ' VITE v5.4.19 ready in 418 ms' },
474
+ { t: 'nl' },
475
+ { t: 'ok', s: ' \u279C Local: /s/bold-waterfall-4783/preview/' },
476
+ { t: 'ok', s: ' \u279C Ready \u2014 React app rendered' },
477
+ { t: 'prompt', s: '$ ' },
478
+ { t: 'cursor' },
479
+ ];
480
+
481
+ var i = 0, cancelled = false;
482
+ var cursor = '<span class="term-cursor"></span>';
483
+ var rendered = '';
484
+
485
+ function classFor(t) {
486
+ if (t === 'prompt') return 'term-prompt';
487
+ if (t === 'ok') return 'term-ok';
488
+ if (t === 'info') return 'term-info';
489
+ if (t === 'dim') return 'term-dim';
490
+ return '';
491
+ }
492
+
493
+ function sleep(ms) { return new Promise(function(r){ setTimeout(r, ms); }); }
494
+
495
+ function esc(s) {
496
+ return s.replace(/[&<>]/g, function(c){
497
+ return c === '&' ? '&amp;' : c === '<' ? '&lt;' : '&gt;';
498
+ });
499
+ }
500
+
501
+ async function typeLine(text, delay) {
502
+ for (var c = 0; c < text.length; c++) {
503
+ if (cancelled) return;
504
+ rendered += esc(text.charAt(c));
505
+ body.innerHTML = rendered + cursor;
506
+ await sleep(delay);
507
+ }
508
+ }
509
+
510
+ async function run() {
511
+ if (reduced) {
512
+ // Fast-forward: render the final static state.
513
+ for (var k = 0; k < script.length; k++) {
514
+ var step = script[k];
515
+ if (step.t === 'cursor') continue;
516
+ if (step.t === 'nl') { rendered += '\n'; continue; }
517
+ if (step.t === 'typing') {
518
+ rendered += esc(step.s) + '\n';
519
+ continue;
520
+ }
521
+ var cls = classFor(step.t);
522
+ rendered += (cls ? '<span class="' + cls + '">' + esc(step.s) + '</span>' : esc(step.s));
523
+ if (step.t !== 'prompt') rendered += '\n';
524
+ }
525
+ body.innerHTML = rendered + cursor;
526
+ return;
527
+ }
528
+
529
+ while (!cancelled) {
530
+ rendered = '';
531
+ body.innerHTML = cursor;
532
+ await sleep(400);
533
+ for (i = 0; i < script.length; i++) {
534
+ if (cancelled) return;
535
+ var step = script[i];
536
+ if (step.t === 'cursor') { await sleep(1800); continue; }
537
+ if (step.t === 'nl') { rendered += '\n'; body.innerHTML = rendered + cursor; continue; }
538
+ if (step.t === 'typing') {
539
+ await typeLine(step.s, step.delay || 40);
540
+ rendered += '\n';
541
+ body.innerHTML = rendered + cursor;
542
+ await sleep(280);
543
+ continue;
544
+ }
545
+ var cls = classFor(step.t);
546
+ rendered += cls ? '<span class="' + cls + '">' + esc(step.s) + '</span>' : esc(step.s);
547
+ if (step.t !== 'prompt') rendered += '\n';
548
+ body.innerHTML = rendered + cursor;
549
+ await sleep(step.t === 'prompt' ? 180 : 120);
550
+ }
551
+ await sleep(2600);
552
+ }
553
+ }
554
+
555
+ // Pause animation when the tab is hidden to save CPU.
556
+ document.addEventListener('visibilitychange', function() {
557
+ if (document.hidden) cancelled = true;
558
+ else { cancelled = false; run(); }
559
+ });
560
+
561
+ run();
562
+ })();
563
+ </script>
564
+ </body>
565
+ </html>