@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,160 @@
1
+ /**
2
+ * repl-session.ts — substrate for interactive REPL sessions.
3
+ *
4
+ * Per /workspace/.seal-internal/2026-05-11-repl-plan/plan.md §§2-4:
5
+ * Layer 1: long-lived runtime via repeated execute() into a cached
6
+ * child-facet isolate (state persists on globalThis).
7
+ * Layer 2: stdin routing via WebSocketTerminal.attachRepl().
8
+ * Layer 3: prompt detection per-runtime — Pyodide uses sentinel-
9
+ * controlled sys.ps1; Bun/Node/Ruby use per-runtime regex.
10
+ *
11
+ * This file owns the runtime-agnostic plumbing. Per-runtime adapters
12
+ * live in src/runtime/<name>-repl.ts and implement the ReplAdapter
13
+ * interface declared below.
14
+ */
15
+ import type { WebSocketTerminal } from '../facets/ws-terminal.js';
16
+ /**
17
+ * Per-runtime adapter contract. The shell-side ReplSession orchestrates
18
+ * input handling; the adapter wraps the actual runtime invocation.
19
+ */
20
+ export interface ReplAdapter {
21
+ /** Called once when the session starts. Returns the banner to print
22
+ * before the first prompt. */
23
+ banner(): string;
24
+ /** Send a complete line of user input. Returns:
25
+ * - kind === 'output': normal eval result; resume reading at prompt.
26
+ * - kind === 'incomplete': need more input (multi-line block).
27
+ * - kind === 'exit': REPL should close with the given exit code.
28
+ * - kind === 'error': error message to display; resume at prompt.
29
+ */
30
+ push(line: string): Promise<ReplPushResult>;
31
+ /** Called once on session close (exit() / Ctrl-D / shell teardown).
32
+ * Should free any cached pool / isolate. Idempotent. */
33
+ close(): Promise<void>;
34
+ /** Primary prompt (typically '>>> '). */
35
+ ps1: string;
36
+ /** Continuation prompt (typically '... '). */
37
+ ps2: string;
38
+ }
39
+ export type ReplPushResult = {
40
+ kind: 'output';
41
+ stdout: string;
42
+ stderr: string;
43
+ } | {
44
+ kind: 'incomplete';
45
+ } | {
46
+ kind: 'exit';
47
+ exitCode: number;
48
+ stdout?: string;
49
+ stderr?: string;
50
+ } | {
51
+ kind: 'error';
52
+ stderr: string;
53
+ };
54
+ /**
55
+ * Manages an interactive REPL session: stdin buffering with minimal
56
+ * readline UX (line-mode), output routing to the WS terminal, prompt
57
+ * rendering, and adapter dispatch.
58
+ *
59
+ * The shell creates a ReplSession when a runtime's `startRepl` hook
60
+ * fires; the session installs a `replCallback` on the WebSocketTerminal
61
+ * (via attachRepl()) and runs until the adapter signals 'exit' or the
62
+ * user presses Ctrl-D on an empty line.
63
+ *
64
+ * No setTimeout in the read loop — the session is driven entirely by
65
+ * keystroke arrival on the WS, with awaits gating the adapter's push().
66
+ */
67
+ export declare class ReplSession {
68
+ private adapter;
69
+ private terminal;
70
+ private detachReplCb;
71
+ /**
72
+ * REPL-R7-1 (2026-05-12): optional reference to the lifo-sh Shell.
73
+ *
74
+ * Required when the REPL is launched from a multi-line WS frame
75
+ * (e.g. user pastes `python\nexit(7)`). lifo-sh's input handler
76
+ * (node_modules/@lifo-sh/core/dist/index-Djm2onjx.js:5855
77
+ * `handleInput`) splits the frame on \r\n and pushes lines AFTER
78
+ * the first into `shell.pasteQueue`, which is drained ONLY when
79
+ * the shell becomes idle (after executeLine returns). While our
80
+ * REPL is running, those pasteQueue lines sit there waiting and
81
+ * the REPL itself receives no input → user sees a hung `>>> `
82
+ * prompt that never responds.
83
+ *
84
+ * If `shell` is provided, ReplSession will, immediately after
85
+ * attaching its replCallback, drain shell.pasteQueue and feed the
86
+ * lines into the callback (suffixed with \r each — matches what
87
+ * the WS frame originally would have looked like). This makes the
88
+ * paste path work transparently for REPL launches.
89
+ *
90
+ * The shell reference is optional so existing adapters (bun, node,
91
+ * ruby) that haven't been updated keep working with their
92
+ * pre-fix behavior.
93
+ */
94
+ private shellRef;
95
+ /** Current line buffer (chars typed since the last enter). */
96
+ private lineBuf;
97
+ /** Cursor position within lineBuf (0 = beginning). */
98
+ private cursorPos;
99
+ /** Accumulated lines for a multi-line block (e.g. inside def/class). */
100
+ private blockBuf;
101
+ /** True while the adapter is processing a push (block subsequent submits). */
102
+ private busy;
103
+ /** Per-session history ring (most recent first). Capped at 100. */
104
+ private history;
105
+ private historyIdx;
106
+ /** Resolves when close() has been called and the session ended. */
107
+ private closedResolve;
108
+ private closedPromise;
109
+ /** Exit code captured from adapter's last 'exit' return. */
110
+ private exitCode;
111
+ /**
112
+ * REPL-A1b (master plan §1 + user-evidence 2026-05-11): handleInput
113
+ * is invoked fire-and-forget per WS frame. Multiple WS frames arrive
114
+ * in quick succession during real REPL use (and during probes that
115
+ * send multiple lines without waiting for prompt). Without
116
+ * serialization, two concurrent handleInput coroutines both hit `\r`
117
+ * and call submitLine(); blockBuf accumulates wrong source; PyodideConsole
118
+ * gets `print("hi")\\nexit()` as a single 'single'-mode compile →
119
+ * "multiple statements found while compiling a single statement"
120
+ * SyntaxError.
121
+ *
122
+ * Fix: chain handleInput invocations through inputQueue. Each WS
123
+ * frame appends to queue; a single drain task processes the queue
124
+ * sequentially. submitLine's await is properly ordered relative to
125
+ * the next frame's chars.
126
+ */
127
+ private inputQueue;
128
+ private draining;
129
+ constructor(adapter: ReplAdapter, terminal: WebSocketTerminal, shell?: any);
130
+ /** Run the session: prints banner, installs the input hook, returns
131
+ * a promise that resolves with the exit code when the session ends. */
132
+ run(): Promise<number>;
133
+ /**
134
+ * REPL-A1b: drain the input queue serially. Pulls data off
135
+ * inputQueue, runs handleInput, and reads any data that arrived
136
+ * during the await. Exits when queue is empty. Only ONE drainInput
137
+ * runs at a time (guarded by draining flag set in attachRepl
138
+ * callback).
139
+ */
140
+ private drainInput;
141
+ /** Process an input chunk. May contain multiple characters (paste
142
+ * or rapid typing) — we iterate char-by-char to handle each
143
+ * control byte individually. */
144
+ private handleInput;
145
+ /** Submit the current line buffer to the adapter. */
146
+ private submitLine;
147
+ /** Map up-arrow → previous history entry. */
148
+ private historyUp;
149
+ /** Map down-arrow → next (newer) history entry. */
150
+ private historyDown;
151
+ /** Erase the current displayed line and replace with `text`. */
152
+ private replaceCurrentLine;
153
+ /** Normalize LF → CRLF for terminal display. The WS terminal does not
154
+ * do this automatically; raw \n leaves the cursor at column-0 of a
155
+ * new row WITHOUT carriage return (xterm convention). */
156
+ private normalizeNewlines;
157
+ /** Close the session: detach input hook, free adapter, resolve. */
158
+ private endSession;
159
+ }
160
+ //# sourceMappingURL=repl-session.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repl-session.d.ts","sourceRoot":"","sources":["../../src/runtime/repl-session.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAElE;;;GAGG;AACH,MAAM,WAAW,WAAW;IAC1B;mCAC+B;IAC/B,MAAM,IAAI,MAAM,CAAC;IACjB;;;;;OAKG;IACH,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;IAC5C;6DACyD;IACzD,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,yCAAyC;IACzC,GAAG,EAAE,MAAM,CAAC;IACZ,8CAA8C;IAC9C,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,MAAM,cAAc,GACtB;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAClD;IAAE,IAAI,EAAE,YAAY,CAAA;CAAE,GACtB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GACpE;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAEtC;;;;;;;;;;;;GAYG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,OAAO,CAAc;IAC7B,OAAO,CAAC,QAAQ,CAAoB;IACpC,OAAO,CAAC,YAAY,CAA6B;IACjD;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACH,OAAO,CAAC,QAAQ,CAAa;IAE7B,8DAA8D;IAC9D,OAAO,CAAC,OAAO,CAAc;IAC7B,sDAAsD;IACtD,OAAO,CAAC,SAAS,CAAa;IAC9B,wEAAwE;IACxE,OAAO,CAAC,QAAQ,CAAgB;IAChC,8EAA8E;IAC9E,OAAO,CAAC,IAAI,CAAkB;IAC9B,mEAAmE;IACnE,OAAO,CAAC,OAAO,CAAgB;IAC/B,OAAO,CAAC,UAAU,CAAc;IAChC,mEAAmE;IACnE,OAAO,CAAC,aAAa,CAA6B;IAClD,OAAO,CAAC,aAAa,CAAgB;IACrC,4DAA4D;IAC5D,OAAO,CAAC,QAAQ,CAAa;IAC7B;;;;;;;;;;;;;;;OAeG;IACH,OAAO,CAAC,UAAU,CAAc;IAChC,OAAO,CAAC,QAAQ,CAAkB;gBAEtB,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,iBAAiB,EAAE,KAAK,CAAC,EAAE,GAAG;IAU1E;4EACwE;IAClE,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC;IAyD5B;;;;;;OAMG;YACW,UAAU;IASxB;;qCAEiC;YACnB,WAAW;IA6EzB,qDAAqD;YACvC,UAAU;IA8ExB,6CAA6C;IAC7C,OAAO,CAAC,SAAS;IAMjB,mDAAmD;IACnD,OAAO,CAAC,WAAW;IAUnB,gEAAgE;IAChE,OAAO,CAAC,kBAAkB;IAW1B;;8DAE0D;IAC1D,OAAO,CAAC,iBAAiB;IAIzB,mEAAmE;YACrD,UAAU;CAYzB"}
@@ -0,0 +1,393 @@
1
+ /**
2
+ * repl-session.ts — substrate for interactive REPL sessions.
3
+ *
4
+ * Per /workspace/.seal-internal/2026-05-11-repl-plan/plan.md §§2-4:
5
+ * Layer 1: long-lived runtime via repeated execute() into a cached
6
+ * child-facet isolate (state persists on globalThis).
7
+ * Layer 2: stdin routing via WebSocketTerminal.attachRepl().
8
+ * Layer 3: prompt detection per-runtime — Pyodide uses sentinel-
9
+ * controlled sys.ps1; Bun/Node/Ruby use per-runtime regex.
10
+ *
11
+ * This file owns the runtime-agnostic plumbing. Per-runtime adapters
12
+ * live in src/runtime/<name>-repl.ts and implement the ReplAdapter
13
+ * interface declared below.
14
+ */
15
+ /**
16
+ * Manages an interactive REPL session: stdin buffering with minimal
17
+ * readline UX (line-mode), output routing to the WS terminal, prompt
18
+ * rendering, and adapter dispatch.
19
+ *
20
+ * The shell creates a ReplSession when a runtime's `startRepl` hook
21
+ * fires; the session installs a `replCallback` on the WebSocketTerminal
22
+ * (via attachRepl()) and runs until the adapter signals 'exit' or the
23
+ * user presses Ctrl-D on an empty line.
24
+ *
25
+ * No setTimeout in the read loop — the session is driven entirely by
26
+ * keystroke arrival on the WS, with awaits gating the adapter's push().
27
+ */
28
+ export class ReplSession {
29
+ adapter;
30
+ terminal;
31
+ detachReplCb = null;
32
+ /**
33
+ * REPL-R7-1 (2026-05-12): optional reference to the lifo-sh Shell.
34
+ *
35
+ * Required when the REPL is launched from a multi-line WS frame
36
+ * (e.g. user pastes `python\nexit(7)`). lifo-sh's input handler
37
+ * (node_modules/@lifo-sh/core/dist/index-Djm2onjx.js:5855
38
+ * `handleInput`) splits the frame on \r\n and pushes lines AFTER
39
+ * the first into `shell.pasteQueue`, which is drained ONLY when
40
+ * the shell becomes idle (after executeLine returns). While our
41
+ * REPL is running, those pasteQueue lines sit there waiting and
42
+ * the REPL itself receives no input → user sees a hung `>>> `
43
+ * prompt that never responds.
44
+ *
45
+ * If `shell` is provided, ReplSession will, immediately after
46
+ * attaching its replCallback, drain shell.pasteQueue and feed the
47
+ * lines into the callback (suffixed with \r each — matches what
48
+ * the WS frame originally would have looked like). This makes the
49
+ * paste path work transparently for REPL launches.
50
+ *
51
+ * The shell reference is optional so existing adapters (bun, node,
52
+ * ruby) that haven't been updated keep working with their
53
+ * pre-fix behavior.
54
+ */
55
+ shellRef = null;
56
+ /** Current line buffer (chars typed since the last enter). */
57
+ lineBuf = '';
58
+ /** Cursor position within lineBuf (0 = beginning). */
59
+ cursorPos = 0;
60
+ /** Accumulated lines for a multi-line block (e.g. inside def/class). */
61
+ blockBuf = [];
62
+ /** True while the adapter is processing a push (block subsequent submits). */
63
+ busy = false;
64
+ /** Per-session history ring (most recent first). Capped at 100. */
65
+ history = [];
66
+ historyIdx = -1;
67
+ /** Resolves when close() has been called and the session ended. */
68
+ closedResolve = null;
69
+ closedPromise;
70
+ /** Exit code captured from adapter's last 'exit' return. */
71
+ exitCode = 0;
72
+ /**
73
+ * REPL-A1b (master plan §1 + user-evidence 2026-05-11): handleInput
74
+ * is invoked fire-and-forget per WS frame. Multiple WS frames arrive
75
+ * in quick succession during real REPL use (and during probes that
76
+ * send multiple lines without waiting for prompt). Without
77
+ * serialization, two concurrent handleInput coroutines both hit `\r`
78
+ * and call submitLine(); blockBuf accumulates wrong source; PyodideConsole
79
+ * gets `print("hi")\\nexit()` as a single 'single'-mode compile →
80
+ * "multiple statements found while compiling a single statement"
81
+ * SyntaxError.
82
+ *
83
+ * Fix: chain handleInput invocations through inputQueue. Each WS
84
+ * frame appends to queue; a single drain task processes the queue
85
+ * sequentially. submitLine's await is properly ordered relative to
86
+ * the next frame's chars.
87
+ */
88
+ inputQueue = '';
89
+ draining = false;
90
+ constructor(adapter, terminal, shell) {
91
+ this.adapter = adapter;
92
+ this.terminal = terminal;
93
+ // REPL-R7-1: optional shell reference for pasteQueue drain.
94
+ this.shellRef = shell ?? null;
95
+ this.closedPromise = new Promise((resolve) => {
96
+ this.closedResolve = resolve;
97
+ });
98
+ }
99
+ /** Run the session: prints banner, installs the input hook, returns
100
+ * a promise that resolves with the exit code when the session ends. */
101
+ async run() {
102
+ // 1. Print banner from adapter.
103
+ const banner = this.adapter.banner();
104
+ if (banner)
105
+ this.terminal.write(banner);
106
+ if (banner && !banner.endsWith('\n'))
107
+ this.terminal.write('\r\n');
108
+ // 2. Print primary prompt.
109
+ this.terminal.write(this.adapter.ps1);
110
+ // 3. Install the input handler.
111
+ // REPL-A1b: per-frame data appended to inputQueue; single drain
112
+ // task ensures serial processing across multiple WS frames.
113
+ this.detachReplCb = this.terminal.attachRepl((data) => {
114
+ this.inputQueue += data;
115
+ if (!this.draining) {
116
+ this.draining = true;
117
+ void this.drainInput();
118
+ }
119
+ });
120
+ // REPL-R7-1: drain any input that the shell received in the SAME
121
+ // WS frame as the REPL-launching command (`python\nexit(7)` style
122
+ // pastes). Without this drain, those lines sit forever in
123
+ // shell.pasteQueue while the REPL hangs at `>>> `.
124
+ //
125
+ // Each pasteQueue entry is a single line (no \r/\n). We re-frame
126
+ // each into the replCallback as `line + \r` so handleInput
127
+ // processes it through the normal Enter-triggered submitLine
128
+ // path — same behavior as if the user had typed and pressed
129
+ // Enter for each line.
130
+ //
131
+ // Best-effort: if shellRef is null or pasteQueue is missing,
132
+ // skip silently. Mutate the queue (shift) so the shell doesn't
133
+ // try to re-process the same items when it drains its own queue
134
+ // after this REPL exits.
135
+ if (this.shellRef && Array.isArray(this.shellRef.pasteQueue)) {
136
+ const pq = this.shellRef.pasteQueue;
137
+ if (pq.length > 0) {
138
+ const drained = pq.splice(0).filter(line => line !== undefined && line !== null);
139
+ if (drained.length > 0) {
140
+ // Feed via inputQueue + draining (same path as a real WS
141
+ // frame). Each line ends with \r so handleInput's
142
+ // submitLine fires per line.
143
+ this.inputQueue += drained.join('\r') + '\r';
144
+ if (!this.draining) {
145
+ this.draining = true;
146
+ void this.drainInput();
147
+ }
148
+ }
149
+ }
150
+ }
151
+ // 4. Wait until close() is called.
152
+ await this.closedPromise;
153
+ return this.exitCode;
154
+ }
155
+ /**
156
+ * REPL-A1b: drain the input queue serially. Pulls data off
157
+ * inputQueue, runs handleInput, and reads any data that arrived
158
+ * during the await. Exits when queue is empty. Only ONE drainInput
159
+ * runs at a time (guarded by draining flag set in attachRepl
160
+ * callback).
161
+ */
162
+ async drainInput() {
163
+ while (this.inputQueue.length > 0) {
164
+ const chunk = this.inputQueue;
165
+ this.inputQueue = '';
166
+ await this.handleInput(chunk);
167
+ }
168
+ this.draining = false;
169
+ }
170
+ /** Process an input chunk. May contain multiple characters (paste
171
+ * or rapid typing) — we iterate char-by-char to handle each
172
+ * control byte individually. */
173
+ async handleInput(data) {
174
+ for (let i = 0; i < data.length; i++) {
175
+ const ch = data[i];
176
+ // CTRL-D (0x04): on empty line, close cleanly.
177
+ if (ch === '\x04') {
178
+ if (this.lineBuf.length === 0 && this.blockBuf.length === 0 && !this.busy) {
179
+ this.terminal.write('\r\n');
180
+ await this.endSession(0);
181
+ return;
182
+ }
183
+ // Non-empty line: ignore (matches CPython REPL behavior).
184
+ continue;
185
+ }
186
+ // CTRL-C (0x03): cancel current line / block.
187
+ if (ch === '\x03') {
188
+ if (this.busy) {
189
+ // Mid-execution: we can't actually interrupt the wasm runtime
190
+ // in v1 (no SIGINT plumbing). Buffer the cancel for after.
191
+ // For now: just display ^C and let the runtime finish.
192
+ this.terminal.write('^C\r\n');
193
+ continue;
194
+ }
195
+ // Idle: discard current buffer, reset, fresh prompt.
196
+ this.lineBuf = '';
197
+ this.cursorPos = 0;
198
+ this.blockBuf = [];
199
+ this.terminal.write('\r\nKeyboardInterrupt\r\n' + this.adapter.ps1);
200
+ continue;
201
+ }
202
+ // Enter (\r or \n): submit the line.
203
+ if (ch === '\r' || ch === '\n') {
204
+ await this.submitLine();
205
+ continue;
206
+ }
207
+ // Backspace (0x7f) or DEL (\b 0x08): delete char before cursor.
208
+ if (ch === '\x7f' || ch === '\b') {
209
+ if (this.cursorPos > 0) {
210
+ this.lineBuf =
211
+ this.lineBuf.slice(0, this.cursorPos - 1) +
212
+ this.lineBuf.slice(this.cursorPos);
213
+ this.cursorPos--;
214
+ // Repaint: move cursor back, write rest, clear trailing, restore.
215
+ this.terminal.write('\b' + this.lineBuf.slice(this.cursorPos) + ' \b');
216
+ // Cursor sits one past the rewritten chars; pull it back to position.
217
+ const tail = this.lineBuf.slice(this.cursorPos).length;
218
+ for (let k = 0; k < tail; k++)
219
+ this.terminal.write('\b');
220
+ }
221
+ continue;
222
+ }
223
+ // ANSI escape sequence (arrow keys, etc.). Buffer the full sequence
224
+ // by reading ahead. v1: only handle up/down arrows for history;
225
+ // left/right are deferred (minimal readline = no in-line editing).
226
+ if (ch === '\x1b' && i + 2 < data.length && data[i + 1] === '[') {
227
+ const code = data[i + 2];
228
+ if (code === 'A') {
229
+ this.historyUp();
230
+ i += 2;
231
+ continue;
232
+ }
233
+ if (code === 'B') {
234
+ this.historyDown();
235
+ i += 2;
236
+ continue;
237
+ }
238
+ // C/D (left/right) and others: ignore.
239
+ i += 2;
240
+ continue;
241
+ }
242
+ // Printable char: append + echo.
243
+ if (ch >= ' ' && ch !== '\x7f') {
244
+ if (this.cursorPos === this.lineBuf.length) {
245
+ this.lineBuf += ch;
246
+ this.cursorPos++;
247
+ this.terminal.write(ch);
248
+ }
249
+ else {
250
+ // Mid-line insert (rare without left-arrow editing in v1).
251
+ this.lineBuf =
252
+ this.lineBuf.slice(0, this.cursorPos) + ch + this.lineBuf.slice(this.cursorPos);
253
+ this.cursorPos++;
254
+ this.terminal.write(ch);
255
+ }
256
+ }
257
+ }
258
+ }
259
+ /** Submit the current line buffer to the adapter. */
260
+ async submitLine() {
261
+ this.terminal.write('\r\n');
262
+ const line = this.lineBuf;
263
+ this.lineBuf = '';
264
+ this.cursorPos = 0;
265
+ // Record in history (skip blank and duplicate-of-most-recent).
266
+ if (line.length > 0 && this.history[0] !== line) {
267
+ this.history.unshift(line);
268
+ if (this.history.length > 100)
269
+ this.history.length = 100;
270
+ }
271
+ this.historyIdx = -1;
272
+ // Accumulate block lines.
273
+ this.blockBuf.push(line);
274
+ const fullSource = this.blockBuf.join('\n');
275
+ this.busy = true;
276
+ let result;
277
+ try {
278
+ result = await this.adapter.push(fullSource);
279
+ }
280
+ catch (e) {
281
+ result = {
282
+ kind: 'error',
283
+ stderr: `[repl] adapter threw: ${e?.message || e}\n`,
284
+ };
285
+ }
286
+ this.busy = false;
287
+ // REPL-A1 (master plan §1): emit stdout, stderr, and the next-prompt
288
+ // as three discrete WS frames in deterministic order. Without
289
+ // flushNow() between them, the 5 ms coalescer in WebSocketTerminal
290
+ // joins them into one `{type:'output'}` payload — probes asserting
291
+ // frame ordering see false-RED, and xterm renders correctly only
292
+ // because string-order is preserved. flushNow() guarantees both
293
+ // are true: bytes-in-order AND frame-boundary-after-each-stream.
294
+ if (result.kind === 'output') {
295
+ if (result.stdout) {
296
+ this.terminal.write(this.normalizeNewlines(result.stdout));
297
+ this.terminal.flushNow();
298
+ }
299
+ if (result.stderr) {
300
+ this.terminal.write(this.normalizeNewlines(result.stderr));
301
+ this.terminal.flushNow();
302
+ }
303
+ this.blockBuf = [];
304
+ this.terminal.write(this.adapter.ps1);
305
+ this.terminal.flushNow();
306
+ return;
307
+ }
308
+ if (result.kind === 'incomplete') {
309
+ this.terminal.write(this.adapter.ps2);
310
+ this.terminal.flushNow();
311
+ return;
312
+ }
313
+ if (result.kind === 'error') {
314
+ if (result.stderr) {
315
+ this.terminal.write(this.normalizeNewlines(result.stderr));
316
+ this.terminal.flushNow();
317
+ }
318
+ this.blockBuf = [];
319
+ this.terminal.write(this.adapter.ps1);
320
+ this.terminal.flushNow();
321
+ return;
322
+ }
323
+ if (result.kind === 'exit') {
324
+ if (result.stdout) {
325
+ this.terminal.write(this.normalizeNewlines(result.stdout));
326
+ this.terminal.flushNow();
327
+ }
328
+ if (result.stderr) {
329
+ this.terminal.write(this.normalizeNewlines(result.stderr));
330
+ this.terminal.flushNow();
331
+ }
332
+ await this.endSession(result.exitCode);
333
+ return;
334
+ }
335
+ }
336
+ /** Map up-arrow → previous history entry. */
337
+ historyUp() {
338
+ if (this.history.length === 0)
339
+ return;
340
+ if (this.historyIdx < this.history.length - 1)
341
+ this.historyIdx++;
342
+ this.replaceCurrentLine(this.history[this.historyIdx]);
343
+ }
344
+ /** Map down-arrow → next (newer) history entry. */
345
+ historyDown() {
346
+ if (this.historyIdx <= 0) {
347
+ this.historyIdx = -1;
348
+ this.replaceCurrentLine('');
349
+ return;
350
+ }
351
+ this.historyIdx--;
352
+ this.replaceCurrentLine(this.history[this.historyIdx]);
353
+ }
354
+ /** Erase the current displayed line and replace with `text`. */
355
+ replaceCurrentLine(text) {
356
+ // Erase current chars: backspace + space + backspace per char.
357
+ const oldLen = this.lineBuf.length;
358
+ for (let i = 0; i < this.cursorPos; i++)
359
+ this.terminal.write('\b');
360
+ for (let i = 0; i < oldLen; i++)
361
+ this.terminal.write(' ');
362
+ for (let i = 0; i < oldLen; i++)
363
+ this.terminal.write('\b');
364
+ this.lineBuf = text;
365
+ this.cursorPos = text.length;
366
+ this.terminal.write(text);
367
+ }
368
+ /** Normalize LF → CRLF for terminal display. The WS terminal does not
369
+ * do this automatically; raw \n leaves the cursor at column-0 of a
370
+ * new row WITHOUT carriage return (xterm convention). */
371
+ normalizeNewlines(s) {
372
+ return s.replace(/\r?\n/g, '\r\n');
373
+ }
374
+ /** Close the session: detach input hook, free adapter, resolve. */
375
+ async endSession(code) {
376
+ this.exitCode = code;
377
+ if (this.detachReplCb) {
378
+ try {
379
+ this.detachReplCb();
380
+ }
381
+ catch { /* fail-soft */ }
382
+ this.detachReplCb = null;
383
+ }
384
+ try {
385
+ await this.adapter.close();
386
+ }
387
+ catch { /* fail-soft */ }
388
+ if (this.closedResolve) {
389
+ this.closedResolve();
390
+ this.closedResolve = null;
391
+ }
392
+ }
393
+ }
@@ -0,0 +1,52 @@
1
+ /**
2
+ * require-resolver.ts — Server-side dependency graph resolver for Nimbus.
3
+ *
4
+ * Runs on the supervisor (which has synchronous VFS access) to trace
5
+ * all require() calls and build a complete file bundle reachable from
6
+ * the entry point. The output is consumed by `facet-manager.ts`'s
7
+ * `buildPrefetchBundle` (W2.6a) to ship ONLY the reachable set into
8
+ * the dynamic-worker module (rather than every file in node_modules
9
+ * up to the legacy cap).
10
+ *
11
+ * Algorithm:
12
+ * 1. Parse `require('xxx')` / `require("xxx")` / ``require(`xxx`)``
13
+ * and `require.resolve('xxx')` calls from entry code via regex.
14
+ * 2. Resolve each via the SHARED `resolvePackageEntry` helper from
15
+ * src/_shared/exports-resolver.ts — same impl that node-shims
16
+ * and npm-resolver use, so prefetch and runtime always agree on
17
+ * which file `require('xyz')` means (W2.6a D6: no dual impls).
18
+ * 3. Read the resolved file, recursively parse ITS requires.
19
+ * 4. Return Record<string, string> of path → content.
20
+ *
21
+ * Limits (sub-agent §Q1 caveats — extended regex still misses dynamic
22
+ * requires like `require(variable)` and ESM `import` statements; greedy
23
+ * oversampling in facet-manager.ts:buildPrefetchBundle compensates).
24
+ *
25
+ * History: this file was ARC-A-P1 quarantined after W2 because the
26
+ * legacy `buildVfsBundle` walked every file in node_modules. W2.6a
27
+ * de-quarantines it as the primary content-bundle source.
28
+ */
29
+ import type { SqliteVFS } from '../vfs/sqlite-vfs.js';
30
+ /**
31
+ * Result of a prefetch walk.
32
+ * - bundle: path → content for every reachable file.
33
+ * - visited: set of pkgDirs (e.g. 'home/user/app/node_modules/fastify')
34
+ * encountered during the walk. Caller uses this to drive
35
+ * greedy oversampling — every visited package gets its
36
+ * package.json + main file forced into the bundle, even
37
+ * if the dynamic-require they're behind wasn't caught by
38
+ * the regex.
39
+ * - truncated: true if MAX_FILES or MAX_BYTES fired.
40
+ */
41
+ export interface PrefetchResult {
42
+ bundle: Record<string, string>;
43
+ visitedPkgDirs: Set<string>;
44
+ truncated: boolean;
45
+ }
46
+ /**
47
+ * Resolve the complete dependency graph starting from entry code.
48
+ * Returns Record<path, content> + the set of package directories
49
+ * referenced (for greedy oversampling).
50
+ */
51
+ export declare function prefetchForRequire(vfs: SqliteVFS, entryCode: string, cwd: string, entryFile?: string): PrefetchResult;
52
+ //# sourceMappingURL=require-resolver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"require-resolver.d.ts","sourceRoot":"","sources":["../../src/runtime/require-resolver.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAsbtD;;;;;;;;;;GAUG;AACH,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,cAAc,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC5B,SAAS,EAAE,OAAO,CAAC;CACpB;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,SAAS,EACd,SAAS,EAAE,MAAM,EACjB,GAAG,EAAE,MAAM,EACX,SAAS,CAAC,EAAE,MAAM,GACjB,cAAc,CAoOhB"}