@nimbus-sh/worker 0.6.0 → 0.8.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.
- package/README.md +2 -2
- package/dist/cirrus-npm-cjs.generated.d.ts +1 -1
- package/dist/cirrus-npm-cjs.generated.js +1 -1
- package/dist/facets/cirrus-real.d.ts.map +1 -1
- package/dist/facets/cirrus-real.js +6 -5
- package/dist/facets/compose.d.ts +148 -0
- package/dist/facets/compose.d.ts.map +1 -0
- package/dist/facets/compose.js +146 -0
- package/dist/facets/durable-images.d.ts +9 -5
- package/dist/facets/durable-images.d.ts.map +1 -1
- package/dist/facets/durable-images.js +17 -7
- package/dist/facets/esbuild-bundle-pool.d.ts +49 -0
- package/dist/facets/esbuild-bundle-pool.d.ts.map +1 -0
- package/dist/facets/esbuild-bundle-pool.js +122 -0
- package/dist/facets/exec-telemetry.d.ts +8 -0
- package/dist/facets/exec-telemetry.d.ts.map +1 -1
- package/dist/facets/manager.d.ts +240 -109
- package/dist/facets/manager.d.ts.map +1 -1
- package/dist/facets/manager.js +677 -342
- package/dist/facets/process.d.ts +20 -16
- package/dist/facets/process.d.ts.map +1 -1
- package/dist/facets/process.js +59 -28
- package/dist/facets/real-vite-fs-shim.js +2 -2
- package/dist/facets/real-vite-hmr.d.ts +3 -1
- package/dist/facets/real-vite-hmr.d.ts.map +1 -1
- package/dist/facets/real-vite-hmr.js +18 -8
- package/dist/facets/vite-dev-server.d.ts +25 -47
- package/dist/facets/vite-dev-server.d.ts.map +1 -1
- package/dist/facets/vite-dev-server.js +185 -219
- package/dist/facets/wasm-image-digest.d.ts +25 -0
- package/dist/facets/wasm-image-digest.d.ts.map +1 -0
- package/dist/facets/wasm-image-digest.js +25 -0
- package/dist/facets/wasm-swap-registry.d.ts +51 -92
- package/dist/facets/wasm-swap-registry.d.ts.map +1 -1
- package/dist/facets/wasm-swap-registry.js +68 -227
- package/dist/facets/ws-terminal.d.ts +9 -31
- package/dist/facets/ws-terminal.d.ts.map +1 -1
- package/dist/facets/ws-terminal.js +58 -51
- package/dist/git/network-facet.d.ts.map +1 -1
- package/dist/git/network-facet.js +6 -5
- package/dist/hosted/commands.d.ts +12 -0
- package/dist/hosted/commands.d.ts.map +1 -0
- package/dist/hosted/commands.js +1658 -0
- package/dist/hosted/runtime.d.ts +114 -0
- package/dist/hosted/runtime.d.ts.map +1 -0
- package/dist/hosted/runtime.js +288 -0
- package/dist/hosted/services.d.ts +40 -0
- package/dist/hosted/services.d.ts.map +1 -0
- package/dist/hosted/services.js +512 -0
- package/dist/loaders/child-process/spawn-pool.d.ts +3 -2
- package/dist/loaders/child-process/spawn-pool.d.ts.map +1 -1
- package/dist/loaders/child-process/spawn-pool.js +3 -2
- package/dist/loaders/generated-workers.d.ts +2 -2
- package/dist/loaders/generated-workers.d.ts.map +1 -1
- package/dist/loaders/generated-workers.js +3 -3
- package/dist/loaders/npm-resolve-preamble.d.ts +3 -6
- package/dist/loaders/npm-resolve-preamble.d.ts.map +1 -1
- package/dist/loaders/npm-resolve-preamble.js +34 -108
- package/dist/node-shims-artifact.generated.js +3 -3
- package/dist/npm/install-batch-facet.d.ts +3 -2
- package/dist/npm/install-batch-facet.d.ts.map +1 -1
- package/dist/npm/install-batch-facet.js +45 -15
- package/dist/npm/installer.d.ts +22 -17
- package/dist/npm/installer.d.ts.map +1 -1
- package/dist/npm/installer.js +209 -193
- package/dist/npm/pre-bundle-facet.d.ts +1 -1
- package/dist/npm/pre-bundle-facet.d.ts.map +1 -1
- package/dist/npm/pre-bundle-facet.js +1 -1
- package/dist/npm/resolve-facet.d.ts +6 -0
- package/dist/npm/resolve-facet.d.ts.map +1 -1
- package/dist/npm/resolve-one-facet.d.ts +21 -20
- package/dist/npm/resolve-one-facet.d.ts.map +1 -1
- package/dist/npm/resolve-one-facet.js +85 -84
- package/dist/npm/semver.d.ts +59 -0
- package/dist/npm/semver.d.ts.map +1 -0
- package/dist/npm/semver.js +226 -0
- package/dist/router/remote-api.js +31 -1
- package/dist/runtime/bash-repl.d.ts +1 -1
- package/dist/runtime/bash-repl.d.ts.map +1 -1
- package/dist/runtime/bash-repl.js +38 -4
- package/dist/runtime/bun-runner.js +1 -1
- package/dist/runtime/html-entrypoint.d.ts +7 -0
- package/dist/runtime/html-entrypoint.d.ts.map +1 -1
- package/dist/runtime/html-entrypoint.js +18 -2
- package/dist/runtime/node-runner.d.ts +4 -1
- package/dist/runtime/node-runner.d.ts.map +1 -1
- package/dist/runtime/node-runner.js +9 -2
- package/dist/runtime/node-shims.d.ts.map +1 -1
- package/dist/runtime/node-shims.js +305 -29
- package/dist/runtime/opencode-facet-runner.js +16 -16
- package/dist/runtime/package-manager.d.ts +35 -122
- package/dist/runtime/package-manager.d.ts.map +1 -1
- package/dist/runtime/package-manager.js +61 -596
- package/dist/runtime/process-logs-api.d.ts +1 -1
- package/dist/runtime/process-logs-api.d.ts.map +1 -1
- package/dist/runtime/process-logs-api.js +1 -1
- package/dist/runtime/python-repl.d.ts +2 -1
- package/dist/runtime/python-repl.d.ts.map +1 -1
- package/dist/runtime/python-repl.js +82 -59
- package/dist/runtime/repl-session.d.ts +9 -47
- package/dist/runtime/repl-session.d.ts.map +1 -1
- package/dist/runtime/repl-session.js +105 -105
- package/dist/runtime/runtime-catalog.d.ts +13 -0
- package/dist/runtime/runtime-catalog.d.ts.map +1 -1
- package/dist/runtime/runtime-catalog.js +88 -0
- package/dist/session/agent.d.ts +1 -21
- package/dist/session/agent.d.ts.map +1 -1
- package/dist/session/ai.d.ts +5 -1
- package/dist/session/ai.d.ts.map +1 -1
- package/dist/session/ai.js +7 -0
- package/dist/session/helpers.d.ts +38 -0
- package/dist/session/helpers.d.ts.map +1 -1
- package/dist/session/helpers.js +76 -0
- package/dist/session/hibernation.d.ts +2 -1
- package/dist/session/hibernation.d.ts.map +1 -1
- package/dist/session/hibernation.js +7 -4
- package/dist/session/init-phases.d.ts +1 -1
- package/dist/session/init-phases.d.ts.map +1 -1
- package/dist/session/init-phases.js +2 -12
- package/dist/session/init.d.ts +15 -36
- package/dist/session/init.d.ts.map +1 -1
- package/dist/session/init.js +50 -2327
- package/dist/session/loopback.d.ts +2 -29
- package/dist/session/loopback.d.ts.map +1 -1
- package/dist/session/loopback.js +3 -27
- package/dist/session/nimbus-session.d.ts +77 -34
- package/dist/session/nimbus-session.d.ts.map +1 -1
- package/dist/session/nimbus-session.js +126 -514
- package/dist/session/npm-install-port.d.ts +18 -0
- package/dist/session/npm-install-port.d.ts.map +1 -0
- package/dist/session/npm-install-port.js +37 -0
- package/dist/session/port-capability.d.ts +44 -0
- package/dist/session/port-capability.d.ts.map +1 -1
- package/dist/session/port-capability.js +110 -0
- package/dist/session/programmatic.d.ts +36 -43
- package/dist/session/programmatic.d.ts.map +1 -1
- package/dist/session/programmatic.js +109 -115
- package/dist/session/routes.d.ts +30 -17
- package/dist/session/routes.d.ts.map +1 -1
- package/dist/session/routes.js +42 -131
- package/dist/session/rpc.d.ts +15 -15
- package/dist/session/rpc.d.ts.map +1 -1
- package/dist/session/rpc.js +98 -49
- package/dist/session/serving-port.d.ts +27 -0
- package/dist/session/serving-port.d.ts.map +1 -0
- package/dist/session/serving-port.js +27 -0
- package/dist/session/start-real-vite.d.ts +12 -0
- package/dist/session/start-real-vite.d.ts.map +1 -1
- package/dist/session/start-real-vite.js +4 -4
- package/dist/session/supervisor-op.d.ts +4 -4
- package/dist/session/supervisor-op.d.ts.map +1 -1
- package/dist/session/supervisor-op.js +24 -10
- package/dist/session/supervisor-rpc.d.ts +7 -7
- package/dist/session/supervisor-rpc.d.ts.map +1 -1
- package/dist/session/supervisor-rpc.js +4 -0
- package/dist/session/vite-command.d.ts +18 -0
- package/dist/session/vite-command.d.ts.map +1 -0
- package/dist/session/vite-command.js +609 -0
- package/dist/session/ws.d.ts +61 -0
- package/dist/session/ws.d.ts.map +1 -1
- package/dist/session/ws.js +122 -12
- package/dist/shell/npm-bin-entrypoints.d.ts +0 -35
- package/dist/shell/npm-bin-entrypoints.d.ts.map +1 -1
- package/dist/shell/npm-bin-entrypoints.js +12 -85
- package/dist/workspace-host.d.ts +6 -0
- package/dist/workspace-host.d.ts.map +1 -0
- package/dist/workspace-host.js +5 -0
- package/dist/workspace.d.ts +2 -0
- package/dist/workspace.d.ts.map +1 -0
- package/dist/workspace.js +1 -0
- package/package.json +34 -9
- package/public/_assets/runtime/{node-shims-9e1380d9ee430fcc.js → node-shims-8f8c64edd2a1f0f5.js} +305 -29
- package/public/index.html +1 -1
- package/scripts/bundle-facet-workers.mjs +1 -1
- package/scripts/bundle-npm-cjs.mjs +2 -2
- package/dist/facets/on-demand-bundle-gate.d.ts +0 -65
- package/dist/facets/on-demand-bundle-gate.d.ts.map +0 -1
- package/dist/facets/on-demand-bundle-gate.js +0 -125
- package/dist/npm/install-args.d.ts +0 -21
- package/dist/npm/install-args.d.ts.map +0 -1
- package/dist/npm/install-args.js +0 -70
- package/dist/npm/npm-log.d.ts +0 -31
- package/dist/npm/npm-log.d.ts.map +0 -1
- package/dist/npm/npm-log.js +0 -51
|
@@ -1,28 +1,7 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* WebSocket-backed terminal matching Nimbus's ITerminal interface.
|
|
3
|
-
* HeadlessTerminal has: write, writeln, onData, sendData, cols, rows, focus, clear
|
|
4
|
-
*
|
|
5
|
-
* [B'.5] The `ws` ref is no longer readonly: a wsClose leaves the
|
|
6
|
-
* Shell + this terminal alive in-memory; the next /ws upgrade calls
|
|
7
|
-
* `attach(newWs, ...)` to swap in the new socket. The buffer/flush
|
|
8
|
-
* timer state is preserved across the swap so any in-flight
|
|
9
|
-
* coalescing continues seamlessly.
|
|
10
|
-
*/
|
|
11
1
|
export declare class WebSocketTerminal {
|
|
12
|
-
|
|
2
|
+
/** Null while the terminal is headless (composed before any attach). */
|
|
3
|
+
ws: WebSocket | null;
|
|
13
4
|
private dataCallback;
|
|
14
|
-
/**
|
|
15
|
-
* REPL-W1: secondary input callback installed by interactive runtimes
|
|
16
|
-
* (e.g. `python` no-args). When non-null, sendData() routes input to
|
|
17
|
-
* this callback INSTEAD of the shell. Set via attachRepl(); cleared
|
|
18
|
-
* by the disposer the attach call returns. Supports nesting (the
|
|
19
|
-
* disposer restores the prior callback).
|
|
20
|
-
*
|
|
21
|
-
* §3 (Layer 2): the explicit handoff mirrors how `vim`/`less` swap
|
|
22
|
-
* the parent shell's terminal handler. Auto-detect was rejected as
|
|
23
|
-
* fragile. Additive only — when null, behavior is identical to pre-W1.
|
|
24
|
-
*/
|
|
25
|
-
private replCallback;
|
|
26
5
|
/**
|
|
27
6
|
* editor/monaco (2026-05-13): Editor-pane file-system bridge.
|
|
28
7
|
*
|
|
@@ -46,7 +25,7 @@ export declare class WebSocketTerminal {
|
|
|
46
25
|
* into nimbus_terminal_scrollback. Single-frame granularity (not
|
|
47
26
|
* per-write) keeps the row count bounded by the 5 ms flush cadence. */
|
|
48
27
|
private onFlush;
|
|
49
|
-
constructor(ws
|
|
28
|
+
constructor(ws?: WebSocket | null, onFlush?: (data: string) => void);
|
|
50
29
|
/**
|
|
51
30
|
* [B'.5] Swap the underlying WebSocket on a warm rejoin. The Shell
|
|
52
31
|
* keeps `terminal` as a stable instance reference (it stored
|
|
@@ -56,6 +35,11 @@ export declare class WebSocketTerminal {
|
|
|
56
35
|
* self.ctx, but TypeScript-wise it's a fresh function value).
|
|
57
36
|
*/
|
|
58
37
|
attach(ws: WebSocket, onFlush?: (data: string) => void): void;
|
|
38
|
+
/** Release the socket without ending the terminal's lifetime. */
|
|
39
|
+
detach(): void;
|
|
40
|
+
private replBinding;
|
|
41
|
+
private replTeardown;
|
|
42
|
+
disposeRepl(): Promise<void>;
|
|
59
43
|
close(): void;
|
|
60
44
|
get cols(): number;
|
|
61
45
|
get rows(): number;
|
|
@@ -94,13 +78,7 @@ export declare class WebSocketTerminal {
|
|
|
94
78
|
*/
|
|
95
79
|
onFs(cb: (msg: any, reply: (frame: any) => void) => void): void;
|
|
96
80
|
sendData(data: string): void;
|
|
97
|
-
|
|
98
|
-
* REPL-W1: install a runtime-side input handler. Returns a disposer
|
|
99
|
-
* that restores the prior handler (supports nesting). Calling this
|
|
100
|
-
* does NOT change the shell's dataCallback — it just shadows it
|
|
101
|
-
* until the disposer runs.
|
|
102
|
-
*/
|
|
103
|
-
attachRepl(cb: (data: string) => void): () => void;
|
|
81
|
+
attachRepl(input: (data: string) => void, dispose?: () => Promise<void>): () => void;
|
|
104
82
|
focus(): void;
|
|
105
83
|
clear(): void;
|
|
106
84
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ws-terminal.d.ts","sourceRoot":"","sources":["../../src/facets/ws-terminal.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ws-terminal.d.ts","sourceRoot":"","sources":["../../src/facets/ws-terminal.ts"],"names":[],"mappings":"AAQA,qBAAa,iBAAiB;IAC5B,wEAAwE;IACjE,EAAE,EAAE,SAAS,GAAG,IAAI,CAAC;IAC5B,OAAO,CAAC,YAAY,CAAyC;IAE7D;;;;;;;;;;;;OAYG;IACH,OAAO,CAAC,UAAU,CAAkE;IACpF,OAAO,CAAC,KAAK,CAAc;IAC3B,OAAO,CAAC,KAAK,CAAc;IAC3B,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,UAAU,CAA8C;IAChE;;;4EAGwE;IACxE,OAAO,CAAC,OAAO,CAAkC;gBAErC,EAAE,GAAE,SAAS,GAAG,IAAW,EAAE,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI;IAKzE;;;;;;;OAOG;IACH,MAAM,CAAC,EAAE,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,GAAG,IAAI;IAK7D,iEAAiE;IACjE,MAAM,IAAI,IAAI;IAGd,OAAO,CAAC,WAAW,CAA4B;IAC/C,OAAO,CAAC,YAAY,CAA8B;IAClD,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC;IAkB5B,KAAK,IAAI,IAAI;IAYb,IAAI,IAAI,IAAI,MAAM,CAAuB;IACzC,IAAI,IAAI,IAAI,MAAM,CAAuB;IAEzC,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAOzB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAE3B;;;;;;;;;;OAUG;IACH,QAAQ,IAAI,IAAI;IAQhB,OAAO,CAAC,KAAK;IAeb,MAAM,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,GAAG,IAAI;IAE9C,aAAa,CAAC,GAAG,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,IAAI;IA+C3J;;;;;;OAMG;IACH,IAAI,CAAC,EAAE,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,IAAI,KAAK,IAAI,GAAG,IAAI;IAG/D,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAI5B,UAAU,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,EAAE,OAAO,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,MAAM,IAAI;IAepF,KAAK,IAAI,IAAI;IACb,KAAK,IAAI,IAAI;CACd"}
|
|
@@ -1,28 +1,7 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* WebSocket-backed terminal matching Nimbus's ITerminal interface.
|
|
3
|
-
* HeadlessTerminal has: write, writeln, onData, sendData, cols, rows, focus, clear
|
|
4
|
-
*
|
|
5
|
-
* [B'.5] The `ws` ref is no longer readonly: a wsClose leaves the
|
|
6
|
-
* Shell + this terminal alive in-memory; the next /ws upgrade calls
|
|
7
|
-
* `attach(newWs, ...)` to swap in the new socket. The buffer/flush
|
|
8
|
-
* timer state is preserved across the swap so any in-flight
|
|
9
|
-
* coalescing continues seamlessly.
|
|
10
|
-
*/
|
|
11
1
|
export class WebSocketTerminal {
|
|
2
|
+
/** Null while the terminal is headless (composed before any attach). */
|
|
12
3
|
ws;
|
|
13
4
|
dataCallback = null;
|
|
14
|
-
/**
|
|
15
|
-
* REPL-W1: secondary input callback installed by interactive runtimes
|
|
16
|
-
* (e.g. `python` no-args). When non-null, sendData() routes input to
|
|
17
|
-
* this callback INSTEAD of the shell. Set via attachRepl(); cleared
|
|
18
|
-
* by the disposer the attach call returns. Supports nesting (the
|
|
19
|
-
* disposer restores the prior callback).
|
|
20
|
-
*
|
|
21
|
-
* §3 (Layer 2): the explicit handoff mirrors how `vim`/`less` swap
|
|
22
|
-
* the parent shell's terminal handler. Auto-detect was rejected as
|
|
23
|
-
* fragile. Additive only — when null, behavior is identical to pre-W1.
|
|
24
|
-
*/
|
|
25
|
-
replCallback = null;
|
|
26
5
|
/**
|
|
27
6
|
* editor/monaco (2026-05-13): Editor-pane file-system bridge.
|
|
28
7
|
*
|
|
@@ -46,7 +25,7 @@ export class WebSocketTerminal {
|
|
|
46
25
|
* into nimbus_terminal_scrollback. Single-frame granularity (not
|
|
47
26
|
* per-write) keeps the row count bounded by the 5 ms flush cadence. */
|
|
48
27
|
onFlush;
|
|
49
|
-
constructor(ws, onFlush) {
|
|
28
|
+
constructor(ws = null, onFlush) {
|
|
50
29
|
this.ws = ws;
|
|
51
30
|
this.onFlush = onFlush ?? null;
|
|
52
31
|
}
|
|
@@ -63,20 +42,51 @@ export class WebSocketTerminal {
|
|
|
63
42
|
if (onFlush !== undefined)
|
|
64
43
|
this.onFlush = onFlush;
|
|
65
44
|
}
|
|
45
|
+
/** Release the socket without ending the terminal's lifetime. */
|
|
46
|
+
detach() {
|
|
47
|
+
this.ws = null;
|
|
48
|
+
}
|
|
49
|
+
replBinding = null;
|
|
50
|
+
replTeardown = null;
|
|
51
|
+
disposeRepl() {
|
|
52
|
+
if (this.replTeardown)
|
|
53
|
+
return this.replTeardown;
|
|
54
|
+
const first = this.replBinding;
|
|
55
|
+
if (!first)
|
|
56
|
+
return Promise.resolve();
|
|
57
|
+
this.replBinding = null;
|
|
58
|
+
this.replTeardown = Promise.resolve().then(async () => {
|
|
59
|
+
const errors = [];
|
|
60
|
+
let binding = first;
|
|
61
|
+
while (binding) {
|
|
62
|
+
const next = binding.previous;
|
|
63
|
+
try {
|
|
64
|
+
await binding.dispose?.();
|
|
65
|
+
}
|
|
66
|
+
catch (error) {
|
|
67
|
+
errors.push(error instanceof Error ? error : new Error(String(error)));
|
|
68
|
+
}
|
|
69
|
+
binding = next;
|
|
70
|
+
}
|
|
71
|
+
if (errors.length > 0)
|
|
72
|
+
throw new AggregateError(errors, 'REPL cleanup failed');
|
|
73
|
+
}).finally(() => { this.replTeardown = null; });
|
|
74
|
+
return this.replTeardown;
|
|
75
|
+
}
|
|
66
76
|
close() {
|
|
67
|
-
|
|
77
|
+
void this.disposeRepl().catch((error) => console.warn('[terminal] REPL cleanup failed', error));
|
|
78
|
+
if (this.flushTimer)
|
|
68
79
|
clearTimeout(this.flushTimer);
|
|
69
|
-
|
|
70
|
-
}
|
|
80
|
+
this.flushTimer = null;
|
|
71
81
|
this.buffer = [];
|
|
72
82
|
this.onFlush = null;
|
|
73
83
|
this.dataCallback = null;
|
|
74
|
-
this.replCallback = null;
|
|
75
84
|
this.fsCallback = null;
|
|
76
85
|
try {
|
|
77
|
-
this.ws
|
|
86
|
+
this.ws?.close(1000, 'terminal closed');
|
|
78
87
|
}
|
|
79
88
|
catch { }
|
|
89
|
+
this.ws = null;
|
|
80
90
|
}
|
|
81
91
|
get cols() { return this._cols; }
|
|
82
92
|
get rows() { return this._rows; }
|
|
@@ -112,7 +122,7 @@ export class WebSocketTerminal {
|
|
|
112
122
|
const combined = this.buffer.join('');
|
|
113
123
|
this.buffer = [];
|
|
114
124
|
try {
|
|
115
|
-
this.ws
|
|
125
|
+
this.ws?.send(JSON.stringify({ type: 'output', data: combined }));
|
|
116
126
|
}
|
|
117
127
|
catch { }
|
|
118
128
|
// [B'.3] Tee to scrollback. Runs AFTER the WS send so a thrown
|
|
@@ -161,7 +171,7 @@ export class WebSocketTerminal {
|
|
|
161
171
|
const merged = (reqId !== undefined && frame && typeof frame === 'object')
|
|
162
172
|
? { ...frame, reqId }
|
|
163
173
|
: frame;
|
|
164
|
-
this.ws
|
|
174
|
+
this.ws?.send(JSON.stringify(merged));
|
|
165
175
|
}
|
|
166
176
|
catch { }
|
|
167
177
|
};
|
|
@@ -191,29 +201,26 @@ export class WebSocketTerminal {
|
|
|
191
201
|
this.fsCallback = cb;
|
|
192
202
|
}
|
|
193
203
|
sendData(data) {
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
this.
|
|
198
|
-
return;
|
|
199
|
-
}
|
|
200
|
-
if (this.dataCallback)
|
|
201
|
-
this.dataCallback(data);
|
|
204
|
+
if (this.replBinding)
|
|
205
|
+
this.replBinding.input(data);
|
|
206
|
+
else
|
|
207
|
+
this.dataCallback?.(data);
|
|
202
208
|
}
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
*/
|
|
209
|
-
attachRepl(cb) {
|
|
210
|
-
const prior = this.replCallback;
|
|
211
|
-
this.replCallback = cb;
|
|
209
|
+
attachRepl(input, dispose) {
|
|
210
|
+
if (this.replTeardown)
|
|
211
|
+
throw new Error('Cannot attach a REPL while cleanup is running');
|
|
212
|
+
const binding = { input, dispose, previous: this.replBinding };
|
|
213
|
+
this.replBinding = binding;
|
|
212
214
|
return () => {
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
215
|
+
if (this.replBinding === binding) {
|
|
216
|
+
this.replBinding = binding.previous;
|
|
217
|
+
return;
|
|
218
|
+
}
|
|
219
|
+
let current = this.replBinding;
|
|
220
|
+
while (current && current.previous !== binding)
|
|
221
|
+
current = current.previous;
|
|
222
|
+
if (current)
|
|
223
|
+
current.previous = binding.previous;
|
|
217
224
|
};
|
|
218
225
|
}
|
|
219
226
|
focus() { }
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"network-facet.d.ts","sourceRoot":"","sources":["../../src/git/network-facet.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"network-facet.d.ts","sourceRoot":"","sources":["../../src/git/network-facet.ts"],"names":[],"mappings":"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"}
|
|
@@ -349,14 +349,15 @@ async function invokeFacet(entrypoint, phase, invocationId, body, outerDeadline,
|
|
|
349
349
|
clearTimeout(timeoutHandle);
|
|
350
350
|
}
|
|
351
351
|
}
|
|
352
|
+
const GIT_PROGRESS_ENCODER = new TextEncoder();
|
|
352
353
|
async function writeClonePhaseProgress(supervisor, diagnostic) {
|
|
353
354
|
try {
|
|
354
355
|
const rpcCount = Object.values(diagnostic.supervisorRpc)
|
|
355
356
|
.reduce((total, count) => total + count, 0);
|
|
356
357
|
const status = diagnostic.outcome === 'success' ? 'complete' : diagnostic.outcome;
|
|
357
|
-
const result = await supervisor.stdout(`\n[git] ${diagnostic.phase} ${status} ` +
|
|
358
|
+
const result = await supervisor.stdout(GIT_PROGRESS_ENCODER.encode(`\n[git] ${diagnostic.phase} ${status} ` +
|
|
358
359
|
`(invocation=${diagnostic.invocationId} wall=${diagnostic.elapsed}ms ` +
|
|
359
|
-
`w7=${diagnostic.w7Waves} rpc=${rpcCount})\n`);
|
|
360
|
+
`w7=${diagnostic.w7Waves} rpc=${rpcCount})\n`));
|
|
360
361
|
disposeRpcResource(result);
|
|
361
362
|
}
|
|
362
363
|
catch {
|
|
@@ -367,11 +368,11 @@ async function writeCloneChunkProgress(supervisor, diagnostic, chunk, progress)
|
|
|
367
368
|
try {
|
|
368
369
|
const rpcCount = Object.values(diagnostic.supervisorRpc)
|
|
369
370
|
.reduce((total, count) => total + count, 0);
|
|
370
|
-
const result = await supervisor.stdout(`\n[git] clone-checkout chunk ${chunk} complete ` +
|
|
371
|
+
const result = await supervisor.stdout(GIT_PROGRESS_ENCODER.encode(`\n[git] clone-checkout chunk ${chunk} complete ` +
|
|
371
372
|
`(entries=${progress.treeEntriesVisited} decoded=${progress.decodedBytes}B ` +
|
|
372
373
|
`index=${progress.indexEntries} continuation=${progress.nextCursor === null ? 'done' : 'yes'} ` +
|
|
373
374
|
`wall=${diagnostic.elapsed}ms w7=${diagnostic.w7Waves} rpc=${rpcCount} ` +
|
|
374
|
-
`cold=${diagnostic.cold === true ? 'yes' : 'no'})\n`);
|
|
375
|
+
`cold=${diagnostic.cold === true ? 'yes' : 'no'})\n`));
|
|
375
376
|
disposeRpcResource(result);
|
|
376
377
|
}
|
|
377
378
|
catch {
|
|
@@ -2185,7 +2186,7 @@ export default {
|
|
|
2185
2186
|
}
|
|
2186
2187
|
const log = (msg) => {
|
|
2187
2188
|
stats.supervisorRpc.stdout++;
|
|
2188
|
-
try { useRpcResult(supervisor.stdout(msg), () => undefined).catch(() => {}); } catch {}
|
|
2189
|
+
try { useRpcResult(supervisor.stdout(new TextEncoder().encode(msg)), () => undefined).catch(() => {}); } catch {}
|
|
2189
2190
|
};
|
|
2190
2191
|
|
|
2191
2192
|
// Import the pre-bundled isomorphic-git + http/web.
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { NimbusWorkspace } from '@nimbus-sh/core/workspace';
|
|
2
|
+
import type { SessionInternal } from '../session/internal.js';
|
|
3
|
+
import type { RuntimeCatalogEnv } from '../runtime/runtime-catalog.js';
|
|
4
|
+
/** Internal runtime services; callers use composeHostedRuntime, not this recipe. */
|
|
5
|
+
export type RuntimeCommandHost = Pick<SessionInternal, '_emitShellExecDone' | '_setCpRegistry' | '_viteShimPid' | '_viteShimPort' | 'cirrusReal' | 'ensureFacetManager' | 'ensureNpmInstaller' | 'ensureSqliteFs' | 'esbuildService' | 'nimbusWrangler' | 'npmInstaller' | 'portRegistry' | 'processes' | 'sessionBasePath' | 'terminal' | 'viteBasePath' | 'viteDevServer' | 'wranglerAliasBannerShown'> & {
|
|
6
|
+
readonly ctx: DurableObjectState;
|
|
7
|
+
readonly env: RuntimeCatalogEnv;
|
|
8
|
+
routeLoopback: SessionInternal['routeLoopback'];
|
|
9
|
+
ensureGlobalPrefixDirs: SessionInternal['ensureGlobalPrefixDirs'];
|
|
10
|
+
};
|
|
11
|
+
export declare function registerHostedCommands(self: RuntimeCommandHost, workspace: NimbusWorkspace): Promise<void>;
|
|
12
|
+
//# sourceMappingURL=commands.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../../src/hosted/commands.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAsB5D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAG9D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAGvE,oFAAoF;AACpF,MAAM,MAAM,kBAAkB,GAAG,IAAI,CAAC,eAAe,EACnD,oBAAoB,GAAG,gBAAgB,GAAG,cAAc,GAAG,eAAe,GAAG,YAAY,GAAG,oBAAoB,GAAG,oBAAoB,GAAG,gBAAgB,GAAG,gBAAgB,GAAG,gBAAgB,GAAG,cAAc,GAAG,cAAc,GAAG,WAAW,GAAG,iBAAiB,GAAG,UAAU,GAAG,cAAc,GAAG,eAAe,GAAG,0BAA0B,CAClV,GAAG;IACF,QAAQ,CAAC,GAAG,EAAE,kBAAkB,CAAC;IACjC,QAAQ,CAAC,GAAG,EAAE,iBAAiB,CAAC;IAChC,aAAa,EAAE,eAAe,CAAC,eAAe,CAAC,CAAC;IAChD,sBAAsB,EAAE,eAAe,CAAC,wBAAwB,CAAC,CAAC;CACnE,CAAC;AAEF,wBAAsB,sBAAsB,CAAC,IAAI,EAAE,kBAAkB,EAAE,SAAS,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CA2rDhH"}
|