@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/README.md
CHANGED
|
@@ -215,6 +215,43 @@ await box.startProcess('node --watch /home/user/app/server.js');
|
|
|
215
215
|
const port = await box.ports.expose(3000);
|
|
216
216
|
```
|
|
217
217
|
|
|
218
|
+
## Session Agent
|
|
219
|
+
|
|
220
|
+
The bundled session shell includes an Agent surface inside the editor
|
|
221
|
+
workspace. The route lives inside the session Durable Object under
|
|
222
|
+
`/api/agent/*`; the stable Cloudflare OAuth callback is
|
|
223
|
+
`/api/nimbus/oauth/callback`.
|
|
224
|
+
|
|
225
|
+
The agent can use the same session tools as the SDK: shell exec, files,
|
|
226
|
+
runtime installs, long-running processes, logs, and preview ports. Model calls
|
|
227
|
+
use the AI SDK with Cloudflare Workers AI's OpenAI-compatible endpoint and an
|
|
228
|
+
optional AI Gateway name.
|
|
229
|
+
|
|
230
|
+
For user-owned quota, create a Cloudflare OAuth client with response type
|
|
231
|
+
`Code`, grant type `Authorization Code`, token authentication method `None`,
|
|
232
|
+
and redirect URL `https://<your-nimbus-host>/api/nimbus/oauth/callback`.
|
|
233
|
+
Nimbus uses PKCE and stores user OAuth tokens only in encrypted `HttpOnly`,
|
|
234
|
+
`Secure`, `SameSite=Lax` browser cookies scoped to the session URL.
|
|
235
|
+
|
|
236
|
+
Non-secret values can be generated with `@nimbus-sh/config` or written as
|
|
237
|
+
`vars`:
|
|
238
|
+
|
|
239
|
+
| Var | What |
|
|
240
|
+
|---|---|
|
|
241
|
+
| `NIMBUS_CF_OAUTH_CLIENT_ID` | Cloudflare OAuth client ID. |
|
|
242
|
+
| `NIMBUS_CF_OAUTH_SCOPES` | Space-delimited Cloudflare OAuth scope IDs. |
|
|
243
|
+
| `NIMBUS_CF_OAUTH_REDIRECT_URI` | Optional callback override; default is `<origin>/api/nimbus/oauth/callback`. |
|
|
244
|
+
| `NIMBUS_CLOUDFLARE_ACCOUNT_ID` | Owner-token fallback account ID. |
|
|
245
|
+
| `NIMBUS_AGENT_MODEL` | Workers AI model, default `@cf/moonshotai/kimi-k2.6`. |
|
|
246
|
+
| `NIMBUS_AGENT_GATEWAY_ID` | AI Gateway name, default `default`. |
|
|
247
|
+
|
|
248
|
+
Secrets stay in Workers secret storage:
|
|
249
|
+
|
|
250
|
+
```bash
|
|
251
|
+
npx wrangler secret put NIMBUS_AGENT_COOKIE_SECRET
|
|
252
|
+
npx wrangler secret put NIMBUS_CLOUDFLARE_API_TOKEN
|
|
253
|
+
```
|
|
254
|
+
|
|
218
255
|
### Hooks
|
|
219
256
|
|
|
220
257
|
```ts
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export interface SealedJsonOptions {
|
|
2
|
+
purpose?: string;
|
|
3
|
+
minSecretLength?: number;
|
|
4
|
+
}
|
|
5
|
+
export declare function randomBase64Url(byteLength: number): string;
|
|
6
|
+
export declare function sha256Base64Url(input: string): Promise<string>;
|
|
7
|
+
export declare function pkceChallenge(verifier: string): Promise<string>;
|
|
8
|
+
export declare function sealJson(value: unknown, secret: string, options?: SealedJsonOptions): Promise<string>;
|
|
9
|
+
export declare function unsealJson<T>(value: string, secret: string, options?: SealedJsonOptions): Promise<T | null>;
|
|
10
|
+
export declare function encodeJsonBase64Url(value: unknown): string;
|
|
11
|
+
export declare function decodeJsonBase64Url<T>(value: string): T;
|
|
12
|
+
export declare function base64Url(bytes: Uint8Array): string;
|
|
13
|
+
export declare function base64UrlDecode(value: string): Uint8Array;
|
|
14
|
+
export declare function base64Utf8(value: string): string;
|
|
15
|
+
//# sourceMappingURL=crypto.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"crypto.d.ts","sourceRoot":"","sources":["../../src/_shared/crypto.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,iBAAiB;IAChC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,wBAAgB,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAI1D;AAED,wBAAsB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAGpE;AAED,wBAAsB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAErE;AAED,wBAAsB,QAAQ,CAC5B,KAAK,EAAE,OAAO,EACd,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,iBAAsB,GAC9B,OAAO,CAAC,MAAM,CAAC,CAejB;AAED,wBAAsB,UAAU,CAAC,CAAC,EAChC,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,iBAAsB,GAC9B,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CA6BnB;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAE1D;AAED,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,GAAG,CAAC,CAEvD;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,CAUnD;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU,CASzD;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAQhD"}
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
const textEncoder = new TextEncoder();
|
|
2
|
+
const textDecoder = new TextDecoder();
|
|
3
|
+
const SEALED_JSON_V2 = 'v2.';
|
|
4
|
+
const SEALED_JSON_V1 = 'v1.';
|
|
5
|
+
const HKDF_SALT = textEncoder.encode('nimbus-sh sealed-json v2');
|
|
6
|
+
const BASE64URL_RE = /^[A-Za-z0-9_-]*$/;
|
|
7
|
+
export function randomBase64Url(byteLength) {
|
|
8
|
+
const bytes = new Uint8Array(byteLength);
|
|
9
|
+
crypto.getRandomValues(bytes);
|
|
10
|
+
return base64Url(bytes);
|
|
11
|
+
}
|
|
12
|
+
export async function sha256Base64Url(input) {
|
|
13
|
+
const digest = await crypto.subtle.digest('SHA-256', textEncoder.encode(input));
|
|
14
|
+
return base64Url(new Uint8Array(digest));
|
|
15
|
+
}
|
|
16
|
+
export async function pkceChallenge(verifier) {
|
|
17
|
+
return sha256Base64Url(verifier);
|
|
18
|
+
}
|
|
19
|
+
export async function sealJson(value, secret, options = {}) {
|
|
20
|
+
const purpose = normalizePurpose(options.purpose);
|
|
21
|
+
const key = await hkdfAesGcmKey(secret, purpose, options.minSecretLength);
|
|
22
|
+
const iv = new Uint8Array(12);
|
|
23
|
+
crypto.getRandomValues(iv);
|
|
24
|
+
const plaintext = textEncoder.encode(JSON.stringify(value));
|
|
25
|
+
const ciphertext = new Uint8Array(await crypto.subtle.encrypt({ name: 'AES-GCM', iv, additionalData: aad(purpose) }, key, plaintext));
|
|
26
|
+
const packed = new Uint8Array(iv.length + ciphertext.length);
|
|
27
|
+
packed.set(iv, 0);
|
|
28
|
+
packed.set(ciphertext, iv.length);
|
|
29
|
+
return SEALED_JSON_V2 + base64Url(packed);
|
|
30
|
+
}
|
|
31
|
+
export async function unsealJson(value, secret, options = {}) {
|
|
32
|
+
if (value.startsWith(SEALED_JSON_V2)) {
|
|
33
|
+
const purpose = normalizePurpose(options.purpose);
|
|
34
|
+
const packed = base64UrlDecode(value.slice(SEALED_JSON_V2.length));
|
|
35
|
+
if (packed.length <= 12)
|
|
36
|
+
return null;
|
|
37
|
+
const iv = packed.slice(0, 12);
|
|
38
|
+
const ciphertext = packed.slice(12);
|
|
39
|
+
const key = await hkdfAesGcmKey(secret, purpose, options.minSecretLength);
|
|
40
|
+
const plaintext = await crypto.subtle.decrypt({ name: 'AES-GCM', iv, additionalData: aad(purpose) }, key, ciphertext);
|
|
41
|
+
return JSON.parse(textDecoder.decode(plaintext));
|
|
42
|
+
}
|
|
43
|
+
// Backward compatibility for the original agent OAuth cookie format.
|
|
44
|
+
// New cookies are always v2 and purpose-bound through AES-GCM AAD.
|
|
45
|
+
if (value.startsWith(SEALED_JSON_V1)) {
|
|
46
|
+
const packed = base64UrlDecode(value.slice(SEALED_JSON_V1.length));
|
|
47
|
+
if (packed.length <= 12)
|
|
48
|
+
return null;
|
|
49
|
+
const iv = packed.slice(0, 12);
|
|
50
|
+
const ciphertext = packed.slice(12);
|
|
51
|
+
const key = await legacyShaAesGcmKey(secret, options.minSecretLength);
|
|
52
|
+
const plaintext = await crypto.subtle.decrypt({ name: 'AES-GCM', iv }, key, ciphertext);
|
|
53
|
+
return JSON.parse(textDecoder.decode(plaintext));
|
|
54
|
+
}
|
|
55
|
+
return null;
|
|
56
|
+
}
|
|
57
|
+
export function encodeJsonBase64Url(value) {
|
|
58
|
+
return base64Url(textEncoder.encode(JSON.stringify(value)));
|
|
59
|
+
}
|
|
60
|
+
export function decodeJsonBase64Url(value) {
|
|
61
|
+
return JSON.parse(textDecoder.decode(base64UrlDecode(value)));
|
|
62
|
+
}
|
|
63
|
+
export function base64Url(bytes) {
|
|
64
|
+
let binary = '';
|
|
65
|
+
const chunk = 0x8000;
|
|
66
|
+
for (let i = 0; i < bytes.length; i += chunk) {
|
|
67
|
+
binary += String.fromCharCode(...bytes.subarray(i, i + chunk));
|
|
68
|
+
}
|
|
69
|
+
return btoa(binary)
|
|
70
|
+
.replace(/\+/g, '-')
|
|
71
|
+
.replace(/\//g, '_')
|
|
72
|
+
.replace(/=+$/g, '');
|
|
73
|
+
}
|
|
74
|
+
export function base64UrlDecode(value) {
|
|
75
|
+
if (!BASE64URL_RE.test(value) || value.length % 4 === 1) {
|
|
76
|
+
throw new Error('Invalid base64url input');
|
|
77
|
+
}
|
|
78
|
+
const padded = value.replace(/-/g, '+').replace(/_/g, '/').padEnd(Math.ceil(value.length / 4) * 4, '=');
|
|
79
|
+
const binary = atob(padded);
|
|
80
|
+
const bytes = new Uint8Array(binary.length);
|
|
81
|
+
for (let i = 0; i < binary.length; i++)
|
|
82
|
+
bytes[i] = binary.charCodeAt(i);
|
|
83
|
+
return bytes;
|
|
84
|
+
}
|
|
85
|
+
export function base64Utf8(value) {
|
|
86
|
+
const bytes = textEncoder.encode(value);
|
|
87
|
+
let binary = '';
|
|
88
|
+
const chunk = 0x8000;
|
|
89
|
+
for (let i = 0; i < bytes.length; i += chunk) {
|
|
90
|
+
binary += String.fromCharCode(...bytes.subarray(i, i + chunk));
|
|
91
|
+
}
|
|
92
|
+
return btoa(binary);
|
|
93
|
+
}
|
|
94
|
+
async function hkdfAesGcmKey(secret, purpose, minSecretLength = 32) {
|
|
95
|
+
assertSecret(secret, minSecretLength);
|
|
96
|
+
const material = await crypto.subtle.importKey('raw', textEncoder.encode(secret), 'HKDF', false, ['deriveKey']);
|
|
97
|
+
return crypto.subtle.deriveKey({
|
|
98
|
+
name: 'HKDF',
|
|
99
|
+
hash: 'SHA-256',
|
|
100
|
+
salt: HKDF_SALT,
|
|
101
|
+
info: textEncoder.encode(purpose),
|
|
102
|
+
}, material, { name: 'AES-GCM', length: 256 }, false, ['encrypt', 'decrypt']);
|
|
103
|
+
}
|
|
104
|
+
async function legacyShaAesGcmKey(secret, minSecretLength = 32) {
|
|
105
|
+
assertSecret(secret, minSecretLength);
|
|
106
|
+
const digest = await crypto.subtle.digest('SHA-256', textEncoder.encode(secret));
|
|
107
|
+
return crypto.subtle.importKey('raw', digest, 'AES-GCM', false, ['decrypt']);
|
|
108
|
+
}
|
|
109
|
+
function assertSecret(secret, minSecretLength) {
|
|
110
|
+
if (!secret || secret.length < minSecretLength) {
|
|
111
|
+
throw new Error(`Sealed JSON secret must be ${minSecretLength}+ characters`);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
function normalizePurpose(purpose) {
|
|
115
|
+
const value = (purpose || 'default').trim();
|
|
116
|
+
if (!value)
|
|
117
|
+
return 'default';
|
|
118
|
+
return value.slice(0, 128);
|
|
119
|
+
}
|
|
120
|
+
function aad(purpose) {
|
|
121
|
+
return textEncoder.encode(`nimbus-sh:${purpose}:sealed-json:v2`);
|
|
122
|
+
}
|
package/dist/facets/manager.d.ts
CHANGED
|
@@ -179,6 +179,11 @@ export interface FacetManagerHooks {
|
|
|
179
179
|
/** Fired right after processTable.spawn — lets the session print a notification. */
|
|
180
180
|
onSpawn?: (pid: number, command: string, longRunning: boolean) => void;
|
|
181
181
|
}
|
|
182
|
+
export interface LongRunningWorkerSpawnOptions {
|
|
183
|
+
port?: number;
|
|
184
|
+
modules?: Record<string, any>;
|
|
185
|
+
compatibilityFlags?: string[];
|
|
186
|
+
}
|
|
182
187
|
export declare class FacetManager {
|
|
183
188
|
private ctx;
|
|
184
189
|
private env;
|
|
@@ -218,6 +223,7 @@ export declare class FacetManager {
|
|
|
218
223
|
cwd?: string;
|
|
219
224
|
filename?: string;
|
|
220
225
|
dirname?: string;
|
|
226
|
+
stdin?: string;
|
|
221
227
|
/**
|
|
222
228
|
* G4 (runtime-pkg wave): caller-supplied display label for the
|
|
223
229
|
* processTable entry. When set, takes precedence over the
|
|
@@ -237,6 +243,9 @@ export declare class FacetManager {
|
|
|
237
243
|
skipSpawn?: boolean;
|
|
238
244
|
/** G4: when skipSpawn is true, the PID the caller allocated. */
|
|
239
245
|
callerPid?: number;
|
|
246
|
+
/** Return stdout/stderr in the result while keeping supervisor RPC
|
|
247
|
+
* available for VFS and child_process operations. */
|
|
248
|
+
captureOutput?: boolean;
|
|
240
249
|
}): Promise<FacetExecResult>;
|
|
241
250
|
/**
|
|
242
251
|
* W5 Lever 5: push a DiagFailure into the OOM ring for every facet
|
|
@@ -300,6 +309,21 @@ export declare class FacetManager {
|
|
|
300
309
|
pid: number;
|
|
301
310
|
facetStub: any;
|
|
302
311
|
};
|
|
312
|
+
/**
|
|
313
|
+
* Spawn a long-running dynamic Worker and register its routeable port.
|
|
314
|
+
*
|
|
315
|
+
* This is the shared primitive for any runtime that exposes
|
|
316
|
+
* handleHttpRequest(Request): Node facets, Vite adapters, Python virtual
|
|
317
|
+
* sockets, and future WASI socket servers should use
|
|
318
|
+
* this path instead of each owning process-table and PortRegistry plumbing.
|
|
319
|
+
*/
|
|
320
|
+
spawnWorker(workerCode: string, command: string, cwd: string, opts?: LongRunningWorkerSpawnOptions): {
|
|
321
|
+
pid: number;
|
|
322
|
+
facetStub: any;
|
|
323
|
+
};
|
|
324
|
+
registerPort(pid: number, port: number, facetStub: any): void;
|
|
325
|
+
attachReservedPorts(pid: number, facetStub: any): number[];
|
|
326
|
+
finishProcess(pid: number, exitCode: number, reason?: string): void;
|
|
303
327
|
/** Kill a running process by PID. */
|
|
304
328
|
kill(pid: number): boolean;
|
|
305
329
|
get stats(): {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../src/facets/manager.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AAEH,OAAO,EAAE,YAAY,EAAqB,MAAM,6BAA6B,CAAC;AAG9E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAKhE,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAO/D,6CAA6C;AAC7C,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf;;;;;;;;OAQG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CAC1E;
|
|
1
|
+
{"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../src/facets/manager.ts"],"names":[],"mappings":"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"}
|