@nimbus-sh/worker 0.1.4 → 0.1.6

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 (141) hide show
  1. package/README.md +37 -0
  2. package/dist/_shared/crypto.d.ts +15 -0
  3. package/dist/_shared/crypto.d.ts.map +1 -0
  4. package/dist/_shared/crypto.js +122 -0
  5. package/dist/facets/manager.d.ts +24 -0
  6. package/dist/facets/manager.d.ts.map +1 -1
  7. package/dist/facets/manager.js +279 -70
  8. package/dist/facets/process.d.ts +11 -2
  9. package/dist/facets/process.d.ts.map +1 -1
  10. package/dist/facets/process.js +187 -21
  11. package/dist/facets/vite-dev-server.d.ts +2 -0
  12. package/dist/facets/vite-dev-server.d.ts.map +1 -1
  13. package/dist/facets/vite-dev-server.js +39 -12
  14. package/dist/index.d.ts +2 -0
  15. package/dist/index.d.ts.map +1 -1
  16. package/dist/index.js +2 -0
  17. package/dist/loaders/child-process/spawn-facet.d.ts +1 -3
  18. package/dist/loaders/child-process/spawn-facet.d.ts.map +1 -1
  19. package/dist/loaders/child-process/spawn-facet.js +1 -12
  20. package/dist/loaders/child-process/spawn-pool.d.ts +1 -1
  21. package/dist/loaders/child-process/spawn-pool.d.ts.map +1 -1
  22. package/dist/loaders/child-process/spawn-pool.js +1 -6
  23. package/dist/loaders/loader-pool.d.ts +7 -0
  24. package/dist/loaders/loader-pool.d.ts.map +1 -1
  25. package/dist/loaders/loader-pool.js +3 -1
  26. package/dist/npm/installer.d.ts.map +1 -1
  27. package/dist/npm/installer.js +47 -27
  28. package/dist/npm/pre-bundle-facet.d.ts.map +1 -1
  29. package/dist/npm/pre-bundle-facet.js +2 -1
  30. package/dist/npm/resolve-one-facet.d.ts.map +1 -1
  31. package/dist/npm/resolve-one-facet.js +41 -13
  32. package/dist/npm/resolver.d.ts.map +1 -1
  33. package/dist/npm/resolver.js +70 -35
  34. package/dist/router/index.d.ts.map +1 -1
  35. package/dist/router/index.js +45 -21
  36. package/dist/router/remote-api.d.ts.map +1 -1
  37. package/dist/router/remote-api.js +29 -8
  38. package/dist/runtime/barrel-synthesizer.d.ts +7 -0
  39. package/dist/runtime/barrel-synthesizer.d.ts.map +1 -1
  40. package/dist/runtime/barrel-synthesizer.js +11 -0
  41. package/dist/runtime/clang-runner.d.ts +2 -2
  42. package/dist/runtime/clang-runner.d.ts.map +1 -1
  43. package/dist/runtime/clang-runner.js +64 -47
  44. package/dist/runtime/esbuild-service.d.ts +12 -5
  45. package/dist/runtime/esbuild-service.d.ts.map +1 -1
  46. package/dist/runtime/esbuild-service.js +28 -14
  47. package/dist/runtime/node-runner.d.ts +2 -0
  48. package/dist/runtime/node-runner.d.ts.map +1 -1
  49. package/dist/runtime/node-shims.d.ts +4 -2
  50. package/dist/runtime/node-shims.d.ts.map +1 -1
  51. package/dist/runtime/node-shims.js +404 -55
  52. package/dist/runtime/os-contracts.d.ts +128 -0
  53. package/dist/runtime/os-contracts.d.ts.map +1 -0
  54. package/dist/runtime/os-contracts.js +1 -0
  55. package/dist/runtime/package-manager.d.ts +31 -0
  56. package/dist/runtime/package-manager.d.ts.map +1 -1
  57. package/dist/runtime/package-manager.js +162 -15
  58. package/dist/runtime/port-registry.d.ts +5 -0
  59. package/dist/runtime/port-registry.d.ts.map +1 -1
  60. package/dist/runtime/port-registry.js +22 -1
  61. package/dist/runtime/pyodide-runtime-assets.d.ts +19 -0
  62. package/dist/runtime/pyodide-runtime-assets.d.ts.map +1 -0
  63. package/dist/runtime/pyodide-runtime-assets.js +44 -0
  64. package/dist/runtime/python-repl.d.ts +3 -0
  65. package/dist/runtime/python-repl.d.ts.map +1 -1
  66. package/dist/runtime/python-repl.js +18 -32
  67. package/dist/runtime/python-runner.d.ts +8 -9
  68. package/dist/runtime/python-runner.d.ts.map +1 -1
  69. package/dist/runtime/python-runner.js +958 -118
  70. package/dist/runtime/python-socket-shim.d.ts +11 -0
  71. package/dist/runtime/python-socket-shim.d.ts.map +1 -0
  72. package/dist/runtime/python-socket-shim.js +526 -0
  73. package/dist/runtime/require-resolver.d.ts.map +1 -1
  74. package/dist/runtime/require-resolver.js +2 -11
  75. package/dist/runtime/ruby-gems.d.ts +25 -0
  76. package/dist/runtime/ruby-gems.d.ts.map +1 -0
  77. package/dist/runtime/ruby-gems.js +582 -0
  78. package/dist/runtime/ruby-runner.d.ts +2 -4
  79. package/dist/runtime/ruby-runner.d.ts.map +1 -1
  80. package/dist/runtime/ruby-runner.js +335 -34
  81. package/dist/runtime/runtime-catalog.d.ts +16 -4
  82. package/dist/runtime/runtime-catalog.d.ts.map +1 -1
  83. package/dist/runtime/runtime-catalog.js +21 -10
  84. package/dist/runtime/runtime-registry.d.ts +3 -0
  85. package/dist/runtime/runtime-registry.d.ts.map +1 -1
  86. package/dist/runtime/runtime-registry.js +4 -0
  87. package/dist/runtime/sqlite-runtime-fs-bridge.d.ts +43 -0
  88. package/dist/runtime/sqlite-runtime-fs-bridge.d.ts.map +1 -0
  89. package/dist/runtime/sqlite-runtime-fs-bridge.js +224 -0
  90. package/dist/runtime/static-server.d.ts +3 -0
  91. package/dist/runtime/static-server.d.ts.map +1 -0
  92. package/dist/runtime/static-server.js +121 -0
  93. package/dist/runtime/vfs-snapshot.d.ts +57 -0
  94. package/dist/runtime/vfs-snapshot.d.ts.map +1 -0
  95. package/dist/runtime/vfs-snapshot.js +141 -0
  96. package/dist/runtime/virtual-socket-kernel.d.ts +16 -0
  97. package/dist/runtime/virtual-socket-kernel.d.ts.map +1 -0
  98. package/dist/runtime/virtual-socket-kernel.js +360 -0
  99. package/dist/runtime/wasi-instance.d.ts +6 -3
  100. package/dist/runtime/wasi-instance.d.ts.map +1 -1
  101. package/dist/runtime/wasm-runner.d.ts +1 -25
  102. package/dist/runtime/wasm-runner.d.ts.map +1 -1
  103. package/dist/runtime/wasm-runner.js +1 -160
  104. package/dist/session/agent.d.ts +43 -0
  105. package/dist/session/agent.d.ts.map +1 -0
  106. package/dist/session/agent.js +1252 -0
  107. package/dist/session/init.d.ts.map +1 -1
  108. package/dist/session/init.js +64 -19
  109. package/dist/session/nimbus-session.d.ts +14 -2
  110. package/dist/session/nimbus-session.d.ts.map +1 -1
  111. package/dist/session/nimbus-session.js +104 -30
  112. package/dist/session/programmatic.d.ts +10 -0
  113. package/dist/session/programmatic.d.ts.map +1 -1
  114. package/dist/session/programmatic.js +121 -0
  115. package/dist/session/routes.d.ts.map +1 -1
  116. package/dist/session/routes.js +19 -1
  117. package/dist/session/rpc.d.ts +11 -0
  118. package/dist/session/rpc.d.ts.map +1 -1
  119. package/dist/session/rpc.js +56 -43
  120. package/dist/session/supervisor-rpc.d.ts +15 -0
  121. package/dist/session/supervisor-rpc.d.ts.map +1 -1
  122. package/dist/session/supervisor-rpc.js +32 -0
  123. package/dist/session/ws.d.ts +4 -3
  124. package/dist/session/ws.d.ts.map +1 -1
  125. package/dist/session/ws.js +11 -1
  126. package/dist/shell/unix-commands.d.ts.map +1 -1
  127. package/dist/shell/unix-commands.js +52 -51
  128. package/dist/vfs/path.d.ts +8 -4
  129. package/dist/vfs/path.d.ts.map +1 -1
  130. package/dist/vfs/path.js +16 -4
  131. package/dist/vfs/sqlite-vfs.d.ts +2 -0
  132. package/dist/vfs/sqlite-vfs.d.ts.map +1 -1
  133. package/dist/vfs/sqlite-vfs.js +11 -0
  134. package/dist/vfs/symlink-registry.d.ts +7 -1
  135. package/dist/vfs/symlink-registry.d.ts.map +1 -1
  136. package/dist/vfs/symlink-registry.js +16 -11
  137. package/package.json +4 -1
  138. package/public/index.html +240 -0
  139. package/public/s/index.html +1316 -128
  140. package/runtime-contracts/pyodide-workerd-adapter.json +18 -0
  141. package/scripts/bundle-runtime.mjs +99 -24
@@ -1 +1 @@
1
- {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/session/init.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AA8DH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAErD;;;;;;;;GAQG;AACH,KAAK,QAAQ,GAAG,eAAe,GAAG;IAAE,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC;IAAC,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAA;CAAE,CAAC;AAG3E,wBAAgB,WAAW,CAAC,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,SAAS,GAAG,IAAI,CA+7G/D"}
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/session/init.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AA+DH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAErD;;;;;;;;GAQG;AACH,KAAK,QAAQ,GAAG,eAAe,GAAG;IAAE,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC;IAAC,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAA;CAAE,CAAC;AAG3E,wBAAgB,WAAW,CAAC,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,SAAS,GAAG,IAAI,CAs+G/D"}
@@ -42,7 +42,7 @@ import { filterWranglerFlags, detectBundlerBin, checkNodeModulesGuard, detectUns
42
42
  import { HeredocHandler, LineEditorExtender, FdRedirectNormalizer, SubshellNormalizer, BraceExpander, DollarVarShim, BacktickNormalizer } from '../shell/features.js';
43
43
  import { registerUnixCommands } from '../shell/unix-commands.js';
44
44
  import { registerGitCommands } from '../git/commands.js';
45
- import { makeNimbusVerbHandler, rehydrateInstalledRuntimes, registerRunnerFactory, } from '../runtime/package-manager.js';
45
+ import { makeNimbusVerbHandler, createRuntimeCommandHintResolver, rehydrateInstalledRuntimes, registerRunnerFactory, } from '../runtime/package-manager.js';
46
46
  import { makeClangRunnerFactory } from '../runtime/clang-runner.js';
47
47
  import { makePythonRunnerFactory } from '../runtime/python-runner.js';
48
48
  import { makeRubyRunnerFactory } from '../runtime/ruby-runner.js';
@@ -470,6 +470,7 @@ export function initSession(self, ws) {
470
470
  vfs: sqliteFs,
471
471
  terminal: self.terminal,
472
472
  installRoot,
473
+ manifest,
473
474
  // REPL-R7-1: thread the shell so ReplSession can drain
474
475
  // shell.pasteQueue on attach (multi-line WS frames like
475
476
  // `python\nexit(7)` would otherwise drop the tail input).
@@ -531,6 +532,36 @@ export function initSession(self, ws) {
531
532
  vfs: sqliteFs,
532
533
  registry: pkgRegistry,
533
534
  getHome: nimbusGetHome,
535
+ warmRuntime: async (target, ctx) => {
536
+ if (target.name !== 'python')
537
+ return;
538
+ ctx.stdout.write('[python] warming runtime...\n');
539
+ const stdout = { write(_s) { } };
540
+ const stderrText = [];
541
+ const stderr = { write: (s) => { stderrText.push(String(s)); } };
542
+ const py = await registry.resolve('python');
543
+ if (py) {
544
+ const code = await py({
545
+ ...ctx,
546
+ args: ['-c', 'pass'],
547
+ vfs: ctx.vfs ?? sqliteFs,
548
+ signal: new AbortController().signal,
549
+ stdout,
550
+ stderr,
551
+ });
552
+ if (typeof code === 'number' && code !== 0) {
553
+ throw new Error(stderrText.join('').trim() || `python warm-up exited ${code}`);
554
+ }
555
+ }
556
+ const { warmPythonRepl } = await import('../runtime/python-repl.js');
557
+ await warmPythonRepl({
558
+ facetMgr,
559
+ vfs: sqliteFs,
560
+ installRoot: target.root,
561
+ manifest: target.manifest,
562
+ });
563
+ ctx.stdout.write('[python] ready\n');
564
+ },
534
565
  }));
535
566
  // Rehydration runs here even though the shell hasn't been built
536
567
  // yet — that's fine: it accesses VFS + registry which are both
@@ -1241,11 +1272,22 @@ export function initSession(self, ws) {
1241
1272
  .replace(/\/+/g, '/') // collapse //
1242
1273
  .replace(/^\/+/, '') // leading /
1243
1274
  .replace(/\/+$/, ''); // trailing /
1275
+ // Argv expansion: package.json scripts commonly write
1276
+ // `--port ${PORT:-3000}`. Resolve it once and feed both Vite
1277
+ // backends so `/api/stats`, `/preview/`, and port tabs agree.
1278
+ const expandedArgs = expandArgvShellDefaults(args, ctx.env || {});
1279
+ const vitePortDefault = 5173;
1280
+ const resolvedPort = resolveLongRunningPort({
1281
+ argv: expandedArgs,
1282
+ env: ctx.env,
1283
+ configPort: viteConfig.port,
1284
+ fallback: vitePortDefault,
1285
+ });
1244
1286
  // ── Preflight: node_modules guard ────────────────────────────────────
1245
1287
  // Direct `vite` invocation requires installed deps. Bail loudly BEFORE
1246
1288
  // spawning a dev server that would just serve broken modules and
1247
1289
  // confuse the user. --force / --no-install-check bypasses the check.
1248
- const bypassInstallCheck = args.includes('--force') || args.includes('--no-install-check');
1290
+ const bypassInstallCheck = expandedArgs.includes('--force') || expandedArgs.includes('--no-install-check');
1249
1291
  if (!bypassInstallCheck) {
1250
1292
  const guard = checkNodeModulesGuard(self.sqliteFs, vfsRoot);
1251
1293
  if (guard.missing) {
@@ -1280,9 +1322,7 @@ export function initSession(self, ws) {
1280
1322
  if (useReal) {
1281
1323
  if (self.cirrusReal?.isRunning)
1282
1324
  self.cirrusReal.stop(self.ctx);
1283
- // 5173 is Vite's default; under workerd it's a routing key, not
1284
- // a real socket, so we reuse the same number per session.
1285
- const vitePort = viteConfig.port || 5173;
1325
+ const vitePort = resolvedPort;
1286
1326
  const previewBasePath = self.viteBasePath;
1287
1327
  // Acquire the heavy-alloc gate so the fire-and-forget pre-bundle
1288
1328
  // phase (still in flight on a fresh `npm install && npm run dev`)
@@ -1487,18 +1527,6 @@ export function initSession(self, ws) {
1487
1527
  // tears it down via the same primitives that handle every other
1488
1528
  // long-running facet.
1489
1529
  //
1490
- // Argv expansion: package.json scripts commonly write
1491
- // `--port ${PORT:-3000}`. Nimbus's shell doesn't expand
1492
- // parameter substitution, so we do it here against ctx.env right
1493
- // before argv parsing — see runtime/long-running-handle.ts.
1494
- const expandedArgs = expandArgvShellDefaults(args, ctx.env || {});
1495
- const vitePortDefault = 5173;
1496
- const resolvedPort = resolveLongRunningPort({
1497
- argv: expandedArgs,
1498
- env: ctx.env,
1499
- configPort: viteConfig.port,
1500
- fallback: vitePortDefault,
1501
- });
1502
1530
  // Allocate PID FIRST so we can plumb it into ViteDevServer's
1503
1531
  // process-log wiring at construction time. The PID stays valid
1504
1532
  // for the life of this dev-server instance; subsequent log lines
@@ -2466,6 +2494,7 @@ export function initSession(self, ws) {
2466
2494
  return false;
2467
2495
  }
2468
2496
  const upstreamResolve = registry.resolve.bind(registry);
2497
+ const runtimeCommandHint = createRuntimeCommandHintResolver(self.env);
2469
2498
  registry.resolve = async function nimbusBinFallbackResolve(name) {
2470
2499
  const upstream = await upstreamResolve(name);
2471
2500
  if (upstream)
@@ -2483,8 +2512,24 @@ export function initSession(self, ws) {
2483
2512
  // built yet (very early init), fall back to /home/user.
2484
2513
  const cwd = (self.shell?.cwd || '/home/user').replace(/^\/+/, '');
2485
2514
  const binShimPath = cwd + '/node_modules/.bin/' + name;
2486
- if (!sqliteFs.exists(binShimPath))
2487
- return undefined;
2515
+ if (!sqliteFs.exists(binShimPath)) {
2516
+ let hint = null;
2517
+ try {
2518
+ hint = await runtimeCommandHint(name);
2519
+ }
2520
+ catch {
2521
+ hint = null;
2522
+ }
2523
+ if (!hint)
2524
+ return undefined;
2525
+ const hintHandler = async (ctx) => {
2526
+ ctx.stderr.write(`${name}: command not found\n`);
2527
+ ctx.stderr.write(`hint: install it with: nimbus install ${hint.installSpec}\n`);
2528
+ return 127;
2529
+ };
2530
+ hintHandler.__nimbusRuntimeInstallHint = true;
2531
+ return hintHandler;
2532
+ }
2488
2533
  // Synthesised handler. Each resolve call recomputes (cwd can
2489
2534
  // change between invocations); we never cache under `name`.
2490
2535
  return async (ctx) => {
@@ -41,6 +41,7 @@ export { detectCloudflareWorkersProject } from '../runtime/project-detect.js';
41
41
  * the right boundary. See user-debug-transcript.txt lines 1-5.
42
42
  */
43
43
  export declare function renderMotdBanner(version: string): string;
44
+ export declare function renderWelcomeMarkdown(version: string): string;
44
45
  export declare class NimbusSession extends CloudflareDurableObject {
45
46
  sqliteFs: SqliteVFS | null;
46
47
  kernel: Kernel | null;
@@ -77,8 +78,8 @@ export declare class NimbusSession extends CloudflareDurableObject {
77
78
  /** file-tree-watch (2026-05-15): per-WS fs-watch subscriptions.
78
79
  * Lazily created on first fs-watch-subscribe by src/session/fs-watch.ts;
79
80
  * cleaned up unconditionally in src/session/ws.ts on wsClose / wsError.
80
- * Optional (undefined) until first subscribe so memory stays at 0
81
- * for terminal-only sessions. */
81
+ * Optional (undefined) until first subscribe so sessions that never
82
+ * open the file tree carry no watch state. */
82
83
  _fsWatchSubs?: Map<WebSocket, import('./fs-watch.js').FsWatchSub[]>;
83
84
  nimbusWrangler: NimbusWrangler | null;
84
85
  npmInstaller: NpmInstaller | null;
@@ -216,6 +217,15 @@ export declare class NimbusSession extends CloudflareDurableObject {
216
217
  }[]>;
217
218
  _rpcExists(path: string): Promise<boolean>;
218
219
  _rpcMkdir(path: string): Promise<void>;
220
+ _rpcRmdir(path: string): Promise<void>;
221
+ _rpcRename(from: string, to: string): Promise<void>;
222
+ _rpcReadlink(path: string): Promise<string | null>;
223
+ _rpcSymlink(target: string, path: string): Promise<void>;
224
+ _rpcFsRevision(path?: string): Promise<number>;
225
+ _rpcFsOpen(path: string, flags: any): Promise<any>;
226
+ _rpcFsRead(handleId: number, offset: number | null, length: number): Promise<Uint8Array>;
227
+ _rpcFsWrite(handleId: number, offset: number | null, bytes: Uint8Array | ArrayBuffer | number[]): Promise<number>;
228
+ _rpcFsClose(handleId: number): Promise<void>;
219
229
  _rpcHmrRelay(clientId: string | null, msg: string): Promise<void>;
220
230
  _rpcUnlink(path: string): Promise<void>;
221
231
  _rpcWriteBatch(payload: any): Promise<{
@@ -262,6 +272,7 @@ export declare class NimbusSession extends CloudflareDurableObject {
262
272
  ok: boolean;
263
273
  }>;
264
274
  _rpcCpStdinEnd(childPid: number): Promise<void>;
275
+ _rpcCpReadStdin(childPid: number, waitMs: number): Promise<any>;
265
276
  _rpcCpReadOutput(childPid: number, fd: 1 | 2, sinceSeq: number, waitMs: number): Promise<any>;
266
277
  _rpcCpDrainOutput(childPid: number): Promise<any>;
267
278
  _rpcCpKill(childPid: number, signal: string): Promise<boolean>;
@@ -327,6 +338,7 @@ export declare class NimbusSession extends CloudflareDurableObject {
327
338
  _rpcDeleteFile(path: string, options?: {
328
339
  recursive?: boolean;
329
340
  }): Promise<void>;
341
+ _rpcDestroy(options?: _programmatic.ProgrammaticDestroyOptions): Promise<_programmatic.ProgrammaticDestroyResult>;
330
342
  vfsReadFile(path: string): ArrayBuffer | null;
331
343
  vfsReadFileString(path: string): string | null;
332
344
  vfsStat(path: string): {
@@ -1 +1 @@
1
- {"version":3,"file":"nimbus-session.d.ts","sourceRoot":"","sources":["../../src/session/nimbus-session.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"nimbus-session.d.ts","sourceRoot":"","sources":["../../src/session/nimbus-session.ts"],"names":[],"mappings":"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"}
@@ -70,6 +70,18 @@ import * as _diag from './diag.js';
70
70
  // the supervisor-resident cache + the SUPERVISOR.getEsbuildWasm RPC.)
71
71
  // Helpers needed by this class file's own logic (not just re-export).
72
72
  import { _classifyCommand, } from './helpers.js';
73
+ function normalizeCpCommandName(name) {
74
+ const text = String(name || '').trim();
75
+ if (!text.startsWith('/'))
76
+ return text;
77
+ const slash = text.lastIndexOf('/');
78
+ const base = slash >= 0 ? text.slice(slash + 1) : text;
79
+ const dir = text.slice(0, Math.max(0, text.length - base.length));
80
+ if (dir === '/bin/' || dir === '/usr/bin/' || dir === '/usr/local/bin/') {
81
+ return base;
82
+ }
83
+ return text;
84
+ }
73
85
  // Re-exports preserved for callers that import from nimbus-session
74
86
  // directly (the historical entry point). Each one has a dedicated
75
87
  // import site elsewhere in the codebase.
@@ -119,6 +131,53 @@ export function renderMotdBanner(version) {
119
131
  bot +
120
132
  '\x1b[0m\r\n');
121
133
  }
134
+ export function renderWelcomeMarkdown(version) {
135
+ return `# Welcome to Nimbus v${version}
136
+
137
+ Cloud-native development environment on Cloudflare Workers.
138
+
139
+ ## Start Here
140
+
141
+ | Task | Command |
142
+ | --- | --- |
143
+ | Run JavaScript | \`node hello.js\` |
144
+ | Install npm packages | \`npm install <pkg>\` |
145
+ | Start the starter app | \`cd app && npm install && npm run dev\` |
146
+ | Run a Cloudflare Worker locally | \`nimbus-wrangler dev\` |
147
+
148
+ ## Install More Runtimes
149
+
150
+ Nimbus installs language runtimes on demand:
151
+
152
+ \`\`\`bash
153
+ nimbus install clang # then: clang hello.c -o hello && ./hello
154
+ nimbus install python # then: python -c 'print("hi")'
155
+ nimbus install ruby # then: ruby -e 'puts "hi"'
156
+ \`\`\`
157
+
158
+ \`python3\`, \`ruby3\`, and \`wasm-ld\` are command aliases. If an
159
+ installable command is missing, Nimbus prints the matching install command.
160
+
161
+ ## Interactive REPLs
162
+
163
+ | Runtime | REPL |
164
+ | --- | --- |
165
+ | Python | \`python\` or \`python3\` - Pyodide CPython 3.13 |
166
+ | Ruby | \`ruby\` or \`ruby3\` - ruby.wasm 3.3 |
167
+ | Node | \`node\` - workerd Node compatibility runtime |
168
+
169
+ ## System Commands
170
+
171
+ \`\`\`bash
172
+ nimbus install --list # show installed runtimes
173
+ nimbus install --available # show catalog
174
+ df # filesystem + cache stats
175
+ \`\`\`
176
+
177
+ The editor opens this file in Markdown preview mode by default. Use
178
+ \`Ctrl+P\` to open files and \`Ctrl+S\` to save edits.
179
+ `;
180
+ }
122
181
  export class NimbusSession extends CloudflareDurableObject {
123
182
  // this.ctx and this.env are provided by the DurableObject base class
124
183
  sqliteFs = null;
@@ -156,8 +215,8 @@ export class NimbusSession extends CloudflareDurableObject {
156
215
  /** file-tree-watch (2026-05-15): per-WS fs-watch subscriptions.
157
216
  * Lazily created on first fs-watch-subscribe by src/session/fs-watch.ts;
158
217
  * cleaned up unconditionally in src/session/ws.ts on wsClose / wsError.
159
- * Optional (undefined) until first subscribe so memory stays at 0
160
- * for terminal-only sessions. */
218
+ * Optional (undefined) until first subscribe so sessions that never
219
+ * open the file tree carry no watch state. */
161
220
  _fsWatchSubs;
162
221
  nimbusWrangler = null;
163
222
  npmInstaller = null;
@@ -413,6 +472,19 @@ export class NimbusSession extends CloudflareDurableObject {
413
472
  async _rpcReaddir(path) { return _rpc._rpcReaddir(this, path); }
414
473
  async _rpcExists(path) { return _rpc._rpcExists(this, path); }
415
474
  async _rpcMkdir(path) { return _rpc._rpcMkdir(this, path); }
475
+ async _rpcRmdir(path) { return _rpc._rpcRmdir(this, path); }
476
+ async _rpcRename(from, to) { return _rpc._rpcRename(this, from, to); }
477
+ async _rpcReadlink(path) { return _rpc._rpcReadlink(this, path); }
478
+ async _rpcSymlink(target, path) { return _rpc._rpcSymlink(this, target, path); }
479
+ async _rpcFsRevision(path) { return _rpc._rpcFsRevision(this, path); }
480
+ async _rpcFsOpen(path, flags) { return _rpc._rpcFsOpen(this, path, flags); }
481
+ async _rpcFsRead(handleId, offset, length) {
482
+ return _rpc._rpcFsRead(this, handleId, offset, length);
483
+ }
484
+ async _rpcFsWrite(handleId, offset, bytes) {
485
+ return _rpc._rpcFsWrite(this, handleId, offset, bytes);
486
+ }
487
+ async _rpcFsClose(handleId) { return _rpc._rpcFsClose(this, handleId); }
416
488
  async _rpcHmrRelay(clientId, msg) { return _rpc._rpcHmrRelay(this, clientId, msg); }
417
489
  async _rpcUnlink(path) { return _rpc._rpcUnlink(this, path); }
418
490
  async _rpcWriteBatch(payload) { return _rpc._rpcWriteBatch(this, payload); }
@@ -440,6 +512,7 @@ export class NimbusSession extends CloudflareDurableObject {
440
512
  async _rpcCpSpawn(req) { return _rpc._rpcCpSpawn(this, req); }
441
513
  async _rpcCpStdinWrite(childPid, data) { return _rpc._rpcCpStdinWrite(this, childPid, data); }
442
514
  async _rpcCpStdinEnd(childPid) { return _rpc._rpcCpStdinEnd(this, childPid); }
515
+ async _rpcCpReadStdin(childPid, waitMs) { return _rpc._rpcCpReadStdin(this, childPid, waitMs); }
443
516
  async _rpcCpReadOutput(childPid, fd, sinceSeq, waitMs) { return _rpc._rpcCpReadOutput(this, childPid, fd, sinceSeq, waitMs); }
444
517
  async _rpcCpDrainOutput(childPid) { return _rpc._rpcCpDrainOutput(this, childPid); }
445
518
  async _rpcCpKill(childPid, signal) { return _rpc._rpcCpKill(this, childPid, signal); }
@@ -463,6 +536,7 @@ export class NimbusSession extends CloudflareDurableObject {
463
536
  async _rpcExposePort(port) { return _programmatic.rpcExposePort(this, port); }
464
537
  async _rpcUnexposePort(port) { return _programmatic.rpcUnexposePort(this, port); }
465
538
  async _rpcDeleteFile(path, options) { return _programmatic.rpcDeleteFile(this, path, options); }
539
+ async _rpcDestroy(options) { return _programmatic.rpcDestroy(this, options); }
466
540
  // Legacy VFS (direct method calls)
467
541
  vfsReadFile(path) { return _rpc.vfsReadFile(this, path); }
468
542
  vfsReadFileString(path) { return _rpc.vfsReadFileString(this, path); }
@@ -655,7 +729,8 @@ export class NimbusSession extends CloudflareDurableObject {
655
729
  hooks.onStderr('child_process: command registry unavailable\n');
656
730
  return 127;
657
731
  }
658
- const cmd = await registry.resolve(payload.command);
732
+ const commandName = normalizeCpCommandName(payload.command);
733
+ const cmd = await registry.resolve(commandName);
659
734
  if (!cmd) {
660
735
  hooks.onStderr(`${payload.command}: command not found\n`);
661
736
  return 127;
@@ -677,6 +752,7 @@ export class NimbusSession extends CloudflareDurableObject {
677
752
  read: async () => null,
678
753
  readAll: async () => payload.stdin || '',
679
754
  },
755
+ __nimbusCaptureOutput: true,
680
756
  };
681
757
  try {
682
758
  const code = await cmd(ctx);
@@ -707,14 +783,15 @@ export class NimbusSession extends CloudflareDurableObject {
707
783
  // facet-direct table for known facet-only commands. Returns null
708
784
  // (→ exit 127) for everything unknown.
709
785
  resolve: (name) => {
786
+ const commandName = normalizeCpCommandName(name);
710
787
  const registry = this._cpRegistry;
711
- if (registry && typeof registry.has === 'function' && registry.has(name)) {
788
+ if (registry && typeof registry.has === 'function' && registry.has(commandName)) {
712
789
  // Registered — classify by name. Reuse the static table so
713
790
  // facet-direct commands (node/npm/git/...) keep their kind
714
791
  // even when they ALSO happen to be registry entries.
715
- return _classifyCommand(name) || { kind: 'pure-builtin' };
792
+ return _classifyCommand(commandName) || { kind: 'pure-builtin' };
716
793
  }
717
- return _classifyCommand(name);
794
+ return _classifyCommand(commandName);
718
795
  },
719
796
  runPureBuiltin: async (name, args, env, cwd, stdin, hooks) => {
720
797
  const registry = this._cpRegistry;
@@ -722,7 +799,8 @@ export class NimbusSession extends CloudflareDurableObject {
722
799
  hooks.onStderr('cp: registry unavailable\n');
723
800
  return 127;
724
801
  }
725
- const cmd = await registry.resolve(name);
802
+ const commandName = normalizeCpCommandName(name);
803
+ const cmd = await registry.resolve(commandName);
726
804
  if (!cmd) {
727
805
  hooks.onStderr(`${name}: command not found\n`);
728
806
  return 127;
@@ -735,6 +813,7 @@ export class NimbusSession extends CloudflareDurableObject {
735
813
  stderr: { write: (d) => hooks.onStderr(String(d)) },
736
814
  signal: ac.signal,
737
815
  stdin: { read: async () => null, readAll: async () => stdin },
816
+ __nimbusCaptureOutput: true,
738
817
  };
739
818
  try {
740
819
  const code = await cmd(ctx);
@@ -768,6 +847,22 @@ export class NimbusSession extends CloudflareDurableObject {
768
847
  processLogs: this.processLogs,
769
848
  vfs: this.sqliteFs,
770
849
  commandRegistry: cmdRegistryAdapter,
850
+ shellExecutor: {
851
+ execute: async (commandLine, env, cwd, stdin, hooks) => {
852
+ if (!this.shell) {
853
+ hooks.onStderr('sh: shell unavailable\n');
854
+ return 127;
855
+ }
856
+ const result = await this.shell.execute(String(commandLine), {
857
+ cwd: cwd || '/home/user',
858
+ env: { ...this.shell.env, ...(env || {}) },
859
+ onStdout: (d) => hooks.onStdout(String(d)),
860
+ onStderr: (d) => hooks.onStderr(String(d)),
861
+ stdin,
862
+ });
863
+ return typeof result?.exitCode === 'number' ? result.exitCode : 0;
864
+ },
865
+ },
771
866
  ctx: this.ctx,
772
867
  spawnPool,
773
868
  });
@@ -1020,29 +1115,8 @@ export class NimbusSession extends CloudflareDurableObject {
1020
1115
  ' return 0;\n' +
1021
1116
  '}\n');
1022
1117
  }
1023
- if (!fs.exists('home/user/welcome.txt')) {
1024
- fs.writeFile('home/user/welcome.txt', `Welcome to Nimbus v${NIMBUS_VERSION}!\n\n` +
1025
- 'Cloud-native dev environment on Cloudflare Workers.\n\n' +
1026
- 'JavaScript / TypeScript:\n' +
1027
- ' node hello.js — run in isolated dynamic worker\n' +
1028
- ' npm install <pkg> — install npm packages\n' +
1029
- ' vite — start dev server with HMR\n' +
1030
- ' nimbus-wrangler dev — run Cloudflare Worker locally\n' +
1031
- '\n' +
1032
- 'More languages (install on demand):\n' +
1033
- " nimbus install clang — then: clang hello.c -o hello && ./hello\n" +
1034
- " nimbus install python — then: python -c 'print(\"hi\")'\n" +
1035
- " nimbus install ruby — then: ruby -e 'puts \"hi\"'\n" +
1036
- '\n' +
1037
- 'Interactive REPLs (after install):\n' +
1038
- ' python — Pyodide CPython 3.13\n' +
1039
- ' ruby — ruby.wasm 3.3\n' +
1040
- ' node — bare REPL\n' +
1041
- '\n' +
1042
- 'System:\n' +
1043
- ' nimbus install --list — show installed runtimes\n' +
1044
- ' nimbus install --available — show catalog\n' +
1045
- ' df — filesystem + cache stats\n');
1118
+ if (!fs.exists('home/user/welcome.md')) {
1119
+ fs.writeFile('home/user/welcome.md', renderWelcomeMarkdown(NIMBUS_VERSION));
1046
1120
  }
1047
1121
  // ── Starter app (Vite + React + TS + Tailwind + Router) ──
1048
1122
  // Idempotent: guarded by shouldSeedProject() which checks both a
@@ -15,6 +15,15 @@ export interface ProgrammaticExecOptions extends ProgrammaticReadyOptions {
15
15
  timeoutMs?: number;
16
16
  stdin?: string;
17
17
  }
18
+ export interface ProgrammaticDestroyOptions {
19
+ reason?: string;
20
+ }
21
+ export interface ProgrammaticDestroyResult {
22
+ ok: true;
23
+ killed: number;
24
+ destroyedAt: number;
25
+ reason: string | null;
26
+ }
18
27
  export interface ProgrammaticExecResult {
19
28
  command: string;
20
29
  exitCode: number;
@@ -101,5 +110,6 @@ export declare function rpcUnexposePort(self: Host, port: number): Promise<{
101
110
  export declare function rpcDeleteFile(self: Host, path: string, options?: {
102
111
  recursive?: boolean;
103
112
  }): Promise<void>;
113
+ export declare function rpcDestroy(self: Host, options?: ProgrammaticDestroyOptions): Promise<ProgrammaticDestroyResult>;
104
114
  export {};
105
115
  //# sourceMappingURL=programmatic.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"programmatic.d.ts","sourceRoot":"","sources":["../../src/session/programmatic.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"programmatic.d.ts","sourceRoot":"","sources":["../../src/session/programmatic.ts"],"names":[],"mappings":"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"}
@@ -6,6 +6,9 @@
6
6
  * duplicating the interactive terminal boot path.
7
7
  */
8
8
  import { ensureRuntimesProgrammatic, installRuntimeProgrammatic, listAvailableRuntimes, listInstalledRuntimes, } from '../runtime/package-manager.js';
9
+ import { ProcessTable } from '../runtime/process-table.js';
10
+ import { ProcessLogStore } from '../runtime/process-logs.js';
11
+ import { PortRegistry } from '../runtime/port-registry.js';
9
12
  function makeHeadlessWebSocket() {
10
13
  const listeners = new Map();
11
14
  const ws = {
@@ -289,6 +292,124 @@ export async function rpcDeleteFile(self, path, options = {}) {
289
292
  }
290
293
  self.sqliteFs.unlink(p);
291
294
  }
295
+ export async function rpcDestroy(self, options = {}) {
296
+ const reason = typeof options.reason === 'string' && options.reason.trim()
297
+ ? options.reason.trim().slice(0, 200)
298
+ : null;
299
+ const destroyedAt = Date.now();
300
+ let killed = 0;
301
+ const running = Array.isArray(self.processTable?.getAll?.())
302
+ ? self.processTable.getAll().filter((p) => p.state === 'running')
303
+ : [];
304
+ for (const entry of running) {
305
+ const pid = Number(entry.pid);
306
+ try {
307
+ if (self._viteShimPid === pid) {
308
+ if (self.cirrusReal?.isRunning)
309
+ self.cirrusReal.stop(self.ctx);
310
+ self.cirrusReal = null;
311
+ if (self.viteDevServer?.isRunning)
312
+ self.viteDevServer.stop();
313
+ self.viteDevServer = null;
314
+ try {
315
+ await self.ctx.storage.delete('vite-config');
316
+ }
317
+ catch { }
318
+ self._viteShimPid = null;
319
+ self._viteShimPort = null;
320
+ }
321
+ else if (self.facetManager?.kill?.(pid)) {
322
+ // facetManager.kill already marks process state and unregisters ports.
323
+ }
324
+ else {
325
+ try {
326
+ self.processTable?.kill?.(pid);
327
+ }
328
+ catch { }
329
+ }
330
+ try {
331
+ self.portRegistry?.unregisterByPid?.(pid);
332
+ }
333
+ catch { }
334
+ try {
335
+ if (!self.processLogs?.getExit?.(pid)) {
336
+ self.processLogs?.markExit?.(pid, 137, reason ?? 'destroyed');
337
+ }
338
+ }
339
+ catch { }
340
+ killed++;
341
+ }
342
+ catch {
343
+ try {
344
+ self.processTable?.kill?.(pid);
345
+ }
346
+ catch { }
347
+ try {
348
+ self.portRegistry?.unregisterByPid?.(pid);
349
+ }
350
+ catch { }
351
+ }
352
+ }
353
+ try {
354
+ self.processLogs?.flush?.();
355
+ }
356
+ catch { }
357
+ try {
358
+ self.sqliteFs?.flushAll?.();
359
+ }
360
+ catch { }
361
+ try {
362
+ await self.ctx.storage.deleteAll();
363
+ }
364
+ catch (e) {
365
+ throw new Error(`Nimbus destroy failed while deleting Durable Object storage: ${e?.message || e}`);
366
+ }
367
+ resetInMemorySessionState(self);
368
+ return { ok: true, killed, destroyedAt, reason };
369
+ }
370
+ function resetInMemorySessionState(self) {
371
+ try {
372
+ self._cirrusHmrWsClients?.clear?.();
373
+ }
374
+ catch { }
375
+ try {
376
+ self.terminal?.write?.('\r\n[nimbus] session destroyed\r\n');
377
+ }
378
+ catch { }
379
+ try {
380
+ self.terminal?.close?.();
381
+ }
382
+ catch { }
383
+ self.sqliteFs = null;
384
+ self.kernel = null;
385
+ self.shell = null;
386
+ self.terminal = null;
387
+ self.facetManager = null;
388
+ self.facetProcessManager = null;
389
+ self.esbuildService = null;
390
+ self.viteDevServer = null;
391
+ self.cirrusReal = null;
392
+ self._cirrusHmrWsClients = null;
393
+ self.nimbusWrangler = null;
394
+ self.npmInstaller = null;
395
+ self.fetchProxyEntrypoint = null;
396
+ self.runtimeFsBridge = null;
397
+ self._cpRegistry = null;
398
+ self._viteShimPid = null;
399
+ self._viteShimPort = null;
400
+ self.sessionBasePath = '';
401
+ self.sessionBasePathHydrated = false;
402
+ self.wranglerAliasBannerShown = false;
403
+ self._b4Phase = 'drained';
404
+ self.processTable = new ProcessTable();
405
+ self.portRegistry = new PortRegistry();
406
+ self.processLogs = new ProcessLogStore();
407
+ self._w9PersistWired = false;
408
+ try {
409
+ self._w9WireProcessLogPersist?.();
410
+ }
411
+ catch { }
412
+ }
292
413
  function rmrf(vfs, path) {
293
414
  for (const entry of vfs.readdir(path)) {
294
415
  const child = `${path}/${entry.name}`;
@@ -1 +1 @@
1
- {"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../../src/session/routes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AA+BH,KAAK,UAAU,GAAG,GAAG,CAAC;AAEtB,wBAAsB,WAAW,CAAC,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC,CA0+BvF"}
1
+ {"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../../src/session/routes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAgCH,KAAK,UAAU,GAAG,GAAG,CAAC;AAEtB,wBAAsB,WAAW,CAAC,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC,CAy/BvF"}