@empiricalrun/playwright-utils 0.60.3 → 0.61.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -211,6 +211,26 @@ export interface paths {
211
211
  patch?: never;
212
212
  trace?: never;
213
213
  };
214
+ "/api/test-runs/{id}/linked-changes": {
215
+ parameters: {
216
+ query?: never;
217
+ header?: never;
218
+ path?: never;
219
+ cookie?: never;
220
+ };
221
+ /**
222
+ * ⚙️ 🧪 Get linked test changes for a run
223
+ * @description For a run triggered by an app pull request, evaluates the same-name test branch live on GitHub (the state behind the "Empirical linked test changes" check) and returns the latest check written for the PR. Addressed by the database id. Serves the dashboard UI.
224
+ */
225
+ get: operations["getTestRunLinkedChanges"];
226
+ put?: never;
227
+ post?: never;
228
+ delete?: never;
229
+ options?: never;
230
+ head?: never;
231
+ patch?: never;
232
+ trace?: never;
233
+ };
214
234
  "/api/test-runs/{id}/logs": {
215
235
  parameters: {
216
236
  query?: never;
@@ -1129,7 +1149,7 @@ export interface paths {
1129
1149
  put?: never;
1130
1150
  /**
1131
1151
  * 🤖 Post a Slack message
1132
- * @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.
1133
1153
  */
1134
1154
  post: operations["slackSendMessage"];
1135
1155
  delete?: never;
@@ -1743,7 +1763,7 @@ export interface paths {
1743
1763
  put?: never;
1744
1764
  /**
1745
1765
  * 🤖 Proxy a GitHub API request
1746
- * @description Forwards an authenticated request to the GitHub API via the main App installation and returns the GitHub response verbatim. Merging a pull request with `merge_method` `squash` or `rebase` is rejected; only merge commits are allowed. Other writes to a project's default or protected branches are refused, as git-worker refuses the equivalent push. Project API keys are read-only. Sandbox-delegation principals are additionally constrained by per-session proxy rules.
1766
+ * @description Forwards an authenticated request to the GitHub API and returns the GitHub response verbatim. The request's project (bound token, or the `x-project-id`/`x-project-slug` header) picks the GitHub App: its own repo goes through the main App; another repo the project's org installed the reporter App on is read through the reporter App, and writes to it are rejected. Without a project, the main App is used. Merging a pull request with `merge_method` `squash` or `rebase` is rejected; only merge commits are allowed. Other writes to a project's default or protected branches are refused, as git-worker refuses the equivalent push. Project API keys are read-only. Sandbox-delegation principals are additionally constrained by per-session proxy rules.
1747
1767
  */
1748
1768
  post: operations["githubProxy"];
1749
1769
  delete?: never;
@@ -1945,6 +1965,66 @@ export interface paths {
1945
1965
  patch: operations["updateApiKey"];
1946
1966
  trace?: never;
1947
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/usage-limit": {
1989
+ parameters: {
1990
+ query?: never;
1991
+ header?: never;
1992
+ path?: never;
1993
+ cookie?: never;
1994
+ };
1995
+ get?: never;
1996
+ /**
1997
+ * 🛡️ Set or remove the org's usage limit
1998
+ * @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.
1999
+ */
2000
+ put: operations["setUsageLimit"];
2001
+ post?: never;
2002
+ delete?: never;
2003
+ options?: never;
2004
+ head?: never;
2005
+ patch?: never;
2006
+ trace?: never;
2007
+ };
2008
+ "/api/billing/usage-limit/events": {
2009
+ parameters: {
2010
+ query?: never;
2011
+ header?: never;
2012
+ path?: never;
2013
+ cookie?: never;
2014
+ };
2015
+ /**
2016
+ * 🛡️ List the usage limit's history
2017
+ * @description Changes to the org's usage limit and the alerts and blocks it caused, newest first.
2018
+ */
2019
+ get: operations["listUsageLimitEvents"];
2020
+ put?: never;
2021
+ post?: never;
2022
+ delete?: never;
2023
+ options?: never;
2024
+ head?: never;
2025
+ patch?: never;
2026
+ trace?: never;
2027
+ };
1948
2028
  "/api/chat-sessions": {
1949
2029
  parameters: {
1950
2030
  query?: never;
@@ -2900,7 +2980,7 @@ export interface paths {
2900
2980
  };
2901
2981
  /**
2902
2982
  * ⚙️ List reporter deliveries
2903
- * @description Lists the check runs and PR comments the reporter App delivered for a project, newest first. Each row is the latest state of one check run (per test run) or one PR comment (per PR + environment).
2983
+ * @description Lists the check runs, PR comments and linked test changes checks the reporter App delivered for a project, newest first. Each row is the latest state of one check run (per test run), one PR comment (per PR + environment) or one linked test changes check (per app PR).
2904
2984
  */
2905
2985
  get: operations["listReporterDeliveries"];
2906
2986
  put?: never;
@@ -3015,6 +3095,26 @@ export interface paths {
3015
3095
  patch?: never;
3016
3096
  trace?: never;
3017
3097
  };
3098
+ "/api/github/reporter-app/pull-request": {
3099
+ parameters: {
3100
+ query?: never;
3101
+ header?: never;
3102
+ path?: never;
3103
+ cookie?: never;
3104
+ };
3105
+ /**
3106
+ * ⚙️ Get a delivery's pull request
3107
+ * @description Reads an app PR live from GitHub through the project org's reporter App installation, and compares its current head with the commit a delivery was written on.
3108
+ */
3109
+ get: operations["getReporterPullRequest"];
3110
+ put?: never;
3111
+ post?: never;
3112
+ delete?: never;
3113
+ options?: never;
3114
+ head?: never;
3115
+ patch?: never;
3116
+ trace?: never;
3117
+ };
3018
3118
  "/api/github/tree": {
3019
3119
  parameters: {
3020
3120
  query?: never;
@@ -3331,6 +3431,26 @@ export interface paths {
3331
3431
  patch?: never;
3332
3432
  trace?: never;
3333
3433
  };
3434
+ "/api/invoices/{id}/email-preview": {
3435
+ parameters: {
3436
+ query?: never;
3437
+ header?: never;
3438
+ path?: never;
3439
+ cookie?: never;
3440
+ };
3441
+ /**
3442
+ * 🛡️ Preview an invoice email
3443
+ * @description Renders the invoice email exactly as `POST /{id}/send` would send it, without sending anything.
3444
+ */
3445
+ get: operations["previewInvoiceEmail"];
3446
+ put?: never;
3447
+ post?: never;
3448
+ delete?: never;
3449
+ options?: never;
3450
+ head?: never;
3451
+ patch?: never;
3452
+ trace?: never;
3453
+ };
3334
3454
  "/api/invoices/{id}/generate": {
3335
3455
  parameters: {
3336
3456
  query?: never;
@@ -3422,7 +3542,7 @@ export interface paths {
3422
3542
  put?: never;
3423
3543
  /**
3424
3544
  * 🛡️ Send an invoice
3425
- * @description Emails the invoice PDF to the organisation's billing contacts and marks it as sent (unless `is_test_email` is set).
3545
+ * @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.
3426
3546
  */
3427
3547
  post: operations["sendInvoice"];
3428
3548
  delete?: never;
@@ -4175,7 +4295,7 @@ export interface paths {
4175
4295
  post?: never;
4176
4296
  /**
4177
4297
  * 🛡️ Remove a member from an organization
4178
- * @description Removes the org from the user's membership metadata. The removed member keeps access until their session token refreshes. Restricted to org members and super admins.
4298
+ * @description Removes the user's membership in the organization; access ends on their next request. Restricted to org members and super admins.
4179
4299
  */
4180
4300
  delete: operations["removeOrgMember"];
4181
4301
  options?: never;
@@ -4214,7 +4334,7 @@ export interface paths {
4214
4334
  put?: never;
4215
4335
  /**
4216
4336
  * ⚙️ Resolve org membership for a signed-in user
4217
- * @description Accepts pending invites for the email and matches org email domains; grants the union in the user's metadata. System-to-system callers only.
4337
+ * @description Grants super-admin to staff emails; for users with no org yet, accepts pending invites for the email and matches org email domains. Returns the user's memberships and super-admin flag. System-to-system callers only.
4218
4338
  */
4219
4339
  post: operations["resolveMembership"];
4220
4340
  delete?: never;
@@ -4232,13 +4352,13 @@ export interface paths {
4232
4352
  };
4233
4353
  /**
4234
4354
  * 🛡️ List plan assignments
4235
- * @description Returns a paginated list of plan assignments, optionally filtered by organisation and order-form line.
4355
+ * @description Returns a paginated list of plan assignments, optionally filtered by organisation and plan.
4236
4356
  */
4237
4357
  get: operations["listPlanAssignments"];
4238
4358
  put?: never;
4239
4359
  /**
4240
4360
  * 🛡️ Create a plan assignment
4241
- * @description Creates a plan assignment for an existing organisation.
4361
+ * @description Puts an existing organisation on a plan from `effective_from`.
4242
4362
  */
4243
4363
  post: operations["createPlanAssignment"];
4244
4364
  delete?: never;
@@ -4271,6 +4391,74 @@ export interface paths {
4271
4391
  patch: operations["updatePlanAssignment"];
4272
4392
  trace?: never;
4273
4393
  };
4394
+ "/api/plan-assignments/org": {
4395
+ parameters: {
4396
+ query?: never;
4397
+ header?: never;
4398
+ path?: never;
4399
+ cookie?: never;
4400
+ };
4401
+ /**
4402
+ * 🛡️ Get the org's plan
4403
+ * @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.
4404
+ */
4405
+ get: operations["getOrgPlan"];
4406
+ put?: never;
4407
+ post?: never;
4408
+ delete?: never;
4409
+ options?: never;
4410
+ head?: never;
4411
+ patch?: never;
4412
+ trace?: never;
4413
+ };
4414
+ "/api/plans": {
4415
+ parameters: {
4416
+ query?: never;
4417
+ header?: never;
4418
+ path?: never;
4419
+ cookie?: never;
4420
+ };
4421
+ /**
4422
+ * 🛡️ List plans
4423
+ * @description Returns the shared plans with their meters, or one organisation's custom plans.
4424
+ */
4425
+ get: operations["listPlans"];
4426
+ put?: never;
4427
+ /**
4428
+ * 🛡️ Create a shared plan
4429
+ * @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.
4430
+ */
4431
+ post: operations["createPlan"];
4432
+ delete?: never;
4433
+ options?: never;
4434
+ head?: never;
4435
+ patch?: never;
4436
+ trace?: never;
4437
+ };
4438
+ "/api/plans/{id}": {
4439
+ parameters: {
4440
+ query?: never;
4441
+ header?: never;
4442
+ path?: never;
4443
+ cookie?: never;
4444
+ };
4445
+ /**
4446
+ * 🛡️ Get a plan
4447
+ * @description Retrieves a single plan with its meters.
4448
+ */
4449
+ get: operations["getPlanById"];
4450
+ put?: never;
4451
+ post?: never;
4452
+ delete?: never;
4453
+ options?: never;
4454
+ head?: never;
4455
+ /**
4456
+ * 🛡️ Update a plan's status
4457
+ * @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.
4458
+ */
4459
+ patch: operations["updatePlan"];
4460
+ trace?: never;
4461
+ };
4274
4462
  "/api/project-addons": {
4275
4463
  parameters: {
4276
4464
  query?: never;
@@ -4967,7 +5155,7 @@ export interface paths {
4967
5155
  patch?: never;
4968
5156
  trace?: never;
4969
5157
  };
4970
- "/api/sandbox-snapshots": {
5158
+ "/api/runner-backends": {
4971
5159
  parameters: {
4972
5160
  query?: never;
4973
5161
  header?: never;
@@ -4975,43 +5163,43 @@ export interface paths {
4975
5163
  cookie?: never;
4976
5164
  };
4977
5165
  /**
4978
- * ⚙️ List sandbox snapshots
4979
- * @description Returns the most recent sandbox snapshots for the scoped project.
5166
+ * 🛡️ 🧪 List runner backends
5167
+ * @description Lists customer-hosted runner backends, optionally for one org.
4980
5168
  */
4981
- get: operations["listSandboxSnapshots"];
5169
+ get: operations["listRunnerBackends"];
4982
5170
  put?: never;
4983
5171
  /**
4984
- * ⚙️ Create a sandbox snapshot
4985
- * @description Enqueues a snapshot-create job for the scoped project and base template.
5172
+ * 🛡️ 🧪 Register a runner backend
5173
+ * @description Registers an installation as `pending` and returns the external ID its role must require. Run `verify` before linking projects.
4986
5174
  */
4987
- post: operations["createSandboxSnapshot"];
5175
+ post: operations["createRunnerBackend"];
4988
5176
  delete?: never;
4989
5177
  options?: never;
4990
5178
  head?: never;
4991
5179
  patch?: never;
4992
5180
  trace?: never;
4993
5181
  };
4994
- "/api/sandbox-snapshots/rebuild": {
5182
+ "/api/runner-backends/{id}": {
4995
5183
  parameters: {
4996
5184
  query?: never;
4997
5185
  header?: never;
4998
5186
  path?: never;
4999
5187
  cookie?: never;
5000
5188
  };
5001
- get?: never;
5002
- put?: never;
5003
5189
  /**
5004
- * ⚙️ Rebuild project sandbox snapshots
5005
- * @description Enqueues snapshot-create jobs for every project that already has a snapshot for the given provider and base template. Only `e2b` is supported.
5190
+ * 🛡️ 🧪 Get a runner backend
5191
+ * @description Returns one runner backend.
5006
5192
  */
5007
- post: operations["rebuildSandboxSnapshots"];
5193
+ get: operations["getRunnerBackend"];
5194
+ put?: never;
5195
+ post?: never;
5008
5196
  delete?: never;
5009
5197
  options?: never;
5010
5198
  head?: never;
5011
5199
  patch?: never;
5012
5200
  trace?: never;
5013
5201
  };
5014
- "/api/sandbox-snapshots/rebuild-by-template": {
5202
+ "/api/runner-backends/{id}/disable": {
5015
5203
  parameters: {
5016
5204
  query?: never;
5017
5205
  header?: never;
@@ -5021,17 +5209,17 @@ export interface paths {
5021
5209
  get?: never;
5022
5210
  put?: never;
5023
5211
  /**
5024
- * ⚙️ Rebuild sandbox snapshots by template
5025
- * @description Enqueues snapshot-create jobs for every project that has an `e2b` snapshot for the given base template.
5212
+ * 🛡️ 🧪 Disable a runner backend
5213
+ * @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.
5026
5214
  */
5027
- post: operations["rebuildSandboxSnapshotsByTemplate"];
5215
+ post: operations["disableRunnerBackend"];
5028
5216
  delete?: never;
5029
5217
  options?: never;
5030
5218
  head?: never;
5031
5219
  patch?: never;
5032
5220
  trace?: never;
5033
5221
  };
5034
- "/api/sandbox-snapshots/sources/upsert": {
5222
+ "/api/runner-backends/{id}/verify": {
5035
5223
  parameters: {
5036
5224
  query?: never;
5037
5225
  header?: never;
@@ -5041,29 +5229,29 @@ export interface paths {
5041
5229
  get?: never;
5042
5230
  put?: never;
5043
5231
  /**
5044
- * ⚙️ Upsert sandbox snapshot sources
5045
- * @description Upserts one or more snapshot source rows; called by sandbox-template CI.
5232
+ * 🛡️ 🧪 Verify a runner backend
5233
+ * @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.
5046
5234
  */
5047
- post: operations["upsertSandboxSnapshotSources"];
5235
+ post: operations["verifyRunnerBackend"];
5048
5236
  delete?: never;
5049
5237
  options?: never;
5050
5238
  head?: never;
5051
5239
  patch?: never;
5052
5240
  trace?: never;
5053
5241
  };
5054
- "/api/test-runs/events": {
5242
+ "/api/runner-backends/project": {
5055
5243
  parameters: {
5056
5244
  query?: never;
5057
5245
  header?: never;
5058
5246
  path?: never;
5059
5247
  cookie?: never;
5060
5248
  };
5061
- get?: never;
5062
5249
  /**
5063
- * ⚙️ Ingest a test-case run-end event
5064
- * @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.
5250
+ * ⚙️ 🧪 Get the scoped project's runner backend
5251
+ * @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.
5065
5252
  */
5066
- put: operations["ingestTestCaseRunEndEvent"];
5253
+ get: operations["getProjectRunnerBackend"];
5254
+ put?: never;
5067
5255
  post?: never;
5068
5256
  delete?: never;
5069
5257
  options?: never;
@@ -5071,7 +5259,7 @@ export interface paths {
5071
5259
  patch?: never;
5072
5260
  trace?: never;
5073
5261
  };
5074
- "/api/test-runs/shards": {
5262
+ "/api/runner-backends/project/verify": {
5075
5263
  parameters: {
5076
5264
  query?: never;
5077
5265
  header?: never;
@@ -5081,17 +5269,17 @@ export interface paths {
5081
5269
  get?: never;
5082
5270
  put?: never;
5083
5271
  /**
5084
- * ⚙️ Update a shard's state
5085
- * @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.
5272
+ * ⚙️ 🧪 Re-check the scoped project's runner backend
5273
+ * @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.
5086
5274
  */
5087
- post: operations["updateTestRunShardState"];
5275
+ post: operations["verifyProjectRunnerBackend"];
5088
5276
  delete?: never;
5089
5277
  options?: never;
5090
5278
  head?: never;
5091
5279
  patch?: never;
5092
5280
  trace?: never;
5093
5281
  };
5094
- "/api/twocaptcha/proxy": {
5282
+ "/api/runner-backends/projects/{project_id}": {
5095
5283
  parameters: {
5096
5284
  query?: never;
5097
5285
  header?: never;
@@ -5099,19 +5287,19 @@ export interface paths {
5099
5287
  cookie?: never;
5100
5288
  };
5101
5289
  get?: never;
5102
- put?: never;
5103
5290
  /**
5104
- * ⚙️ Proxy a 2Captcha request
5105
- * @description Forwards a request to the 2Captcha API, injecting the configured `clientKey` into the payload.
5291
+ * 🛡️ 🧪 Set a project's runner backend
5292
+ * @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.
5106
5293
  */
5107
- post: operations["proxyTwoCaptcha"];
5294
+ put: operations["setProjectRunnerBackend"];
5295
+ post?: never;
5108
5296
  delete?: never;
5109
5297
  options?: never;
5110
5298
  head?: never;
5111
5299
  patch?: never;
5112
5300
  trace?: never;
5113
5301
  };
5114
- "/api/ui/v1/test-runs/{id}": {
5302
+ "/api/sandbox-snapshots": {
5115
5303
  parameters: {
5116
5304
  query?: never;
5117
5305
  header?: never;
@@ -5119,39 +5307,43 @@ export interface paths {
5119
5307
  cookie?: never;
5120
5308
  };
5121
5309
  /**
5122
- * Get test run detail (UI)
5123
- * @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.
5310
+ * ⚙️ List sandbox snapshots
5311
+ * @description Returns the most recent sandbox snapshots for the scoped project.
5124
5312
  */
5125
- get: operations["getUiTestRunDetail"];
5313
+ get: operations["listSandboxSnapshots"];
5126
5314
  put?: never;
5127
- post?: never;
5315
+ /**
5316
+ * ⚙️ Create a sandbox snapshot
5317
+ * @description Enqueues a snapshot-create job for the scoped project and base template.
5318
+ */
5319
+ post: operations["createSandboxSnapshot"];
5128
5320
  delete?: never;
5129
5321
  options?: never;
5130
5322
  head?: never;
5131
5323
  patch?: never;
5132
5324
  trace?: never;
5133
5325
  };
5134
- "/api/ui/v1/test-runs/{id}/live": {
5326
+ "/api/sandbox-snapshots/rebuild": {
5135
5327
  parameters: {
5136
5328
  query?: never;
5137
5329
  header?: never;
5138
5330
  path?: never;
5139
5331
  cookie?: never;
5140
5332
  };
5333
+ get?: never;
5334
+ put?: never;
5141
5335
  /**
5142
- * Refresh a live test run (UI)
5143
- * @description Returns only test-run fields that can change while the hydrated dashboard page is open. It deliberately omits ledger cases, test-case rows, static run metadata, user lookups, pull-request resolution, and chat-session lookup.
5336
+ * ⚙️ Rebuild project sandbox snapshots
5337
+ * @description Enqueues snapshot-create jobs for every project that already has a snapshot for the given provider and base template. Only `e2b` is supported.
5144
5338
  */
5145
- get: operations["getUiLiveTestRun"];
5146
- put?: never;
5147
- post?: never;
5339
+ post: operations["rebuildSandboxSnapshots"];
5148
5340
  delete?: never;
5149
5341
  options?: never;
5150
5342
  head?: never;
5151
5343
  patch?: never;
5152
5344
  trace?: never;
5153
5345
  };
5154
- "/api/upload": {
5346
+ "/api/sandbox-snapshots/rebuild-by-template": {
5155
5347
  parameters: {
5156
5348
  query?: never;
5157
5349
  header?: never;
@@ -5161,17 +5353,17 @@ export interface paths {
5161
5353
  get?: never;
5162
5354
  put?: never;
5163
5355
  /**
5164
- * ⚙️ Create presigned upload URLs
5165
- * @description Generates S3-style presigned PUT URLs for uploading files directly to an R2 bucket. Each uploading client must send the same Content-Type used here.
5356
+ * ⚙️ Rebuild sandbox snapshots by template
5357
+ * @description Enqueues snapshot-create jobs for every project that has an `e2b` snapshot for the given base template.
5166
5358
  */
5167
- post: operations["createUploadUrls"];
5359
+ post: operations["rebuildSandboxSnapshotsByTemplate"];
5168
5360
  delete?: never;
5169
5361
  options?: never;
5170
5362
  head?: never;
5171
5363
  patch?: never;
5172
5364
  trace?: never;
5173
5365
  };
5174
- "/api/upload/loom": {
5366
+ "/api/sandbox-snapshots/sources/upsert": {
5175
5367
  parameters: {
5176
5368
  query?: never;
5177
5369
  header?: never;
@@ -5181,76 +5373,294 @@ export interface paths {
5181
5373
  get?: never;
5182
5374
  put?: never;
5183
5375
  /**
5184
- * ⚙️ Import a Loom video
5185
- * @description Downloads a Loom share video and stores it in the dashboard uploads bucket, returning its public URL.
5376
+ * ⚙️ Upsert sandbox snapshot sources
5377
+ * @description Upserts one or more snapshot source rows; called by sandbox-template CI.
5186
5378
  */
5187
- post: operations["uploadLoomVideo"];
5379
+ post: operations["upsertSandboxSnapshotSources"];
5188
5380
  delete?: never;
5189
5381
  options?: never;
5190
5382
  head?: never;
5191
5383
  patch?: never;
5192
5384
  trace?: never;
5193
5385
  };
5194
- "/api/users/github-link": {
5386
+ "/api/system-messages": {
5195
5387
  parameters: {
5196
5388
  query?: never;
5197
5389
  header?: never;
5198
5390
  path?: never;
5199
5391
  cookie?: never;
5200
5392
  };
5201
- /**
5202
- * ⚙️ List my GitHub links
5203
- * @description Returns the GitHub accounts linked to the current user.
5204
- */
5205
- get: operations["listMyGithubLinks"];
5393
+ /** 🛡️ 🧪 List system messages with delivery and ack counts */
5394
+ get: operations["listSystemMessages"];
5206
5395
  put?: never;
5207
5396
  /**
5208
- * ⚙️ Upsert a GitHub link
5209
- * @description Creates or updates the GitHub account link for the given user. Super-admin only.
5210
- */
5211
- post: operations["upsertGithubLink"];
5212
- /**
5213
- * ⚙️ Delete my GitHub link
5214
- * @description Deletes a GitHub link owned by the current user.
5397
+ * 🛡️ 🧪 Broadcast a system message to manager sessions
5398
+ * @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`.
5215
5399
  */
5216
- delete: operations["deleteMyGithubLink"];
5400
+ post: operations["createSystemMessage"];
5401
+ delete?: never;
5217
5402
  options?: never;
5218
5403
  head?: never;
5219
5404
  patch?: never;
5220
5405
  trace?: never;
5221
5406
  };
5222
- "/api/users/me/memberships": {
5407
+ "/api/system-messages/{id}": {
5223
5408
  parameters: {
5224
5409
  query?: never;
5225
5410
  header?: never;
5226
5411
  path?: never;
5227
5412
  cookie?: never;
5228
5413
  };
5229
- get?: never;
5414
+ /** 🛡️ 🧪 Get a system message's per-project delivery and ack status */
5415
+ get: operations["getSystemMessage"];
5230
5416
  put?: never;
5231
- /**
5232
- * ⚙️ Join organizations from pending invites
5233
- * @description Creates org memberships for the current user by accepting every pending invite addressed to their verified email.
5234
- */
5235
- post: operations["createMyMemberships"];
5417
+ post?: never;
5236
5418
  delete?: never;
5237
5419
  options?: never;
5238
5420
  head?: never;
5239
5421
  patch?: never;
5240
5422
  trace?: never;
5241
5423
  };
5242
- "/api/users/slack-link": {
5424
+ "/api/system-messages/{id}/ack": {
5243
5425
  parameters: {
5244
5426
  query?: never;
5245
5427
  header?: never;
5246
5428
  path?: never;
5247
5429
  cookie?: never;
5248
5430
  };
5431
+ get?: never;
5432
+ put?: never;
5249
5433
  /**
5250
- * ⚙️ List my Slack links
5251
- * @description Returns the Slack accounts linked to the current user.
5434
+ * 🧪 Acknowledge a system message from a manager session
5435
+ * @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.
5252
5436
  */
5253
- get: operations["listMySlackLinks"];
5437
+ post: operations["ackSystemMessage"];
5438
+ delete?: never;
5439
+ options?: never;
5440
+ head?: never;
5441
+ patch?: never;
5442
+ trace?: never;
5443
+ };
5444
+ "/api/test-runs/events": {
5445
+ parameters: {
5446
+ query?: never;
5447
+ header?: never;
5448
+ path?: never;
5449
+ cookie?: never;
5450
+ };
5451
+ get?: never;
5452
+ /**
5453
+ * ⚙️ Ingest a test-case run-end event
5454
+ * @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.
5455
+ */
5456
+ put: operations["ingestTestCaseRunEndEvent"];
5457
+ post?: never;
5458
+ delete?: never;
5459
+ options?: never;
5460
+ head?: never;
5461
+ patch?: never;
5462
+ trace?: never;
5463
+ };
5464
+ "/api/test-runs/shards": {
5465
+ parameters: {
5466
+ query?: never;
5467
+ header?: never;
5468
+ path?: never;
5469
+ cookie?: never;
5470
+ };
5471
+ get?: never;
5472
+ put?: never;
5473
+ /**
5474
+ * ⚙️ Update a shard's state
5475
+ * @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.
5476
+ */
5477
+ post: operations["updateTestRunShardState"];
5478
+ delete?: never;
5479
+ options?: never;
5480
+ head?: never;
5481
+ patch?: never;
5482
+ trace?: never;
5483
+ };
5484
+ "/api/twocaptcha/proxy": {
5485
+ parameters: {
5486
+ query?: never;
5487
+ header?: never;
5488
+ path?: never;
5489
+ cookie?: never;
5490
+ };
5491
+ get?: never;
5492
+ put?: never;
5493
+ /**
5494
+ * ⚙️ Proxy a 2Captcha request
5495
+ * @description Forwards a request to the 2Captcha API, injecting the configured `clientKey` into the payload.
5496
+ */
5497
+ post: operations["proxyTwoCaptcha"];
5498
+ delete?: never;
5499
+ options?: never;
5500
+ head?: never;
5501
+ patch?: never;
5502
+ trace?: never;
5503
+ };
5504
+ "/api/ui/v1/test-runs/{id}": {
5505
+ parameters: {
5506
+ query?: never;
5507
+ header?: never;
5508
+ path?: never;
5509
+ cookie?: never;
5510
+ };
5511
+ /**
5512
+ * Get test run detail (UI)
5513
+ * @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.
5514
+ */
5515
+ get: operations["getUiTestRunDetail"];
5516
+ put?: never;
5517
+ post?: never;
5518
+ delete?: never;
5519
+ options?: never;
5520
+ head?: never;
5521
+ patch?: never;
5522
+ trace?: never;
5523
+ };
5524
+ "/api/ui/v1/test-runs/{id}/live": {
5525
+ parameters: {
5526
+ query?: never;
5527
+ header?: never;
5528
+ path?: never;
5529
+ cookie?: never;
5530
+ };
5531
+ /**
5532
+ * Refresh a live test run (UI)
5533
+ * @description Returns only test-run fields that can change while the hydrated dashboard page is open. It deliberately omits ledger cases, test-case rows, static run metadata, user lookups, pull-request resolution, and chat-session lookup.
5534
+ */
5535
+ get: operations["getUiLiveTestRun"];
5536
+ put?: never;
5537
+ post?: never;
5538
+ delete?: never;
5539
+ options?: never;
5540
+ head?: never;
5541
+ patch?: never;
5542
+ trace?: never;
5543
+ };
5544
+ "/api/upload": {
5545
+ parameters: {
5546
+ query?: never;
5547
+ header?: never;
5548
+ path?: never;
5549
+ cookie?: never;
5550
+ };
5551
+ get?: never;
5552
+ put?: never;
5553
+ /**
5554
+ * ⚙️ Create presigned upload URLs
5555
+ * @description Generates S3-style presigned PUT URLs for uploading files directly to an R2 bucket. Each uploading client must send the same Content-Type used here.
5556
+ */
5557
+ post: operations["createUploadUrls"];
5558
+ delete?: never;
5559
+ options?: never;
5560
+ head?: never;
5561
+ patch?: never;
5562
+ trace?: never;
5563
+ };
5564
+ "/api/upload/loom": {
5565
+ parameters: {
5566
+ query?: never;
5567
+ header?: never;
5568
+ path?: never;
5569
+ cookie?: never;
5570
+ };
5571
+ get?: never;
5572
+ put?: never;
5573
+ /**
5574
+ * ⚙️ Import a Loom video
5575
+ * @description Downloads a Loom share video and stores it in the dashboard uploads bucket, returning its public URL.
5576
+ */
5577
+ post: operations["uploadLoomVideo"];
5578
+ delete?: never;
5579
+ options?: never;
5580
+ head?: never;
5581
+ patch?: never;
5582
+ trace?: never;
5583
+ };
5584
+ "/api/users/github-link": {
5585
+ parameters: {
5586
+ query?: never;
5587
+ header?: never;
5588
+ path?: never;
5589
+ cookie?: never;
5590
+ };
5591
+ /**
5592
+ * ⚙️ List my GitHub links
5593
+ * @description Returns the GitHub accounts linked to the current user.
5594
+ */
5595
+ get: operations["listMyGithubLinks"];
5596
+ put?: never;
5597
+ /**
5598
+ * ⚙️ Upsert a GitHub link
5599
+ * @description Creates or updates the GitHub account link for the given user. Super-admin only.
5600
+ */
5601
+ post: operations["upsertGithubLink"];
5602
+ /**
5603
+ * ⚙️ Delete my GitHub link
5604
+ * @description Deletes a GitHub link owned by the current user.
5605
+ */
5606
+ delete: operations["deleteMyGithubLink"];
5607
+ options?: never;
5608
+ head?: never;
5609
+ patch?: never;
5610
+ trace?: never;
5611
+ };
5612
+ "/api/users/me": {
5613
+ parameters: {
5614
+ query?: never;
5615
+ header?: never;
5616
+ path?: never;
5617
+ cookie?: never;
5618
+ };
5619
+ /**
5620
+ * Get the current user
5621
+ * @description Returns the signed-in user's id, email, org memberships and super-admin flag as used for authorization.
5622
+ */
5623
+ get: operations["getCurrentUser"];
5624
+ put?: never;
5625
+ post?: never;
5626
+ delete?: never;
5627
+ options?: never;
5628
+ head?: never;
5629
+ patch?: never;
5630
+ trace?: never;
5631
+ };
5632
+ "/api/users/me/memberships": {
5633
+ parameters: {
5634
+ query?: never;
5635
+ header?: never;
5636
+ path?: never;
5637
+ cookie?: never;
5638
+ };
5639
+ get?: never;
5640
+ put?: never;
5641
+ /**
5642
+ * ⚙️ Join organizations from pending invites
5643
+ * @description Creates org memberships for the current user by accepting every pending invite addressed to their verified email.
5644
+ */
5645
+ post: operations["createMyMemberships"];
5646
+ delete?: never;
5647
+ options?: never;
5648
+ head?: never;
5649
+ patch?: never;
5650
+ trace?: never;
5651
+ };
5652
+ "/api/users/slack-link": {
5653
+ parameters: {
5654
+ query?: never;
5655
+ header?: never;
5656
+ path?: never;
5657
+ cookie?: never;
5658
+ };
5659
+ /**
5660
+ * ⚙️ List my Slack links
5661
+ * @description Returns the Slack accounts linked to the current user.
5662
+ */
5663
+ get: operations["listMySlackLinks"];
5254
5664
  put?: never;
5255
5665
  post?: never;
5256
5666
  /**
@@ -5695,8 +6105,8 @@ export interface components {
5695
6105
  fx_rate: number | null;
5696
6106
  /** @description Billing line kind (`tier` or `addon`). */
5697
6107
  kind: string;
5698
- /** @description Originating order-form line ID, if any. */
5699
- order_form_line_id: number | null;
6108
+ /** @description Plan this charge was billed from, if any. */
6109
+ plan_id: number | null;
5700
6110
  /** @description Tier name, if applicable. */
5701
6111
  tier: string | null;
5702
6112
  /** @description Display label. */
@@ -5733,7 +6143,7 @@ export interface components {
5733
6143
  /** @enum {string} */
5734
6144
  kind?: "tier" | "addon";
5735
6145
  project_id?: number | null;
5736
- order_form_line_id?: number | null;
6146
+ plan_id?: number | null;
5737
6147
  tier?: string | null;
5738
6148
  label?: string | null;
5739
6149
  base_price_cents: number;
@@ -5898,7 +6308,8 @@ export interface components {
5898
6308
  label?: string | null;
5899
6309
  base_price_cents: number;
5900
6310
  meters?: {
5901
- meter: string;
6311
+ /** @enum {string} */
6312
+ meter: "test_suite_size" | "ai_credits" | "test_minutes" | "test_run_duration";
5902
6313
  included_qty?: number | null;
5903
6314
  overage_price_cents?: number | null;
5904
6315
  }[];
@@ -5924,7 +6335,8 @@ export interface components {
5924
6335
  label?: string | null;
5925
6336
  base_price_cents: number;
5926
6337
  meters?: {
5927
- meter: string;
6338
+ /** @enum {string} */
6339
+ meter: "test_suite_size" | "ai_credits" | "test_minutes" | "test_run_duration";
5928
6340
  included_qty?: number | null;
5929
6341
  overage_price_cents?: number | null;
5930
6342
  }[];
@@ -5933,6 +6345,31 @@ export interface components {
5933
6345
  OrderFormPdfUploadRequest: {
5934
6346
  pdf_base64: string;
5935
6347
  };
6348
+ OrgPlanResponse: {
6349
+ /** @description Response payload. */
6350
+ data: {
6351
+ /** @description Whether the org has a plan assignment in effect now. */
6352
+ has_plan: boolean;
6353
+ /** @description The shared plan in effect, or null when the org has no plan or is on a custom plan. */
6354
+ plan: {
6355
+ /** @description Plan name, e.g. `Managed`. */
6356
+ name: string;
6357
+ /** @description Currency of the prices below, e.g. `usd`. */
6358
+ currency: string;
6359
+ /** @description Monthly base price in cents of `currency`. */
6360
+ base_price_cents: number;
6361
+ /** @description Metered allowances and overage rates. */
6362
+ meters: {
6363
+ /** @description Meter key, e.g. `ai_credits` or `test_minutes`. */
6364
+ meter: string;
6365
+ /** @description Units included each month. */
6366
+ included_qty: number | null;
6367
+ /** @description Price per unit above the allowance, in cents of `currency`; may be fractional. */
6368
+ overage_price_cents: number | null;
6369
+ }[];
6370
+ } | null;
6371
+ };
6372
+ };
5936
6373
  PlanAssignmentListResponse: {
5937
6374
  /** @description The page of plan assignments. */
5938
6375
  data: {
@@ -5945,18 +6382,14 @@ export interface components {
5945
6382
  id: number;
5946
6383
  /** @description Organisation this assignment belongs to. */
5947
6384
  org_id: number;
5948
- /** @description Order form line that backs this assignment. */
5949
- order_form_line_id: number;
6385
+ /** @description Plan the organisation is on. */
6386
+ plan_id: number;
5950
6387
  /** @description ISO-8601 timestamp the assignment starts. */
5951
6388
  effective_from: string;
5952
6389
  /** @description ISO-8601 timestamp the assignment ends, or null for open-ended. */
5953
6390
  effective_to: string | null;
5954
6391
  /** @description Origin: `order_form`, `derived_from_invoice`, or `manual`. */
5955
6392
  source: string;
5956
- /** @description Whether the assignment is pinned. */
5957
- pinned: boolean;
5958
- /** @description Arbitrary JSON overrides for the plan, or null. */
5959
- custom_overrides?: unknown;
5960
6393
  /** @description ISO-8601 creation timestamp. */
5961
6394
  created_at: string;
5962
6395
  /** @description ISO-8601 last-update timestamp. */
@@ -5975,8 +6408,8 @@ export interface components {
5975
6408
  CreatePlanAssignmentRequest: {
5976
6409
  /** @description Organisation this plan assignment belongs to. */
5977
6410
  org_id: number;
5978
- /** @description Order form line that backs this assignment. */
5979
- order_form_line_id: number;
6411
+ /** @description Plan the organisation is on. */
6412
+ plan_id: number;
5980
6413
  /**
5981
6414
  * Format: date-time
5982
6415
  * @description When the assignment starts being effective (timestamptz).
@@ -5992,16 +6425,12 @@ export interface components {
5992
6425
  * @enum {string}
5993
6426
  */
5994
6427
  source?: "order_form" | "derived_from_invoice" | "manual";
5995
- /** @description Whether the assignment is pinned. Defaults false. */
5996
- pinned?: boolean;
5997
- /** @description Arbitrary JSON overrides for the plan. */
5998
- custom_overrides?: unknown;
5999
6428
  };
6000
6429
  UpdatePlanAssignmentRequest: {
6001
6430
  /** @description Organisation this plan assignment belongs to. */
6002
6431
  org_id?: number;
6003
- /** @description Order form line that backs this assignment. */
6004
- order_form_line_id?: number;
6432
+ /** @description Plan the organisation is on. */
6433
+ plan_id?: number;
6005
6434
  /**
6006
6435
  * Format: date-time
6007
6436
  * @description When the assignment starts being effective (timestamptz).
@@ -6017,36 +6446,448 @@ export interface components {
6017
6446
  * @enum {string}
6018
6447
  */
6019
6448
  source?: "order_form" | "derived_from_invoice" | "manual";
6020
- /** @description Whether the assignment is pinned. */
6021
- pinned?: boolean;
6022
- /** @description Arbitrary JSON overrides for the plan. */
6023
- custom_overrides?: unknown;
6024
6449
  };
6025
- ApiKeyListResponse: {
6450
+ PlanListResponse: {
6026
6451
  /** @description Response payload. */
6027
6452
  data: {
6028
- /** @description The project's API keys (secrets truncated). */
6029
- api_keys: components["schemas"]["TruncatedProjectApiKey"][];
6453
+ plans: components["schemas"]["Plan"][];
6030
6454
  };
6031
6455
  };
6032
- TruncatedProjectApiKey: {
6033
- /** @description API key ID. */
6456
+ Plan: {
6457
+ /** @description Plan ID. */
6034
6458
  id: number;
6035
- /** @description Project the key belongs to. */
6036
- project_id: number | null;
6037
- /** @description Human-readable name for the key. */
6038
- name: string;
6039
- /** @description User ID of the creator, if known. */
6040
- created_by: string | null;
6041
- /** @description ISO 8601 creation timestamp. */
6042
- created_at: string | null;
6043
- /** @description ISO 8601 timestamp the key was last updated. */
6044
- updated_at: string | null;
6045
- /** @description User ID of the last updater, if known. */
6046
- updated_by: string | null;
6047
- /** @description ISO 8601 timestamp the key was last used. */
6048
- last_used_at: string | null;
6049
- /** @description Whether the key is disabled. */
6459
+ /** @description Organisation a custom plan belongs to; null for a shared plan. */
6460
+ org_id: number | null;
6461
+ /** @description Order form a custom plan comes from, if any. */
6462
+ order_form_id: number | null;
6463
+ /** @description `tier` or `addon`. */
6464
+ kind: string;
6465
+ /** @description Stable unique key of a shared plan, e.g. `managed`. */
6466
+ key: string | null;
6467
+ /** @description Display name, e.g. `Managed`, `Starter`. */
6468
+ name: string | null;
6469
+ /** @description Currency the plan is priced in, e.g. `usd`. */
6470
+ currency: string;
6471
+ /** @description Monthly base price in cents of `currency`. */
6472
+ base_price_cents: number;
6473
+ /** @description `active` or `retired`. Retired plans keep existing assignments. */
6474
+ status: string;
6475
+ /** @description ISO-8601 creation timestamp. */
6476
+ created_at: string;
6477
+ /** @description Metered allowances and overage rates. */
6478
+ meters: components["schemas"]["PlanMeter"][];
6479
+ };
6480
+ PlanMeter: {
6481
+ /** @description Plan meter ID. */
6482
+ id: number;
6483
+ /** @description Plan this meter belongs to. */
6484
+ plan_id: number;
6485
+ /** @description Meter key, e.g. `ai_credits` or `test_minutes`. */
6486
+ meter: string;
6487
+ /** @description Units included in the base price each month. */
6488
+ included_qty: number | null;
6489
+ /** @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. */
6490
+ overage_price_cents: number | null;
6491
+ /** @description Display order. */
6492
+ sort_order: number;
6493
+ };
6494
+ PlanResponse: {
6495
+ /** @description Response payload. */
6496
+ data: {
6497
+ plan: components["schemas"]["Plan"];
6498
+ };
6499
+ };
6500
+ CreatePlanRequest: {
6501
+ /** @description Stable unique key, e.g. `managed`. */
6502
+ key: string;
6503
+ /** @description Display name. */
6504
+ name: string;
6505
+ /**
6506
+ * @description Currency the plan is priced in. Defaults to `usd`.
6507
+ * @enum {string}
6508
+ */
6509
+ currency?: "usd" | "inr" | "aed";
6510
+ /** @description Monthly base price in cents of `currency`. */
6511
+ base_price_cents: number;
6512
+ /**
6513
+ * @description Metered allowances, in display order.
6514
+ * @default []
6515
+ */
6516
+ meters: {
6517
+ /**
6518
+ * @description Meter key from the meter registry. Its unit applies to both `included_qty` and `overage_price_cents`.
6519
+ * @enum {string}
6520
+ */
6521
+ meter: "test_suite_size" | "ai_credits" | "test_minutes" | "test_run_duration";
6522
+ /** @description Units included each month. */
6523
+ included_qty?: number | null;
6524
+ /** @description Price per unit above the allowance, in cents; may be fractional. */
6525
+ overage_price_cents?: number | null;
6526
+ }[];
6527
+ };
6528
+ UpdatePlanRequest: {
6529
+ /**
6530
+ * @description `retired` hides the plan from new sales; existing assignments keep it.
6531
+ * @enum {string}
6532
+ */
6533
+ status: "active" | "retired";
6534
+ };
6535
+ BillingMonthSummaryResponse: {
6536
+ /** @description Response payload. */
6537
+ data: {
6538
+ /** @description Usage month, YYYY-MM (UTC). */
6539
+ month: string;
6540
+ period_start: string;
6541
+ /** @description Exclusive (ISO 8601). */
6542
+ period_end: string;
6543
+ is_current_month: boolean;
6544
+ /** @description The shared plan in effect; null for no plan or a custom contract. */
6545
+ plan: {
6546
+ name: string;
6547
+ currency: string;
6548
+ base_price_cents: number;
6549
+ } | null;
6550
+ meters: components["schemas"]["BillingMeterSummary"][];
6551
+ projects: {
6552
+ project_id: number;
6553
+ name: string;
6554
+ slug: string;
6555
+ ai_credits: number;
6556
+ test_minutes: number;
6557
+ }[];
6558
+ overage_cents: number;
6559
+ projected_overage_cents: number | null;
6560
+ /** @description Overage of the previous usage month, as a guide when picking a limit. Current month only. */
6561
+ last_month_overage_cents: number | null;
6562
+ usage_limit: components["schemas"]["UsageLimit"];
6563
+ };
6564
+ };
6565
+ BillingMeterSummary: {
6566
+ /** @enum {string} */
6567
+ meter: "ai_credits" | "test_minutes";
6568
+ included_qty: number | null;
6569
+ overage_price_cents: number | null;
6570
+ /** @description Units used so far this month. */
6571
+ used: number;
6572
+ /** @description Projected units at month end (trailing 7-day pace); null when too early to project. */
6573
+ projected: number | null;
6574
+ overage_cents: number;
6575
+ projected_overage_cents: number | null;
6576
+ };
6577
+ UsageLimit: {
6578
+ /** @description Whether the org's plan supports a usage limit (catalog plans with overage pricing). */
6579
+ available: boolean;
6580
+ /** @description Most overage allowed per usage month, in cents of the plan currency. Null means no limit. */
6581
+ cap_cents: number | null;
6582
+ /**
6583
+ * @description `warning` at 80% of the limit (or, for a $0 limit, 80% of any allowance); `reached` when new work is paused.
6584
+ * @enum {string}
6585
+ */
6586
+ status: "none" | "ok" | "warning" | "reached";
6587
+ /** @description When the limit was reached this month (ISO 8601). */
6588
+ reached_at: string | null;
6589
+ updated_at: string | null;
6590
+ /** @description Who made a change. */
6591
+ updated_by: {
6592
+ /** @description user | agent | api_key | system */
6593
+ kind: string;
6594
+ id: string | null;
6595
+ /** @description User name, when a user. */
6596
+ name: string | null;
6597
+ } | null;
6598
+ };
6599
+ UsageLimitResponse: {
6600
+ /** @description Response payload. */
6601
+ data: {
6602
+ /** @description Whether the org's plan supports a usage limit (catalog plans with overage pricing). */
6603
+ available: boolean;
6604
+ /** @description Most overage allowed per usage month, in cents of the plan currency. Null means no limit. */
6605
+ cap_cents: number | null;
6606
+ /**
6607
+ * @description `warning` at 80% of the limit (or, for a $0 limit, 80% of any allowance); `reached` when new work is paused.
6608
+ * @enum {string}
6609
+ */
6610
+ status: "none" | "ok" | "warning" | "reached";
6611
+ /** @description When the limit was reached this month (ISO 8601). */
6612
+ reached_at: string | null;
6613
+ updated_at: string | null;
6614
+ /** @description Who made a change. */
6615
+ updated_by: {
6616
+ /** @description user | agent | api_key | system */
6617
+ kind: string;
6618
+ id: string | null;
6619
+ /** @description User name, when a user. */
6620
+ name: string | null;
6621
+ } | null;
6622
+ };
6623
+ };
6624
+ UsageLimitEventsResponse: {
6625
+ /** @description Response payload. */
6626
+ data: components["schemas"]["UsageLimitEvent"][];
6627
+ };
6628
+ UsageLimitEvent: {
6629
+ id: number;
6630
+ /** @description spend_cap.set | spend_cap.removed | spend_cap.alert_sent | spend_cap.reached | spend_cap.cleared */
6631
+ action: string;
6632
+ /** @description Who made a change. */
6633
+ actor: {
6634
+ /** @description user | agent | api_key | system */
6635
+ kind: string;
6636
+ id: string | null;
6637
+ /** @description User name, when a user. */
6638
+ name: string | null;
6639
+ };
6640
+ before?: unknown;
6641
+ after?: unknown;
6642
+ metadata?: unknown;
6643
+ created_at: string;
6644
+ };
6645
+ RunnerBackendListResponse: {
6646
+ /** @description Response payload. */
6647
+ data: {
6648
+ runner_backends: components["schemas"]["RunnerBackend"][];
6649
+ };
6650
+ };
6651
+ RunnerBackend: {
6652
+ /** @description Runner backend ID. */
6653
+ id: number;
6654
+ /** @description Organisation that owns the installation. */
6655
+ org_id: number;
6656
+ /** @description Human-readable name. */
6657
+ name: string;
6658
+ /** @description AWS account the installation runs in. */
6659
+ aws_account_id: string;
6660
+ /** @description AWS region of the installation. */
6661
+ region: string;
6662
+ /** @description Role api-worker assumes to drive the plane. */
6663
+ role_arn: string;
6664
+ /** @description External ID the role's trust policy must require. Give it only to this installation's owner. */
6665
+ external_id: string;
6666
+ /** @description ECS cluster name. */
6667
+ cluster_name: string;
6668
+ /** @description CloudWatch log group of the worker. */
6669
+ log_group_name: string;
6670
+ /** @description Worker container name. */
6671
+ container_name: string;
6672
+ /** @description Job queue URLs are `${queue_prefix}-${machineSize}`. */
6673
+ queue_prefix: string;
6674
+ /**
6675
+ * @description `pending` until verified; only `active` backends receive runs.
6676
+ * @enum {string}
6677
+ */
6678
+ status: "pending" | "active" | "disabled";
6679
+ /** @description ISO-8601 time of the last successful verify. */
6680
+ last_verified_at: string | null;
6681
+ /** @description ISO-8601 time of the last verify, manual or scheduled, whatever its outcome. */
6682
+ last_checked_at: string | null;
6683
+ /** @description Outcome of the last verify; null if never run. */
6684
+ last_check_ok: boolean | null;
6685
+ /** @description Every check from the last verify. */
6686
+ last_check_results: components["schemas"]["RunnerBackendCheck"][] | null;
6687
+ /** @description ISO-8601 start of the current run of failed checks; null while passing. A failing check does not change `status`. */
6688
+ check_failing_since: string | null;
6689
+ /** @description ISO-8601 creation time. */
6690
+ created_at: string;
6691
+ /** @description ISO-8601 last-update time. */
6692
+ updated_at: string;
6693
+ };
6694
+ RunnerBackendCheck: {
6695
+ /** @description `assume_role`, `job_queue`, `scaler_trigger_queue`, `ecs_cluster`, `ecs_tasks` or `worker_logs`. */
6696
+ name: string;
6697
+ /** @description Whether the check passed. */
6698
+ ok: boolean;
6699
+ /** @description The resource checked, or the AWS error. */
6700
+ detail: string;
6701
+ };
6702
+ RunnerBackendResponse: {
6703
+ /** @description Response payload. */
6704
+ data: {
6705
+ runner_backend: components["schemas"]["RunnerBackend"];
6706
+ };
6707
+ };
6708
+ CreateRunnerBackendBody: {
6709
+ /** @description Owning organisation. */
6710
+ org_id: number;
6711
+ /** @description Human-readable name. */
6712
+ name: string;
6713
+ /** @description 12-digit AWS account ID. */
6714
+ aws_account_id: string;
6715
+ /** @description AWS region, e.g. `us-east-1`. */
6716
+ region: string;
6717
+ /** @description ARN of a role named `empirical-private-runner-*` in `aws_account_id`. */
6718
+ role_arn: string;
6719
+ /** @description ECS cluster name. */
6720
+ cluster_name: string;
6721
+ /** @description CloudWatch log group of the worker. */
6722
+ log_group_name: string;
6723
+ /** @description `https://sqs.<region>.amazonaws.com/<account>/<name>`; queues are `${queue_prefix}-${machineSize}`. */
6724
+ queue_prefix: string;
6725
+ /** @description Worker container name. Defaults to `test-run-worker`. */
6726
+ container_name?: string;
6727
+ /** @description Only for installations whose role already requires a fixed ID (Empirical's own dogfood). Generated otherwise. */
6728
+ external_id?: string;
6729
+ };
6730
+ ProjectRunnerBackendResponse: {
6731
+ /** @description Response payload. */
6732
+ data: {
6733
+ project_id: number;
6734
+ runner_backend_id: number | null;
6735
+ };
6736
+ };
6737
+ SetProjectRunnerBackendBody: {
6738
+ /** @description An active backend of the project's organisation, or null for Empirical-hosted. */
6739
+ runner_backend_id: number | null;
6740
+ };
6741
+ ProjectRunnerBackendDetailResponse: {
6742
+ /** @description Response payload. */
6743
+ data: {
6744
+ /** @description The backend the project's new runs are placed on, or null for Empirical-hosted. */
6745
+ runner_backend: {
6746
+ /** @description Runner backend ID. */
6747
+ id: number;
6748
+ /** @description Organisation that owns the installation. */
6749
+ org_id: number;
6750
+ /** @description Human-readable name. */
6751
+ name: string;
6752
+ /** @description AWS account the installation runs in. */
6753
+ aws_account_id: string;
6754
+ /** @description AWS region of the installation. */
6755
+ region: string;
6756
+ /** @description Role api-worker assumes to drive the plane. */
6757
+ role_arn: string;
6758
+ /** @description External ID the role's trust policy must require. Give it only to this installation's owner. */
6759
+ external_id: string;
6760
+ /** @description ECS cluster name. */
6761
+ cluster_name: string;
6762
+ /** @description CloudWatch log group of the worker. */
6763
+ log_group_name: string;
6764
+ /** @description Worker container name. */
6765
+ container_name: string;
6766
+ /** @description Job queue URLs are `${queue_prefix}-${machineSize}`. */
6767
+ queue_prefix: string;
6768
+ /**
6769
+ * @description `pending` until verified; only `active` backends receive runs.
6770
+ * @enum {string}
6771
+ */
6772
+ status: "pending" | "active" | "disabled";
6773
+ /** @description ISO-8601 time of the last successful verify. */
6774
+ last_verified_at: string | null;
6775
+ /** @description ISO-8601 time of the last verify, manual or scheduled, whatever its outcome. */
6776
+ last_checked_at: string | null;
6777
+ /** @description Outcome of the last verify; null if never run. */
6778
+ last_check_ok: boolean | null;
6779
+ /** @description Every check from the last verify. */
6780
+ last_check_results: components["schemas"]["RunnerBackendCheck"][] | null;
6781
+ /** @description ISO-8601 start of the current run of failed checks; null while passing. A failing check does not change `status`. */
6782
+ check_failing_since: string | null;
6783
+ /** @description ISO-8601 creation time. */
6784
+ created_at: string;
6785
+ /** @description ISO-8601 last-update time. */
6786
+ updated_at: string;
6787
+ } | null;
6788
+ };
6789
+ };
6790
+ RunnerBackendVerifyResponse: {
6791
+ /** @description Response payload. */
6792
+ data: {
6793
+ /** @description True when every check passed. */
6794
+ verified: boolean;
6795
+ checks: components["schemas"]["RunnerBackendCheck"][];
6796
+ runner_backend: components["schemas"]["RunnerBackend"];
6797
+ };
6798
+ };
6799
+ CreateSystemMessageResponse: {
6800
+ data: {
6801
+ system_message: components["schemas"]["SystemMessage"];
6802
+ recipients: components["schemas"]["SystemMessageRecipient"][];
6803
+ skipped_project_ids: number[];
6804
+ };
6805
+ };
6806
+ SystemMessage: {
6807
+ id: number;
6808
+ body: string;
6809
+ created_by: string | null;
6810
+ created_at: string;
6811
+ };
6812
+ SystemMessageRecipient: {
6813
+ project_id: number;
6814
+ chat_session_id: number | null;
6815
+ /** @enum {string} */
6816
+ delivery_status: "pending" | "delivered" | "failed";
6817
+ delivery_error: string | null;
6818
+ delivered_at: string | null;
6819
+ /** @enum {string|null} */
6820
+ ack_status: "accepted" | "declined" | null;
6821
+ ack_note: string | null;
6822
+ acked_at: string | null;
6823
+ acked_by_chat_session_id: number | null;
6824
+ session_error: string | null;
6825
+ session_is_closed: boolean | null;
6826
+ };
6827
+ CreateSystemMessageRequest: {
6828
+ body: string;
6829
+ project_ids?: number[];
6830
+ };
6831
+ SystemMessageListResponse: {
6832
+ data: {
6833
+ system_messages: components["schemas"]["SystemMessageSummary"][];
6834
+ };
6835
+ };
6836
+ SystemMessageSummary: {
6837
+ id: number;
6838
+ body: string;
6839
+ created_by: string | null;
6840
+ created_at: string;
6841
+ recipients: number;
6842
+ delivered: number;
6843
+ failed: number;
6844
+ acked: number;
6845
+ };
6846
+ SystemMessageDetailResponse: {
6847
+ data: {
6848
+ system_message: components["schemas"]["SystemMessage"];
6849
+ recipients: components["schemas"]["SystemMessageRecipient"][];
6850
+ };
6851
+ };
6852
+ AckSystemMessageResponse: {
6853
+ data: {
6854
+ system_message_id: number;
6855
+ project_id: number;
6856
+ /** @enum {string} */
6857
+ ack_status: "accepted" | "declined";
6858
+ acked_at: string;
6859
+ };
6860
+ };
6861
+ AckSystemMessageRequest: {
6862
+ /** @enum {string} */
6863
+ status: "accepted" | "declined";
6864
+ note?: string;
6865
+ };
6866
+ ApiKeyListResponse: {
6867
+ /** @description Response payload. */
6868
+ data: {
6869
+ /** @description The project's API keys (secrets truncated). */
6870
+ api_keys: components["schemas"]["TruncatedProjectApiKey"][];
6871
+ };
6872
+ };
6873
+ TruncatedProjectApiKey: {
6874
+ /** @description API key ID. */
6875
+ id: number;
6876
+ /** @description Project the key belongs to. */
6877
+ project_id: number | null;
6878
+ /** @description Human-readable name for the key. */
6879
+ name: string;
6880
+ /** @description User ID of the creator, if known. */
6881
+ created_by: string | null;
6882
+ /** @description ISO 8601 creation timestamp. */
6883
+ created_at: string | null;
6884
+ /** @description ISO 8601 timestamp the key was last updated. */
6885
+ updated_at: string | null;
6886
+ /** @description User ID of the last updater, if known. */
6887
+ updated_by: string | null;
6888
+ /** @description ISO 8601 timestamp the key was last used. */
6889
+ last_used_at: string | null;
6890
+ /** @description Whether the key is disabled. */
6050
6891
  is_disabled: boolean | null;
6051
6892
  /** @description Whether the key is an internal service key. */
6052
6893
  is_internal: boolean | null;
@@ -7047,8 +7888,10 @@ export interface components {
7047
7888
  ResolveMembershipResponse: {
7048
7889
  /** @description Response payload. */
7049
7890
  data: {
7050
- /** @description All org ids the user now belongs to via invites and domain match. */
7891
+ /** @description All org ids the user belongs to after resolution. */
7051
7892
  org_ids: number[];
7893
+ /** @description Whether the user is a super admin. */
7894
+ is_super_admin: boolean;
7052
7895
  };
7053
7896
  };
7054
7897
  ResolveMembershipRequest: {
@@ -7616,8 +8459,8 @@ export interface components {
7616
8459
  effective_from: string;
7617
8460
  /** @description ISO timestamp it was turned off; null while active. */
7618
8461
  effective_to: string | null;
7619
- /** @description Order-form line this period bills against, when a priced line exists. Null for add-ons that are free today. */
7620
- order_form_line_id: number | null;
8462
+ /** @description Add-on plan this period bills against, when a priced one exists. Null for add-ons that are free today. */
8463
+ plan_id: number | null;
7621
8464
  created_by: string | null;
7622
8465
  ended_by: string | null;
7623
8466
  };
@@ -7633,8 +8476,8 @@ export interface components {
7633
8476
  * @description Backdate the period to this ISO timestamp. Super admin only; defaults to now.
7634
8477
  */
7635
8478
  effective_from?: string;
7636
- /** @description Order-form line (kind='addon') this period bills against. Super admin only. */
7637
- order_form_line_id?: number;
8479
+ /** @description Add-on plan (kind='addon') this period bills against. Super admin only. */
8480
+ plan_id?: number;
7638
8481
  };
7639
8482
  StaticIpsResponse: {
7640
8483
  /** @description Response payload. */
@@ -8693,8 +9536,14 @@ export interface components {
8693
9536
  /** @description Response payload. */
8694
9537
  data: {
8695
9538
  chat_session: components["schemas"]["ChatSession"];
9539
+ subscription: components["schemas"]["ChatSessionCallerSubscription"];
8696
9540
  };
8697
9541
  };
9542
+ /** @description One-shot subscription that wakes the calling agent session when this session next waits for input; null when none was created. */
9543
+ ChatSessionCallerSubscription: {
9544
+ /** @description Subscription ID. */
9545
+ id: number;
9546
+ } | null;
8698
9547
  ChatSessionDetailResponse: {
8699
9548
  /** @description Response payload. */
8700
9549
  data: {
@@ -8763,6 +9612,7 @@ export interface components {
8763
9612
  /** @description Response payload. */
8764
9613
  data: {
8765
9614
  chat_session: components["schemas"]["ChatSession"];
9615
+ subscription: components["schemas"]["ChatSessionCallerSubscription"];
8766
9616
  };
8767
9617
  };
8768
9618
  ChatSessionTimelineResponse: {
@@ -9138,6 +9988,7 @@ export interface components {
9138
9988
  data: {
9139
9989
  check_runs: components["schemas"]["GhReporterCheckRunDelivery"][];
9140
9990
  pr_comments: components["schemas"]["GhReporterPrCommentDelivery"][];
9991
+ linked_changes: components["schemas"]["GhReporterLinkedChangesDelivery"][];
9141
9992
  };
9142
9993
  };
9143
9994
  GhReporterCheckRunDelivery: {
@@ -9171,6 +10022,51 @@ export interface components {
9171
10022
  created_at: string;
9172
10023
  updated_at: string;
9173
10024
  };
10025
+ GhReporterLinkedChangesDelivery: {
10026
+ id: number;
10027
+ /** @description The app PR's run the check links to (latest write). */
10028
+ test_run_id: number;
10029
+ repo_owner: string;
10030
+ repo_name: string;
10031
+ /** @description The app PR's head branch. */
10032
+ pr_head: string;
10033
+ pr_number: number | null;
10034
+ /** @description App commit the check was last written on. */
10035
+ head_sha: string;
10036
+ test_branch: string;
10037
+ /** @description Null when GitHub never accepted the check run. */
10038
+ check_run_id: number | null;
10039
+ check_run_url: string | null;
10040
+ /** @description Linked changes state, e.g. no_test_branch, pr_open, nothing_to_merge. */
10041
+ state: string | null;
10042
+ status: string | null;
10043
+ conclusion: string | null;
10044
+ title: string | null;
10045
+ /** @description Error from the most recent delivery attempt; cleared on success. */
10046
+ last_error: string | null;
10047
+ created_at: string;
10048
+ updated_at: string;
10049
+ };
10050
+ GhReporterPullRequestResponse: {
10051
+ /** @description Response payload. */
10052
+ data: {
10053
+ /** @description Null when no PR contains head_sha. */
10054
+ pull_request: {
10055
+ number: number;
10056
+ title: string;
10057
+ state: string;
10058
+ merged: boolean;
10059
+ head_ref: string;
10060
+ head_sha: string;
10061
+ html_url: string;
10062
+ updated_at: string;
10063
+ } | null;
10064
+ /** @description Whether head_sha is the PR's current head commit. */
10065
+ delivered_sha_is_head: boolean | null;
10066
+ /** @description Commits on the PR head after head_sha. Null when head_sha is not an ancestor of the head (e.g. after a force push) or not given. */
10067
+ commits_since_delivered: number | null;
10068
+ };
10069
+ };
9174
10070
  GhReporterWebhookAck: {
9175
10071
  /** @description Response payload. */
9176
10072
  data: {
@@ -11047,6 +11943,54 @@ export interface components {
11047
11943
  /** @description Log line text. */
11048
11944
  message: string;
11049
11945
  };
11946
+ TestRunLinkedChangesResponse: {
11947
+ /** @description Response payload. */
11948
+ data: {
11949
+ /** @description Null when the run was not triggered by an app PR. */
11950
+ linked_changes: {
11951
+ /** @description The app repository (owner/name) of the PR. */
11952
+ app_repo: string;
11953
+ app_pull_request: {
11954
+ number: number | null;
11955
+ head: string;
11956
+ base: string | null;
11957
+ };
11958
+ /** @description The test repository. */
11959
+ test_repo: string;
11960
+ /** @description Test branch linked to the app PR by name. */
11961
+ test_branch: string;
11962
+ default_branch: string;
11963
+ /** @enum {string} */
11964
+ state: "no_test_branch" | "nothing_to_merge" | "ahead_no_pr" | "pr_open" | "pr_open_not_mergeable" | "error";
11965
+ /** @enum {string} */
11966
+ status: "in_progress" | "completed";
11967
+ /** @enum {string|null} */
11968
+ conclusion: "success" | "failure" | "neutral" | null;
11969
+ title: string;
11970
+ ahead_by: number;
11971
+ /** @description Open test PR from the test branch, if any. */
11972
+ test_pull_request: {
11973
+ number: number;
11974
+ url: string;
11975
+ mergeable: boolean | null;
11976
+ } | null;
11977
+ /** @description Merged test PR, when the branch was deleted after merge. */
11978
+ merged_test_pull_request: {
11979
+ number: number;
11980
+ url: string;
11981
+ } | null;
11982
+ /** @description Latest GitHub check written for the app PR, from any of its runs. */
11983
+ check: {
11984
+ check_run_url: string | null;
11985
+ head_sha: string;
11986
+ test_run_id: number;
11987
+ state: string | null;
11988
+ last_error: string | null;
11989
+ updated_at: string;
11990
+ } | null;
11991
+ } | null;
11992
+ };
11993
+ };
11050
11994
  GetTestRunTriageSessionResponse: {
11051
11995
  /** @description Response payload. */
11052
11996
  data: {
@@ -12419,6 +13363,19 @@ export interface components {
12419
13363
  }[];
12420
13364
  };
12421
13365
  };
13366
+ CurrentUserResponse: {
13367
+ /** @description Response payload. */
13368
+ data: {
13369
+ /** @description User ID. */
13370
+ id: string;
13371
+ /** @description Email address on the session. */
13372
+ email: string | null;
13373
+ /** @description Organizations the user belongs to. */
13374
+ org_ids: number[];
13375
+ /** @description Whether the user can access every org. */
13376
+ is_super_admin: boolean;
13377
+ };
13378
+ };
12422
13379
  UserDetailResponse: {
12423
13380
  /** @description Response payload. */
12424
13381
  data: {
@@ -13044,22 +14001,9 @@ export interface operations {
13044
14001
  };
13045
14002
  };
13046
14003
  };
13047
- getTestRunLogs: {
14004
+ getTestRunLinkedChanges: {
13048
14005
  parameters: {
13049
- query?: {
13050
- /** @description Pagination token returned by a previous logs page. */
13051
- nextToken?: string;
13052
- /** @description Maximum number of log events to return. */
13053
- limit?: number;
13054
- /** @description Restrict logs to this shard's ECS task and trim to its execution window. */
13055
- shardIndex?: number | null;
13056
- /** @description Job type of the shard at shardIndex. merge_reports and run_setup share index 0; defaults to merge_reports for index 0 (legacy callers), run_test otherwise. */
13057
- jobType?: "run_test" | "merge_reports" | "run_setup";
13058
- /** @description Lower bound (epoch ms) for log events. */
13059
- startTime?: number | null;
13060
- /** @description Upper bound (epoch ms) for log events. */
13061
- endTime?: number | null;
13062
- };
14006
+ query?: never;
13063
14007
  header?: never;
13064
14008
  path: {
13065
14009
  /** @description Test run database ID. */
@@ -13069,16 +14013,16 @@ export interface operations {
13069
14013
  };
13070
14014
  requestBody?: never;
13071
14015
  responses: {
13072
- /** @description The task's log events. */
14016
+ /** @description The run's linked test changes. */
13073
14017
  200: {
13074
14018
  headers: {
13075
14019
  [name: string]: unknown;
13076
14020
  };
13077
14021
  content: {
13078
- "application/json": components["schemas"]["TestRunLogsResponse"];
14022
+ "application/json": components["schemas"]["TestRunLinkedChangesResponse"];
13079
14023
  };
13080
14024
  };
13081
- /** @description ECS task ID not found. */
14025
+ /** @description Invalid database test run ID. */
13082
14026
  400: {
13083
14027
  headers: {
13084
14028
  [name: string]: unknown;
@@ -13098,9 +14042,63 @@ export interface operations {
13098
14042
  };
13099
14043
  };
13100
14044
  };
13101
- getTestRunManifestTests: {
14045
+ getTestRunLogs: {
13102
14046
  parameters: {
13103
- query?: never;
14047
+ query?: {
14048
+ /** @description Pagination token returned by a previous logs page. */
14049
+ nextToken?: string;
14050
+ /** @description Maximum number of log events to return. */
14051
+ limit?: number;
14052
+ /** @description Restrict logs to this shard's ECS task and trim to its execution window. */
14053
+ shardIndex?: number | null;
14054
+ /** @description Job type of the shard at shardIndex. merge_reports and run_setup share index 0; defaults to merge_reports for index 0 (legacy callers), run_test otherwise. */
14055
+ jobType?: "run_test" | "merge_reports" | "run_setup";
14056
+ /** @description Lower bound (epoch ms) for log events. */
14057
+ startTime?: number | null;
14058
+ /** @description Upper bound (epoch ms) for log events. */
14059
+ endTime?: number | null;
14060
+ };
14061
+ header?: never;
14062
+ path: {
14063
+ /** @description Test run database ID. */
14064
+ id: number;
14065
+ };
14066
+ cookie?: never;
14067
+ };
14068
+ requestBody?: never;
14069
+ responses: {
14070
+ /** @description The task's log events. */
14071
+ 200: {
14072
+ headers: {
14073
+ [name: string]: unknown;
14074
+ };
14075
+ content: {
14076
+ "application/json": components["schemas"]["TestRunLogsResponse"];
14077
+ };
14078
+ };
14079
+ /** @description ECS task ID not found. */
14080
+ 400: {
14081
+ headers: {
14082
+ [name: string]: unknown;
14083
+ };
14084
+ content: {
14085
+ "application/json": components["schemas"]["ErrorResponse"];
14086
+ };
14087
+ };
14088
+ /** @description Test run not found. */
14089
+ 404: {
14090
+ headers: {
14091
+ [name: string]: unknown;
14092
+ };
14093
+ content: {
14094
+ "application/json": components["schemas"]["ErrorResponse"];
14095
+ };
14096
+ };
14097
+ };
14098
+ };
14099
+ getTestRunManifestTests: {
14100
+ parameters: {
14101
+ query?: never;
13104
14102
  header?: never;
13105
14103
  path: {
13106
14104
  /** @description Test run database ID. */
@@ -17237,9 +18235,14 @@ export interface operations {
17237
18235
  entity_type: string;
17238
18236
  /** @description Exact entity id, or null when this trigger matches every entity. */
17239
18237
  entity_id: string | null;
17240
- /** @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. */
18238
+ /** @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. */
17241
18239
  payload_filter: {
17242
- [key: string]: string | number | boolean | unknown;
18240
+ [key: string]: string | number | boolean | {
18241
+ gt?: number;
18242
+ gte?: number;
18243
+ lt?: number;
18244
+ lte?: number;
18245
+ } | unknown;
17243
18246
  };
17244
18247
  message: string;
17245
18248
  /**
@@ -17284,9 +18287,14 @@ export interface operations {
17284
18287
  event_type: string;
17285
18288
  /** @description Exact canonical entity id to match. Omit on create, or set null on update, to match every entity. */
17286
18289
  entity_id?: string;
17287
- /** @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. */
18290
+ /** @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. */
17288
18291
  payload_filter?: {
17289
- [key: string]: string | number | boolean | unknown;
18292
+ [key: string]: string | number | boolean | {
18293
+ gt?: number;
18294
+ gte?: number;
18295
+ lt?: number;
18296
+ lte?: number;
18297
+ } | unknown;
17290
18298
  };
17291
18299
  /** @description Continuation instruction delivered to the session after the event matches. */
17292
18300
  message: string;
@@ -17315,9 +18323,14 @@ export interface operations {
17315
18323
  entity_type: string;
17316
18324
  /** @description Exact entity id, or null when this trigger matches every entity. */
17317
18325
  entity_id: string | null;
17318
- /** @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. */
18326
+ /** @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. */
17319
18327
  payload_filter: {
17320
- [key: string]: string | number | boolean | unknown;
18328
+ [key: string]: string | number | boolean | {
18329
+ gt?: number;
18330
+ gte?: number;
18331
+ lt?: number;
18332
+ lte?: number;
18333
+ } | unknown;
17321
18334
  };
17322
18335
  message: string;
17323
18336
  /**
@@ -17389,9 +18402,14 @@ export interface operations {
17389
18402
  entity_type: string;
17390
18403
  /** @description Exact entity id, or null when this trigger matches every entity. */
17391
18404
  entity_id: string | null;
17392
- /** @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. */
18405
+ /** @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. */
17393
18406
  payload_filter: {
17394
- [key: string]: string | number | boolean | unknown;
18407
+ [key: string]: string | number | boolean | {
18408
+ gt?: number;
18409
+ gte?: number;
18410
+ lt?: number;
18411
+ lte?: number;
18412
+ } | unknown;
17395
18413
  };
17396
18414
  message: string;
17397
18415
  /**
@@ -17464,9 +18482,14 @@ export interface operations {
17464
18482
  event_type?: string;
17465
18483
  /** @description Exact canonical entity id to match. Omit on create, or set null on update, to match every entity. */
17466
18484
  entity_id?: string | null;
17467
- /** @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. */
18485
+ /** @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. */
17468
18486
  payload_filter?: {
17469
- [key: string]: string | number | boolean | unknown;
18487
+ [key: string]: string | number | boolean | {
18488
+ gt?: number;
18489
+ gte?: number;
18490
+ lt?: number;
18491
+ lte?: number;
18492
+ } | unknown;
17470
18493
  };
17471
18494
  /** @description Continuation instruction delivered to the session after the event matches. */
17472
18495
  message?: string;
@@ -17495,9 +18518,14 @@ export interface operations {
17495
18518
  entity_type: string;
17496
18519
  /** @description Exact entity id, or null when this trigger matches every entity. */
17497
18520
  entity_id: string | null;
17498
- /** @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. */
18521
+ /** @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. */
17499
18522
  payload_filter: {
17500
- [key: string]: string | number | boolean | unknown;
18523
+ [key: string]: string | number | boolean | {
18524
+ gt?: number;
18525
+ gte?: number;
18526
+ lt?: number;
18527
+ lte?: number;
18528
+ } | unknown;
17501
18529
  };
17502
18530
  message: string;
17503
18531
  /**
@@ -17574,7 +18602,7 @@ export interface operations {
17574
18602
  "application/json": components["schemas"]["GithubProxyError"];
17575
18603
  };
17576
18604
  };
17577
- /** @description The target repository is blocked, the request writes to a protected branch, a project API key attempted a write, or a sandbox proxy rule forbade the request. */
18605
+ /** @description The URL uses a numeric repository id, the request writes to a protected branch, a project API key attempted a write, or a sandbox proxy rule forbade the request. */
17578
18606
  403: {
17579
18607
  headers: {
17580
18608
  [name: string]: unknown;
@@ -18142,6 +19170,134 @@ export interface operations {
18142
19170
  };
18143
19171
  };
18144
19172
  };
19173
+ getBillingMonthSummary: {
19174
+ parameters: {
19175
+ query?: {
19176
+ /** @description Usage month (YYYY-MM, UTC). Defaults to the current month. */
19177
+ month?: string;
19178
+ };
19179
+ header?: never;
19180
+ path?: never;
19181
+ cookie?: never;
19182
+ };
19183
+ requestBody?: never;
19184
+ responses: {
19185
+ /** @description The month summary. */
19186
+ 200: {
19187
+ headers: {
19188
+ [name: string]: unknown;
19189
+ };
19190
+ content: {
19191
+ "application/json": components["schemas"]["BillingMonthSummaryResponse"];
19192
+ };
19193
+ };
19194
+ /** @description Invalid month, or missing project scope. */
19195
+ 400: {
19196
+ headers: {
19197
+ [name: string]: unknown;
19198
+ };
19199
+ content: {
19200
+ "application/json": components["schemas"]["ErrorResponse"];
19201
+ };
19202
+ };
19203
+ /** @description The project has no org. */
19204
+ 404: {
19205
+ headers: {
19206
+ [name: string]: unknown;
19207
+ };
19208
+ content: {
19209
+ "application/json": components["schemas"]["ErrorResponse"];
19210
+ };
19211
+ };
19212
+ };
19213
+ };
19214
+ setUsageLimit: {
19215
+ parameters: {
19216
+ query?: never;
19217
+ header?: never;
19218
+ path?: never;
19219
+ cookie?: never;
19220
+ };
19221
+ requestBody?: {
19222
+ content: {
19223
+ "application/json": {
19224
+ /** @description Whole dollars, in cents; null removes it. */
19225
+ cap_cents: number | null;
19226
+ };
19227
+ };
19228
+ };
19229
+ responses: {
19230
+ /** @description The updated usage limit. */
19231
+ 200: {
19232
+ headers: {
19233
+ [name: string]: unknown;
19234
+ };
19235
+ content: {
19236
+ "application/json": components["schemas"]["UsageLimitResponse"];
19237
+ };
19238
+ };
19239
+ /** @description Invalid body, or the plan doesn't support a limit. */
19240
+ 400: {
19241
+ headers: {
19242
+ [name: string]: unknown;
19243
+ };
19244
+ content: {
19245
+ "application/json": components["schemas"]["ErrorResponse"];
19246
+ };
19247
+ };
19248
+ /** @description The project has no org. */
19249
+ 404: {
19250
+ headers: {
19251
+ [name: string]: unknown;
19252
+ };
19253
+ content: {
19254
+ "application/json": components["schemas"]["ErrorResponse"];
19255
+ };
19256
+ };
19257
+ };
19258
+ };
19259
+ listUsageLimitEvents: {
19260
+ parameters: {
19261
+ query?: {
19262
+ per_page?: number;
19263
+ /** @description Return events older than this id (pagination cursor). */
19264
+ before_id?: number;
19265
+ };
19266
+ header?: never;
19267
+ path?: never;
19268
+ cookie?: never;
19269
+ };
19270
+ requestBody?: never;
19271
+ responses: {
19272
+ /** @description Usage limit events. */
19273
+ 200: {
19274
+ headers: {
19275
+ [name: string]: unknown;
19276
+ };
19277
+ content: {
19278
+ "application/json": components["schemas"]["UsageLimitEventsResponse"];
19279
+ };
19280
+ };
19281
+ /** @description Invalid query, or missing project scope. */
19282
+ 400: {
19283
+ headers: {
19284
+ [name: string]: unknown;
19285
+ };
19286
+ content: {
19287
+ "application/json": components["schemas"]["ErrorResponse"];
19288
+ };
19289
+ };
19290
+ /** @description The project has no org. */
19291
+ 404: {
19292
+ headers: {
19293
+ [name: string]: unknown;
19294
+ };
19295
+ content: {
19296
+ "application/json": components["schemas"]["ErrorResponse"];
19297
+ };
19298
+ };
19299
+ };
19300
+ };
18145
19301
  listChatSessions: {
18146
19302
  parameters: {
18147
19303
  query?: {
@@ -18221,6 +19377,8 @@ export interface operations {
18221
19377
  /** @description Deprecated. Sessions start on the project default branch; a different branch is added to `message` as an instruction to work from it. */
18222
19378
  base_branch?: string | null;
18223
19379
  created_by?: string | null;
19380
+ /** @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. */
19381
+ subscribe?: boolean | null;
18224
19382
  };
18225
19383
  };
18226
19384
  };
@@ -18784,7 +19942,9 @@ export interface operations {
18784
19942
  entity_type: string;
18785
19943
  entity_id: string | null;
18786
19944
  payload_filter: {
18787
- [key: string]: string | number | boolean | unknown;
19945
+ [key: string]: string | number | boolean | {
19946
+ [key: string]: number;
19947
+ } | unknown;
18788
19948
  };
18789
19949
  message: string;
18790
19950
  /** @enum {string} */
@@ -18880,6 +20040,8 @@ export interface operations {
18880
20040
  send_action: "steer" | "follow_up" | "stop";
18881
20041
  created_by?: string | null;
18882
20042
  rpc_command_id?: string;
20043
+ /** @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. */
20044
+ subscribe?: boolean | null;
18883
20045
  };
18884
20046
  };
18885
20047
  };
@@ -20008,15 +21170,6 @@ export interface operations {
20008
21170
  "application/json": components["schemas"]["GithubBranchSearchResponse"];
20009
21171
  };
20010
21172
  };
20011
- /** @description Repository access is blocked. */
20012
- 403: {
20013
- headers: {
20014
- [name: string]: unknown;
20015
- };
20016
- content: {
20017
- "application/json": components["schemas"]["ErrorResponse"];
20018
- };
20019
- };
20020
21173
  /** @description Repository not found. */
20021
21174
  404: {
20022
21175
  headers: {
@@ -20608,7 +21761,7 @@ export interface operations {
20608
21761
  };
20609
21762
  requestBody?: never;
20610
21763
  responses: {
20611
- /** @description Reporter check runs and PR comments. */
21764
+ /** @description Reporter check runs, PR comments and linked test changes checks. */
20612
21765
  200: {
20613
21766
  headers: {
20614
21767
  [name: string]: unknown;
@@ -20886,6 +22039,53 @@ export interface operations {
20886
22039
  };
20887
22040
  };
20888
22041
  };
22042
+ getReporterPullRequest: {
22043
+ parameters: {
22044
+ query: {
22045
+ /** @description Project whose reporter App reads the PR. */
22046
+ project_id: number;
22047
+ repo_owner: string;
22048
+ repo_name: string;
22049
+ /** @description App PR number. When omitted, the PR is found by head_sha. */
22050
+ pr_number?: number;
22051
+ /** @description Commit the reporter delivered to. Compared against the PR's current head; also used to find the PR when pr_number is omitted. */
22052
+ head_sha?: string;
22053
+ };
22054
+ header?: never;
22055
+ path?: never;
22056
+ cookie?: never;
22057
+ };
22058
+ requestBody?: never;
22059
+ responses: {
22060
+ /** @description The PR's current state and head. */
22061
+ 200: {
22062
+ headers: {
22063
+ [name: string]: unknown;
22064
+ };
22065
+ content: {
22066
+ "application/json": components["schemas"]["GhReporterPullRequestResponse"];
22067
+ };
22068
+ };
22069
+ /** @description Neither pr_number nor head_sha given. */
22070
+ 400: {
22071
+ headers: {
22072
+ [name: string]: unknown;
22073
+ };
22074
+ content: {
22075
+ "application/json": components["schemas"]["ErrorResponse"];
22076
+ };
22077
+ };
22078
+ /** @description Project, installation or pull request not found. */
22079
+ 404: {
22080
+ headers: {
22081
+ [name: string]: unknown;
22082
+ };
22083
+ content: {
22084
+ "application/json": components["schemas"]["ErrorResponse"];
22085
+ };
22086
+ };
22087
+ };
22088
+ };
20889
22089
  getRepoTree: {
20890
22090
  parameters: {
20891
22091
  query: {
@@ -21712,6 +22912,70 @@ export interface operations {
21712
22912
  };
21713
22913
  };
21714
22914
  };
22915
+ previewInvoiceEmail: {
22916
+ parameters: {
22917
+ query?: {
22918
+ /** @description When `true`, preview the test email (sent to the internal test recipient). Defaults to `false`. */
22919
+ is_test_email?: "true" | "false";
22920
+ };
22921
+ header?: never;
22922
+ path: {
22923
+ /** @description Invoice ID. */
22924
+ id: string;
22925
+ };
22926
+ cookie?: never;
22927
+ };
22928
+ requestBody?: never;
22929
+ responses: {
22930
+ /** @description The rendered email. */
22931
+ 200: {
22932
+ headers: {
22933
+ [name: string]: unknown;
22934
+ };
22935
+ content: {
22936
+ "application/json": {
22937
+ /** @description Response payload. */
22938
+ data: {
22939
+ /** @description Sender address. */
22940
+ from: string;
22941
+ /** @description To recipients. */
22942
+ to: string[];
22943
+ /** @description CC recipients. */
22944
+ cc: string[];
22945
+ /** @description BCC recipients. */
22946
+ bcc: string[];
22947
+ /** @description Reply-To addresses. */
22948
+ reply_to: string[];
22949
+ /** @description Email subject. */
22950
+ subject: string;
22951
+ /** @description Rendered email body HTML. */
22952
+ html: string;
22953
+ /** @description Attached PDF filename, or null when the invoice has no PDF. */
22954
+ attachment_filename: string | null;
22955
+ };
22956
+ };
22957
+ };
22958
+ };
22959
+ /** @description Invalid invoice ID or organisation not found. */
22960
+ 400: {
22961
+ headers: {
22962
+ [name: string]: unknown;
22963
+ };
22964
+ content: {
22965
+ "application/json": components["schemas"]["ErrorResponse"];
22966
+ };
22967
+ };
22968
+ /** @description Invoice not found. */
22969
+ 404: {
22970
+ headers: {
22971
+ [name: string]: unknown;
22972
+ };
22973
+ content: {
22974
+ "application/json": components["schemas"]["ErrorResponse"];
22975
+ };
22976
+ };
22977
+ };
22978
+ };
21715
22979
  generateInvoicePdf: {
21716
22980
  parameters: {
21717
22981
  query?: never;
@@ -23877,7 +25141,7 @@ export interface operations {
23877
25141
  };
23878
25142
  };
23879
25143
  responses: {
23880
- /** @description Org ids granted via invites and domain match. */
25144
+ /** @description The user's memberships and super-admin flag after resolution. */
23881
25145
  200: {
23882
25146
  headers: {
23883
25147
  [name: string]: unknown;
@@ -23906,8 +25170,8 @@ export interface operations {
23906
25170
  per_page?: number;
23907
25171
  /** @description Filter to assignments for this organisation. */
23908
25172
  org_id?: number | null;
23909
- /** @description Filter to assignments for this order-form line. */
23910
- order_form_line_id?: number | null;
25173
+ /** @description Filter to assignments for this plan. */
25174
+ plan_id?: number | null;
23911
25175
  };
23912
25176
  header?: never;
23913
25177
  path?: never;
@@ -23957,7 +25221,7 @@ export interface operations {
23957
25221
  "application/json": components["schemas"]["PlanAssignmentResponse"];
23958
25222
  };
23959
25223
  };
23960
- /** @description Validation failed or the organisation does not exist. */
25224
+ /** @description Validation failed, or the organisation or plan does not exist. */
23961
25225
  400: {
23962
25226
  headers: {
23963
25227
  [name: string]: unknown;
@@ -24054,9 +25318,192 @@ export interface operations {
24054
25318
  };
24055
25319
  };
24056
25320
  };
24057
- listProjectAddons: {
25321
+ getOrgPlan: {
24058
25322
  parameters: {
24059
- query?: never;
25323
+ query?: {
25324
+ /** @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. */
25325
+ month?: string;
25326
+ };
25327
+ header?: never;
25328
+ path?: never;
25329
+ cookie?: never;
25330
+ };
25331
+ requestBody?: never;
25332
+ responses: {
25333
+ /** @description The org's plan status. */
25334
+ 200: {
25335
+ headers: {
25336
+ [name: string]: unknown;
25337
+ };
25338
+ content: {
25339
+ "application/json": components["schemas"]["OrgPlanResponse"];
25340
+ };
25341
+ };
25342
+ /** @description Invalid month, or missing project scope. */
25343
+ 400: {
25344
+ headers: {
25345
+ [name: string]: unknown;
25346
+ };
25347
+ content: {
25348
+ "application/json": components["schemas"]["ErrorResponse"];
25349
+ };
25350
+ };
25351
+ };
25352
+ };
25353
+ listPlans: {
25354
+ parameters: {
25355
+ query?: {
25356
+ /** @description List this organisation's custom plans instead of the shared plans. */
25357
+ org_id?: number | null;
25358
+ };
25359
+ header?: never;
25360
+ path?: never;
25361
+ cookie?: never;
25362
+ };
25363
+ requestBody?: never;
25364
+ responses: {
25365
+ /** @description The plans. */
25366
+ 200: {
25367
+ headers: {
25368
+ [name: string]: unknown;
25369
+ };
25370
+ content: {
25371
+ "application/json": components["schemas"]["PlanListResponse"];
25372
+ };
25373
+ };
25374
+ };
25375
+ };
25376
+ createPlan: {
25377
+ parameters: {
25378
+ query?: never;
25379
+ header?: never;
25380
+ path?: never;
25381
+ cookie?: never;
25382
+ };
25383
+ requestBody?: {
25384
+ content: {
25385
+ "application/json": components["schemas"]["CreatePlanRequest"];
25386
+ };
25387
+ };
25388
+ responses: {
25389
+ /** @description The created plan. */
25390
+ 200: {
25391
+ headers: {
25392
+ [name: string]: unknown;
25393
+ };
25394
+ content: {
25395
+ "application/json": components["schemas"]["PlanResponse"];
25396
+ };
25397
+ };
25398
+ /** @description Validation failed. */
25399
+ 400: {
25400
+ headers: {
25401
+ [name: string]: unknown;
25402
+ };
25403
+ content: {
25404
+ "application/json": components["schemas"]["ErrorResponse"];
25405
+ };
25406
+ };
25407
+ /** @description A plan with this key already exists. */
25408
+ 409: {
25409
+ headers: {
25410
+ [name: string]: unknown;
25411
+ };
25412
+ content: {
25413
+ "application/json": components["schemas"]["ErrorResponse"];
25414
+ };
25415
+ };
25416
+ };
25417
+ };
25418
+ getPlanById: {
25419
+ parameters: {
25420
+ query?: never;
25421
+ header?: never;
25422
+ path: {
25423
+ /** @description Plan ID. */
25424
+ id: number;
25425
+ };
25426
+ cookie?: never;
25427
+ };
25428
+ requestBody?: never;
25429
+ responses: {
25430
+ /** @description The plan. */
25431
+ 200: {
25432
+ headers: {
25433
+ [name: string]: unknown;
25434
+ };
25435
+ content: {
25436
+ "application/json": components["schemas"]["PlanResponse"];
25437
+ };
25438
+ };
25439
+ /** @description Invalid plan id. */
25440
+ 400: {
25441
+ headers: {
25442
+ [name: string]: unknown;
25443
+ };
25444
+ content: {
25445
+ "application/json": components["schemas"]["ErrorResponse"];
25446
+ };
25447
+ };
25448
+ /** @description Plan not found. */
25449
+ 404: {
25450
+ headers: {
25451
+ [name: string]: unknown;
25452
+ };
25453
+ content: {
25454
+ "application/json": components["schemas"]["ErrorResponse"];
25455
+ };
25456
+ };
25457
+ };
25458
+ };
25459
+ updatePlan: {
25460
+ parameters: {
25461
+ query?: never;
25462
+ header?: never;
25463
+ path: {
25464
+ /** @description Plan ID. */
25465
+ id: number;
25466
+ };
25467
+ cookie?: never;
25468
+ };
25469
+ requestBody?: {
25470
+ content: {
25471
+ "application/json": components["schemas"]["UpdatePlanRequest"];
25472
+ };
25473
+ };
25474
+ responses: {
25475
+ /** @description The updated plan. */
25476
+ 200: {
25477
+ headers: {
25478
+ [name: string]: unknown;
25479
+ };
25480
+ content: {
25481
+ "application/json": components["schemas"]["PlanResponse"];
25482
+ };
25483
+ };
25484
+ /** @description Validation failed. */
25485
+ 400: {
25486
+ headers: {
25487
+ [name: string]: unknown;
25488
+ };
25489
+ content: {
25490
+ "application/json": components["schemas"]["ErrorResponse"];
25491
+ };
25492
+ };
25493
+ /** @description Plan not found. */
25494
+ 404: {
25495
+ headers: {
25496
+ [name: string]: unknown;
25497
+ };
25498
+ content: {
25499
+ "application/json": components["schemas"]["ErrorResponse"];
25500
+ };
25501
+ };
25502
+ };
25503
+ };
25504
+ listProjectAddons: {
25505
+ parameters: {
25506
+ query?: never;
24060
25507
  header?: never;
24061
25508
  path?: never;
24062
25509
  cookie?: never;
@@ -24176,7 +25623,7 @@ export interface operations {
24176
25623
  "application/json": components["schemas"]["ErrorResponse"];
24177
25624
  };
24178
25625
  };
24179
- /** @description effective_from / order_form_line_id require super admin. */
25626
+ /** @description effective_from / plan_id require super admin. */
24180
25627
  403: {
24181
25628
  headers: {
24182
25629
  [name: string]: unknown;
@@ -25686,35 +27133,353 @@ export interface operations {
25686
27133
  };
25687
27134
  };
25688
27135
  responses: {
25689
- /** @description The created request and session. */
25690
- 201: {
27136
+ /** @description The created request and session. */
27137
+ 201: {
27138
+ headers: {
27139
+ [name: string]: unknown;
27140
+ };
27141
+ content: {
27142
+ "application/json": components["schemas"]["CreateRequestResponse"];
27143
+ };
27144
+ };
27145
+ /** @description Missing required fields or invalid input. */
27146
+ 400: {
27147
+ headers: {
27148
+ [name: string]: unknown;
27149
+ };
27150
+ content: {
27151
+ "application/json": components["schemas"]["CreateRequestError"];
27152
+ };
27153
+ };
27154
+ /** @description Project not found or inaccessible. */
27155
+ 404: {
27156
+ headers: {
27157
+ [name: string]: unknown;
27158
+ };
27159
+ content: {
27160
+ "application/json": components["schemas"]["ErrorResponse"];
27161
+ };
27162
+ };
27163
+ /** @description Failed to create request. */
27164
+ 500: {
27165
+ headers: {
27166
+ [name: string]: unknown;
27167
+ };
27168
+ content: {
27169
+ "application/json": components["schemas"]["ErrorResponse"];
27170
+ };
27171
+ };
27172
+ };
27173
+ };
27174
+ getRequest: {
27175
+ parameters: {
27176
+ query?: never;
27177
+ header?: never;
27178
+ path: {
27179
+ /** @description Request ID. */
27180
+ id: number;
27181
+ };
27182
+ cookie?: never;
27183
+ };
27184
+ requestBody?: never;
27185
+ responses: {
27186
+ /** @description The request. */
27187
+ 200: {
27188
+ headers: {
27189
+ [name: string]: unknown;
27190
+ };
27191
+ content: {
27192
+ "application/json": components["schemas"]["RequestResponse"];
27193
+ };
27194
+ };
27195
+ /** @description Invalid request ID. */
27196
+ 400: {
27197
+ headers: {
27198
+ [name: string]: unknown;
27199
+ };
27200
+ content: {
27201
+ "application/json": components["schemas"]["ErrorResponse"];
27202
+ };
27203
+ };
27204
+ /** @description Request not found. */
27205
+ 404: {
27206
+ headers: {
27207
+ [name: string]: unknown;
27208
+ };
27209
+ content: {
27210
+ "application/json": components["schemas"]["ErrorResponse"];
27211
+ };
27212
+ };
27213
+ };
27214
+ };
27215
+ deleteRequest: {
27216
+ parameters: {
27217
+ query?: never;
27218
+ header?: never;
27219
+ path: {
27220
+ /** @description Request ID. */
27221
+ id: number;
27222
+ };
27223
+ cookie?: never;
27224
+ };
27225
+ requestBody?: never;
27226
+ responses: {
27227
+ /** @description The deleted request ID. */
27228
+ 200: {
27229
+ headers: {
27230
+ [name: string]: unknown;
27231
+ };
27232
+ content: {
27233
+ "application/json": components["schemas"]["DeletedRequestResponse"];
27234
+ };
27235
+ };
27236
+ /** @description Invalid request ID. */
27237
+ 400: {
27238
+ headers: {
27239
+ [name: string]: unknown;
27240
+ };
27241
+ content: {
27242
+ "application/json": components["schemas"]["ErrorResponse"];
27243
+ };
27244
+ };
27245
+ /** @description Request not found or not deleted. */
27246
+ 404: {
27247
+ headers: {
27248
+ [name: string]: unknown;
27249
+ };
27250
+ content: {
27251
+ "application/json": components["schemas"]["ErrorResponse"];
27252
+ };
27253
+ };
27254
+ };
27255
+ };
27256
+ updateRequest: {
27257
+ parameters: {
27258
+ query?: never;
27259
+ header?: never;
27260
+ path: {
27261
+ /** @description Request ID. */
27262
+ id: number;
27263
+ };
27264
+ cookie?: never;
27265
+ };
27266
+ requestBody?: {
27267
+ content: {
27268
+ "application/json": {
27269
+ /** @description New request title. */
27270
+ title?: string;
27271
+ /** @description New request description. */
27272
+ description?: string;
27273
+ /**
27274
+ * @description New request status.
27275
+ * @enum {string}
27276
+ */
27277
+ status?: "draft" | "open" | "in-review" | "closed" | "resolved";
27278
+ };
27279
+ };
27280
+ };
27281
+ responses: {
27282
+ /** @description The updated request. */
27283
+ 200: {
27284
+ headers: {
27285
+ [name: string]: unknown;
27286
+ };
27287
+ content: {
27288
+ "application/json": components["schemas"]["UpdatedRequestResponse"];
27289
+ };
27290
+ };
27291
+ /** @description No fields to update or invalid input. */
27292
+ 400: {
27293
+ headers: {
27294
+ [name: string]: unknown;
27295
+ };
27296
+ content: {
27297
+ "application/json": components["schemas"]["ErrorResponse"];
27298
+ };
27299
+ };
27300
+ /** @description Request not found or not updated. */
27301
+ 404: {
27302
+ headers: {
27303
+ [name: string]: unknown;
27304
+ };
27305
+ content: {
27306
+ "application/json": components["schemas"]["ErrorResponse"];
27307
+ };
27308
+ };
27309
+ };
27310
+ };
27311
+ listRequestChatSessions: {
27312
+ parameters: {
27313
+ query?: never;
27314
+ header?: never;
27315
+ path: {
27316
+ /** @description Request ID. */
27317
+ id: number;
27318
+ };
27319
+ cookie?: never;
27320
+ };
27321
+ requestBody?: never;
27322
+ responses: {
27323
+ /** @description Chat sessions for the request (or an empty-state message). */
27324
+ 200: {
27325
+ headers: {
27326
+ [name: string]: unknown;
27327
+ };
27328
+ content: {
27329
+ "application/json": components["schemas"]["RequestChatSessionsResponse"];
27330
+ };
27331
+ };
27332
+ /** @description Invalid request ID. */
27333
+ 400: {
27334
+ headers: {
27335
+ [name: string]: unknown;
27336
+ };
27337
+ content: {
27338
+ "application/json": components["schemas"]["ErrorResponse"];
27339
+ };
27340
+ };
27341
+ /** @description Request not found. */
27342
+ 404: {
27343
+ headers: {
27344
+ [name: string]: unknown;
27345
+ };
27346
+ content: {
27347
+ "application/json": components["schemas"]["ErrorResponse"];
27348
+ };
27349
+ };
27350
+ };
27351
+ };
27352
+ createRequestChatSession: {
27353
+ parameters: {
27354
+ query?: never;
27355
+ header?: never;
27356
+ path: {
27357
+ /** @description Request ID. */
27358
+ id: number;
27359
+ };
27360
+ cookie?: never;
27361
+ };
27362
+ requestBody?: {
27363
+ content: {
27364
+ "application/json": {
27365
+ /** @description Project the chat session belongs to. */
27366
+ project_id?: number | string | unknown;
27367
+ /** @description First message to send to the agent. */
27368
+ initial_prompt?: string | null;
27369
+ /** @description Model to use for the chat session. */
27370
+ model?: string | null;
27371
+ };
27372
+ };
27373
+ };
27374
+ responses: {
27375
+ /** @description The created chat session. */
27376
+ 200: {
27377
+ headers: {
27378
+ [name: string]: unknown;
27379
+ };
27380
+ content: {
27381
+ "application/json": components["schemas"]["RequestSessionResponse"];
27382
+ };
27383
+ };
27384
+ /** @description Missing acting user or project_id, or invalid input. */
27385
+ 400: {
27386
+ headers: {
27387
+ [name: string]: unknown;
27388
+ };
27389
+ content: {
27390
+ "application/json": components["schemas"]["ErrorResponse"];
27391
+ };
27392
+ };
27393
+ /** @description Project not found or inaccessible. */
27394
+ 404: {
27395
+ headers: {
27396
+ [name: string]: unknown;
27397
+ };
27398
+ content: {
27399
+ "application/json": components["schemas"]["ErrorResponse"];
27400
+ };
27401
+ };
27402
+ };
27403
+ };
27404
+ listRunnerBackends: {
27405
+ parameters: {
27406
+ query?: {
27407
+ /** @description Only this organisation's backends. */
27408
+ org_id?: number | null;
27409
+ };
27410
+ header?: never;
27411
+ path?: never;
27412
+ cookie?: never;
27413
+ };
27414
+ requestBody?: never;
27415
+ responses: {
27416
+ /** @description The runner backends. */
27417
+ 200: {
27418
+ headers: {
27419
+ [name: string]: unknown;
27420
+ };
27421
+ content: {
27422
+ "application/json": components["schemas"]["RunnerBackendListResponse"];
27423
+ };
27424
+ };
27425
+ };
27426
+ };
27427
+ createRunnerBackend: {
27428
+ parameters: {
27429
+ query?: never;
27430
+ header?: never;
27431
+ path?: never;
27432
+ cookie?: never;
27433
+ };
27434
+ requestBody?: {
27435
+ content: {
27436
+ "application/json": components["schemas"]["CreateRunnerBackendBody"];
27437
+ };
27438
+ };
27439
+ responses: {
27440
+ /** @description The registered backend. */
27441
+ 200: {
25691
27442
  headers: {
25692
27443
  [name: string]: unknown;
25693
27444
  };
25694
27445
  content: {
25695
- "application/json": components["schemas"]["CreateRequestResponse"];
27446
+ "application/json": components["schemas"]["RunnerBackendResponse"];
25696
27447
  };
25697
27448
  };
25698
- /** @description Missing required fields or invalid input. */
27449
+ /** @description Invalid registration. */
25699
27450
  400: {
25700
27451
  headers: {
25701
27452
  [name: string]: unknown;
25702
27453
  };
25703
27454
  content: {
25704
- "application/json": components["schemas"]["CreateRequestError"];
27455
+ "application/json": components["schemas"]["ErrorResponse"];
25705
27456
  };
25706
27457
  };
25707
- /** @description Project not found or inaccessible. */
25708
- 404: {
27458
+ };
27459
+ };
27460
+ getRunnerBackend: {
27461
+ parameters: {
27462
+ query?: never;
27463
+ header?: never;
27464
+ path: {
27465
+ /** @description Runner backend ID. */
27466
+ id: number | null;
27467
+ };
27468
+ cookie?: never;
27469
+ };
27470
+ requestBody?: never;
27471
+ responses: {
27472
+ /** @description The runner backend. */
27473
+ 200: {
25709
27474
  headers: {
25710
27475
  [name: string]: unknown;
25711
27476
  };
25712
27477
  content: {
25713
- "application/json": components["schemas"]["ErrorResponse"];
27478
+ "application/json": components["schemas"]["RunnerBackendResponse"];
25714
27479
  };
25715
27480
  };
25716
- /** @description Failed to create request. */
25717
- 500: {
27481
+ /** @description Runner backend not found. */
27482
+ 404: {
25718
27483
  headers: {
25719
27484
  [name: string]: unknown;
25720
27485
  };
@@ -25724,37 +27489,28 @@ export interface operations {
25724
27489
  };
25725
27490
  };
25726
27491
  };
25727
- getRequest: {
27492
+ disableRunnerBackend: {
25728
27493
  parameters: {
25729
27494
  query?: never;
25730
27495
  header?: never;
25731
27496
  path: {
25732
- /** @description Request ID. */
25733
- id: number;
27497
+ /** @description Runner backend ID. */
27498
+ id: number | null;
25734
27499
  };
25735
27500
  cookie?: never;
25736
27501
  };
25737
27502
  requestBody?: never;
25738
27503
  responses: {
25739
- /** @description The request. */
27504
+ /** @description The disabled backend. */
25740
27505
  200: {
25741
27506
  headers: {
25742
27507
  [name: string]: unknown;
25743
27508
  };
25744
27509
  content: {
25745
- "application/json": components["schemas"]["RequestResponse"];
25746
- };
25747
- };
25748
- /** @description Invalid request ID. */
25749
- 400: {
25750
- headers: {
25751
- [name: string]: unknown;
25752
- };
25753
- content: {
25754
- "application/json": components["schemas"]["ErrorResponse"];
27510
+ "application/json": components["schemas"]["RunnerBackendResponse"];
25755
27511
  };
25756
27512
  };
25757
- /** @description Request not found. */
27513
+ /** @description Runner backend not found. */
25758
27514
  404: {
25759
27515
  headers: {
25760
27516
  [name: string]: unknown;
@@ -25765,37 +27521,28 @@ export interface operations {
25765
27521
  };
25766
27522
  };
25767
27523
  };
25768
- deleteRequest: {
27524
+ verifyRunnerBackend: {
25769
27525
  parameters: {
25770
27526
  query?: never;
25771
27527
  header?: never;
25772
27528
  path: {
25773
- /** @description Request ID. */
25774
- id: number;
27529
+ /** @description Runner backend ID. */
27530
+ id: number | null;
25775
27531
  };
25776
27532
  cookie?: never;
25777
27533
  };
25778
27534
  requestBody?: never;
25779
27535
  responses: {
25780
- /** @description The deleted request ID. */
27536
+ /** @description Every check, and the backend after them. */
25781
27537
  200: {
25782
27538
  headers: {
25783
27539
  [name: string]: unknown;
25784
27540
  };
25785
27541
  content: {
25786
- "application/json": components["schemas"]["DeletedRequestResponse"];
25787
- };
25788
- };
25789
- /** @description Invalid request ID. */
25790
- 400: {
25791
- headers: {
25792
- [name: string]: unknown;
25793
- };
25794
- content: {
25795
- "application/json": components["schemas"]["ErrorResponse"];
27542
+ "application/json": components["schemas"]["RunnerBackendVerifyResponse"];
25796
27543
  };
25797
27544
  };
25798
- /** @description Request not found or not deleted. */
27545
+ /** @description Runner backend not found. */
25799
27546
  404: {
25800
27547
  headers: {
25801
27548
  [name: string]: unknown;
@@ -25806,42 +27553,25 @@ export interface operations {
25806
27553
  };
25807
27554
  };
25808
27555
  };
25809
- updateRequest: {
27556
+ getProjectRunnerBackend: {
25810
27557
  parameters: {
25811
27558
  query?: never;
25812
27559
  header?: never;
25813
- path: {
25814
- /** @description Request ID. */
25815
- id: number;
25816
- };
27560
+ path?: never;
25817
27561
  cookie?: never;
25818
27562
  };
25819
- requestBody?: {
25820
- content: {
25821
- "application/json": {
25822
- /** @description New request title. */
25823
- title?: string;
25824
- /** @description New request description. */
25825
- description?: string;
25826
- /**
25827
- * @description New request status.
25828
- * @enum {string}
25829
- */
25830
- status?: "draft" | "open" | "in-review" | "closed" | "resolved";
25831
- };
25832
- };
25833
- };
27563
+ requestBody?: never;
25834
27564
  responses: {
25835
- /** @description The updated request. */
27565
+ /** @description The project's runner backend, or null. */
25836
27566
  200: {
25837
27567
  headers: {
25838
27568
  [name: string]: unknown;
25839
27569
  };
25840
27570
  content: {
25841
- "application/json": components["schemas"]["UpdatedRequestResponse"];
27571
+ "application/json": components["schemas"]["ProjectRunnerBackendDetailResponse"];
25842
27572
  };
25843
27573
  };
25844
- /** @description No fields to update or invalid input. */
27574
+ /** @description Missing or invalid project scope. */
25845
27575
  400: {
25846
27576
  headers: {
25847
27577
  [name: string]: unknown;
@@ -25850,7 +27580,7 @@ export interface operations {
25850
27580
  "application/json": components["schemas"]["ErrorResponse"];
25851
27581
  };
25852
27582
  };
25853
- /** @description Request not found or not updated. */
27583
+ /** @description Project not found or not accessible. */
25854
27584
  404: {
25855
27585
  headers: {
25856
27586
  [name: string]: unknown;
@@ -25861,28 +27591,25 @@ export interface operations {
25861
27591
  };
25862
27592
  };
25863
27593
  };
25864
- listRequestChatSessions: {
27594
+ verifyProjectRunnerBackend: {
25865
27595
  parameters: {
25866
27596
  query?: never;
25867
27597
  header?: never;
25868
- path: {
25869
- /** @description Request ID. */
25870
- id: number;
25871
- };
27598
+ path?: never;
25872
27599
  cookie?: never;
25873
27600
  };
25874
27601
  requestBody?: never;
25875
27602
  responses: {
25876
- /** @description Chat sessions for the request (or an empty-state message). */
27603
+ /** @description Every check, and the backend after them. */
25877
27604
  200: {
25878
27605
  headers: {
25879
27606
  [name: string]: unknown;
25880
27607
  };
25881
27608
  content: {
25882
- "application/json": components["schemas"]["RequestChatSessionsResponse"];
27609
+ "application/json": components["schemas"]["RunnerBackendVerifyResponse"];
25883
27610
  };
25884
27611
  };
25885
- /** @description Invalid request ID. */
27612
+ /** @description Missing or invalid project scope. */
25886
27613
  400: {
25887
27614
  headers: {
25888
27615
  [name: string]: unknown;
@@ -25891,7 +27618,7 @@ export interface operations {
25891
27618
  "application/json": components["schemas"]["ErrorResponse"];
25892
27619
  };
25893
27620
  };
25894
- /** @description Request not found. */
27621
+ /** @description Project not found, or it runs on Empirical-hosted. */
25895
27622
  404: {
25896
27623
  headers: {
25897
27624
  [name: string]: unknown;
@@ -25900,41 +27627,43 @@ export interface operations {
25900
27627
  "application/json": components["schemas"]["ErrorResponse"];
25901
27628
  };
25902
27629
  };
27630
+ /** @description The runner backend is disabled. */
27631
+ 409: {
27632
+ headers: {
27633
+ [name: string]: unknown;
27634
+ };
27635
+ content: {
27636
+ "application/json": components["schemas"]["ErrorResponse"];
27637
+ };
27638
+ };
25903
27639
  };
25904
27640
  };
25905
- createRequestChatSession: {
27641
+ setProjectRunnerBackend: {
25906
27642
  parameters: {
25907
27643
  query?: never;
25908
27644
  header?: never;
25909
27645
  path: {
25910
- /** @description Request ID. */
25911
- id: number;
27646
+ /** @description Project ID. */
27647
+ project_id: number | null;
25912
27648
  };
25913
27649
  cookie?: never;
25914
27650
  };
25915
27651
  requestBody?: {
25916
27652
  content: {
25917
- "application/json": {
25918
- /** @description Project the chat session belongs to. */
25919
- project_id?: number | string | unknown;
25920
- /** @description First message to send to the agent. */
25921
- initial_prompt?: string | null;
25922
- /** @description Model to use for the chat session. */
25923
- model?: string | null;
25924
- };
27653
+ "application/json": components["schemas"]["SetProjectRunnerBackendBody"];
25925
27654
  };
25926
27655
  };
25927
27656
  responses: {
25928
- /** @description The created chat session. */
27657
+ /** @description The project's backend. */
25929
27658
  200: {
25930
27659
  headers: {
25931
27660
  [name: string]: unknown;
25932
27661
  };
25933
27662
  content: {
25934
- "application/json": components["schemas"]["RequestSessionResponse"];
27663
+ "application/json": components["schemas"]["ProjectRunnerBackendResponse"];
25935
27664
  };
25936
27665
  };
25937
- /** @description Missing acting user or project_id, or invalid input. */
27666
+ /** @description The backend belongs to another org or is not active. */
25938
27667
  400: {
25939
27668
  headers: {
25940
27669
  [name: string]: unknown;
@@ -25943,7 +27672,7 @@ export interface operations {
25943
27672
  "application/json": components["schemas"]["ErrorResponse"];
25944
27673
  };
25945
27674
  };
25946
- /** @description Project not found or inaccessible. */
27675
+ /** @description Project or runner backend not found. */
25947
27676
  404: {
25948
27677
  headers: {
25949
27678
  [name: string]: unknown;
@@ -26160,6 +27889,145 @@ export interface operations {
26160
27889
  };
26161
27890
  };
26162
27891
  };
27892
+ listSystemMessages: {
27893
+ parameters: {
27894
+ query?: {
27895
+ limit?: number;
27896
+ };
27897
+ header?: never;
27898
+ path?: never;
27899
+ cookie?: never;
27900
+ };
27901
+ requestBody?: never;
27902
+ responses: {
27903
+ /** @description Recent system messages, newest first. */
27904
+ 200: {
27905
+ headers: {
27906
+ [name: string]: unknown;
27907
+ };
27908
+ content: {
27909
+ "application/json": components["schemas"]["SystemMessageListResponse"];
27910
+ };
27911
+ };
27912
+ };
27913
+ };
27914
+ createSystemMessage: {
27915
+ parameters: {
27916
+ query?: never;
27917
+ header?: never;
27918
+ path?: never;
27919
+ cookie?: never;
27920
+ };
27921
+ requestBody?: {
27922
+ content: {
27923
+ "application/json": components["schemas"]["CreateSystemMessageRequest"];
27924
+ };
27925
+ };
27926
+ responses: {
27927
+ /** @description The message and its per-project delivery. */
27928
+ 200: {
27929
+ headers: {
27930
+ [name: string]: unknown;
27931
+ };
27932
+ content: {
27933
+ "application/json": components["schemas"]["CreateSystemMessageResponse"];
27934
+ };
27935
+ };
27936
+ /** @description A listed project does not exist. */
27937
+ 400: {
27938
+ headers: {
27939
+ [name: string]: unknown;
27940
+ };
27941
+ content: {
27942
+ "application/json": components["schemas"]["ErrorResponse"];
27943
+ };
27944
+ };
27945
+ /** @description Broadcast requested but no project has an open manager session. */
27946
+ 422: {
27947
+ headers: {
27948
+ [name: string]: unknown;
27949
+ };
27950
+ content: {
27951
+ "application/json": components["schemas"]["ErrorResponse"];
27952
+ };
27953
+ };
27954
+ };
27955
+ };
27956
+ getSystemMessage: {
27957
+ parameters: {
27958
+ query?: never;
27959
+ header?: never;
27960
+ path: {
27961
+ id: number;
27962
+ };
27963
+ cookie?: never;
27964
+ };
27965
+ requestBody?: never;
27966
+ responses: {
27967
+ /** @description The message and its per-project status. */
27968
+ 200: {
27969
+ headers: {
27970
+ [name: string]: unknown;
27971
+ };
27972
+ content: {
27973
+ "application/json": components["schemas"]["SystemMessageDetailResponse"];
27974
+ };
27975
+ };
27976
+ /** @description System message not found. */
27977
+ 404: {
27978
+ headers: {
27979
+ [name: string]: unknown;
27980
+ };
27981
+ content: {
27982
+ "application/json": components["schemas"]["ErrorResponse"];
27983
+ };
27984
+ };
27985
+ };
27986
+ };
27987
+ ackSystemMessage: {
27988
+ parameters: {
27989
+ query?: never;
27990
+ header?: never;
27991
+ path: {
27992
+ id: number;
27993
+ };
27994
+ cookie?: never;
27995
+ };
27996
+ requestBody?: {
27997
+ content: {
27998
+ "application/json": components["schemas"]["AckSystemMessageRequest"];
27999
+ };
28000
+ };
28001
+ responses: {
28002
+ /** @description The recorded acknowledgement. */
28003
+ 200: {
28004
+ headers: {
28005
+ [name: string]: unknown;
28006
+ };
28007
+ content: {
28008
+ "application/json": components["schemas"]["AckSystemMessageResponse"];
28009
+ };
28010
+ };
28011
+ /** @description Caller is not a manager chat session. */
28012
+ 403: {
28013
+ headers: {
28014
+ [name: string]: unknown;
28015
+ };
28016
+ content: {
28017
+ "application/json": components["schemas"]["ErrorResponse"];
28018
+ };
28019
+ };
28020
+ /** @description System message was not sent to this project. */
28021
+ 404: {
28022
+ headers: {
28023
+ [name: string]: unknown;
28024
+ };
28025
+ content: {
28026
+ "application/json": components["schemas"]["ErrorResponse"];
28027
+ };
28028
+ };
28029
+ };
28030
+ };
26163
28031
  ingestTestCaseRunEndEvent: {
26164
28032
  parameters: {
26165
28033
  query?: never;
@@ -26624,6 +28492,26 @@ export interface operations {
26624
28492
  };
26625
28493
  };
26626
28494
  };
28495
+ getCurrentUser: {
28496
+ parameters: {
28497
+ query?: never;
28498
+ header?: never;
28499
+ path?: never;
28500
+ cookie?: never;
28501
+ };
28502
+ requestBody?: never;
28503
+ responses: {
28504
+ /** @description The current user. */
28505
+ 200: {
28506
+ headers: {
28507
+ [name: string]: unknown;
28508
+ };
28509
+ content: {
28510
+ "application/json": components["schemas"]["CurrentUserResponse"];
28511
+ };
28512
+ };
28513
+ };
28514
+ };
26627
28515
  createMyMemberships: {
26628
28516
  parameters: {
26629
28517
  query?: never;