@exedev/sdk 0.0.6 → 0.2.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.
@@ -0,0 +1,1468 @@
1
+ import { Transport } from "./client.js";
2
+ import type { ExedevOptions, SSHOptions, SSHResult } from "./client.js";
3
+ import type { CommandResults } from "./types.js";
4
+ export interface CallOptions {
5
+ signal?: AbortSignal;
6
+ }
7
+ export interface WaitOptions extends CallOptions {
8
+ /** SSH readiness deadline, in milliseconds. Default 60,000. */
9
+ timeoutMs?: number;
10
+ }
11
+ export interface ReadyOptions extends WaitOptions {
12
+ /** Default ssh. Use created to return without probing (and without ssh permission). */
13
+ waitUntil?: "ssh" | "created";
14
+ }
15
+ export interface VMInfo {
16
+ readonly name: string;
17
+ readonly tags: readonly string[];
18
+ readonly sshDest?: string;
19
+ readonly httpsUrl?: string;
20
+ readonly status?: string;
21
+ readonly region?: string;
22
+ readonly comment?: string;
23
+ readonly createdAt?: string;
24
+ readonly setupError?: string;
25
+ }
26
+ export type CommandResult<P extends string> = P extends keyof CommandResults ? CommandResults[P] : unknown;
27
+ export type FlagKind = "bool" | "number" | "string" | "repeated";
28
+ export type Arg = string | readonly string[] | undefined;
29
+ /** Options for {@link ExedevClient.ls}. */
30
+ export interface LsOptions extends CallOptions {
31
+ /** group VMs by none|tag|region|type (default: none) */
32
+ group?: "none" | "tag" | "region";
33
+ /** show detailed information */
34
+ l?: boolean;
35
+ }
36
+ /** Options for {@link ExedevClient.new}. */
37
+ export interface NewOptions extends ReadyOptions {
38
+ /** short note about the VM (max 200 bytes) */
39
+ comment?: string;
40
+ /** number of CPUs (default 2; run 'billing plan' for plan limits) */
41
+ cpu?: number;
42
+ /** disk size (e.g., 20, 20GB, 50G) */
43
+ disk?: string;
44
+ /** environment variable in KEY=VALUE format (can be specified multiple times) */
45
+ env?: string | readonly string[];
46
+ /** container image (default: exeuntu) */
47
+ image?: string;
48
+ /** integration name to attach (can be specified multiple times or comma-separated) */
49
+ integration?: string | readonly string[];
50
+ /** memory allocation (e.g., 4, 4GB, 8G) */
51
+ memory?: string;
52
+ /** VM name (auto-generated if not specified) */
53
+ name?: string;
54
+ /** do not send email notification */
55
+ "no-email"?: boolean;
56
+ /** use ordinary placement (not available on plans that place new VMs in pools) */
57
+ "no-pool"?: boolean;
58
+ /** create the VM in one of your team's pools (see 'pool list') */
59
+ pool?: string;
60
+ /** initial prompt to send to Shelley after VM creation (requires an image with Shelley, like exeuntu); use /dev/stdin to read from stdin */
61
+ prompt?: string;
62
+ /** private container registry credentials as USERNAME:PASSWORD (e.g. octocat:ghp_xxx) for the registry hosting --image */
63
+ "registry-auth"?: string;
64
+ /** alias for --standalone */
65
+ sandbox?: boolean;
66
+ /** setup script to run on first boot (max 10KiB); supports \n for newlines; use /dev/stdin to pipe from stdin */
67
+ "setup-script"?: string;
68
+ /** create a standalone VM with its own reserved capacity (requires a plan with standalone VMs and team approval) */
69
+ standalone?: boolean;
70
+ /** tag to add to the VM (can be specified multiple times or comma-separated) */
71
+ tag?: string | readonly string[];
72
+ }
73
+ /** Options for {@link VM.tag}. */
74
+ export interface TagOptions extends CallOptions {
75
+ /** delete tag */
76
+ d?: boolean;
77
+ }
78
+ /** Options for {@link VM.cp}. */
79
+ export interface CpOptions extends ReadyOptions {
80
+ /** Name of the copy; omitted to generate one. */
81
+ name?: string;
82
+ /** copy tags from source VM (use --copy-tags=false to disable) (default: true) */
83
+ "copy-tags"?: boolean;
84
+ /** number of CPUs */
85
+ cpu?: number;
86
+ /** disk size (e.g., 20, 20GB, 50G) */
87
+ disk?: string;
88
+ /** memory allocation (e.g., 4, 4GB, 8G) */
89
+ memory?: string;
90
+ /** create the copy in one of your team's pools (see 'pool list') */
91
+ pool?: string;
92
+ /** alias for --standalone */
93
+ sandbox?: boolean;
94
+ /** create the copy as a standalone VM with its own reserved capacity (requires a plan with standalone VMs and team approval) */
95
+ standalone?: boolean;
96
+ }
97
+ /** Options for {@link VM.resize}. */
98
+ export interface ResizeOptions extends CallOptions {
99
+ /** number of CPUs */
100
+ cpu?: number;
101
+ /** new total disk size (e.g., 25, 25GB) - disk size can only increase; billed by usage above your plan's included disk, not by size */
102
+ disk?: string;
103
+ /** memory allocation (e.g., 4, 4GB, 8G) */
104
+ memory?: string;
105
+ }
106
+ /** Options for {@link VM.domainAdd}. */
107
+ export interface DomainAddOptions extends CallOptions {
108
+ /** issue a wildcard (*.<parent>) certificate via DNS-01 delegation */
109
+ wildcard?: boolean;
110
+ }
111
+ /** Options for {@link ExedevClient.domainLs}. */
112
+ export interface DomainLsOptions extends CallOptions {
113
+ /** list domains across all your VMs */
114
+ a?: boolean;
115
+ }
116
+ /** Options for {@link VM.shareShow}. */
117
+ export interface ShareShowOptions extends CallOptions {
118
+ /** show QR code for the URL */
119
+ qr?: boolean;
120
+ }
121
+ /** Options for {@link VM.shareAdd}. */
122
+ export interface ShareAddOptions extends CallOptions {
123
+ /** message to include in share invitation */
124
+ message?: string;
125
+ /** show QR code for the URL */
126
+ qr?: boolean;
127
+ /** grant/revoke shell (SSH, Terminal, Shelley) access instead of web-only */
128
+ root?: boolean;
129
+ }
130
+ /** Options for {@link VM.shareRemove}. */
131
+ export interface ShareRemoveOptions extends CallOptions {
132
+ /** grant/revoke shell (SSH, Terminal, Shelley) access instead of web-only */
133
+ root?: boolean;
134
+ }
135
+ /** Options for {@link VM.shareAddLink}. */
136
+ export interface ShareAddLinkOptions extends CallOptions {
137
+ /** show QR code for the URL */
138
+ qr?: boolean;
139
+ }
140
+ /** Options for {@link VM.shareReceiveEmail}. */
141
+ export interface ShareReceiveEmailOptions extends CallOptions {
142
+ /** restrict who the VM may email: all|known|owner|none */
143
+ "reply-policy"?: string;
144
+ }
145
+ /** Options for {@link ExedevClient.sshKeyAdd}. */
146
+ export interface SshKeyAddOptions extends CallOptions {
147
+ /** scope key to VMs with this tag */
148
+ tag?: string;
149
+ }
150
+ /** Options for {@link ExedevClient.sshKeyGenerateApiKey}. */
151
+ export interface SshKeyGenerateApiKeyOptions extends CallOptions {
152
+ /** comma-separated list of allowed commands (empty = defaults) */
153
+ cmds?: string;
154
+ /** expiry duration (e.g. 30d, 1y) or 'never' */
155
+ exp?: string;
156
+ /** label for this token's SSH key */
157
+ label?: string;
158
+ /** scope key to a VM (authenticates to its HTTPS endpoints instead of exe.dev commands) */
159
+ vm?: string;
160
+ }
161
+ /** Options for {@link ExedevClient.integrationsList}. */
162
+ export interface IntegrationsListOptions extends CallOptions {
163
+ /** include per-VM usage (lastUsedAt, usedByVMs); JSON only */
164
+ usage?: boolean;
165
+ }
166
+ /** Options for {@link ExedevClient.integrationsSetupGithub}. */
167
+ export interface IntegrationsSetupGithubOptions extends CallOptions {
168
+ /** disconnect GitHub account */
169
+ d?: boolean;
170
+ /** disconnect GitHub account */
171
+ delete?: boolean;
172
+ /** list connected GitHub accounts */
173
+ list?: boolean;
174
+ /** verify GitHub connections are working */
175
+ verify?: boolean;
176
+ }
177
+ /** Options for {@link ExedevClient.integrationsSetupChatgpt}. */
178
+ export interface IntegrationsSetupChatgptOptions extends CallOptions {
179
+ /** disconnect ChatGPT account */
180
+ d?: boolean;
181
+ /** disconnect ChatGPT account */
182
+ delete?: boolean;
183
+ /** list connected ChatGPT accounts */
184
+ list?: boolean;
185
+ /** local ChatGPT account name (default chatgpt) */
186
+ name?: string;
187
+ /** verify ChatGPT connections are working */
188
+ verify?: boolean;
189
+ }
190
+ /** Options for {@link ExedevClient.integrationsAdd}. */
191
+ export interface IntegrationsAddOptions extends CallOptions {
192
+ /** authenticate as your GitHub user instead of the exe.dev app (github only); pushes and API calls are attributed to your GitHub account */
193
+ "act-as-user"?: boolean;
194
+ /** attach to a spec (vm:<name>, tag:<name>, or auto:all); can be repeated */
195
+ attach?: string | readonly string[];
196
+ /** bearer token (shorthand for --header="Authorization:Bearer TOKEN"; combines with --header) */
197
+ bearer?: string;
198
+ /** optional free-form comment stored with the integration */
199
+ comment?: string;
200
+ /** install the canonical reflection integration with all fields; attaches to auto:all unless --attach=vm:<name> is supplied; no other customization */
201
+ default?: boolean;
202
+ /** comma-separated reflection fields to expose (email, integrations, tags, comment, default_port); 'all' exposes every field including ones added in the future; 'none' disables every field (default: all) */
203
+ fields?: string;
204
+ /** time-box every --attach to a duration from now (e.g. 2h, 45m); access lapses automatically */
205
+ for?: string;
206
+ /** header to inject (e.g. X-Auth:secret); can be repeated */
207
+ header?: string | readonly string[];
208
+ /** host keys for ssh-key: authorized_keys or known_hosts lines (hostnames are ignored), or '*' for any; can be repeated; one - reads them piped in, e.g. from ssh-keyscan */
209
+ "host-key"?: string | readonly string[];
210
+ /** integration name (required unless --default) */
211
+ name?: string;
212
+ /** create an endpoint integration with no injected authentication */
213
+ "no-auth"?: boolean;
214
+ /** authenticate with a generated API key scoped to the target VM; combines with --header/--bearer */
215
+ peer?: boolean;
216
+ /** restrict the integration to read access (github only); git push and write API calls are rejected */
217
+ readonly?: boolean;
218
+ /** GitHub repository in owner/repo format (required for github) */
219
+ repository?: string;
220
+ /** path prefix to strip from each request before forwarding (http-proxy only; e.g. /api/v3 makes /api/v3/users reach the target as /users) */
221
+ "strip-prefix"?: string;
222
+ /** target URL (required for http-proxy) */
223
+ target?: string;
224
+ /** create as a team integration */
225
+ team?: boolean;
226
+ }
227
+ /** Options for {@link ExedevClient.integrationsRemove}. */
228
+ export interface IntegrationsRemoveOptions extends CallOptions {
229
+ /** operate on a team integration */
230
+ team?: boolean;
231
+ }
232
+ /** Options for {@link ExedevClient.integrationsTest}. */
233
+ export interface IntegrationsTestOptions extends CallOptions {
234
+ /** operate on a team integration */
235
+ team?: boolean;
236
+ }
237
+ /** Options for {@link ExedevClient.integrationsEdit}. */
238
+ export interface IntegrationsEditOptions extends CallOptions {
239
+ /** authenticate as your GitHub user instead of the exe.dev app (github only) */
240
+ "act-as-user"?: boolean;
241
+ /** bearer token (shorthand for --header="Authorization:Bearer TOKEN"; combines with --header) */
242
+ bearer?: string;
243
+ /** remove injected headers for http-proxy */
244
+ "clear-header"?: boolean;
245
+ /** free-form comment stored with the integration */
246
+ comment?: string;
247
+ /** comma-separated reflection fields to expose (email, integrations, tags, comment, default_port); 'all' exposes every field including ones added in the future; 'none' disables every field */
248
+ fields?: string;
249
+ /** header to inject for http-proxy; can be repeated; replaces all existing headers */
250
+ header?: string | readonly string[];
251
+ /** replacement host keys for ssh-key; replaces the whole list; can be repeated; one - reads them piped in */
252
+ "host-key"?: string | readonly string[];
253
+ /** remove injected authentication for http-proxy */
254
+ "no-auth"?: boolean;
255
+ /** restrict the integration to read access (github only) */
256
+ readonly?: boolean;
257
+ /** GitHub repository in owner/repo format */
258
+ repository?: string;
259
+ /** path prefix to strip from each request before forwarding (http-proxy only; e.g. /api/v3; empty clears it) */
260
+ "strip-prefix"?: string;
261
+ /** target URL for http-proxy */
262
+ target?: string;
263
+ /** edit a team integration */
264
+ team?: boolean;
265
+ /** replacement Slack or Discord webhook URL */
266
+ "webhook-url"?: string;
267
+ }
268
+ /** Options for {@link ExedevClient.integrationsAttach}. */
269
+ export interface IntegrationsAttachOptions extends CallOptions {
270
+ /** time-box the attachment to a duration from now (e.g. 2h, 45m); access lapses automatically */
271
+ for?: string;
272
+ /** operate on a team integration */
273
+ team?: boolean;
274
+ /** time-box the attachment until an RFC3339 instant (e.g. 2026-08-03T20:00:00Z) */
275
+ until?: string;
276
+ }
277
+ /** Options for {@link ExedevClient.integrationsDetach}. */
278
+ export interface IntegrationsDetachOptions extends CallOptions {
279
+ /** operate on a team integration */
280
+ team?: boolean;
281
+ }
282
+ /** Options for {@link ExedevClient.integrationsRename}. */
283
+ export interface IntegrationsRenameOptions extends CallOptions {
284
+ /** operate on a team integration */
285
+ team?: boolean;
286
+ }
287
+ /** Options for {@link ExedevClient.teamDisable}. */
288
+ export interface TeamDisableOptions extends CallOptions {
289
+ /** skip the confirmation prompt (required for non-interactive use, e.g. the web UI) */
290
+ yes?: boolean;
291
+ }
292
+ /** Options for {@link ExedevClient.teamRemove}. */
293
+ export interface TeamRemoveOptions extends CallOptions {
294
+ /** transfer the member's VMs to this team member before removing them */
295
+ "transfer-vms-to"?: string;
296
+ }
297
+ /** Options for {@link ExedevClient.teamBillingPlan}. */
298
+ export interface TeamBillingPlanOptions extends CallOptions {
299
+ /** list the plans you can switch to */
300
+ all?: boolean;
301
+ }
302
+ /** Options for {@link ExedevClient.teamBillingUpdate}. */
303
+ export interface TeamBillingUpdateOptions extends CallOptions {
304
+ /** billing address city */
305
+ "address-city"?: string;
306
+ /** billing address country code */
307
+ "address-country"?: string;
308
+ /** billing address line 1 */
309
+ "address-line1"?: string;
310
+ /** billing address line 2 */
311
+ "address-line2"?: string;
312
+ /** billing address postal code */
313
+ "address-postal-code"?: string;
314
+ /** billing address state or province */
315
+ "address-state"?: string;
316
+ /** business name shown on invoices */
317
+ "business-name"?: string;
318
+ /** billing email shown on invoices */
319
+ email?: string;
320
+ /** customer name shown on invoices */
321
+ name?: string;
322
+ /** phone number shown on invoices */
323
+ phone?: string;
324
+ /** tax ID type shown on invoices (e.g. eu_vat, pl_nip, us_ein) */
325
+ "tax-id-type"?: string;
326
+ /** tax ID value shown on invoices */
327
+ "tax-id-value"?: string;
328
+ }
329
+ /** Options for {@link ExedevClient.teamAuthSet}. */
330
+ export interface TeamAuthSetOptions extends CallOptions {
331
+ /** OIDC client ID */
332
+ "client-id"?: string;
333
+ /** OIDC client secret */
334
+ "client-secret"?: string;
335
+ /** display name for the SSO provider */
336
+ "display-name"?: string;
337
+ /** OIDC issuer URL (e.g. https://accounts.google.com) */
338
+ "issuer-url"?: string;
339
+ }
340
+ /** Options for {@link ExedevClient.teamSettingsVmPlacementMemberPool}. */
341
+ export interface TeamSettingsVmPlacementMemberPoolOptions extends CallOptions {
342
+ /** CPUs to reserve for each member pool (required) */
343
+ cpus?: number;
344
+ /** maximum VMs in each member pool (Work defaults to 25 per vCPU, up to 1000) (default: 100) */
345
+ "max-vms"?: number;
346
+ }
347
+ /** Options for {@link ExedevClient.teamVmLs}. */
348
+ export interface TeamVmLsOptions extends CallOptions {
349
+ /** group VMs by none|tag|region|type|user|access (default: none) */
350
+ group?: "none" | "tag" | "region" | "user" | "access";
351
+ /** show detailed information */
352
+ l?: boolean;
353
+ }
354
+ /** Options for {@link ExedevClient.poolNew}. */
355
+ export interface PoolNewOptions extends CallOptions {
356
+ /** number of CPUs reserved for the pool (required; an even number of vCPUs from 2 through 512 (2, 4, 6, and so on; memory is 2 GiB per vCPU)) */
357
+ cpus?: number;
358
+ /** maximum VMs in the pool (Work defaults to the size limit of up to 25 VMs per vCPU, capped at 1000 VMs) (default: 100) */
359
+ "max-vms"?: number;
360
+ /** region code for the pool (required unless your team has dedicated hosts, which decide the region) */
361
+ region?: string;
362
+ }
363
+ /** Options for {@link ExedevClient.poolList}. */
364
+ export interface PoolListOptions extends CallOptions {
365
+ /** statistics range: live, 24h, 7d, or 30d (requires --usage) (default: live) */
366
+ range?: string;
367
+ /** show live or historical CPU and starvation statistics */
368
+ usage?: boolean;
369
+ }
370
+ /** Options for {@link ExedevClient.poolAdopt}. */
371
+ export interface PoolAdoptOptions extends CallOptions {
372
+ /** pool to adopt into (required) */
373
+ pool?: string;
374
+ /** VM to adopt (required) */
375
+ vm?: string;
376
+ }
377
+ /** Options for {@link ExedevClient.poolDetach}. */
378
+ export interface PoolDetachOptions extends CallOptions {
379
+ /** leave the VM outside any pool instead of making it standalone (only while your team has poolless VMs) */
380
+ poolless?: boolean;
381
+ /** VM to detach from its pool (required) */
382
+ vm?: string;
383
+ }
384
+ /** Options for {@link ExedevClient.poolResize}. */
385
+ export interface PoolResizeOptions extends CallOptions {
386
+ /** new pool size in vCPUs (required unless --max-vms is set; even, from 2 up to the placement limit) */
387
+ cpus?: number;
388
+ /** allow --max-vms below the current VM count (does not stop or evict VMs) */
389
+ force?: boolean;
390
+ /** maximum VMs in the pool (Work: at most 25 per vCPU, up to 1000) */
391
+ "max-vms"?: string;
392
+ }
393
+ /** Options for {@link ExedevClient.billingPlan}. */
394
+ export interface BillingPlanOptions extends CallOptions {
395
+ /** list the plans you can switch to */
396
+ all?: boolean;
397
+ }
398
+ /** Options for {@link ExedevClient.billingUsage}. */
399
+ export interface BillingUsageOptions extends CallOptions {
400
+ /** group usage by: vm */
401
+ group?: string;
402
+ /** time range: cycle (current billing cycle), 24h, 7d, or 30d (default: cycle) */
403
+ range?: string;
404
+ }
405
+ /** Options for {@link ExedevClient.billingCreditsUsage}. */
406
+ export interface BillingCreditsUsageOptions extends CallOptions {
407
+ /** break each group down: models under a day or VM, VMs under a model */
408
+ detail?: boolean;
409
+ /** group spend by model, day, or box (default: model) */
410
+ group?: string;
411
+ /** calendar month to report, as YYYY-MM (default: this month, UTC) */
412
+ month?: string;
413
+ }
414
+ /** Options for {@link ExedevClient.billingCreditsTransactions}. */
415
+ export interface BillingCreditsTransactionsOptions extends CallOptions {
416
+ /** how many transactions to show, 1-100 (default 20) */
417
+ limit?: string;
418
+ }
419
+ /** Options for {@link ExedevClient.billingCreditsBuy}. */
420
+ export interface BillingCreditsBuyOptions extends CallOptions {
421
+ /** retry key so a repeated purchase of the same amount charges once */
422
+ "idempotency-key"?: string;
423
+ /** skip the confirmation prompt (required when not running interactively) */
424
+ yes?: boolean;
425
+ }
426
+ /** Options for {@link ExedevClient.billingCapacity}. */
427
+ export interface BillingCapacityOptions extends CallOptions {
428
+ /** Personal capacity in vCPUs: 2, 4, 8, or 16 */
429
+ cpu?: number;
430
+ /** skip interactive confirmation (required for non-interactive changes) */
431
+ yes?: boolean;
432
+ }
433
+ /** Options for {@link ExedevClient.billingUpdate}. */
434
+ export interface BillingUpdateOptions extends CallOptions {
435
+ /** billing address city */
436
+ "address-city"?: string;
437
+ /** billing address country code */
438
+ "address-country"?: string;
439
+ /** billing address line 1 */
440
+ "address-line1"?: string;
441
+ /** billing address line 2 */
442
+ "address-line2"?: string;
443
+ /** billing address postal code */
444
+ "address-postal-code"?: string;
445
+ /** billing address state or province */
446
+ "address-state"?: string;
447
+ /** business name shown on invoices */
448
+ "business-name"?: string;
449
+ /** billing email shown on invoices */
450
+ email?: string;
451
+ /** customer name shown on invoices */
452
+ name?: string;
453
+ /** phone number shown on invoices */
454
+ phone?: string;
455
+ /** tax ID type shown on invoices (e.g. eu_vat, pl_nip, us_ein) */
456
+ "tax-id-type"?: string;
457
+ /** tax ID value shown on invoices */
458
+ "tax-id-value"?: string;
459
+ }
460
+ /** Options for {@link ExedevClient.billingInvoicesList}. */
461
+ export interface BillingInvoicesListOptions extends CallOptions {
462
+ /** account whose invoices to list: personal or team (default: personal) */
463
+ account?: string;
464
+ }
465
+ /** Options for {@link ExedevClient.billingInvoicesShow}. */
466
+ export interface BillingInvoicesShowOptions extends CallOptions {
467
+ /** list VMs without a pool individually */
468
+ vms?: boolean;
469
+ }
470
+ /** Options for {@link ExedevClient.billingReceipts}. */
471
+ export interface BillingReceiptsOptions extends CallOptions {
472
+ /** start of the period, YYYY-MM-DD */
473
+ from?: string;
474
+ /** end of the period, YYYY-MM-DD */
475
+ to?: string;
476
+ }
477
+ /** Options for {@link ExedevClient.billingStatement}. */
478
+ export interface BillingStatementOptions extends CallOptions {
479
+ /** start of the period, YYYY-MM-DD */
480
+ from?: string;
481
+ /** end of the period, YYYY-MM-DD */
482
+ to?: string;
483
+ }
484
+ /** Options for {@link ExedevClient.billingProviderLink}. */
485
+ export interface BillingProviderLinkOptions extends CallOptions {
486
+ /** team size: no marketplace team plans are available */
487
+ size?: string;
488
+ /** name for the team to create (only when you have no team yet) */
489
+ "team-name"?: string;
490
+ /** marketplace link token from the exe.dev link page */
491
+ token?: string;
492
+ }
493
+ /** Options for {@link ExedevClient.browser}. */
494
+ export interface BrowserOptions extends CallOptions {
495
+ /** show QR code for the URL */
496
+ qr?: boolean;
497
+ }
498
+ /** Options for {@link VM.stat}. */
499
+ export interface StatOptions extends CallOptions {
500
+ /** time range: 24h, 7d, or 30d (default: 24h) */
501
+ range?: string;
502
+ }
503
+ export declare class ExedevClient {
504
+ #private;
505
+ constructor(options: ExedevOptions);
506
+ /** Reference an existing VM without a request. Use refresh() to fetch its metadata. */
507
+ vm(name: string): VM;
508
+ /**
509
+ * Browse documentation
510
+ *
511
+ * Usage: `doc [slug-or-query...]`
512
+ *
513
+ * Tag-scoped API keys may run this command.
514
+ */
515
+ doc(slugOrQueries?: string | readonly string[], options?: CallOptions): Promise<CommandResult<"doc">>;
516
+ /**
517
+ * List your VMs
518
+ *
519
+ * Usage: `ls [-l] [--group=tag|region|type] [name|pattern]`
520
+ *
521
+ * Tag-scoped API keys may run this command.
522
+ */
523
+ ls(nameOrPattern?: string, options?: LsOptions): Promise<VM[]>;
524
+ /**
525
+ * Create a new VM
526
+ *
527
+ * CLI examples:
528
+ * ```
529
+ * new # just give me a computer
530
+ * new --name=b --image=ubuntu:22.04 # custom image and name
531
+ * new --cpu=4 --memory=16GB # 4 CPUs, 16GB RAM
532
+ * new --disk=50GB # 50GB disk
533
+ * new --tag=prod,staging # create with tags
534
+ * new --env FOO=bar --env BAZ=qux # with environment variables
535
+ * new --integration=myproxy # attach an integration
536
+ * echo 'build me a web app' | ssh exe.dev new --prompt=/dev/stdin
537
+ * ```
538
+ *
539
+ * Tag-scoped API keys may run this command.
540
+ */
541
+ new(options?: NewOptions): Promise<VM>;
542
+ /**
543
+ * List custom domains for a VM (or -a for all your VMs)
544
+ *
545
+ * Usage: `domain ls <vm> | domain ls -a`
546
+ */
547
+ domainLs(args?: readonly string[], options?: DomainLsOptions): Promise<CommandResult<"domain ls">>;
548
+ /**
549
+ * Show user information (email, keys, etc)
550
+ *
551
+ * Usage: `whoami`
552
+ *
553
+ * Tag-scoped API keys may run this command.
554
+ */
555
+ whoami(options?: CallOptions): Promise<CommandResult<"whoami">>;
556
+ /**
557
+ * List all SSH keys associated with your account
558
+ *
559
+ * Usage: `ssh-key list`
560
+ *
561
+ * Tag-scoped API keys may run this command.
562
+ */
563
+ sshKeyList(options?: CallOptions): Promise<CommandResult<"ssh-key list">>;
564
+ /**
565
+ * Add a new SSH key to your account
566
+ *
567
+ * Usage: `ssh-key add [--tag=TAG] <public-key>`
568
+ *
569
+ * CLI examples:
570
+ * ```
571
+ * ssh-key add 'ssh-ed25519 AAAA... my-laptop'
572
+ *
573
+ * To generate a new key locally:
574
+ * ssh-keygen -t ed25519 -C "mnemonic-for-this-key" -f ~/.ssh/id_exe
575
+ *
576
+ * The -C flag sets a name for the key.
577
+ *
578
+ * Then add the public key from your local shell:
579
+ * cat ~/.ssh/id_exe.pub | ssh exe.dev ssh-key add
580
+ *
581
+ * Or from the exe.dev shell:
582
+ * ssh-key add 'ssh-ed25519 AAAA... my-laptop'
583
+ * ```
584
+ *
585
+ * Tag-scoped API keys may run this command.
586
+ */
587
+ sshKeyAdd(publicKey: string, options?: SshKeyAddOptions): Promise<CommandResult<"ssh-key add">>;
588
+ /**
589
+ * Remove an SSH key from your account
590
+ *
591
+ * Usage: `ssh-key remove <name|fingerprint|public-key>`
592
+ *
593
+ * Tag-scoped API keys may run this command.
594
+ */
595
+ sshKeyRemove(nameOrFingerprintOrPublicKey: string, options?: CallOptions): Promise<CommandResult<"ssh-key remove">>;
596
+ /**
597
+ * Rename an SSH key
598
+ *
599
+ * Usage: `ssh-key rename <old-name> <new-name>`
600
+ *
601
+ * Tag-scoped API keys may run this command.
602
+ */
603
+ sshKeyRename(oldName: string, newName: string, options?: CallOptions): Promise<CommandResult<"ssh-key rename">>;
604
+ /**
605
+ * Generate an API key for the exe.dev HTTPS API or for a specific VM
606
+ *
607
+ * Usage: `ssh-key generate-api-key [--label=NAME] [--vm=VMNAME] [--cmds=CMD1,CMD2] [--exp=30d]`
608
+ *
609
+ * CLI examples:
610
+ * ```
611
+ * # Generate a key for the exe.dev API (lobby commands like ls, new, whoami):
612
+ * ssh-key generate-api-key --label=ci --cmds=ls,new --exp=90d
613
+ *
614
+ * # Generate a key scoped to a VM (authenticates to its HTTPS proxy):
615
+ * ssh-key generate-api-key --vm=my-vm --label=deploy
616
+ * ```
617
+ *
618
+ * Tag-scoped API keys may run this command.
619
+ */
620
+ sshKeyGenerateApiKey(options?: SshKeyGenerateApiKeyOptions): Promise<CommandResult<"ssh-key generate-api-key">>;
621
+ /**
622
+ * Set your preferred region for new VMs.
623
+ *
624
+ * Usage: `set-region <region-code>`
625
+ */
626
+ setRegion(regionCode: string, options?: CallOptions): Promise<CommandResult<"set-region">>;
627
+ /**
628
+ * List your integrations
629
+ *
630
+ * Usage: `integrations list [--json [--usage]]`
631
+ *
632
+ * Tag-scoped API keys may run this command.
633
+ */
634
+ integrationsList(options?: IntegrationsListOptions): Promise<CommandResult<"integrations list">>;
635
+ /**
636
+ * Set up GitHub integration
637
+ *
638
+ * Usage: `integrations setup github [--list|--verify|-d]`
639
+ */
640
+ integrationsSetupGithub(options?: IntegrationsSetupGithubOptions): Promise<CommandResult<"integrations setup github">>;
641
+ /**
642
+ * Set up ChatGPT account access for LLM integrations
643
+ *
644
+ * Usage: `integrations setup chatgpt [--name=<account-name>|--list|--verify|-d]`
645
+ */
646
+ integrationsSetupChatgpt(options?: IntegrationsSetupChatgptOptions): Promise<CommandResult<"integrations setup chatgpt">>;
647
+ /**
648
+ * Add a new integration
649
+ *
650
+ * Credential value flags (keys, tokens, passwords, bearer tokens, and webhook URLs) accept - to read from stdin.
651
+ *
652
+ * Usage: `integrations add <type> [--default | --name=<name> [--team] [args...]]`
653
+ */
654
+ integrationsAdd(type: string, options?: IntegrationsAddOptions): Promise<CommandResult<"integrations add">>;
655
+ /**
656
+ * Remove an integration
657
+ *
658
+ * Usage: `integrations remove <name> [--team]`
659
+ */
660
+ integrationsRemove(name: string, options?: IntegrationsRemoveOptions): Promise<CommandResult<"integrations remove">>;
661
+ /**
662
+ * Test an integration's credential (connection check)
663
+ *
664
+ * Usage: `integrations test <name> [--team]`
665
+ */
666
+ integrationsTest(name: string, options?: IntegrationsTestOptions): Promise<CommandResult<"integrations test">>;
667
+ /**
668
+ * Edit an integration
669
+ *
670
+ * Credential value flags (keys, tokens, passwords, bearer tokens, and webhook URLs) accept - to read from stdin.
671
+ *
672
+ * Usage: `integrations edit <name> [--team] [args...]`
673
+ */
674
+ integrationsEdit(name: string, args?: string | readonly string[], options?: IntegrationsEditOptions): Promise<CommandResult<"integrations edit">>;
675
+ /**
676
+ * Attach an integration to a VM, tag, or all VMs
677
+ *
678
+ * A <spec> controls where the integration is mounted:
679
+ * vm:<vm-name> attach to a specific VM (personal only)
680
+ * tag:<tag-name> attach to every VM with the given tag
681
+ * auto:all attach to all current and future VMs (personal only)
682
+ *
683
+ * You can attach the same integration multiple times with different specs.
684
+ * Team integrations only support tag:<tag-name>.
685
+ *
686
+ * A grant can be time-boxed with --for <duration> or --until <RFC3339>;
687
+ * when it lapses, access stops immediately, with nothing to revoke.
688
+ * Re-attaching the same spec with a new --for/--until extends or shortens it.
689
+ *
690
+ * Usage: `integrations attach <name> <spec> [--team] [--for <duration> | --until <time>]`
691
+ *
692
+ * CLI examples:
693
+ * ```
694
+ * int attach my-mcp vm:dev1
695
+ * int attach my-mcp tag:production
696
+ * int attach my-mcp auto:all
697
+ * int attach shared-mcp tag:production
698
+ * int attach gmail vm:dev1 --for 2h
699
+ * ```
700
+ */
701
+ integrationsAttach(name: string, spec: string, options?: IntegrationsAttachOptions): Promise<CommandResult<"integrations attach">>;
702
+ /**
703
+ * Detach an integration from a VM, tag, or all VMs
704
+ *
705
+ * Usage: `integrations detach <name> <spec> [--team]`
706
+ */
707
+ integrationsDetach(name: string, spec: string, options?: IntegrationsDetachOptions): Promise<CommandResult<"integrations detach">>;
708
+ /**
709
+ * Rename an integration
710
+ *
711
+ * Usage: `integrations rename <name> <new-name> [--team]`
712
+ */
713
+ integrationsRename(name: string, newName: string, options?: IntegrationsRenameOptions): Promise<CommandResult<"integrations rename">>;
714
+ /**
715
+ * Browse the catalog of ready-made service integrations
716
+ *
717
+ * Usage: `integrations catalog [service-or-search-term]`
718
+ *
719
+ * CLI examples:
720
+ * ```
721
+ * int catalog
722
+ * int catalog stripe
723
+ * ```
724
+ */
725
+ integrationsCatalog(serviceOrSearchTerm?: string, options?: CallOptions): Promise<CommandResult<"integrations catalog">>;
726
+ /**
727
+ * View and manage your team
728
+ */
729
+ team(options?: CallOptions): Promise<CommandResult<"team">>;
730
+ /**
731
+ * Disband your team
732
+ *
733
+ * Usage: `team disable`
734
+ */
735
+ teamDisable(options?: TeamDisableOptions): Promise<CommandResult<"team disable">>;
736
+ /**
737
+ * List team members
738
+ *
739
+ * Usage: `team members`
740
+ */
741
+ teamMembers(options?: CallOptions): Promise<CommandResult<"team members">>;
742
+ /**
743
+ * Show team pool, disk, and bandwidth usage for the billing period
744
+ *
745
+ * Usage: `team usage`
746
+ */
747
+ teamUsage(options?: CallOptions): Promise<CommandResult<"team usage">>;
748
+ /**
749
+ * Add a user to the team
750
+ *
751
+ * Usage: `team add <email> [<user|admin|billing_owner>]`
752
+ */
753
+ teamAdd(email: string, userOrAdminOrBillingOwner?: "user" | "admin" | "billing_owner", options?: CallOptions): Promise<CommandResult<"team add">>;
754
+ /**
755
+ * Remove a user from the team
756
+ *
757
+ * Usage: `team remove <email> [--transfer-vms-to <email>]`
758
+ */
759
+ teamRemove(email: string, options?: TeamRemoveOptions): Promise<CommandResult<"team remove">>;
760
+ /**
761
+ * Change a team member's role
762
+ *
763
+ * Usage: `team role <email> <user|admin|billing_owner>`
764
+ */
765
+ teamRole(email: string, userOrAdminOrBillingOwner: "user" | "admin" | "billing_owner", options?: CallOptions): Promise<CommandResult<"team role">>;
766
+ /**
767
+ * Rename your team
768
+ *
769
+ * Usage: `team rename <name>`
770
+ */
771
+ teamRename(name: string, options?: CallOptions): Promise<CommandResult<"team rename">>;
772
+ /**
773
+ * Show your team's plan
774
+ *
775
+ * Usage: `team billing plan [--all]`
776
+ *
777
+ * CLI examples:
778
+ * ```
779
+ * team billing plan
780
+ * team billing plan --all # plans your team can switch to
781
+ * ```
782
+ */
783
+ teamBillingPlan(options?: TeamBillingPlanOptions): Promise<CommandResult<"team billing plan">>;
784
+ /**
785
+ * Update team billing information
786
+ *
787
+ * Usage: `team billing update [--email=<email>] [--name=<name>] [--business-name=<name>] [--phone=<phone>] [--address-line1=<line>] [--address-line2=<line>] [--address-city=<city>] [--address-state=<state>] [--address-postal-code=<code>] [--address-country=<country>] [--tax-id-type=<type>] [--tax-id-value=<value>]`
788
+ */
789
+ teamBillingUpdate(options?: TeamBillingUpdateOptions): Promise<CommandResult<"team billing update">>;
790
+ /**
791
+ * Transfer a VM to another team member
792
+ *
793
+ * Usage: `team transfer <vm_name> <target_email>`
794
+ */
795
+ teamTransfer(vmName: string, targetEmail: string, options?: CallOptions): Promise<CommandResult<"team transfer">>;
796
+ /**
797
+ * View and manage team auth settings
798
+ *
799
+ * Usage: `team auth`
800
+ */
801
+ teamAuth(options?: CallOptions): Promise<CommandResult<"team auth">>;
802
+ /**
803
+ * Require OIDC for web login (web|off)
804
+ *
805
+ * Usage: `team auth require-oidc <web|off>`
806
+ */
807
+ teamAuthRequireOidc(webOrOff: "web" | "off", options?: CallOptions): Promise<CommandResult<"team auth require-oidc">>;
808
+ /**
809
+ * Set the team auth provider (default, google, oidc)
810
+ *
811
+ * Usage: `team auth set <default|google|oidc> [--issuer-url=<url> --client-id=<id> --client-secret=<secret>]`
812
+ */
813
+ teamAuthSet(defaultOrGoogleOrOidc: "default" | "google" | "oidc", options?: TeamAuthSetOptions): Promise<CommandResult<"team auth set">>;
814
+ /**
815
+ * View and manage team settings
816
+ *
817
+ * Usage: `team settings`
818
+ */
819
+ teamSettings(options?: CallOptions): Promise<CommandResult<"team settings">>;
820
+ /**
821
+ * View and manage automatic VM placement
822
+ *
823
+ * Usage: `team settings vm-placement`
824
+ */
825
+ teamSettingsVmPlacement(options?: CallOptions): Promise<CommandResult<"team settings vm-placement">>;
826
+ /**
827
+ * Use ordinary VM placement
828
+ *
829
+ * Usage: `team settings vm-placement default`
830
+ */
831
+ teamSettingsVmPlacementDefault(options?: CallOptions): Promise<CommandResult<"team settings vm-placement default">>;
832
+ /**
833
+ * Send bare new commands to a shared team pool
834
+ *
835
+ * Usage: `team settings vm-placement pool <name>`
836
+ */
837
+ teamSettingsVmPlacementPool(name: string, options?: CallOptions): Promise<CommandResult<"team settings vm-placement pool">>;
838
+ /**
839
+ * Create or reuse one team pool per member for bare new commands
840
+ *
841
+ * Usage: `team settings vm-placement member-pool --cpus=N [--max-vms=N]`
842
+ */
843
+ teamSettingsVmPlacementMemberPool(options?: TeamSettingsVmPlacementMemberPoolOptions): Promise<CommandResult<"team settings vm-placement member-pool">>;
844
+ /**
845
+ * Keep bare new commands outside pools while migrating (legacy)
846
+ *
847
+ * Usage: `team settings vm-placement poolless`
848
+ */
849
+ teamSettingsVmPlacementPoolless(options?: CallOptions): Promise<CommandResult<"team settings vm-placement poolless">>;
850
+ /**
851
+ * Set who can create standalone VMs
852
+ *
853
+ * Usage: `team settings standalone <off|admins-only|all-users>`
854
+ */
855
+ teamSettingsStandalone(offOrAdminsOnlyOrAllUsers: "off" | "admins-only" | "all-users", options?: CallOptions): Promise<CommandResult<"team settings standalone">>;
856
+ /**
857
+ * Allow or block the exe.dev LLM gateway (your own API keys are unaffected)
858
+ *
859
+ * Usage: `team settings llm-gateway <on|off>`
860
+ */
861
+ teamSettingsLlmGateway(onOrOff: "on" | "off", options?: CallOptions): Promise<CommandResult<"team settings llm-gateway">>;
862
+ /**
863
+ * Allow team VMs to share CPU cores with each other
864
+ *
865
+ * Usage: `team settings core-sharing <on|off>`
866
+ */
867
+ teamSettingsCoreSharing(onOrOff: "on" | "off", options?: CallOptions): Promise<CommandResult<"team settings core-sharing">>;
868
+ /**
869
+ * Set who can share team VMs
870
+ *
871
+ * Usage: `team settings vm-sharing <admins-only|all-members>`
872
+ */
873
+ teamSettingsVmSharing(adminsOnlyOrAllMembers: "admins-only" | "all-members", options?: CallOptions): Promise<CommandResult<"team settings vm-sharing">>;
874
+ /**
875
+ * Set how long members stay signed in on the web and mobile apps
876
+ *
877
+ * Usage: `team settings session-length <length>`
878
+ *
879
+ * CLI examples:
880
+ * ```
881
+ * team settings session-length 1d
882
+ * team settings session-length default
883
+ * ```
884
+ */
885
+ teamSettingsSessionLength(length: string, options?: CallOptions): Promise<CommandResult<"team settings session-length">>;
886
+ /**
887
+ * Allow users from your email domain to join this team on signup
888
+ *
889
+ * Usage: `team settings auto-join <on|off>`
890
+ */
891
+ teamSettingsAutoJoin(onOrOff: "on" | "off", options?: CallOptions): Promise<CommandResult<"team settings auto-join">>;
892
+ /**
893
+ * List all VMs across your team
894
+ *
895
+ * Usage: `team vm ls [-l] [--group=tag|region|type|user|access] [name|pattern]`
896
+ *
897
+ * Tag-scoped API keys may run this command.
898
+ */
899
+ teamVmLs(nameOrPattern?: string, options?: TeamVmLsOptions): Promise<CommandResult<"team vm ls">>;
900
+ /**
901
+ * Create a pool: reserved capacity for your team's VMs
902
+ *
903
+ * Usage: `pool new <name> --cpus=N [--region=<region>] [--max-vms=M]`
904
+ */
905
+ poolNew(name: string, options?: PoolNewOptions): Promise<CommandResult<"pool new">>;
906
+ /**
907
+ * Show your team's dedicated hosts, where its new pools are placed
908
+ *
909
+ * Usage: `pool hosts`
910
+ */
911
+ poolHosts(options?: CallOptions): Promise<CommandResult<"pool hosts">>;
912
+ /**
913
+ * List your team's pools, or show live or historical usage with --usage
914
+ *
915
+ * Usage: `pool list [pool-name] [--usage [--range=live|24h|7d|30d]]`
916
+ */
917
+ poolList(poolName?: string, options?: PoolListOptions): Promise<CommandResult<"pool list">>;
918
+ /**
919
+ * Adopt a VM into a pool; this can take several minutes
920
+ *
921
+ * Usage: `pool adopt --vm=<vm-name> --pool=<pool-name>`
922
+ *
923
+ * CLI examples:
924
+ * ```
925
+ * pool adopt --vm=builder --pool=compile
926
+ * ```
927
+ */
928
+ poolAdopt(options?: PoolAdoptOptions): Promise<CommandResult<"pool adopt">>;
929
+ /**
930
+ * Detach a VM from its pool into its own standalone capacity (--poolless leaves it outside any pool)
931
+ *
932
+ * Usage: `pool detach --vm=<vm-name> [--poolless]`
933
+ *
934
+ * CLI examples:
935
+ * ```
936
+ * pool detach --vm=builder
937
+ * pool detach --vm=builder --poolless
938
+ * ```
939
+ */
940
+ poolDetach(options?: PoolDetachOptions): Promise<CommandResult<"pool detach">>;
941
+ /**
942
+ * Change a pool's CPU capacity or VM cap
943
+ *
944
+ * Usage: `pool resize <name> --cpus=N | pool resize <name> --max-vms=N [--force]`
945
+ */
946
+ poolResize(args?: readonly string[], options?: PoolResizeOptions): Promise<CommandResult<"pool resize">>;
947
+ /**
948
+ * Rename a pool without changing its capacity or VMs
949
+ *
950
+ * Usage: `pool rename <old-name> <new-name>`
951
+ */
952
+ poolRename(oldName: string, newName: string, options?: CallOptions): Promise<CommandResult<"pool rename">>;
953
+ /**
954
+ * Delete a pool (refused while it has VMs; --force detaches them)
955
+ *
956
+ * Usage: `pool delete <name> [--force]`
957
+ */
958
+ poolDelete(name: string, options?: CallOptions): Promise<CommandResult<"pool delete">>;
959
+ /**
960
+ * Show your current plan and resource limits
961
+ *
962
+ * Usage: `billing plan [--all]`
963
+ *
964
+ * CLI examples:
965
+ * ```
966
+ * billing plan
967
+ * billing plan --all # plans you can switch to
968
+ * ```
969
+ */
970
+ billingPlan(options?: BillingPlanOptions): Promise<CommandResult<"billing plan">>;
971
+ /**
972
+ * Show VM resource usage against your plan quotas
973
+ *
974
+ * Usage: `billing usage [--range=cycle|24h|7d|30d] [--group=vm]`
975
+ *
976
+ * CLI examples:
977
+ * ```
978
+ * billing usage --range=7d
979
+ * billing credits usage # Shelley/LLM credit spend instead
980
+ * ```
981
+ */
982
+ billingUsage(options?: BillingUsageOptions): Promise<CommandResult<"billing usage">>;
983
+ /**
984
+ * Show Shelley credit balances
985
+ *
986
+ * Usage: `billing credits [usage|transactions|buy]`
987
+ */
988
+ billingCredits(options?: CallOptions): Promise<CommandResult<"billing credits">>;
989
+ /**
990
+ * Show Shelley (LLM) credit spend by model, day, or VM
991
+ *
992
+ * Usage: `billing credits usage [--month=YYYY-MM] [--group=model|day|box] [--detail]`
993
+ *
994
+ * CLI examples:
995
+ * ```
996
+ * billing credits usage --group=day
997
+ * billing credits usage --group=box --detail
998
+ * billing credits usage --month=2026-05 --group=box
999
+ * ```
1000
+ */
1001
+ billingCreditsUsage(options?: BillingCreditsUsageOptions): Promise<CommandResult<"billing credits usage">>;
1002
+ /**
1003
+ * Show your credit purchases and gifts
1004
+ *
1005
+ * Usage: `billing credits transactions [--limit=N]`
1006
+ */
1007
+ billingCreditsTransactions(options?: BillingCreditsTransactionsOptions): Promise<CommandResult<"billing credits transactions">>;
1008
+ /**
1009
+ * Buy Shelley credits with your personal payment method
1010
+ *
1011
+ * Usage: `billing credits buy <dollars> [--yes]`
1012
+ *
1013
+ * CLI examples:
1014
+ * ```
1015
+ * billing credits buy 25
1016
+ * billing credits buy 100 --yes
1017
+ * ```
1018
+ */
1019
+ billingCreditsBuy(dollars: string, options?: BillingCreditsBuyOptions): Promise<CommandResult<"billing credits buy">>;
1020
+ /**
1021
+ * Show invite rewards you've earned
1022
+ *
1023
+ * Usage: `billing rewards`
1024
+ */
1025
+ billingRewards(options?: CallOptions): Promise<CommandResult<"billing rewards">>;
1026
+ /**
1027
+ * Change your subscription capacity
1028
+ *
1029
+ * Usage: `billing capacity [--cpu=N] [--yes]`
1030
+ *
1031
+ * CLI examples:
1032
+ * ```
1033
+ * billing capacity
1034
+ * billing capacity --cpu=4 --yes
1035
+ * ```
1036
+ */
1037
+ billingCapacity(options?: BillingCapacityOptions): Promise<CommandResult<"billing capacity">>;
1038
+ /**
1039
+ * Show your payment methods
1040
+ *
1041
+ * Usage: `billing payment [list]`
1042
+ */
1043
+ billingPayment(options?: CallOptions): Promise<CommandResult<"billing payment">>;
1044
+ /**
1045
+ * List all payment methods on file
1046
+ *
1047
+ * Usage: `billing payment list`
1048
+ */
1049
+ billingPaymentList(options?: CallOptions): Promise<CommandResult<"billing payment list">>;
1050
+ /**
1051
+ * Remove a saved payment method
1052
+ *
1053
+ * Usage: `billing payment remove <ref>`
1054
+ *
1055
+ * CLI examples:
1056
+ * ```
1057
+ * billing payment remove 4f1c2a9b8d3e
1058
+ * ```
1059
+ */
1060
+ billingPaymentRemove(ref: string, options?: CallOptions): Promise<CommandResult<"billing payment remove">>;
1061
+ /**
1062
+ * Make a saved payment method the default
1063
+ *
1064
+ * Usage: `billing payment default <ref>`
1065
+ *
1066
+ * CLI examples:
1067
+ * ```
1068
+ * billing payment default 4f1c2a9b8d3e
1069
+ * ```
1070
+ */
1071
+ billingPaymentDefault(ref: string, options?: CallOptions): Promise<CommandResult<"billing payment default">>;
1072
+ /**
1073
+ * Open the billing management page
1074
+ *
1075
+ * Usage: `billing manage`
1076
+ */
1077
+ billingManage(options?: CallOptions): Promise<CommandResult<"billing manage">>;
1078
+ /**
1079
+ * Open the personal plan activation page
1080
+ *
1081
+ * Usage: `billing activate`
1082
+ */
1083
+ billingActivate(options?: CallOptions): Promise<CommandResult<"billing activate">>;
1084
+ /**
1085
+ * Update your billing contact information
1086
+ *
1087
+ * Usage: `billing update [--email=<email>] [--name=<name>] [--business-name=<name>] [--phone=<phone>] [--address-line1=<line>] [--address-line2=<line>] [--address-city=<city>] [--address-state=<state>] [--address-postal-code=<code>] [--address-country=<country>] [--tax-id-type=<type>] [--tax-id-value=<value>]`
1088
+ */
1089
+ billingUpdate(options?: BillingUpdateOptions): Promise<CommandResult<"billing update">>;
1090
+ /**
1091
+ * Show recent invoices
1092
+ *
1093
+ * Usage: `billing invoices`
1094
+ */
1095
+ billingInvoices(options?: CallOptions): Promise<CommandResult<"billing invoices">>;
1096
+ /**
1097
+ * List invoices for your personal or team account
1098
+ *
1099
+ * Usage: `billing invoices list [--account=personal|team]`
1100
+ *
1101
+ * CLI examples:
1102
+ * ```
1103
+ * billing invoices list --account=team
1104
+ * ```
1105
+ */
1106
+ billingInvoicesList(options?: BillingInvoicesListOptions): Promise<CommandResult<"billing invoices list">>;
1107
+ /**
1108
+ * Show one invoice with its usage breakdown
1109
+ *
1110
+ * Usage: `billing invoices show <id> [--vms]`
1111
+ *
1112
+ * CLI examples:
1113
+ * ```
1114
+ * billing invoices show in_1Abc --vms
1115
+ * ```
1116
+ */
1117
+ billingInvoicesShow(id: string, options?: BillingInvoicesShowOptions): Promise<CommandResult<"billing invoices show">>;
1118
+ /**
1119
+ * Show credit purchase receipts and purchases (this billing account only)
1120
+ *
1121
+ * Usage: `billing receipts [--from=<YYYY-MM-DD>] [--to=<YYYY-MM-DD>]`
1122
+ *
1123
+ * CLI examples:
1124
+ * ```
1125
+ * billing receipts --from=2026-01-01 --to=2026-06-30
1126
+ * ```
1127
+ */
1128
+ billingReceipts(options?: BillingReceiptsOptions): Promise<CommandResult<"billing receipts">>;
1129
+ /**
1130
+ * Open a consolidated credit purchase statement
1131
+ *
1132
+ * Usage: `billing statement [--from=<YYYY-MM-DD>] [--to=<YYYY-MM-DD>]`
1133
+ *
1134
+ * CLI examples:
1135
+ * ```
1136
+ * billing statement --from=2026-01-01 --to=2026-06-30
1137
+ * ```
1138
+ */
1139
+ billingStatement(options?: BillingStatementOptions): Promise<CommandResult<"billing statement">>;
1140
+ /**
1141
+ * Connect a marketplace subscription to your team
1142
+ *
1143
+ * Usage: `billing provider link <aws|azure> --token=<link-token> [--size=<team-size>] [--team-name=<name>]`
1144
+ */
1145
+ billingProviderLink(awsOrAzure: "aws" | "azure", options?: BillingProviderLinkOptions): Promise<CommandResult<"billing provider link">>;
1146
+ /**
1147
+ * Manage your invite link and rewards
1148
+ */
1149
+ invite(options?: CallOptions): Promise<CommandResult<"invite">>;
1150
+ /**
1151
+ * Show your active invite link and reward
1152
+ *
1153
+ * Usage: `invite show`
1154
+ */
1155
+ inviteShow(options?: CallOptions): Promise<CommandResult<"invite show">>;
1156
+ /**
1157
+ * Print only your active invite link
1158
+ *
1159
+ * Usage: `invite link`
1160
+ */
1161
+ inviteLink(options?: CallOptions): Promise<CommandResult<"invite link">>;
1162
+ /**
1163
+ * List invite rewards you can use
1164
+ *
1165
+ * Usage: `invite rewards`
1166
+ */
1167
+ inviteRewards(options?: CallOptions): Promise<CommandResult<"invite rewards">>;
1168
+ /**
1169
+ * Choose the reward for your invite link
1170
+ *
1171
+ * Usage: `invite set-reward standard|bonus-credits|extra-memory|extra-disk`
1172
+ */
1173
+ inviteSetReward(standardOrBonusCreditsOrExtraMemoryOrExtraDisk: "standard" | "bonus-credits" | "extra-memory" | "extra-disk", options?: CallOptions): Promise<CommandResult<"invite set-reward">>;
1174
+ /**
1175
+ * Show signups, upgrades, and reward status
1176
+ *
1177
+ * Usage: `invite activity`
1178
+ */
1179
+ inviteActivity(options?: CallOptions): Promise<CommandResult<"invite activity">>;
1180
+ /**
1181
+ * Request more trial invites
1182
+ *
1183
+ * Usage: `invite request`
1184
+ */
1185
+ inviteRequest(options?: CallOptions): Promise<CommandResult<"invite request">>;
1186
+ /**
1187
+ * Open the invites page
1188
+ *
1189
+ * Usage: `invite manage`
1190
+ */
1191
+ inviteManage(options?: CallOptions): Promise<CommandResult<"invite manage">>;
1192
+ /**
1193
+ * Generate a magic link to log in to the website
1194
+ *
1195
+ * Usage: `browser`
1196
+ */
1197
+ browser(options?: BrowserOptions): Promise<CommandResult<"browser">>;
1198
+ }
1199
+ /** A VM reference. info is a snapshot; refresh() fetches current metadata. */
1200
+ export declare class VM {
1201
+ #private;
1202
+ /** @internal Obtain VMs through exe.new(), exe.ls(), exe.vm(), or vm.cp(). */
1203
+ constructor(transport: Transport, info: VMInfo);
1204
+ get info(): Readonly<VMInfo>;
1205
+ get name(): string;
1206
+ get httpsUrl(): string | undefined;
1207
+ get sshDest(): string | undefined;
1208
+ get tags(): readonly string[];
1209
+ /** Run a shell command once. Nonzero exit codes are results, not exceptions. */
1210
+ ssh(command: string, options?: SSHOptions): Promise<SSHResult>;
1211
+ /** Refresh metadata without changing this reference's identity. Requires ls permission. */
1212
+ refresh(options?: CallOptions): Promise<this>;
1213
+ /**
1214
+ * Probe SSH with `true` until it exits successfully. Never reruns a user command.
1215
+ * The default deadline is 60 seconds, including requests and backoff. This does
1216
+ * not wait for application servers or setup scripts. Requires ssh permission.
1217
+ */
1218
+ waitUntilReady(options?: WaitOptions): Promise<this>;
1219
+ /**
1220
+ * Delete a VM
1221
+ *
1222
+ * Usage: `rm <vmname>...`
1223
+ *
1224
+ * Tag-scoped API keys may run this command.
1225
+ */
1226
+ rm(options?: CallOptions): Promise<CommandResult<"rm">>;
1227
+ /**
1228
+ * Restart a VM
1229
+ *
1230
+ * Usage: `restart <vmname>`
1231
+ *
1232
+ * Tag-scoped API keys may run this command.
1233
+ */
1234
+ restart(options?: ReadyOptions): Promise<this>;
1235
+ /**
1236
+ * Pause a VM (snapshot RAM to disk, free its CPU and memory)
1237
+ *
1238
+ * Usage: `pause <vmname>`
1239
+ *
1240
+ * CLI examples:
1241
+ * ```
1242
+ * pause my-vm # snapshot RAM to disk; resume later with 'resume my-vm'
1243
+ * ```
1244
+ *
1245
+ * Tag-scoped API keys may run this command.
1246
+ */
1247
+ pause(options?: CallOptions): Promise<CommandResult<"pause">>;
1248
+ /**
1249
+ * Resume a paused VM (restore RAM from disk)
1250
+ *
1251
+ * Usage: `resume <vmname>`
1252
+ *
1253
+ * Tag-scoped API keys may run this command.
1254
+ */
1255
+ resume(options?: ReadyOptions): Promise<this>;
1256
+ /**
1257
+ * rename a vm
1258
+ *
1259
+ * Usage: `rename <oldname> <newname>`
1260
+ *
1261
+ * Tag-scoped API keys may run this command.
1262
+ */
1263
+ rename(newname: string, options?: CallOptions): Promise<this>;
1264
+ /**
1265
+ * Add or remove tags on a VM
1266
+ *
1267
+ * Usage: `tag [-d] <vm> <tag-name> [tag-name...]`
1268
+ *
1269
+ * CLI examples:
1270
+ * ```
1271
+ * tag my-vm prod web # add tags
1272
+ * tag -d my-vm prod web # remove tags
1273
+ * ```
1274
+ *
1275
+ * Tag-scoped API keys may run this command.
1276
+ */
1277
+ tag(tagNames: string | readonly string[], options?: TagOptions): Promise<CommandResult<"tag">>;
1278
+ /**
1279
+ * Copy an existing VM
1280
+ *
1281
+ * Usage: `cp <source-vm> [new-name] [--pool=<name>] [--memory=<size>] [--cpu=<count>] [--disk=<size>]`
1282
+ *
1283
+ * CLI examples:
1284
+ * ```
1285
+ * cp my-vm # copy with auto-generated name
1286
+ * cp my-vm my-vm-copy # copy with specific name
1287
+ * cp my-vm --cpu=4 --memory=16GB # copy with different resources
1288
+ * cp my-vm my-pool-copy --pool=build # copy into a team pool
1289
+ * cp my-vm --copy-tags=false # copy without tags
1290
+ * ```
1291
+ *
1292
+ * Tag-scoped API keys may run this command.
1293
+ */
1294
+ cp(options?: CpOptions): Promise<VM>;
1295
+ /**
1296
+ * Resize a VM's resources (memory, CPU, disk)
1297
+ *
1298
+ * Usage: `resize <vmname> [--memory=<size>] [--cpu=<count>] [--disk=<size>]`
1299
+ *
1300
+ * Tag-scoped API keys may run this command.
1301
+ */
1302
+ resize(options?: ResizeOptions): Promise<CommandResult<"resize">>;
1303
+ /**
1304
+ * Set or clear a short comment on a VM
1305
+ *
1306
+ * Usage: `comment <hostname> <text>`
1307
+ *
1308
+ * CLI examples:
1309
+ * ```
1310
+ * comment my-vm staging copy
1311
+ * comment my-vm "" # clear the comment
1312
+ * ```
1313
+ *
1314
+ * Tag-scoped API keys may run this command.
1315
+ */
1316
+ comment(text: string, options?: CallOptions): Promise<CommandResult<"comment">>;
1317
+ /**
1318
+ * Link a custom domain to a VM
1319
+ *
1320
+ * Usage: `domain add [--wildcard] <vm> <domain>`
1321
+ */
1322
+ domainAdd(domain: string, options?: DomainAddOptions): Promise<CommandResult<"domain add">>;
1323
+ /**
1324
+ * Remove a custom domain from a VM
1325
+ *
1326
+ * Usage: `domain rm <vm> <domain>`
1327
+ */
1328
+ domainRm(domain: string, options?: CallOptions): Promise<CommandResult<"domain rm">>;
1329
+ /**
1330
+ * Show current shares for a VM
1331
+ *
1332
+ * Usage: `share show <vm>`
1333
+ *
1334
+ * Tag-scoped API keys may run this command.
1335
+ */
1336
+ shareShow(options?: ShareShowOptions): Promise<CommandResult<"share show">>;
1337
+ /**
1338
+ * Set the HTTP proxy port for a VM
1339
+ *
1340
+ * Usage: `share port <vm> [port]`
1341
+ *
1342
+ * CLI examples:
1343
+ * ```
1344
+ * share port mybox 8080
1345
+ * ```
1346
+ *
1347
+ * Tag-scoped API keys may run this command.
1348
+ */
1349
+ sharePort(port?: string, options?: CallOptions): Promise<CommandResult<"share port">>;
1350
+ /**
1351
+ * Make the HTTP proxy publicly accessible
1352
+ *
1353
+ * Usage: `share set-public <vm>`
1354
+ *
1355
+ * Tag-scoped API keys may run this command.
1356
+ */
1357
+ shareSetPublic(options?: CallOptions): Promise<CommandResult<"share set-public">>;
1358
+ /**
1359
+ * Restrict the HTTP proxy to authenticated users
1360
+ *
1361
+ * Usage: `share set-private <vm>`
1362
+ *
1363
+ * Tag-scoped API keys may run this command.
1364
+ */
1365
+ shareSetPrivate(options?: CallOptions): Promise<CommandResult<"share set-private">>;
1366
+ /**
1367
+ * Share VM with a user via email, or grant shell access with --root
1368
+ *
1369
+ * Usage: `share add <vm> <email|team> [--root] [--message='...']`
1370
+ *
1371
+ * CLI examples:
1372
+ * ```
1373
+ * share add mybox user@example.com
1374
+ * share add mybox user@example.com --message='Check this out'
1375
+ * share add mybox team
1376
+ * share add mybox teammate@example.com --root
1377
+ * share add mybox team --root
1378
+ * ```
1379
+ *
1380
+ * Tag-scoped API keys may run this command.
1381
+ */
1382
+ shareAdd(emailOrTeam: string, options?: ShareAddOptions): Promise<CommandResult<"share add">>;
1383
+ /**
1384
+ * Revoke a user's access to a VM, or downgrade shell access to web with --root
1385
+ *
1386
+ * Usage: `share remove <vm> <email|team> [--root]`
1387
+ *
1388
+ * CLI examples:
1389
+ * ```
1390
+ * share remove mybox user@example.com
1391
+ * share remove mybox team
1392
+ * share remove mybox teammate@example.com --root
1393
+ * share remove mybox team --root
1394
+ * ```
1395
+ *
1396
+ * Tag-scoped API keys may run this command.
1397
+ */
1398
+ shareRemove(emailOrTeam: string, options?: ShareRemoveOptions): Promise<CommandResult<"share remove">>;
1399
+ /**
1400
+ * Create a shareable link for a VM
1401
+ *
1402
+ * Usage: `share add-link <vm>`
1403
+ *
1404
+ * Tag-scoped API keys may run this command.
1405
+ */
1406
+ shareAddLink(options?: ShareAddLinkOptions): Promise<CommandResult<"share add-link">>;
1407
+ /**
1408
+ * Revoke a shareable link
1409
+ *
1410
+ * Usage: `share remove-link <vm> <token>`
1411
+ *
1412
+ * Tag-scoped API keys may run this command.
1413
+ */
1414
+ shareRemoveLink(token: string, options?: CallOptions): Promise<CommandResult<"share remove-link">>;
1415
+ /**
1416
+ * Enable or disable inbound email for a VM
1417
+ *
1418
+ * Usage: `share receive-email <vm> [on|off] [--reply-policy=all|known|owner|none]`
1419
+ *
1420
+ * CLI examples:
1421
+ * ```
1422
+ * share receive-email mybox on
1423
+ * share receive-email mybox off
1424
+ * share receive-email mybox --reply-policy=known
1425
+ * share receive-email mybox
1426
+ * ```
1427
+ *
1428
+ * Tag-scoped API keys may run this command.
1429
+ */
1430
+ shareReceiveEmail(onOrOff?: "on" | "off", options?: ShareReceiveEmailOptions): Promise<CommandResult<"share receive-email">>;
1431
+ /**
1432
+ * Install or upgrade Shelley to the current version
1433
+ *
1434
+ * Usage: `shelley install <vm>`
1435
+ *
1436
+ * Tag-scoped API keys may run this command.
1437
+ */
1438
+ shelleyInstall(options?: CallOptions): Promise<CommandResult<"shelley install">>;
1439
+ /**
1440
+ * Allow exe.dev support to log in to a VM
1441
+ *
1442
+ * Usage: `grant-support-root <vmname> on|off`
1443
+ *
1444
+ * Tag-scoped API keys may run this command.
1445
+ */
1446
+ grantSupportRoot(onOrOff: "on" | "off", options?: CallOptions): Promise<CommandResult<"grant-support-root">>;
1447
+ /**
1448
+ * Show vCPU, disk, IO, and network (RX/TX) metrics for a VM
1449
+ *
1450
+ * Usage: `stat <vm-name> [--range=24h|7d|30d]`
1451
+ *
1452
+ * CLI examples:
1453
+ * ```
1454
+ * stat my-vm # last 24 hours (default)
1455
+ * stat my-vm --range=7d # last 7 days
1456
+ * stat my-vm --range=30d # last 30 days
1457
+ * ```
1458
+ *
1459
+ * Tag-scoped API keys may run this command.
1460
+ */
1461
+ stat(options?: StatOptions): Promise<CommandResult<"stat">>;
1462
+ }
1463
+ /** Readiness failed after a VM was obtained/created. The VM is not deleted. */
1464
+ export declare class VMReadyError extends Error {
1465
+ readonly vm: VM;
1466
+ constructor(vm: VM, cause: unknown);
1467
+ }
1468
+ //# sourceMappingURL=commands.gen.d.ts.map