@ellipsis-dev/sdk 0.28.0 → 0.31.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/dist/index.js CHANGED
@@ -29,58 +29,67 @@ var Page = class {
29
29
  };
30
30
 
31
31
  // src/core/sessionHandle.ts
32
- var TERMINAL_STATUSES = /* @__PURE__ */ new Set([
32
+ var FINAL_TURN_STATUSES = /* @__PURE__ */ new Set([
33
33
  "completed",
34
- "error",
35
- "cancelled",
36
- "stopped"
34
+ "failed",
35
+ "stopped",
36
+ "cancelled"
37
37
  ]);
38
- var DEFAULT_POLL_INTERVAL_MS = 3e3;
39
- function isSettled(session) {
40
- if (TERMINAL_STATUSES.has(session.status)) return true;
41
- return session.session_state === "idle" || session.session_state === "closed";
38
+ function isTurnFinal(status) {
39
+ return FINAL_TURN_STATUSES.has(status);
42
40
  }
41
+ var DEFAULT_POLL_INTERVAL_MS = 3e3;
43
42
  var sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
44
43
  var SessionHandle = class {
45
44
  constructor(sessions, session) {
46
45
  this.sessions = sessions;
47
46
  this.id = session.id;
48
47
  this.session = session;
48
+ this.turnId = session.turn?.id ?? null;
49
49
  }
50
50
  sessions;
51
51
  id;
52
52
  // The latest session snapshot this handle saw.
53
53
  session;
54
+ // The turn `wait()` waits on: the session's turn after `run()`, then the
55
+ // turn each `send()` creates. Null until the session has a message.
56
+ turnId;
54
57
  async refresh() {
55
58
  this.session = (await this.sessions.get(this.id)).session;
56
59
  return this.session;
57
60
  }
58
- // Poll until the session settles (terminal status, or a parked
59
- // conversation: state idle/closed).
61
+ // Poll until the awaited turn reaches a final status (completed, failed,
62
+ // stopped, cancelled) or the conversation closes, and return that turn.
63
+ // Returns null at once when the session has no turn to wait on.
60
64
  async wait(options = {}) {
61
65
  const pollIntervalMs = options.pollIntervalMs ?? DEFAULT_POLL_INTERVAL_MS;
62
66
  const deadline = options.timeoutMs == null ? null : Date.now() + options.timeoutMs;
63
67
  for (; ; ) {
64
68
  const session = await this.refresh();
65
- if (isSettled(session)) return session;
69
+ const turnId = this.turnId;
70
+ if (turnId == null) return null;
71
+ const turn = session.turn?.id === turnId ? session.turn : (await this.sessions.turns.get(this.id, turnId)).turn;
72
+ if (isTurnFinal(turn.status) || session.conversation.state === "closed")
73
+ return turn;
66
74
  if (deadline != null && Date.now() >= deadline) {
67
75
  throw new Error(
68
- `session ${this.id} not terminal after ${options.timeoutMs}ms`
76
+ `turn ${turnId} of session ${this.id} not final after ${options.timeoutMs}ms`
69
77
  );
70
78
  }
71
79
  await sleep(pollIntervalMs);
72
80
  }
73
81
  }
74
- // Post into the session's inbox (delivered at the next turn boundary;
75
- // wakes a parked session). `images` ride the message as content blocks the
76
- // model sees on that turn — a paste into Claude Code.
82
+ // Post a message into the session. The returned turn is the one that will
83
+ // answer it, and the one `wait()` waits on from now. `images` ride the
84
+ // message as content blocks the model sees on that turn.
77
85
  async send(message, options = {}) {
78
86
  const response = await this.sessions.sendMessage(this.id, {
79
87
  message,
80
88
  images: options.images,
81
89
  idempotency_key: options.idempotencyKey
82
90
  });
83
- return response.message;
91
+ this.turnId = response.turn.id;
92
+ return response;
84
93
  }
85
94
  async stop() {
86
95
  this.session = (await this.sessions.stop(this.id)).session;
@@ -255,6 +264,12 @@ var EllipsisAccountApiKeys = class {
255
264
  *
256
265
  * Authenticate as a dashboard user or with a user token. An organization
257
266
  * API key cannot create other keys. The secret is returned only once.
267
+ *
268
+ * Required permissions: write:tokens.
269
+ * API key: Requires a CLI user token belonging to an account administrator.
270
+ * CLI user token: Requires an account administrator.
271
+ * Session token: Not supported by session tokens, even with permissions.ellipsis enabled.
272
+ * Higher permission levels include lower levels: read < write < delete.
258
273
  */
259
274
  async create(options) {
260
275
  const path = "/v1/account/api-keys";
@@ -263,6 +278,12 @@ var EllipsisAccountApiKeys = class {
263
278
  }
264
279
  /**
265
280
  * List Api Keys
281
+ *
282
+ * Required permissions: read:tokens.
283
+ * API key: Supported.
284
+ * CLI user token: Supported.
285
+ * Session token: Not supported by session tokens, even with permissions.ellipsis enabled.
286
+ * Higher permission levels include lower levels: read < write < delete.
266
287
  */
267
288
  async list() {
268
289
  const path = "/v1/account/api-keys";
@@ -272,6 +293,12 @@ var EllipsisAccountApiKeys = class {
272
293
  * Revoke Api Key
273
294
  *
274
295
  * Revoke an organization key as a verified GitHub administrator.
296
+ *
297
+ * Required permissions: delete:tokens.
298
+ * API key: Requires a CLI user token belonging to an account administrator.
299
+ * CLI user token: Requires an account administrator.
300
+ * Session token: Not supported by session tokens, even with permissions.ellipsis enabled.
301
+ * Higher permission levels include lower levels: read < write < delete.
275
302
  */
276
303
  async revoke(api_key_id) {
277
304
  const path = `/v1/account/api-keys/${enc(api_key_id)}`;
@@ -290,6 +317,12 @@ var EllipsisAccountBillingAutoRecharge = class {
290
317
  *
291
318
  * An account without saved settings returns disabled defaults and no
292
319
  * card. No payment-method identifier or card details are exposed.
320
+ *
321
+ * Required permissions: read:account.
322
+ * API key: Supported.
323
+ * CLI user token: Supported.
324
+ * Session token: Requires the ellipsis:api scope and the required grants in the token's permissions.ellipsis configuration.
325
+ * Higher permission levels include lower levels: read < write < delete.
293
326
  */
294
327
  async get() {
295
328
  const path = "/v1/account/billing/auto-recharge";
@@ -300,11 +333,17 @@ var EllipsisAccountBillingAutoRecharge = class {
300
333
  *
301
334
  * Set your automatic credit recharge policy.
302
335
  *
303
- * Requires a human account administrator; API keys and sandbox tokens
336
+ * Requires a human account administrator; API keys and session tokens
304
337
  * cannot change this policy. Supply enabled explicitly. Saving amounts
305
338
  * with enabled=false keeps recharge off; enabling requires a saved card.
306
339
  * A recharge buys amount_cents of credit and charges the platform fee
307
340
  * in addition. Amounts and thresholds preserve exact cents.
341
+ *
342
+ * Required permissions: write:account.
343
+ * API key: Requires a CLI user token belonging to an account administrator.
344
+ * CLI user token: Requires an account administrator.
345
+ * Session token: Not supported by session tokens, even with permissions.ellipsis enabled.
346
+ * Higher permission levels include lower levels: read < write < delete.
308
347
  */
309
348
  async set(options) {
310
349
  const path = "/v1/account/billing/auto-recharge";
@@ -327,6 +366,12 @@ var EllipsisAccountBilling = class {
327
366
  * Requires a human account administrator. Open the returned URL to
328
367
  * finish setup and return to Billing. Saving a card does not enable
329
368
  * auto-recharge or buy credit.
369
+ *
370
+ * Required permissions: write:account.
371
+ * API key: Requires a CLI user token belonging to an account administrator.
372
+ * CLI user token: Requires an account administrator.
373
+ * Session token: Not supported by session tokens, even with permissions.ellipsis enabled.
374
+ * Higher permission levels include lower levels: read < write < delete.
330
375
  */
331
376
  async cardSetup() {
332
377
  const path = "/v1/account/billing/card-setup";
@@ -341,6 +386,12 @@ var EllipsisAccountBilling = class {
341
386
  * complete payment. Credit is granted only after payment succeeds;
342
387
  * the platform fee is charged in addition to amount_cents. Returning
343
388
  * to Billing carries the checkout session ID for receipt lookup.
389
+ *
390
+ * Required permissions: write:account.
391
+ * API key: Requires a CLI user token belonging to an account administrator.
392
+ * CLI user token: Requires an account administrator.
393
+ * Session token: Not supported by session tokens, even with permissions.ellipsis enabled.
394
+ * Higher permission levels include lower levels: read < write < delete.
344
395
  */
345
396
  async checkout(options) {
346
397
  const path = "/v1/account/billing/checkout";
@@ -354,6 +405,12 @@ var EllipsisAccountBilling = class {
354
405
  * bootstrap that otherwise fires lazily at the first session (Stripe
355
406
  * customer + usage subscription + the signup grant). A repeat call is
356
407
  * a no-op that returns the current state.
408
+ *
409
+ * Required permissions: write:account.
410
+ * API key: Supported.
411
+ * CLI user token: Supported.
412
+ * Session token: Not supported by session tokens, even with permissions.ellipsis enabled.
413
+ * Higher permission levels include lower levels: read < write < delete.
357
414
  */
358
415
  async claimSignupCredit() {
359
416
  const path = "/v1/account/billing/claim-signup-credit";
@@ -363,6 +420,12 @@ var EllipsisAccountBilling = class {
363
420
  * Get Fee Schedule
364
421
  *
365
422
  * Get the account's rate card, in US dollars.
423
+ *
424
+ * Required permissions: read:account.
425
+ * API key: Supported.
426
+ * CLI user token: Supported.
427
+ * Session token: Requires the ellipsis:api scope and the required grants in the token's permissions.ellipsis configuration.
428
+ * Higher permission levels include lower levels: read < write < delete.
366
429
  */
367
430
  async feeSchedule() {
368
431
  const path = "/v1/account/billing/fee-schedule";
@@ -375,6 +438,12 @@ var EllipsisAccountBilling = class {
375
438
  *
376
439
  * Returns only your account's grants. The total is before usage;
377
440
  * /v1/account/budget reports the available balance.
441
+ *
442
+ * Required permissions: read:account.
443
+ * API key: Supported.
444
+ * CLI user token: Supported.
445
+ * Session token: Requires the ellipsis:api scope and the required grants in the token's permissions.ellipsis configuration.
446
+ * Higher permission levels include lower levels: read < write < delete.
378
447
  */
379
448
  async grants() {
380
449
  const path = "/v1/account/billing/credit-grants";
@@ -387,6 +456,12 @@ var EllipsisAccountBilling = class {
387
456
  *
388
457
  * The amount includes the platform fee and comes from Stripe. An
389
458
  * incomplete, missing, or other-account purchase returns 404.
459
+ *
460
+ * Required permissions: read:account.
461
+ * API key: Supported.
462
+ * CLI user token: Supported.
463
+ * Session token: Requires the ellipsis:api scope and the required grants in the token's permissions.ellipsis configuration.
464
+ * Higher permission levels include lower levels: read < write < delete.
390
465
  */
391
466
  async purchase(checkout_id) {
392
467
  const path = `/v1/account/billing/purchases/${enc(checkout_id)}`;
@@ -399,6 +474,12 @@ var EllipsisAccountBilling = class {
399
474
  *
400
475
  * All amounts are integer US cents. The fee is added to the credit
401
476
  * amount; it does not reduce the credit granted.
477
+ *
478
+ * Required permissions: read:account.
479
+ * API key: Supported.
480
+ * CLI user token: Supported.
481
+ * Session token: Requires the ellipsis:api scope and the required grants in the token's permissions.ellipsis configuration.
482
+ * Higher permission levels include lower levels: read < write < delete.
402
483
  */
403
484
  async purchaseOptions() {
404
485
  const path = "/v1/account/billing/purchase-options";
@@ -412,6 +493,12 @@ var EllipsisAccountBilling = class {
412
493
  * Uses the same account gate as session admission, including credit,
413
494
  * contact email, and personal Claude subscription eligibility. Scoped
414
495
  * spend limits are reported separately by /v1/account/budget.
496
+ *
497
+ * Required permissions: read:account.
498
+ * API key: Supported.
499
+ * CLI user token: Supported.
500
+ * Session token: Requires the ellipsis:api scope and the required grants in the token's permissions.ellipsis configuration.
501
+ * Higher permission levels include lower levels: read < write < delete.
415
502
  */
416
503
  async status() {
417
504
  const path = "/v1/account/billing";
@@ -436,6 +523,12 @@ var EllipsisAccountModels = class {
436
523
  * Reads the same registry as the dashboard's rate table, so a
437
524
  * client's model picker can never drift from what's offered. The
438
525
  * selectable set is global; only the flag is account-scoped.
526
+ *
527
+ * Required permissions: read:templates.
528
+ * API key: Supported.
529
+ * CLI user token: Supported.
530
+ * Session token: Requires the ellipsis:api scope and the required grants in the token's permissions.ellipsis configuration.
531
+ * Higher permission levels include lower levels: read < write < delete.
439
532
  */
440
533
  async list() {
441
534
  const path = "/v1/account/models";
@@ -453,6 +546,12 @@ var EllipsisAccountNotifications = class {
453
546
  * Send the alert email template to one address with sample data,
454
547
  * so a typo'd finance alias is caught by a human instead of failing
455
548
  * silently when a real alert fires.
549
+ *
550
+ * Required permissions: write:account.
551
+ * API key: Supported.
552
+ * CLI user token: Supported.
553
+ * Session token: Not supported by session tokens, even with permissions.ellipsis enabled.
554
+ * Higher permission levels include lower levels: read < write < delete.
456
555
  */
457
556
  async testEmail(options) {
458
557
  const path = "/v1/account/notifications/test-email";
@@ -460,73 +559,107 @@ var EllipsisAccountNotifications = class {
460
559
  return await this.transport.request("POST", path, { body });
461
560
  }
462
561
  };
463
- var EllipsisAccountProvidersAnthropic = class {
562
+ var EllipsisAccountOnboarding = class {
464
563
  constructor(transport) {
465
564
  this.transport = transport;
466
565
  }
467
566
  transport;
468
567
  /**
469
- * Delete Anthropic Config
470
- */
471
- async delete() {
472
- const path = "/v1/account/providers/anthropic";
473
- await this.transport.request("DELETE", path);
474
- }
475
- /**
476
- * Get Anthropic Config
568
+ * Get Account Onboarding
569
+ *
570
+ * Read the account's saved onboarding answers, or null before setup.
571
+ *
572
+ * Required permissions: read:account.
573
+ * API key: Supported.
574
+ * CLI user token: Supported.
575
+ * Session token: Requires the ellipsis:api scope and the required grants in the token's permissions.ellipsis configuration.
576
+ * Higher permission levels include lower levels: read < write < delete.
477
577
  */
478
578
  async get() {
479
- const path = "/v1/account/providers/anthropic";
579
+ const path = "/v1/account/onboarding";
480
580
  return await this.transport.request("GET", path);
481
581
  }
482
582
  /**
483
- * Put Anthropic Config
484
- */
485
- async set(options) {
486
- const path = "/v1/account/providers/anthropic";
487
- const body = buildBody({ api_key: options.api_key });
488
- return await this.transport.request("PUT", path, { body });
489
- }
490
- /**
491
- * Validate Anthropic Config
583
+ * Update Account Onboarding
584
+ *
585
+ * Save supplied onboarding answers, preserving omitted answers.
586
+ *
587
+ * Organizations can save their work email before selecting use cases.
588
+ * Saving use cases requires a valid organization work email and at
589
+ * least one choice. When Other is the only choice, describe it.
590
+ * Personal accounts save a null work email. This does not change the
591
+ * billing contact email. Session tokens cannot update answers.
592
+ * Supplying an organization work email requires a human user and sends
593
+ * a Slack Connect invitation. Slack failures do not undo saved answers.
594
+ *
595
+ * Required permissions: write:account.
596
+ * API key: Supported.
597
+ * CLI user token: Supported.
598
+ * Session token: Not supported by session tokens, even with permissions.ellipsis enabled.
599
+ * Higher permission levels include lower levels: read < write < delete.
492
600
  */
493
- async validate() {
494
- const path = "/v1/account/providers/anthropic/validate";
495
- return await this.transport.request("POST", path);
601
+ async update(options = {}) {
602
+ const path = "/v1/account/onboarding";
603
+ const body = buildBody({ other_use_case: options.other_use_case, use_cases: options.use_cases, work_email: options.work_email });
604
+ return await this.transport.request("PATCH", path, { body });
496
605
  }
497
606
  };
498
- var EllipsisAccountProvidersBedrock = class {
607
+ var EllipsisAccountProvidersAnthropic = class {
499
608
  constructor(transport) {
500
609
  this.transport = transport;
501
610
  }
502
611
  transport;
503
612
  /**
504
- * Delete Bedrock Config
613
+ * Delete Anthropic Config
614
+ *
615
+ * Required permissions: delete:account.
616
+ * API key: Supported.
617
+ * CLI user token: Supported.
618
+ * Session token: Not supported by session tokens, even with permissions.ellipsis enabled.
619
+ * Higher permission levels include lower levels: read < write < delete.
505
620
  */
506
621
  async delete() {
507
- const path = "/v1/account/providers/bedrock";
622
+ const path = "/v1/account/providers/anthropic";
508
623
  await this.transport.request("DELETE", path);
509
624
  }
510
625
  /**
511
- * Get Bedrock Config
626
+ * Get Anthropic Config
627
+ *
628
+ * Required permissions: read:account.
629
+ * API key: Supported.
630
+ * CLI user token: Supported.
631
+ * Session token: Requires the ellipsis:api scope and the required grants in the token's permissions.ellipsis configuration.
632
+ * Higher permission levels include lower levels: read < write < delete.
512
633
  */
513
634
  async get() {
514
- const path = "/v1/account/providers/bedrock";
635
+ const path = "/v1/account/providers/anthropic";
515
636
  return await this.transport.request("GET", path);
516
637
  }
517
638
  /**
518
- * Put Bedrock Config
639
+ * Put Anthropic Config
640
+ *
641
+ * Required permissions: write:account.
642
+ * API key: Supported.
643
+ * CLI user token: Supported.
644
+ * Session token: Not supported by session tokens, even with permissions.ellipsis enabled.
645
+ * Higher permission levels include lower levels: read < write < delete.
519
646
  */
520
647
  async set(options) {
521
- const path = "/v1/account/providers/bedrock";
522
- const body = buildBody({ model_map: options.model_map, region: options.region, role_arn: options.role_arn });
648
+ const path = "/v1/account/providers/anthropic";
649
+ const body = buildBody({ api_key: options.api_key });
523
650
  return await this.transport.request("PUT", path, { body });
524
651
  }
525
652
  /**
526
- * Validate Bedrock Config
653
+ * Validate Anthropic Config
654
+ *
655
+ * Required permissions: write:account.
656
+ * API key: Supported.
657
+ * CLI user token: Supported.
658
+ * Session token: Not supported by session tokens, even with permissions.ellipsis enabled.
659
+ * Higher permission levels include lower levels: read < write < delete.
527
660
  */
528
661
  async validate() {
529
- const path = "/v1/account/providers/bedrock/validate";
662
+ const path = "/v1/account/providers/anthropic/validate";
530
663
  return await this.transport.request("POST", path);
531
664
  }
532
665
  };
@@ -534,11 +667,9 @@ var EllipsisAccountProviders = class {
534
667
  constructor(transport) {
535
668
  this.transport = transport;
536
669
  this.anthropic = new EllipsisAccountProvidersAnthropic(transport);
537
- this.bedrock = new EllipsisAccountProvidersBedrock(transport);
538
670
  }
539
671
  transport;
540
672
  anthropic;
541
- bedrock;
542
673
  };
543
674
  var EllipsisAccountSettings = class {
544
675
  constructor(transport) {
@@ -553,6 +684,12 @@ var EllipsisAccountSettings = class {
553
684
  * Session model and budget defaults, code review and mention behavior,
554
685
  * analytics, retention, and notification contacts. PATCH replaces
555
686
  * supplied sections; PUT preserves its model-and-budget-only behavior.
687
+ *
688
+ * Required permissions: read:defaults.
689
+ * API key: Supported.
690
+ * CLI user token: Supported.
691
+ * Session token: Requires the ellipsis:api scope and the required grants in the token's permissions.ellipsis configuration.
692
+ * Higher permission levels include lower levels: read < write < delete.
556
693
  */
557
694
  async get() {
558
695
  const path = "/v1/account/settings";
@@ -568,8 +705,14 @@ var EllipsisAccountSettings = class {
568
705
  * default a session's model resolves against);
569
706
  * `budget_ceiling.session` is in US dollars, at most the platform
570
707
  * ceiling, and null clears it.
571
- * Refused for sandbox tokens (potentially prompt-injected code must
708
+ * Refused for session tokens (potentially prompt-injected code must
572
709
  * not repoint the organization's defaults).
710
+ *
711
+ * Required permissions: write:defaults.
712
+ * API key: Requires a CLI user token belonging to an account administrator.
713
+ * CLI user token: Requires an account administrator.
714
+ * Session token: Not supported by session tokens, even with permissions.ellipsis enabled.
715
+ * Higher permission levels include lower levels: read < write < delete.
573
716
  */
574
717
  async set(options) {
575
718
  const path = "/v1/account/settings";
@@ -582,10 +725,16 @@ var EllipsisAccountSettings = class {
582
725
  * Replace supplied settings sections without changing omitted sections.
583
726
  *
584
727
  * Changes to model or budget defaults require a GitHub administrator.
728
+ *
729
+ * Required permissions: write:defaults.
730
+ * API key: Cannot set budget_ceiling, default_model to a non-null value; those changes require a CLI user token belonging to an account administrator.
731
+ * CLI user token: Requires an account administrator when setting budget_ceiling, default_model to a non-null value.
732
+ * Session token: Not supported by session tokens, even with permissions.ellipsis enabled.
733
+ * Higher permission levels include lower levels: read < write < delete.
585
734
  */
586
735
  async update(options = {}) {
587
736
  const path = "/v1/account/settings";
588
- const body = buildBody({ analytics: options.analytics, budget_ceiling: options.budget_ceiling, code_review: options.code_review, data_retention: options.data_retention, default_model: options.default_model, mention: options.mention, notifications: options.notifications });
737
+ const body = buildBody({ analytics: options.analytics, budget_ceiling: options.budget_ceiling, code_review: options.code_review, data_retention: options.data_retention, default_model: options.default_model, notifications: options.notifications });
589
738
  return await this.transport.request("PATCH", path, { body });
590
739
  }
591
740
  };
@@ -596,6 +745,7 @@ var EllipsisAccount = class {
596
745
  this.billing = new EllipsisAccountBilling(transport);
597
746
  this.models = new EllipsisAccountModels(transport);
598
747
  this.notifications = new EllipsisAccountNotifications(transport);
748
+ this.onboarding = new EllipsisAccountOnboarding(transport);
599
749
  this.providers = new EllipsisAccountProviders(transport);
600
750
  this.settings = new EllipsisAccountSettings(transport);
601
751
  }
@@ -604,6 +754,7 @@ var EllipsisAccount = class {
604
754
  billing;
605
755
  models;
606
756
  notifications;
757
+ onboarding;
607
758
  providers;
608
759
  settings;
609
760
  /**
@@ -612,6 +763,12 @@ var EllipsisAccount = class {
612
763
  * All-time per-surface activity flags: the dashboards' demo-data
613
764
  * fallback reads these instead of inferring "no history" from a
614
765
  * windowed, filtered response.
766
+ *
767
+ * Required permissions: read:account.
768
+ * API key: Supported.
769
+ * CLI user token: Supported.
770
+ * Session token: Requires the ellipsis:api scope and the required grants in the token's permissions.ellipsis configuration.
771
+ * Higher permission levels include lower levels: read < write < delete.
615
772
  */
616
773
  async activity() {
617
774
  const path = "/v1/account/activity";
@@ -619,6 +776,12 @@ var EllipsisAccount = class {
619
776
  }
620
777
  /**
621
778
  * Get Customer Audit Log
779
+ *
780
+ * Required permissions: read:account.
781
+ * API key: Supported.
782
+ * CLI user token: Supported.
783
+ * Session token: Requires the ellipsis:api scope and the required grants in the token's permissions.ellipsis configuration.
784
+ * Higher permission levels include lower levels: read < write < delete.
622
785
  */
623
786
  async auditLog() {
624
787
  const path = "/v1/account/audit-log";
@@ -632,8 +795,14 @@ var EllipsisAccount = class {
632
795
  * Budgets cover the trailing 1, 7 and 28 days; they do not replenish
633
796
  * prepaid credit. Amounts include measured usage from active sessions.
634
797
  * Each paid LLM request requires positive credit and budget headroom.
635
- * An admitted request can overshoot; concurrency is limited to five
636
- * paid requests per account and one per session.
798
+ * An admitted request can overshoot; concurrent paid requests are limited
799
+ * by your account and per-session allowances.
800
+ *
801
+ * Required permissions: read:account.
802
+ * API key: Supported.
803
+ * CLI user token: Supported.
804
+ * Session token: Requires the ellipsis:api scope and the required grants in the token's permissions.ellipsis configuration.
805
+ * Higher permission levels include lower levels: read < write < delete.
637
806
  */
638
807
  async budget() {
639
808
  const path = "/v1/account/budget";
@@ -641,10 +810,16 @@ var EllipsisAccount = class {
641
810
  }
642
811
  /**
643
812
  * Update Customer
813
+ *
814
+ * Required permissions: write:account.
815
+ * API key: Supported.
816
+ * CLI user token: Supported.
817
+ * Session token: Not supported by session tokens, even with permissions.ellipsis enabled.
818
+ * Higher permission levels include lower levels: read < write < delete.
644
819
  */
645
820
  async update(options = {}) {
646
821
  const path = "/v1/account";
647
- const body = buildBody({ can_start_job_runs: options.can_start_job_runs, contact_email: options.contact_email });
822
+ const body = buildBody({ can_start_sessions: options.can_start_sessions, contact_email: options.contact_email });
648
823
  return await this.transport.request("PATCH", path, { body });
649
824
  }
650
825
  /**
@@ -656,9 +831,15 @@ var EllipsisAccount = class {
656
831
  * preserved. Set policy.developer_defaults to null to disable developer
657
832
  * limits. Null override windows inherit their default. API keys use
658
833
  * their stable ID, not their secret. Changes apply to the next paid
659
- * request, including sessions already running. API keys and sandbox
660
- * credentials cannot edit budgets. The session ceiling remains at
834
+ * request, including sessions already running. API keys and session
835
+ * tokens cannot edit budgets. The session ceiling remains at
661
836
  * /account/settings; purchasing credits is separate from budget policy.
837
+ *
838
+ * Required permissions: write:defaults.
839
+ * API key: Requires a CLI user token belonging to an account administrator.
840
+ * CLI user token: Requires an account administrator.
841
+ * Session token: Not supported by session tokens, even with permissions.ellipsis enabled.
842
+ * Higher permission levels include lower levels: read < write < delete.
662
843
  */
663
844
  async updateBudget(options = {}) {
664
845
  const path = "/v1/account/budget";
@@ -672,9 +853,15 @@ var EllipsisAccount = class {
672
853
  *
673
854
  * Omit period_start for the current UTC month; select a period returned
674
855
  * in billing_periods to view history. Credit debits are distinct from
675
- * rated token usage through BYOK, customer Bedrock, or a developer's
676
- * Claude subscription. Rated usage estimates are not provider invoices.
856
+ * rated token usage through BYOK or a developer's Claude or Codex
857
+ * subscription. Rated usage estimates are not provider invoices.
677
858
  * Pending and unresolved requests identify missing measurements.
859
+ *
860
+ * Required permissions: read:account.
861
+ * API key: Supported.
862
+ * CLI user token: Supported.
863
+ * Session token: Requires the ellipsis:api scope and the required grants in the token's permissions.ellipsis configuration.
864
+ * Higher permission levels include lower levels: read < write < delete.
678
865
  */
679
866
  async usage(options = {}) {
680
867
  const path = "/v1/account/usage";
@@ -682,6 +869,212 @@ var EllipsisAccount = class {
682
869
  return await this.transport.request("GET", path, { query });
683
870
  }
684
871
  };
872
+ var EllipsisAgents = class {
873
+ constructor(transport) {
874
+ this.transport = transport;
875
+ }
876
+ transport;
877
+ /**
878
+ * Create Agent
879
+ *
880
+ * Create an agent, managed through the API: no file, live
881
+ * immediately. To put its definition in a repository instead, create
882
+ * it here and then POST /v1/agents/{agent_id}/link.
883
+ *
884
+ * 409 when another live agent already holds the name.
885
+ *
886
+ * Required permissions: write:configs.
887
+ * API key: Supported.
888
+ * CLI user token: Supported.
889
+ * Session token: Not supported by session tokens, even with permissions.ellipsis enabled.
890
+ * Higher permission levels include lower levels: read < write < delete.
891
+ * Grant match patterns can further restrict access to individual resources.
892
+ */
893
+ async create(options) {
894
+ const path = "/v1/agents";
895
+ const body = buildBody({ agent: options.agent });
896
+ return await this.transport.request("POST", path, { body });
897
+ }
898
+ /**
899
+ * Delete Agent
900
+ *
901
+ * Delete an agent, by id or by name.
902
+ *
903
+ * It stops running and its name is freed immediately; its past
904
+ * sessions remain readable. Only for agents managed through
905
+ * this API — delete the file to remove one defined by a repository.
906
+ *
907
+ * Required permissions: write:configs.
908
+ * API key: Supported.
909
+ * CLI user token: Supported.
910
+ * Session token: Not supported by session tokens, even with permissions.ellipsis enabled.
911
+ * Higher permission levels include lower levels: read < write < delete.
912
+ * Grant match patterns can further restrict access to individual resources.
913
+ */
914
+ async delete(agent_id) {
915
+ const path = `/v1/agents/${enc(agent_id)}`;
916
+ await this.transport.request("DELETE", path);
917
+ }
918
+ /**
919
+ * Get Agent
920
+ *
921
+ * Return one agent, by id or by name.
922
+ *
923
+ * Required permissions: read:configs.
924
+ * API key: Supported.
925
+ * CLI user token: Supported.
926
+ * Session token: Requires the ellipsis:api scope and the required grants in the token's permissions.ellipsis configuration.
927
+ * Higher permission levels include lower levels: read < write < delete.
928
+ * Grant match patterns can further restrict access to individual resources.
929
+ */
930
+ async get(agent_id) {
931
+ const path = `/v1/agents/${enc(agent_id)}`;
932
+ return await this.transport.request("GET", path);
933
+ }
934
+ /**
935
+ * Link Agent
936
+ *
937
+ * Move an agent into a repository, by id or by name.
938
+ *
939
+ * Opens a pull request adding its definition file. The agent
940
+ * keeps running unchanged meanwhile; merging hands it over to the
941
+ * file, after which the file is what changes it. Nothing happens
942
+ * if the pull request is never merged.
943
+ *
944
+ * Required permissions: write:configs.
945
+ * API key: Supported.
946
+ * CLI user token: Supported.
947
+ * Session token: Not supported by session tokens, even with permissions.ellipsis enabled.
948
+ * Higher permission levels include lower levels: read < write < delete.
949
+ * Grant match patterns can further restrict access to individual resources.
950
+ */
951
+ async link(agent_id, options) {
952
+ const path = `/v1/agents/${enc(agent_id)}/link`;
953
+ const body = buildBody({ path: options.path, repository: options.repository });
954
+ return await this.transport.request("POST", path, { body });
955
+ }
956
+ /**
957
+ * List Agents
958
+ *
959
+ * List agents.
960
+ *
961
+ * Required permissions: read:configs.
962
+ * API key: Supported.
963
+ * CLI user token: Supported.
964
+ * Session token: Requires the ellipsis:api scope and the required grants in the token's permissions.ellipsis configuration.
965
+ * Higher permission levels include lower levels: read < write < delete.
966
+ * Grant match patterns can further restrict access to individual resources.
967
+ */
968
+ async list() {
969
+ const path = "/v1/agents";
970
+ return await this.transport.request("GET", path);
971
+ }
972
+ /**
973
+ * Get Agent Metrics
974
+ *
975
+ * Return an agent's session distribution and trailing spend,
976
+ * by id or by name.
977
+ *
978
+ * `samples` carries one entry per finished session (duration, cost,
979
+ * tokens) for distributions; `spend_windows` carries what the
980
+ * agent's sessions cost over the last 1, 7, and 28 days against
981
+ * its budget for each window.
982
+ *
983
+ * Required permissions: read:configs.
984
+ * API key: Supported.
985
+ * CLI user token: Supported.
986
+ * Session token: Requires the ellipsis:api scope and the required grants in the token's permissions.ellipsis configuration.
987
+ * Higher permission levels include lower levels: read < write < delete.
988
+ * Grant match patterns can further restrict access to individual resources.
989
+ */
990
+ async metrics(agent_id) {
991
+ const path = `/v1/agents/${enc(agent_id)}/metrics`;
992
+ return await this.transport.request("GET", path);
993
+ }
994
+ /**
995
+ * Start Agent Session
996
+ *
997
+ * Invoke an agent.
998
+ *
999
+ * Runs a certified agent with its configured instructions, model,
1000
+ * environment, permissions, skills, and budget, and returns
1001
+ * the session it started. The session runs once and does not accept
1002
+ * follow-up messages. If the agent declares input.json_schema,
1003
+ * send only `input` for its initial message. Otherwise send a non-empty
1004
+ * `prompt`, which becomes the initial message verbatim. Both fields
1005
+ * together, neither field, and input that renders an empty message are
1006
+ * rejected with 422. An optional `budget` lowers the session cap;
1007
+ * `metadata` tags the session. Codex invocations are not supported.
1008
+ *
1009
+ * Required permissions: write:sessions.
1010
+ * API key: Supported.
1011
+ * CLI user token: Supported.
1012
+ * Session token: Requires the ellipsis:api scope and the required grants in the token's permissions.ellipsis configuration.
1013
+ * Higher permission levels include lower levels: read < write < delete.
1014
+ * Grant match patterns can further restrict access to individual resources.
1015
+ */
1016
+ async run(agent_id, options = {}) {
1017
+ const path = `/v1/agents/${enc(agent_id)}/sessions`;
1018
+ const body = buildBody({ budget: options.budget, input: options.input, metadata: options.metadata, prompt: options.prompt });
1019
+ return await this.transport.request("POST", path, { body });
1020
+ }
1021
+ /**
1022
+ * Get Agents Stream Ticket
1023
+ *
1024
+ * Required permissions: read:configs.
1025
+ * API key: Supported.
1026
+ * CLI user token: Supported.
1027
+ * Session token: Requires the ellipsis:api scope and the required grants in the token's permissions.ellipsis configuration.
1028
+ * Higher permission levels include lower levels: read < write < delete.
1029
+ * Grant match patterns can further restrict access to individual resources.
1030
+ */
1031
+ async streamTicket() {
1032
+ const path = "/v1/agents/stream-ticket";
1033
+ return await this.transport.request("GET", path);
1034
+ }
1035
+ /**
1036
+ * Unlink Agent
1037
+ *
1038
+ * Take over an agent from its file, by id or by name.
1039
+ *
1040
+ * The file stops governing it immediately and further changes go
1041
+ * through this API. The file is left in place, inert — delete it
1042
+ * whenever you like.
1043
+ *
1044
+ * Required permissions: write:configs.
1045
+ * API key: Supported.
1046
+ * CLI user token: Supported.
1047
+ * Session token: Not supported by session tokens, even with permissions.ellipsis enabled.
1048
+ * Higher permission levels include lower levels: read < write < delete.
1049
+ * Grant match patterns can further restrict access to individual resources.
1050
+ */
1051
+ async unlink(agent_id) {
1052
+ const path = `/v1/agents/${enc(agent_id)}/unlink`;
1053
+ return await this.transport.request("POST", path);
1054
+ }
1055
+ /**
1056
+ * Update Agent
1057
+ *
1058
+ * Replace an agent's definition, by id or by name.
1059
+ *
1060
+ * The whole definition is replaced, and the change is live at
1061
+ * once. Only for agents managed through this API: one defined
1062
+ * by a repository file is a 409, since the next push to that file
1063
+ * would revert the change — unlink it first to take ownership.
1064
+ *
1065
+ * Required permissions: write:configs.
1066
+ * API key: Supported.
1067
+ * CLI user token: Supported.
1068
+ * Session token: Not supported by session tokens, even with permissions.ellipsis enabled.
1069
+ * Higher permission levels include lower levels: read < write < delete.
1070
+ * Grant match patterns can further restrict access to individual resources.
1071
+ */
1072
+ async update(agent_id, options) {
1073
+ const path = `/v1/agents/${enc(agent_id)}`;
1074
+ const body = buildBody({ agent: options.agent });
1075
+ return await this.transport.request("PUT", path, { body });
1076
+ }
1077
+ };
685
1078
  var EllipsisAlerts = class {
686
1079
  constructor(transport) {
687
1080
  this.transport = transport;
@@ -693,6 +1086,12 @@ var EllipsisAlerts = class {
693
1086
  * Dismiss an open alert and return it.
694
1087
  *
695
1088
  * 409 when the alert is not open; 404 when it doesn't exist.
1089
+ *
1090
+ * Required permissions: write:alerts.
1091
+ * API key: Supported.
1092
+ * CLI user token: Supported.
1093
+ * Session token: Requires the ellipsis:api scope and the required grants in the token's permissions.ellipsis configuration.
1094
+ * Higher permission levels include lower levels: read < write < delete.
696
1095
  */
697
1096
  async dismiss(alert_id) {
698
1097
  const path = `/v1/alerts/${enc(alert_id)}/dismiss`;
@@ -704,6 +1103,12 @@ var EllipsisAlerts = class {
704
1103
  * Return one alert by id.
705
1104
  *
706
1105
  * 404 if it doesn't exist or belongs to another organization.
1106
+ *
1107
+ * Required permissions: read:alerts.
1108
+ * API key: Supported.
1109
+ * CLI user token: Supported.
1110
+ * Session token: Requires the ellipsis:api scope and the required grants in the token's permissions.ellipsis configuration.
1111
+ * Higher permission levels include lower levels: read < write < delete.
707
1112
  */
708
1113
  async get(alert_id) {
709
1114
  const path = `/v1/alerts/${enc(alert_id)}`;
@@ -718,6 +1123,12 @@ var EllipsisAlerts = class {
718
1123
  *
719
1124
  * Available to all credential types, so an agent can check "is
720
1125
  * this org near budget?" mid-task.
1126
+ *
1127
+ * Required permissions: read:alerts.
1128
+ * API key: Supported.
1129
+ * CLI user token: Supported.
1130
+ * Session token: Requires the ellipsis:api scope and the required grants in the token's permissions.ellipsis configuration.
1131
+ * Higher permission levels include lower levels: read < write < delete.
721
1132
  */
722
1133
  async list(options = {}) {
723
1134
  const path = "/v1/alerts";
@@ -747,6 +1158,12 @@ var EllipsisAnalytics = class {
747
1158
  * the apps/agents). Available to all credential types: the
748
1159
  * responses expose the organization's own GitHub PR/review activity,
749
1160
  * no secrets.
1161
+ *
1162
+ * Required permissions: read:account.
1163
+ * API key: Supported.
1164
+ * CLI user token: Supported.
1165
+ * Session token: Requires the ellipsis:api scope and the required grants in the token's permissions.ellipsis configuration.
1166
+ * Higher permission levels include lower levels: read < write < delete.
750
1167
  */
751
1168
  async metrics(options = {}) {
752
1169
  const path = "/v1/analytics/metrics";
@@ -760,6 +1177,12 @@ var EllipsisAnalytics = class {
760
1177
  *
761
1178
  * Windowing: pass explicit start/end, or days (default: the last
762
1179
  * 30 days). account_type in all|user|bot scopes the authors.
1180
+ *
1181
+ * Required permissions: read:account.
1182
+ * API key: Supported.
1183
+ * CLI user token: Supported.
1184
+ * Session token: Requires the ellipsis:api scope and the required grants in the token's permissions.ellipsis configuration.
1185
+ * Higher permission levels include lower levels: read < write < delete.
763
1186
  */
764
1187
  async pullRequests(options = {}) {
765
1188
  const path = "/v1/analytics/pull-requests";
@@ -775,6 +1198,12 @@ var EllipsisAnalytics = class {
775
1198
  * review the most PRs?" is the reviewer facets here with
776
1199
  * account_type=bot. Windowing: pass explicit start/end, or days
777
1200
  * (default: the last 30 days).
1201
+ *
1202
+ * Required permissions: read:account.
1203
+ * API key: Supported.
1204
+ * CLI user token: Supported.
1205
+ * Session token: Requires the ellipsis:api scope and the required grants in the token's permissions.ellipsis configuration.
1206
+ * Higher permission levels include lower levels: read < write < delete.
778
1207
  */
779
1208
  async reviews(options = {}) {
780
1209
  const path = "/v1/analytics/reviews";
@@ -793,6 +1222,8 @@ var EllipsisAuthCli = class {
793
1222
  * Poll a device-code auth flow for its token.
794
1223
  *
795
1224
  * Unauthenticated; the device code identifies the flow.
1225
+ *
1226
+ * Authentication: No token required.
796
1227
  */
797
1228
  async poll(options) {
798
1229
  const path = "/v1/auth/cli/poll";
@@ -807,6 +1238,8 @@ var EllipsisAuthCli = class {
807
1238
  * Unauthenticated: the CLI has no credential yet — that's what
808
1239
  * it's obtaining. The human authorizes out-of-band in the
809
1240
  * dashboard.
1241
+ *
1242
+ * Authentication: No token required.
810
1243
  */
811
1244
  async start() {
812
1245
  const path = "/v1/auth/cli/start";
@@ -821,142 +1254,6 @@ var EllipsisAuth = class {
821
1254
  transport;
822
1255
  cli;
823
1256
  };
824
- var EllipsisAutomations = class {
825
- constructor(transport) {
826
- this.transport = transport;
827
- }
828
- transport;
829
- /**
830
- * Create Automation
831
- *
832
- * Create an automation, managed through the API: no file, live
833
- * immediately. To put its definition in a repository instead, create
834
- * it here and then POST /v1/automations/{automation_id}/link.
835
- *
836
- * 409 when another live automation already holds the name.
837
- */
838
- async create(options) {
839
- const path = "/v1/automations";
840
- const body = buildBody({ automation: options.automation });
841
- return await this.transport.request("POST", path, { body });
842
- }
843
- /**
844
- * Delete Automation
845
- *
846
- * Delete an automation, by id or by name.
847
- *
848
- * It stops running and its name is freed immediately; its past
849
- * sessions remain readable. Only for automations managed through
850
- * this API — delete the file to remove one defined by a repository.
851
- */
852
- async delete(automation_id) {
853
- const path = `/v1/automations/${enc(automation_id)}`;
854
- await this.transport.request("DELETE", path);
855
- }
856
- /**
857
- * Get Automation
858
- *
859
- * Return one automation, by id or by name.
860
- */
861
- async get(automation_id) {
862
- const path = `/v1/automations/${enc(automation_id)}`;
863
- return await this.transport.request("GET", path);
864
- }
865
- /**
866
- * Link Automation
867
- *
868
- * Move an automation into a repository, by id or by name.
869
- *
870
- * Opens a pull request adding its definition file. The automation
871
- * keeps running unchanged meanwhile; merging hands it over to the
872
- * file, after which the file is what changes it. Nothing happens
873
- * if the pull request is never merged.
874
- */
875
- async link(automation_id, options) {
876
- const path = `/v1/automations/${enc(automation_id)}/link`;
877
- const body = buildBody({ path: options.path, repository: options.repository });
878
- return await this.transport.request("POST", path, { body });
879
- }
880
- /**
881
- * List Automations
882
- *
883
- * List automations.
884
- */
885
- async list() {
886
- const path = "/v1/automations";
887
- return await this.transport.request("GET", path);
888
- }
889
- /**
890
- * Get Automation Metrics
891
- *
892
- * Return an automation's session distribution and trailing spend,
893
- * by id or by name.
894
- *
895
- * `samples` carries one entry per finished session (duration, cost,
896
- * tokens) for distributions; `spend_windows` carries what the
897
- * automation's sessions cost over the last 1, 7, and 28 days against
898
- * its budget for each window.
899
- */
900
- async metrics(automation_id) {
901
- const path = `/v1/automations/${enc(automation_id)}/metrics`;
902
- return await this.transport.request("GET", path);
903
- }
904
- /**
905
- * Start Automation Session
906
- *
907
- * Invoke an automation.
908
- *
909
- * Runs a certified automation with its configured instructions, model,
910
- * environment, permissions, skills, and budget, and returns
911
- * the session it started. The session runs once and does not accept
912
- * follow-up messages. If the automation declares input.json_schema,
913
- * send only `input` for its initial message. Otherwise send a non-empty
914
- * `prompt`, which becomes the initial message verbatim. Both fields
915
- * together, neither field, and input that renders an empty message are
916
- * rejected with 422. An optional `budget` lowers the session cap;
917
- * `metadata` tags the session. Codex invocations are not supported.
918
- */
919
- async run(automation_id, options = {}) {
920
- const path = `/v1/automations/${enc(automation_id)}/sessions`;
921
- const body = buildBody({ budget: options.budget, input: options.input, metadata: options.metadata, prompt: options.prompt });
922
- return await this.transport.request("POST", path, { body });
923
- }
924
- /**
925
- * Get Automations Stream Ticket
926
- */
927
- async streamTicket() {
928
- const path = "/v1/automations/stream-ticket";
929
- return await this.transport.request("GET", path);
930
- }
931
- /**
932
- * Unlink Automation
933
- *
934
- * Take over an automation from its file, by id or by name.
935
- *
936
- * The file stops governing it immediately and further changes go
937
- * through this API. The file is left in place, inert — delete it
938
- * whenever you like.
939
- */
940
- async unlink(automation_id) {
941
- const path = `/v1/automations/${enc(automation_id)}/unlink`;
942
- return await this.transport.request("POST", path);
943
- }
944
- /**
945
- * Update Automation
946
- *
947
- * Replace an automation's definition, by id or by name.
948
- *
949
- * The whole definition is replaced, and the change is live at
950
- * once. Only for automations managed through this API: one defined
951
- * by a repository file is a 409, since the next push to that file
952
- * would revert the change — unlink it first to take ownership.
953
- */
954
- async update(automation_id, options) {
955
- const path = `/v1/automations/${enc(automation_id)}`;
956
- const body = buildBody({ automation: options.automation });
957
- return await this.transport.request("PUT", path, { body });
958
- }
959
- };
960
1257
  var EllipsisEnvironments = class {
961
1258
  constructor(transport) {
962
1259
  this.transport = transport;
@@ -970,6 +1267,12 @@ var EllipsisEnvironments = class {
970
1267
  * `kind: environment` YAML under an agents directory.
971
1268
  *
972
1269
  * 409 when another live environment already holds the name.
1270
+ *
1271
+ * Required permissions: write:environments.
1272
+ * API key: Supported.
1273
+ * CLI user token: Supported.
1274
+ * Session token: Not supported by session tokens, even with permissions.ellipsis enabled.
1275
+ * Higher permission levels include lower levels: read < write < delete.
973
1276
  */
974
1277
  async create(options) {
975
1278
  const path = "/v1/environments";
@@ -986,6 +1289,12 @@ var EllipsisEnvironments = class {
986
1289
  * environment. Past sessions remain readable. Only for environments
987
1290
  * managed through this API — delete the file to remove one defined
988
1291
  * by a repository.
1292
+ *
1293
+ * Required permissions: delete:environments.
1294
+ * API key: Supported.
1295
+ * CLI user token: Supported.
1296
+ * Session token: Not supported by session tokens, even with permissions.ellipsis enabled.
1297
+ * Higher permission levels include lower levels: read < write < delete.
989
1298
  */
990
1299
  async delete(environment_id) {
991
1300
  const path = `/v1/environments/${enc(environment_id)}`;
@@ -995,6 +1304,12 @@ var EllipsisEnvironments = class {
995
1304
  * Get Environment
996
1305
  *
997
1306
  * Return one saved environment, by id or by name.
1307
+ *
1308
+ * Required permissions: read:environments.
1309
+ * API key: Supported.
1310
+ * CLI user token: Supported.
1311
+ * Session token: Requires the ellipsis:api scope and the required grants in the token's permissions.ellipsis configuration.
1312
+ * Higher permission levels include lower levels: read < write < delete.
998
1313
  */
999
1314
  async get(environment_id) {
1000
1315
  const path = `/v1/environments/${enc(environment_id)}`;
@@ -1004,6 +1319,12 @@ var EllipsisEnvironments = class {
1004
1319
  * List Environments
1005
1320
  *
1006
1321
  * List saved environments.
1322
+ *
1323
+ * Required permissions: read:environments.
1324
+ * API key: Supported.
1325
+ * CLI user token: Supported.
1326
+ * Session token: Requires the ellipsis:api scope and the required grants in the token's permissions.ellipsis configuration.
1327
+ * Higher permission levels include lower levels: read < write < delete.
1007
1328
  */
1008
1329
  async list() {
1009
1330
  const path = "/v1/environments";
@@ -1018,6 +1339,12 @@ var EllipsisEnvironments = class {
1018
1339
  * resolve the new body; running sessions keep the one frozen at
1019
1340
  * their start. Only for environments managed through this API: one
1020
1341
  * defined by a repository file is a 409.
1342
+ *
1343
+ * Required permissions: write:environments.
1344
+ * API key: Supported.
1345
+ * CLI user token: Supported.
1346
+ * Session token: Not supported by session tokens, even with permissions.ellipsis enabled.
1347
+ * Higher permission levels include lower levels: read < write < delete.
1021
1348
  */
1022
1349
  async update(environment_id, options) {
1023
1350
  const path = `/v1/environments/${enc(environment_id)}`;
@@ -1025,83 +1352,65 @@ var EllipsisEnvironments = class {
1025
1352
  return await this.transport.request("PUT", path, { body });
1026
1353
  }
1027
1354
  };
1028
- var EllipsisFiles = class {
1355
+ var EllipsisHandlers = class {
1029
1356
  constructor(transport) {
1030
1357
  this.transport = transport;
1031
1358
  }
1032
1359
  transport;
1033
1360
  /**
1034
- * Create File
1361
+ * List Handlers
1035
1362
  *
1036
- * Upload a file that outlives the sandbox.
1363
+ * List the account's Slack, GitHub, Linear, and Sentry handlers.
1037
1364
  *
1038
- * v1: PNG images only, base64 in the JSON body, 10 MiB cap. The
1039
- * primary caller is the in-sandbox `agent file upload` CLI (an
1040
- * agent persisting a screenshot to link on a PR), but all
1041
- * credential types work. Returns the org-membership-gated
1042
- * dashboard URL so callers never hard-code URL shapes.
1043
- */
1044
- async create(options) {
1045
- const path = "/v1/files";
1046
- const body = buildBody({ content_type: options.content_type, data_b64: options.data_b64, filename: options.filename });
1047
- return await this.transport.request("POST", path, { body });
1048
- }
1049
- /**
1050
- * Delete File
1365
+ * Returns at most one handler per service, from the current .ellipsis
1366
+ * repository. Disabled handlers and last valid definitions with sync
1367
+ * errors are included. Missing handlers are omitted. This reads saved
1368
+ * state without fetching GitHub or triggering synchronization.
1051
1369
  *
1052
- * Delete a file.
1370
+ * Requires configs:read; scoped grants match handlers/{service}.
1371
+ * Session tokens with that grant may read handlers.
1053
1372
  *
1054
- * A foreign, missing, or already-deleted id is an
1055
- * indistinguishable 404, so ids can't be enumerated. Sandbox
1056
- * tokens get a 403 (a sandbox token sits next to
1057
- * potentially-untrusted code and must not be able to destroy the
1058
- * account's files — uploading is fine, destruction is not); API
1059
- * keys and user tokens may delete.
1373
+ * Required permissions: read:configs.
1374
+ * API key: Supported.
1375
+ * CLI user token: Supported.
1376
+ * Session token: Requires the ellipsis:api scope and the required grants in the token's permissions.ellipsis configuration.
1377
+ * Higher permission levels include lower levels: read < write < delete.
1378
+ * Grant match patterns can further restrict access to individual resources.
1060
1379
  */
1061
- async delete(file_id) {
1062
- const path = `/v1/files/${enc(file_id)}`;
1063
- await this.transport.request("DELETE", path);
1380
+ async list() {
1381
+ const path = "/v1/handlers";
1382
+ return await this.transport.request("GET", path);
1064
1383
  }
1065
1384
  /**
1066
- * Get File
1385
+ * Get Handler Metrics
1067
1386
  *
1068
- * Return one file's metadata and download link.
1387
+ * Return session counts and accumulated spend for a saved handler.
1069
1388
  *
1070
- * Includes the gated dashboard URL and a short-lived presigned
1071
- * `download_url`, plus the owning account's GitHub login.
1389
+ * Filters only by session creation time. Omitted bounds include all
1390
+ * history. Counts use the current turn and conversation state, so an open
1391
+ * conversation awaiting another message remains active. Spend includes the selected sessions' full
1392
+ * accumulated cost, including activity after the creation-time window.
1393
+ * Only sessions carrying this exact saved handler id are counted;
1394
+ * legacy sessions without handler provenance are excluded.
1072
1395
  *
1073
- * Signed-in dashboard users are checked against the file's owning
1074
- * account, regardless of their selected organization. API keys,
1075
- * CLI user tokens, and sandbox tokens remain restricted to their
1076
- * own account. Missing, deleted, and inaccessible files return 404.
1396
+ * spend_windows reports current trailing 1-, 7-, and 28-day credit
1397
+ * debits and effective handler budgets across all attributed sessions.
1398
+ * Those windows use usage timestamps and are independent of start/end.
1077
1399
  *
1078
- * To fetch the bytes locally, call this and then GET download_url
1079
- * immediately — the JSON API never carries the file. The CLI's
1080
- * `agent file get` wraps exactly that two-step.
1081
- */
1082
- async get(file_id) {
1083
- const path = `/v1/files/${enc(file_id)}`;
1084
- return await this.transport.request("GET", path);
1085
- }
1086
- /**
1087
- * List Files
1088
- *
1089
- * List uploaded files, newest first.
1400
+ * Requires configs:read matching handlers/{service} and unrestricted
1401
+ * sessions:read. Session tokens with both grants may read metrics.
1090
1402
  *
1091
- * Metadata only by default. Set include_download_urls=true to get
1092
- * a download_urls map keyed by file id for thumbnails or batch
1093
- * downloads. URLs expire within about a minute. session_id scopes
1094
- * the list to one session's uploads.
1403
+ * Required permissions: read:sessions, read:configs.
1404
+ * API key: Supported.
1405
+ * CLI user token: Supported.
1406
+ * Session token: Requires the ellipsis:api scope and the required grants in the token's permissions.ellipsis configuration.
1407
+ * Higher permission levels include lower levels: read < write < delete.
1408
+ * Grant match patterns can further restrict access to individual resources.
1095
1409
  */
1096
- async list(options = {}) {
1097
- const path = "/v1/files";
1098
- const query = buildQuery({ session_id: options.session_id, limit: options.limit, cursor: options.cursor, include_download_urls: options.include_download_urls });
1099
- const response = await this.transport.request("GET", path, { query });
1100
- return new Page(
1101
- response,
1102
- "files",
1103
- (cursor) => this.list({ ...options, cursor })
1104
- );
1410
+ async metrics(handler_id, options = {}) {
1411
+ const path = `/v1/handlers/${enc(handler_id)}/metrics`;
1412
+ const query = buildQuery({ start: options.start, end: options.end });
1413
+ return await this.transport.request("GET", path, { query });
1105
1414
  }
1106
1415
  };
1107
1416
  var EllipsisIntegrationsGithub = class {
@@ -1119,6 +1428,12 @@ var EllipsisIntegrationsGithub = class {
1119
1428
  *
1120
1429
  * Members carry their linked Slack identity when a Slack-GitHub
1121
1430
  * link exists, and /slack/members carries the reverse link.
1431
+ *
1432
+ * Required permissions: read:integrations.
1433
+ * API key: Supported.
1434
+ * CLI user token: Supported.
1435
+ * Session token: Requires the ellipsis:api scope and the required grants in the token's permissions.ellipsis configuration.
1436
+ * Higher permission levels include lower levels: read < write < delete.
1122
1437
  */
1123
1438
  async members() {
1124
1439
  const path = "/v1/integrations/github/members";
@@ -1128,6 +1443,12 @@ var EllipsisIntegrationsGithub = class {
1128
1443
  * List Github Repositories
1129
1444
  *
1130
1445
  * List GitHub repositories connected to the installation.
1446
+ *
1447
+ * Required permissions: read:integrations.
1448
+ * API key: Supported.
1449
+ * CLI user token: Supported.
1450
+ * Session token: Requires the ellipsis:api scope and the required grants in the token's permissions.ellipsis configuration.
1451
+ * Higher permission levels include lower levels: read < write < delete.
1131
1452
  */
1132
1453
  async repos() {
1133
1454
  const path = "/v1/integrations/github/repos";
@@ -1135,6 +1456,12 @@ var EllipsisIntegrationsGithub = class {
1135
1456
  }
1136
1457
  /**
1137
1458
  * Uninstall Github App
1459
+ *
1460
+ * Required permissions: write:integrations.
1461
+ * API key: Supported.
1462
+ * CLI user token: Supported.
1463
+ * Session token: Not supported by session tokens, even with permissions.ellipsis enabled.
1464
+ * Higher permission levels include lower levels: read < write < delete.
1138
1465
  */
1139
1466
  async uninstall(options) {
1140
1467
  const path = "/v1/integrations/github/uninstall";
@@ -1149,6 +1476,12 @@ var EllipsisIntegrationsLinear = class {
1149
1476
  transport;
1150
1477
  /**
1151
1478
  * Delete Linear Integration
1479
+ *
1480
+ * Required permissions: delete:integrations.
1481
+ * API key: Supported.
1482
+ * CLI user token: Supported.
1483
+ * Session token: Not supported by session tokens, even with permissions.ellipsis enabled.
1484
+ * Higher permission levels include lower levels: read < write < delete.
1152
1485
  */
1153
1486
  async delete() {
1154
1487
  const path = "/v1/integrations/linear";
@@ -1158,6 +1491,12 @@ var EllipsisIntegrationsLinear = class {
1158
1491
  * List Linear Teams
1159
1492
  *
1160
1493
  * List the teams of the connected Linear workspace.
1494
+ *
1495
+ * Required permissions: read:integrations.
1496
+ * API key: Supported.
1497
+ * CLI user token: Supported.
1498
+ * Session token: Requires the ellipsis:api scope and the required grants in the token's permissions.ellipsis configuration.
1499
+ * Higher permission levels include lower levels: read < write < delete.
1161
1500
  */
1162
1501
  async teams() {
1163
1502
  const path = "/v1/integrations/linear/teams";
@@ -1165,6 +1504,12 @@ var EllipsisIntegrationsLinear = class {
1165
1504
  }
1166
1505
  /**
1167
1506
  * Update Linear Teams
1507
+ *
1508
+ * Required permissions: write:integrations.
1509
+ * API key: Supported.
1510
+ * CLI user token: Supported.
1511
+ * Session token: Not supported by session tokens, even with permissions.ellipsis enabled.
1512
+ * Higher permission levels include lower levels: read < write < delete.
1168
1513
  */
1169
1514
  async updateSettings(options) {
1170
1515
  const path = "/v1/integrations/linear/settings";
@@ -1179,6 +1524,12 @@ var EllipsisIntegrationsSentry = class {
1179
1524
  transport;
1180
1525
  /**
1181
1526
  * Delete Sentry Integration
1527
+ *
1528
+ * Required permissions: delete:integrations.
1529
+ * API key: Supported.
1530
+ * CLI user token: Supported.
1531
+ * Session token: Not supported by session tokens, even with permissions.ellipsis enabled.
1532
+ * Higher permission levels include lower levels: read < write < delete.
1182
1533
  */
1183
1534
  async delete(integration_id) {
1184
1535
  const path = `/v1/integrations/sentry/${enc(integration_id)}`;
@@ -1188,6 +1539,12 @@ var EllipsisIntegrationsSentry = class {
1188
1539
  * List Sentry Organizations
1189
1540
  *
1190
1541
  * List the connected Sentry organizations.
1542
+ *
1543
+ * Required permissions: read:integrations.
1544
+ * API key: Supported.
1545
+ * CLI user token: Supported.
1546
+ * Session token: Requires the ellipsis:api scope and the required grants in the token's permissions.ellipsis configuration.
1547
+ * Higher permission levels include lower levels: read < write < delete.
1191
1548
  */
1192
1549
  async organizations() {
1193
1550
  const path = "/v1/integrations/sentry/organizations";
@@ -1204,6 +1561,12 @@ var EllipsisIntegrationsSlack = class {
1204
1561
  *
1205
1562
  * List the channels of the connected Slack workspace, fetched
1206
1563
  * live from the Slack API.
1564
+ *
1565
+ * Required permissions: read:integrations.
1566
+ * API key: Supported.
1567
+ * CLI user token: Supported.
1568
+ * Session token: Requires the ellipsis:api scope and the required grants in the token's permissions.ellipsis configuration.
1569
+ * Higher permission levels include lower levels: read < write < delete.
1207
1570
  */
1208
1571
  async channels() {
1209
1572
  const path = "/v1/integrations/slack/channels";
@@ -1211,6 +1574,12 @@ var EllipsisIntegrationsSlack = class {
1211
1574
  }
1212
1575
  /**
1213
1576
  * Create Operations Channel
1577
+ *
1578
+ * Required permissions: write:integrations.
1579
+ * API key: Supported.
1580
+ * CLI user token: Supported.
1581
+ * Session token: Not supported by session tokens, even with permissions.ellipsis enabled.
1582
+ * Higher permission levels include lower levels: read < write < delete.
1214
1583
  */
1215
1584
  async createOperationsChannel() {
1216
1585
  const path = "/v1/integrations/slack/operations-channel";
@@ -1218,6 +1587,12 @@ var EllipsisIntegrationsSlack = class {
1218
1587
  }
1219
1588
  /**
1220
1589
  * Delete Slack Integration
1590
+ *
1591
+ * Required permissions: delete:integrations.
1592
+ * API key: Supported.
1593
+ * CLI user token: Supported.
1594
+ * Session token: Not supported by session tokens, even with permissions.ellipsis enabled.
1595
+ * Higher permission levels include lower levels: read < write < delete.
1221
1596
  */
1222
1597
  async delete() {
1223
1598
  const path = "/v1/integrations/slack";
@@ -1228,6 +1603,12 @@ var EllipsisIntegrationsSlack = class {
1228
1603
  *
1229
1604
  * List the members of the connected Slack workspace, fetched
1230
1605
  * live from the Slack API.
1606
+ *
1607
+ * Required permissions: read:integrations.
1608
+ * API key: Supported.
1609
+ * CLI user token: Supported.
1610
+ * Session token: Requires the ellipsis:api scope and the required grants in the token's permissions.ellipsis configuration.
1611
+ * Higher permission levels include lower levels: read < write < delete.
1231
1612
  */
1232
1613
  async members() {
1233
1614
  const path = "/v1/integrations/slack/members";
@@ -1235,6 +1616,12 @@ var EllipsisIntegrationsSlack = class {
1235
1616
  }
1236
1617
  /**
1237
1618
  * Update Slack Settings
1619
+ *
1620
+ * Required permissions: write:integrations.
1621
+ * API key: Supported.
1622
+ * CLI user token: Supported.
1623
+ * Session token: Not supported by session tokens, even with permissions.ellipsis enabled.
1624
+ * Higher permission levels include lower levels: read < write < delete.
1238
1625
  */
1239
1626
  async updateSettings(options) {
1240
1627
  const path = "/v1/integrations/slack/settings";
@@ -1262,10 +1649,16 @@ var EllipsisIntegrations = class {
1262
1649
  *
1263
1650
  * A read-only view, so an agent authoring another agent's
1264
1651
  * config can learn which repositories, channels, teams, and
1265
- * organizations it may name before POST /automations.
1652
+ * organizations it may name before POST /agents.
1266
1653
  *
1267
- * Available to all credential types including sandbox tokens: the
1654
+ * Available to all credential types including session tokens: the
1268
1655
  * responses never include OAuth tokens or any other secret.
1656
+ *
1657
+ * Required permissions: read:integrations.
1658
+ * API key: Supported.
1659
+ * CLI user token: Supported.
1660
+ * Session token: Requires the ellipsis:api scope and the required grants in the token's permissions.ellipsis configuration.
1661
+ * Higher permission levels include lower levels: read < write < delete.
1269
1662
  */
1270
1663
  async list() {
1271
1664
  const path = "/v1/integrations";
@@ -1289,6 +1682,13 @@ var EllipsisMemories = class {
1289
1682
  *
1290
1683
  * Creating never overwrites: a path that already exists is a 409, so
1291
1684
  * correcting an existing memory is an explicit edit.
1685
+ *
1686
+ * Required permissions: write:memories.
1687
+ * API key: Supported.
1688
+ * CLI user token: Supported.
1689
+ * Session token: Requires the ellipsis:api scope and the required grants in the token's permissions.ellipsis configuration.
1690
+ * Higher permission levels include lower levels: read < write < delete.
1691
+ * Grant match patterns can further restrict access to individual resources.
1292
1692
  */
1293
1693
  async create(options) {
1294
1694
  const path = "/v1/memories";
@@ -1303,6 +1703,13 @@ var EllipsisMemories = class {
1303
1703
  * Available to every credential type, agents included — a wrong
1304
1704
  * memory is worse than a missing one. The deleted content is kept in
1305
1705
  * the memory's history for forensics, not for an undo API.
1706
+ *
1707
+ * Required permissions: delete:memories.
1708
+ * API key: Supported.
1709
+ * CLI user token: Supported.
1710
+ * Session token: Requires the ellipsis:api scope and the required grants in the token's permissions.ellipsis configuration.
1711
+ * Higher permission levels include lower levels: read < write < delete.
1712
+ * Grant match patterns can further restrict access to individual resources.
1306
1713
  */
1307
1714
  async delete(memory_id, options = {}) {
1308
1715
  const path = `/v1/memories/${enc(memory_id)}`;
@@ -1320,6 +1727,13 @@ var EllipsisMemories = class {
1320
1727
  *
1321
1728
  * Pass `if_sha256` (from a previous read) to make a concurrent write
1322
1729
  * a 409 instead of silently overwriting it.
1730
+ *
1731
+ * Required permissions: write:memories.
1732
+ * API key: Supported.
1733
+ * CLI user token: Supported.
1734
+ * Session token: Requires the ellipsis:api scope and the required grants in the token's permissions.ellipsis configuration.
1735
+ * Higher permission levels include lower levels: read < write < delete.
1736
+ * Grant match patterns can further restrict access to individual resources.
1323
1737
  */
1324
1738
  async edit(memory_id, options = {}) {
1325
1739
  const path = `/v1/memories/${enc(memory_id)}`;
@@ -1332,6 +1746,13 @@ var EllipsisMemories = class {
1332
1746
  * Read one memory's full content.
1333
1747
  *
1334
1748
  * The id comes from the index returned by listing memories.
1749
+ *
1750
+ * Required permissions: read:memories.
1751
+ * API key: Supported.
1752
+ * CLI user token: Supported.
1753
+ * Session token: Requires the ellipsis:api scope and the required grants in the token's permissions.ellipsis configuration.
1754
+ * Higher permission levels include lower levels: read < write < delete.
1755
+ * Grant match patterns can further restrict access to individual resources.
1335
1756
  */
1336
1757
  async get(memory_id) {
1337
1758
  const path = `/v1/memories/${enc(memory_id)}`;
@@ -1346,6 +1767,13 @@ var EllipsisMemories = class {
1346
1767
  * memory, carrying its id, path, and description) plus the same
1347
1768
  * entries structured, each with every field except `content`. Read
1348
1769
  * the index, then fetch the ids whose content you want.
1770
+ *
1771
+ * Required permissions: read:memories.
1772
+ * API key: Supported.
1773
+ * CLI user token: Supported.
1774
+ * Session token: Requires the ellipsis:api scope and the required grants in the token's permissions.ellipsis configuration.
1775
+ * Higher permission levels include lower levels: read < write < delete.
1776
+ * Grant match patterns can further restrict access to individual resources.
1349
1777
  */
1350
1778
  async list(options = {}) {
1351
1779
  const path = "/v1/memories";
@@ -1360,6 +1788,12 @@ var EllipsisReviews = class {
1360
1788
  transport;
1361
1789
  /**
1362
1790
  * List Review Configs
1791
+ *
1792
+ * Required permissions: read:reviews.
1793
+ * API key: Supported.
1794
+ * CLI user token: Supported.
1795
+ * Session token: Requires the ellipsis:api scope and the required grants in the token's permissions.ellipsis configuration.
1796
+ * Higher permission levels include lower levels: read < write < delete.
1363
1797
  */
1364
1798
  async configs() {
1365
1799
  const path = "/v1/reviews/configs";
@@ -1376,10 +1810,16 @@ var EllipsisReviews = class {
1376
1810
  * the automatic one.
1377
1811
  *
1378
1812
  * A review is one pipeline run over one commit range, with one
1379
- * agent session per stage: `review.id` is the run id, and
1813
+ * agent session per stage: `review.id` is the review id, and
1380
1814
  * `stages[].session_id` is where a client streams
1381
1815
  * (/sessions/{id}/stream on a stage session), since the review
1382
1816
  * itself is a pipeline rather than one process.
1817
+ *
1818
+ * Required permissions: write:reviews.
1819
+ * API key: Supported.
1820
+ * CLI user token: Supported.
1821
+ * Session token: Requires the ellipsis:api scope and the required grants in the token's permissions.ellipsis configuration.
1822
+ * Higher permission levels include lower levels: read < write < delete.
1383
1823
  */
1384
1824
  async create(options) {
1385
1825
  const path = "/v1/reviews";
@@ -1397,6 +1837,12 @@ var EllipsisReviews = class {
1397
1837
  * Findings only exist after a stage session finalizes — a running
1398
1838
  * review honestly reports [] / null, which is why a client
1399
1839
  * streams a stage session and then re-fetches the review.
1840
+ *
1841
+ * Required permissions: read:reviews.
1842
+ * API key: Supported.
1843
+ * CLI user token: Supported.
1844
+ * Session token: Requires the ellipsis:api scope and the required grants in the token's permissions.ellipsis configuration.
1845
+ * Higher permission levels include lower levels: read < write < delete.
1400
1846
  */
1401
1847
  async get(review_id) {
1402
1848
  const path = `/v1/reviews/${enc(review_id)}`;
@@ -1414,6 +1860,12 @@ var EllipsisReviews = class {
1414
1860
  *
1415
1861
  * Webhook-created reviews appear here too, so this answers "show
1416
1862
  * me every review on this PR".
1863
+ *
1864
+ * Required permissions: read:reviews.
1865
+ * API key: Supported.
1866
+ * CLI user token: Supported.
1867
+ * Session token: Requires the ellipsis:api scope and the required grants in the token's permissions.ellipsis configuration.
1868
+ * Higher permission levels include lower levels: read < write < delete.
1417
1869
  */
1418
1870
  async list(options = {}) {
1419
1871
  const path = "/v1/reviews";
@@ -1426,33 +1878,6 @@ var EllipsisReviews = class {
1426
1878
  );
1427
1879
  }
1428
1880
  };
1429
- var EllipsisSandboxes = class {
1430
- constructor(transport) {
1431
- this.transport = transport;
1432
- }
1433
- transport;
1434
- /**
1435
- * Get Single Sandbox
1436
- */
1437
- async get(sandbox_id) {
1438
- const path = `/v1/sandboxes/${enc(sandbox_id)}`;
1439
- return await this.transport.request("GET", path);
1440
- }
1441
- /**
1442
- * Get Sandboxes
1443
- */
1444
- async list() {
1445
- const path = "/v1/sandboxes";
1446
- await this.transport.request("GET", path);
1447
- }
1448
- /**
1449
- * Get Sandbox Stream Ticket
1450
- */
1451
- async streamTicket(sandbox_id) {
1452
- const path = `/v1/sandboxes/${enc(sandbox_id)}/stream-ticket`;
1453
- return await this.transport.request("GET", path);
1454
- }
1455
- };
1456
1881
  var EllipsisSecrets = class {
1457
1882
  constructor(transport) {
1458
1883
  this.transport = transport;
@@ -1463,8 +1888,15 @@ var EllipsisSecrets = class {
1463
1888
  *
1464
1889
  * Delete a secret by name.
1465
1890
  *
1466
- * Refused for sandbox tokens; mutations require an API key or
1891
+ * Refused for session tokens; mutations require an API key or
1467
1892
  * user token.
1893
+ *
1894
+ * Required permissions: delete:secrets.
1895
+ * API key: Supported.
1896
+ * CLI user token: Supported.
1897
+ * Session token: Not supported by session tokens, even with permissions.ellipsis enabled.
1898
+ * Higher permission levels include lower levels: read < write < delete.
1899
+ * Grant match patterns can further restrict access to individual resources.
1468
1900
  */
1469
1901
  async delete(name) {
1470
1902
  const path = `/v1/secrets/${enc(name)}`;
@@ -1477,6 +1909,13 @@ var EllipsisSecrets = class {
1477
1909
  *
1478
1910
  * Values are write-only: the response carries only names and
1479
1911
  * timestamps, never the stored value.
1912
+ *
1913
+ * Required permissions: read:secrets.
1914
+ * API key: Supported.
1915
+ * CLI user token: Supported.
1916
+ * Session token: Requires the ellipsis:api scope and the required grants in the token's permissions.ellipsis configuration.
1917
+ * Higher permission levels include lower levels: read < write < delete.
1918
+ * Grant match patterns can further restrict access to individual resources.
1480
1919
  */
1481
1920
  async list() {
1482
1921
  const path = "/v1/secrets";
@@ -1488,9 +1927,16 @@ var EllipsisSecrets = class {
1488
1927
  * Upsert secrets.
1489
1928
  *
1490
1929
  * Returns only the secrets this call wrote, names and timestamps
1491
- * only — values are write-only. Refused for sandbox tokens (held by
1492
- * potentially-untrusted in-sandbox code); mutations require an
1493
- * API key or user token.
1930
+ * only — values are write-only. Refused for session tokens (held by
1931
+ * potentially-untrusted code running inside a session); mutations
1932
+ * require an API key or user token.
1933
+ *
1934
+ * Required permissions: write:secrets.
1935
+ * API key: Supported.
1936
+ * CLI user token: Supported.
1937
+ * Session token: Not supported by session tokens, even with permissions.ellipsis enabled.
1938
+ * Higher permission levels include lower levels: read < write < delete.
1939
+ * Grant match patterns can further restrict access to individual resources.
1494
1940
  */
1495
1941
  async set(options) {
1496
1942
  const path = "/v1/secrets";
@@ -1498,112 +1944,188 @@ var EllipsisSecrets = class {
1498
1944
  return await this.transport.request("PUT", path, { body });
1499
1945
  }
1500
1946
  };
1947
+ var EllipsisSessionsTurns = class {
1948
+ constructor(transport) {
1949
+ this.transport = transport;
1950
+ }
1951
+ transport;
1952
+ /**
1953
+ * Get Session Turn
1954
+ *
1955
+ * Return one turn.
1956
+ *
1957
+ * Poll this after sending a message: the message is answered when
1958
+ * the turn's status is completed, failed, stopped, or cancelled.
1959
+ *
1960
+ * Required permissions: read:sessions.
1961
+ * API key: Supported.
1962
+ * CLI user token: Supported.
1963
+ * Session token: Requires the ellipsis:api scope and the required grants in the token's permissions.ellipsis configuration.
1964
+ * Higher permission levels include lower levels: read < write < delete.
1965
+ * Grant match patterns can further restrict access to individual resources.
1966
+ */
1967
+ async get(session_id, turn_id) {
1968
+ const path = `/v1/sessions/${enc(session_id)}/turns/${enc(turn_id)}`;
1969
+ return await this.transport.request("GET", path);
1970
+ }
1971
+ /**
1972
+ * Get Session Turns
1973
+ *
1974
+ * Return the session's turns and messages, oldest first.
1975
+ *
1976
+ * One turn per message: pending until the agent starts on it,
1977
+ * running while it works, then completed, failed, stopped, or
1978
+ * cancelled.
1979
+ *
1980
+ * Required permissions: read:sessions.
1981
+ * API key: Supported.
1982
+ * CLI user token: Supported.
1983
+ * Session token: Requires the ellipsis:api scope and the required grants in the token's permissions.ellipsis configuration.
1984
+ * Higher permission levels include lower levels: read < write < delete.
1985
+ * Grant match patterns can further restrict access to individual resources.
1986
+ */
1987
+ async list(session_id) {
1988
+ const path = `/v1/sessions/${enc(session_id)}/turns`;
1989
+ return await this.transport.request("GET", path);
1990
+ }
1991
+ };
1501
1992
  var EllipsisSessions = class {
1502
1993
  constructor(transport) {
1503
1994
  this.transport = transport;
1995
+ this.turns = new EllipsisSessionsTurns(transport);
1504
1996
  }
1505
1997
  transport;
1998
+ turns;
1506
1999
  /**
1507
- * Get Agent Session Analytics
2000
+ * Get Session Analytics
1508
2001
  *
1509
2002
  * Measured tokens and spend over time, plus estimated content cost.
1510
2003
  *
1511
2004
  * Token lanes use the request's saved rates. Content attribution
1512
2005
  * apportions input/cache spend by text size, counting carried context
1513
- * on every request. It is an estimate, not a tool execution fee.
2006
+ * on every request. It is an estimate, not a tool call fee.
1514
2007
  * Only the latest 200 retained request bodies are inspected; missing
1515
2008
  * or unsupported context remains explicitly unattributed. No raw
1516
- * prompts or tool results are returned. Sandbox tokens may read only
2009
+ * prompts or tool results are returned. Session tokens may read only
1517
2010
  * their own session's analytics.
2011
+ *
2012
+ * Required permissions: read:sessions.
2013
+ * API key: Supported.
2014
+ * CLI user token: Supported.
2015
+ * Session token: Requires the ellipsis:api scope and the required grants in the token's permissions.ellipsis configuration. Only the token's own session.
2016
+ * Higher permission levels include lower levels: read < write < delete.
2017
+ * Grant match patterns can further restrict access to individual resources.
1518
2018
  */
1519
2019
  async analytics(session_id) {
1520
2020
  const path = `/v1/sessions/${enc(session_id)}/analytics`;
1521
2021
  return await this.transport.request("GET", path);
1522
2022
  }
1523
2023
  /**
1524
- * Get Agent Session Diff
2024
+ * Get Session Diff
1525
2025
  *
1526
2026
  * Return the session's uncommitted changes as a patch.
1527
2027
  *
1528
2028
  * One unified-diff section per changed file, captured from the
1529
- * sandbox's working tree when the session ended. The per-file
2029
+ * environment's working tree when the session ended. The per-file
1530
2030
  * counts ride on the session itself (`git.repos[].files`); this
1531
2031
  * is the text behind them. Empty when the tree was clean. A
1532
- * sandbox token may read only its own session's diff.
2032
+ * session token may read only its own session's diff.
2033
+ *
2034
+ * Required permissions: read:sessions.
2035
+ * API key: Supported.
2036
+ * CLI user token: Supported.
2037
+ * Session token: Requires the ellipsis:api scope and the required grants in the token's permissions.ellipsis configuration. Only the token's own session.
2038
+ * Higher permission levels include lower levels: read < write < delete.
2039
+ * Grant match patterns can further restrict access to individual resources.
1533
2040
  */
1534
2041
  async diff(session_id) {
1535
2042
  const path = `/v1/sessions/${enc(session_id)}/diff`;
1536
2043
  return await this.transport.request("GET", path);
1537
2044
  }
1538
2045
  /**
1539
- * List Session Executions
2046
+ * Download Session
1540
2047
  *
1541
- * Return the session's execution attempts, oldest first.
1542
- *
1543
- * Includes the selected harness, model, resolved instructions, initial
1544
- * query, and common result summary. Complete native outputs remain in
1545
- * the session's records. Internal launch options and checkpoint storage
1546
- * references are excluded.
1547
- */
1548
- async executions(session_id) {
1549
- const path = `/v1/sessions/${enc(session_id)}/executions`;
1550
- return await this.transport.request("GET", path);
1551
- }
1552
- /**
1553
- * Export Agent Session
1554
- *
1555
- * Export the complete session history.
2048
+ * Download the complete session history.
1556
2049
  *
1557
2050
  * The complete, ordered history of the session (agent output, tool calls, thinking,
1558
- * lifecycle events, sandbox output, message events) as an ordered
2051
+ * lifecycle events, environment output, message events) as an ordered
1559
2052
  * manifest of presigned segment URLs.
1560
2053
  *
1561
2054
  * Segments are gzip members: download in order and concatenate
1562
2055
  * for one file. The JSON API never carries the bytes (same
1563
2056
  * two-step as files). /records is the paged live view of the
1564
2057
  * same data.
2058
+ *
2059
+ * Required permissions: read:sessions.
2060
+ * API key: Supported.
2061
+ * CLI user token: Supported.
2062
+ * Session token: Requires the ellipsis:api scope and the required grants in the token's permissions.ellipsis configuration.
2063
+ * Higher permission levels include lower levels: read < write < delete.
2064
+ * Grant match patterns can further restrict access to individual resources.
1565
2065
  */
1566
- async export(session_id) {
1567
- const path = `/v1/sessions/${enc(session_id)}/export`;
2066
+ async download(session_id) {
2067
+ const path = `/v1/sessions/${enc(session_id)}/download`;
1568
2068
  return await this.transport.request("GET", path);
1569
2069
  }
1570
2070
  /**
1571
- * Get Agent Session
2071
+ * Get Session
1572
2072
  *
1573
2073
  * Return one session.
1574
2074
  *
1575
- * The public wire shape — the same shape the stream's session
1576
- * frames carry, with attributed_user and stopped_by_user resolved
1577
- * at read time.
2075
+ * The public wire shape, the same shape the stream's session frames
2076
+ * carry, with attribution, stop, and archive actors resolved at read
2077
+ * time. `turn` is the turn in progress or the latest one.
1578
2078
  *
1579
2079
  * The heavy near-static blobs (config snapshot, input/output)
1580
2080
  * live on the detail endpoints, not here.
2081
+ *
2082
+ * Required permissions: read:sessions.
2083
+ * API key: Supported.
2084
+ * CLI user token: Supported.
2085
+ * Session token: Requires the ellipsis:api scope and the required grants in the token's permissions.ellipsis configuration.
2086
+ * Higher permission levels include lower levels: read < write < delete.
2087
+ * Grant match patterns can further restrict access to individual resources.
1581
2088
  */
1582
2089
  async get(session_id) {
1583
2090
  const path = `/v1/sessions/${enc(session_id)}`;
1584
2091
  return await this.transport.request("GET", path);
1585
2092
  }
1586
2093
  /**
1587
- * Get Agent Session Git
2094
+ * Get Session Git
1588
2095
  *
1589
2096
  * The session's GitHub-side git view: its commits, and each PR it
1590
2097
  * opened joined to the live gh_prs row and reviews. The identity list
1591
2098
  * (output_git) rides the session itself over the WebSocket; this is
1592
2099
  * the join a "run" notify tells an open pane to refetch.
2100
+ *
2101
+ * Required permissions: read:sessions.
2102
+ * API key: Supported.
2103
+ * CLI user token: Supported.
2104
+ * Session token: Requires the ellipsis:api scope and the required grants in the token's permissions.ellipsis configuration.
2105
+ * Higher permission levels include lower levels: read < write < delete.
2106
+ * Grant match patterns can further restrict access to individual resources.
1593
2107
  */
1594
2108
  async git(session_id) {
1595
2109
  const path = `/v1/sessions/${enc(session_id)}/git`;
1596
2110
  return await this.transport.request("GET", path);
1597
2111
  }
1598
2112
  /**
1599
- * Ingest Agent Session Transcript
2113
+ * Ingest Session Transcript
1600
2114
  *
1601
2115
  * Append transcript lines to a session's record.
1602
2116
  *
1603
- * The in-sandbox tailer for interactive sessions.
2117
+ * The transcript tailer running inside the session's environment, for
2118
+ * interactive sessions.
1604
2119
  *
1605
- * A sandbox token may only push its own session's transcript.
1606
- * Idempotent by transcript line uuid; tolerant of malformed lines.
2120
+ * A session token may only push its own session's transcript.
2121
+ * Idempotent by transcript line uuid; tolerant of malformed lines.
2122
+ *
2123
+ * Required permissions: write:sessions.
2124
+ * API key: Supported.
2125
+ * CLI user token: Supported.
2126
+ * Session token: Requires the ellipsis:api scope and the required grants in the token's permissions.ellipsis configuration. Only the token's own session.
2127
+ * Higher permission levels include lower levels: read < write < delete.
2128
+ * Grant match patterns can further restrict access to individual resources.
1607
2129
  */
1608
2130
  async ingestTranscript(session_id, options) {
1609
2131
  const path = `/v1/sessions/${enc(session_id)}/transcript`;
@@ -1611,17 +2133,24 @@ var EllipsisSessions = class {
1611
2133
  return await this.transport.request("POST", path, { body });
1612
2134
  }
1613
2135
  /**
1614
- * List Agent Sessions
2136
+ * List Sessions
1615
2137
  *
1616
2138
  * List cloud agent sessions, newest first.
1617
2139
  *
1618
- * Optionally filtered by automation (id or name), source, time
2140
+ * Optionally filtered by agent (id or name), source, service, handler, time
1619
2141
  * window, attributed author, repository, and whether the session is
1620
2142
  * still going.
2143
+ *
2144
+ * Required permissions: read:sessions.
2145
+ * API key: Supported.
2146
+ * CLI user token: Supported.
2147
+ * Session token: Requires the ellipsis:api scope and the required grants in the token's permissions.ellipsis configuration.
2148
+ * Higher permission levels include lower levels: read < write < delete.
2149
+ * Grant match patterns can further restrict access to individual resources.
1621
2150
  */
1622
2151
  async list(options = {}) {
1623
2152
  const path = "/v1/sessions";
1624
- const query = buildQuery({ automation: options.automation, source: options.source, days: options.days, start: options.start, end: options.end, limit: options.limit, cursor: options.cursor, author_id: options.author_id, repo: options.repo, unfinished: options.unfinished, exclude_code_review: options.exclude_code_review });
2153
+ const query = buildQuery({ agent: options.agent, source: options.source, service: options.service, handler: options.handler, days: options.days, start: options.start, end: options.end, limit: options.limit, cursor: options.cursor, author_id: options.author_id, repo: options.repo, unfinished: options.unfinished, exclude_code_review: options.exclude_code_review });
1625
2154
  const response = await this.transport.request("GET", path, { query });
1626
2155
  return new Page(
1627
2156
  response,
@@ -1630,30 +2159,44 @@ var EllipsisSessions = class {
1630
2159
  );
1631
2160
  }
1632
2161
  /**
1633
- * Get Agent Session Output
2162
+ * Get Session Output
1634
2163
  *
1635
2164
  * Return the session's typed output.
1636
2165
  *
1637
2166
  * The payload the agent submitted through its config-declared
1638
2167
  * output.json_schema, as the raw JSON body with no envelope. 404
1639
2168
  * while the session is still running (poll GET /v1/sessions/{id}),
1640
- * when the agent declares no output block, or when no execution
2169
+ * when the agent declares no output block, or when no turn
1641
2170
  * produced output.
2171
+ *
2172
+ * Required permissions: read:sessions.
2173
+ * API key: Supported.
2174
+ * CLI user token: Supported.
2175
+ * Session token: Requires the ellipsis:api scope and the required grants in the token's permissions.ellipsis configuration.
2176
+ * Higher permission levels include lower levels: read < write < delete.
2177
+ * Grant match patterns can further restrict access to individual resources.
1642
2178
  */
1643
2179
  async output(session_id) {
1644
2180
  const path = `/v1/sessions/${enc(session_id)}/output`;
1645
2181
  return await this.transport.request("GET", path);
1646
2182
  }
1647
2183
  /**
1648
- * Get Agent Session Records
2184
+ * Get Session Records
1649
2185
  *
1650
2186
  * Return the session's stored transcript records, oldest first.
1651
2187
  *
1652
2188
  * Pagination is opt-in (cursor/limit); a bare call returns the
1653
- * full retained transcript. Available to sandbox tokens too: an
2189
+ * full retained transcript. Available to session tokens too: an
1654
2190
  * agent answering "did X look into Y?" needs to read the sessions
1655
2191
  * it finds, and any org member sees the same transcript in the
1656
2192
  * dashboard.
2193
+ *
2194
+ * Required permissions: read:sessions.
2195
+ * API key: Supported.
2196
+ * CLI user token: Supported.
2197
+ * Session token: Requires the ellipsis:api scope and the required grants in the token's permissions.ellipsis configuration.
2198
+ * Higher permission levels include lower levels: read < write < delete.
2199
+ * Grant match patterns can further restrict access to individual resources.
1657
2200
  */
1658
2201
  async records(session_id, options = {}) {
1659
2202
  const path = `/v1/sessions/${enc(session_id)}/records`;
@@ -1666,22 +2209,35 @@ var EllipsisSessions = class {
1666
2209
  );
1667
2210
  }
1668
2211
  /**
1669
- * Search Agent Sessions
2212
+ * Search Sessions
2213
+ *
2214
+ * Required permissions: read:sessions.
2215
+ * API key: Supported.
2216
+ * CLI user token: Supported.
2217
+ * Session token: Requires the ellipsis:api scope and the required grants in the token's permissions.ellipsis configuration.
2218
+ * Higher permission levels include lower levels: read < write < delete.
2219
+ * Grant match patterns can further restrict access to individual resources.
1670
2220
  */
1671
2221
  async search(options = {}) {
1672
2222
  const path = "/v1/sessions/search";
1673
- const query = buildQuery({ q: options.q, scope: options.scope, source: options.source, author_id: options.author_id, automation_id: options.automation_id, session_ids: options.session_ids, repo: options.repo, status: options.status, start: options.start, end: options.end, limit: options.limit });
2223
+ const query = buildQuery({ q: options.q, scope: options.scope, source: options.source, service: options.service, handler: options.handler, author_id: options.author_id, agent_id: options.agent_id, session_ids: options.session_ids, repo: options.repo, status: options.status, start: options.start, end: options.end, limit: options.limit });
1674
2224
  return await this.transport.request("GET", path, { query });
1675
2225
  }
1676
2226
  /**
1677
- * Send Agent Session Message
2227
+ * Send Session Message
1678
2228
  *
1679
2229
  * Send a message to a session.
1680
2230
  *
1681
- * 409 for react/cron, non-interactive, and closed sessions.
1682
- * Returns the created message so the caller can track it by id; a
1683
- * retried send with the same idempotency_key returns the original
1684
- * message.
2231
+ * 409 for react/cron, non-interactive, closed, and out-of-budget
2232
+ * sessions. Returns the created message and its turn; a retried send
2233
+ * with the same idempotency_key returns the original ones.
2234
+ *
2235
+ * Required permissions: write:sessions.
2236
+ * API key: Supported.
2237
+ * CLI user token: Supported.
2238
+ * Session token: Requires the ellipsis:api scope and the required grants in the token's permissions.ellipsis configuration.
2239
+ * Higher permission levels include lower levels: read < write < delete.
2240
+ * Grant match patterns can further restrict access to individual resources.
1685
2241
  */
1686
2242
  async sendMessage(session_id, options) {
1687
2243
  const path = `/v1/sessions/${enc(session_id)}/messages`;
@@ -1690,39 +2246,63 @@ var EllipsisSessions = class {
1690
2246
  }
1691
2247
  /**
1692
2248
  * Get Session Stream Ticket
2249
+ *
2250
+ * Required permissions: read:sessions.
2251
+ * API key: Supported.
2252
+ * CLI user token: Supported.
2253
+ * Session token: Requires the ellipsis:api scope and the required grants in the token's permissions.ellipsis configuration.
2254
+ * Higher permission levels include lower levels: read < write < delete.
2255
+ * Grant match patterns can further restrict access to individual resources.
1693
2256
  */
1694
2257
  async sessionStreamTicket(session_id) {
1695
2258
  const path = `/v1/sessions/${enc(session_id)}/stream-ticket`;
1696
2259
  return await this.transport.request("GET", path);
1697
2260
  }
1698
2261
  /**
1699
- * Start Agent Session
2262
+ * Start Session
1700
2263
  *
1701
2264
  * Start a cloud agent session.
1702
2265
  *
1703
2266
  * The daily driver: a prompt, optionally where to run it
1704
- * (`environment`) and the run's own settings, in the AutomationConfig
2267
+ * (`environment`) and the session's own settings, in the AgentConfig
1705
2268
  * vocabulary. What you send is what runs: omit `environment` and the
1706
- * session runs in the built-in basic sandbox. A missing model or
2269
+ * session runs in the built-in basic environment. A missing model or
1707
2270
  * budget comes from the organization's settings, so
1708
- * `{"prompt": "..."}` alone is a complete request. `prompt` is the
1709
- * first message; omit it and the session starts idle, waiting for
1710
- * one. 400 when `interactive` is false and there is no prompt, or
1711
- * when `budget` exceeds the organization's per-session ceiling. To
1712
- * run a saved automation, use POST /v1/automations/{automation_id}/sessions.
1713
- */
1714
- async start(options) {
2271
+ * `{"claude_code": {"prompt": "..."}}` is a complete request.
2272
+ * Set exactly one of `claude_code` or `codex`. Its `prompt` is the
2273
+ * first message; omit the prompt and the session starts with no
2274
+ * turn, waiting for one. 400 when `conversation.interactive` is false
2275
+ * and there is no prompt, or when `budget` exceeds the organization's
2276
+ * per-session ceiling. To run a saved agent, use
2277
+ * POST /v1/agents/{agent_id}/sessions.
2278
+ *
2279
+ * Required permissions: write:sessions.
2280
+ * API key: Supported.
2281
+ * CLI user token: Supported.
2282
+ * Session token: Requires the ellipsis:api scope and the required grants in the token's permissions.ellipsis configuration.
2283
+ * Higher permission levels include lower levels: read < write < delete.
2284
+ * Grant match patterns can further restrict access to individual resources.
2285
+ */
2286
+ async start(options = {}) {
1715
2287
  const path = "/v1/sessions";
1716
- const body = buildBody({ budget: options.budget, environment: options.environment, force_rebuild: options.force_rebuild, harness: options.harness, images: options.images, instructions: options.instructions, interactive: options.interactive, metadata: options.metadata, output: options.output, permissions: options.permissions, prompt: options.prompt, repositories: options.repositories, skills: options.skills });
2288
+ const body = buildBody({ budget: options.budget, claude_code: options.claude_code, codex: options.codex, conversation: options.conversation, environment: options.environment, force_rebuild: options.force_rebuild, images: options.images, metadata: options.metadata, output: options.output, permissions: options.permissions, repositories: options.repositories, skills: options.skills });
1717
2289
  return await this.transport.request("POST", path, { body });
1718
2290
  }
1719
2291
  /**
1720
- * Stop Agent Session
2292
+ * Stop Session
1721
2293
  *
1722
- * Stop an in-flight session and return it.
2294
+ * Stop the turn in progress and return the session.
1723
2295
  *
1724
- * stopped_by is recorded only when the caller's credential maps
1725
- * to a GitHub account.
2296
+ * The turn ends `stopped`; the conversation stays open. 409 when no
2297
+ * turn is pending or running. The stopping user is recorded only
2298
+ * when the caller's credential maps to a GitHub account.
2299
+ *
2300
+ * Required permissions: write:sessions.
2301
+ * API key: Supported.
2302
+ * CLI user token: Supported.
2303
+ * Session token: Requires the ellipsis:api scope and the required grants in the token's permissions.ellipsis configuration.
2304
+ * Higher permission levels include lower levels: read < write < delete.
2305
+ * Grant match patterns can further restrict access to individual resources.
1726
2306
  */
1727
2307
  async stop(session_id) {
1728
2308
  const path = `/v1/sessions/${enc(session_id)}/stop`;
@@ -1730,11 +2310,43 @@ var EllipsisSessions = class {
1730
2310
  }
1731
2311
  /**
1732
2312
  * Get Sessions Stream Ticket
2313
+ *
2314
+ * Required permissions: read:sessions.
2315
+ * API key: Supported.
2316
+ * CLI user token: Supported.
2317
+ * Session token: Requires the ellipsis:api scope and the required grants in the token's permissions.ellipsis configuration.
2318
+ * Higher permission levels include lower levels: read < write < delete.
2319
+ * Grant match patterns can further restrict access to individual resources.
1733
2320
  */
1734
2321
  async streamTicket() {
1735
2322
  const path = "/v1/sessions/stream-ticket";
1736
2323
  return await this.transport.request("GET", path);
1737
2324
  }
2325
+ /**
2326
+ * Update Session
2327
+ *
2328
+ * Archive or unarchive a session and return it.
2329
+ *
2330
+ * Set archived to true to record the current server time and the
2331
+ * authenticated GitHub user. API-key requests record no user.
2332
+ * Repeated archive requests preserve the original time and user.
2333
+ * Set archived to false to clear both fields. Archiving is available
2334
+ * in any session state and does not stop a running session.
2335
+ *
2336
+ * Changes are delivered to session and session-list streams.
2337
+ *
2338
+ * Required permissions: write:sessions.
2339
+ * API key: Supported.
2340
+ * CLI user token: Supported.
2341
+ * Session token: Not supported by session tokens, even with permissions.ellipsis enabled.
2342
+ * Higher permission levels include lower levels: read < write < delete.
2343
+ * Grant match patterns can further restrict access to individual resources.
2344
+ */
2345
+ async update(session_id, options) {
2346
+ const path = `/v1/sessions/${enc(session_id)}`;
2347
+ const body = buildBody({ archived: options.archived });
2348
+ return await this.transport.request("PUT", path, { body });
2349
+ }
1738
2350
  // ---- lifecycle sugar (hand-written layer over the generated core) ----
1739
2351
  /** Start a session and return a handle over it. */
1740
2352
  async run(options) {
@@ -1754,6 +2366,12 @@ var EllipsisSupportSlack = class {
1754
2366
  transport;
1755
2367
  /**
1756
2368
  * Request Slack Help
2369
+ *
2370
+ * Required permissions: write:account.
2371
+ * API key: Requires a CLI user token.
2372
+ * CLI user token: Supported.
2373
+ * Session token: Not supported by session tokens, even with permissions.ellipsis enabled.
2374
+ * Higher permission levels include lower levels: read < write < delete.
1757
2375
  */
1758
2376
  async create(options) {
1759
2377
  const path = "/v1/support/slack";
@@ -1762,6 +2380,12 @@ var EllipsisSupportSlack = class {
1762
2380
  }
1763
2381
  /**
1764
2382
  * Get Slack Help
2383
+ *
2384
+ * Required permissions: read:account.
2385
+ * API key: Supported.
2386
+ * CLI user token: Supported.
2387
+ * Session token: Requires the ellipsis:api scope and the required grants in the token's permissions.ellipsis configuration.
2388
+ * Higher permission levels include lower levels: read < write < delete.
1765
2389
  */
1766
2390
  async get() {
1767
2391
  const path = "/v1/support/slack";
@@ -1769,6 +2393,12 @@ var EllipsisSupportSlack = class {
1769
2393
  }
1770
2394
  /**
1771
2395
  * Invite To Slack Help
2396
+ *
2397
+ * Required permissions: write:account.
2398
+ * API key: Requires a CLI user token.
2399
+ * CLI user token: Supported.
2400
+ * Session token: Not supported by session tokens, even with permissions.ellipsis enabled.
2401
+ * Higher permission levels include lower levels: read < write < delete.
1772
2402
  */
1773
2403
  async invite(options) {
1774
2404
  const path = "/v1/support/slack/invites";
@@ -1793,6 +2423,12 @@ var EllipsisTemplates = class {
1793
2423
  * Get Agent Template
1794
2424
  *
1795
2425
  * Return one built-in agent template by slug.
2426
+ *
2427
+ * Required permissions: read:templates.
2428
+ * API key: Supported.
2429
+ * CLI user token: Supported.
2430
+ * Session token: Requires the ellipsis:api scope and the required grants in the token's permissions.ellipsis configuration.
2431
+ * Higher permission levels include lower levels: read < write < delete.
1796
2432
  */
1797
2433
  async get(template_id) {
1798
2434
  const path = `/v1/templates/${enc(template_id)}`;
@@ -1805,6 +2441,12 @@ var EllipsisTemplates = class {
1805
2441
  *
1806
2442
  * Behind auth but not account-scoped — the data is static
1807
2443
  * product content shared by the dashboard, landing site, and CLI.
2444
+ *
2445
+ * Required permissions: read:templates.
2446
+ * API key: Supported.
2447
+ * CLI user token: Supported.
2448
+ * Session token: Requires the ellipsis:api scope and the required grants in the token's permissions.ellipsis configuration.
2449
+ * Higher permission levels include lower levels: read < write < delete.
1808
2450
  */
1809
2451
  async list() {
1810
2452
  const path = "/v1/templates";
@@ -1823,6 +2465,12 @@ var EllipsisUserSubscriptionTokens = class {
1823
2465
  *
1824
2466
  * Your sessions stop billing your subscription immediately, and the
1825
2467
  * usage reading goes with it — it described that token's plan.
2468
+ *
2469
+ * Required permissions: delete:user.
2470
+ * API key: Requires a CLI user token.
2471
+ * CLI user token: Supported.
2472
+ * Session token: Not supported by session tokens, even with permissions.ellipsis enabled.
2473
+ * Higher permission levels include lower levels: read < write < delete.
1826
2474
  */
1827
2475
  async delete(provider) {
1828
2476
  const path = `/v1/user/subscription_tokens/${enc(String(provider))}`;
@@ -1835,6 +2483,12 @@ var EllipsisUserSubscriptionTokens = class {
1835
2483
  *
1836
2484
  * `configured` is false when nothing is saved. The token itself is
1837
2485
  * never returned, only `token_last4`.
2486
+ *
2487
+ * Required permissions: read:user.
2488
+ * API key: Requires a CLI user token.
2489
+ * CLI user token: Supported.
2490
+ * Session token: Not supported by session tokens, even with permissions.ellipsis enabled.
2491
+ * Higher permission levels include lower levels: read < write < delete.
1838
2492
  */
1839
2493
  async get(provider) {
1840
2494
  const path = `/v1/user/subscription_tokens/${enc(String(provider))}`;
@@ -1848,6 +2502,12 @@ var EllipsisUserSubscriptionTokens = class {
1848
2502
  * One entry per supported provider, whether or not you have saved a
1849
2503
  * token for it. Tokens are write-only: the response carries only
1850
2504
  * `token_last4`, never the token.
2505
+ *
2506
+ * Required permissions: read:user.
2507
+ * API key: Requires a CLI user token.
2508
+ * CLI user token: Supported.
2509
+ * Session token: Not supported by session tokens, even with permissions.ellipsis enabled.
2510
+ * Higher permission levels include lower levels: read < write < delete.
1851
2511
  */
1852
2512
  async list() {
1853
2513
  const path = "/v1/user/subscription_tokens";
@@ -1863,6 +2523,12 @@ var EllipsisUserSubscriptionTokens = class {
1863
2523
  * succeeds. For Claude, use `claude setup-token`. For Codex, paste
1864
2524
  * the auth.json credentials from a ChatGPT login. Each subscription
1865
2525
  * pays only for models from its corresponding provider.
2526
+ *
2527
+ * Required permissions: write:user.
2528
+ * API key: Requires a CLI user token.
2529
+ * CLI user token: Supported.
2530
+ * Session token: Not supported by session tokens, even with permissions.ellipsis enabled.
2531
+ * Higher permission levels include lower levels: read < write < delete.
1866
2532
  */
1867
2533
  async set(provider, options) {
1868
2534
  const path = `/v1/user/subscription_tokens/${enc(String(provider))}`;
@@ -1879,6 +2545,12 @@ var EllipsisUserSubscriptionTokens = class {
1879
2545
  * real windows without us seeing them. Null unless a token is
1880
2546
  * enabled for the provider: a disabled token routes nothing, so any
1881
2547
  * reading behind it is stale by construction.
2548
+ *
2549
+ * Required permissions: read:user.
2550
+ * API key: Requires a CLI user token.
2551
+ * CLI user token: Supported.
2552
+ * Session token: Not supported by session tokens, even with permissions.ellipsis enabled.
2553
+ * Higher permission levels include lower levels: read < write < delete.
1882
2554
  */
1883
2555
  async usage(provider) {
1884
2556
  const path = `/v1/user/subscription_tokens/${enc(String(provider))}/usage`;
@@ -1895,6 +2567,12 @@ var EllipsisUserSubscriptionTokens = class {
1895
2567
  * token is how you stop it routing. A 200 with `ok: false` is the
1896
2568
  * normal way a bad token is reported — it is an answer, not a
1897
2569
  * transport failure.
2570
+ *
2571
+ * Required permissions: write:user.
2572
+ * API key: Requires a CLI user token.
2573
+ * CLI user token: Supported.
2574
+ * Session token: Not supported by session tokens, even with permissions.ellipsis enabled.
2575
+ * Higher permission levels include lower levels: read < write < delete.
1898
2576
  */
1899
2577
  async verify(provider) {
1900
2578
  const path = `/v1/user/subscription_tokens/${enc(String(provider))}/verify`;
@@ -1908,6 +2586,12 @@ var EllipsisUserTokens = class {
1908
2586
  transport;
1909
2587
  /**
1910
2588
  * List User Tokens
2589
+ *
2590
+ * Required permissions: read:user.
2591
+ * API key: Requires a CLI user token.
2592
+ * CLI user token: Supported.
2593
+ * Session token: Not supported by session tokens, even with permissions.ellipsis enabled.
2594
+ * Higher permission levels include lower levels: read < write < delete.
1911
2595
  */
1912
2596
  async list() {
1913
2597
  const path = "/v1/user/tokens";
@@ -1915,6 +2599,12 @@ var EllipsisUserTokens = class {
1915
2599
  }
1916
2600
  /**
1917
2601
  * Revoke User Token
2602
+ *
2603
+ * Required permissions: delete:user.
2604
+ * API key: Requires a CLI user token.
2605
+ * CLI user token: Supported.
2606
+ * Session token: Not supported by session tokens, even with permissions.ellipsis enabled.
2607
+ * Higher permission levels include lower levels: read < write < delete.
1918
2608
  */
1919
2609
  async revoke(token_id) {
1920
2610
  const path = `/v1/user/tokens/${enc(token_id)}`;
@@ -1931,6 +2621,129 @@ var EllipsisUser = class {
1931
2621
  subscriptionTokens;
1932
2622
  tokens;
1933
2623
  };
2624
+ var EllipsisVmExecutions = class {
2625
+ constructor(transport) {
2626
+ this.transport = transport;
2627
+ }
2628
+ transport;
2629
+ /**
2630
+ * Get Single Vm Execution
2631
+ *
2632
+ * Required permissions: read:environments.
2633
+ * API key: Supported.
2634
+ * CLI user token: Supported.
2635
+ * Session token: Requires the ellipsis:api scope and the required grants in the token's permissions.ellipsis configuration. Only the token's own sandbox.
2636
+ * Higher permission levels include lower levels: read < write < delete.
2637
+ */
2638
+ async get(vm_execution_id) {
2639
+ const path = `/v1/vm-executions/${enc(vm_execution_id)}`;
2640
+ return await this.transport.request("GET", path);
2641
+ }
2642
+ /**
2643
+ * Get Vm Executions
2644
+ *
2645
+ * Required permissions: read:environments.
2646
+ * API key: Supported.
2647
+ * CLI user token: Supported.
2648
+ * Session token: Requires the ellipsis:api scope and the required grants in the token's permissions.ellipsis configuration. Only the token's own sandbox.
2649
+ * Higher permission levels include lower levels: read < write < delete.
2650
+ */
2651
+ async list() {
2652
+ const path = "/v1/vm-executions";
2653
+ await this.transport.request("GET", path);
2654
+ }
2655
+ /**
2656
+ * Get Vm Execution Stream Ticket
2657
+ *
2658
+ * Required permissions: read:environments.
2659
+ * API key: Supported.
2660
+ * CLI user token: Supported.
2661
+ * Session token: Requires the ellipsis:api scope and the required grants in the token's permissions.ellipsis configuration. Only the token's own sandbox.
2662
+ * Higher permission levels include lower levels: read < write < delete.
2663
+ */
2664
+ async streamTicket(vm_execution_id) {
2665
+ const path = `/v1/vm-executions/${enc(vm_execution_id)}/stream-ticket`;
2666
+ return await this.transport.request("GET", path);
2667
+ }
2668
+ };
2669
+ var EllipsisVmImages = class {
2670
+ constructor(transport) {
2671
+ this.transport = transport;
2672
+ }
2673
+ transport;
2674
+ /**
2675
+ * Get Vm Image
2676
+ *
2677
+ * Get metadata for a reusable VM image.
2678
+ *
2679
+ * Required permissions: read:environments.
2680
+ * API key: Supported.
2681
+ * CLI user token: Supported.
2682
+ * Session token: Not supported by session tokens, even with permissions.ellipsis enabled.
2683
+ * Higher permission levels include lower levels: read < write < delete.
2684
+ */
2685
+ async get(image_id) {
2686
+ const path = `/v1/vm-images/${enc(image_id)}`;
2687
+ return await this.transport.request("GET", path);
2688
+ }
2689
+ /**
2690
+ * List Vm Images
2691
+ *
2692
+ * List reusable VM images.
2693
+ *
2694
+ * Includes expiration, repository revisions, and build identity.
2695
+ *
2696
+ * Required permissions: read:environments.
2697
+ * API key: Supported.
2698
+ * CLI user token: Supported.
2699
+ * Session token: Not supported by session tokens, even with permissions.ellipsis enabled.
2700
+ * Higher permission levels include lower levels: read < write < delete.
2701
+ */
2702
+ async list(options = {}) {
2703
+ const path = "/v1/vm-images";
2704
+ const query = buildQuery({ limit: options.limit, offset: options.offset });
2705
+ return await this.transport.request("GET", path, { query });
2706
+ }
2707
+ };
2708
+ var EllipsisVms = class {
2709
+ constructor(transport) {
2710
+ this.transport = transport;
2711
+ }
2712
+ transport;
2713
+ /**
2714
+ * Get Vm
2715
+ *
2716
+ * Get a VM and its most recent execution.
2717
+ *
2718
+ * Required permissions: read:environments.
2719
+ * API key: Supported.
2720
+ * CLI user token: Supported.
2721
+ * Session token: Requires the ellipsis:api scope and the required grants in the token's permissions.ellipsis configuration. Only the token's own VM.
2722
+ * Higher permission levels include lower levels: read < write < delete.
2723
+ */
2724
+ async get(vm_id) {
2725
+ const path = `/v1/vms/${enc(vm_id)}`;
2726
+ return await this.transport.request("GET", path);
2727
+ }
2728
+ /**
2729
+ * List Vms
2730
+ *
2731
+ * List VMs and their last recorded state.
2732
+ *
2733
+ * Each machine appears once, including paused and deleted VMs, newest execution first.
2734
+ *
2735
+ * Required permissions: read:environments.
2736
+ * API key: Supported.
2737
+ * CLI user token: Supported.
2738
+ * Session token: Requires the ellipsis:api scope and the required grants in the token's permissions.ellipsis configuration. Only the token's own VM.
2739
+ * Higher permission levels include lower levels: read < write < delete.
2740
+ */
2741
+ async list(options = {}) {
2742
+ const path = "/v1/vms";
2743
+ const query = buildQuery({ limit: options.limit, offset: options.offset });
2744
+ return await this.transport.request("GET", path, { query });
2745
+ }
2746
+ };
1934
2747
  var EllipsisWebhooksDeliveries = class {
1935
2748
  constructor(transport) {
1936
2749
  this.transport = transport;
@@ -1943,6 +2756,12 @@ var EllipsisWebhooksDeliveries = class {
1943
2756
  *
1944
2757
  * Payloads are immutable across retries. Attempt details include HTTP
1945
2758
  * status, timing, and errors. Response bodies are not retained.
2759
+ *
2760
+ * Required permissions: read:webhooks.
2761
+ * API key: Supported.
2762
+ * CLI user token: Supported.
2763
+ * Session token: Not supported by session tokens, even with permissions.ellipsis enabled.
2764
+ * Higher permission levels include lower levels: read < write < delete.
1946
2765
  */
1947
2766
  async get(delivery_id) {
1948
2767
  const path = `/v1/webhooks/deliveries/${enc(delivery_id)}`;
@@ -1955,6 +2774,12 @@ var EllipsisWebhooksDeliveries = class {
1955
2774
  *
1956
2775
  * Includes verification pings and deliveries for deleted webhooks.
1957
2776
  * History is retained for 30 days. Retries belong to the same delivery.
2777
+ *
2778
+ * Required permissions: read:webhooks.
2779
+ * API key: Supported.
2780
+ * CLI user token: Supported.
2781
+ * Session token: Not supported by session tokens, even with permissions.ellipsis enabled.
2782
+ * Higher permission levels include lower levels: read < write < delete.
1958
2783
  */
1959
2784
  async list(options = {}) {
1960
2785
  const path = "/v1/webhooks/deliveries";
@@ -1980,9 +2805,15 @@ var EllipsisWebhooks = class {
1980
2805
  * Create a webhook and send a verification ping.
1981
2806
  *
1982
2807
  * Save the signing secret from this response; it is returned once.
1983
- * Accounts can have three webhooks, including unverified and pending
1984
- * ones. A ping returning HTTP 200 moves unverified to pending. Contact
2808
+ * Accounts default to three webhook slots, including unverified and
2809
+ * pending ones; your account may have a custom allowance. A ping returning HTTP 200 moves unverified to pending. Contact
1985
2810
  * Ellipsis to activate it and receive session.create events.
2811
+ *
2812
+ * Required permissions: write:webhooks.
2813
+ * API key: Supported.
2814
+ * CLI user token: Supported.
2815
+ * Session token: Not supported by session tokens, even with permissions.ellipsis enabled.
2816
+ * Higher permission levels include lower levels: read < write < delete.
1986
2817
  */
1987
2818
  async create(options) {
1988
2819
  const path = "/v1/webhooks";
@@ -1995,7 +2826,13 @@ var EllipsisWebhooks = class {
1995
2826
  * Delete a webhook and cancel outstanding deliveries.
1996
2827
  *
1997
2828
  * An HTTP request already in flight may finish. Delivery history remains
1998
- * available for 30 days. Deletion frees one of the account's three slots.
2829
+ * available for 30 days. Deletion frees a webhook slot.
2830
+ *
2831
+ * Required permissions: delete:webhooks.
2832
+ * API key: Supported.
2833
+ * CLI user token: Supported.
2834
+ * Session token: Not supported by session tokens, even with permissions.ellipsis enabled.
2835
+ * Higher permission levels include lower levels: read < write < delete.
1999
2836
  */
2000
2837
  async delete(webhook_id) {
2001
2838
  const path = `/v1/webhooks/${enc(webhook_id)}`;
@@ -2005,6 +2842,12 @@ var EllipsisWebhooks = class {
2005
2842
  * Get Webhook
2006
2843
  *
2007
2844
  * Get a webhook's configuration and approval state.
2845
+ *
2846
+ * Required permissions: read:webhooks.
2847
+ * API key: Supported.
2848
+ * CLI user token: Supported.
2849
+ * Session token: Not supported by session tokens, even with permissions.ellipsis enabled.
2850
+ * Higher permission levels include lower levels: read < write < delete.
2008
2851
  */
2009
2852
  async get(webhook_id) {
2010
2853
  const path = `/v1/webhooks/${enc(webhook_id)}`;
@@ -2014,6 +2857,12 @@ var EllipsisWebhooks = class {
2014
2857
  * List Webhooks
2015
2858
  *
2016
2859
  * List your webhooks and their delivery summaries.
2860
+ *
2861
+ * Required permissions: read:webhooks.
2862
+ * API key: Supported.
2863
+ * CLI user token: Supported.
2864
+ * Session token: Not supported by session tokens, even with permissions.ellipsis enabled.
2865
+ * Higher permission levels include lower levels: read < write < delete.
2017
2866
  */
2018
2867
  async list() {
2019
2868
  const path = "/v1/webhooks";
@@ -2025,8 +2874,15 @@ var EllipsisWebhooks = class {
2025
2874
  * Send a signed verification or test ping.
2026
2875
  *
2027
2876
  * Available in every state. Only HTTP 200 verifies a destination;
2028
- * successful pings never activate it. At most five pings per account
2029
- * per minute, including pings from creation and URL changes.
2877
+ * successful pings never activate it. The default limit is five pings per
2878
+ * account per minute, including creation and URL changes. Custom
2879
+ * account allowances apply.
2880
+ *
2881
+ * Required permissions: write:webhooks.
2882
+ * API key: Supported.
2883
+ * CLI user token: Supported.
2884
+ * Session token: Not supported by session tokens, even with permissions.ellipsis enabled.
2885
+ * Higher permission levels include lower levels: read < write < delete.
2030
2886
  */
2031
2887
  async ping(webhook_id) {
2032
2888
  const path = `/v1/webhooks/${enc(webhook_id)}/ping`;
@@ -2040,6 +2896,12 @@ var EllipsisWebhooks = class {
2040
2896
  * Changing the URL cancels outstanding deliveries, clears verification
2041
2897
  * and approval, and sends another ping. State and signing secret cannot
2042
2898
  * be set here. Updating description or subscriptions preserves approval.
2899
+ *
2900
+ * Required permissions: write:webhooks.
2901
+ * API key: Supported.
2902
+ * CLI user token: Supported.
2903
+ * Session token: Not supported by session tokens, even with permissions.ellipsis enabled.
2904
+ * Higher permission levels include lower levels: read < write < delete.
2043
2905
  */
2044
2906
  async update(webhook_id, options) {
2045
2907
  const path = `/v1/webhooks/${enc(webhook_id)}`;
@@ -2050,46 +2912,56 @@ var EllipsisWebhooks = class {
2050
2912
  var Ellipsis = class {
2051
2913
  transport;
2052
2914
  account;
2915
+ agents;
2053
2916
  alerts;
2054
2917
  analytics;
2055
2918
  auth;
2056
- automations;
2057
2919
  environments;
2058
- files;
2920
+ handlers;
2059
2921
  integrations;
2060
2922
  memories;
2061
2923
  reviews;
2062
- sandboxes;
2063
2924
  secrets;
2064
2925
  sessions;
2065
2926
  support;
2066
2927
  templates;
2067
2928
  user;
2929
+ vmExecutions;
2930
+ vmImages;
2931
+ vms;
2068
2932
  webhooks;
2069
2933
  constructor(options) {
2070
2934
  this.transport = new Transport(options);
2071
2935
  this.account = new EllipsisAccount(this.transport);
2936
+ this.agents = new EllipsisAgents(this.transport);
2072
2937
  this.alerts = new EllipsisAlerts(this.transport);
2073
2938
  this.analytics = new EllipsisAnalytics(this.transport);
2074
2939
  this.auth = new EllipsisAuth(this.transport);
2075
- this.automations = new EllipsisAutomations(this.transport);
2076
2940
  this.environments = new EllipsisEnvironments(this.transport);
2077
- this.files = new EllipsisFiles(this.transport);
2941
+ this.handlers = new EllipsisHandlers(this.transport);
2078
2942
  this.integrations = new EllipsisIntegrations(this.transport);
2079
2943
  this.memories = new EllipsisMemories(this.transport);
2080
2944
  this.reviews = new EllipsisReviews(this.transport);
2081
- this.sandboxes = new EllipsisSandboxes(this.transport);
2082
2945
  this.secrets = new EllipsisSecrets(this.transport);
2083
2946
  this.sessions = new EllipsisSessions(this.transport);
2084
2947
  this.support = new EllipsisSupport(this.transport);
2085
2948
  this.templates = new EllipsisTemplates(this.transport);
2086
2949
  this.user = new EllipsisUser(this.transport);
2950
+ this.vmExecutions = new EllipsisVmExecutions(this.transport);
2951
+ this.vmImages = new EllipsisVmImages(this.transport);
2952
+ this.vms = new EllipsisVms(this.transport);
2087
2953
  this.webhooks = new EllipsisWebhooks(this.transport);
2088
2954
  }
2089
2955
  /**
2090
2956
  * Current Identity
2091
2957
  *
2092
2958
  * Return the identity behind the caller's credential.
2959
+ *
2960
+ * Required permissions: read:account.
2961
+ * API key: Supported.
2962
+ * CLI user token: Supported.
2963
+ * Session token: Requires the ellipsis:api scope and the required grants in the token's permissions.ellipsis configuration.
2964
+ * Higher permission levels include lower levels: read < write < delete.
2093
2965
  */
2094
2966
  async identity() {
2095
2967
  const path = "/v1/identity";
@@ -2109,9 +2981,8 @@ export {
2109
2981
  RateLimitError,
2110
2982
  ServerError,
2111
2983
  SessionHandle,
2112
- TERMINAL_STATUSES,
2113
2984
  Transport,
2114
2985
  TransportError,
2115
2986
  UnprocessableError,
2116
- isSettled
2987
+ isTurnFinal
2117
2988
  };