@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
package/dist/session/routes.js
CHANGED
|
@@ -39,6 +39,7 @@ import { notifyTerminalEvent } from '../runtime/process-logs-api.js';
|
|
|
39
39
|
import { makeLongRunningPortStub } from '../runtime/long-running-handle.js';
|
|
40
40
|
import { getLoadedCodesStats } from './bindings.js';
|
|
41
41
|
import { renderNoDevServerHtml } from './helpers.js';
|
|
42
|
+
import { handleAgentRequest } from './agent.js';
|
|
42
43
|
// CLN-1 (2026-05-11): also import R2_CACHE_PREFIX + L2_KEY_HOST so the
|
|
43
44
|
// cache-purge helpers below don't hardcode the synthetic key shape.
|
|
44
45
|
// Bumping R2_CACHE_PREFIX 'v1' → 'v2' now invalidates the L2 cache key
|
|
@@ -95,6 +96,18 @@ export async function handleFetch(self, request) {
|
|
|
95
96
|
if (request.headers.get('Upgrade') !== 'websocket') {
|
|
96
97
|
return new Response('Expected WebSocket', { status: 426 });
|
|
97
98
|
}
|
|
99
|
+
const wsKind = url.searchParams.get('kind') || url.searchParams.get('mode');
|
|
100
|
+
if (wsKind === 'fs-watch') {
|
|
101
|
+
self.ensureSqliteFs();
|
|
102
|
+
const pair = new WebSocketPair();
|
|
103
|
+
const [client, server] = Object.values(pair);
|
|
104
|
+
self.ctx.acceptWebSocket(server);
|
|
105
|
+
try {
|
|
106
|
+
server.serializeAttachment?.({ kind: 'fs-watch' });
|
|
107
|
+
}
|
|
108
|
+
catch { }
|
|
109
|
+
return new Response(null, { status: 101, webSocket: client });
|
|
110
|
+
}
|
|
98
111
|
// [B'.5] Three-way decision on a /ws upgrade:
|
|
99
112
|
// 1. Warm rejoin: a wsClose/wsError fired earlier and left
|
|
100
113
|
// kernel/shell/terminal alive in-memory. Re-attach the
|
|
@@ -158,6 +171,9 @@ export async function handleFetch(self, request) {
|
|
|
158
171
|
if (url.pathname === '/api/processes') {
|
|
159
172
|
return handleProcessesListRequest(self.processTable, self.processLogs);
|
|
160
173
|
}
|
|
174
|
+
if (url.pathname.startsWith('/api/agent/')) {
|
|
175
|
+
return handleAgentRequest(self, request, url);
|
|
176
|
+
}
|
|
161
177
|
// runtime primitive support (P11) — kill / restart by PID for the Process tab UI.
|
|
162
178
|
//
|
|
163
179
|
// Both endpoints accept POST only. The body is empty; the PID is in the
|
|
@@ -659,10 +675,12 @@ export async function handleFetch(self, request) {
|
|
|
659
675
|
// while real-vite was happily serving on /preview/.
|
|
660
676
|
const legacyViteStats = self.viteDevServer?.stats || null;
|
|
661
677
|
const cirrusRealRunning = !!self.cirrusReal?.isRunning;
|
|
678
|
+
const cirrusRealStats = cirrusRealRunning ? self.cirrusReal?.stats : null;
|
|
662
679
|
const viteStats = cirrusRealRunning
|
|
663
680
|
? {
|
|
681
|
+
...(cirrusRealStats || {}),
|
|
664
682
|
running: true,
|
|
665
|
-
root: legacyViteStats?.root ?? 'home/user/app',
|
|
683
|
+
root: legacyViteStats?.root ?? cirrusRealStats?.root ?? 'home/user/app',
|
|
666
684
|
backend: 'real',
|
|
667
685
|
}
|
|
668
686
|
: legacyViteStats;
|
package/dist/session/rpc.d.ts
CHANGED
|
@@ -21,6 +21,7 @@
|
|
|
21
21
|
* these ~3 sites would each need ctx threaded through; cast at boundary
|
|
22
22
|
* is acceptable per plan §IX recommendation 1.
|
|
23
23
|
*/
|
|
24
|
+
import type { RuntimeOpenFlags } from '../runtime/os-contracts.js';
|
|
24
25
|
type RpcHost = any;
|
|
25
26
|
export declare function _rpcReadFile(self: RpcHost, path: string): Promise<string | null>;
|
|
26
27
|
/**
|
|
@@ -61,6 +62,15 @@ export declare function _rpcReaddir(self: RpcHost, path: string): Promise<{
|
|
|
61
62
|
}[]>;
|
|
62
63
|
export declare function _rpcExists(self: RpcHost, path: string): Promise<boolean>;
|
|
63
64
|
export declare function _rpcMkdir(self: RpcHost, path: string): Promise<void>;
|
|
65
|
+
export declare function _rpcRmdir(self: RpcHost, path: string): Promise<void>;
|
|
66
|
+
export declare function _rpcRename(self: RpcHost, from: string, to: string): Promise<void>;
|
|
67
|
+
export declare function _rpcReadlink(self: RpcHost, path: string): Promise<string | null>;
|
|
68
|
+
export declare function _rpcSymlink(self: RpcHost, target: string, path: string): Promise<void>;
|
|
69
|
+
export declare function _rpcFsRevision(self: RpcHost, path?: string): Promise<number>;
|
|
70
|
+
export declare function _rpcFsOpen(self: RpcHost, path: string, flags: RuntimeOpenFlags): Promise<any>;
|
|
71
|
+
export declare function _rpcFsRead(self: RpcHost, handleId: number, offset: number | null, length: number): Promise<Uint8Array>;
|
|
72
|
+
export declare function _rpcFsWrite(self: RpcHost, handleId: number, offset: number | null, bytes: Uint8Array | ArrayBuffer | number[]): Promise<number>;
|
|
73
|
+
export declare function _rpcFsClose(self: RpcHost, handleId: number): Promise<void>;
|
|
64
74
|
/**
|
|
65
75
|
* Called by CirrusHmrRPC.hmrSend. Runs in the DO's own context so
|
|
66
76
|
* we can legally write to hibernatable WS sockets owned by this
|
|
@@ -214,6 +224,7 @@ export declare function _rpcCpStdinWrite(self: RpcHost, childPid: number, data:
|
|
|
214
224
|
ok: boolean;
|
|
215
225
|
}>;
|
|
216
226
|
export declare function _rpcCpStdinEnd(self: RpcHost, childPid: number): Promise<void>;
|
|
227
|
+
export declare function _rpcCpReadStdin(self: RpcHost, childPid: number, waitMs: number): Promise<any>;
|
|
217
228
|
export declare function _rpcCpReadOutput(self: RpcHost, childPid: number, fd: 1 | 2, sinceSeq: number, waitMs: number): Promise<any>;
|
|
218
229
|
export declare function _rpcCpDrainOutput(self: RpcHost, childPid: number): Promise<any>;
|
|
219
230
|
export declare function _rpcCpKill(self: RpcHost, childPid: number, signal: string): Promise<boolean>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rpc.d.ts","sourceRoot":"","sources":["../../src/session/rpc.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;
|
|
1
|
+
{"version":3,"file":"rpc.d.ts","sourceRoot":"","sources":["../../src/session/rpc.ts"],"names":[],"mappings":"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"}
|
package/dist/session/rpc.js
CHANGED
|
@@ -21,22 +21,25 @@
|
|
|
21
21
|
* these ~3 sites would each need ctx threaded through; cast at boundary
|
|
22
22
|
* is acceptable per plan §IX recommendation 1.
|
|
23
23
|
*/
|
|
24
|
-
import { enc } from '../_shared/bytes.js';
|
|
24
|
+
import { enc, dec } from '../_shared/bytes.js';
|
|
25
25
|
import { getInnerDoClass } from '../facets/inner-do-registry.js';
|
|
26
26
|
import { NpmCache } from '../npm/cache.js';
|
|
27
27
|
import { EsbuildService } from '../runtime/esbuild-service.js';
|
|
28
|
+
import { SqliteRuntimeFsBridge } from '../runtime/sqlite-runtime-fs-bridge.js';
|
|
28
29
|
import { notifyTerminalEvent } from '../runtime/process-logs-api.js';
|
|
29
30
|
import { NimbusLoaderPool } from '../loaders/loader-pool.js';
|
|
30
31
|
import { recordFailure, getLastRpcFrame, getLastFacetId, } from '../observability/oom-discriminator.js';
|
|
31
32
|
import { classifyError } from '../observability/oom-classify.js';
|
|
32
|
-
|
|
33
|
+
function runtimeFs(self) {
|
|
33
34
|
self.ensureSqliteFs();
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
}
|
|
37
|
-
catch {
|
|
38
|
-
return null;
|
|
35
|
+
if (!self.runtimeFsBridge) {
|
|
36
|
+
self.runtimeFsBridge = new SqliteRuntimeFsBridge(self.sqliteFs);
|
|
39
37
|
}
|
|
38
|
+
return self.runtimeFsBridge;
|
|
39
|
+
}
|
|
40
|
+
export async function _rpcReadFile(self, path) {
|
|
41
|
+
const bytes = await runtimeFs(self).readFile(path);
|
|
42
|
+
return bytes ? dec.decode(bytes) : null;
|
|
40
43
|
}
|
|
41
44
|
/**
|
|
42
45
|
* Read a file as raw bytes (Uint8Array). Used by git network facet for
|
|
@@ -44,13 +47,7 @@ export async function _rpcReadFile(self, path) {
|
|
|
44
47
|
* round-tripping through readFile (string) would corrupt bytes.
|
|
45
48
|
*/
|
|
46
49
|
export async function _rpcReadFileBytes(self, path) {
|
|
47
|
-
self.
|
|
48
|
-
try {
|
|
49
|
-
return self.sqliteFs.readFile(path.replace(/^\/+/, ''));
|
|
50
|
-
}
|
|
51
|
-
catch {
|
|
52
|
-
return null;
|
|
53
|
-
}
|
|
50
|
+
return runtimeFs(self).readFile(path);
|
|
54
51
|
}
|
|
55
52
|
/**
|
|
56
53
|
* Phase-3 inner-DO fetch dispatcher. Called by NimbusDOStub.fetch()
|
|
@@ -111,47 +108,60 @@ export async function _rpcInnerDoFetch(self, req) {
|
|
|
111
108
|
}
|
|
112
109
|
}
|
|
113
110
|
export async function _rpcWriteFile(self, path, content) {
|
|
114
|
-
self.ensureSqliteFs();
|
|
115
|
-
const p = path.replace(/^\/+/, '');
|
|
116
|
-
const parts = p.split('/');
|
|
117
|
-
for (let i = 1; i < parts.length; i++) {
|
|
118
|
-
const dir = parts.slice(0, i).join('/');
|
|
119
|
-
if (dir && !self.sqliteFs.exists(dir))
|
|
120
|
-
self.sqliteFs.mkdir(dir, { recursive: true });
|
|
121
|
-
}
|
|
122
111
|
// binary-fs wave: SqliteVFS.writeFile already accepts string | Uint8Array
|
|
123
112
|
// (sqlite-vfs.ts:937), so we forward the content shape unchanged. RPC
|
|
124
113
|
// structured-clone preserves Uint8Array across the boundary; structured-
|
|
125
114
|
// clone doesn't accept Buffer subclass instances, so fs.writeFileSync on
|
|
126
115
|
// a Buffer flows through node-shims.ts:writeFileSync which stores it as
|
|
127
116
|
// a plain Uint8Array on the cell — the shape that arrives here.
|
|
128
|
-
self.
|
|
117
|
+
await runtimeFs(self).writeFile(path, content);
|
|
129
118
|
}
|
|
130
119
|
export async function _rpcStat(self, path) {
|
|
131
|
-
self.
|
|
132
|
-
try {
|
|
133
|
-
return self.sqliteFs.stat(path.replace(/^\/+/, ''));
|
|
134
|
-
}
|
|
135
|
-
catch {
|
|
136
|
-
return null;
|
|
137
|
-
}
|
|
120
|
+
return runtimeFs(self).stat(path);
|
|
138
121
|
}
|
|
139
122
|
export async function _rpcReaddir(self, path) {
|
|
140
|
-
self.
|
|
141
|
-
try {
|
|
142
|
-
return self.sqliteFs.readdir(path.replace(/^\/+/, ''));
|
|
143
|
-
}
|
|
144
|
-
catch {
|
|
145
|
-
return [];
|
|
146
|
-
}
|
|
123
|
+
return runtimeFs(self).readdir(path);
|
|
147
124
|
}
|
|
148
125
|
export async function _rpcExists(self, path) {
|
|
149
|
-
self.
|
|
150
|
-
return self.sqliteFs.exists(path.replace(/^\/+/, ''));
|
|
126
|
+
return (await runtimeFs(self).stat(path)) !== null;
|
|
151
127
|
}
|
|
152
128
|
export async function _rpcMkdir(self, path) {
|
|
153
|
-
self.
|
|
154
|
-
|
|
129
|
+
await runtimeFs(self).mkdir(path, { recursive: true });
|
|
130
|
+
}
|
|
131
|
+
export async function _rpcRmdir(self, path) {
|
|
132
|
+
await runtimeFs(self).rmdir(path);
|
|
133
|
+
}
|
|
134
|
+
export async function _rpcRename(self, from, to) {
|
|
135
|
+
await runtimeFs(self).rename(from, to);
|
|
136
|
+
}
|
|
137
|
+
export async function _rpcReadlink(self, path) {
|
|
138
|
+
return runtimeFs(self).readlink(path);
|
|
139
|
+
}
|
|
140
|
+
export async function _rpcSymlink(self, target, path) {
|
|
141
|
+
await runtimeFs(self).symlink(target, path);
|
|
142
|
+
}
|
|
143
|
+
export async function _rpcFsRevision(self, path) {
|
|
144
|
+
void path;
|
|
145
|
+
return runtimeFs(self).revision();
|
|
146
|
+
}
|
|
147
|
+
export async function _rpcFsOpen(self, path, flags) {
|
|
148
|
+
return runtimeFs(self).open(path, flags || {});
|
|
149
|
+
}
|
|
150
|
+
export async function _rpcFsRead(self, handleId, offset, length) {
|
|
151
|
+
return runtimeFs(self).read(handleId, offset, length);
|
|
152
|
+
}
|
|
153
|
+
export async function _rpcFsWrite(self, handleId, offset, bytes) {
|
|
154
|
+
let data;
|
|
155
|
+
if (bytes instanceof Uint8Array)
|
|
156
|
+
data = bytes;
|
|
157
|
+
else if (bytes instanceof ArrayBuffer)
|
|
158
|
+
data = new Uint8Array(bytes);
|
|
159
|
+
else
|
|
160
|
+
data = new Uint8Array(bytes || []);
|
|
161
|
+
return runtimeFs(self).write(handleId, offset, data);
|
|
162
|
+
}
|
|
163
|
+
export async function _rpcFsClose(self, handleId) {
|
|
164
|
+
await runtimeFs(self).close(handleId);
|
|
155
165
|
}
|
|
156
166
|
/**
|
|
157
167
|
* Called by CirrusHmrRPC.hmrSend. Runs in the DO's own context so
|
|
@@ -164,9 +174,8 @@ export async function _rpcHmrRelay(self, clientId, msg) {
|
|
|
164
174
|
self.cirrusReal.hmr.relayToBrowser(clientId, msg);
|
|
165
175
|
}
|
|
166
176
|
export async function _rpcUnlink(self, path) {
|
|
167
|
-
self.ensureSqliteFs();
|
|
168
177
|
try {
|
|
169
|
-
self.
|
|
178
|
+
await runtimeFs(self).unlink(path);
|
|
170
179
|
}
|
|
171
180
|
catch { }
|
|
172
181
|
}
|
|
@@ -610,6 +619,10 @@ export async function _rpcCpStdinEnd(self, childPid) {
|
|
|
610
619
|
const fpm = self._ensureFacetProcessManager();
|
|
611
620
|
fpm.stdinEnd(childPid);
|
|
612
621
|
}
|
|
622
|
+
export async function _rpcCpReadStdin(self, childPid, waitMs) {
|
|
623
|
+
const fpm = self._ensureFacetProcessManager();
|
|
624
|
+
return fpm.cpReadStdin(childPid, waitMs);
|
|
625
|
+
}
|
|
613
626
|
export async function _rpcCpReadOutput(self, childPid, fd, sinceSeq, waitMs) {
|
|
614
627
|
const fpm = self._ensureFacetProcessManager();
|
|
615
628
|
return fpm.readOutput(childPid, fd, sinceSeq, waitMs);
|
|
@@ -16,6 +16,8 @@
|
|
|
16
16
|
* exists(path) → boolean
|
|
17
17
|
* mkdir(path) → void
|
|
18
18
|
* unlink(path) → void
|
|
19
|
+
* fsOpen/fsRead/fsWrite/fsClose/readlink/symlink/rename/rmdir/fsRevision
|
|
20
|
+
* → shared RuntimeFsBridge operations
|
|
19
21
|
* writeBatch(payload) → { inodes, chunks } (bulk atomic write)
|
|
20
22
|
* stdout(data) → void (pushed to WebSocket + ring buffer)
|
|
21
23
|
* stderr(data) → void
|
|
@@ -74,7 +76,16 @@ export declare class SupervisorRPC extends WorkerEntrypoint {
|
|
|
74
76
|
}[]>;
|
|
75
77
|
exists(path: string): Promise<boolean>;
|
|
76
78
|
mkdir(path: string): Promise<void>;
|
|
79
|
+
rmdir(path: string): Promise<void>;
|
|
80
|
+
rename(from: string, to: string): Promise<void>;
|
|
77
81
|
unlink(path: string): Promise<void>;
|
|
82
|
+
readlink(path: string): Promise<string | null>;
|
|
83
|
+
symlink(target: string, path: string): Promise<void>;
|
|
84
|
+
fsRevision(path?: string): Promise<number>;
|
|
85
|
+
fsOpen(path: string, flags: any): Promise<any>;
|
|
86
|
+
fsRead(handleId: number, offset: number | null, length: number): Promise<Uint8Array>;
|
|
87
|
+
fsWrite(handleId: number, offset: number | null, bytes: Uint8Array | ArrayBuffer | number[]): Promise<number>;
|
|
88
|
+
fsClose(handleId: number): Promise<void>;
|
|
78
89
|
/**
|
|
79
90
|
* Bulk-write all inodes + chunks in ONE transactionSync on the supervisor.
|
|
80
91
|
* Used by facets that buffer writes locally (git clone/fetch/pull).
|
|
@@ -231,6 +242,10 @@ export declare class SupervisorRPC extends WorkerEntrypoint {
|
|
|
231
242
|
ok: boolean;
|
|
232
243
|
}>;
|
|
233
244
|
cpStdinEnd(childPid: number): Promise<void>;
|
|
245
|
+
cpReadStdin(childPid: number, waitMs: number): Promise<{
|
|
246
|
+
data: string;
|
|
247
|
+
ended: boolean;
|
|
248
|
+
}>;
|
|
234
249
|
cpReadOutput(childPid: number, fd: 1 | 2, sinceSeq: number, waitMs: number): Promise<{
|
|
235
250
|
chunks: {
|
|
236
251
|
seq: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"supervisor-rpc.d.ts","sourceRoot":"","sources":["../../src/session/supervisor-rpc.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"supervisor-rpc.d.ts","sourceRoot":"","sources":["../../src/session/supervisor-rpc.ts"],"names":[],"mappings":"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"}
|
|
@@ -16,6 +16,8 @@
|
|
|
16
16
|
* exists(path) → boolean
|
|
17
17
|
* mkdir(path) → void
|
|
18
18
|
* unlink(path) → void
|
|
19
|
+
* fsOpen/fsRead/fsWrite/fsClose/readlink/symlink/rename/rmdir/fsRevision
|
|
20
|
+
* → shared RuntimeFsBridge operations
|
|
19
21
|
* writeBatch(payload) → { inodes, chunks } (bulk atomic write)
|
|
20
22
|
* stdout(data) → void (pushed to WebSocket + ring buffer)
|
|
21
23
|
* stderr(data) → void
|
|
@@ -125,9 +127,36 @@ export class SupervisorRPC extends WorkerEntrypoint {
|
|
|
125
127
|
async mkdir(path) {
|
|
126
128
|
return this._getStub()._rpcMkdir(path);
|
|
127
129
|
}
|
|
130
|
+
async rmdir(path) {
|
|
131
|
+
return this._getStub()._rpcRmdir(path);
|
|
132
|
+
}
|
|
133
|
+
async rename(from, to) {
|
|
134
|
+
return this._getStub()._rpcRename(from, to);
|
|
135
|
+
}
|
|
128
136
|
async unlink(path) {
|
|
129
137
|
return this._getStub()._rpcUnlink(path);
|
|
130
138
|
}
|
|
139
|
+
async readlink(path) {
|
|
140
|
+
return this._getStub()._rpcReadlink(path);
|
|
141
|
+
}
|
|
142
|
+
async symlink(target, path) {
|
|
143
|
+
return this._getStub()._rpcSymlink(target, path);
|
|
144
|
+
}
|
|
145
|
+
async fsRevision(path) {
|
|
146
|
+
return this._getStub()._rpcFsRevision(path);
|
|
147
|
+
}
|
|
148
|
+
async fsOpen(path, flags) {
|
|
149
|
+
return this._getStub()._rpcFsOpen(path, flags);
|
|
150
|
+
}
|
|
151
|
+
async fsRead(handleId, offset, length) {
|
|
152
|
+
return this._getStub()._rpcFsRead(handleId, offset, length);
|
|
153
|
+
}
|
|
154
|
+
async fsWrite(handleId, offset, bytes) {
|
|
155
|
+
return this._getStub()._rpcFsWrite(handleId, offset, bytes);
|
|
156
|
+
}
|
|
157
|
+
async fsClose(handleId) {
|
|
158
|
+
return this._getStub()._rpcFsClose(handleId);
|
|
159
|
+
}
|
|
131
160
|
/**
|
|
132
161
|
* Bulk-write all inodes + chunks in ONE transactionSync on the supervisor.
|
|
133
162
|
* Used by facets that buffer writes locally (git clone/fetch/pull).
|
|
@@ -407,6 +436,9 @@ export class SupervisorRPC extends WorkerEntrypoint {
|
|
|
407
436
|
async cpStdinEnd(childPid) {
|
|
408
437
|
return this._getStub()._rpcCpStdinEnd(childPid);
|
|
409
438
|
}
|
|
439
|
+
async cpReadStdin(childPid, waitMs) {
|
|
440
|
+
return this._getStub()._rpcCpReadStdin(childPid, waitMs);
|
|
441
|
+
}
|
|
410
442
|
async cpReadOutput(childPid, fd, sinceSeq, waitMs) {
|
|
411
443
|
return this._getStub()._rpcCpReadOutput(childPid, fd, sinceSeq, waitMs);
|
|
412
444
|
}
|
package/dist/session/ws.d.ts
CHANGED
|
@@ -52,8 +52,8 @@ export interface WsHost {
|
|
|
52
52
|
/** file-tree-watch (2026-05-15): per-WS fs-watch subscriptions.
|
|
53
53
|
* Keyed on the live WebSocket; cleaned up unconditionally in
|
|
54
54
|
* wsClose / wsError. See src/session/fs-watch.ts for the protocol
|
|
55
|
-
* + lifecycle. Optional (undefined) until first subscribe so
|
|
56
|
-
*
|
|
55
|
+
* + lifecycle. Optional (undefined) until first subscribe so sessions
|
|
56
|
+
* that never open the file tree carry no watch state. */
|
|
57
57
|
_fsWatchSubs?: Map<WebSocket, FsWatchSub[]>;
|
|
58
58
|
processLogs: ProcessLogStore;
|
|
59
59
|
wranglerAliasBannerShown: boolean;
|
|
@@ -75,7 +75,8 @@ export interface WsHost {
|
|
|
75
75
|
/**
|
|
76
76
|
* Classify a closing/erroring WebSocket by its serialized attachment.
|
|
77
77
|
* Shell sockets carry `{kind:'shell'}` (set at the /ws upgrade site);
|
|
78
|
-
*
|
|
78
|
+
* watcher sockets carry `{kind:'fs-watch'}`; HMR sockets carry
|
|
79
|
+
* `{kind:'cirrus-hmr', clientId}` (set at :1240).
|
|
79
80
|
* Any other (undefined/unknown) attachment falls back to 'shell' to
|
|
80
81
|
* preserve pre-F1 behaviour for legacy accept sites.
|
|
81
82
|
*/
|
package/dist/session/ws.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ws.d.ts","sourceRoot":"","sources":["../../src/session/ws.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AAMH,OAAO,EAIL,KAAK,UAAU,EAChB,MAAM,eAAe,CAAC;AACvB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAEnD;;;GAGG;AACH,MAAM,WAAW,MAAM;IACrB,QAAQ,EAAE,SAAS,GAAG,IAAI,CAAC;IAC3B,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACpB,QAAQ,EAAE,iBAAiB,GAAG,IAAI,CAAC;IACnC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,UAAU,EAAE,UAAU,GAAG,IAAI,CAAC;IAC9B,mBAAmB,EAAE,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC;IACnD;;;;
|
|
1
|
+
{"version":3,"file":"ws.d.ts","sourceRoot":"","sources":["../../src/session/ws.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AAMH,OAAO,EAIL,KAAK,UAAU,EAChB,MAAM,eAAe,CAAC;AACvB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAEnD;;;GAGG;AACH,MAAM,WAAW,MAAM;IACrB,QAAQ,EAAE,SAAS,GAAG,IAAI,CAAC;IAC3B,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACpB,QAAQ,EAAE,iBAAiB,GAAG,IAAI,CAAC;IACnC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,UAAU,EAAE,UAAU,GAAG,IAAI,CAAC;IAC9B,mBAAmB,EAAE,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC;IACnD;;;;8DAI0D;IAC1D,YAAY,CAAC,EAAE,GAAG,CAAC,SAAS,EAAE,UAAU,EAAE,CAAC,CAAC;IAC5C,WAAW,EAAE,eAAe,CAAC;IAC7B,wBAAwB,EAAE,OAAO,CAAC;IAClC,eAAe,EAAE,OAAO,CAAC;IACzB,aAAa,EAAE,GAAG,CAAC;IACnB,aAAa,EAAE,OAAO,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,sBAAsB,EAAE,OAAO,CAAC;IAChC,WAAW,EAAE,GAAG,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,gBAAgB,EAAE,MAAM,CAAC;IACzB,sBAAsB,EAAE,MAAM,CAAC;IAC/B,qEAAqE;IACrE,QAAQ,EAAE,OAAO,uCAAuC,EAAE,YAAY,GAAG,IAAI,CAAC;IAC9E,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IACvC,eAAe,IAAI,IAAI,CAAC;CACzB;AAgDD;;;;;;;GAOG;AACH,wBAAgB,MAAM,CAAC,EAAE,EAAE,SAAS,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,CAQzE;AAED,wBAAsB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,GAAG,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAqEzG;AAED,wBAAsB,OAAO,CAC3B,IAAI,EAAE,MAAM,EACZ,EAAE,EAAE,SAAS,EACb,KAAK,CAAC,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,MAAM,EAChB,SAAS,CAAC,EAAE,OAAO,GAClB,OAAO,CAAC,IAAI,CAAC,CAuGf;AAED,wBAAsB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CA+EtF;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAUlD"}
|
package/dist/session/ws.js
CHANGED
|
@@ -92,7 +92,8 @@ function snapshotShellState(self) {
|
|
|
92
92
|
/**
|
|
93
93
|
* Classify a closing/erroring WebSocket by its serialized attachment.
|
|
94
94
|
* Shell sockets carry `{kind:'shell'}` (set at the /ws upgrade site);
|
|
95
|
-
*
|
|
95
|
+
* watcher sockets carry `{kind:'fs-watch'}`; HMR sockets carry
|
|
96
|
+
* `{kind:'cirrus-hmr', clientId}` (set at :1240).
|
|
96
97
|
* Any other (undefined/unknown) attachment falls back to 'shell' to
|
|
97
98
|
* preserve pre-F1 behaviour for legacy accept sites.
|
|
98
99
|
*/
|
|
@@ -163,6 +164,9 @@ export async function wsMessage(self, ws, message) {
|
|
|
163
164
|
}
|
|
164
165
|
return;
|
|
165
166
|
}
|
|
167
|
+
if (attach?.kind === 'fs-watch') {
|
|
168
|
+
return;
|
|
169
|
+
}
|
|
166
170
|
if (self.terminal)
|
|
167
171
|
self.terminal.handleMessage(msg);
|
|
168
172
|
// ── B'.1 snapshot ───────────────────────────────────────────────
|
|
@@ -199,6 +203,9 @@ export async function wsClose(self, ws, _code, _reason, _wasClean) {
|
|
|
199
203
|
if (att.kind === 'process-logs') {
|
|
200
204
|
return;
|
|
201
205
|
}
|
|
206
|
+
if (att.kind === 'fs-watch') {
|
|
207
|
+
return;
|
|
208
|
+
}
|
|
202
209
|
if (att.kind === 'cirrus-hmr') {
|
|
203
210
|
// HMR socket closed. Detach from the bridge + drop from the map.
|
|
204
211
|
// Do NOT touch shell/terminal/kernel — the user's terminal tab
|
|
@@ -301,6 +308,9 @@ export async function wsError(self, ws, _error) {
|
|
|
301
308
|
if (att.kind === 'process-logs') {
|
|
302
309
|
return;
|
|
303
310
|
}
|
|
311
|
+
if (att.kind === 'fs-watch') {
|
|
312
|
+
return;
|
|
313
|
+
}
|
|
304
314
|
if (att.kind === 'cirrus-hmr') {
|
|
305
315
|
try {
|
|
306
316
|
const clientId = att.clientId || self._cirrusHmrWsClients?.get(ws);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"unix-commands.d.ts","sourceRoot":"","sources":["../../src/shell/unix-commands.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"unix-commands.d.ts","sourceRoot":"","sources":["../../src/shell/unix-commands.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AA09FtD,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,GAAG,EACb,GAAG,EAAE,SAAS,GACb,IAAI,CAoLN"}
|