@nimbus-sh/sdk 0.4.0 → 0.6.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 CHANGED
@@ -120,9 +120,9 @@ export default {
120
120
  subject: 'agent',
121
121
  });
122
122
 
123
- await box.files.write('/home/user/app/main.py', 'print(2 + 2)\n');
123
+ await box.files.write('/home/user/example-app/main.py', 'print(2 + 2)\n');
124
124
  await box.runtimes.ensure('python');
125
- const result = await box.exec('python /home/user/app/main.py');
125
+ const result = await box.exec('python /home/user/example-app/main.py');
126
126
 
127
127
  return Response.json(result);
128
128
  },
@@ -208,20 +208,20 @@ const box = nimbus.sandbox('session-or-job-id', {
208
208
 
209
209
  await box.ready();
210
210
  await box.exec('node -e "console.log(2 + 2)"');
211
- const proc = await box.startProcess('node --watch /home/user/app/server.js');
211
+ const proc = await box.startProcess('node --watch /home/user/example-app/server.js');
212
212
  // returns immediately with proc.pid; poll box.processes.logs(proc.pid) for
213
213
  // output and the exit record, or box.processes.kill(proc.pid) to stop it
214
214
  await box.runCode('print(2 + 2)', { language: 'python', install: 'ifMissing' });
215
215
 
216
- await box.files.write('/home/user/app/a.txt', 'hello');
217
- await box.files.read('/home/user/app/a.txt');
218
- await box.files.list('/home/user/app');
219
- await box.files.stat('/home/user/app/a.txt');
220
- await box.files.lstat('/home/user/app/link');
221
- await box.files.rename('/home/user/app/a.txt', '/home/user/app/b.txt');
222
- await box.files.chmod('/home/user/app/b.txt', 0o755);
223
- await box.files.readRange('/home/user/app/b.txt', 0, 64);
224
- await box.files.delete('/home/user/app/b.txt');
216
+ await box.files.write('/home/user/example-app/a.txt', 'hello');
217
+ await box.files.read('/home/user/example-app/a.txt');
218
+ await box.files.list('/home/user/example-app');
219
+ await box.files.stat('/home/user/example-app/a.txt');
220
+ await box.files.lstat('/home/user/example-app/link');
221
+ await box.files.rename('/home/user/example-app/a.txt', '/home/user/example-app/b.txt');
222
+ await box.files.chmod('/home/user/example-app/b.txt', 0o755);
223
+ await box.files.readRange('/home/user/example-app/b.txt', 0, 64);
224
+ await box.files.delete('/home/user/example-app/b.txt');
225
225
 
226
226
  await box.runtimes.available();
227
227
  await box.runtimes.installed();
@@ -232,14 +232,34 @@ await box.processes.list();
232
232
  await box.processes.logs(7);
233
233
  await box.processes.kill(7);
234
234
 
235
- const port = await box.ports.expose(3000);
236
- // port.url => https://my-nimbus.workers.dev/s/<session-or-job-id>/port/3000/
237
- await box.ports.unexpose(3000);
235
+ box.ports.url(3000);
236
+ // https://my-nimbus.workers.dev/s/<session-or-job-id>/port/3000/ (owner only)
237
+ await box.ports.list();
238
+
239
+ // Share a running server with anyone who has the link.
240
+ const web = await box.apps.expose(3000, { visibility: 'public', name: 'web' });
241
+ // web.url, web.capability, web.owner, web.port, web.pid
242
+ await box.apps.list(); // adds status and restart policy per app
243
+ await box.apps.rotateLink('web'); // new link, old one revoked
244
+ await box.apps.expose('web', { visibility: 'scoped' }); // back to owner only
245
+ await box.apps.remove('web'); // stop it, release the port and its storage
238
246
  ```
239
247
 
248
+ Every server is durable: its journal row is restarted after a platform reset,
249
+ on the next request to its URL. Identity is derived from the command and its
250
+ working directory, so re-running the same command in the same directory is the
251
+ same app, and a shared link is bound to that program rather than to the port.
252
+ `startProcess(cmd, { restart: 'on-failure' })` also restarts it after a crash;
253
+ the default restarts only after a reset. An app target can be a port, a pid, a
254
+ name, or an owner.
255
+
240
256
  On deployments with a preview host suffix configured (the hosted product sets
241
- `NIMBUS_PREVIEW_HOST_SUFFIX=nimbus-os.dev`), `port.url` takes the hostname
242
- form `https://<port>--<session-id>.<suffix>/` instead. The
257
+ `NIMBUS_PREVIEW_HOST_SUFFIX=nimbus-os.dev`), URLs take the hostname form:
258
+ `https://<port>--<session-id>.<suffix>/` for the private preview,
259
+ `https://<name>--<session-id>.<suffix>/` for a named app, and
260
+ `https://<capability>--<name>--<session-id>.<suffix>/` for a public link.
261
+ Public links need the `NIMBUS_PUBLIC_DIRECTORY` Durable Object binding, which
262
+ `@nimbus-sh/config` emits with `nimbusPublicDirectory: true`. The
243
263
  `/s/<id>/port/<n>/` path route works on every deployment.
244
264
 
245
265
  Runtime policy comes from the sandbox profile:
@@ -255,8 +275,8 @@ Runtime policy comes from the sandbox profile:
255
275
  object, in the shape Proteus's tool provider takes. It carries
256
276
  `tools.exec.execute`, `runCode`, `readFile`, `writeFile`,
257
277
  `listFiles`/`readdir`, `deleteFile`, `exists`, `startProcess`, `killProcess`,
258
- `logs`, `exposePort`, `unexposePort`, `listPorts`, `installRuntime`, and
259
- `listRuntimes`.
278
+ `logs`, `exposePort`, `unexposePort`, `listPorts`, `exposeApp`, `listApps`,
279
+ `installRuntime`, and `listRuntimes`.
260
280
 
261
281
  `provider.capabilities` reports what Nimbus can do. Nimbus claims shell,
262
282
  JavaScript/TypeScript, npm, git, owned filesystem, outbound fetch, inbound
package/dist/sandbox.d.ts CHANGED
@@ -74,6 +74,78 @@ export interface NimbusExecOptions {
74
74
  * user, which is what every programmatic exec has always run as.
75
75
  */
76
76
  cred?: VfsCred;
77
+ /**
78
+ * `startProcess` only: what to do when the process exits on its own with
79
+ * a non-zero code. 'never' (default) leaves it stopped; 'on-failure'
80
+ * restarts it under the session's restart budget with backoff. A platform
81
+ * reset re-drives the process either way.
82
+ */
83
+ restart?: NimbusRestartPolicy;
84
+ }
85
+ export type NimbusRestartPolicy = 'never' | 'on-failure';
86
+ export type NimbusAppVisibility = 'scoped' | 'public';
87
+ /** The sandbox file plane; see `NimbusSandbox.files`. */
88
+ export interface NimbusSandboxFiles {
89
+ /** The same API bound to `cred` — the view `SqliteVFS.as(cred)` gives in-process. */
90
+ as(cred: VfsCred): NimbusSandboxFiles;
91
+ read(path: string): Promise<string | null>;
92
+ readBytes(path: string): Promise<Uint8Array | null>;
93
+ write(path: string, content: string | Uint8Array): Promise<void>;
94
+ stat(path: string): Promise<NimbusFileStat | null>;
95
+ /** stat without following a symlink leaf. */
96
+ lstat(path: string): Promise<NimbusFileStat | null>;
97
+ rename(from: string, to: string): Promise<void>;
98
+ chmod(path: string, mode: number): Promise<void>;
99
+ /** Read `length` bytes at `offset` without materializing the whole file. */
100
+ readRange(path: string, offset: number, length: number): Promise<Uint8Array | null>;
101
+ list(path?: string): Promise<{
102
+ name: string;
103
+ type: string;
104
+ }[]>;
105
+ mkdir(path: string): Promise<void>;
106
+ exists(path: string): Promise<boolean>;
107
+ delete(path: string, options?: {
108
+ recursive?: boolean;
109
+ }): Promise<void>;
110
+ }
111
+ /**
112
+ * An application target: a port, a pid, a name, or an owner — every
113
+ * `apps.*` verb takes one. A bare number is a port when something listens
114
+ * on it or a reservation names it, else a pid; a bare string is a name
115
+ * first, then an owner. The object forms are unambiguous.
116
+ */
117
+ export type NimbusAppTarget = number | string | {
118
+ port: number;
119
+ } | {
120
+ pid: number;
121
+ } | {
122
+ name: string;
123
+ } | {
124
+ owner: string;
125
+ };
126
+ export interface NimbusExposedApp {
127
+ /** The application's identity: derived (`auto:…`) for an ordinary process, explicit for a durable worker app. */
128
+ owner: string;
129
+ name: string | null;
130
+ port: number;
131
+ pid: number | null;
132
+ capability: string | null;
133
+ visibility: NimbusAppVisibility;
134
+ /** Browser-facing URL, built the way `ports.url` builds one; undefined when the deployment is not addressable. */
135
+ url: string | undefined;
136
+ }
137
+ export interface NimbusApp {
138
+ owner: string;
139
+ name: string | null;
140
+ port: number | null;
141
+ pid: number | null;
142
+ status: 'running' | 'starting' | 'stopped' | 'failed';
143
+ visibility: NimbusAppVisibility;
144
+ capability: string | null;
145
+ restart: NimbusRestartPolicy;
146
+ /** With status 'failed': what went wrong, e.g. `listened on 3000, owns 5173`. */
147
+ diagnostic: string | null;
148
+ url: string | undefined;
77
149
  }
78
150
  export interface NimbusExecResult {
79
151
  command: string;
@@ -201,23 +273,23 @@ interface NimbusSessionStub {
201
273
  _rpcExec(command: string, options?: Record<string, unknown>): Promise<NimbusExecResult>;
202
274
  _rpcStartProcess(command: string, options?: Record<string, unknown>): Promise<NimbusStartResult>;
203
275
  _rpcRunCode(code: string, options?: Record<string, unknown>): Promise<NimbusExecResult>;
204
- _rpcReadFile(path: string): Promise<string | null>;
205
- _rpcReadFileBytes(path: string): Promise<Uint8Array | null>;
206
- _rpcWriteFile(path: string, content: string | Uint8Array): Promise<void>;
207
- _rpcStat(path: string): Promise<NimbusFileStat | null>;
208
- _rpcLstat(path: string): Promise<NimbusFileStat | null>;
209
- _rpcReaddir(path: string): Promise<{
276
+ _rpcReadFile(path: string, pid?: undefined, cred?: VfsCred): Promise<string | null>;
277
+ _rpcReadFileBytes(path: string, pid?: undefined, cred?: VfsCred): Promise<Uint8Array | null>;
278
+ _rpcWriteFile(path: string, content: string | Uint8Array, pid?: undefined, cred?: VfsCred): Promise<void>;
279
+ _rpcStat(path: string, pid?: undefined, cred?: VfsCred): Promise<NimbusFileStat | null>;
280
+ _rpcLstat(path: string, pid?: undefined, cred?: VfsCred): Promise<NimbusFileStat | null>;
281
+ _rpcReaddir(path: string, pid?: undefined, cred?: VfsCred): Promise<{
210
282
  name: string;
211
283
  type: string;
212
284
  }[]>;
213
- _rpcRename(from: string, to: string): Promise<void>;
214
- _rpcChmod(path: string, mode: number): Promise<void>;
215
- _rpcFsReadRange(path: string, offset: number, length: number): Promise<Uint8Array | null>;
216
- _rpcExists(path: string): Promise<boolean>;
217
- _rpcMkdir(path: string): Promise<void>;
285
+ _rpcRename(from: string, to: string, pid?: undefined, cred?: VfsCred): Promise<void>;
286
+ _rpcChmod(path: string, mode: number, pid?: undefined, cred?: VfsCred): Promise<void>;
287
+ _rpcFsReadRange(path: string, offset: number, length: number, pid?: undefined, cred?: VfsCred): Promise<Uint8Array | null>;
288
+ _rpcExists(path: string, pid?: undefined, cred?: VfsCred): Promise<boolean>;
289
+ _rpcMkdir(path: string, pid?: undefined, cred?: VfsCred): Promise<void>;
218
290
  _rpcDeleteFile(path: string, options?: {
219
291
  recursive?: boolean;
220
- }): Promise<void>;
292
+ }, cred?: VfsCred): Promise<void>;
221
293
  _rpcInstallRuntime(spec: string, options?: {
222
294
  force?: boolean;
223
295
  }): Promise<unknown>;
@@ -253,6 +325,7 @@ interface NimbusSessionStub {
253
325
  _rpcListPorts(): Promise<NimbusPort[]>;
254
326
  _rpcExposePort(port: number, options?: {
255
327
  visibility?: 'scoped' | 'public';
328
+ name?: string;
256
329
  }): Promise<{
257
330
  port: number;
258
331
  listening: boolean;
@@ -260,6 +333,25 @@ interface NimbusSessionStub {
260
333
  registeredAt: number | null;
261
334
  capability: string | null;
262
335
  visibility?: 'scoped' | 'public';
336
+ owner?: string | null;
337
+ name?: string | null;
338
+ }>;
339
+ _rpcExposeApp(target: NimbusAppTarget, options?: {
340
+ visibility?: 'scoped' | 'public';
341
+ name?: string;
342
+ }): Promise<Omit<NimbusExposedApp, 'url'> & {
343
+ url: string | null;
344
+ }>;
345
+ _rpcListApps(): Promise<Array<Omit<NimbusApp, 'url'> & {
346
+ url: string | null;
347
+ }>>;
348
+ _rpcRotateLink(target: NimbusAppTarget): Promise<Omit<NimbusExposedApp, 'url'> & {
349
+ url: string | null;
350
+ }>;
351
+ _rpcRemoveApp(target: NimbusAppTarget): Promise<{
352
+ owner: string;
353
+ removed: boolean;
354
+ port: number | null;
263
355
  }>;
264
356
  _rpcEnsureDurableApp(input: {
265
357
  owner: string;
@@ -341,27 +433,19 @@ export declare class NimbusSandbox {
341
433
  install?: 'never' | 'ifMissing';
342
434
  }): Promise<NimbusExecResult>;
343
435
  destroy(options?: NimbusDestroyOptions): Promise<NimbusDestroyResult>;
344
- files: {
345
- read: (path: string) => Promise<string | null>;
346
- readBytes: (path: string) => Promise<Uint8Array | null>;
347
- write: (path: string, content: string | Uint8Array) => Promise<void>;
348
- stat: (path: string) => Promise<NimbusFileStat | null>;
349
- /** stat without following a symlink leaf. */
350
- lstat: (path: string) => Promise<NimbusFileStat | null>;
351
- rename: (from: string, to: string) => Promise<void>;
352
- chmod: (path: string, mode: number) => Promise<void>;
353
- /** Read `length` bytes at `offset` without materializing the whole file. */
354
- readRange: (path: string, offset: number, length: number) => Promise<Uint8Array | null>;
355
- list: (path?: string) => Promise<{
356
- name: string;
357
- type: string;
358
- }[]>;
359
- mkdir: (path: string) => Promise<void>;
360
- exists: (path: string) => Promise<boolean>;
361
- delete: (path: string, options?: {
362
- recursive?: boolean;
363
- }) => Promise<void>;
364
- };
436
+ /**
437
+ * The session file plane. Every method acts as the session's default
438
+ * identity for a pid-less caller — the session user for reads, writes,
439
+ * stat, list, mkdir, rename and chmod; the kernel for `delete` — which is
440
+ * the embedder's trusted surface, reached only by a caller holding the DO
441
+ * binding or a remote token. `files.as(cred)` returns the same API bound
442
+ * to `cred` instead, the view `SqliteVFS.as(cred)` gives in-process: a
443
+ * file the identity cannot read answers EACCES, one it owns answers.
444
+ * Over the remote endpoint a `cred` is refused by the dispatcher, as it is
445
+ * on `exec` — a token authenticates a session, not a user inside it.
446
+ */
447
+ files: NimbusSandboxFiles;
448
+ private filesAs;
365
449
  runtimes: {
366
450
  available: () => Promise<NimbusAvailableRuntime[]>;
367
451
  installed: () => Promise<NimbusRuntimeSummary[]>;
@@ -403,8 +487,15 @@ export declare class NimbusSandbox {
403
487
  };
404
488
  ports: {
405
489
  list: () => Promise<NimbusPort[]>;
490
+ /**
491
+ * Expose a port. When the port's occupant carries an identity (a node
492
+ * resident, a durable worker app) this is the same lazy reservation
493
+ * `apps.expose` makes and the result names the owner; a bare port —
494
+ * a dev server, a python resident — is written port-only as before.
495
+ */
406
496
  expose: (port: number, options?: {
407
497
  visibility?: "scoped" | "public";
498
+ name?: string;
408
499
  }) => Promise<{
409
500
  url: string | undefined;
410
501
  port: number;
@@ -413,6 +504,8 @@ export declare class NimbusSandbox {
413
504
  registeredAt: number | null;
414
505
  capability: string | null;
415
506
  visibility?: "scoped" | "public";
507
+ owner?: string | null;
508
+ name?: string | null;
416
509
  }>;
417
510
  unexpose: (port: number) => Promise<{
418
511
  port: number;
@@ -446,8 +539,30 @@ export declare class NimbusSandbox {
446
539
  url: (port: number, options?: {
447
540
  visibility?: "scoped" | "public";
448
541
  capability?: string;
542
+ name?: string;
449
543
  }) => string | undefined;
450
544
  };
545
+ /**
546
+ * The application surface: every server is durable under its identity
547
+ * from the moment it is spawned; exposing it reserves its port for that
548
+ * identity, names it, and (when public) mints the capability its shared
549
+ * URL is built on. `ports.expose` is the port-addressed alias of
550
+ * `apps.expose`; the identity-addressed verbs live here.
551
+ */
552
+ apps: {
553
+ list: () => Promise<NimbusApp[]>;
554
+ expose: (target: NimbusAppTarget, options?: {
555
+ visibility?: "scoped" | "public";
556
+ name?: string;
557
+ }) => Promise<NimbusExposedApp>;
558
+ rotateLink: (target: NimbusAppTarget) => Promise<NimbusExposedApp>;
559
+ remove: (target: NimbusAppTarget) => Promise<{
560
+ owner: string;
561
+ removed: boolean;
562
+ port: number | null;
563
+ }>;
564
+ };
565
+ private exposedApp;
451
566
  tools(options?: {
452
567
  namespace?: string;
453
568
  kind?: string;
@@ -555,6 +670,8 @@ export declare class NimbusSandbox {
555
670
  registeredAt: number | null;
556
671
  capability: string | null;
557
672
  visibility?: "scoped" | "public";
673
+ owner?: string | null;
674
+ name?: string | null;
558
675
  }>;
559
676
  };
560
677
  unexposePort: {
@@ -568,6 +685,16 @@ export declare class NimbusSandbox {
568
685
  listPorts: {
569
686
  execute: () => Promise<NimbusPort[]>;
570
687
  };
688
+ exposeApp: {
689
+ execute: (input: NimbusAppTarget | {
690
+ target: NimbusAppTarget;
691
+ visibility?: "scoped" | "public";
692
+ name?: string;
693
+ }) => Promise<NimbusExposedApp>;
694
+ };
695
+ listApps: {
696
+ execute: () => Promise<NimbusApp[]>;
697
+ };
571
698
  installRuntime: {
572
699
  execute: (spec: RuntimeSpec) => Promise<unknown>;
573
700
  };
@@ -1 +1 @@
1
- {"version":3,"file":"sandbox.d.ts","sourceRoot":"","sources":["../src/sandbox.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sandbox.d.ts","sourceRoot":"","sources":["../src/sandbox.ts"],"names":[],"mappings":"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"}
package/dist/sandbox.js CHANGED
@@ -3,6 +3,10 @@
3
3
  */
4
4
  import { buildPreviewHost, buildPublicPreviewHost, isPreviewHostSafeSid, readPreviewHostSuffix, } from '@nimbus-sh/worker/preview-host';
5
5
  import { z } from 'zod/v4';
6
+ /** The trailing wire argument a credentialed file op carries, or nothing. */
7
+ function fileWireOptions(cred) {
8
+ return cred === undefined ? [] : [{ cred }];
9
+ }
6
10
  export class NimbusRemoteError extends Error {
7
11
  status;
8
12
  code;
@@ -139,6 +143,29 @@ const ExposedPortSchema = z.object({
139
143
  registeredAt: z.number().nullable(),
140
144
  capability: z.string().nullable(),
141
145
  visibility: z.enum(['scoped', 'public']).optional(),
146
+ owner: z.string().nullable().optional(),
147
+ name: z.string().nullable().optional(),
148
+ });
149
+ const ExposedAppSchema = z.object({
150
+ owner: z.string(),
151
+ name: z.string().nullable(),
152
+ port: z.number(),
153
+ pid: z.number().nullable(),
154
+ capability: z.string().nullable(),
155
+ visibility: z.enum(['scoped', 'public']),
156
+ url: z.string().nullable(),
157
+ });
158
+ const AppSchema = z.object({
159
+ owner: z.string(),
160
+ name: z.string().nullable(),
161
+ port: z.number().nullable(),
162
+ pid: z.number().nullable(),
163
+ status: z.enum(['running', 'starting', 'stopped', 'failed']),
164
+ visibility: z.enum(['scoped', 'public']),
165
+ capability: z.string().nullable(),
166
+ restart: z.enum(['never', 'on-failure']),
167
+ diagnostic: z.string().nullable(),
168
+ url: z.string().nullable(),
142
169
  });
143
170
  const EnsureDurableAppSchema = z.object({
144
171
  port: z.number(),
@@ -259,23 +286,26 @@ export class NimbusSandbox {
259
286
  _rpcExec: (command, options) => this.remoteRpc('exec', [command, options], ExecResultSchema),
260
287
  _rpcStartProcess: (command, options) => this.remoteRpc('startProcess', [command, options], StartResultSchema),
261
288
  _rpcRunCode: (code, options) => this.remoteRpc('runCode', [code, options], ExecResultSchema),
262
- _rpcReadFile: (path) => this.remoteRpc('readFile', [path], StringOrNullSchema),
263
- _rpcReadFileBytes: (path) => this.remoteRpc('readFileBytes', [path], Uint8ArrayOrNullSchema),
264
- _rpcWriteFile: async (path, content) => {
289
+ // A credential rides the wire as a trailing `{ cred }` options object
290
+ // so the payload names it explicitly; the remote dispatcher decides
291
+ // what to do with it (today: refuse, as it refuses `cred` on exec).
292
+ _rpcReadFile: (path, _pid, cred) => this.remoteRpc('readFile', [path, ...fileWireOptions(cred)], StringOrNullSchema),
293
+ _rpcReadFileBytes: (path, _pid, cred) => this.remoteRpc('readFileBytes', [path, ...fileWireOptions(cred)], Uint8ArrayOrNullSchema),
294
+ _rpcWriteFile: async (path, content, _pid, cred) => {
265
295
  // The byte count is the wire contract but not part of the public
266
296
  // `files.write` surface, so it is validated and dropped. Declaring
267
297
  // this `undefined` made every remote write throw after succeeding.
268
- await this.remoteRpc('writeFile', [path, content], WriteFileResultSchema);
298
+ await this.remoteRpc('writeFile', [path, content, ...fileWireOptions(cred)], WriteFileResultSchema);
269
299
  },
270
- _rpcStat: (path) => this.remoteRpc('stat', [path], FileStatSchema.nullable()),
271
- _rpcLstat: (path) => this.remoteRpc('lstat', [path], FileStatSchema.nullable()),
272
- _rpcRename: (from, to) => this.remoteRpc('rename', [from, to], UndefinedResultSchema),
273
- _rpcChmod: (path, mode) => this.remoteRpc('chmod', [path, mode], UndefinedResultSchema),
274
- _rpcFsReadRange: (path, offset, length) => this.remoteRpc('readRange', [path, offset, length], Uint8ArrayOrNullSchema),
275
- _rpcReaddir: (path) => this.remoteRpc('readdir', [path], z.array(DirectoryEntrySchema)),
276
- _rpcExists: (path) => this.remoteRpc('exists', [path], BooleanResultSchema),
277
- _rpcMkdir: (path) => this.remoteRpc('mkdir', [path], UndefinedResultSchema),
278
- _rpcDeleteFile: (path, options) => this.remoteRpc('deleteFile', [path, options], UndefinedResultSchema),
300
+ _rpcStat: (path, _pid, cred) => this.remoteRpc('stat', [path, ...fileWireOptions(cred)], FileStatSchema.nullable()),
301
+ _rpcLstat: (path, _pid, cred) => this.remoteRpc('lstat', [path, ...fileWireOptions(cred)], FileStatSchema.nullable()),
302
+ _rpcRename: (from, to, _pid, cred) => this.remoteRpc('rename', [from, to, ...fileWireOptions(cred)], UndefinedResultSchema),
303
+ _rpcChmod: (path, mode, _pid, cred) => this.remoteRpc('chmod', [path, mode, ...fileWireOptions(cred)], UndefinedResultSchema),
304
+ _rpcFsReadRange: (path, offset, length, _pid, cred) => this.remoteRpc('readRange', [path, offset, length, ...fileWireOptions(cred)], Uint8ArrayOrNullSchema),
305
+ _rpcReaddir: (path, _pid, cred) => this.remoteRpc('readdir', [path, ...fileWireOptions(cred)], z.array(DirectoryEntrySchema)),
306
+ _rpcExists: (path, _pid, cred) => this.remoteRpc('exists', [path, ...fileWireOptions(cred)], BooleanResultSchema),
307
+ _rpcMkdir: (path, _pid, cred) => this.remoteRpc('mkdir', [path, ...fileWireOptions(cred)], UndefinedResultSchema),
308
+ _rpcDeleteFile: (path, options, cred) => this.remoteRpc('deleteFile', [path, { ...(options ?? {}), ...(cred !== undefined ? { cred } : {}) }], UndefinedResultSchema),
279
309
  _rpcInstallRuntime: (spec, options) => this.remoteRpc('installRuntime', [spec, options], UnknownResultSchema),
280
310
  _rpcEnsureRuntimes: (specs, options) => this.remoteRpc('ensureRuntimes', [specs, options], UnknownResultSchema),
281
311
  _rpcListRuntimes: () => this.remoteRpc('listRuntimes', [], RuntimeListSchema),
@@ -290,6 +320,10 @@ export class NimbusSandbox {
290
320
  _rpcExposePort: (port, options) => this.remoteRpc('exposePort', [port, options], ExposedPortSchema),
291
321
  _rpcEnsureDurableApp: (input) => this.remoteRpc('ensureDurableApp', [input], EnsureDurableAppSchema),
292
322
  _rpcRemoveDurableApp: (owner) => this.remoteRpc('removeDurableApp', [{ owner }], RemoveDurableAppSchema),
323
+ _rpcExposeApp: (target, options) => this.remoteRpc('exposeApp', [target, options], ExposedAppSchema),
324
+ _rpcListApps: () => this.remoteRpc('listApps', [], z.array(AppSchema)),
325
+ _rpcRotateLink: (target) => this.remoteRpc('rotateLink', [target], ExposedAppSchema),
326
+ _rpcRemoveApp: (target) => this.remoteRpc('removeApp', [target], RemoveDurableAppSchema),
293
327
  _rpcUnexposePort: (port) => this.remoteRpc('unexposePort', [port], UnexposedPortSchema),
294
328
  _rpcDestroy: (options) => this.remoteRpc('destroy', [options], DestroyResultSchema),
295
329
  };
@@ -380,58 +414,73 @@ export class NimbusSandbox {
380
414
  this.readyPromise = null;
381
415
  return this.rpc(this.stub()._rpcDestroy(options));
382
416
  }
383
- files = {
384
- read: async (path) => {
385
- await this.ready();
386
- return this.rpc(this.stub()._rpcReadFile(path));
387
- },
388
- readBytes: async (path) => {
389
- await this.ready();
390
- return this.rpc(this.stub()._rpcReadFileBytes(path));
391
- },
392
- write: async (path, content) => {
393
- await this.ready();
394
- return this.rpc(this.stub()._rpcWriteFile(path, content));
395
- },
396
- stat: async (path) => {
397
- await this.ready();
398
- return this.rpc(this.stub()._rpcStat(path));
399
- },
400
- /** stat without following a symlink leaf. */
401
- lstat: async (path) => {
402
- await this.ready();
403
- return this.rpc(this.stub()._rpcLstat(path));
404
- },
405
- rename: async (from, to) => {
406
- await this.ready();
407
- return this.rpc(this.stub()._rpcRename(from, to));
408
- },
409
- chmod: async (path, mode) => {
410
- await this.ready();
411
- return this.rpc(this.stub()._rpcChmod(path, mode));
412
- },
413
- /** Read `length` bytes at `offset` without materializing the whole file. */
414
- readRange: async (path, offset, length) => {
415
- await this.ready();
416
- return this.rpc(this.stub()._rpcFsReadRange(path, offset, length));
417
- },
418
- list: async (path = this.root) => {
419
- await this.ready();
420
- return this.rpc(this.stub()._rpcReaddir(path));
421
- },
422
- mkdir: async (path) => {
423
- await this.ready();
424
- return this.rpc(this.stub()._rpcMkdir(path));
425
- },
426
- exists: async (path) => {
427
- await this.ready();
428
- return this.rpc(this.stub()._rpcExists(path));
429
- },
430
- delete: async (path, options = {}) => {
431
- await this.ready();
432
- return this.rpc(this.stub()._rpcDeleteFile(path, options));
433
- },
434
- };
417
+ /**
418
+ * The session file plane. Every method acts as the session's default
419
+ * identity for a pid-less caller — the session user for reads, writes,
420
+ * stat, list, mkdir, rename and chmod; the kernel for `delete` — which is
421
+ * the embedder's trusted surface, reached only by a caller holding the DO
422
+ * binding or a remote token. `files.as(cred)` returns the same API bound
423
+ * to `cred` instead, the view `SqliteVFS.as(cred)` gives in-process: a
424
+ * file the identity cannot read answers EACCES, one it owns answers.
425
+ * Over the remote endpoint a `cred` is refused by the dispatcher, as it is
426
+ * on `exec` — a token authenticates a session, not a user inside it.
427
+ */
428
+ files = this.filesAs(undefined);
429
+ filesAs(cred) {
430
+ return {
431
+ as: (bound) => this.filesAs(bound),
432
+ read: async (path) => {
433
+ await this.ready();
434
+ return this.rpc(this.stub()._rpcReadFile(path, undefined, cred));
435
+ },
436
+ readBytes: async (path) => {
437
+ await this.ready();
438
+ return this.rpc(this.stub()._rpcReadFileBytes(path, undefined, cred));
439
+ },
440
+ write: async (path, content) => {
441
+ await this.ready();
442
+ return this.rpc(this.stub()._rpcWriteFile(path, content, undefined, cred));
443
+ },
444
+ stat: async (path) => {
445
+ await this.ready();
446
+ return this.rpc(this.stub()._rpcStat(path, undefined, cred));
447
+ },
448
+ /** stat without following a symlink leaf. */
449
+ lstat: async (path) => {
450
+ await this.ready();
451
+ return this.rpc(this.stub()._rpcLstat(path, undefined, cred));
452
+ },
453
+ rename: async (from, to) => {
454
+ await this.ready();
455
+ return this.rpc(this.stub()._rpcRename(from, to, undefined, cred));
456
+ },
457
+ chmod: async (path, mode) => {
458
+ await this.ready();
459
+ return this.rpc(this.stub()._rpcChmod(path, mode, undefined, cred));
460
+ },
461
+ /** Read `length` bytes at `offset` without materializing the whole file. */
462
+ readRange: async (path, offset, length) => {
463
+ await this.ready();
464
+ return this.rpc(this.stub()._rpcFsReadRange(path, offset, length, undefined, cred));
465
+ },
466
+ list: async (path = this.root) => {
467
+ await this.ready();
468
+ return this.rpc(this.stub()._rpcReaddir(path, undefined, cred));
469
+ },
470
+ mkdir: async (path) => {
471
+ await this.ready();
472
+ return this.rpc(this.stub()._rpcMkdir(path, undefined, cred));
473
+ },
474
+ exists: async (path) => {
475
+ await this.ready();
476
+ return this.rpc(this.stub()._rpcExists(path, undefined, cred));
477
+ },
478
+ delete: async (path, options = {}) => {
479
+ await this.ready();
480
+ return this.rpc(this.stub()._rpcDeleteFile(path, options, cred));
481
+ },
482
+ };
483
+ }
435
484
  runtimes = {
436
485
  available: async () => {
437
486
  await this.ready();
@@ -496,6 +545,12 @@ export class NimbusSandbox {
496
545
  await this.ready();
497
546
  return this.rpc(this.stub()._rpcListPorts());
498
547
  },
548
+ /**
549
+ * Expose a port. When the port's occupant carries an identity (a node
550
+ * resident, a durable worker app) this is the same lazy reservation
551
+ * `apps.expose` makes and the result names the owner; a bare port —
552
+ * a dev server, a python resident — is written port-only as before.
553
+ */
499
554
  expose: async (port, options = {}) => {
500
555
  await this.ready();
501
556
  const result = await this.rpc(this.stub()._rpcExposePort(port, options));
@@ -504,6 +559,7 @@ export class NimbusSandbox {
504
559
  url: this.portUrl(port, {
505
560
  visibility: result.visibility ?? 'scoped',
506
561
  capability: result.capability ?? undefined,
562
+ name: result.name ?? undefined,
507
563
  }),
508
564
  };
509
565
  },
@@ -532,6 +588,51 @@ export class NimbusSandbox {
532
588
  },
533
589
  url: (port, options = {}) => this.portUrl(port, options),
534
590
  };
591
+ /**
592
+ * The application surface: every server is durable under its identity
593
+ * from the moment it is spawned; exposing it reserves its port for that
594
+ * identity, names it, and (when public) mints the capability its shared
595
+ * URL is built on. `ports.expose` is the port-addressed alias of
596
+ * `apps.expose`; the identity-addressed verbs live here.
597
+ */
598
+ apps = {
599
+ list: async () => {
600
+ await this.ready();
601
+ const apps = await this.rpc(this.stub()._rpcListApps());
602
+ return apps.map((app) => ({
603
+ ...app,
604
+ url: app.port === null ? undefined : this.portUrl(app.port, {
605
+ visibility: app.visibility,
606
+ capability: app.capability ?? undefined,
607
+ name: app.name ?? undefined,
608
+ }) ?? app.url ?? undefined,
609
+ }));
610
+ },
611
+ expose: async (target, options = {}) => {
612
+ await this.ready();
613
+ const result = await this.rpc(this.stub()._rpcExposeApp(target, options));
614
+ return this.exposedApp(result);
615
+ },
616
+ rotateLink: async (target) => {
617
+ await this.ready();
618
+ const result = await this.rpc(this.stub()._rpcRotateLink(target));
619
+ return this.exposedApp(result);
620
+ },
621
+ remove: async (target) => {
622
+ await this.ready();
623
+ return this.rpc(this.stub()._rpcRemoveApp(target));
624
+ },
625
+ };
626
+ exposedApp(result) {
627
+ return {
628
+ ...result,
629
+ url: this.portUrl(result.port, {
630
+ visibility: result.visibility,
631
+ capability: result.capability ?? undefined,
632
+ name: result.name ?? undefined,
633
+ }) ?? result.url ?? undefined,
634
+ };
635
+ }
535
636
  tools(options = {}) {
536
637
  const namespace = options.namespace ?? this.profile.tools?.namespace ?? 'nimbus';
537
638
  const kind = options.kind ?? this.profile.tools?.kind ?? 'nimbus';
@@ -585,6 +686,10 @@ export class NimbusSandbox {
585
686
  exposePort: { execute: (input) => this.ports.expose(typeof input === 'number' ? input : input.port) },
586
687
  unexposePort: { execute: (input) => this.ports.unexpose(typeof input === 'number' ? input : input.port) },
587
688
  listPorts: { execute: () => this.ports.list() },
689
+ exposeApp: { execute: (input) => typeof input === 'object' && input !== null && 'target' in input
690
+ ? this.apps.expose(input.target, { visibility: input.visibility, name: input.name })
691
+ : this.apps.expose(input) },
692
+ listApps: { execute: () => this.apps.list() },
588
693
  installRuntime: { execute: (spec) => this.runtimes.install(spec) },
589
694
  listRuntimes: { execute: () => this.runtimes.list() },
590
695
  },
@@ -618,6 +723,13 @@ export class NimbusSandbox {
618
723
  }
619
724
  execOptions(options) {
620
725
  const normalized = { ...options };
726
+ if (typeof normalized.cwd === 'string') {
727
+ // The session shell only understands absolute paths; a relative cwd
728
+ // forwarded verbatim used to reach it anyway — `pwd` echoed the
729
+ // literal string and every write beneath it landed ENOENT. Resolve
730
+ // against the sandbox root here, at the SDK boundary.
731
+ normalized.cwd = resolveSandboxCwd(this.root, normalized.cwd);
732
+ }
621
733
  if (normalized.shellId) {
622
734
  // A named shell owns its cwd, so defaulting one here would reset it on
623
735
  // every call. The sandbox root is only where a NEW shell starts.
@@ -654,23 +766,26 @@ export class NimbusSandbox {
654
766
  portUrl(port, options = {}) {
655
767
  const hostSuffix = this.config.previewHostSuffix;
656
768
  if (hostSuffix && !this.profile.preview?.pathStyle && isPreviewHostSafeSid(this.id)) {
657
- // The public form names its bearer in the label: a public port with a
769
+ // The name stands where the port stands when the app has one. The
770
+ // public form names its bearer in the label: a public port with a
658
771
  // capability builds the unauthenticated host, anything else keeps the
659
772
  // session-attached one.
773
+ const label = options.name ?? port;
660
774
  if (options.visibility === 'public' && options.capability !== undefined) {
661
- return `https://${buildPublicPreviewHost(this.id, port, options.capability, hostSuffix)}/`;
775
+ return `https://${buildPublicPreviewHost(this.id, label, options.capability, hostSuffix)}/`;
662
776
  }
663
- return `https://${buildPreviewHost(this.id, port, hostSuffix)}/`;
777
+ return `https://${buildPreviewHost(this.id, label, hostSuffix)}/`;
664
778
  }
779
+ const door = options.name !== undefined ? `/app/${options.name}/` : `/port/${port}/`;
665
780
  const explicit = this.profile.preview?.baseUrl;
666
781
  if (explicit) {
667
782
  const base = trimTrailingSlashes(explicit.replace('{sessionId}', encodeURIComponent(this.id)));
668
- return `${base}/port/${port}/`;
783
+ return `${base}${door}`;
669
784
  }
670
785
  const endpoint = this.config.endpoint ? trimTrailingSlashes(this.config.endpoint) : '';
671
786
  if (!endpoint)
672
787
  return undefined;
673
- return `${endpoint}/s/${encodeURIComponent(this.id)}/port/${port}/`;
788
+ return `${endpoint}/s/${encodeURIComponent(this.id)}${door}`;
674
789
  }
675
790
  async rpc(promise) {
676
791
  const value = await promise;
@@ -814,6 +929,30 @@ function trimTrailingSlashes(value) {
814
929
  end--;
815
930
  return value.slice(0, end);
816
931
  }
932
+ /**
933
+ * Resolve an exec `cwd` to the absolute POSIX path the session shell needs.
934
+ * Absolute inputs pass through untouched; relative ones resolve against the
935
+ * sandbox root, collapsing `.`/`..` segments (`rel` → `<root>/rel`,
936
+ * `../x` → the sibling of root). The session filesystem is always POSIX —
937
+ * `node:path` is not portable across every SDK host, so this resolves by
938
+ * segment instead of importing it.
939
+ */
940
+ function resolveSandboxCwd(root, cwd) {
941
+ if (cwd.startsWith('/'))
942
+ return cwd;
943
+ const segments = [];
944
+ for (const seg of `${root}/${cwd}`.split('/')) {
945
+ if (seg === '..') {
946
+ // A '..' at the filesystem root stays at the root, POSIX-style.
947
+ if (segments.length > 0)
948
+ segments.pop();
949
+ }
950
+ else if (seg !== '' && seg !== '.') {
951
+ segments.push(seg);
952
+ }
953
+ }
954
+ return '/' + segments.join('/');
955
+ }
817
956
  function disposeSdkRpcResult(value) {
818
957
  if ((typeof value !== 'object' && typeof value !== 'function') || value === null)
819
958
  return;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nimbus-sh/sdk",
3
- "version": "0.4.0",
3
+ "version": "0.6.0",
4
4
  "description": "Nimbus SDK — Worker embedder, programmatic sandboxes, token mint, and client helpers.",
5
5
  "keywords": [
6
6
  "cloudflare",
@@ -72,12 +72,12 @@
72
72
  "typecheck": "tsc --noEmit"
73
73
  },
74
74
  "peerDependencies": {
75
- "@nimbus-sh/core": "^0.7.0",
76
- "@nimbus-sh/worker": "^0.5.0"
75
+ "@nimbus-sh/core": "^0.9.0",
76
+ "@nimbus-sh/worker": "^0.7.0"
77
77
  },
78
78
  "devDependencies": {
79
79
  "@cloudflare/workers-types": "^4.20250327.0",
80
- "@nimbus-sh/worker": "^0.5.0",
80
+ "@nimbus-sh/worker": "^0.7.0",
81
81
  "typescript": "^5.7.0"
82
82
  },
83
83
  "publishConfig": {
@@ -85,6 +85,6 @@
85
85
  },
86
86
  "dependencies": {
87
87
  "zod": "^4.4.3",
88
- "@nimbus-sh/core": "^0.7.0"
88
+ "@nimbus-sh/core": "^0.9.0"
89
89
  }
90
90
  }