@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.
- package/README.md +37 -0
- package/dist/_shared/crypto.d.ts +15 -0
- package/dist/_shared/crypto.d.ts.map +1 -0
- package/dist/_shared/crypto.js +122 -0
- package/dist/facets/manager.d.ts +24 -0
- package/dist/facets/manager.d.ts.map +1 -1
- package/dist/facets/manager.js +279 -70
- package/dist/facets/process.d.ts +11 -2
- package/dist/facets/process.d.ts.map +1 -1
- package/dist/facets/process.js +187 -21
- package/dist/facets/vite-dev-server.d.ts +2 -0
- package/dist/facets/vite-dev-server.d.ts.map +1 -1
- package/dist/facets/vite-dev-server.js +39 -12
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/loaders/child-process/spawn-facet.d.ts +1 -3
- package/dist/loaders/child-process/spawn-facet.d.ts.map +1 -1
- package/dist/loaders/child-process/spawn-facet.js +1 -12
- package/dist/loaders/child-process/spawn-pool.d.ts +1 -1
- package/dist/loaders/child-process/spawn-pool.d.ts.map +1 -1
- package/dist/loaders/child-process/spawn-pool.js +1 -6
- package/dist/loaders/loader-pool.d.ts +7 -0
- package/dist/loaders/loader-pool.d.ts.map +1 -1
- package/dist/loaders/loader-pool.js +3 -1
- package/dist/npm/installer.d.ts.map +1 -1
- package/dist/npm/installer.js +47 -27
- package/dist/npm/pre-bundle-facet.d.ts.map +1 -1
- package/dist/npm/pre-bundle-facet.js +2 -1
- package/dist/npm/resolve-one-facet.d.ts.map +1 -1
- package/dist/npm/resolve-one-facet.js +41 -13
- package/dist/npm/resolver.d.ts.map +1 -1
- package/dist/npm/resolver.js +70 -35
- package/dist/router/index.d.ts.map +1 -1
- package/dist/router/index.js +45 -21
- package/dist/router/remote-api.d.ts.map +1 -1
- package/dist/router/remote-api.js +29 -8
- package/dist/runtime/barrel-synthesizer.d.ts +7 -0
- package/dist/runtime/barrel-synthesizer.d.ts.map +1 -1
- package/dist/runtime/barrel-synthesizer.js +11 -0
- package/dist/runtime/clang-runner.d.ts +2 -2
- package/dist/runtime/clang-runner.d.ts.map +1 -1
- package/dist/runtime/clang-runner.js +64 -47
- package/dist/runtime/esbuild-service.d.ts +12 -5
- package/dist/runtime/esbuild-service.d.ts.map +1 -1
- package/dist/runtime/esbuild-service.js +28 -14
- package/dist/runtime/node-runner.d.ts +2 -0
- package/dist/runtime/node-runner.d.ts.map +1 -1
- package/dist/runtime/node-shims.d.ts +4 -2
- package/dist/runtime/node-shims.d.ts.map +1 -1
- package/dist/runtime/node-shims.js +404 -55
- package/dist/runtime/os-contracts.d.ts +128 -0
- package/dist/runtime/os-contracts.d.ts.map +1 -0
- package/dist/runtime/os-contracts.js +1 -0
- package/dist/runtime/package-manager.d.ts +31 -0
- package/dist/runtime/package-manager.d.ts.map +1 -1
- package/dist/runtime/package-manager.js +162 -15
- package/dist/runtime/port-registry.d.ts +5 -0
- package/dist/runtime/port-registry.d.ts.map +1 -1
- package/dist/runtime/port-registry.js +22 -1
- package/dist/runtime/pyodide-runtime-assets.d.ts +19 -0
- package/dist/runtime/pyodide-runtime-assets.d.ts.map +1 -0
- package/dist/runtime/pyodide-runtime-assets.js +44 -0
- package/dist/runtime/python-repl.d.ts +3 -0
- package/dist/runtime/python-repl.d.ts.map +1 -1
- package/dist/runtime/python-repl.js +18 -32
- package/dist/runtime/python-runner.d.ts +8 -9
- package/dist/runtime/python-runner.d.ts.map +1 -1
- package/dist/runtime/python-runner.js +958 -118
- package/dist/runtime/python-socket-shim.d.ts +11 -0
- package/dist/runtime/python-socket-shim.d.ts.map +1 -0
- package/dist/runtime/python-socket-shim.js +526 -0
- package/dist/runtime/require-resolver.d.ts.map +1 -1
- package/dist/runtime/require-resolver.js +2 -11
- package/dist/runtime/ruby-gems.d.ts +25 -0
- package/dist/runtime/ruby-gems.d.ts.map +1 -0
- package/dist/runtime/ruby-gems.js +582 -0
- package/dist/runtime/ruby-runner.d.ts +2 -4
- package/dist/runtime/ruby-runner.d.ts.map +1 -1
- package/dist/runtime/ruby-runner.js +335 -34
- package/dist/runtime/runtime-catalog.d.ts +16 -4
- package/dist/runtime/runtime-catalog.d.ts.map +1 -1
- package/dist/runtime/runtime-catalog.js +21 -10
- package/dist/runtime/runtime-registry.d.ts +3 -0
- package/dist/runtime/runtime-registry.d.ts.map +1 -1
- package/dist/runtime/runtime-registry.js +4 -0
- package/dist/runtime/sqlite-runtime-fs-bridge.d.ts +43 -0
- package/dist/runtime/sqlite-runtime-fs-bridge.d.ts.map +1 -0
- package/dist/runtime/sqlite-runtime-fs-bridge.js +224 -0
- package/dist/runtime/static-server.d.ts +3 -0
- package/dist/runtime/static-server.d.ts.map +1 -0
- package/dist/runtime/static-server.js +121 -0
- package/dist/runtime/vfs-snapshot.d.ts +57 -0
- package/dist/runtime/vfs-snapshot.d.ts.map +1 -0
- package/dist/runtime/vfs-snapshot.js +141 -0
- package/dist/runtime/virtual-socket-kernel.d.ts +16 -0
- package/dist/runtime/virtual-socket-kernel.d.ts.map +1 -0
- package/dist/runtime/virtual-socket-kernel.js +360 -0
- package/dist/runtime/wasi-instance.d.ts +6 -3
- package/dist/runtime/wasi-instance.d.ts.map +1 -1
- package/dist/runtime/wasm-runner.d.ts +1 -25
- package/dist/runtime/wasm-runner.d.ts.map +1 -1
- package/dist/runtime/wasm-runner.js +1 -160
- package/dist/session/agent.d.ts +43 -0
- package/dist/session/agent.d.ts.map +1 -0
- package/dist/session/agent.js +1252 -0
- package/dist/session/init.d.ts.map +1 -1
- package/dist/session/init.js +64 -19
- package/dist/session/nimbus-session.d.ts +14 -2
- package/dist/session/nimbus-session.d.ts.map +1 -1
- package/dist/session/nimbus-session.js +104 -30
- package/dist/session/programmatic.d.ts +10 -0
- package/dist/session/programmatic.d.ts.map +1 -1
- package/dist/session/programmatic.js +121 -0
- package/dist/session/routes.d.ts.map +1 -1
- package/dist/session/routes.js +19 -1
- package/dist/session/rpc.d.ts +11 -0
- package/dist/session/rpc.d.ts.map +1 -1
- package/dist/session/rpc.js +56 -43
- package/dist/session/supervisor-rpc.d.ts +15 -0
- package/dist/session/supervisor-rpc.d.ts.map +1 -1
- package/dist/session/supervisor-rpc.js +32 -0
- package/dist/session/ws.d.ts +4 -3
- package/dist/session/ws.d.ts.map +1 -1
- package/dist/session/ws.js +11 -1
- package/dist/shell/unix-commands.d.ts.map +1 -1
- package/dist/shell/unix-commands.js +52 -51
- package/dist/vfs/path.d.ts +8 -4
- package/dist/vfs/path.d.ts.map +1 -1
- package/dist/vfs/path.js +16 -4
- package/dist/vfs/sqlite-vfs.d.ts +2 -0
- package/dist/vfs/sqlite-vfs.d.ts.map +1 -1
- package/dist/vfs/sqlite-vfs.js +11 -0
- package/dist/vfs/symlink-registry.d.ts +7 -1
- package/dist/vfs/symlink-registry.d.ts.map +1 -1
- package/dist/vfs/symlink-registry.js +16 -11
- package/package.json +4 -1
- package/public/index.html +240 -0
- package/public/s/index.html +1316 -128
- package/runtime-contracts/pyodide-workerd-adapter.json +18 -0
- 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;
|
|
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"}
|
package/dist/session/init.js
CHANGED
|
@@ -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 =
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
81
|
-
*
|
|
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":"AAAA;;;;;;GAMG;AAEH,OAAO,EACL,MAAM,EACN,KAAK,EACN,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,aAAa,IAAI,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAC9E,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAGpD,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAI7D,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,kBAAkB,CAAC;AAClE,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC7D,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAEtD,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAoCnD,OAAO,EAEL,KAAK,uBAAuB,IAAI,gBAAgB,EACjD,MAAM,uBAAuB,CAAC;AAmC/B,OAAO,KAAK,aAAa,MAAM,mBAAmB,CAAC;
|
|
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
|
|
160
|
-
*
|
|
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
|
|
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(
|
|
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(
|
|
792
|
+
return _classifyCommand(commandName) || { kind: 'pure-builtin' };
|
|
716
793
|
}
|
|
717
|
-
return _classifyCommand(
|
|
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
|
|
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.
|
|
1024
|
-
fs.writeFile('home/user/welcome.
|
|
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":"AAAA;;;;;;GAMG;
|
|
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;
|
|
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"}
|