@empiricalrun/playwright-utils 0.60.4 โ†’ 0.61.1

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.
@@ -1149,7 +1149,7 @@ export interface paths {
1149
1149
  put?: never;
1150
1150
  /**
1151
1151
  * ๐Ÿค– Post a Slack message
1152
- * @description Posts Markdown to a Slack channel/thread, or a recipient-addressed DM, as the Empirical bot. Provide exactly one of channel, slack_user_id, or user_id. Recipient sends create a new DM root and require idempotency_key. Channel sends use the channel and root timestamp coordinates the agent was given. Sandbox-delegated principals only; the channel must be one the calling project can reach. Registered-root replies are recorded and de-duplicated by idempotency key for the sending session. New roots are registered and bound to the sending session after posting; if delivery or registration is uncertain, check Slack before retrying.
1152
+ * @description Posts Markdown to a Slack channel/thread, or a recipient-addressed DM, as the Empirical bot. Provide exactly one of channel, slack_user_id, or user_id. Recipient sends create a new DM root and require idempotency_key. Channel-wide mentions (<!channel>, <!here>, <!everyone>) are rejected; tag a subteam or users instead. Channel sends use the channel and root timestamp coordinates the agent was given. Sandbox-delegated principals only; the channel must be one the calling project can reach. Registered-root replies are recorded and de-duplicated by idempotency key for the sending session. New roots are registered and bound to the sending session after posting; if delivery or registration is uncertain, check Slack before retrying.
1153
1153
  */
1154
1154
  post: operations["slackSendMessage"];
1155
1155
  delete?: never;
@@ -1965,6 +1965,86 @@ export interface paths {
1965
1965
  patch: operations["updateApiKey"];
1966
1966
  trace?: never;
1967
1967
  };
1968
+ "/api/billing/month-summary": {
1969
+ parameters: {
1970
+ query?: never;
1971
+ header?: never;
1972
+ path?: never;
1973
+ cookie?: never;
1974
+ };
1975
+ /**
1976
+ * ๐Ÿ›ก๏ธ Get the org's usage and cost for a month
1977
+ * @description Org-wide usage across all of the scoped project's org projects, against the plan in effect: per-meter usage, overage so far, a month-end projection, and the usage limit.
1978
+ */
1979
+ get: operations["getBillingMonthSummary"];
1980
+ put?: never;
1981
+ post?: never;
1982
+ delete?: never;
1983
+ options?: never;
1984
+ head?: never;
1985
+ patch?: never;
1986
+ trace?: never;
1987
+ };
1988
+ "/api/billing/subscription/checkout": {
1989
+ parameters: {
1990
+ query?: never;
1991
+ header?: never;
1992
+ path?: never;
1993
+ cookie?: never;
1994
+ };
1995
+ get?: never;
1996
+ put?: never;
1997
+ /**
1998
+ * ๐Ÿ›ก๏ธ ๐Ÿงช Start a Dodo checkout for the org's plan
1999
+ * @description Creates a Dodo hosted checkout that subscribes the scoped project's org to the current Dodo plan (the newest active shared plan with a Dodo product). For orgs without a plan that are not billed in INR. The plan takes effect when Dodo confirms the subscription by webhook.
2000
+ */
2001
+ post: operations["createSubscriptionCheckout"];
2002
+ delete?: never;
2003
+ options?: never;
2004
+ head?: never;
2005
+ patch?: never;
2006
+ trace?: never;
2007
+ };
2008
+ "/api/billing/usage-limit": {
2009
+ parameters: {
2010
+ query?: never;
2011
+ header?: never;
2012
+ path?: never;
2013
+ cookie?: never;
2014
+ };
2015
+ get?: never;
2016
+ /**
2017
+ * ๐Ÿ›ก๏ธ Set or remove the org's usage limit
2018
+ * @description Sets the most overage the org allows per usage month, in whole dollars as cents, or removes the limit with null. Takes effect right away: a limit at or below this month's overage pauses new work.
2019
+ */
2020
+ put: operations["setUsageLimit"];
2021
+ post?: never;
2022
+ delete?: never;
2023
+ options?: never;
2024
+ head?: never;
2025
+ patch?: never;
2026
+ trace?: never;
2027
+ };
2028
+ "/api/billing/usage-limit/events": {
2029
+ parameters: {
2030
+ query?: never;
2031
+ header?: never;
2032
+ path?: never;
2033
+ cookie?: never;
2034
+ };
2035
+ /**
2036
+ * ๐Ÿ›ก๏ธ List the usage limit's history
2037
+ * @description Changes to the org's usage limit and the alerts and blocks it caused, newest first.
2038
+ */
2039
+ get: operations["listUsageLimitEvents"];
2040
+ put?: never;
2041
+ post?: never;
2042
+ delete?: never;
2043
+ options?: never;
2044
+ head?: never;
2045
+ patch?: never;
2046
+ trace?: never;
2047
+ };
1968
2048
  "/api/chat-sessions": {
1969
2049
  parameters: {
1970
2050
  query?: never;
@@ -2478,7 +2558,7 @@ export interface paths {
2478
2558
  put?: never;
2479
2559
  /**
2480
2560
  * Dodo Payments webhook
2481
- * @description Receives Dodo Payments events directly from Dodo (verified by the Standard Webhooks signature). payment.succeeded events carrying an invoice_id in metadata mirror the payment onto the invoice; everything else is acked and ignored.
2561
+ * @description Receives signature-verified Dodo events. subscription.* events re-fetch the subscription from Dodo and mirror it, with the org's plan assignment. Other events are acknowledged and ignored.
2482
2562
  */
2483
2563
  post: operations["dodoPaymentsWebhook"];
2484
2564
  delete?: never;
@@ -3314,7 +3394,7 @@ export interface paths {
3314
3394
  put?: never;
3315
3395
  /**
3316
3396
  * ๐Ÿ›ก๏ธ Create an invoice
3317
- * @description Creates a new invoice for an existing organisation.
3397
+ * @description Creates a new invoice for an existing organisation. Refused for an org with a live Dodo subscription, which Dodo bills instead.
3318
3398
  */
3319
3399
  post: operations["createInvoice"];
3320
3400
  delete?: never;
@@ -3342,7 +3422,7 @@ export interface paths {
3342
3422
  head?: never;
3343
3423
  /**
3344
3424
  * ๐Ÿ›ก๏ธ Update an invoice
3345
- * @description Updates fields on an existing invoice.
3425
+ * @description Updates fields on an existing invoice. Moving it to an org with a live Dodo subscription is refused.
3346
3426
  */
3347
3427
  patch: operations["updateInvoice"];
3348
3428
  trace?: never;
@@ -3371,6 +3451,26 @@ export interface paths {
3371
3451
  patch?: never;
3372
3452
  trace?: never;
3373
3453
  };
3454
+ "/api/invoices/{id}/email-preview": {
3455
+ parameters: {
3456
+ query?: never;
3457
+ header?: never;
3458
+ path?: never;
3459
+ cookie?: never;
3460
+ };
3461
+ /**
3462
+ * ๐Ÿ›ก๏ธ Preview an invoice email
3463
+ * @description Renders the invoice email exactly as `POST /{id}/send` would send it, without sending anything.
3464
+ */
3465
+ get: operations["previewInvoiceEmail"];
3466
+ put?: never;
3467
+ post?: never;
3468
+ delete?: never;
3469
+ options?: never;
3470
+ head?: never;
3471
+ patch?: never;
3472
+ trace?: never;
3473
+ };
3374
3474
  "/api/invoices/{id}/generate": {
3375
3475
  parameters: {
3376
3476
  query?: never;
@@ -3462,7 +3562,7 @@ export interface paths {
3462
3562
  put?: never;
3463
3563
  /**
3464
3564
  * ๐Ÿ›ก๏ธ Send an invoice
3465
- * @description Emails the invoice PDF to the organisation's billing contacts and marks it as sent (unless `is_test_email` is set).
3565
+ * @description Emails the invoice PDF to the organisation's billing contacts and marks it as sent (unless `is_test_email` is set). On a real send, an unpaid INR invoice without a payment link gets a Razorpay-hosted payment link, stored on the invoice and included in the email. Refused for an org with a live Dodo subscription, which Dodo bills instead.
3466
3566
  */
3467
3567
  post: operations["sendInvoice"];
3468
3568
  delete?: never;
@@ -3491,26 +3591,6 @@ export interface paths {
3491
3591
  patch?: never;
3492
3592
  trace?: never;
3493
3593
  };
3494
- "/api/invoices/org/{id}/checkout-session": {
3495
- parameters: {
3496
- query?: never;
3497
- header?: never;
3498
- path?: never;
3499
- cookie?: never;
3500
- };
3501
- get?: never;
3502
- put?: never;
3503
- /**
3504
- * ๐Ÿ›ก๏ธ Create a checkout session to pay an invoice
3505
- * @description Creates a single-use Dodo Payments checkout session for the outstanding amount of one of the scoped project's org's sent invoices. Sessions are not stored; a new one is created per attempt. Payment confirmation arrives via the Dodo webhook, not this endpoint.
3506
- */
3507
- post: operations["createInvoiceCheckoutSession"];
3508
- delete?: never;
3509
- options?: never;
3510
- head?: never;
3511
- patch?: never;
3512
- trace?: never;
3513
- };
3514
3594
  "/api/invoices/org/{id}/pdf/download": {
3515
3595
  parameters: {
3516
3596
  query?: never;
@@ -3571,26 +3651,6 @@ export interface paths {
3571
3651
  patch?: never;
3572
3652
  trace?: never;
3573
3653
  };
3574
- "/api/invoices/org/{id}/tax-invoice/download": {
3575
- parameters: {
3576
- query?: never;
3577
- header?: never;
3578
- path?: never;
3579
- cookie?: never;
3580
- };
3581
- /**
3582
- * ๐Ÿ›ก๏ธ Download the tax invoice for a paid invoice
3583
- * @description Streams the payment processor's (Dodo, the merchant of record) tax invoice PDF for the invoice's most recent settling payment.
3584
- */
3585
- get: operations["downloadOrgInvoiceTaxInvoice"];
3586
- put?: never;
3587
- post?: never;
3588
- delete?: never;
3589
- options?: never;
3590
- head?: never;
3591
- patch?: never;
3592
- trace?: never;
3593
- };
3594
3654
  "/api/invoices/reminders/upcoming": {
3595
3655
  parameters: {
3596
3656
  query?: never;
@@ -4272,13 +4332,13 @@ export interface paths {
4272
4332
  };
4273
4333
  /**
4274
4334
  * ๐Ÿ›ก๏ธ List plan assignments
4275
- * @description Returns a paginated list of plan assignments, optionally filtered by organisation and order-form line.
4335
+ * @description Returns a paginated list of plan assignments, optionally filtered by organisation and plan.
4276
4336
  */
4277
4337
  get: operations["listPlanAssignments"];
4278
4338
  put?: never;
4279
4339
  /**
4280
4340
  * ๐Ÿ›ก๏ธ Create a plan assignment
4281
- * @description Creates a plan assignment for an existing organisation.
4341
+ * @description Puts an existing organisation on a plan from `effective_from`.
4282
4342
  */
4283
4343
  post: operations["createPlanAssignment"];
4284
4344
  delete?: never;
@@ -4311,6 +4371,74 @@ export interface paths {
4311
4371
  patch: operations["updatePlanAssignment"];
4312
4372
  trace?: never;
4313
4373
  };
4374
+ "/api/plan-assignments/org": {
4375
+ parameters: {
4376
+ query?: never;
4377
+ header?: never;
4378
+ path?: never;
4379
+ cookie?: never;
4380
+ };
4381
+ /**
4382
+ * ๐Ÿ›ก๏ธ Get the org's plan
4383
+ * @description Returns whether the scoped project's org is on a plan (now, or during `month`), and the plan's terms when it is a shared plan.
4384
+ */
4385
+ get: operations["getOrgPlan"];
4386
+ put?: never;
4387
+ post?: never;
4388
+ delete?: never;
4389
+ options?: never;
4390
+ head?: never;
4391
+ patch?: never;
4392
+ trace?: never;
4393
+ };
4394
+ "/api/plans": {
4395
+ parameters: {
4396
+ query?: never;
4397
+ header?: never;
4398
+ path?: never;
4399
+ cookie?: never;
4400
+ };
4401
+ /**
4402
+ * ๐Ÿ›ก๏ธ List plans
4403
+ * @description Returns the shared plans with their meters, or one organisation's custom plans.
4404
+ */
4405
+ get: operations["listPlans"];
4406
+ put?: never;
4407
+ /**
4408
+ * ๐Ÿ›ก๏ธ Create a shared plan
4409
+ * @description Creates a shared plan and its meters. Plans are immutable once created, apart from `status`: to change a price, create a new plan with a new key and retire the old one. Custom plans are created through order forms.
4410
+ */
4411
+ post: operations["createPlan"];
4412
+ delete?: never;
4413
+ options?: never;
4414
+ head?: never;
4415
+ patch?: never;
4416
+ trace?: never;
4417
+ };
4418
+ "/api/plans/{id}": {
4419
+ parameters: {
4420
+ query?: never;
4421
+ header?: never;
4422
+ path?: never;
4423
+ cookie?: never;
4424
+ };
4425
+ /**
4426
+ * ๐Ÿ›ก๏ธ Get a plan
4427
+ * @description Retrieves a single plan with its meters.
4428
+ */
4429
+ get: operations["getPlanById"];
4430
+ put?: never;
4431
+ post?: never;
4432
+ delete?: never;
4433
+ options?: never;
4434
+ head?: never;
4435
+ /**
4436
+ * ๐Ÿ›ก๏ธ Update a plan's status
4437
+ * @description Sets a plan's `status`. Plans are immutable apart from status: any other field is rejected. Retiring a plan does not touch existing assignments, which stay on it.
4438
+ */
4439
+ patch: operations["updatePlan"];
4440
+ trace?: never;
4441
+ };
4314
4442
  "/api/project-addons": {
4315
4443
  parameters: {
4316
4444
  query?: never;
@@ -5007,31 +5135,27 @@ export interface paths {
5007
5135
  patch?: never;
5008
5136
  trace?: never;
5009
5137
  };
5010
- "/api/runner-backends": {
5138
+ "/api/runner-backends/claim": {
5011
5139
  parameters: {
5012
5140
  query?: never;
5013
5141
  header?: never;
5014
5142
  path?: never;
5015
5143
  cookie?: never;
5016
5144
  };
5017
- /**
5018
- * ๐Ÿ›ก๏ธ ๐Ÿงช List runner backends
5019
- * @description Lists customer-hosted runner backends, optionally for one org.
5020
- */
5021
- get: operations["listRunnerBackends"];
5145
+ get?: never;
5022
5146
  put?: never;
5023
5147
  /**
5024
- * ๐Ÿ›ก๏ธ ๐Ÿงช Register a runner backend
5025
- * @description Registers an installation as `pending` and returns the external ID its role must require. Run `verify` before linking projects.
5148
+ * ๐Ÿงช Call home from an installation's stack
5149
+ * @description Called by the registration Lambda in a Private Runner stack. On Create and Update it records the stack's resources and versions and verifies them; a pending backend that passes becomes active. Delete always succeeds: it releases an unverified claim so the link can be reused, or disables an active backend and moves its projects back to Empirical-hosted runs.
5026
5150
  */
5027
- post: operations["createRunnerBackend"];
5151
+ post: operations["claimRunnerBackend"];
5028
5152
  delete?: never;
5029
5153
  options?: never;
5030
5154
  head?: never;
5031
5155
  patch?: never;
5032
5156
  trace?: never;
5033
5157
  };
5034
- "/api/runner-backends/{id}": {
5158
+ "/api/runner-backends/project": {
5035
5159
  parameters: {
5036
5160
  query?: never;
5037
5161
  header?: never;
@@ -5039,10 +5163,10 @@ export interface paths {
5039
5163
  cookie?: never;
5040
5164
  };
5041
5165
  /**
5042
- * ๐Ÿ›ก๏ธ ๐Ÿงช Get a runner backend
5043
- * @description Returns one runner backend.
5166
+ * ๐Ÿงช Get the scoped project's runner backend
5167
+ * @description Returns the runner backend the scoped project is linked to, including its verification status, or null when the project runs on Empirical-hosted infrastructure.
5044
5168
  */
5045
- get: operations["getRunnerBackend"];
5169
+ get: operations["getProjectRunnerBackend"];
5046
5170
  put?: never;
5047
5171
  post?: never;
5048
5172
  delete?: never;
@@ -5051,7 +5175,31 @@ export interface paths {
5051
5175
  patch?: never;
5052
5176
  trace?: never;
5053
5177
  };
5054
- "/api/runner-backends/{id}/disable": {
5178
+ "/api/runner-backends/project/{id}": {
5179
+ parameters: {
5180
+ query?: never;
5181
+ header?: never;
5182
+ path?: never;
5183
+ cookie?: never;
5184
+ };
5185
+ get?: never;
5186
+ put?: never;
5187
+ post?: never;
5188
+ /**
5189
+ * ๐Ÿงช Remove a private runner
5190
+ * @description Deletes an unfinished setup or a disconnected runner of the scoped project's organisation that no project uses. Its CloudFormation stack, if one exists, stays in the AWS account until deleted there.
5191
+ */
5192
+ delete: operations["removeProjectRunnerBackend"];
5193
+ options?: never;
5194
+ head?: never;
5195
+ /**
5196
+ * ๐Ÿงช Rename a private runner
5197
+ * @description Renames a runner backend of the scoped project's organisation.
5198
+ */
5199
+ patch: operations["renameProjectRunnerBackend"];
5200
+ trace?: never;
5201
+ };
5202
+ "/api/runner-backends/project/{id}/disconnect": {
5055
5203
  parameters: {
5056
5204
  query?: never;
5057
5205
  header?: never;
@@ -5061,17 +5209,17 @@ export interface paths {
5061
5209
  get?: never;
5062
5210
  put?: never;
5063
5211
  /**
5064
- * ๐Ÿ›ก๏ธ ๐Ÿงช Disable a runner backend
5065
- * @description Stops new dispatches to the backend immediately: runs of linked projects fail with `dispatch_failed` until it is verified again or the projects are unlinked.
5212
+ * ๐Ÿงช Disconnect a private runner
5213
+ * @description Stops sending runs to a runner backend of the scoped project's organisation and moves every project on it back to Empirical-hosted runs. The stack stays in the AWS account; delete it there to remove it. Re-enable restores the runner, but not the projects' links.
5066
5214
  */
5067
- post: operations["disableRunnerBackend"];
5215
+ post: operations["disconnectProjectRunnerBackend"];
5068
5216
  delete?: never;
5069
5217
  options?: never;
5070
5218
  head?: never;
5071
5219
  patch?: never;
5072
5220
  trace?: never;
5073
5221
  };
5074
- "/api/runner-backends/{id}/verify": {
5222
+ "/api/runner-backends/project/{id}/enable": {
5075
5223
  parameters: {
5076
5224
  query?: never;
5077
5225
  header?: never;
@@ -5081,28 +5229,48 @@ export interface paths {
5081
5229
  get?: never;
5082
5230
  put?: never;
5083
5231
  /**
5084
- * ๐Ÿ›ก๏ธ ๐Ÿงช Verify a runner backend
5085
- * @description Assumes the backend's role and makes one read-only call to each queue, the cluster and the log group. On success the backend becomes `active`; on failure its status is unchanged. A disabled backend is re-enabled only by a passing verify.
5232
+ * ๐Ÿงช Re-enable a disconnected private runner
5233
+ * @description Verifies a disabled runner backend of the scoped project's organisation and makes it active again if every check passes. Projects are not re-linked.
5086
5234
  */
5087
- post: operations["verifyRunnerBackend"];
5235
+ post: operations["enableProjectRunnerBackend"];
5088
5236
  delete?: never;
5089
5237
  options?: never;
5090
5238
  head?: never;
5091
5239
  patch?: never;
5092
5240
  trace?: never;
5093
5241
  };
5094
- "/api/runner-backends/project": {
5242
+ "/api/runner-backends/project/{id}/registration": {
5095
5243
  parameters: {
5096
5244
  query?: never;
5097
5245
  header?: never;
5098
5246
  path?: never;
5099
5247
  cookie?: never;
5100
5248
  };
5249
+ get?: never;
5250
+ put?: never;
5101
5251
  /**
5102
- * โš™๏ธ ๐Ÿงช Get the scoped project's runner backend
5103
- * @description Returns the runner backend the scoped project is linked to, including its verification status, or null when the project runs on Empirical-hosted infrastructure.
5252
+ * ๐Ÿงช Create a new setup link
5253
+ * @description Mints a new quick-create link for a pending runner backend of the scoped project's organisation, replacing any earlier unused link.
5104
5254
  */
5105
- get: operations["getProjectRunnerBackend"];
5255
+ post: operations["createProjectRunnerBackendRegistration"];
5256
+ delete?: never;
5257
+ options?: never;
5258
+ head?: never;
5259
+ patch?: never;
5260
+ trace?: never;
5261
+ };
5262
+ "/api/runner-backends/project/available": {
5263
+ parameters: {
5264
+ query?: never;
5265
+ header?: never;
5266
+ path?: never;
5267
+ cookie?: never;
5268
+ };
5269
+ /**
5270
+ * ๐Ÿงช List the organisation's runner backends
5271
+ * @description Every runner backend of the scoped project's organisation, in any status, so a project can use one another project set up or resume a setup in progress.
5272
+ */
5273
+ get: operations["listProjectOrgRunnerBackends"];
5106
5274
  put?: never;
5107
5275
  post?: never;
5108
5276
  delete?: never;
@@ -5111,7 +5279,27 @@ export interface paths {
5111
5279
  patch?: never;
5112
5280
  trace?: never;
5113
5281
  };
5114
- "/api/runner-backends/project/verify": {
5282
+ "/api/runner-backends/project/runner-backend": {
5283
+ parameters: {
5284
+ query?: never;
5285
+ header?: never;
5286
+ path?: never;
5287
+ cookie?: never;
5288
+ };
5289
+ get?: never;
5290
+ /**
5291
+ * ๐Ÿงช Choose where the project's runs execute
5292
+ * @description Sends the scoped project's new runs to an active runner backend of its organisation, or back to Empirical-hosted infrastructure with null. Runs already created keep their placement.
5293
+ */
5294
+ put: operations["setScopedProjectRunnerBackend"];
5295
+ post?: never;
5296
+ delete?: never;
5297
+ options?: never;
5298
+ head?: never;
5299
+ patch?: never;
5300
+ trace?: never;
5301
+ };
5302
+ "/api/runner-backends/project/setup": {
5115
5303
  parameters: {
5116
5304
  query?: never;
5117
5305
  header?: never;
@@ -5121,17 +5309,17 @@ export interface paths {
5121
5309
  get?: never;
5122
5310
  put?: never;
5123
5311
  /**
5124
- * โš™๏ธ ๐Ÿงช Re-check the scoped project's runner backend
5125
- * @description Runs the same read-only checks as `verify` against the backend the scoped project is linked to and records the result, so a customer can confirm a fix to their role or stack. It never changes the backend's status: a disabled backend is re-enabled only by Empirical.
5312
+ * ๐Ÿงช Start setting up a private runner
5313
+ * @description Registers a pending runner backend for the scoped project's organisation in the given AWS account and region, or reuses one whose stack hasn't called home yet or was deleted, and returns a quick-create link for it. The stack activates the backend when it is created.
5126
5314
  */
5127
- post: operations["verifyProjectRunnerBackend"];
5315
+ post: operations["setupProjectRunnerBackend"];
5128
5316
  delete?: never;
5129
5317
  options?: never;
5130
5318
  head?: never;
5131
5319
  patch?: never;
5132
5320
  trace?: never;
5133
5321
  };
5134
- "/api/runner-backends/projects/{project_id}": {
5322
+ "/api/runner-backends/project/verify": {
5135
5323
  parameters: {
5136
5324
  query?: never;
5137
5325
  header?: never;
@@ -5139,12 +5327,12 @@ export interface paths {
5139
5327
  cookie?: never;
5140
5328
  };
5141
5329
  get?: never;
5330
+ put?: never;
5142
5331
  /**
5143
- * ๐Ÿ›ก๏ธ ๐Ÿงช Set a project's runner backend
5144
- * @description Links a project to an active backend of its organisation, or back to Empirical-hosted with null. Applies to runs created afterwards; runs already created keep their backend.
5332
+ * ๐Ÿงช Re-check the scoped project's runner backend
5333
+ * @description Assumes the role of the backend the scoped project is linked to, makes one read-only call to each queue, the cluster and the log group, and records the result, so a customer can confirm a fix to their role or stack. It never changes the backend's status; use `enable` for a disabled one.
5145
5334
  */
5146
- put: operations["setProjectRunnerBackend"];
5147
- post?: never;
5335
+ post: operations["verifyProjectRunnerBackend"];
5148
5336
  delete?: never;
5149
5337
  options?: never;
5150
5338
  head?: never;
@@ -5235,47 +5423,45 @@ export interface paths {
5235
5423
  patch?: never;
5236
5424
  trace?: never;
5237
5425
  };
5238
- "/api/test-runs/events": {
5426
+ "/api/system-messages": {
5239
5427
  parameters: {
5240
5428
  query?: never;
5241
5429
  header?: never;
5242
5430
  path?: never;
5243
5431
  cookie?: never;
5244
5432
  };
5245
- get?: never;
5433
+ /** ๐Ÿ›ก๏ธ ๐Ÿงช List system messages with delivery and ack counts */
5434
+ get: operations["listSystemMessages"];
5435
+ put?: never;
5246
5436
  /**
5247
- * โš™๏ธ Ingest a test-case run-end event
5248
- * @description Ingests a per-test-case run-end event from the Playwright reporter (EmpiricalReporter in packages/playwright-utils): processes retries, triggers the failure-diagnosis workflow, and updates realtime test-run counts. Port of the dashboard's PUT /api/test-runs/events.
5437
+ * ๐Ÿ›ก๏ธ ๐Ÿงช Broadcast a system message to manager sessions
5438
+ * @description Persists the message and delivers it to project manager sessions. With `project_ids`, every listed project gets a recipient row, and one without an open manager is recorded as failed. Without it, the message goes to every project with an open manager, and active projects without one are returned in `skipped_project_ids` (not persisted). Delivery is attempted before responding. Managers acknowledge through `POST /api/system-messages/{id}/ack`.
5249
5439
  */
5250
- put: operations["ingestTestCaseRunEndEvent"];
5251
- post?: never;
5440
+ post: operations["createSystemMessage"];
5252
5441
  delete?: never;
5253
5442
  options?: never;
5254
5443
  head?: never;
5255
5444
  patch?: never;
5256
5445
  trace?: never;
5257
5446
  };
5258
- "/api/test-runs/shards": {
5447
+ "/api/system-messages/{id}": {
5259
5448
  parameters: {
5260
5449
  query?: never;
5261
5450
  header?: never;
5262
5451
  path?: never;
5263
5452
  cookie?: never;
5264
5453
  };
5265
- get?: never;
5454
+ /** ๐Ÿ›ก๏ธ ๐Ÿงช Get a system message's per-project delivery and ack status */
5455
+ get: operations["getSystemMessage"];
5266
5456
  put?: never;
5267
- /**
5268
- * โš™๏ธ Update a shard's state
5269
- * @description Records a shard state transition from the test-run worker: shard write plus terminal guard, parent start on first shard start, resume dispatch for interrupted shards, merge orchestration once all shards complete, and parent finalization plus report ingestion when the merge job ends.
5270
- */
5271
- post: operations["updateTestRunShardState"];
5457
+ post?: never;
5272
5458
  delete?: never;
5273
5459
  options?: never;
5274
5460
  head?: never;
5275
5461
  patch?: never;
5276
5462
  trace?: never;
5277
5463
  };
5278
- "/api/twocaptcha/proxy": {
5464
+ "/api/system-messages/{id}/ack": {
5279
5465
  parameters: {
5280
5466
  query?: never;
5281
5467
  header?: never;
@@ -5285,29 +5471,29 @@ export interface paths {
5285
5471
  get?: never;
5286
5472
  put?: never;
5287
5473
  /**
5288
- * โš™๏ธ Proxy a 2Captcha request
5289
- * @description Forwards a request to the 2Captcha API, injecting the configured `clientKey` into the payload.
5474
+ * ๐Ÿงช Acknowledge a system message from a manager session
5475
+ * @description Records the calling manager session's acknowledgement for its project. Any manager session of the project may ack, so a successor can answer a message its predecessor received. Re-acking overwrites the previous status and note.
5290
5476
  */
5291
- post: operations["proxyTwoCaptcha"];
5477
+ post: operations["ackSystemMessage"];
5292
5478
  delete?: never;
5293
5479
  options?: never;
5294
5480
  head?: never;
5295
5481
  patch?: never;
5296
5482
  trace?: never;
5297
5483
  };
5298
- "/api/ui/v1/test-runs/{id}": {
5484
+ "/api/test-runs/events": {
5299
5485
  parameters: {
5300
5486
  query?: never;
5301
5487
  header?: never;
5302
5488
  path?: never;
5303
5489
  cookie?: never;
5304
5490
  };
5491
+ get?: never;
5305
5492
  /**
5306
- * Get test run detail (UI)
5307
- * @description Returns everything the test-run detail page renders in one call: the enriched run, the first page of its cases, the test cases those rows reference, and the resolved created-by / cancelled-by users.
5493
+ * โš™๏ธ Ingest a test-case run-end event
5494
+ * @description Ingests a per-test-case run-end event from the Playwright reporter (EmpiricalReporter in packages/playwright-utils): processes retries, triggers the failure-diagnosis workflow, and updates realtime test-run counts. Port of the dashboard's PUT /api/test-runs/events.
5308
5495
  */
5309
- get: operations["getUiTestRunDetail"];
5310
- put?: never;
5496
+ put: operations["ingestTestCaseRunEndEvent"];
5311
5497
  post?: never;
5312
5498
  delete?: never;
5313
5499
  options?: never;
@@ -5315,7 +5501,67 @@ export interface paths {
5315
5501
  patch?: never;
5316
5502
  trace?: never;
5317
5503
  };
5318
- "/api/ui/v1/test-runs/{id}/live": {
5504
+ "/api/test-runs/shards": {
5505
+ parameters: {
5506
+ query?: never;
5507
+ header?: never;
5508
+ path?: never;
5509
+ cookie?: never;
5510
+ };
5511
+ get?: never;
5512
+ put?: never;
5513
+ /**
5514
+ * โš™๏ธ Update a shard's state
5515
+ * @description Records a shard state transition from the test-run worker: shard write plus terminal guard, parent start on first shard start, resume dispatch for interrupted shards, merge orchestration once all shards complete, and parent finalization plus report ingestion when the merge job ends.
5516
+ */
5517
+ post: operations["updateTestRunShardState"];
5518
+ delete?: never;
5519
+ options?: never;
5520
+ head?: never;
5521
+ patch?: never;
5522
+ trace?: never;
5523
+ };
5524
+ "/api/twocaptcha/proxy": {
5525
+ parameters: {
5526
+ query?: never;
5527
+ header?: never;
5528
+ path?: never;
5529
+ cookie?: never;
5530
+ };
5531
+ get?: never;
5532
+ put?: never;
5533
+ /**
5534
+ * โš™๏ธ Proxy a 2Captcha request
5535
+ * @description Forwards a request to the 2Captcha API, injecting the configured `clientKey` into the payload.
5536
+ */
5537
+ post: operations["proxyTwoCaptcha"];
5538
+ delete?: never;
5539
+ options?: never;
5540
+ head?: never;
5541
+ patch?: never;
5542
+ trace?: never;
5543
+ };
5544
+ "/api/ui/v1/test-runs/{id}": {
5545
+ parameters: {
5546
+ query?: never;
5547
+ header?: never;
5548
+ path?: never;
5549
+ cookie?: never;
5550
+ };
5551
+ /**
5552
+ * Get test run detail (UI)
5553
+ * @description Returns everything the test-run detail page renders in one call: the enriched run, the first page of its cases, the test cases those rows reference, and the resolved created-by / cancelled-by users.
5554
+ */
5555
+ get: operations["getUiTestRunDetail"];
5556
+ put?: never;
5557
+ post?: never;
5558
+ delete?: never;
5559
+ options?: never;
5560
+ head?: never;
5561
+ patch?: never;
5562
+ trace?: never;
5563
+ };
5564
+ "/api/ui/v1/test-runs/{id}/live": {
5319
5565
  parameters: {
5320
5566
  query?: never;
5321
5567
  header?: never;
@@ -5673,15 +5919,13 @@ export interface components {
5673
5919
  paid_at: string | null;
5674
5920
  /** @description Whether the invoice PDF is available. */
5675
5921
  has_pdf: boolean;
5676
- /** @description Whether a payment-processor tax invoice is available for download. */
5677
- has_tax_invoice: boolean;
5678
5922
  /** @description Whether this invoice can be paid online (unpaid and in a supported currency). */
5679
5923
  payable: boolean;
5680
5924
  /**
5681
- * @description Which provider pays this invoice's currency (USD via Dodo checkout sessions, INR via Razorpay Standard Checkout), or null if none does. Drives the Pay button's checkout flow.
5925
+ * @description Which provider pays this invoice's currency (INR via Razorpay Standard Checkout), or null if none does. Drives the Pay button's checkout flow.
5682
5926
  * @enum {string|null}
5683
5927
  */
5684
- payment_provider: "dodo" | "razorpay" | null;
5928
+ payment_provider: "razorpay" | null;
5685
5929
  /** @description Whether an unpaid invoice is past its due date plus the reminder grace period. Always false for paid invoices. */
5686
5930
  past_reminder_date: boolean;
5687
5931
  };
@@ -5694,22 +5938,6 @@ export interface components {
5694
5938
  message: string;
5695
5939
  };
5696
5940
  };
5697
- InvoiceCheckoutSessionResponse: {
5698
- /** @description Response payload. */
5699
- data: {
5700
- /** @description Single-use hosted checkout URL (expires in 24h). */
5701
- checkout_url: string;
5702
- /** @description Dodo checkout session ID. */
5703
- session_id: string;
5704
- };
5705
- };
5706
- CreateInvoiceCheckoutSessionRequest: {
5707
- /**
5708
- * Format: uri
5709
- * @description Dashboard URL Dodo redirects to after payment (gets payment_id and status query params appended).
5710
- */
5711
- return_url: string;
5712
- };
5713
5941
  InvoiceRazorpayOrderResponse: {
5714
5942
  /** @description Response payload. */
5715
5943
  data: {
@@ -5899,8 +6127,8 @@ export interface components {
5899
6127
  fx_rate: number | null;
5900
6128
  /** @description Billing line kind (`tier` or `addon`). */
5901
6129
  kind: string;
5902
- /** @description Originating order-form line ID, if any. */
5903
- order_form_line_id: number | null;
6130
+ /** @description Plan this charge was billed from, if any. */
6131
+ plan_id: number | null;
5904
6132
  /** @description Tier name, if applicable. */
5905
6133
  tier: string | null;
5906
6134
  /** @description Display label. */
@@ -5937,7 +6165,7 @@ export interface components {
5937
6165
  /** @enum {string} */
5938
6166
  kind?: "tier" | "addon";
5939
6167
  project_id?: number | null;
5940
- order_form_line_id?: number | null;
6168
+ plan_id?: number | null;
5941
6169
  tier?: string | null;
5942
6170
  label?: string | null;
5943
6171
  base_price_cents: number;
@@ -6102,7 +6330,8 @@ export interface components {
6102
6330
  label?: string | null;
6103
6331
  base_price_cents: number;
6104
6332
  meters?: {
6105
- meter: string;
6333
+ /** @enum {string} */
6334
+ meter: "test_suite_size" | "ai_credits" | "test_minutes" | "test_run_duration";
6106
6335
  included_qty?: number | null;
6107
6336
  overage_price_cents?: number | null;
6108
6337
  }[];
@@ -6128,7 +6357,8 @@ export interface components {
6128
6357
  label?: string | null;
6129
6358
  base_price_cents: number;
6130
6359
  meters?: {
6131
- meter: string;
6360
+ /** @enum {string} */
6361
+ meter: "test_suite_size" | "ai_credits" | "test_minutes" | "test_run_duration";
6132
6362
  included_qty?: number | null;
6133
6363
  overage_price_cents?: number | null;
6134
6364
  }[];
@@ -6137,6 +6367,31 @@ export interface components {
6137
6367
  OrderFormPdfUploadRequest: {
6138
6368
  pdf_base64: string;
6139
6369
  };
6370
+ OrgPlanResponse: {
6371
+ /** @description Response payload. */
6372
+ data: {
6373
+ /** @description Whether the org has a plan assignment in effect now. */
6374
+ has_plan: boolean;
6375
+ /** @description The shared plan in effect, or null when the org has no plan or is on a custom plan. */
6376
+ plan: {
6377
+ /** @description Plan name, e.g. `Managed`. */
6378
+ name: string;
6379
+ /** @description Currency of the prices below, e.g. `usd`. */
6380
+ currency: string;
6381
+ /** @description Monthly base price in cents of `currency`. */
6382
+ base_price_cents: number;
6383
+ /** @description Metered allowances and overage rates. */
6384
+ meters: {
6385
+ /** @description Meter key, e.g. `ai_credits` or `test_minutes`. */
6386
+ meter: string;
6387
+ /** @description Units included each month. */
6388
+ included_qty: number | null;
6389
+ /** @description Price per unit above the allowance, in cents of `currency`; may be fractional. */
6390
+ overage_price_cents: number | null;
6391
+ }[];
6392
+ } | null;
6393
+ };
6394
+ };
6140
6395
  PlanAssignmentListResponse: {
6141
6396
  /** @description The page of plan assignments. */
6142
6397
  data: {
@@ -6149,18 +6404,14 @@ export interface components {
6149
6404
  id: number;
6150
6405
  /** @description Organisation this assignment belongs to. */
6151
6406
  org_id: number;
6152
- /** @description Order form line that backs this assignment. */
6153
- order_form_line_id: number;
6407
+ /** @description Plan the organisation is on. */
6408
+ plan_id: number;
6154
6409
  /** @description ISO-8601 timestamp the assignment starts. */
6155
6410
  effective_from: string;
6156
6411
  /** @description ISO-8601 timestamp the assignment ends, or null for open-ended. */
6157
6412
  effective_to: string | null;
6158
6413
  /** @description Origin: `order_form`, `derived_from_invoice`, or `manual`. */
6159
6414
  source: string;
6160
- /** @description Whether the assignment is pinned. */
6161
- pinned: boolean;
6162
- /** @description Arbitrary JSON overrides for the plan, or null. */
6163
- custom_overrides?: unknown;
6164
6415
  /** @description ISO-8601 creation timestamp. */
6165
6416
  created_at: string;
6166
6417
  /** @description ISO-8601 last-update timestamp. */
@@ -6179,8 +6430,8 @@ export interface components {
6179
6430
  CreatePlanAssignmentRequest: {
6180
6431
  /** @description Organisation this plan assignment belongs to. */
6181
6432
  org_id: number;
6182
- /** @description Order form line that backs this assignment. */
6183
- order_form_line_id: number;
6433
+ /** @description Plan the organisation is on. */
6434
+ plan_id: number;
6184
6435
  /**
6185
6436
  * Format: date-time
6186
6437
  * @description When the assignment starts being effective (timestamptz).
@@ -6196,16 +6447,12 @@ export interface components {
6196
6447
  * @enum {string}
6197
6448
  */
6198
6449
  source?: "order_form" | "derived_from_invoice" | "manual";
6199
- /** @description Whether the assignment is pinned. Defaults false. */
6200
- pinned?: boolean;
6201
- /** @description Arbitrary JSON overrides for the plan. */
6202
- custom_overrides?: unknown;
6203
6450
  };
6204
6451
  UpdatePlanAssignmentRequest: {
6205
6452
  /** @description Organisation this plan assignment belongs to. */
6206
6453
  org_id?: number;
6207
- /** @description Order form line that backs this assignment. */
6208
- order_form_line_id?: number;
6454
+ /** @description Plan the organisation is on. */
6455
+ plan_id?: number;
6209
6456
  /**
6210
6457
  * Format: date-time
6211
6458
  * @description When the assignment starts being effective (timestamptz).
@@ -6221,106 +6468,255 @@ export interface components {
6221
6468
  * @enum {string}
6222
6469
  */
6223
6470
  source?: "order_form" | "derived_from_invoice" | "manual";
6224
- /** @description Whether the assignment is pinned. */
6225
- pinned?: boolean;
6226
- /** @description Arbitrary JSON overrides for the plan. */
6227
- custom_overrides?: unknown;
6228
6471
  };
6229
- RunnerBackendListResponse: {
6472
+ PlanListResponse: {
6230
6473
  /** @description Response payload. */
6231
6474
  data: {
6232
- runner_backends: components["schemas"]["RunnerBackend"][];
6475
+ plans: components["schemas"]["Plan"][];
6233
6476
  };
6234
6477
  };
6235
- RunnerBackend: {
6236
- /** @description Runner backend ID. */
6478
+ Plan: {
6479
+ /** @description Plan ID. */
6237
6480
  id: number;
6238
- /** @description Organisation that owns the installation. */
6239
- org_id: number;
6240
- /** @description Human-readable name. */
6481
+ /** @description Organisation a custom plan belongs to; null for a shared plan. */
6482
+ org_id: number | null;
6483
+ /** @description Order form a custom plan comes from, if any. */
6484
+ order_form_id: number | null;
6485
+ /** @description `tier` or `addon`. */
6486
+ kind: string;
6487
+ /** @description Stable unique key of a shared plan, e.g. `managed`. */
6488
+ key: string | null;
6489
+ /** @description Display name, e.g. `Managed`, `Starter`. */
6490
+ name: string | null;
6491
+ /** @description Currency the plan is priced in, e.g. `usd`. */
6492
+ currency: string;
6493
+ /** @description Monthly base price in cents of `currency`. */
6494
+ base_price_cents: number;
6495
+ /** @description `active` or `retired`. Retired plans keep existing assignments. */
6496
+ status: string;
6497
+ /** @description Dodo product that bills this plan by subscription; null when it isn't sold through Dodo. */
6498
+ dodo_product_id: string | null;
6499
+ /** @description ISO-8601 creation timestamp. */
6500
+ created_at: string;
6501
+ /** @description Metered allowances and overage rates. */
6502
+ meters: components["schemas"]["PlanMeter"][];
6503
+ };
6504
+ PlanMeter: {
6505
+ /** @description Plan meter ID. */
6506
+ id: number;
6507
+ /** @description Plan this meter belongs to. */
6508
+ plan_id: number;
6509
+ /** @description Meter key, e.g. `ai_credits` or `test_minutes`. */
6510
+ meter: string;
6511
+ /** @description Units included in the base price each month. */
6512
+ included_qty: number | null;
6513
+ /** @description Price per unit above the included quantity, in cents of the plan currency. May be fractional (0.5 = $0.005). Null means usage above the allowance is not billed. */
6514
+ overage_price_cents: number | null;
6515
+ /** @description Display order. */
6516
+ sort_order: number;
6517
+ };
6518
+ PlanResponse: {
6519
+ /** @description Response payload. */
6520
+ data: {
6521
+ plan: components["schemas"]["Plan"];
6522
+ };
6523
+ };
6524
+ CreatePlanRequest: {
6525
+ /** @description Stable unique key, e.g. `managed`. */
6526
+ key: string;
6527
+ /** @description Display name. */
6241
6528
  name: string;
6242
- /** @description AWS account the installation runs in. */
6243
- aws_account_id: string;
6244
- /** @description AWS region of the installation. */
6245
- region: string;
6246
- /** @description Role api-worker assumes to drive the plane. */
6247
- role_arn: string;
6248
- /** @description External ID the role's trust policy must require. Give it only to this installation's owner. */
6249
- external_id: string;
6250
- /** @description ECS cluster name. */
6251
- cluster_name: string;
6252
- /** @description CloudWatch log group of the worker. */
6253
- log_group_name: string;
6254
- /** @description Worker container name. */
6255
- container_name: string;
6256
- /** @description Job queue URLs are `${queue_prefix}-${machineSize}`. */
6257
- queue_prefix: string;
6258
6529
  /**
6259
- * @description `pending` until verified; only `active` backends receive runs.
6530
+ * @description Currency the plan is priced in. Defaults to `usd`.
6260
6531
  * @enum {string}
6261
6532
  */
6262
- status: "pending" | "active" | "disabled";
6263
- /** @description ISO-8601 time of the last successful verify. */
6264
- last_verified_at: string | null;
6265
- /** @description ISO-8601 time of the last verify, manual or scheduled, whatever its outcome. */
6266
- last_checked_at: string | null;
6267
- /** @description Outcome of the last verify; null if never run. */
6268
- last_check_ok: boolean | null;
6269
- /** @description Every check from the last verify. */
6270
- last_check_results: components["schemas"]["RunnerBackendCheck"][] | null;
6271
- /** @description ISO-8601 start of the current run of failed checks; null while passing. A failing check does not change `status`. */
6272
- check_failing_since: string | null;
6273
- /** @description ISO-8601 creation time. */
6274
- created_at: string;
6275
- /** @description ISO-8601 last-update time. */
6276
- updated_at: string;
6533
+ currency?: "usd" | "inr" | "aed";
6534
+ /** @description Monthly base price in cents of `currency`. */
6535
+ base_price_cents: number;
6536
+ /** @description Dodo product that bills this plan by subscription, in this environment's Dodo mode. New Dodo checkouts use the newest active plan that has one. */
6537
+ dodo_product_id?: string;
6538
+ /**
6539
+ * @description Metered allowances, in display order.
6540
+ * @default []
6541
+ */
6542
+ meters: {
6543
+ /**
6544
+ * @description Meter key from the meter registry. Its unit applies to both `included_qty` and `overage_price_cents`.
6545
+ * @enum {string}
6546
+ */
6547
+ meter: "test_suite_size" | "ai_credits" | "test_minutes" | "test_run_duration";
6548
+ /** @description Units included each month. */
6549
+ included_qty?: number | null;
6550
+ /** @description Price per unit above the allowance, in cents; may be fractional. */
6551
+ overage_price_cents?: number | null;
6552
+ }[];
6277
6553
  };
6278
- RunnerBackendCheck: {
6279
- /** @description `assume_role`, `job_queue`, `scaler_trigger_queue`, `ecs_cluster`, `ecs_tasks` or `worker_logs`. */
6280
- name: string;
6281
- /** @description Whether the check passed. */
6282
- ok: boolean;
6283
- /** @description The resource checked, or the AWS error. */
6284
- detail: string;
6554
+ UpdatePlanRequest: {
6555
+ /**
6556
+ * @description `retired` hides the plan from new sales; existing assignments keep it.
6557
+ * @enum {string}
6558
+ */
6559
+ status: "active" | "retired";
6285
6560
  };
6286
- RunnerBackendResponse: {
6561
+ BillingMonthSummaryResponse: {
6287
6562
  /** @description Response payload. */
6288
6563
  data: {
6289
- runner_backend: components["schemas"]["RunnerBackend"];
6564
+ /** @description Usage month, YYYY-MM (UTC). */
6565
+ month: string;
6566
+ period_start: string;
6567
+ /** @description Exclusive (ISO 8601). */
6568
+ period_end: string;
6569
+ is_current_month: boolean;
6570
+ /** @description The shared plan in effect; null for no plan or a custom contract. */
6571
+ plan: {
6572
+ name: string;
6573
+ currency: string;
6574
+ base_price_cents: number;
6575
+ } | null;
6576
+ meters: components["schemas"]["BillingMeterSummary"][];
6577
+ projects: {
6578
+ project_id: number;
6579
+ name: string;
6580
+ slug: string;
6581
+ ai_credits: number;
6582
+ test_minutes: number;
6583
+ }[];
6584
+ overage_cents: number;
6585
+ projected_overage_cents: number | null;
6586
+ /** @description Overage of the previous usage month, as a guide when picking a limit. Current month only. */
6587
+ last_month_overage_cents: number | null;
6588
+ usage_limit: components["schemas"]["UsageLimit"];
6290
6589
  };
6291
6590
  };
6292
- CreateRunnerBackendBody: {
6293
- /** @description Owning organisation. */
6294
- org_id: number;
6295
- /** @description Human-readable name. */
6296
- name: string;
6297
- /** @description 12-digit AWS account ID. */
6298
- aws_account_id: string;
6299
- /** @description AWS region, e.g. `us-east-1`. */
6300
- region: string;
6301
- /** @description ARN of a role named `empirical-private-runner-*` in `aws_account_id`. */
6302
- role_arn: string;
6303
- /** @description ECS cluster name. */
6304
- cluster_name: string;
6305
- /** @description CloudWatch log group of the worker. */
6306
- log_group_name: string;
6307
- /** @description `https://sqs.<region>.amazonaws.com/<account>/<name>`; queues are `${queue_prefix}-${machineSize}`. */
6308
- queue_prefix: string;
6309
- /** @description Worker container name. Defaults to `test-run-worker`. */
6310
- container_name?: string;
6311
- /** @description Only for installations whose role already requires a fixed ID (Empirical's own dogfood). Generated otherwise. */
6312
- external_id?: string;
6591
+ BillingMeterSummary: {
6592
+ /** @enum {string} */
6593
+ meter: "ai_credits" | "test_minutes";
6594
+ included_qty: number | null;
6595
+ overage_price_cents: number | null;
6596
+ /** @description Units used so far this month. */
6597
+ used: number;
6598
+ /** @description Projected units at month end (trailing 7-day pace); null when too early to project. */
6599
+ projected: number | null;
6600
+ overage_cents: number;
6601
+ projected_overage_cents: number | null;
6602
+ };
6603
+ UsageLimit: {
6604
+ /** @description Whether the org's plan supports a usage limit (catalog plans with overage pricing). */
6605
+ available: boolean;
6606
+ /** @description Most overage allowed per usage month, in cents of the plan currency. Null means no limit. */
6607
+ cap_cents: number | null;
6608
+ /**
6609
+ * @description `warning` at 80% of the limit (or, for a $0 limit, 80% of any allowance); `reached` when new work is paused.
6610
+ * @enum {string}
6611
+ */
6612
+ status: "none" | "ok" | "warning" | "reached";
6613
+ /** @description When the limit was reached this month (ISO 8601). */
6614
+ reached_at: string | null;
6615
+ updated_at: string | null;
6616
+ /** @description Who made a change. */
6617
+ updated_by: {
6618
+ /** @description user | agent | api_key | system */
6619
+ kind: string;
6620
+ id: string | null;
6621
+ /** @description User name, when a user. */
6622
+ name: string | null;
6623
+ } | null;
6313
6624
  };
6314
- ProjectRunnerBackendResponse: {
6625
+ UsageLimitResponse: {
6315
6626
  /** @description Response payload. */
6316
6627
  data: {
6317
- project_id: number;
6628
+ /** @description Whether the org's plan supports a usage limit (catalog plans with overage pricing). */
6629
+ available: boolean;
6630
+ /** @description Most overage allowed per usage month, in cents of the plan currency. Null means no limit. */
6631
+ cap_cents: number | null;
6632
+ /**
6633
+ * @description `warning` at 80% of the limit (or, for a $0 limit, 80% of any allowance); `reached` when new work is paused.
6634
+ * @enum {string}
6635
+ */
6636
+ status: "none" | "ok" | "warning" | "reached";
6637
+ /** @description When the limit was reached this month (ISO 8601). */
6638
+ reached_at: string | null;
6639
+ updated_at: string | null;
6640
+ /** @description Who made a change. */
6641
+ updated_by: {
6642
+ /** @description user | agent | api_key | system */
6643
+ kind: string;
6644
+ id: string | null;
6645
+ /** @description User name, when a user. */
6646
+ name: string | null;
6647
+ } | null;
6648
+ };
6649
+ };
6650
+ UsageLimitEventsResponse: {
6651
+ /** @description Response payload. */
6652
+ data: components["schemas"]["UsageLimitEvent"][];
6653
+ };
6654
+ UsageLimitEvent: {
6655
+ id: number;
6656
+ /** @description spend_cap.set | spend_cap.removed | spend_cap.alert_sent | spend_cap.reached | spend_cap.cleared */
6657
+ action: string;
6658
+ /** @description Who made a change. */
6659
+ actor: {
6660
+ /** @description user | agent | api_key | system */
6661
+ kind: string;
6662
+ id: string | null;
6663
+ /** @description User name, when a user. */
6664
+ name: string | null;
6665
+ };
6666
+ before?: unknown;
6667
+ after?: unknown;
6668
+ metadata?: unknown;
6669
+ created_at: string;
6670
+ };
6671
+ SubscriptionCheckoutResponse: {
6672
+ /** @description Response payload. */
6673
+ data: {
6674
+ /** @description Dodo hosted checkout to open. It returns to the billing page. */
6675
+ checkout_url: string;
6676
+ };
6677
+ };
6678
+ ClaimRunnerBackendResponse: {
6679
+ /** @description Response payload. */
6680
+ data: {
6681
+ /** @description The registered backend, or null when nothing matched. */
6318
6682
  runner_backend_id: number | null;
6683
+ /** @enum {string|null} */
6684
+ status: "pending" | "active" | "disabled" | null;
6685
+ /** @description What the call did. */
6686
+ message: string;
6319
6687
  };
6320
6688
  };
6321
- SetProjectRunnerBackendBody: {
6322
- /** @description An active backend of the project's organisation, or null for Empirical-hosted. */
6323
- runner_backend_id: number | null;
6689
+ ClaimRunnerBackendBody: {
6690
+ /** @description The token from the installation's registration link. */
6691
+ registration_token: string;
6692
+ /**
6693
+ * @description The CloudFormation event the stack is handling.
6694
+ * @enum {string}
6695
+ */
6696
+ request_type: "Create" | "Update" | "Delete";
6697
+ /** @description ARN of the calling stack. */
6698
+ stack_id: string;
6699
+ /** @description The stack's control-plane role. */
6700
+ role_arn: string;
6701
+ /** @description The stack's ECS cluster. */
6702
+ cluster_name: string;
6703
+ /** @description The stack's worker log group. */
6704
+ log_group_name: string;
6705
+ /** @description The stack's job queue prefix. */
6706
+ queue_prefix: string;
6707
+ /** @description Template release. */
6708
+ stack_version: string;
6709
+ /**
6710
+ * Format: date-time
6711
+ * @description When the template release was published.
6712
+ */
6713
+ stack_released_at?: string;
6714
+ /** @description Worker image. */
6715
+ worker_version: string;
6716
+ /** @description Job protocol version. */
6717
+ protocol_version: string;
6718
+ /** @description Optional features the template supports. */
6719
+ capabilities: string[];
6324
6720
  };
6325
6721
  ProjectRunnerBackendDetailResponse: {
6326
6722
  /** @description Response payload. */
@@ -6339,8 +6735,6 @@ export interface components {
6339
6735
  region: string;
6340
6736
  /** @description Role api-worker assumes to drive the plane. */
6341
6737
  role_arn: string;
6342
- /** @description External ID the role's trust policy must require. Give it only to this installation's owner. */
6343
- external_id: string;
6344
6738
  /** @description ECS cluster name. */
6345
6739
  cluster_name: string;
6346
6740
  /** @description CloudWatch log group of the worker. */
@@ -6364,6 +6758,22 @@ export interface components {
6364
6758
  last_check_results: components["schemas"]["RunnerBackendCheck"][] | null;
6365
6759
  /** @description ISO-8601 start of the current run of failed checks; null while passing. A failing check does not change `status`. */
6366
6760
  check_failing_since: string | null;
6761
+ /** @description Release of the CloudFormation template the installation runs, as its stack last reported. */
6762
+ stack_version: string | null;
6763
+ /** @description ISO-8601 time that release was published, if known. */
6764
+ stack_released_at: string | null;
6765
+ /** @description Worker image the installation runs. */
6766
+ worker_version: string | null;
6767
+ /** @description Job protocol version the installation speaks. */
6768
+ protocol_version: string | null;
6769
+ /** @description Optional features the installation supports. */
6770
+ capabilities: string[];
6771
+ /** @description ARN of the CloudFormation stack that registered the installation. */
6772
+ stack_id: string | null;
6773
+ /** @description ISO-8601 time the installation's stack first called home; null until then. */
6774
+ registration_claimed_at: string | null;
6775
+ /** @description ISO-8601 expiry of the current registration link, if one was minted. Ignored once claimed. */
6776
+ registration_token_expires_at: string | null;
6367
6777
  /** @description ISO-8601 creation time. */
6368
6778
  created_at: string;
6369
6779
  /** @description ISO-8601 last-update time. */
@@ -6371,6 +6781,14 @@ export interface components {
6371
6781
  } | null;
6372
6782
  };
6373
6783
  };
6784
+ RunnerBackendCheck: {
6785
+ /** @description `assume_role`, `job_queue`, `scaler_trigger_queue`, `ecs_cluster`, `ecs_tasks` or `worker_logs`. */
6786
+ name: string;
6787
+ /** @description Whether the check passed. */
6788
+ ok: boolean;
6789
+ /** @description The resource checked, or the AWS error. */
6790
+ detail: string;
6791
+ };
6374
6792
  RunnerBackendVerifyResponse: {
6375
6793
  /** @description Response payload. */
6376
6794
  data: {
@@ -6380,21 +6798,289 @@ export interface components {
6380
6798
  runner_backend: components["schemas"]["RunnerBackend"];
6381
6799
  };
6382
6800
  };
6383
- ApiKeyListResponse: {
6384
- /** @description Response payload. */
6385
- data: {
6386
- /** @description The project's API keys (secrets truncated). */
6387
- api_keys: components["schemas"]["TruncatedProjectApiKey"][];
6388
- };
6389
- };
6390
- TruncatedProjectApiKey: {
6391
- /** @description API key ID. */
6801
+ RunnerBackend: {
6802
+ /** @description Runner backend ID. */
6392
6803
  id: number;
6393
- /** @description Project the key belongs to. */
6394
- project_id: number | null;
6395
- /** @description Human-readable name for the key. */
6804
+ /** @description Organisation that owns the installation. */
6805
+ org_id: number;
6806
+ /** @description Human-readable name. */
6396
6807
  name: string;
6397
- /** @description User ID of the creator, if known. */
6808
+ /** @description AWS account the installation runs in. */
6809
+ aws_account_id: string;
6810
+ /** @description AWS region of the installation. */
6811
+ region: string;
6812
+ /** @description Role api-worker assumes to drive the plane. */
6813
+ role_arn: string;
6814
+ /** @description ECS cluster name. */
6815
+ cluster_name: string;
6816
+ /** @description CloudWatch log group of the worker. */
6817
+ log_group_name: string;
6818
+ /** @description Worker container name. */
6819
+ container_name: string;
6820
+ /** @description Job queue URLs are `${queue_prefix}-${machineSize}`. */
6821
+ queue_prefix: string;
6822
+ /**
6823
+ * @description `pending` until verified; only `active` backends receive runs.
6824
+ * @enum {string}
6825
+ */
6826
+ status: "pending" | "active" | "disabled";
6827
+ /** @description ISO-8601 time of the last successful verify. */
6828
+ last_verified_at: string | null;
6829
+ /** @description ISO-8601 time of the last verify, manual or scheduled, whatever its outcome. */
6830
+ last_checked_at: string | null;
6831
+ /** @description Outcome of the last verify; null if never run. */
6832
+ last_check_ok: boolean | null;
6833
+ /** @description Every check from the last verify. */
6834
+ last_check_results: components["schemas"]["RunnerBackendCheck"][] | null;
6835
+ /** @description ISO-8601 start of the current run of failed checks; null while passing. A failing check does not change `status`. */
6836
+ check_failing_since: string | null;
6837
+ /** @description Release of the CloudFormation template the installation runs, as its stack last reported. */
6838
+ stack_version: string | null;
6839
+ /** @description ISO-8601 time that release was published, if known. */
6840
+ stack_released_at: string | null;
6841
+ /** @description Worker image the installation runs. */
6842
+ worker_version: string | null;
6843
+ /** @description Job protocol version the installation speaks. */
6844
+ protocol_version: string | null;
6845
+ /** @description Optional features the installation supports. */
6846
+ capabilities: string[];
6847
+ /** @description ARN of the CloudFormation stack that registered the installation. */
6848
+ stack_id: string | null;
6849
+ /** @description ISO-8601 time the installation's stack first called home; null until then. */
6850
+ registration_claimed_at: string | null;
6851
+ /** @description ISO-8601 expiry of the current registration link, if one was minted. Ignored once claimed. */
6852
+ registration_token_expires_at: string | null;
6853
+ /** @description ISO-8601 creation time. */
6854
+ created_at: string;
6855
+ /** @description ISO-8601 last-update time. */
6856
+ updated_at: string;
6857
+ };
6858
+ OrgRunnerBackendListResponse: {
6859
+ /** @description Response payload. */
6860
+ data: {
6861
+ runner_backends: {
6862
+ /** @description Runner backend ID. */
6863
+ id: number;
6864
+ /** @description Organisation that owns the installation. */
6865
+ org_id: number;
6866
+ /** @description Human-readable name. */
6867
+ name: string;
6868
+ /** @description AWS account the installation runs in. */
6869
+ aws_account_id: string;
6870
+ /** @description AWS region of the installation. */
6871
+ region: string;
6872
+ /** @description Role api-worker assumes to drive the plane. */
6873
+ role_arn: string;
6874
+ /** @description ECS cluster name. */
6875
+ cluster_name: string;
6876
+ /** @description CloudWatch log group of the worker. */
6877
+ log_group_name: string;
6878
+ /** @description Worker container name. */
6879
+ container_name: string;
6880
+ /** @description Job queue URLs are `${queue_prefix}-${machineSize}`. */
6881
+ queue_prefix: string;
6882
+ /**
6883
+ * @description `pending` until verified; only `active` backends receive runs.
6884
+ * @enum {string}
6885
+ */
6886
+ status: "pending" | "active" | "disabled";
6887
+ /** @description ISO-8601 time of the last successful verify. */
6888
+ last_verified_at: string | null;
6889
+ /** @description ISO-8601 time of the last verify, manual or scheduled, whatever its outcome. */
6890
+ last_checked_at: string | null;
6891
+ /** @description Outcome of the last verify; null if never run. */
6892
+ last_check_ok: boolean | null;
6893
+ /** @description Every check from the last verify. */
6894
+ last_check_results: components["schemas"]["RunnerBackendCheck"][] | null;
6895
+ /** @description ISO-8601 start of the current run of failed checks; null while passing. A failing check does not change `status`. */
6896
+ check_failing_since: string | null;
6897
+ /** @description Release of the CloudFormation template the installation runs, as its stack last reported. */
6898
+ stack_version: string | null;
6899
+ /** @description ISO-8601 time that release was published, if known. */
6900
+ stack_released_at: string | null;
6901
+ /** @description Worker image the installation runs. */
6902
+ worker_version: string | null;
6903
+ /** @description Job protocol version the installation speaks. */
6904
+ protocol_version: string | null;
6905
+ /** @description Optional features the installation supports. */
6906
+ capabilities: string[];
6907
+ /** @description ARN of the CloudFormation stack that registered the installation. */
6908
+ stack_id: string | null;
6909
+ /** @description ISO-8601 time the installation's stack first called home; null until then. */
6910
+ registration_claimed_at: string | null;
6911
+ /** @description ISO-8601 expiry of the current registration link, if one was minted. Ignored once claimed. */
6912
+ registration_token_expires_at: string | null;
6913
+ /** @description ISO-8601 creation time. */
6914
+ created_at: string;
6915
+ /** @description ISO-8601 last-update time. */
6916
+ updated_at: string;
6917
+ /** @description Projects whose new runs use this runner. */
6918
+ projects: {
6919
+ id: number;
6920
+ name: string;
6921
+ slug: string;
6922
+ }[];
6923
+ }[];
6924
+ };
6925
+ };
6926
+ SetupRunnerBackendResponse: {
6927
+ /** @description Response payload. */
6928
+ data: {
6929
+ runner_backend: components["schemas"]["RunnerBackend"];
6930
+ /** @description Response payload. */
6931
+ registration: {
6932
+ /** @description Credential the installation's stack calls home with. Shown once; Empirical keeps only its hash. */
6933
+ registration_token: string;
6934
+ /** @description ISO-8601 time the link stops working if unused. */
6935
+ expires_at: string;
6936
+ /** @description Release of the template the link installs. */
6937
+ stack_version: string;
6938
+ /** @description The template the link installs. */
6939
+ template_url: string;
6940
+ /** @description AWS console link that opens CloudFormation with the template and Empirical's parameters filled in. */
6941
+ quick_create_url: string;
6942
+ };
6943
+ };
6944
+ };
6945
+ SetupRunnerBackendBody: {
6946
+ /** @description 12-digit AWS account to install the runner in. */
6947
+ aws_account_id: string;
6948
+ /** @description AWS region with a published template, e.g. `us-east-1`. */
6949
+ region: string;
6950
+ };
6951
+ ProjectRunnerBackendResponse: {
6952
+ /** @description Response payload. */
6953
+ data: {
6954
+ project_id: number;
6955
+ runner_backend_id: number | null;
6956
+ };
6957
+ };
6958
+ SetProjectRunnerBackendBody: {
6959
+ /** @description An active backend of the project's organisation, or null for Empirical-hosted. */
6960
+ runner_backend_id: number | null;
6961
+ };
6962
+ RunnerBackendRegistrationResponse: {
6963
+ /** @description Response payload. */
6964
+ data: {
6965
+ /** @description Credential the installation's stack calls home with. Shown once; Empirical keeps only its hash. */
6966
+ registration_token: string;
6967
+ /** @description ISO-8601 time the link stops working if unused. */
6968
+ expires_at: string;
6969
+ /** @description Release of the template the link installs. */
6970
+ stack_version: string;
6971
+ /** @description The template the link installs. */
6972
+ template_url: string;
6973
+ /** @description AWS console link that opens CloudFormation with the template and Empirical's parameters filled in. */
6974
+ quick_create_url: string;
6975
+ };
6976
+ };
6977
+ DisconnectRunnerBackendResponse: {
6978
+ /** @description Response payload. */
6979
+ data: {
6980
+ runner_backend: components["schemas"]["RunnerBackend"];
6981
+ /** @description Projects moved back to Empirical-hosted runs. */
6982
+ unlinked_project_ids: number[];
6983
+ };
6984
+ };
6985
+ RemoveRunnerBackendResponse: {
6986
+ /** @description Response payload. */
6987
+ data: {
6988
+ /** @enum {boolean} */
6989
+ removed: true;
6990
+ };
6991
+ };
6992
+ RunnerBackendResponse: {
6993
+ /** @description Response payload. */
6994
+ data: {
6995
+ runner_backend: components["schemas"]["RunnerBackend"];
6996
+ };
6997
+ };
6998
+ RenameRunnerBackendBody: {
6999
+ /** @description Name shown for the runner in Empirical. */
7000
+ name: string;
7001
+ };
7002
+ CreateSystemMessageResponse: {
7003
+ data: {
7004
+ system_message: components["schemas"]["SystemMessage"];
7005
+ recipients: components["schemas"]["SystemMessageRecipient"][];
7006
+ skipped_project_ids: number[];
7007
+ };
7008
+ };
7009
+ SystemMessage: {
7010
+ id: number;
7011
+ body: string;
7012
+ created_by: string | null;
7013
+ created_at: string;
7014
+ };
7015
+ SystemMessageRecipient: {
7016
+ project_id: number;
7017
+ chat_session_id: number | null;
7018
+ /** @enum {string} */
7019
+ delivery_status: "pending" | "delivered" | "failed";
7020
+ delivery_error: string | null;
7021
+ delivered_at: string | null;
7022
+ /** @enum {string|null} */
7023
+ ack_status: "accepted" | "declined" | null;
7024
+ ack_note: string | null;
7025
+ acked_at: string | null;
7026
+ acked_by_chat_session_id: number | null;
7027
+ session_error: string | null;
7028
+ session_is_closed: boolean | null;
7029
+ };
7030
+ CreateSystemMessageRequest: {
7031
+ body: string;
7032
+ project_ids?: number[];
7033
+ };
7034
+ SystemMessageListResponse: {
7035
+ data: {
7036
+ system_messages: components["schemas"]["SystemMessageSummary"][];
7037
+ };
7038
+ };
7039
+ SystemMessageSummary: {
7040
+ id: number;
7041
+ body: string;
7042
+ created_by: string | null;
7043
+ created_at: string;
7044
+ recipients: number;
7045
+ delivered: number;
7046
+ failed: number;
7047
+ acked: number;
7048
+ };
7049
+ SystemMessageDetailResponse: {
7050
+ data: {
7051
+ system_message: components["schemas"]["SystemMessage"];
7052
+ recipients: components["schemas"]["SystemMessageRecipient"][];
7053
+ };
7054
+ };
7055
+ AckSystemMessageResponse: {
7056
+ data: {
7057
+ system_message_id: number;
7058
+ project_id: number;
7059
+ /** @enum {string} */
7060
+ ack_status: "accepted" | "declined";
7061
+ acked_at: string;
7062
+ };
7063
+ };
7064
+ AckSystemMessageRequest: {
7065
+ /** @enum {string} */
7066
+ status: "accepted" | "declined";
7067
+ note?: string;
7068
+ };
7069
+ ApiKeyListResponse: {
7070
+ /** @description Response payload. */
7071
+ data: {
7072
+ /** @description The project's API keys (secrets truncated). */
7073
+ api_keys: components["schemas"]["TruncatedProjectApiKey"][];
7074
+ };
7075
+ };
7076
+ TruncatedProjectApiKey: {
7077
+ /** @description API key ID. */
7078
+ id: number;
7079
+ /** @description Project the key belongs to. */
7080
+ project_id: number | null;
7081
+ /** @description Human-readable name for the key. */
7082
+ name: string;
7083
+ /** @description User ID of the creator, if known. */
6398
7084
  created_by: string | null;
6399
7085
  /** @description ISO 8601 creation timestamp. */
6400
7086
  created_at: string | null;
@@ -7021,7 +7707,25 @@ export interface components {
7021
7707
  /** @description Opaque agent chat state. */
7022
7708
  chat_state?: unknown;
7023
7709
  /** @description Tests impacted by this session. */
7024
- impacted_tests?: unknown;
7710
+ impacted_tests: {
7711
+ test_case: {
7712
+ name: string;
7713
+ suites: string[];
7714
+ file_path: string;
7715
+ start_line: number;
7716
+ end_line: number;
7717
+ };
7718
+ /** @enum {string} */
7719
+ type: "added" | "removed" | "modified";
7720
+ modified_by: {
7721
+ file_path: string;
7722
+ line: {
7723
+ number: number;
7724
+ /** @enum {string} */
7725
+ type: "added" | "removed" | "modified";
7726
+ };
7727
+ }[] | null;
7728
+ }[];
7025
7729
  /** @description Whether the agent is awaiting user input. */
7026
7730
  ask_user_for_input: boolean | null;
7027
7731
  /** @description Langfuse trace ID. */
@@ -7976,8 +8680,8 @@ export interface components {
7976
8680
  effective_from: string;
7977
8681
  /** @description ISO timestamp it was turned off; null while active. */
7978
8682
  effective_to: string | null;
7979
- /** @description Order-form line this period bills against, when a priced line exists. Null for add-ons that are free today. */
7980
- order_form_line_id: number | null;
8683
+ /** @description Add-on plan this period bills against, when a priced one exists. Null for add-ons that are free today. */
8684
+ plan_id: number | null;
7981
8685
  created_by: string | null;
7982
8686
  ended_by: string | null;
7983
8687
  };
@@ -7993,8 +8697,8 @@ export interface components {
7993
8697
  * @description Backdate the period to this ISO timestamp. Super admin only; defaults to now.
7994
8698
  */
7995
8699
  effective_from?: string;
7996
- /** @description Order-form line (kind='addon') this period bills against. Super admin only. */
7997
- order_form_line_id?: number;
8700
+ /** @description Add-on plan (kind='addon') this period bills against. Super admin only. */
8701
+ plan_id?: number;
7998
8702
  };
7999
8703
  StaticIpsResponse: {
8000
8704
  /** @description Response payload. */
@@ -9040,8 +9744,11 @@ export interface components {
9040
9744
  } | null;
9041
9745
  /** @description Number of the session's most recently updated PR, if any. */
9042
9746
  pr_number: number | null;
9043
- /** @description Status of the session's most recently updated PR ('unopened' when it has none). */
9044
- pr_status: string;
9747
+ /**
9748
+ * @description Status of the session's most recently updated PR ('unopened' when it has none).
9749
+ * @enum {string}
9750
+ */
9751
+ pr_status: "unopened" | "open" | "opened" | "closed" | "merged";
9045
9752
  /** @description Name of the owning project. */
9046
9753
  project_name: string | null;
9047
9754
  /** @description Repository name of the owning project. */
@@ -9053,8 +9760,14 @@ export interface components {
9053
9760
  /** @description Response payload. */
9054
9761
  data: {
9055
9762
  chat_session: components["schemas"]["ChatSession"];
9763
+ subscription: components["schemas"]["ChatSessionCallerSubscription"];
9056
9764
  };
9057
9765
  };
9766
+ /** @description One-shot subscription that wakes the calling agent session when this session next waits for input; null when none was created. */
9767
+ ChatSessionCallerSubscription: {
9768
+ /** @description Subscription ID. */
9769
+ id: number;
9770
+ } | null;
9058
9771
  ChatSessionDetailResponse: {
9059
9772
  /** @description Response payload. */
9060
9773
  data: {
@@ -9090,7 +9803,25 @@ export interface components {
9090
9803
  /** @description Opaque agent chat state. */
9091
9804
  chat_state?: unknown;
9092
9805
  /** @description Tests impacted by this session. */
9093
- impacted_tests?: unknown;
9806
+ impacted_tests: {
9807
+ test_case: {
9808
+ name: string;
9809
+ suites: string[];
9810
+ file_path: string;
9811
+ start_line: number;
9812
+ end_line: number;
9813
+ };
9814
+ /** @enum {string} */
9815
+ type: "added" | "removed" | "modified";
9816
+ modified_by: {
9817
+ file_path: string;
9818
+ line: {
9819
+ number: number;
9820
+ /** @enum {string} */
9821
+ type: "added" | "removed" | "modified";
9822
+ };
9823
+ }[] | null;
9824
+ }[];
9094
9825
  /** @description Whether the agent is awaiting user input. */
9095
9826
  ask_user_for_input: boolean | null;
9096
9827
  /** @description Langfuse trace ID. */
@@ -9123,6 +9854,7 @@ export interface components {
9123
9854
  /** @description Response payload. */
9124
9855
  data: {
9125
9856
  chat_session: components["schemas"]["ChatSession"];
9857
+ subscription: components["schemas"]["ChatSessionCallerSubscription"];
9126
9858
  };
9127
9859
  };
9128
9860
  ChatSessionTimelineResponse: {
@@ -9483,14 +10215,83 @@ export interface components {
9483
10215
  /** @description Response payload. */
9484
10216
  data: {
9485
10217
  /** @description Reporter App installation rows. */
9486
- gh_app_installs: unknown[];
10218
+ gh_app_installs: components["schemas"]["GhReporterAppInstall"][];
10219
+ };
10220
+ };
10221
+ GhReporterAppInstall: {
10222
+ id: number;
10223
+ org_id: number | null;
10224
+ app_installation_id: string | null;
10225
+ gh_organization: string | null;
10226
+ gh_repos: {
10227
+ id: number;
10228
+ node_id: string;
10229
+ name: string;
10230
+ full_name: string;
10231
+ private: boolean;
10232
+ }[] | null;
10233
+ /** @enum {string|null} */
10234
+ installation_status: "requested" | "installed" | null;
10235
+ permissions: {
10236
+ /** @enum {string} */
10237
+ metadata: "read";
10238
+ /** @enum {string} */
10239
+ checks?: "write" | "read";
10240
+ /** @enum {string} */
10241
+ pull_requests?: "write" | "read";
10242
+ /** @enum {string} */
10243
+ contents?: "write" | "read";
10244
+ /** @enum {string} */
10245
+ issues?: "write" | "read";
10246
+ /** @enum {string} */
10247
+ merge_queues?: "write" | "read";
10248
+ /** @enum {string} */
10249
+ repository_custom_properties?: "write" | "read";
10250
+ } & {
10251
+ [key: string]: unknown;
9487
10252
  };
10253
+ created_at: string | null;
10254
+ updated_at: string | null;
9488
10255
  };
9489
10256
  GhReporterInstallResponse: {
9490
10257
  /** @description Response payload. */
9491
10258
  data: {
9492
- /** @description The reporter App installation row. */
9493
- installation?: unknown;
10259
+ /** @description The reporter App installation row, or null if the write matched nothing. */
10260
+ installation: {
10261
+ id: number;
10262
+ org_id: number | null;
10263
+ app_installation_id: string | null;
10264
+ gh_organization: string | null;
10265
+ gh_repos: {
10266
+ id: number;
10267
+ node_id: string;
10268
+ name: string;
10269
+ full_name: string;
10270
+ private: boolean;
10271
+ }[] | null;
10272
+ /** @enum {string|null} */
10273
+ installation_status: "requested" | "installed" | null;
10274
+ permissions: {
10275
+ /** @enum {string} */
10276
+ metadata: "read";
10277
+ /** @enum {string} */
10278
+ checks?: "write" | "read";
10279
+ /** @enum {string} */
10280
+ pull_requests?: "write" | "read";
10281
+ /** @enum {string} */
10282
+ contents?: "write" | "read";
10283
+ /** @enum {string} */
10284
+ issues?: "write" | "read";
10285
+ /** @enum {string} */
10286
+ merge_queues?: "write" | "read";
10287
+ /** @enum {string} */
10288
+ repository_custom_properties?: "write" | "read";
10289
+ } & {
10290
+ [key: string]: unknown;
10291
+ };
10292
+ created_at: string | null;
10293
+ updated_at: string | null;
10294
+ } | null;
9494
10295
  };
9495
10296
  };
9496
10297
  GhReporterDeliveriesResponse: {
@@ -9595,9 +10396,24 @@ export interface components {
9595
10396
  /** @description Response payload. */
9596
10397
  data: {
9597
10398
  /** @description Main App installation rows. */
9598
- gh_app_installs: unknown[];
10399
+ gh_app_installs: components["schemas"]["GhMainAppInstall"][];
9599
10400
  };
9600
10401
  };
10402
+ GhMainAppInstall: {
10403
+ id: number;
10404
+ org_id: number;
10405
+ app_installation_id: string;
10406
+ gh_organization: string | null;
10407
+ gh_repos: {
10408
+ id: number;
10409
+ node_id: string;
10410
+ name: string;
10411
+ full_name: string;
10412
+ private: boolean;
10413
+ }[] | null;
10414
+ created_at: string | null;
10415
+ updated_at: string | null;
10416
+ };
9601
10417
  GhMainMetadataResponse: {
9602
10418
  /** @description Response payload. */
9603
10419
  data: {
@@ -9618,8 +10434,22 @@ export interface components {
9618
10434
  GhMainInstallResponse: {
9619
10435
  /** @description Response payload. */
9620
10436
  data: {
9621
- /** @description The main App installation row. */
9622
- installation?: unknown;
10437
+ /** @description The main App installation row, or null if the write matched nothing. */
10438
+ installation: {
10439
+ id: number;
10440
+ org_id: number;
10441
+ app_installation_id: string;
10442
+ gh_organization: string | null;
10443
+ gh_repos: {
10444
+ id: number;
10445
+ node_id: string;
10446
+ name: string;
10447
+ full_name: string;
10448
+ private: boolean;
10449
+ }[] | null;
10450
+ created_at: string | null;
10451
+ updated_at: string | null;
10452
+ } | null;
9623
10453
  };
9624
10454
  };
9625
10455
  GithubProxyError: {
@@ -11489,8 +12319,6 @@ export interface components {
11489
12319
  number: number;
11490
12320
  url: string;
11491
12321
  } | null;
11492
- /** @description Whether the project posts the linked test changes check on GitHub. */
11493
- check_enabled: boolean;
11494
12322
  /** @description Latest GitHub check written for the app PR, from any of its runs. */
11495
12323
  check: {
11496
12324
  check_run_url: string | null;
@@ -11976,6 +12804,13 @@ export interface components {
11976
12804
  id: number;
11977
12805
  title: string | null;
11978
12806
  } | null;
12807
+ /** @description The customer-hosted runner (Private Runner) the run was dispatched to. Null for runs on Empirical's hosted runners. */
12808
+ runner_backend: {
12809
+ id: number;
12810
+ name: string;
12811
+ aws_account_id: string;
12812
+ region: string;
12813
+ } | null;
11979
12814
  /** @description For a pending run held back by its concurrency group (on_conflict=wait), the in-progress run it is waiting on. Null when the run is not pending or nothing blocks it. */
11980
12815
  waiting_on_test_run_id: number | null;
11981
12816
  /** @description First page of ledger-sourced cases, ordered failed โ†’ flaky โ†’ others so the default 'failed' filter and the failure-first list render correctly on first paint. Shipped inline so the list renders without waiting on a fetch. The client refetches the full set. */
@@ -12616,7 +13451,7 @@ export interface components {
12616
13451
  };
12617
13452
  };
12618
13453
  DodoWebhookAckResponse: {
12619
- /** @description Ack. */
13454
+ /** @description Acknowledgement. */
12620
13455
  message: string;
12621
13456
  };
12622
13457
  RazorpayWebhookAckResponse: {
@@ -17747,9 +18582,14 @@ export interface operations {
17747
18582
  entity_type: string;
17748
18583
  /** @description Exact entity id, or null when this trigger matches every entity. */
17749
18584
  entity_id: string | null;
17750
- /** @description Optional payload equality filters. Keys must be allowed for the selected event in the canonical event catalog, and enum-like fields only accept the values the event emits. */
18585
+ /** @description Optional payload filters. Keys must be allowed for the selected event in the canonical event catalog. A primitive value is an equality match, and enum-like fields only accept the values the event emits. Numeric fields also accept a comparison object such as {"gt": 2} or {"gte": 1, "lte": 5}; operators combine with AND and never match null. */
17751
18586
  payload_filter: {
17752
- [key: string]: string | number | boolean | unknown;
18587
+ [key: string]: string | number | boolean | {
18588
+ gt?: number;
18589
+ gte?: number;
18590
+ lt?: number;
18591
+ lte?: number;
18592
+ } | unknown;
17753
18593
  };
17754
18594
  message: string;
17755
18595
  /**
@@ -17794,9 +18634,14 @@ export interface operations {
17794
18634
  event_type: string;
17795
18635
  /** @description Exact canonical entity id to match. Omit on create, or set null on update, to match every entity. */
17796
18636
  entity_id?: string;
17797
- /** @description Optional payload equality filters. Keys must be allowed for the selected event in the canonical event catalog, and enum-like fields only accept the values the event emits. */
18637
+ /** @description Optional payload filters. Keys must be allowed for the selected event in the canonical event catalog. A primitive value is an equality match, and enum-like fields only accept the values the event emits. Numeric fields also accept a comparison object such as {"gt": 2} or {"gte": 1, "lte": 5}; operators combine with AND and never match null. */
17798
18638
  payload_filter?: {
17799
- [key: string]: string | number | boolean | unknown;
18639
+ [key: string]: string | number | boolean | {
18640
+ gt?: number;
18641
+ gte?: number;
18642
+ lt?: number;
18643
+ lte?: number;
18644
+ } | unknown;
17800
18645
  };
17801
18646
  /** @description Continuation instruction delivered to the session after the event matches. */
17802
18647
  message: string;
@@ -17825,9 +18670,14 @@ export interface operations {
17825
18670
  entity_type: string;
17826
18671
  /** @description Exact entity id, or null when this trigger matches every entity. */
17827
18672
  entity_id: string | null;
17828
- /** @description Optional payload equality filters. Keys must be allowed for the selected event in the canonical event catalog, and enum-like fields only accept the values the event emits. */
18673
+ /** @description Optional payload filters. Keys must be allowed for the selected event in the canonical event catalog. A primitive value is an equality match, and enum-like fields only accept the values the event emits. Numeric fields also accept a comparison object such as {"gt": 2} or {"gte": 1, "lte": 5}; operators combine with AND and never match null. */
17829
18674
  payload_filter: {
17830
- [key: string]: string | number | boolean | unknown;
18675
+ [key: string]: string | number | boolean | {
18676
+ gt?: number;
18677
+ gte?: number;
18678
+ lt?: number;
18679
+ lte?: number;
18680
+ } | unknown;
17831
18681
  };
17832
18682
  message: string;
17833
18683
  /**
@@ -17899,9 +18749,14 @@ export interface operations {
17899
18749
  entity_type: string;
17900
18750
  /** @description Exact entity id, or null when this trigger matches every entity. */
17901
18751
  entity_id: string | null;
17902
- /** @description Optional payload equality filters. Keys must be allowed for the selected event in the canonical event catalog, and enum-like fields only accept the values the event emits. */
18752
+ /** @description Optional payload filters. Keys must be allowed for the selected event in the canonical event catalog. A primitive value is an equality match, and enum-like fields only accept the values the event emits. Numeric fields also accept a comparison object such as {"gt": 2} or {"gte": 1, "lte": 5}; operators combine with AND and never match null. */
17903
18753
  payload_filter: {
17904
- [key: string]: string | number | boolean | unknown;
18754
+ [key: string]: string | number | boolean | {
18755
+ gt?: number;
18756
+ gte?: number;
18757
+ lt?: number;
18758
+ lte?: number;
18759
+ } | unknown;
17905
18760
  };
17906
18761
  message: string;
17907
18762
  /**
@@ -17974,9 +18829,14 @@ export interface operations {
17974
18829
  event_type?: string;
17975
18830
  /** @description Exact canonical entity id to match. Omit on create, or set null on update, to match every entity. */
17976
18831
  entity_id?: string | null;
17977
- /** @description Optional payload equality filters. Keys must be allowed for the selected event in the canonical event catalog, and enum-like fields only accept the values the event emits. */
18832
+ /** @description Optional payload filters. Keys must be allowed for the selected event in the canonical event catalog. A primitive value is an equality match, and enum-like fields only accept the values the event emits. Numeric fields also accept a comparison object such as {"gt": 2} or {"gte": 1, "lte": 5}; operators combine with AND and never match null. */
17978
18833
  payload_filter?: {
17979
- [key: string]: string | number | boolean | unknown;
18834
+ [key: string]: string | number | boolean | {
18835
+ gt?: number;
18836
+ gte?: number;
18837
+ lt?: number;
18838
+ lte?: number;
18839
+ } | unknown;
17980
18840
  };
17981
18841
  /** @description Continuation instruction delivered to the session after the event matches. */
17982
18842
  message?: string;
@@ -18005,9 +18865,14 @@ export interface operations {
18005
18865
  entity_type: string;
18006
18866
  /** @description Exact entity id, or null when this trigger matches every entity. */
18007
18867
  entity_id: string | null;
18008
- /** @description Optional payload equality filters. Keys must be allowed for the selected event in the canonical event catalog, and enum-like fields only accept the values the event emits. */
18868
+ /** @description Optional payload filters. Keys must be allowed for the selected event in the canonical event catalog. A primitive value is an equality match, and enum-like fields only accept the values the event emits. Numeric fields also accept a comparison object such as {"gt": 2} or {"gte": 1, "lte": 5}; operators combine with AND and never match null. */
18009
18869
  payload_filter: {
18010
- [key: string]: string | number | boolean | unknown;
18870
+ [key: string]: string | number | boolean | {
18871
+ gt?: number;
18872
+ gte?: number;
18873
+ lt?: number;
18874
+ lte?: number;
18875
+ } | unknown;
18011
18876
  };
18012
18877
  message: string;
18013
18878
  /**
@@ -18652,10 +19517,185 @@ export interface operations {
18652
19517
  };
18653
19518
  };
18654
19519
  };
18655
- listChatSessions: {
19520
+ getBillingMonthSummary: {
18656
19521
  parameters: {
18657
19522
  query?: {
18658
- /** @description Restrict to a single project (ignored for bound principals). */
19523
+ /** @description Usage month (YYYY-MM, UTC). Defaults to the current month. */
19524
+ month?: string;
19525
+ };
19526
+ header?: never;
19527
+ path?: never;
19528
+ cookie?: never;
19529
+ };
19530
+ requestBody?: never;
19531
+ responses: {
19532
+ /** @description The month summary. */
19533
+ 200: {
19534
+ headers: {
19535
+ [name: string]: unknown;
19536
+ };
19537
+ content: {
19538
+ "application/json": components["schemas"]["BillingMonthSummaryResponse"];
19539
+ };
19540
+ };
19541
+ /** @description Invalid month, or missing project scope. */
19542
+ 400: {
19543
+ headers: {
19544
+ [name: string]: unknown;
19545
+ };
19546
+ content: {
19547
+ "application/json": components["schemas"]["ErrorResponse"];
19548
+ };
19549
+ };
19550
+ /** @description The project has no org. */
19551
+ 404: {
19552
+ headers: {
19553
+ [name: string]: unknown;
19554
+ };
19555
+ content: {
19556
+ "application/json": components["schemas"]["ErrorResponse"];
19557
+ };
19558
+ };
19559
+ };
19560
+ };
19561
+ createSubscriptionCheckout: {
19562
+ parameters: {
19563
+ query?: never;
19564
+ header?: never;
19565
+ path?: never;
19566
+ cookie?: never;
19567
+ };
19568
+ requestBody?: never;
19569
+ responses: {
19570
+ /** @description The checkout. */
19571
+ 200: {
19572
+ headers: {
19573
+ [name: string]: unknown;
19574
+ };
19575
+ content: {
19576
+ "application/json": components["schemas"]["SubscriptionCheckoutResponse"];
19577
+ };
19578
+ };
19579
+ /** @description Payments not configured, INR org, no plan for sale, or no email for the Dodo customer. */
19580
+ 400: {
19581
+ headers: {
19582
+ [name: string]: unknown;
19583
+ };
19584
+ content: {
19585
+ "application/json": components["schemas"]["ErrorResponse"];
19586
+ };
19587
+ };
19588
+ /** @description The project has no org. */
19589
+ 404: {
19590
+ headers: {
19591
+ [name: string]: unknown;
19592
+ };
19593
+ content: {
19594
+ "application/json": components["schemas"]["ErrorResponse"];
19595
+ };
19596
+ };
19597
+ /** @description The org already has a plan or a live subscription. */
19598
+ 409: {
19599
+ headers: {
19600
+ [name: string]: unknown;
19601
+ };
19602
+ content: {
19603
+ "application/json": components["schemas"]["ErrorResponse"];
19604
+ };
19605
+ };
19606
+ };
19607
+ };
19608
+ setUsageLimit: {
19609
+ parameters: {
19610
+ query?: never;
19611
+ header?: never;
19612
+ path?: never;
19613
+ cookie?: never;
19614
+ };
19615
+ requestBody?: {
19616
+ content: {
19617
+ "application/json": {
19618
+ /** @description Whole dollars, in cents; null removes it. */
19619
+ cap_cents: number | null;
19620
+ };
19621
+ };
19622
+ };
19623
+ responses: {
19624
+ /** @description The updated usage limit. */
19625
+ 200: {
19626
+ headers: {
19627
+ [name: string]: unknown;
19628
+ };
19629
+ content: {
19630
+ "application/json": components["schemas"]["UsageLimitResponse"];
19631
+ };
19632
+ };
19633
+ /** @description Invalid body, or the plan doesn't support a limit. */
19634
+ 400: {
19635
+ headers: {
19636
+ [name: string]: unknown;
19637
+ };
19638
+ content: {
19639
+ "application/json": components["schemas"]["ErrorResponse"];
19640
+ };
19641
+ };
19642
+ /** @description The project has no org. */
19643
+ 404: {
19644
+ headers: {
19645
+ [name: string]: unknown;
19646
+ };
19647
+ content: {
19648
+ "application/json": components["schemas"]["ErrorResponse"];
19649
+ };
19650
+ };
19651
+ };
19652
+ };
19653
+ listUsageLimitEvents: {
19654
+ parameters: {
19655
+ query?: {
19656
+ per_page?: number;
19657
+ /** @description Return events older than this id (pagination cursor). */
19658
+ before_id?: number;
19659
+ };
19660
+ header?: never;
19661
+ path?: never;
19662
+ cookie?: never;
19663
+ };
19664
+ requestBody?: never;
19665
+ responses: {
19666
+ /** @description Usage limit events. */
19667
+ 200: {
19668
+ headers: {
19669
+ [name: string]: unknown;
19670
+ };
19671
+ content: {
19672
+ "application/json": components["schemas"]["UsageLimitEventsResponse"];
19673
+ };
19674
+ };
19675
+ /** @description Invalid query, or missing project scope. */
19676
+ 400: {
19677
+ headers: {
19678
+ [name: string]: unknown;
19679
+ };
19680
+ content: {
19681
+ "application/json": components["schemas"]["ErrorResponse"];
19682
+ };
19683
+ };
19684
+ /** @description The project has no org. */
19685
+ 404: {
19686
+ headers: {
19687
+ [name: string]: unknown;
19688
+ };
19689
+ content: {
19690
+ "application/json": components["schemas"]["ErrorResponse"];
19691
+ };
19692
+ };
19693
+ };
19694
+ };
19695
+ listChatSessions: {
19696
+ parameters: {
19697
+ query?: {
19698
+ /** @description Restrict to a single project (ignored for bound principals). */
18659
19699
  project_id?: number;
18660
19700
  /** @description Include closed sessions when `true`. */
18661
19701
  show_closed?: boolean | null;
@@ -18731,6 +19771,8 @@ export interface operations {
18731
19771
  /** @description Deprecated. Sessions start on the project default branch; a different branch is added to `message` as an instruction to work from it. */
18732
19772
  base_branch?: string | null;
18733
19773
  created_by?: string | null;
19774
+ /** @description When the caller is an agent session, wake it the next time this session waits for input (one-shot). Defaults to true; pass false for a fire-and-forget message. Ignored for other callers. */
19775
+ subscribe?: boolean | null;
18734
19776
  };
18735
19777
  };
18736
19778
  };
@@ -19294,7 +20336,9 @@ export interface operations {
19294
20336
  entity_type: string;
19295
20337
  entity_id: string | null;
19296
20338
  payload_filter: {
19297
- [key: string]: string | number | boolean | unknown;
20339
+ [key: string]: string | number | boolean | {
20340
+ [key: string]: number;
20341
+ } | unknown;
19298
20342
  };
19299
20343
  message: string;
19300
20344
  /** @enum {string} */
@@ -19390,6 +20434,8 @@ export interface operations {
19390
20434
  send_action: "steer" | "follow_up" | "stop";
19391
20435
  created_by?: string | null;
19392
20436
  rpc_command_id?: string;
20437
+ /** @description When the caller is an agent session, wake it the next time this session waits for input (one-shot). Defaults to true; pass false for a fire-and-forget message. Ignored for other callers. */
20438
+ subscribe?: boolean | null;
19393
20439
  };
19394
20440
  };
19395
20441
  };
@@ -19947,20 +20993,12 @@ export interface operations {
19947
20993
  requestBody?: {
19948
20994
  content: {
19949
20995
  "application/json": {
19950
- /** @description Event type, e.g. "payment.succeeded". */
20996
+ /** @description Event type, e.g. "subscription.active". */
19951
20997
  type: string;
19952
20998
  /** @description Event payload. */
19953
20999
  data: {
19954
- /** @description Dodo payment ID. */
19955
- payment_id?: string;
19956
- /** @description Charged amount in minor units, tax included. */
19957
- total_amount?: number;
19958
- /** @description Tax portion of total_amount in minor units. */
19959
- tax?: number;
19960
- /** @description Metadata set at checkout session creation. */
19961
- metadata?: {
19962
- [key: string]: string;
19963
- };
21000
+ /** @description Dodo subscription ID. */
21001
+ subscription_id?: string;
19964
21002
  };
19965
21003
  };
19966
21004
  };
@@ -19984,6 +21022,15 @@ export interface operations {
19984
21022
  "application/json": components["schemas"]["ErrorResponse"];
19985
21023
  };
19986
21024
  };
21025
+ /** @description Dodo API credentials are not configured. */
21026
+ 500: {
21027
+ headers: {
21028
+ [name: string]: unknown;
21029
+ };
21030
+ content: {
21031
+ "application/json": components["schemas"]["ErrorResponse"];
21032
+ };
21033
+ };
19987
21034
  };
19988
21035
  };
19989
21036
  listEnvironmentVariables: {
@@ -22054,6 +23101,15 @@ export interface operations {
22054
23101
  "application/json": components["schemas"]["ErrorResponse"] | components["schemas"]["InvoiceSimpleError"];
22055
23102
  };
22056
23103
  };
23104
+ /** @description The organisation is billed by Dodo. */
23105
+ 409: {
23106
+ headers: {
23107
+ [name: string]: unknown;
23108
+ };
23109
+ content: {
23110
+ "application/json": components["schemas"]["ErrorResponse"];
23111
+ };
23112
+ };
22057
23113
  };
22058
23114
  };
22059
23115
  getInvoice: {
@@ -22172,6 +23228,15 @@ export interface operations {
22172
23228
  "application/json": components["schemas"]["ErrorResponse"];
22173
23229
  };
22174
23230
  };
23231
+ /** @description The target organisation is billed by Dodo. */
23232
+ 409: {
23233
+ headers: {
23234
+ [name: string]: unknown;
23235
+ };
23236
+ content: {
23237
+ "application/json": components["schemas"]["ErrorResponse"];
23238
+ };
23239
+ };
22175
23240
  };
22176
23241
  };
22177
23242
  listInvoiceBillingLines: {
@@ -22260,6 +23325,70 @@ export interface operations {
22260
23325
  };
22261
23326
  };
22262
23327
  };
23328
+ previewInvoiceEmail: {
23329
+ parameters: {
23330
+ query?: {
23331
+ /** @description When `true`, preview the test email (sent to the internal test recipient). Defaults to `false`. */
23332
+ is_test_email?: "true" | "false";
23333
+ };
23334
+ header?: never;
23335
+ path: {
23336
+ /** @description Invoice ID. */
23337
+ id: string;
23338
+ };
23339
+ cookie?: never;
23340
+ };
23341
+ requestBody?: never;
23342
+ responses: {
23343
+ /** @description The rendered email. */
23344
+ 200: {
23345
+ headers: {
23346
+ [name: string]: unknown;
23347
+ };
23348
+ content: {
23349
+ "application/json": {
23350
+ /** @description Response payload. */
23351
+ data: {
23352
+ /** @description Sender address. */
23353
+ from: string;
23354
+ /** @description To recipients. */
23355
+ to: string[];
23356
+ /** @description CC recipients. */
23357
+ cc: string[];
23358
+ /** @description BCC recipients. */
23359
+ bcc: string[];
23360
+ /** @description Reply-To addresses. */
23361
+ reply_to: string[];
23362
+ /** @description Email subject. */
23363
+ subject: string;
23364
+ /** @description Rendered email body HTML. */
23365
+ html: string;
23366
+ /** @description Attached PDF filename, or null when the invoice has no PDF. */
23367
+ attachment_filename: string | null;
23368
+ };
23369
+ };
23370
+ };
23371
+ };
23372
+ /** @description Invalid invoice ID or organisation not found. */
23373
+ 400: {
23374
+ headers: {
23375
+ [name: string]: unknown;
23376
+ };
23377
+ content: {
23378
+ "application/json": components["schemas"]["ErrorResponse"];
23379
+ };
23380
+ };
23381
+ /** @description Invoice not found. */
23382
+ 404: {
23383
+ headers: {
23384
+ [name: string]: unknown;
23385
+ };
23386
+ content: {
23387
+ "application/json": components["schemas"]["ErrorResponse"];
23388
+ };
23389
+ };
23390
+ };
23391
+ };
22263
23392
  generateInvoicePdf: {
22264
23393
  parameters: {
22265
23394
  query?: never;
@@ -22501,6 +23630,15 @@ export interface operations {
22501
23630
  "application/json": components["schemas"]["ErrorResponse"];
22502
23631
  };
22503
23632
  };
23633
+ /** @description The organisation is billed by Dodo. */
23634
+ 409: {
23635
+ headers: {
23636
+ [name: string]: unknown;
23637
+ };
23638
+ content: {
23639
+ "application/json": components["schemas"]["ErrorResponse"];
23640
+ };
23641
+ };
22504
23642
  };
22505
23643
  };
22506
23644
  listOrgInvoices: {
@@ -22532,7 +23670,7 @@ export interface operations {
22532
23670
  };
22533
23671
  };
22534
23672
  };
22535
- createInvoiceCheckoutSession: {
23673
+ downloadOrgInvoicePdf: {
22536
23674
  parameters: {
22537
23675
  query?: never;
22538
23676
  header?: never;
@@ -22542,22 +23680,18 @@ export interface operations {
22542
23680
  };
22543
23681
  cookie?: never;
22544
23682
  };
22545
- requestBody?: {
22546
- content: {
22547
- "application/json": components["schemas"]["CreateInvoiceCheckoutSessionRequest"];
22548
- };
22549
- };
23683
+ requestBody?: never;
22550
23684
  responses: {
22551
- /** @description The checkout session. */
23685
+ /** @description The invoice PDF. */
22552
23686
  200: {
22553
23687
  headers: {
22554
23688
  [name: string]: unknown;
22555
23689
  };
22556
23690
  content: {
22557
- "application/json": components["schemas"]["InvoiceCheckoutSessionResponse"];
23691
+ "application/pdf": string;
22558
23692
  };
22559
23693
  };
22560
- /** @description Invalid request, unsupported currency, or Dodo not configured. */
23694
+ /** @description Invalid invoice id. */
22561
23695
  400: {
22562
23696
  headers: {
22563
23697
  [name: string]: unknown;
@@ -22566,7 +23700,7 @@ export interface operations {
22566
23700
  "application/json": components["schemas"]["ErrorResponse"];
22567
23701
  };
22568
23702
  };
22569
- /** @description Invoice not found. */
23703
+ /** @description Invoice or its PDF not found. */
22570
23704
  404: {
22571
23705
  headers: {
22572
23706
  [name: string]: unknown;
@@ -22575,18 +23709,9 @@ export interface operations {
22575
23709
  "application/json": components["schemas"]["ErrorResponse"];
22576
23710
  };
22577
23711
  };
22578
- /** @description Invoice has no outstanding amount. */
22579
- 409: {
22580
- headers: {
22581
- [name: string]: unknown;
22582
- };
22583
- content: {
22584
- "application/json": components["schemas"]["ErrorResponse"];
22585
- };
22586
- };
22587
23712
  };
22588
23713
  };
22589
- downloadOrgInvoicePdf: {
23714
+ createInvoiceRazorpayOrder: {
22590
23715
  parameters: {
22591
23716
  query?: never;
22592
23717
  header?: never;
@@ -22598,16 +23723,16 @@ export interface operations {
22598
23723
  };
22599
23724
  requestBody?: never;
22600
23725
  responses: {
22601
- /** @description The invoice PDF. */
23726
+ /** @description The Razorpay order. */
22602
23727
  200: {
22603
23728
  headers: {
22604
23729
  [name: string]: unknown;
22605
23730
  };
22606
23731
  content: {
22607
- "application/pdf": string;
23732
+ "application/json": components["schemas"]["InvoiceRazorpayOrderResponse"];
22608
23733
  };
22609
23734
  };
22610
- /** @description Invalid invoice id. */
23735
+ /** @description Invalid request, unsupported currency, or Razorpay not configured. */
22611
23736
  400: {
22612
23737
  headers: {
22613
23738
  [name: string]: unknown;
@@ -22616,48 +23741,7 @@ export interface operations {
22616
23741
  "application/json": components["schemas"]["ErrorResponse"];
22617
23742
  };
22618
23743
  };
22619
- /** @description Invoice or its PDF not found. */
22620
- 404: {
22621
- headers: {
22622
- [name: string]: unknown;
22623
- };
22624
- content: {
22625
- "application/json": components["schemas"]["ErrorResponse"];
22626
- };
22627
- };
22628
- };
22629
- };
22630
- createInvoiceRazorpayOrder: {
22631
- parameters: {
22632
- query?: never;
22633
- header?: never;
22634
- path: {
22635
- /** @description Invoice ID. */
22636
- id: string;
22637
- };
22638
- cookie?: never;
22639
- };
22640
- requestBody?: never;
22641
- responses: {
22642
- /** @description The Razorpay order. */
22643
- 200: {
22644
- headers: {
22645
- [name: string]: unknown;
22646
- };
22647
- content: {
22648
- "application/json": components["schemas"]["InvoiceRazorpayOrderResponse"];
22649
- };
22650
- };
22651
- /** @description Invalid request, unsupported currency, or Razorpay not configured. */
22652
- 400: {
22653
- headers: {
22654
- [name: string]: unknown;
22655
- };
22656
- content: {
22657
- "application/json": components["schemas"]["ErrorResponse"];
22658
- };
22659
- };
22660
- /** @description Invoice not found. */
23744
+ /** @description Invoice not found. */
22661
23745
  404: {
22662
23746
  headers: {
22663
23747
  [name: string]: unknown;
@@ -22731,47 +23815,6 @@ export interface operations {
22731
23815
  };
22732
23816
  };
22733
23817
  };
22734
- downloadOrgInvoiceTaxInvoice: {
22735
- parameters: {
22736
- query?: never;
22737
- header?: never;
22738
- path: {
22739
- /** @description Invoice ID. */
22740
- id: string;
22741
- };
22742
- cookie?: never;
22743
- };
22744
- requestBody?: never;
22745
- responses: {
22746
- /** @description The tax invoice PDF. */
22747
- 200: {
22748
- headers: {
22749
- [name: string]: unknown;
22750
- };
22751
- content: {
22752
- "application/pdf": string;
22753
- };
22754
- };
22755
- /** @description Invalid invoice id or payments not configured. */
22756
- 400: {
22757
- headers: {
22758
- [name: string]: unknown;
22759
- };
22760
- content: {
22761
- "application/json": components["schemas"]["ErrorResponse"];
22762
- };
22763
- };
22764
- /** @description Invoice or its tax invoice not found. */
22765
- 404: {
22766
- headers: {
22767
- [name: string]: unknown;
22768
- };
22769
- content: {
22770
- "application/json": components["schemas"]["ErrorResponse"];
22771
- };
22772
- };
22773
- };
22774
- };
22775
23818
  listUpcomingInvoiceReminders: {
22776
23819
  parameters: {
22777
23820
  query?: {
@@ -24454,8 +25497,8 @@ export interface operations {
24454
25497
  per_page?: number;
24455
25498
  /** @description Filter to assignments for this organisation. */
24456
25499
  org_id?: number | null;
24457
- /** @description Filter to assignments for this order-form line. */
24458
- order_form_line_id?: number | null;
25500
+ /** @description Filter to assignments for this plan. */
25501
+ plan_id?: number | null;
24459
25502
  };
24460
25503
  header?: never;
24461
25504
  path?: never;
@@ -24505,7 +25548,7 @@ export interface operations {
24505
25548
  "application/json": components["schemas"]["PlanAssignmentResponse"];
24506
25549
  };
24507
25550
  };
24508
- /** @description Validation failed or the organisation does not exist. */
25551
+ /** @description Validation failed, or the organisation or plan does not exist. */
24509
25552
  400: {
24510
25553
  headers: {
24511
25554
  [name: string]: unknown;
@@ -24602,6 +25645,189 @@ export interface operations {
24602
25645
  };
24603
25646
  };
24604
25647
  };
25648
+ getOrgPlan: {
25649
+ parameters: {
25650
+ query?: {
25651
+ /** @description Usage month (YYYY-MM, UTC). Returns the plan in effect at the end of that month, or now for the current month. Defaults to now. */
25652
+ month?: string;
25653
+ };
25654
+ header?: never;
25655
+ path?: never;
25656
+ cookie?: never;
25657
+ };
25658
+ requestBody?: never;
25659
+ responses: {
25660
+ /** @description The org's plan status. */
25661
+ 200: {
25662
+ headers: {
25663
+ [name: string]: unknown;
25664
+ };
25665
+ content: {
25666
+ "application/json": components["schemas"]["OrgPlanResponse"];
25667
+ };
25668
+ };
25669
+ /** @description Invalid month, or missing project scope. */
25670
+ 400: {
25671
+ headers: {
25672
+ [name: string]: unknown;
25673
+ };
25674
+ content: {
25675
+ "application/json": components["schemas"]["ErrorResponse"];
25676
+ };
25677
+ };
25678
+ };
25679
+ };
25680
+ listPlans: {
25681
+ parameters: {
25682
+ query?: {
25683
+ /** @description List this organisation's custom plans instead of the shared plans. */
25684
+ org_id?: number | null;
25685
+ };
25686
+ header?: never;
25687
+ path?: never;
25688
+ cookie?: never;
25689
+ };
25690
+ requestBody?: never;
25691
+ responses: {
25692
+ /** @description The plans. */
25693
+ 200: {
25694
+ headers: {
25695
+ [name: string]: unknown;
25696
+ };
25697
+ content: {
25698
+ "application/json": components["schemas"]["PlanListResponse"];
25699
+ };
25700
+ };
25701
+ };
25702
+ };
25703
+ createPlan: {
25704
+ parameters: {
25705
+ query?: never;
25706
+ header?: never;
25707
+ path?: never;
25708
+ cookie?: never;
25709
+ };
25710
+ requestBody?: {
25711
+ content: {
25712
+ "application/json": components["schemas"]["CreatePlanRequest"];
25713
+ };
25714
+ };
25715
+ responses: {
25716
+ /** @description The created plan. */
25717
+ 200: {
25718
+ headers: {
25719
+ [name: string]: unknown;
25720
+ };
25721
+ content: {
25722
+ "application/json": components["schemas"]["PlanResponse"];
25723
+ };
25724
+ };
25725
+ /** @description Validation failed. */
25726
+ 400: {
25727
+ headers: {
25728
+ [name: string]: unknown;
25729
+ };
25730
+ content: {
25731
+ "application/json": components["schemas"]["ErrorResponse"];
25732
+ };
25733
+ };
25734
+ /** @description A plan with this key or Dodo product already exists. */
25735
+ 409: {
25736
+ headers: {
25737
+ [name: string]: unknown;
25738
+ };
25739
+ content: {
25740
+ "application/json": components["schemas"]["ErrorResponse"];
25741
+ };
25742
+ };
25743
+ };
25744
+ };
25745
+ getPlanById: {
25746
+ parameters: {
25747
+ query?: never;
25748
+ header?: never;
25749
+ path: {
25750
+ /** @description Plan ID. */
25751
+ id: number;
25752
+ };
25753
+ cookie?: never;
25754
+ };
25755
+ requestBody?: never;
25756
+ responses: {
25757
+ /** @description The plan. */
25758
+ 200: {
25759
+ headers: {
25760
+ [name: string]: unknown;
25761
+ };
25762
+ content: {
25763
+ "application/json": components["schemas"]["PlanResponse"];
25764
+ };
25765
+ };
25766
+ /** @description Invalid plan id. */
25767
+ 400: {
25768
+ headers: {
25769
+ [name: string]: unknown;
25770
+ };
25771
+ content: {
25772
+ "application/json": components["schemas"]["ErrorResponse"];
25773
+ };
25774
+ };
25775
+ /** @description Plan not found. */
25776
+ 404: {
25777
+ headers: {
25778
+ [name: string]: unknown;
25779
+ };
25780
+ content: {
25781
+ "application/json": components["schemas"]["ErrorResponse"];
25782
+ };
25783
+ };
25784
+ };
25785
+ };
25786
+ updatePlan: {
25787
+ parameters: {
25788
+ query?: never;
25789
+ header?: never;
25790
+ path: {
25791
+ /** @description Plan ID. */
25792
+ id: number;
25793
+ };
25794
+ cookie?: never;
25795
+ };
25796
+ requestBody?: {
25797
+ content: {
25798
+ "application/json": components["schemas"]["UpdatePlanRequest"];
25799
+ };
25800
+ };
25801
+ responses: {
25802
+ /** @description The updated plan. */
25803
+ 200: {
25804
+ headers: {
25805
+ [name: string]: unknown;
25806
+ };
25807
+ content: {
25808
+ "application/json": components["schemas"]["PlanResponse"];
25809
+ };
25810
+ };
25811
+ /** @description Validation failed. */
25812
+ 400: {
25813
+ headers: {
25814
+ [name: string]: unknown;
25815
+ };
25816
+ content: {
25817
+ "application/json": components["schemas"]["ErrorResponse"];
25818
+ };
25819
+ };
25820
+ /** @description Plan not found. */
25821
+ 404: {
25822
+ headers: {
25823
+ [name: string]: unknown;
25824
+ };
25825
+ content: {
25826
+ "application/json": components["schemas"]["ErrorResponse"];
25827
+ };
25828
+ };
25829
+ };
25830
+ };
24605
25831
  listProjectAddons: {
24606
25832
  parameters: {
24607
25833
  query?: never;
@@ -24724,7 +25950,7 @@ export interface operations {
24724
25950
  "application/json": components["schemas"]["ErrorResponse"];
24725
25951
  };
24726
25952
  };
24727
- /** @description effective_from / order_form_line_id require super admin. */
25953
+ /** @description effective_from / plan_id require super admin. */
24728
25954
  403: {
24729
25955
  headers: {
24730
25956
  [name: string]: unknown;
@@ -26502,30 +27728,7 @@ export interface operations {
26502
27728
  };
26503
27729
  };
26504
27730
  };
26505
- listRunnerBackends: {
26506
- parameters: {
26507
- query?: {
26508
- /** @description Only this organisation's backends. */
26509
- org_id?: number | null;
26510
- };
26511
- header?: never;
26512
- path?: never;
26513
- cookie?: never;
26514
- };
26515
- requestBody?: never;
26516
- responses: {
26517
- /** @description The runner backends. */
26518
- 200: {
26519
- headers: {
26520
- [name: string]: unknown;
26521
- };
26522
- content: {
26523
- "application/json": components["schemas"]["RunnerBackendListResponse"];
26524
- };
26525
- };
26526
- };
26527
- };
26528
- createRunnerBackend: {
27731
+ claimRunnerBackend: {
26529
27732
  parameters: {
26530
27733
  query?: never;
26531
27734
  header?: never;
@@ -26534,20 +27737,20 @@ export interface operations {
26534
27737
  };
26535
27738
  requestBody?: {
26536
27739
  content: {
26537
- "application/json": components["schemas"]["CreateRunnerBackendBody"];
27740
+ "application/json": components["schemas"]["ClaimRunnerBackendBody"];
26538
27741
  };
26539
27742
  };
26540
27743
  responses: {
26541
- /** @description The registered backend. */
27744
+ /** @description The backend after the call. */
26542
27745
  200: {
26543
27746
  headers: {
26544
27747
  [name: string]: unknown;
26545
27748
  };
26546
27749
  content: {
26547
- "application/json": components["schemas"]["RunnerBackendResponse"];
27750
+ "application/json": components["schemas"]["ClaimRunnerBackendResponse"];
26548
27751
  };
26549
27752
  };
26550
- /** @description Invalid registration. */
27753
+ /** @description The stack's resources are not where Empirical expects. */
26551
27754
  400: {
26552
27755
  headers: {
26553
27756
  [name: string]: unknown;
@@ -26556,21 +27759,158 @@ export interface operations {
26556
27759
  "application/json": components["schemas"]["ErrorResponse"];
26557
27760
  };
26558
27761
  };
26559
- };
26560
- };
26561
- getRunnerBackend: {
26562
- parameters: {
27762
+ /** @description The stack is in a different account or region than the registration. */
27763
+ 403: {
27764
+ headers: {
27765
+ [name: string]: unknown;
27766
+ };
27767
+ content: {
27768
+ "application/json": components["schemas"]["ErrorResponse"];
27769
+ };
27770
+ };
27771
+ /** @description Unknown registration token. */
27772
+ 404: {
27773
+ headers: {
27774
+ [name: string]: unknown;
27775
+ };
27776
+ content: {
27777
+ "application/json": components["schemas"]["ErrorResponse"];
27778
+ };
27779
+ };
27780
+ /** @description The registration was claimed by another stack. */
27781
+ 409: {
27782
+ headers: {
27783
+ [name: string]: unknown;
27784
+ };
27785
+ content: {
27786
+ "application/json": components["schemas"]["ErrorResponse"];
27787
+ };
27788
+ };
27789
+ /** @description The registration link expired. */
27790
+ 410: {
27791
+ headers: {
27792
+ [name: string]: unknown;
27793
+ };
27794
+ content: {
27795
+ "application/json": components["schemas"]["ErrorResponse"];
27796
+ };
27797
+ };
27798
+ /** @description Empirical assumed the role but a check failed. */
27799
+ 422: {
27800
+ headers: {
27801
+ [name: string]: unknown;
27802
+ };
27803
+ content: {
27804
+ "application/json": components["schemas"]["ErrorResponse"];
27805
+ };
27806
+ };
27807
+ /** @description Empirical cannot assume the role yet; retry. */
27808
+ 503: {
27809
+ headers: {
27810
+ [name: string]: unknown;
27811
+ };
27812
+ content: {
27813
+ "application/json": components["schemas"]["ErrorResponse"];
27814
+ };
27815
+ };
27816
+ };
27817
+ };
27818
+ getProjectRunnerBackend: {
27819
+ parameters: {
27820
+ query?: never;
27821
+ header?: never;
27822
+ path?: never;
27823
+ cookie?: never;
27824
+ };
27825
+ requestBody?: never;
27826
+ responses: {
27827
+ /** @description The project's runner backend, or null. */
27828
+ 200: {
27829
+ headers: {
27830
+ [name: string]: unknown;
27831
+ };
27832
+ content: {
27833
+ "application/json": components["schemas"]["ProjectRunnerBackendDetailResponse"];
27834
+ };
27835
+ };
27836
+ /** @description Missing or invalid project scope. */
27837
+ 400: {
27838
+ headers: {
27839
+ [name: string]: unknown;
27840
+ };
27841
+ content: {
27842
+ "application/json": components["schemas"]["ErrorResponse"];
27843
+ };
27844
+ };
27845
+ /** @description Project not found or not accessible. */
27846
+ 404: {
27847
+ headers: {
27848
+ [name: string]: unknown;
27849
+ };
27850
+ content: {
27851
+ "application/json": components["schemas"]["ErrorResponse"];
27852
+ };
27853
+ };
27854
+ };
27855
+ };
27856
+ removeProjectRunnerBackend: {
27857
+ parameters: {
26563
27858
  query?: never;
26564
27859
  header?: never;
26565
27860
  path: {
26566
- /** @description Runner backend ID. */
27861
+ /** @description A runner backend of the project's organisation. */
26567
27862
  id: number | null;
26568
27863
  };
26569
27864
  cookie?: never;
26570
27865
  };
26571
27866
  requestBody?: never;
26572
27867
  responses: {
26573
- /** @description The runner backend. */
27868
+ /** @description The runner was removed. */
27869
+ 200: {
27870
+ headers: {
27871
+ [name: string]: unknown;
27872
+ };
27873
+ content: {
27874
+ "application/json": components["schemas"]["RemoveRunnerBackendResponse"];
27875
+ };
27876
+ };
27877
+ /** @description Runner backend not found in this organisation. */
27878
+ 404: {
27879
+ headers: {
27880
+ [name: string]: unknown;
27881
+ };
27882
+ content: {
27883
+ "application/json": components["schemas"]["ErrorResponse"];
27884
+ };
27885
+ };
27886
+ /** @description The runner is active or still used by a project. */
27887
+ 409: {
27888
+ headers: {
27889
+ [name: string]: unknown;
27890
+ };
27891
+ content: {
27892
+ "application/json": components["schemas"]["ErrorResponse"];
27893
+ };
27894
+ };
27895
+ };
27896
+ };
27897
+ renameProjectRunnerBackend: {
27898
+ parameters: {
27899
+ query?: never;
27900
+ header?: never;
27901
+ path: {
27902
+ /** @description A runner backend of the project's organisation. */
27903
+ id: number | null;
27904
+ };
27905
+ cookie?: never;
27906
+ };
27907
+ requestBody?: {
27908
+ content: {
27909
+ "application/json": components["schemas"]["RenameRunnerBackendBody"];
27910
+ };
27911
+ };
27912
+ responses: {
27913
+ /** @description The renamed runner. */
26574
27914
  200: {
26575
27915
  headers: {
26576
27916
  [name: string]: unknown;
@@ -26579,7 +27919,7 @@ export interface operations {
26579
27919
  "application/json": components["schemas"]["RunnerBackendResponse"];
26580
27920
  };
26581
27921
  };
26582
- /** @description Runner backend not found. */
27922
+ /** @description Runner backend not found in this organisation. */
26583
27923
  404: {
26584
27924
  headers: {
26585
27925
  [name: string]: unknown;
@@ -26590,12 +27930,12 @@ export interface operations {
26590
27930
  };
26591
27931
  };
26592
27932
  };
26593
- disableRunnerBackend: {
27933
+ disconnectProjectRunnerBackend: {
26594
27934
  parameters: {
26595
27935
  query?: never;
26596
27936
  header?: never;
26597
27937
  path: {
26598
- /** @description Runner backend ID. */
27938
+ /** @description A runner backend of the project's organisation. */
26599
27939
  id: number | null;
26600
27940
  };
26601
27941
  cookie?: never;
@@ -26608,10 +27948,10 @@ export interface operations {
26608
27948
  [name: string]: unknown;
26609
27949
  };
26610
27950
  content: {
26611
- "application/json": components["schemas"]["RunnerBackendResponse"];
27951
+ "application/json": components["schemas"]["DisconnectRunnerBackendResponse"];
26612
27952
  };
26613
27953
  };
26614
- /** @description Runner backend not found. */
27954
+ /** @description Runner backend not found in this organisation. */
26615
27955
  404: {
26616
27956
  headers: {
26617
27957
  [name: string]: unknown;
@@ -26622,12 +27962,12 @@ export interface operations {
26622
27962
  };
26623
27963
  };
26624
27964
  };
26625
- verifyRunnerBackend: {
27965
+ enableProjectRunnerBackend: {
26626
27966
  parameters: {
26627
27967
  query?: never;
26628
27968
  header?: never;
26629
27969
  path: {
26630
- /** @description Runner backend ID. */
27970
+ /** @description A runner backend of the project's organisation. */
26631
27971
  id: number | null;
26632
27972
  };
26633
27973
  cookie?: never;
@@ -26643,7 +27983,7 @@ export interface operations {
26643
27983
  "application/json": components["schemas"]["RunnerBackendVerifyResponse"];
26644
27984
  };
26645
27985
  };
26646
- /** @description Runner backend not found. */
27986
+ /** @description Runner backend not found in this organisation. */
26647
27987
  404: {
26648
27988
  headers: {
26649
27989
  [name: string]: unknown;
@@ -26652,27 +27992,39 @@ export interface operations {
26652
27992
  "application/json": components["schemas"]["ErrorResponse"];
26653
27993
  };
26654
27994
  };
27995
+ /** @description The backend is not disabled, or its stack was deleted. */
27996
+ 409: {
27997
+ headers: {
27998
+ [name: string]: unknown;
27999
+ };
28000
+ content: {
28001
+ "application/json": components["schemas"]["ErrorResponse"];
28002
+ };
28003
+ };
26655
28004
  };
26656
28005
  };
26657
- getProjectRunnerBackend: {
28006
+ createProjectRunnerBackendRegistration: {
26658
28007
  parameters: {
26659
28008
  query?: never;
26660
28009
  header?: never;
26661
- path?: never;
28010
+ path: {
28011
+ /** @description A runner backend of the project's organisation. */
28012
+ id: number | null;
28013
+ };
26662
28014
  cookie?: never;
26663
28015
  };
26664
28016
  requestBody?: never;
26665
28017
  responses: {
26666
- /** @description The project's runner backend, or null. */
28018
+ /** @description The registration link. */
26667
28019
  200: {
26668
28020
  headers: {
26669
28021
  [name: string]: unknown;
26670
28022
  };
26671
28023
  content: {
26672
- "application/json": components["schemas"]["ProjectRunnerBackendDetailResponse"];
28024
+ "application/json": components["schemas"]["RunnerBackendRegistrationResponse"];
26673
28025
  };
26674
28026
  };
26675
- /** @description Missing or invalid project scope. */
28027
+ /** @description The backend's region has no published template. */
26676
28028
  400: {
26677
28029
  headers: {
26678
28030
  [name: string]: unknown;
@@ -26681,7 +28033,7 @@ export interface operations {
26681
28033
  "application/json": components["schemas"]["ErrorResponse"];
26682
28034
  };
26683
28035
  };
26684
- /** @description Project not found or not accessible. */
28036
+ /** @description Runner backend not found in this organisation. */
26685
28037
  404: {
26686
28038
  headers: {
26687
28039
  [name: string]: unknown;
@@ -26690,9 +28042,27 @@ export interface operations {
26690
28042
  "application/json": components["schemas"]["ErrorResponse"];
26691
28043
  };
26692
28044
  };
28045
+ /** @description The backend is no longer pending. */
28046
+ 409: {
28047
+ headers: {
28048
+ [name: string]: unknown;
28049
+ };
28050
+ content: {
28051
+ "application/json": components["schemas"]["ErrorResponse"];
28052
+ };
28053
+ };
28054
+ /** @description The published template could not be read. */
28055
+ 502: {
28056
+ headers: {
28057
+ [name: string]: unknown;
28058
+ };
28059
+ content: {
28060
+ "application/json": components["schemas"]["ErrorResponse"];
28061
+ };
28062
+ };
26693
28063
  };
26694
28064
  };
26695
- verifyProjectRunnerBackend: {
28065
+ listProjectOrgRunnerBackends: {
26696
28066
  parameters: {
26697
28067
  query?: never;
26698
28068
  header?: never;
@@ -26701,13 +28071,13 @@ export interface operations {
26701
28071
  };
26702
28072
  requestBody?: never;
26703
28073
  responses: {
26704
- /** @description Every check, and the backend after them. */
28074
+ /** @description The runner backends. */
26705
28075
  200: {
26706
28076
  headers: {
26707
28077
  [name: string]: unknown;
26708
28078
  };
26709
28079
  content: {
26710
- "application/json": components["schemas"]["RunnerBackendVerifyResponse"];
28080
+ "application/json": components["schemas"]["OrgRunnerBackendListResponse"];
26711
28081
  };
26712
28082
  };
26713
28083
  /** @description Missing or invalid project scope. */
@@ -26719,8 +28089,32 @@ export interface operations {
26719
28089
  "application/json": components["schemas"]["ErrorResponse"];
26720
28090
  };
26721
28091
  };
26722
- /** @description Project not found, or it runs on Empirical-hosted. */
26723
- 404: {
28092
+ };
28093
+ };
28094
+ setScopedProjectRunnerBackend: {
28095
+ parameters: {
28096
+ query?: never;
28097
+ header?: never;
28098
+ path?: never;
28099
+ cookie?: never;
28100
+ };
28101
+ requestBody?: {
28102
+ content: {
28103
+ "application/json": components["schemas"]["SetProjectRunnerBackendBody"];
28104
+ };
28105
+ };
28106
+ responses: {
28107
+ /** @description The project's backend. */
28108
+ 200: {
28109
+ headers: {
28110
+ [name: string]: unknown;
28111
+ };
28112
+ content: {
28113
+ "application/json": components["schemas"]["ProjectRunnerBackendResponse"];
28114
+ };
28115
+ };
28116
+ /** @description The backend is not active. */
28117
+ 400: {
26724
28118
  headers: {
26725
28119
  [name: string]: unknown;
26726
28120
  };
@@ -26728,8 +28122,8 @@ export interface operations {
26728
28122
  "application/json": components["schemas"]["ErrorResponse"];
26729
28123
  };
26730
28124
  };
26731
- /** @description The runner backend is disabled. */
26732
- 409: {
28125
+ /** @description Runner backend not found in this organisation. */
28126
+ 404: {
26733
28127
  headers: {
26734
28128
  [name: string]: unknown;
26735
28129
  };
@@ -26739,32 +28133,76 @@ export interface operations {
26739
28133
  };
26740
28134
  };
26741
28135
  };
26742
- setProjectRunnerBackend: {
28136
+ setupProjectRunnerBackend: {
26743
28137
  parameters: {
26744
28138
  query?: never;
26745
28139
  header?: never;
26746
- path: {
26747
- /** @description Project ID. */
26748
- project_id: number | null;
26749
- };
28140
+ path?: never;
26750
28141
  cookie?: never;
26751
28142
  };
26752
28143
  requestBody?: {
26753
28144
  content: {
26754
- "application/json": components["schemas"]["SetProjectRunnerBackendBody"];
28145
+ "application/json": components["schemas"]["SetupRunnerBackendBody"];
26755
28146
  };
26756
28147
  };
26757
28148
  responses: {
26758
- /** @description The project's backend. */
28149
+ /** @description The backend and its link. */
26759
28150
  200: {
26760
28151
  headers: {
26761
28152
  [name: string]: unknown;
26762
28153
  };
26763
28154
  content: {
26764
- "application/json": components["schemas"]["ProjectRunnerBackendResponse"];
28155
+ "application/json": components["schemas"]["SetupRunnerBackendResponse"];
28156
+ };
28157
+ };
28158
+ /** @description The region has no published template. */
28159
+ 400: {
28160
+ headers: {
28161
+ [name: string]: unknown;
28162
+ };
28163
+ content: {
28164
+ "application/json": components["schemas"]["ErrorResponse"];
28165
+ };
28166
+ };
28167
+ /** @description A runner is already connected in that account and region, or a disconnected one's stack still exists. */
28168
+ 409: {
28169
+ headers: {
28170
+ [name: string]: unknown;
28171
+ };
28172
+ content: {
28173
+ "application/json": components["schemas"]["ErrorResponse"];
28174
+ };
28175
+ };
28176
+ /** @description The published template could not be read. */
28177
+ 502: {
28178
+ headers: {
28179
+ [name: string]: unknown;
28180
+ };
28181
+ content: {
28182
+ "application/json": components["schemas"]["ErrorResponse"];
28183
+ };
28184
+ };
28185
+ };
28186
+ };
28187
+ verifyProjectRunnerBackend: {
28188
+ parameters: {
28189
+ query?: never;
28190
+ header?: never;
28191
+ path?: never;
28192
+ cookie?: never;
28193
+ };
28194
+ requestBody?: never;
28195
+ responses: {
28196
+ /** @description Every check, and the backend after them. */
28197
+ 200: {
28198
+ headers: {
28199
+ [name: string]: unknown;
28200
+ };
28201
+ content: {
28202
+ "application/json": components["schemas"]["RunnerBackendVerifyResponse"];
26765
28203
  };
26766
28204
  };
26767
- /** @description The backend belongs to another org or is not active. */
28205
+ /** @description Missing or invalid project scope. */
26768
28206
  400: {
26769
28207
  headers: {
26770
28208
  [name: string]: unknown;
@@ -26773,7 +28211,7 @@ export interface operations {
26773
28211
  "application/json": components["schemas"]["ErrorResponse"];
26774
28212
  };
26775
28213
  };
26776
- /** @description Project or runner backend not found. */
28214
+ /** @description Project not found, or it runs on Empirical-hosted. */
26777
28215
  404: {
26778
28216
  headers: {
26779
28217
  [name: string]: unknown;
@@ -26782,6 +28220,15 @@ export interface operations {
26782
28220
  "application/json": components["schemas"]["ErrorResponse"];
26783
28221
  };
26784
28222
  };
28223
+ /** @description The runner backend is disabled. */
28224
+ 409: {
28225
+ headers: {
28226
+ [name: string]: unknown;
28227
+ };
28228
+ content: {
28229
+ "application/json": components["schemas"]["ErrorResponse"];
28230
+ };
28231
+ };
26785
28232
  };
26786
28233
  };
26787
28234
  listSandboxSnapshots: {
@@ -26990,6 +28437,145 @@ export interface operations {
26990
28437
  };
26991
28438
  };
26992
28439
  };
28440
+ listSystemMessages: {
28441
+ parameters: {
28442
+ query?: {
28443
+ limit?: number;
28444
+ };
28445
+ header?: never;
28446
+ path?: never;
28447
+ cookie?: never;
28448
+ };
28449
+ requestBody?: never;
28450
+ responses: {
28451
+ /** @description Recent system messages, newest first. */
28452
+ 200: {
28453
+ headers: {
28454
+ [name: string]: unknown;
28455
+ };
28456
+ content: {
28457
+ "application/json": components["schemas"]["SystemMessageListResponse"];
28458
+ };
28459
+ };
28460
+ };
28461
+ };
28462
+ createSystemMessage: {
28463
+ parameters: {
28464
+ query?: never;
28465
+ header?: never;
28466
+ path?: never;
28467
+ cookie?: never;
28468
+ };
28469
+ requestBody?: {
28470
+ content: {
28471
+ "application/json": components["schemas"]["CreateSystemMessageRequest"];
28472
+ };
28473
+ };
28474
+ responses: {
28475
+ /** @description The message and its per-project delivery. */
28476
+ 200: {
28477
+ headers: {
28478
+ [name: string]: unknown;
28479
+ };
28480
+ content: {
28481
+ "application/json": components["schemas"]["CreateSystemMessageResponse"];
28482
+ };
28483
+ };
28484
+ /** @description A listed project does not exist. */
28485
+ 400: {
28486
+ headers: {
28487
+ [name: string]: unknown;
28488
+ };
28489
+ content: {
28490
+ "application/json": components["schemas"]["ErrorResponse"];
28491
+ };
28492
+ };
28493
+ /** @description Broadcast requested but no project has an open manager session. */
28494
+ 422: {
28495
+ headers: {
28496
+ [name: string]: unknown;
28497
+ };
28498
+ content: {
28499
+ "application/json": components["schemas"]["ErrorResponse"];
28500
+ };
28501
+ };
28502
+ };
28503
+ };
28504
+ getSystemMessage: {
28505
+ parameters: {
28506
+ query?: never;
28507
+ header?: never;
28508
+ path: {
28509
+ id: number;
28510
+ };
28511
+ cookie?: never;
28512
+ };
28513
+ requestBody?: never;
28514
+ responses: {
28515
+ /** @description The message and its per-project status. */
28516
+ 200: {
28517
+ headers: {
28518
+ [name: string]: unknown;
28519
+ };
28520
+ content: {
28521
+ "application/json": components["schemas"]["SystemMessageDetailResponse"];
28522
+ };
28523
+ };
28524
+ /** @description System message not found. */
28525
+ 404: {
28526
+ headers: {
28527
+ [name: string]: unknown;
28528
+ };
28529
+ content: {
28530
+ "application/json": components["schemas"]["ErrorResponse"];
28531
+ };
28532
+ };
28533
+ };
28534
+ };
28535
+ ackSystemMessage: {
28536
+ parameters: {
28537
+ query?: never;
28538
+ header?: never;
28539
+ path: {
28540
+ id: number;
28541
+ };
28542
+ cookie?: never;
28543
+ };
28544
+ requestBody?: {
28545
+ content: {
28546
+ "application/json": components["schemas"]["AckSystemMessageRequest"];
28547
+ };
28548
+ };
28549
+ responses: {
28550
+ /** @description The recorded acknowledgement. */
28551
+ 200: {
28552
+ headers: {
28553
+ [name: string]: unknown;
28554
+ };
28555
+ content: {
28556
+ "application/json": components["schemas"]["AckSystemMessageResponse"];
28557
+ };
28558
+ };
28559
+ /** @description Caller is not a manager chat session. */
28560
+ 403: {
28561
+ headers: {
28562
+ [name: string]: unknown;
28563
+ };
28564
+ content: {
28565
+ "application/json": components["schemas"]["ErrorResponse"];
28566
+ };
28567
+ };
28568
+ /** @description System message was not sent to this project. */
28569
+ 404: {
28570
+ headers: {
28571
+ [name: string]: unknown;
28572
+ };
28573
+ content: {
28574
+ "application/json": components["schemas"]["ErrorResponse"];
28575
+ };
28576
+ };
28577
+ };
28578
+ };
26993
28579
  ingestTestCaseRunEndEvent: {
26994
28580
  parameters: {
26995
28581
  query?: never;