@empiricalrun/playwright-utils 0.60.2 โ†’ 0.60.4

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.
@@ -160,7 +160,7 @@ export interface paths {
160
160
  };
161
161
  /**
162
162
  * ๐Ÿค– List Slack share targets for a run
163
- * @description Lists Slack destinations for sharing this run's triage content: reply targets for channels with an existing run notification thread, plus subscribed channels for a new message.
163
+ * @description Lists Slack destinations for sharing this run's triage content: reply targets for channels with an existing run notification thread, plus active channels accessible to the project's organization for a new message.
164
164
  */
165
165
  get: operations["listTestRunShareTargets"];
166
166
  put?: never;
@@ -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;
@@ -442,7 +462,11 @@ export interface paths {
442
462
  path?: never;
443
463
  cookie?: never;
444
464
  };
445
- get?: never;
465
+ /**
466
+ * โš™๏ธ Get a test run's delegated triage session
467
+ * @description Returns the newest delegated triage session whose source exactly matches the test run. Per-test fix sessions are excluded.
468
+ */
469
+ get: operations["getTestRunTriageSession"];
446
470
  put?: never;
447
471
  /**
448
472
  * โš™๏ธ Delegate a test run to triage
@@ -1070,46 +1094,6 @@ export interface paths {
1070
1094
  patch?: never;
1071
1095
  trace?: never;
1072
1096
  };
1073
- "/api/slack/link": {
1074
- parameters: {
1075
- query?: never;
1076
- header?: never;
1077
- path?: never;
1078
- cookie?: never;
1079
- };
1080
- get?: never;
1081
- put?: never;
1082
- /**
1083
- * Slack /empirical slash command
1084
- * @description Handles the /empirical slash command directly from Slack (verified by the Slack request signature): opens the project-subscription modal or returns usage text. Responds with text/plain โ€” a non-empty body is shown to the invoking user; an empty body means a modal opened.
1085
- */
1086
- post: operations["slackLinkWebhook"];
1087
- delete?: never;
1088
- options?: never;
1089
- head?: never;
1090
- patch?: never;
1091
- trace?: never;
1092
- };
1093
- "/api/slack/channels": {
1094
- parameters: {
1095
- query?: never;
1096
- header?: never;
1097
- path?: never;
1098
- cookie?: never;
1099
- };
1100
- /**
1101
- * ๐Ÿค– List Slack channels
1102
- * @description Lists the Slack channel subscriptions for the scoped project, optionally validated against Slack.
1103
- */
1104
- get: operations["listSlackChannels"];
1105
- put?: never;
1106
- post?: never;
1107
- delete?: never;
1108
- options?: never;
1109
- head?: never;
1110
- patch?: never;
1111
- trace?: never;
1112
- };
1113
1097
  "/api/slack/files/{file_id}": {
1114
1098
  parameters: {
1115
1099
  query?: never;
@@ -1234,28 +1218,64 @@ export interface paths {
1234
1218
  patch?: never;
1235
1219
  trace?: never;
1236
1220
  };
1237
- "/api/slack/channels/{id}": {
1221
+ "/api/v2/slack/channels": {
1238
1222
  parameters: {
1239
1223
  query?: never;
1240
1224
  header?: never;
1241
1225
  path?: never;
1242
1226
  cookie?: never;
1243
1227
  };
1244
- get?: never;
1228
+ /**
1229
+ * ๐Ÿค– ๐Ÿงช List canonical Slack channels
1230
+ * @description Lists active Slack channels registered for the scoped project's organization. Reporter configuration is intentionally not part of this resource.
1231
+ */
1232
+ get: operations["listSlackChannelsV2"];
1245
1233
  put?: never;
1246
1234
  post?: never;
1235
+ delete?: never;
1236
+ options?: never;
1237
+ head?: never;
1238
+ patch?: never;
1239
+ trace?: never;
1240
+ };
1241
+ "/api/v2/slack/channels/{id}/refresh": {
1242
+ parameters: {
1243
+ query?: never;
1244
+ header?: never;
1245
+ path?: never;
1246
+ cookie?: never;
1247
+ };
1248
+ get?: never;
1249
+ put?: never;
1247
1250
  /**
1248
- * โš™๏ธ Delete a Slack channel
1249
- * @description Removes a Slack channel subscription from the project.
1251
+ * ๐Ÿค– ๐Ÿงช Refresh a canonical Slack channel's name
1252
+ * @description Re-reads the channel from Slack and stores its current name when it changed. The canonical channel ID is stable, so environment reporter configs are unaffected. Access problems are reported in the validation result rather than as an error.
1250
1253
  */
1251
- delete: operations["deleteSlackChannel"];
1254
+ post: operations["refreshSlackChannelV2"];
1255
+ delete?: never;
1252
1256
  options?: never;
1253
1257
  head?: never;
1258
+ patch?: never;
1259
+ trace?: never;
1260
+ };
1261
+ "/api/v2/slack/channels/validate": {
1262
+ parameters: {
1263
+ query?: never;
1264
+ header?: never;
1265
+ path?: never;
1266
+ cookie?: never;
1267
+ };
1254
1268
  /**
1255
- * โš™๏ธ Update a Slack channel
1256
- * @description Updates a Slack channel subscription's environment filter settings.
1269
+ * ๐Ÿค– ๐Ÿงช Validate canonical Slack channels
1270
+ * @description Checks every active channel registered for the scoped project's organization against Slack. Validation is read-only and verifies bot access and the stored channel name.
1257
1271
  */
1258
- patch: operations["updateSlackChannel"];
1272
+ get: operations["validateSlackChannelsV2"];
1273
+ put?: never;
1274
+ post?: never;
1275
+ delete?: never;
1276
+ options?: never;
1277
+ head?: never;
1278
+ patch?: never;
1259
1279
  trace?: never;
1260
1280
  };
1261
1281
  "/api/slack/teams": {
@@ -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. 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;
@@ -2102,7 +2122,7 @@ export interface paths {
2102
2122
  };
2103
2123
  /**
2104
2124
  * โš™๏ธ Get a cumulative diff
2105
- * @description Returns the cumulative diff from the session's base branch to the given head SHA.
2125
+ * @description Returns the cumulative diff from the project's default branch to the given head SHA.
2106
2126
  */
2107
2127
  get: operations["getChatSessionCumulativeDiff"];
2108
2128
  put?: never;
@@ -2267,46 +2287,6 @@ export interface paths {
2267
2287
  patch?: never;
2268
2288
  trace?: never;
2269
2289
  };
2270
- "/api/chat-sessions/{id}/sandbox/files": {
2271
- parameters: {
2272
- query?: never;
2273
- header?: never;
2274
- path?: never;
2275
- cookie?: never;
2276
- };
2277
- /**
2278
- * โš™๏ธ List sandbox files
2279
- * @description Walks the sandbox file tree under `path` (default /repo). Super-admin only.
2280
- */
2281
- get: operations["listChatSessionSandboxFiles"];
2282
- put?: never;
2283
- post?: never;
2284
- delete?: never;
2285
- options?: never;
2286
- head?: never;
2287
- patch?: never;
2288
- trace?: never;
2289
- };
2290
- "/api/chat-sessions/{id}/sandbox/files/content": {
2291
- parameters: {
2292
- query?: never;
2293
- header?: never;
2294
- path?: never;
2295
- cookie?: never;
2296
- };
2297
- /**
2298
- * โš™๏ธ Read a sandbox file
2299
- * @description Reads a single sandbox file as text or an inline image data URI. Super-admin only.
2300
- */
2301
- get: operations["getChatSessionSandboxFileContent"];
2302
- put?: never;
2303
- post?: never;
2304
- delete?: never;
2305
- options?: never;
2306
- head?: never;
2307
- patch?: never;
2308
- trace?: never;
2309
- };
2310
2290
  "/api/chat-sessions/{id}/sandbox/health": {
2311
2291
  parameters: {
2312
2292
  query?: never;
@@ -2347,26 +2327,6 @@ export interface paths {
2347
2327
  patch?: never;
2348
2328
  trace?: never;
2349
2329
  };
2350
- "/api/chat-sessions/{id}/sandbox/session-file": {
2351
- parameters: {
2352
- query?: never;
2353
- header?: never;
2354
- path?: never;
2355
- cookie?: never;
2356
- };
2357
- /**
2358
- * โš™๏ธ Download the agent session file
2359
- * @description Streams the sandbox agent's session.jsonl as a file download.
2360
- */
2361
- get: operations["getChatSessionSandboxSessionFile"];
2362
- put?: never;
2363
- post?: never;
2364
- delete?: never;
2365
- options?: never;
2366
- head?: never;
2367
- patch?: never;
2368
- trace?: never;
2369
- };
2370
2330
  "/api/chat-sessions/{id}/snapshot": {
2371
2331
  parameters: {
2372
2332
  query?: never;
@@ -2476,7 +2436,7 @@ export interface paths {
2476
2436
  };
2477
2437
  /**
2478
2438
  * โš™๏ธ List branches the sandbox may not push to
2479
- * @description Returns the project's default branch and the chat session's base branch. The sandbox git proxy blocks pushes to these. The session is derived from the sandbox-delegation principal.
2439
+ * @description Returns the project's configured protected branches. The sandbox git proxy blocks pushes to these. The session is derived from the sandbox-delegation principal.
2480
2440
  */
2481
2441
  get: operations["getChatSessionSandboxProtectedBranches"];
2482
2442
  put?: never;
@@ -2496,7 +2456,7 @@ export interface paths {
2496
2456
  };
2497
2457
  /**
2498
2458
  * โš™๏ธ List chat-session creators
2499
- * @description Returns the distinct users who created chat sessions in scope, enriched with Supabase user details.
2459
+ * @description Returns the distinct users who created chat sessions in scope that were updated in the last 30 days, enriched with Supabase user details.
2500
2460
  */
2501
2461
  get: operations["listChatSessionUsers"];
2502
2462
  put?: never;
@@ -2650,7 +2610,7 @@ export interface paths {
2650
2610
  put?: never;
2651
2611
  /**
2652
2612
  * โš™๏ธ Share a failure group's diagnosis
2653
- * @description Posts this group's diagnosis to a chosen Slack destination, with a link back to the failure group. The diagnosis and header are read from the stored group, never the client. A thread reply must belong to a run in this project; a new message must target a subscribed channel.
2613
+ * @description Posts this group's diagnosis to a chosen Slack destination, with a link back to the failure group. The diagnosis and header are read from the stored group, never the client. A thread reply must belong to a run in this project; the channel must be accessible to the project's organization.
2654
2614
  */
2655
2615
  post: operations["shareFailureGroup"];
2656
2616
  delete?: never;
@@ -2719,6 +2679,26 @@ export interface paths {
2719
2679
  patch?: never;
2720
2680
  trace?: never;
2721
2681
  };
2682
+ "/api/github/branches": {
2683
+ parameters: {
2684
+ query?: never;
2685
+ header?: never;
2686
+ path?: never;
2687
+ cookie?: never;
2688
+ };
2689
+ /**
2690
+ * Search repository branches
2691
+ * @description Searches branch names server-side through GitHub and returns a bounded result set.
2692
+ */
2693
+ get: operations["searchRepositoryBranches"];
2694
+ put?: never;
2695
+ post?: never;
2696
+ delete?: never;
2697
+ options?: never;
2698
+ head?: never;
2699
+ patch?: never;
2700
+ trace?: never;
2701
+ };
2722
2702
  "/api/github/commit/diff": {
2723
2703
  parameters: {
2724
2704
  query?: never;
@@ -2862,7 +2842,7 @@ export interface paths {
2862
2842
  put?: never;
2863
2843
  /**
2864
2844
  * โš™๏ธ Merge a pull request
2865
- * @description Squash-merges an open, mergeable pull request.
2845
+ * @description Merges an open, mergeable pull request with a merge commit.
2866
2846
  */
2867
2847
  post: operations["mergePullRequest"];
2868
2848
  delete?: never;
@@ -2931,6 +2911,26 @@ export interface paths {
2931
2911
  patch?: never;
2932
2912
  trace?: never;
2933
2913
  };
2914
+ "/api/github/reporter-app/deliveries": {
2915
+ parameters: {
2916
+ query?: never;
2917
+ header?: never;
2918
+ path?: never;
2919
+ cookie?: never;
2920
+ };
2921
+ /**
2922
+ * โš™๏ธ List reporter deliveries
2923
+ * @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).
2924
+ */
2925
+ get: operations["listReporterDeliveries"];
2926
+ put?: never;
2927
+ post?: never;
2928
+ delete?: never;
2929
+ options?: never;
2930
+ head?: never;
2931
+ patch?: never;
2932
+ trace?: never;
2933
+ };
2934
2934
  "/api/github/reporter-app/events": {
2935
2935
  parameters: {
2936
2936
  query?: never;
@@ -3035,6 +3035,26 @@ export interface paths {
3035
3035
  patch?: never;
3036
3036
  trace?: never;
3037
3037
  };
3038
+ "/api/github/reporter-app/pull-request": {
3039
+ parameters: {
3040
+ query?: never;
3041
+ header?: never;
3042
+ path?: never;
3043
+ cookie?: never;
3044
+ };
3045
+ /**
3046
+ * โš™๏ธ Get a delivery's pull request
3047
+ * @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.
3048
+ */
3049
+ get: operations["getReporterPullRequest"];
3050
+ put?: never;
3051
+ post?: never;
3052
+ delete?: never;
3053
+ options?: never;
3054
+ head?: never;
3055
+ patch?: never;
3056
+ trace?: never;
3057
+ };
3038
3058
  "/api/github/tree": {
3039
3059
  parameters: {
3040
3060
  query?: never;
@@ -3911,6 +3931,26 @@ export interface paths {
3911
3931
  patch?: never;
3912
3932
  trace?: never;
3913
3933
  };
3934
+ "/api/memories/activity": {
3935
+ parameters: {
3936
+ query?: never;
3937
+ header?: never;
3938
+ path?: never;
3939
+ cookie?: never;
3940
+ };
3941
+ /**
3942
+ * ๐Ÿ›ก๏ธ ๐Ÿงช Memory activity across projects
3943
+ * @description Returns every memory across all projects (soft-deleted included, content omitted) with edit statistics from its version history, plus daily create/edit/delete counts per project.
3944
+ */
3945
+ get: operations["listMemoryActivity"];
3946
+ put?: never;
3947
+ post?: never;
3948
+ delete?: never;
3949
+ options?: never;
3950
+ head?: never;
3951
+ patch?: never;
3952
+ trace?: never;
3953
+ };
3914
3954
  "/api/metrics/project-last-7-days": {
3915
3955
  parameters: {
3916
3956
  query?: never;
@@ -4175,7 +4215,7 @@ export interface paths {
4175
4215
  post?: never;
4176
4216
  /**
4177
4217
  * ๐Ÿ›ก๏ธ 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.
4218
+ * @description Removes the user's membership in the organization; access ends on their next request. Restricted to org members and super admins.
4179
4219
  */
4180
4220
  delete: operations["removeOrgMember"];
4181
4221
  options?: never;
@@ -4214,7 +4254,7 @@ export interface paths {
4214
4254
  put?: never;
4215
4255
  /**
4216
4256
  * โš™๏ธ 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.
4257
+ * @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
4258
  */
4219
4259
  post: operations["resolveMembership"];
4220
4260
  delete?: never;
@@ -4408,7 +4448,7 @@ export interface paths {
4408
4448
  };
4409
4449
  /**
4410
4450
  * โš™๏ธ List recent branches
4411
- * @description Lists recent branches with test-run activity and persistent-branch diffs.
4451
+ * @description Lists recent branches with test-run activity.
4412
4452
  */
4413
4453
  get: operations["listProjectBranches"];
4414
4454
  put?: never;
@@ -4519,6 +4559,46 @@ export interface paths {
4519
4559
  patch?: never;
4520
4560
  trace?: never;
4521
4561
  };
4562
+ "/api/projects/{id}/repo-settings-check": {
4563
+ parameters: {
4564
+ query?: never;
4565
+ header?: never;
4566
+ path?: never;
4567
+ cookie?: never;
4568
+ };
4569
+ /**
4570
+ * โš™๏ธ Check test repository settings
4571
+ * @description Checks the project's GitHub repository (or a repo transfer destination) against the settings Empirical needs: merge commits only, app access, matching default branch, and no rulesets blocking Empirical's branches.
4572
+ */
4573
+ get: operations["checkProjectRepoSettings"];
4574
+ put?: never;
4575
+ post?: never;
4576
+ delete?: never;
4577
+ options?: never;
4578
+ head?: never;
4579
+ patch?: never;
4580
+ trace?: never;
4581
+ };
4582
+ "/api/projects/{id}/repo-settings-check/fix": {
4583
+ parameters: {
4584
+ query?: never;
4585
+ header?: never;
4586
+ path?: never;
4587
+ cookie?: never;
4588
+ };
4589
+ get?: never;
4590
+ put?: never;
4591
+ /**
4592
+ * ๐Ÿ›ก๏ธ Fix test repository merge settings
4593
+ * @description For repositories owned by empirical-run only: turns on merge commits and turns off squash and rebase merging, then returns the re-checked result. Rulesets are reported, never changed.
4594
+ */
4595
+ post: operations["fixProjectRepoSettings"];
4596
+ delete?: never;
4597
+ options?: never;
4598
+ head?: never;
4599
+ patch?: never;
4600
+ trace?: never;
4601
+ };
4522
4602
  "/api/projects/{id}/test-cases-sync/trigger": {
4523
4603
  parameters: {
4524
4604
  query?: never;
@@ -4927,7 +5007,7 @@ export interface paths {
4927
5007
  patch?: never;
4928
5008
  trace?: never;
4929
5009
  };
4930
- "/api/sandbox-snapshots": {
5010
+ "/api/runner-backends": {
4931
5011
  parameters: {
4932
5012
  query?: never;
4933
5013
  header?: never;
@@ -4935,43 +5015,43 @@ export interface paths {
4935
5015
  cookie?: never;
4936
5016
  };
4937
5017
  /**
4938
- * โš™๏ธ List sandbox snapshots
4939
- * @description Returns the most recent sandbox snapshots for the scoped project.
5018
+ * ๐Ÿ›ก๏ธ ๐Ÿงช List runner backends
5019
+ * @description Lists customer-hosted runner backends, optionally for one org.
4940
5020
  */
4941
- get: operations["listSandboxSnapshots"];
5021
+ get: operations["listRunnerBackends"];
4942
5022
  put?: never;
4943
5023
  /**
4944
- * โš™๏ธ Create a sandbox snapshot
4945
- * @description Enqueues a snapshot-create job for the scoped project and base template.
5024
+ * ๐Ÿ›ก๏ธ ๐Ÿงช Register a runner backend
5025
+ * @description Registers an installation as `pending` and returns the external ID its role must require. Run `verify` before linking projects.
4946
5026
  */
4947
- post: operations["createSandboxSnapshot"];
5027
+ post: operations["createRunnerBackend"];
4948
5028
  delete?: never;
4949
5029
  options?: never;
4950
5030
  head?: never;
4951
5031
  patch?: never;
4952
5032
  trace?: never;
4953
5033
  };
4954
- "/api/sandbox-snapshots/rebuild": {
5034
+ "/api/runner-backends/{id}": {
4955
5035
  parameters: {
4956
5036
  query?: never;
4957
5037
  header?: never;
4958
5038
  path?: never;
4959
5039
  cookie?: never;
4960
5040
  };
4961
- get?: never;
4962
- put?: never;
4963
5041
  /**
4964
- * โš™๏ธ Rebuild project sandbox snapshots
4965
- * @description Enqueues snapshot-create jobs for every project that already has a snapshot for the given provider and base template. Only `e2b` is supported.
5042
+ * ๐Ÿ›ก๏ธ ๐Ÿงช Get a runner backend
5043
+ * @description Returns one runner backend.
4966
5044
  */
4967
- post: operations["rebuildSandboxSnapshots"];
5045
+ get: operations["getRunnerBackend"];
5046
+ put?: never;
5047
+ post?: never;
4968
5048
  delete?: never;
4969
5049
  options?: never;
4970
5050
  head?: never;
4971
5051
  patch?: never;
4972
5052
  trace?: never;
4973
5053
  };
4974
- "/api/sandbox-snapshots/rebuild-by-template": {
5054
+ "/api/runner-backends/{id}/disable": {
4975
5055
  parameters: {
4976
5056
  query?: never;
4977
5057
  header?: never;
@@ -4981,17 +5061,17 @@ export interface paths {
4981
5061
  get?: never;
4982
5062
  put?: never;
4983
5063
  /**
4984
- * โš™๏ธ Rebuild sandbox snapshots by template
4985
- * @description Enqueues snapshot-create jobs for every project that has an `e2b` snapshot for the given base template.
5064
+ * ๐Ÿ›ก๏ธ ๐Ÿงช Disable a runner backend
5065
+ * @description Stops new dispatches to the backend immediately: runs of linked projects fail with `dispatch_failed` until it is verified again or the projects are unlinked.
4986
5066
  */
4987
- post: operations["rebuildSandboxSnapshotsByTemplate"];
5067
+ post: operations["disableRunnerBackend"];
4988
5068
  delete?: never;
4989
5069
  options?: never;
4990
5070
  head?: never;
4991
5071
  patch?: never;
4992
5072
  trace?: never;
4993
5073
  };
4994
- "/api/sandbox-snapshots/sources/upsert": {
5074
+ "/api/runner-backends/{id}/verify": {
4995
5075
  parameters: {
4996
5076
  query?: never;
4997
5077
  header?: never;
@@ -5001,29 +5081,173 @@ export interface paths {
5001
5081
  get?: never;
5002
5082
  put?: never;
5003
5083
  /**
5004
- * โš™๏ธ Upsert sandbox snapshot sources
5005
- * @description Upserts one or more snapshot source rows; called by sandbox-template CI.
5084
+ * ๐Ÿ›ก๏ธ ๐Ÿงช Verify a runner backend
5085
+ * @description Assumes the backend's role and makes one read-only call to each queue, the cluster and the log group. On success the backend becomes `active`; on failure its status is unchanged. A disabled backend is re-enabled only by a passing verify.
5006
5086
  */
5007
- post: operations["upsertSandboxSnapshotSources"];
5087
+ post: operations["verifyRunnerBackend"];
5008
5088
  delete?: never;
5009
5089
  options?: never;
5010
5090
  head?: never;
5011
5091
  patch?: never;
5012
5092
  trace?: never;
5013
5093
  };
5014
- "/api/test-runs/events": {
5094
+ "/api/runner-backends/project": {
5015
5095
  parameters: {
5016
5096
  query?: never;
5017
5097
  header?: never;
5018
5098
  path?: never;
5019
5099
  cookie?: never;
5020
5100
  };
5021
- get?: never;
5022
5101
  /**
5023
- * โš™๏ธ Ingest a test-case run-end event
5024
- * @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.
5102
+ * โš™๏ธ ๐Ÿงช Get the scoped project's runner backend
5103
+ * @description Returns the runner backend the scoped project is linked to, including its verification status, or null when the project runs on Empirical-hosted infrastructure.
5025
5104
  */
5026
- put: operations["ingestTestCaseRunEndEvent"];
5105
+ get: operations["getProjectRunnerBackend"];
5106
+ put?: never;
5107
+ post?: never;
5108
+ delete?: never;
5109
+ options?: never;
5110
+ head?: never;
5111
+ patch?: never;
5112
+ trace?: never;
5113
+ };
5114
+ "/api/runner-backends/project/verify": {
5115
+ parameters: {
5116
+ query?: never;
5117
+ header?: never;
5118
+ path?: never;
5119
+ cookie?: never;
5120
+ };
5121
+ get?: never;
5122
+ put?: never;
5123
+ /**
5124
+ * โš™๏ธ ๐Ÿงช Re-check the scoped project's runner backend
5125
+ * @description Runs the same read-only checks as `verify` against the backend the scoped project is linked to and records the result, so a customer can confirm a fix to their role or stack. It never changes the backend's status: a disabled backend is re-enabled only by Empirical.
5126
+ */
5127
+ post: operations["verifyProjectRunnerBackend"];
5128
+ delete?: never;
5129
+ options?: never;
5130
+ head?: never;
5131
+ patch?: never;
5132
+ trace?: never;
5133
+ };
5134
+ "/api/runner-backends/projects/{project_id}": {
5135
+ parameters: {
5136
+ query?: never;
5137
+ header?: never;
5138
+ path?: never;
5139
+ cookie?: never;
5140
+ };
5141
+ get?: never;
5142
+ /**
5143
+ * ๐Ÿ›ก๏ธ ๐Ÿงช Set a project's runner backend
5144
+ * @description Links a project to an active backend of its organisation, or back to Empirical-hosted with null. Applies to runs created afterwards; runs already created keep their backend.
5145
+ */
5146
+ put: operations["setProjectRunnerBackend"];
5147
+ post?: never;
5148
+ delete?: never;
5149
+ options?: never;
5150
+ head?: never;
5151
+ patch?: never;
5152
+ trace?: never;
5153
+ };
5154
+ "/api/sandbox-snapshots": {
5155
+ parameters: {
5156
+ query?: never;
5157
+ header?: never;
5158
+ path?: never;
5159
+ cookie?: never;
5160
+ };
5161
+ /**
5162
+ * โš™๏ธ List sandbox snapshots
5163
+ * @description Returns the most recent sandbox snapshots for the scoped project.
5164
+ */
5165
+ get: operations["listSandboxSnapshots"];
5166
+ put?: never;
5167
+ /**
5168
+ * โš™๏ธ Create a sandbox snapshot
5169
+ * @description Enqueues a snapshot-create job for the scoped project and base template.
5170
+ */
5171
+ post: operations["createSandboxSnapshot"];
5172
+ delete?: never;
5173
+ options?: never;
5174
+ head?: never;
5175
+ patch?: never;
5176
+ trace?: never;
5177
+ };
5178
+ "/api/sandbox-snapshots/rebuild": {
5179
+ parameters: {
5180
+ query?: never;
5181
+ header?: never;
5182
+ path?: never;
5183
+ cookie?: never;
5184
+ };
5185
+ get?: never;
5186
+ put?: never;
5187
+ /**
5188
+ * โš™๏ธ Rebuild project sandbox snapshots
5189
+ * @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
+ */
5191
+ post: operations["rebuildSandboxSnapshots"];
5192
+ delete?: never;
5193
+ options?: never;
5194
+ head?: never;
5195
+ patch?: never;
5196
+ trace?: never;
5197
+ };
5198
+ "/api/sandbox-snapshots/rebuild-by-template": {
5199
+ parameters: {
5200
+ query?: never;
5201
+ header?: never;
5202
+ path?: never;
5203
+ cookie?: never;
5204
+ };
5205
+ get?: never;
5206
+ put?: never;
5207
+ /**
5208
+ * โš™๏ธ Rebuild sandbox snapshots by template
5209
+ * @description Enqueues snapshot-create jobs for every project that has an `e2b` snapshot for the given base template.
5210
+ */
5211
+ post: operations["rebuildSandboxSnapshotsByTemplate"];
5212
+ delete?: never;
5213
+ options?: never;
5214
+ head?: never;
5215
+ patch?: never;
5216
+ trace?: never;
5217
+ };
5218
+ "/api/sandbox-snapshots/sources/upsert": {
5219
+ parameters: {
5220
+ query?: never;
5221
+ header?: never;
5222
+ path?: never;
5223
+ cookie?: never;
5224
+ };
5225
+ get?: never;
5226
+ put?: never;
5227
+ /**
5228
+ * โš™๏ธ Upsert sandbox snapshot sources
5229
+ * @description Upserts one or more snapshot source rows; called by sandbox-template CI.
5230
+ */
5231
+ post: operations["upsertSandboxSnapshotSources"];
5232
+ delete?: never;
5233
+ options?: never;
5234
+ head?: never;
5235
+ patch?: never;
5236
+ trace?: never;
5237
+ };
5238
+ "/api/test-runs/events": {
5239
+ parameters: {
5240
+ query?: never;
5241
+ header?: never;
5242
+ path?: never;
5243
+ cookie?: never;
5244
+ };
5245
+ get?: never;
5246
+ /**
5247
+ * โš™๏ธ Ingest a test-case run-end event
5248
+ * @description Ingests a per-test-case run-end event from the Playwright reporter (EmpiricalReporter in packages/playwright-utils): processes retries, triggers the failure-diagnosis workflow, and updates realtime test-run counts. Port of the dashboard's PUT /api/test-runs/events.
5249
+ */
5250
+ put: operations["ingestTestCaseRunEndEvent"];
5027
5251
  post?: never;
5028
5252
  delete?: never;
5029
5253
  options?: never;
@@ -5179,6 +5403,26 @@ export interface paths {
5179
5403
  patch?: never;
5180
5404
  trace?: never;
5181
5405
  };
5406
+ "/api/users/me": {
5407
+ parameters: {
5408
+ query?: never;
5409
+ header?: never;
5410
+ path?: never;
5411
+ cookie?: never;
5412
+ };
5413
+ /**
5414
+ * Get the current user
5415
+ * @description Returns the signed-in user's id, email, org memberships and super-admin flag as used for authorization.
5416
+ */
5417
+ get: operations["getCurrentUser"];
5418
+ put?: never;
5419
+ post?: never;
5420
+ delete?: never;
5421
+ options?: never;
5422
+ head?: never;
5423
+ patch?: never;
5424
+ trace?: never;
5425
+ };
5182
5426
  "/api/users/me/memberships": {
5183
5427
  parameters: {
5184
5428
  query?: never;
@@ -5223,6 +5467,26 @@ export interface paths {
5223
5467
  patch?: never;
5224
5468
  trace?: never;
5225
5469
  };
5470
+ "/api/v1/telemetry/track": {
5471
+ parameters: {
5472
+ query?: never;
5473
+ header?: never;
5474
+ path?: never;
5475
+ cookie?: never;
5476
+ };
5477
+ get?: never;
5478
+ put?: never;
5479
+ /**
5480
+ * Track a telemetry event
5481
+ * @description Records a test-run telemetry event for the scoped project. Delivery is best-effort.
5482
+ */
5483
+ post: operations["trackTelemetryEvent"];
5484
+ delete?: never;
5485
+ options?: never;
5486
+ head?: never;
5487
+ patch?: never;
5488
+ trace?: never;
5489
+ };
5226
5490
  "/api/v2/projects/{id}/usage": {
5227
5491
  parameters: {
5228
5492
  query?: never;
@@ -5962,6 +6226,160 @@ export interface components {
5962
6226
  /** @description Arbitrary JSON overrides for the plan. */
5963
6227
  custom_overrides?: unknown;
5964
6228
  };
6229
+ RunnerBackendListResponse: {
6230
+ /** @description Response payload. */
6231
+ data: {
6232
+ runner_backends: components["schemas"]["RunnerBackend"][];
6233
+ };
6234
+ };
6235
+ RunnerBackend: {
6236
+ /** @description Runner backend ID. */
6237
+ id: number;
6238
+ /** @description Organisation that owns the installation. */
6239
+ org_id: number;
6240
+ /** @description Human-readable name. */
6241
+ name: string;
6242
+ /** @description AWS account the installation runs in. */
6243
+ aws_account_id: string;
6244
+ /** @description AWS region of the installation. */
6245
+ region: string;
6246
+ /** @description Role api-worker assumes to drive the plane. */
6247
+ role_arn: string;
6248
+ /** @description External ID the role's trust policy must require. Give it only to this installation's owner. */
6249
+ external_id: string;
6250
+ /** @description ECS cluster name. */
6251
+ cluster_name: string;
6252
+ /** @description CloudWatch log group of the worker. */
6253
+ log_group_name: string;
6254
+ /** @description Worker container name. */
6255
+ container_name: string;
6256
+ /** @description Job queue URLs are `${queue_prefix}-${machineSize}`. */
6257
+ queue_prefix: string;
6258
+ /**
6259
+ * @description `pending` until verified; only `active` backends receive runs.
6260
+ * @enum {string}
6261
+ */
6262
+ status: "pending" | "active" | "disabled";
6263
+ /** @description ISO-8601 time of the last successful verify. */
6264
+ last_verified_at: string | null;
6265
+ /** @description ISO-8601 time of the last verify, manual or scheduled, whatever its outcome. */
6266
+ last_checked_at: string | null;
6267
+ /** @description Outcome of the last verify; null if never run. */
6268
+ last_check_ok: boolean | null;
6269
+ /** @description Every check from the last verify. */
6270
+ last_check_results: components["schemas"]["RunnerBackendCheck"][] | null;
6271
+ /** @description ISO-8601 start of the current run of failed checks; null while passing. A failing check does not change `status`. */
6272
+ check_failing_since: string | null;
6273
+ /** @description ISO-8601 creation time. */
6274
+ created_at: string;
6275
+ /** @description ISO-8601 last-update time. */
6276
+ updated_at: string;
6277
+ };
6278
+ RunnerBackendCheck: {
6279
+ /** @description `assume_role`, `job_queue`, `scaler_trigger_queue`, `ecs_cluster`, `ecs_tasks` or `worker_logs`. */
6280
+ name: string;
6281
+ /** @description Whether the check passed. */
6282
+ ok: boolean;
6283
+ /** @description The resource checked, or the AWS error. */
6284
+ detail: string;
6285
+ };
6286
+ RunnerBackendResponse: {
6287
+ /** @description Response payload. */
6288
+ data: {
6289
+ runner_backend: components["schemas"]["RunnerBackend"];
6290
+ };
6291
+ };
6292
+ CreateRunnerBackendBody: {
6293
+ /** @description Owning organisation. */
6294
+ org_id: number;
6295
+ /** @description Human-readable name. */
6296
+ name: string;
6297
+ /** @description 12-digit AWS account ID. */
6298
+ aws_account_id: string;
6299
+ /** @description AWS region, e.g. `us-east-1`. */
6300
+ region: string;
6301
+ /** @description ARN of a role named `empirical-private-runner-*` in `aws_account_id`. */
6302
+ role_arn: string;
6303
+ /** @description ECS cluster name. */
6304
+ cluster_name: string;
6305
+ /** @description CloudWatch log group of the worker. */
6306
+ log_group_name: string;
6307
+ /** @description `https://sqs.<region>.amazonaws.com/<account>/<name>`; queues are `${queue_prefix}-${machineSize}`. */
6308
+ queue_prefix: string;
6309
+ /** @description Worker container name. Defaults to `test-run-worker`. */
6310
+ container_name?: string;
6311
+ /** @description Only for installations whose role already requires a fixed ID (Empirical's own dogfood). Generated otherwise. */
6312
+ external_id?: string;
6313
+ };
6314
+ ProjectRunnerBackendResponse: {
6315
+ /** @description Response payload. */
6316
+ data: {
6317
+ project_id: number;
6318
+ runner_backend_id: number | null;
6319
+ };
6320
+ };
6321
+ SetProjectRunnerBackendBody: {
6322
+ /** @description An active backend of the project's organisation, or null for Empirical-hosted. */
6323
+ runner_backend_id: number | null;
6324
+ };
6325
+ ProjectRunnerBackendDetailResponse: {
6326
+ /** @description Response payload. */
6327
+ data: {
6328
+ /** @description The backend the project's new runs are placed on, or null for Empirical-hosted. */
6329
+ runner_backend: {
6330
+ /** @description Runner backend ID. */
6331
+ id: number;
6332
+ /** @description Organisation that owns the installation. */
6333
+ org_id: number;
6334
+ /** @description Human-readable name. */
6335
+ name: string;
6336
+ /** @description AWS account the installation runs in. */
6337
+ aws_account_id: string;
6338
+ /** @description AWS region of the installation. */
6339
+ region: string;
6340
+ /** @description Role api-worker assumes to drive the plane. */
6341
+ role_arn: string;
6342
+ /** @description External ID the role's trust policy must require. Give it only to this installation's owner. */
6343
+ external_id: string;
6344
+ /** @description ECS cluster name. */
6345
+ cluster_name: string;
6346
+ /** @description CloudWatch log group of the worker. */
6347
+ log_group_name: string;
6348
+ /** @description Worker container name. */
6349
+ container_name: string;
6350
+ /** @description Job queue URLs are `${queue_prefix}-${machineSize}`. */
6351
+ queue_prefix: string;
6352
+ /**
6353
+ * @description `pending` until verified; only `active` backends receive runs.
6354
+ * @enum {string}
6355
+ */
6356
+ status: "pending" | "active" | "disabled";
6357
+ /** @description ISO-8601 time of the last successful verify. */
6358
+ last_verified_at: string | null;
6359
+ /** @description ISO-8601 time of the last verify, manual or scheduled, whatever its outcome. */
6360
+ last_checked_at: string | null;
6361
+ /** @description Outcome of the last verify; null if never run. */
6362
+ last_check_ok: boolean | null;
6363
+ /** @description Every check from the last verify. */
6364
+ last_check_results: components["schemas"]["RunnerBackendCheck"][] | null;
6365
+ /** @description ISO-8601 start of the current run of failed checks; null while passing. A failing check does not change `status`. */
6366
+ check_failing_since: string | null;
6367
+ /** @description ISO-8601 creation time. */
6368
+ created_at: string;
6369
+ /** @description ISO-8601 last-update time. */
6370
+ updated_at: string;
6371
+ } | null;
6372
+ };
6373
+ };
6374
+ RunnerBackendVerifyResponse: {
6375
+ /** @description Response payload. */
6376
+ data: {
6377
+ /** @description True when every check passed. */
6378
+ verified: boolean;
6379
+ checks: components["schemas"]["RunnerBackendCheck"][];
6380
+ runner_backend: components["schemas"]["RunnerBackend"];
6381
+ };
6382
+ };
5965
6383
  ApiKeyListResponse: {
5966
6384
  /** @description Response payload. */
5967
6385
  data: {
@@ -6309,10 +6727,8 @@ export interface components {
6309
6727
  repo_host: "github" | "pierre_code_storage";
6310
6728
  /** @description Default branch of the repository. */
6311
6729
  default_branch: string;
6312
- /** @description Whether branching is enabled. */
6313
- has_branching_enabled: boolean | null;
6314
- /** @description Branches kept across runs. */
6315
- persistent_branches: string[];
6730
+ /** @description Branches that may not be pushed to through Empirical. Always includes the default branch. */
6731
+ protected_branches: string[];
6316
6732
  /** @description Whether email reporting is enabled. */
6317
6733
  has_email_reporting: boolean | null;
6318
6734
  /**
@@ -6369,10 +6785,8 @@ export interface components {
6369
6785
  repo_host: "github" | "pierre_code_storage";
6370
6786
  /** @description Default branch of the repository. */
6371
6787
  default_branch: string;
6372
- /** @description Whether branching is enabled. */
6373
- has_branching_enabled: boolean | null;
6374
- /** @description Branches kept across runs. */
6375
- persistent_branches: string[];
6788
+ /** @description Branches that may not be pushed to through Empirical. Always includes the default branch. */
6789
+ protected_branches: string[];
6376
6790
  /** @description Whether email reporting is enabled. */
6377
6791
  has_email_reporting: boolean | null;
6378
6792
  /**
@@ -6493,15 +6907,13 @@ export interface components {
6493
6907
  ProjectBranchesResponse: {
6494
6908
  /** @description Response payload. */
6495
6909
  data: {
6496
- /** @description Recent branches with run/status info. */
6497
- branches: components["schemas"]["BranchWithStatus"][];
6910
+ /** @description Recent branches with test-run activity. */
6911
+ branches: components["schemas"]["RecentBranch"][];
6498
6912
  /** @description Total matching branches. */
6499
6913
  total: number;
6500
- /** @description Configured persistent branches. */
6501
- persistent_branches: components["schemas"]["PersistentBranch"][];
6502
6914
  };
6503
6915
  };
6504
- BranchWithStatus: {
6916
+ RecentBranch: {
6505
6917
  /** @description Branch name. */
6506
6918
  name: string;
6507
6919
  /** @description ID of the latest test run on the branch. */
@@ -6514,34 +6926,6 @@ export interface components {
6514
6926
  run_count: number;
6515
6927
  /** @description GitHub actor of the latest run. */
6516
6928
  latest_github_actor: string | null;
6517
- /** @description Branch status. */
6518
- status: string;
6519
- /** @description Diff vs the default branch, if the branch is persistent. */
6520
- diff: {
6521
- /** @description Commits ahead of default. */
6522
- ahead: number;
6523
- /** @description Commits behind default. */
6524
- behind: number;
6525
- /** @description Files changed vs default. */
6526
- files_changed: number;
6527
- } | null;
6528
- /** @description Always null (reserved). */
6529
- merge_request: unknown;
6530
- };
6531
- PersistentBranch: {
6532
- /** @description Branch name. */
6533
- name: string;
6534
- /** @description Whether the branch exists on GitHub. */
6535
- exists: boolean;
6536
- /** @description Diff vs the default branch, if it exists. */
6537
- diff: {
6538
- /** @description Commits ahead of default. */
6539
- ahead: number;
6540
- /** @description Commits behind default. */
6541
- behind: number;
6542
- /** @description Files changed vs default. */
6543
- files_changed: number;
6544
- } | null;
6545
6929
  };
6546
6930
  RepoExistsResponse: {
6547
6931
  /** @description Response payload. */
@@ -6558,6 +6942,39 @@ export interface components {
6558
6942
  exists: boolean;
6559
6943
  };
6560
6944
  };
6945
+ RepoSettingsCheckResponse: {
6946
+ /** @description Response payload. */
6947
+ data: {
6948
+ repo: {
6949
+ owner: string;
6950
+ name: string;
6951
+ html_url: string;
6952
+ };
6953
+ checks: components["schemas"]["RepoSettingsCheck"][];
6954
+ /** @description True when the repo is owned by empirical-run and its merge settings need fixing; `POST โ€ฆ/fix` then applies them. */
6955
+ can_auto_fix: boolean;
6956
+ };
6957
+ };
6958
+ RepoSettingsCheck: {
6959
+ /** @description Stable check id. */
6960
+ id: string;
6961
+ /**
6962
+ * @description `error`: Empirical breaks without it. `warning`: recommended. `info`: for awareness.
6963
+ * @enum {string}
6964
+ */
6965
+ level: "error" | "warning" | "info";
6966
+ /**
6967
+ * @description `unknown` when GitHub didn't let the Empirical app read what the check needs.
6968
+ * @enum {string}
6969
+ */
6970
+ status: "pass" | "fail" | "unknown";
6971
+ /** @description What was found, e.g. "Squash merging is on". Worded the same way whether the check passes or fails. */
6972
+ title: string;
6973
+ /** @description Why it matters, or what couldn't be read. */
6974
+ detail: string;
6975
+ /** @description Where to change it in GitHub, in plain language. */
6976
+ fix_hint: string | null;
6977
+ };
6561
6978
  TestCasesSyncTriggeredResponse: {
6562
6979
  /** @description Response payload. */
6563
6980
  data: {
@@ -6588,8 +7005,6 @@ export interface components {
6588
7005
  updated_at: string;
6589
7006
  /** @description Owning project ID. */
6590
7007
  project_id: number;
6591
- /** @description Base branch name. */
6592
- base_branch: string;
6593
7008
  /** @description Session mode (e.g. chat). */
6594
7009
  mode: string;
6595
7010
  /** @description Origin of the session. */
@@ -6648,10 +7063,8 @@ export interface components {
6648
7063
  repo_host: "github" | "pierre_code_storage";
6649
7064
  /** @description Default branch of the repository. */
6650
7065
  default_branch: string;
6651
- /** @description Whether branching is enabled. */
6652
- has_branching_enabled: boolean | null;
6653
- /** @description Branches kept across runs. */
6654
- persistent_branches: string[];
7066
+ /** @description Branches that may not be pushed to through Empirical. Always includes the default branch. */
7067
+ protected_branches: string[];
6655
7068
  /** @description Whether email reporting is enabled. */
6656
7069
  has_email_reporting: boolean | null;
6657
7070
  /**
@@ -6944,10 +7357,6 @@ export interface components {
6944
7357
  repo_host: "github" | "pierre_code_storage";
6945
7358
  /** @description Default branch name. */
6946
7359
  default_branch: string;
6947
- /** @description Whether branch-based environments are enabled. */
6948
- has_branching_enabled: boolean | null;
6949
- /** @description Branches kept warm/persistent. */
6950
- persistent_branches: string[];
6951
7360
  /** @description Whether email reporting is enabled. */
6952
7361
  has_email_reporting: boolean | null;
6953
7362
  /**
@@ -6996,8 +7405,10 @@ export interface components {
6996
7405
  ResolveMembershipResponse: {
6997
7406
  /** @description Response payload. */
6998
7407
  data: {
6999
- /** @description All org ids the user now belongs to via invites and domain match. */
7408
+ /** @description All org ids the user belongs to after resolution. */
7000
7409
  org_ids: number[];
7410
+ /** @description Whether the user is a super admin. */
7411
+ is_super_admin: boolean;
7001
7412
  };
7002
7413
  };
7003
7414
  ResolveMembershipRequest: {
@@ -7326,8 +7737,6 @@ export interface components {
7326
7737
  updated_at: string;
7327
7738
  /** @description Project ID. */
7328
7739
  project_id: number;
7329
- /** @description Branch this session forks. */
7330
- base_branch: string;
7331
7740
  /** @description Session mode (e.g. `chat`). */
7332
7741
  mode: string;
7333
7742
  /** @description Source surface (e.g. `request`). */
@@ -7433,8 +7842,6 @@ export interface components {
7433
7842
  updated_at: string;
7434
7843
  /** @description Project ID. */
7435
7844
  project_id: number;
7436
- /** @description Branch this session forks. */
7437
- base_branch: string;
7438
7845
  /** @description Session mode (e.g. `chat`). */
7439
7846
  mode: string;
7440
7847
  /** @description Source surface (e.g. `request`). */
@@ -7488,8 +7895,6 @@ export interface components {
7488
7895
  updated_at: string;
7489
7896
  /** @description Project ID. */
7490
7897
  project_id: number;
7491
- /** @description Branch this session forks. */
7492
- base_branch: string;
7493
7898
  /** @description Session mode (e.g. `chat`). */
7494
7899
  mode: string;
7495
7900
  /** @description Source surface (e.g. `request`). */
@@ -7746,6 +8151,24 @@ export interface components {
7746
8151
  */
7747
8152
  on_conflict: "cancel" | "wait";
7748
8153
  } | null;
8154
+ /** @description Reporter configuration for runs in this environment. */
8155
+ reporter_config: {
8156
+ /**
8157
+ * @description Reporter config schema version. Always `1`.
8158
+ * @enum {number}
8159
+ */
8160
+ schema_version: 1;
8161
+ /** @description Reporters for this environment, at most one per `reporter_type`. Replaces the stored list on write; an empty array disables notifications. */
8162
+ reporters: {
8163
+ /**
8164
+ * @description Reporter kind. `slack_run_status` posts run status updates to Slack channels; it is the only kind accepted today.
8165
+ * @enum {string}
8166
+ */
8167
+ reporter_type: "slack_run_status";
8168
+ /** @description Registered Slack channel ids from `GET /api/v2/slack/channels` (the numeric `id`, not the Slack `Cโ€ฆ` channel id). Must belong to the project's organization and not be archived. Deduplicated and sorted on save. */
8169
+ slack_channel_ids: number[];
8170
+ }[];
8171
+ };
7749
8172
  /** @description ISO 8601 timestamp. */
7750
8173
  created_at: string | null;
7751
8174
  /** @description ISO 8601 timestamp. */
@@ -7778,6 +8201,24 @@ export interface components {
7778
8201
  */
7779
8202
  on_conflict: "cancel" | "wait";
7780
8203
  } | null;
8204
+ /** @description Reporter configuration for the environment. Slack channel ids must be active registered channels of the project's organization (GET /api/v2/slack/channels). */
8205
+ reporter_config?: {
8206
+ /**
8207
+ * @description Reporter config schema version. Always `1`.
8208
+ * @enum {number}
8209
+ */
8210
+ schema_version: 1;
8211
+ /** @description Reporters for this environment, at most one per `reporter_type`. Replaces the stored list on write; an empty array disables notifications. */
8212
+ reporters: {
8213
+ /**
8214
+ * @description Reporter kind. `slack_run_status` posts run status updates to Slack channels; it is the only kind accepted today.
8215
+ * @enum {string}
8216
+ */
8217
+ reporter_type: "slack_run_status";
8218
+ /** @description Registered Slack channel ids from `GET /api/v2/slack/channels` (the numeric `id`, not the Slack `Cโ€ฆ` channel id). Must belong to the project's organization and not be archived. Deduplicated and sorted on save. */
8219
+ slack_channel_ids: number[];
8220
+ }[];
8221
+ };
7781
8222
  };
7782
8223
  EnvironmentSyncResponse: {
7783
8224
  /** @description Response payload. */
@@ -7816,8 +8257,26 @@ export interface components {
7816
8257
  */
7817
8258
  on_conflict: "cancel" | "wait";
7818
8259
  } | null;
7819
- };
7820
- EnvironmentDeleteResponse: {
8260
+ /** @description Reporter configuration for the environment. Slack channel ids must be active registered channels of the project's organization (GET /api/v2/slack/channels). */
8261
+ reporter_config?: {
8262
+ /**
8263
+ * @description Reporter config schema version. Always `1`.
8264
+ * @enum {number}
8265
+ */
8266
+ schema_version: 1;
8267
+ /** @description Reporters for this environment, at most one per `reporter_type`. Replaces the stored list on write; an empty array disables notifications. */
8268
+ reporters: {
8269
+ /**
8270
+ * @description Reporter kind. `slack_run_status` posts run status updates to Slack channels; it is the only kind accepted today.
8271
+ * @enum {string}
8272
+ */
8273
+ reporter_type: "slack_run_status";
8274
+ /** @description Registered Slack channel ids from `GET /api/v2/slack/channels` (the numeric `id`, not the Slack `Cโ€ฆ` channel id). Must belong to the project's organization and not be archived. Deduplicated and sorted on save. */
8275
+ slack_channel_ids: number[];
8276
+ }[];
8277
+ };
8278
+ };
8279
+ EnvironmentDeleteResponse: {
7821
8280
  /** @description Always true on success. */
7822
8281
  success: boolean;
7823
8282
  };
@@ -7929,6 +8388,48 @@ export interface components {
7929
8388
  /** @description ISO 8601 timestamp when the memory was soft-deleted, or null if live. */
7930
8389
  deleted_at: string | null;
7931
8390
  };
8391
+ MemoryActivityResponse: {
8392
+ /** @description Response payload. */
8393
+ data: {
8394
+ memories: components["schemas"]["MemoryActivity"][];
8395
+ daily: components["schemas"]["MemoryActivityDay"][];
8396
+ };
8397
+ };
8398
+ MemoryActivity: {
8399
+ id: number;
8400
+ project_id: number;
8401
+ name: string | null;
8402
+ description: string | null;
8403
+ source: string | null;
8404
+ /** @description Chat session the memory was created in, if any. */
8405
+ source_chat_session_id: number | null;
8406
+ /** @description Length of the current content in characters. */
8407
+ content_length: number;
8408
+ /** @description ISO 8601 timestamp. */
8409
+ created_at: string;
8410
+ /** @description ISO 8601 timestamp. */
8411
+ updated_at: string;
8412
+ /** @description ISO 8601 timestamp of the soft delete, or null if live. */
8413
+ deleted_at: string | null;
8414
+ /** @description Total versions, including the initial create (v1). */
8415
+ version_count: number;
8416
+ /** @description Edits (versions after v1) in the last 7 days. */
8417
+ edits_7d: number;
8418
+ /** @description Edits (versions after v1) in the last 30 days. */
8419
+ edits_30d: number;
8420
+ /** @description Distinct chat sessions that edited the memory after v1. */
8421
+ edit_session_count: number;
8422
+ /** @description ISO 8601 timestamp of the latest edit, or null if never edited. */
8423
+ last_edited_at: string | null;
8424
+ };
8425
+ MemoryActivityDay: {
8426
+ /** @description UTC day, YYYY-MM-DD. */
8427
+ date: string;
8428
+ project_id: number;
8429
+ created: number;
8430
+ edited: number;
8431
+ deleted: number;
8432
+ };
7932
8433
  MemoryResponse: {
7933
8434
  /** @description Response payload. */
7934
8435
  data: {
@@ -8142,84 +8643,6 @@ export interface components {
8142
8643
  /** @description Raw Slack auth.test result. */
8143
8644
  data?: unknown;
8144
8645
  };
8145
- SlackChannelListResponse: {
8146
- /** @description Slack channels for the project. */
8147
- data: {
8148
- /** @description The project's Slack channels. */
8149
- channels: components["schemas"]["SlackChannel"][];
8150
- };
8151
- };
8152
- SlackChannel: {
8153
- /** @description Channel subscription ID. */
8154
- id: number;
8155
- /** @description Slack channel ID. */
8156
- channel_id: string;
8157
- /** @description Slack channel name. */
8158
- channel_name: string | null;
8159
- /** @description Slack workspace (team) ID. */
8160
- team_id: string | null;
8161
- /** @description Whether the channel filters by environment. */
8162
- is_env_specific: boolean | null;
8163
- /** @description Environments this channel is subscribed to. */
8164
- subscribed_environments: string[];
8165
- /** @description ISO 8601 creation timestamp. */
8166
- created_at: string;
8167
- /** @description ISO 8601 update timestamp. */
8168
- updated_at: string;
8169
- /** @description Slack validation result, present when requested. */
8170
- slack_channel_validation?: {
8171
- /** @description Whether the channel is usable. */
8172
- ok: boolean;
8173
- /** @description Slack channel ID. */
8174
- channel_id: string;
8175
- /** @description Whether the bot is a member of the channel. */
8176
- is_member?: boolean;
8177
- /** @description Machine-readable validation error code. */
8178
- error_code?: string;
8179
- /** @description Human-readable validation message. */
8180
- message?: string;
8181
- };
8182
- };
8183
- SlackChannelMutationResponse: {
8184
- /** @description Human-readable status message. */
8185
- message: string;
8186
- /** @description The updated channel. */
8187
- channel: {
8188
- /** @description Channel subscription ID. */
8189
- id: number;
8190
- /** @description Slack channel ID. */
8191
- channel_id: string;
8192
- /** @description Slack channel name. */
8193
- channel_name: string | null;
8194
- /** @description Slack workspace (team) ID. */
8195
- team_id: string | null;
8196
- /** @description Whether the channel filters by environment. */
8197
- is_env_specific: boolean | null;
8198
- /** @description Environments this channel is subscribed to. */
8199
- subscribed_environments: string[];
8200
- /** @description ISO 8601 creation timestamp. */
8201
- created_at: string;
8202
- /** @description ISO 8601 update timestamp. */
8203
- updated_at: string;
8204
- /** @description Slack validation result, present when requested. */
8205
- slack_channel_validation?: {
8206
- /** @description Whether the channel is usable. */
8207
- ok: boolean;
8208
- /** @description Slack channel ID. */
8209
- channel_id: string;
8210
- /** @description Whether the bot is a member of the channel. */
8211
- is_member?: boolean;
8212
- /** @description Machine-readable validation error code. */
8213
- error_code?: string;
8214
- /** @description Human-readable validation message. */
8215
- message?: string;
8216
- };
8217
- };
8218
- };
8219
- SlackChannelDeleteResponse: {
8220
- /** @description Human-readable status message. */
8221
- message: string;
8222
- };
8223
8646
  SlackTeamListResponse: {
8224
8647
  /** @description Response payload. */
8225
8648
  data: {
@@ -8565,6 +8988,8 @@ export interface components {
8565
8988
  value: string | number | boolean | (string | number | boolean)[];
8566
8989
  }[];
8567
8990
  userIds: string[];
8991
+ /** @enum {string} */
8992
+ category?: "executor" | "user";
8568
8993
  };
8569
8994
  };
8570
8995
  };
@@ -8649,8 +9074,6 @@ export interface components {
8649
9074
  updated_at: string;
8650
9075
  /** @description Owning project ID. */
8651
9076
  project_id: number;
8652
- /** @description Base branch name. */
8653
- base_branch: string;
8654
9077
  /** @description Session mode (e.g. chat). */
8655
9078
  mode: string;
8656
9079
  /** @description Origin of the session. */
@@ -8929,48 +9352,19 @@ export interface components {
8929
9352
  };
8930
9353
  };
8931
9354
  };
8932
- SandboxFilesList: {
8933
- /** @description Root path the tree was walked from. */
8934
- path: string;
8935
- /** @description Relative file paths under the root. */
8936
- paths: string[];
8937
- };
8938
- SandboxFilesError: {
8939
- /** @description Human-readable error message. */
8940
- error: string;
8941
- /** @description Path the walk was attempted on. */
8942
- path: string;
8943
- };
8944
- SandboxFileContent: {
8945
- /** @description Path of the file that was read. */
8946
- path: string;
8947
- /**
8948
- * @description Kind of content returned.
8949
- * @enum {string}
8950
- */
8951
- type: "image" | "text";
8952
- /** @description Data URI for image files (present when type is image). */
8953
- image_data?: string;
8954
- /** @description Decoded text content (present when type is text). */
8955
- content?: string;
8956
- };
8957
- SandboxFileContentError: {
8958
- /** @description Path of the requested file, or null. */
8959
- path: string | null;
8960
- /**
8961
- * @description Always 'error' for this response.
8962
- * @enum {string}
8963
- */
8964
- type: "error";
8965
- /** @description Human-readable error message. */
8966
- error: string;
8967
- };
8968
9355
  SubscribeChatSessionResponse: {
8969
9356
  data: {
8970
9357
  already_waiting: boolean;
8971
9358
  subscription_id?: number;
8972
9359
  };
8973
9360
  };
9361
+ GithubBranchSearchResponse: {
9362
+ /** @description Response payload. */
9363
+ data: {
9364
+ /** @description Matching branch names, capped by `limit`. */
9365
+ branches: string[];
9366
+ };
9367
+ };
8974
9368
  GithubCommitDiffResponse: {
8975
9369
  /** @description Response payload. */
8976
9370
  data: {
@@ -9099,6 +9493,90 @@ export interface components {
9099
9493
  installation?: unknown;
9100
9494
  };
9101
9495
  };
9496
+ GhReporterDeliveriesResponse: {
9497
+ /** @description Response payload. */
9498
+ data: {
9499
+ check_runs: components["schemas"]["GhReporterCheckRunDelivery"][];
9500
+ pr_comments: components["schemas"]["GhReporterPrCommentDelivery"][];
9501
+ linked_changes: components["schemas"]["GhReporterLinkedChangesDelivery"][];
9502
+ };
9503
+ };
9504
+ GhReporterCheckRunDelivery: {
9505
+ id: number;
9506
+ test_run_id: number;
9507
+ environment_name: string | null;
9508
+ repo_owner: string;
9509
+ repo_name: string;
9510
+ head_sha: string | null;
9511
+ /** @description Null when GitHub never accepted the check run. */
9512
+ check_run_id: number | null;
9513
+ check_run_url: string | null;
9514
+ status: string | null;
9515
+ conclusion: string | null;
9516
+ /** @description Error from the most recent delivery attempt; cleared on success. */
9517
+ last_error: string | null;
9518
+ created_at: string;
9519
+ updated_at: string;
9520
+ };
9521
+ GhReporterPrCommentDelivery: {
9522
+ id: number;
9523
+ environment_name: string | null;
9524
+ repo_owner: string;
9525
+ repo_name: string;
9526
+ pr_number: number;
9527
+ comment_id: number;
9528
+ comment_url: string | null;
9529
+ last_test_run_id: number | null;
9530
+ last_status: string | null;
9531
+ last_error: string | null;
9532
+ created_at: string;
9533
+ updated_at: string;
9534
+ };
9535
+ GhReporterLinkedChangesDelivery: {
9536
+ id: number;
9537
+ /** @description The app PR's run the check links to (latest write). */
9538
+ test_run_id: number;
9539
+ repo_owner: string;
9540
+ repo_name: string;
9541
+ /** @description The app PR's head branch. */
9542
+ pr_head: string;
9543
+ pr_number: number | null;
9544
+ /** @description App commit the check was last written on. */
9545
+ head_sha: string;
9546
+ test_branch: string;
9547
+ /** @description Null when GitHub never accepted the check run. */
9548
+ check_run_id: number | null;
9549
+ check_run_url: string | null;
9550
+ /** @description Linked changes state, e.g. no_test_branch, pr_open, nothing_to_merge. */
9551
+ state: string | null;
9552
+ status: string | null;
9553
+ conclusion: string | null;
9554
+ title: string | null;
9555
+ /** @description Error from the most recent delivery attempt; cleared on success. */
9556
+ last_error: string | null;
9557
+ created_at: string;
9558
+ updated_at: string;
9559
+ };
9560
+ GhReporterPullRequestResponse: {
9561
+ /** @description Response payload. */
9562
+ data: {
9563
+ /** @description Null when no PR contains head_sha. */
9564
+ pull_request: {
9565
+ number: number;
9566
+ title: string;
9567
+ state: string;
9568
+ merged: boolean;
9569
+ head_ref: string;
9570
+ head_sha: string;
9571
+ html_url: string;
9572
+ updated_at: string;
9573
+ } | null;
9574
+ /** @description Whether head_sha is the PR's current head commit. */
9575
+ delivered_sha_is_head: boolean | null;
9576
+ /** @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. */
9577
+ commits_since_delivered: number | null;
9578
+ };
9579
+ };
9102
9580
  GhReporterWebhookAck: {
9103
9581
  /** @description Response payload. */
9104
9582
  data: {
@@ -9661,6 +10139,29 @@ export interface components {
9661
10139
  /** @description Cost of output tokens. */
9662
10140
  cost_output: number | null;
9663
10141
  };
10142
+ TelemetryTrackResponse: {
10143
+ /** @description Response payload. */
10144
+ data: {
10145
+ /** @enum {boolean} */
10146
+ ok: true;
10147
+ };
10148
+ };
10149
+ TelemetryTrackRequest: {
10150
+ /**
10151
+ * @description Event name. Only test-run events are accepted.
10152
+ * @enum {string}
10153
+ */
10154
+ name: "git.clone_build" | "llm_response_generated" | "overlay.dismissed" | "test_worker.interrupted" | "test_worker.segment.report_download" | "test_worker.segment.report_merge_and_upload" | "test_worker.segment.report_upload" | "test_worker.segment.tests_execute";
10155
+ /** @description Event properties, forwarded as-is. */
10156
+ properties: {
10157
+ [key: string]: unknown;
10158
+ };
10159
+ /**
10160
+ * Format: date-time
10161
+ * @description When the event happened (ISO 8601). Default now.
10162
+ */
10163
+ timestamp?: string;
10164
+ };
9664
10165
  AnalyticsTestCasesV2Response: {
9665
10166
  /** @description Response payload. */
9666
10167
  data: {
@@ -9830,6 +10331,94 @@ export interface components {
9830
10331
  environment_id: number | null;
9831
10332
  environment_name: string | null;
9832
10333
  };
10334
+ SlackChannelListV2Response: {
10335
+ data: {
10336
+ channels: components["schemas"]["SlackChannelV2"][];
10337
+ };
10338
+ };
10339
+ SlackChannelV2: {
10340
+ /** @description Canonical Slack channel ID. */
10341
+ id: number;
10342
+ /** @description Organization scope ID. */
10343
+ org_id: number;
10344
+ /** @description Slack app installation ID, or null for the shared default installation. */
10345
+ slack_app_install_id: number | null;
10346
+ /**
10347
+ * @description Credential source used to access the Slack workspace.
10348
+ * @enum {string}
10349
+ */
10350
+ installation_source: "default" | "org";
10351
+ /** @description Slack workspace (team) ID. */
10352
+ team_id: string;
10353
+ /** @description Slack channel ID. */
10354
+ channel_id: string;
10355
+ /** @description Last known Slack channel name. */
10356
+ channel_name: string | null;
10357
+ /** @description ISO 8601 archival timestamp. */
10358
+ archived_at: string | null;
10359
+ /** @description ISO 8601 creation timestamp. */
10360
+ created_at: string;
10361
+ /** @description ISO 8601 update timestamp. */
10362
+ updated_at: string;
10363
+ };
10364
+ SlackChannelValidationListV2Response: {
10365
+ data: {
10366
+ channels: components["schemas"]["ValidatedSlackChannelV2"][];
10367
+ };
10368
+ };
10369
+ ValidatedSlackChannelV2: {
10370
+ /** @description Canonical Slack channel ID. */
10371
+ id: number;
10372
+ /** @description Organization scope ID. */
10373
+ org_id: number;
10374
+ /** @description Slack app installation ID, or null for the shared default installation. */
10375
+ slack_app_install_id: number | null;
10376
+ /**
10377
+ * @description Credential source used to access the Slack workspace.
10378
+ * @enum {string}
10379
+ */
10380
+ installation_source: "default" | "org";
10381
+ /** @description Slack workspace (team) ID. */
10382
+ team_id: string;
10383
+ /** @description Slack channel ID. */
10384
+ channel_id: string;
10385
+ /** @description Last known Slack channel name. */
10386
+ channel_name: string | null;
10387
+ /** @description ISO 8601 archival timestamp. */
10388
+ archived_at: string | null;
10389
+ /** @description ISO 8601 creation timestamp. */
10390
+ created_at: string;
10391
+ /** @description ISO 8601 update timestamp. */
10392
+ updated_at: string;
10393
+ /** @description Live Slack validation result. */
10394
+ slack_channel_validation: {
10395
+ /** @description Whether the bot can read the channel and its stored name matches Slack. */
10396
+ ok: boolean;
10397
+ /** @description Slack channel ID. */
10398
+ channel_id: string;
10399
+ /** @description Whether the bot can read the channel through Slack. */
10400
+ can_access: boolean;
10401
+ /** @description Whether the bot can read the channel. */
10402
+ is_member?: boolean;
10403
+ /** @description Current channel name returned by Slack. */
10404
+ current_channel_name?: string | null;
10405
+ /** @description Whether the stored channel name matches Slack's current name. */
10406
+ channel_name_matches?: boolean;
10407
+ /** @description Machine-readable validation failure code. */
10408
+ error_code?: string;
10409
+ /** @description Human-readable validation result. */
10410
+ message?: string;
10411
+ };
10412
+ };
10413
+ SlackChannelRefreshV2Response: {
10414
+ data: {
10415
+ channel: components["schemas"]["ValidatedSlackChannelV2"];
10416
+ /** @description Whether the stored channel name was replaced with Slack's current name. */
10417
+ renamed: boolean;
10418
+ /** @description Channel name stored before the refresh. */
10419
+ previous_channel_name: string | null;
10420
+ };
10421
+ };
9833
10422
  TestCaseTagsResponse: {
9834
10423
  /** @description Distinct tags across the project's test cases. */
9835
10424
  tags: string[];
@@ -10009,6 +10598,8 @@ export interface components {
10009
10598
  id: number;
10010
10599
  /** @description Current state of the test run. */
10011
10600
  state: string;
10601
+ /** @description Normalized error code when branch resolution or execution failed. */
10602
+ error_code: string | null;
10012
10603
  /** @description Git branch being tested. */
10013
10604
  test_run_branch: string;
10014
10605
  /** @description ISO 8601 timestamp when the run was created. */
@@ -10023,6 +10614,52 @@ export interface components {
10023
10614
  */
10024
10615
  on_conflict: "cancel" | "wait";
10025
10616
  } | null;
10617
+ /** @description Requested, resolved, and executed test-repository code. */
10618
+ test_code: {
10619
+ requested: {
10620
+ branch: string;
10621
+ /** @enum {string} */
10622
+ source: "explicit" | "build" | "project_default" | "legacy";
10623
+ /** @enum {string} */
10624
+ if_missing: "error" | "use_default" | "create";
10625
+ };
10626
+ resolved: {
10627
+ branch: string | null;
10628
+ sha: string | null;
10629
+ /** @enum {string|null} */
10630
+ fallback_reason: "requested_branch_missing" | null;
10631
+ };
10632
+ execution: {
10633
+ ref: string | null;
10634
+ sha: string | null;
10635
+ /** @enum {string|null} */
10636
+ ref_kind: "branch" | "temporary_merge" | null;
10637
+ };
10638
+ merge_base: {
10639
+ branch: string;
10640
+ sha: string | null;
10641
+ } | null;
10642
+ /** @enum {string} */
10643
+ resolution_status: "resolved" | "branch_missing" | "merge_conflict" | "provider_error";
10644
+ resolution_error_code: string | null;
10645
+ } | null;
10646
+ /** @description The `trigger` the run was created with, or null when none was sent. */
10647
+ trigger: {
10648
+ /**
10649
+ * @description Event that produced the run.
10650
+ * @enum {string}
10651
+ */
10652
+ event: "pull_request";
10653
+ /** @description Pull request under test. */
10654
+ pull_request: {
10655
+ /** @description Pull request number in the application repository. */
10656
+ number?: number;
10657
+ /** @description Head branch. */
10658
+ head: string;
10659
+ /** @description Base branch. */
10660
+ base: string;
10661
+ };
10662
+ } | null;
10026
10663
  };
10027
10664
  };
10028
10665
  };
@@ -10031,18 +10668,16 @@ export interface components {
10031
10668
  environment: string;
10032
10669
  /** @description Build information to associate with the test run. */
10033
10670
  build?: {
10034
- /** @description Deprecated. URL of the deployed build being tested. Passed to tests as the `BUILD_URL` environment variable, unless `BUILD_URL` is set in `environment_variables_overrides`. Set `BUILD_URL` there directly instead. */
10035
- url?: string;
10036
10671
  /** @description Git branch name of the build. */
10037
10672
  branch?: string;
10038
10673
  /** @description Git commit SHA of the build. */
10039
10674
  commit?: string;
10040
- /** @description URL to the commit (e.g., GitHub commit link). */
10041
- commit_url?: string;
10042
10675
  /** @description Source repository in owner/name format (e.g., acme/web). */
10043
10676
  repo?: string;
10044
- /** @description Version string of the build. */
10045
- version?: string;
10677
+ /** @description Legacy commit URL accepted only to infer build.repo for older callers. */
10678
+ commit_url?: string;
10679
+ /** @description Legacy build URL forwarded as BUILD_URL for allowlisted projects. */
10680
+ url?: string;
10046
10681
  };
10047
10682
  /** @description Custom key-value pairs to associate with the test run. Values must be strings or numbers. */
10048
10683
  metadata?: {
@@ -10059,8 +10694,25 @@ export interface components {
10059
10694
  tags?: string[];
10060
10695
  /** @description Specific test case ids (Playwright per-project `test.id`) to run. Only these tests will be executed. */
10061
10696
  test_case_ids?: string[];
10062
- /** @description Test repo branch to run. Useful for running tests from a feature branch before merging. Cannot be used together with `build` โ€” pick one. */
10697
+ /** @description Existing test-repository branch to run. A missing explicit branch creates an errored run; Empirical never creates it. May be supplied alongside `build`, which describes the application code under test. */
10063
10698
  branch?: string;
10699
+ /** @description The application pull request under test, for pre-merge runs. The run uses the test-repository branch named `pull_request.head`, merged into the project default branch. If no such branch exists, it uses the default branch. An explicit `branch` takes precedence. */
10700
+ trigger?: {
10701
+ /**
10702
+ * @description Event that produced the run.
10703
+ * @enum {string}
10704
+ */
10705
+ event: "pull_request";
10706
+ /** @description Pull request under test. */
10707
+ pull_request: {
10708
+ /** @description Pull request number in the application repository. */
10709
+ number?: number;
10710
+ /** @description Head branch. */
10711
+ head: string;
10712
+ /** @description Base branch. */
10713
+ base: string;
10714
+ };
10715
+ };
10064
10716
  /** @description Concurrency group and policy for this run. Runs in the same group (within the project) are limited to one in progress; `on_conflict` says what this run does when the group already has an active run: `cancel` cancels it and starts now, `wait` queues behind it (a newer waiting run replaces an older one). Omit to use the project's legacy concurrency setting; `null` for no limit. */
10065
10717
  concurrency?: {
10066
10718
  /** @description Free-form group key, scoped to the project, e.g. `production`, `staging/acme/web@feat-x`, or a build URL. */
@@ -10346,7 +10998,7 @@ export interface components {
10346
10998
  data: {
10347
10999
  /** @description Reply targets for channels that already have a run notification thread. */
10348
11000
  thread_targets: components["schemas"]["TriageShareTarget"][];
10349
- /** @description New-message targets for subscribed channels. */
11001
+ /** @description New-message targets for active Slack channels accessible to the organization. */
10350
11002
  channel_targets: components["schemas"]["TriageShareTarget"][];
10351
11003
  };
10352
11004
  };
@@ -10434,6 +11086,52 @@ export interface components {
10434
11086
  run_ended_at: string | null;
10435
11087
  /** @description URL to download the Playwright JSON report for this run. */
10436
11088
  summary_url: string | null;
11089
+ /** @description Branch-resolution provenance. Null only for historical runs created before provenance was recorded. */
11090
+ test_code: {
11091
+ requested: {
11092
+ branch: string;
11093
+ /** @enum {string} */
11094
+ source: "explicit" | "build" | "project_default" | "legacy";
11095
+ /** @enum {string} */
11096
+ if_missing: "error" | "use_default" | "create";
11097
+ };
11098
+ resolved: {
11099
+ branch: string | null;
11100
+ sha: string | null;
11101
+ /** @enum {string|null} */
11102
+ fallback_reason: "requested_branch_missing" | null;
11103
+ };
11104
+ execution: {
11105
+ ref: string | null;
11106
+ sha: string | null;
11107
+ /** @enum {string|null} */
11108
+ ref_kind: "branch" | "temporary_merge" | null;
11109
+ };
11110
+ merge_base: {
11111
+ branch: string;
11112
+ sha: string | null;
11113
+ } | null;
11114
+ /** @enum {string} */
11115
+ resolution_status: "resolved" | "branch_missing" | "merge_conflict" | "provider_error";
11116
+ resolution_error_code: string | null;
11117
+ } | null;
11118
+ /** @description The `trigger` the run was created with, or null when none was sent. */
11119
+ trigger: {
11120
+ /**
11121
+ * @description Event that produced the run.
11122
+ * @enum {string}
11123
+ */
11124
+ event: "pull_request";
11125
+ /** @description Pull request under test. */
11126
+ pull_request: {
11127
+ /** @description Pull request number in the application repository. */
11128
+ number?: number;
11129
+ /** @description Head branch. */
11130
+ head: string;
11131
+ /** @description Base branch. */
11132
+ base: string;
11133
+ };
11134
+ } | null;
10437
11135
  };
10438
11136
  IngestTestCaseRunEndEventResponse: {
10439
11137
  /** @description Empty acknowledgement payload. */
@@ -10669,10 +11367,10 @@ export interface components {
10669
11367
  /** @description Full test line, e.g. `[chromium] โ€บ a.spec.ts โ€บ title`. */
10670
11368
  name: string;
10671
11369
  /**
10672
- * @description Whether the scheduled test has run yet.
11370
+ * @description Whether the scheduled test has run yet. `retrying` means at least one attempt is in but retries are outstanding; its result fields are provisional until it flips to `ran`.
10673
11371
  * @enum {string}
10674
11372
  */
10675
- status: "ran" | "pending";
11373
+ status: "ran" | "retrying" | "pending";
10676
11374
  /** @description Ledger row ID. */
10677
11375
  id?: number;
10678
11376
  /** @description Shard the row belongs to, or null when unsharded. */
@@ -10755,6 +11453,62 @@ export interface components {
10755
11453
  /** @description Log line text. */
10756
11454
  message: string;
10757
11455
  };
11456
+ TestRunLinkedChangesResponse: {
11457
+ /** @description Response payload. */
11458
+ data: {
11459
+ /** @description Null when the run was not triggered by an app PR. */
11460
+ linked_changes: {
11461
+ /** @description The app repository (owner/name) of the PR. */
11462
+ app_repo: string;
11463
+ app_pull_request: {
11464
+ number: number | null;
11465
+ head: string;
11466
+ base: string | null;
11467
+ };
11468
+ /** @description The test repository. */
11469
+ test_repo: string;
11470
+ /** @description Test branch linked to the app PR by name. */
11471
+ test_branch: string;
11472
+ default_branch: string;
11473
+ /** @enum {string} */
11474
+ state: "no_test_branch" | "nothing_to_merge" | "ahead_no_pr" | "pr_open" | "pr_open_not_mergeable" | "error";
11475
+ /** @enum {string} */
11476
+ status: "in_progress" | "completed";
11477
+ /** @enum {string|null} */
11478
+ conclusion: "success" | "failure" | "neutral" | null;
11479
+ title: string;
11480
+ ahead_by: number;
11481
+ /** @description Open test PR from the test branch, if any. */
11482
+ test_pull_request: {
11483
+ number: number;
11484
+ url: string;
11485
+ mergeable: boolean | null;
11486
+ } | null;
11487
+ /** @description Merged test PR, when the branch was deleted after merge. */
11488
+ merged_test_pull_request: {
11489
+ number: number;
11490
+ url: string;
11491
+ } | null;
11492
+ /** @description Whether the project posts the linked test changes check on GitHub. */
11493
+ check_enabled: boolean;
11494
+ /** @description Latest GitHub check written for the app PR, from any of its runs. */
11495
+ check: {
11496
+ check_run_url: string | null;
11497
+ head_sha: string;
11498
+ test_run_id: number;
11499
+ state: string | null;
11500
+ last_error: string | null;
11501
+ updated_at: string;
11502
+ } | null;
11503
+ } | null;
11504
+ };
11505
+ };
11506
+ GetTestRunTriageSessionResponse: {
11507
+ /** @description Response payload. */
11508
+ data: {
11509
+ chat_session: components["schemas"]["ChatSession"] & unknown;
11510
+ };
11511
+ };
10758
11512
  TestRunTriageSessionResponse: {
10759
11513
  /** @description Response payload. */
10760
11514
  data: {
@@ -10959,7 +11713,6 @@ export interface components {
10959
11713
  build_url: string | null;
10960
11714
  build_branch: string | null;
10961
11715
  commit: string | null;
10962
- commit_url: string | null;
10963
11716
  repo: string | null;
10964
11717
  error_code: string | null;
10965
11718
  cancellation_reason: string | null;
@@ -10980,10 +11733,12 @@ export interface components {
10980
11733
  /** @description ID of the parent test run. */
10981
11734
  test_run_id: string;
10982
11735
  /**
10983
- * @description Outcome of the case.
11736
+ * @description Outcome of the case. Provisional while `is_retrying` is true.
10984
11737
  * @enum {string}
10985
11738
  */
10986
11739
  status: "passed" | "failed" | "flaky" | "skipped";
11740
+ /** @description True when the case has retries outstanding: `status`, `retries` and `retry_details` reflect only the attempts so far. Only returned with `include_retrying=true`. */
11741
+ is_retrying: boolean;
10987
11742
  /** @description Run-time path `[file, ...suites, title]`. */
10988
11743
  nesting: string[];
10989
11744
  /** @description Playwright project the case ran under. */
@@ -11105,10 +11860,12 @@ export interface components {
11105
11860
  /** @description ID of the parent test run. */
11106
11861
  test_run_id: string;
11107
11862
  /**
11108
- * @description Outcome of the case.
11863
+ * @description Outcome of the case. Provisional while `is_retrying` is true.
11109
11864
  * @enum {string}
11110
11865
  */
11111
11866
  status: "passed" | "failed" | "flaky" | "skipped";
11867
+ /** @description True when the case has retries outstanding: `status`, `retries` and `retry_details` reflect only the attempts so far. Only returned with `include_retrying=true`. */
11868
+ is_retrying: boolean;
11112
11869
  /** @description Run-time path `[file, ...suites, title]`. */
11113
11870
  nesting: string[];
11114
11871
  /** @description Playwright project the case ran under. */
@@ -11219,6 +11976,8 @@ export interface components {
11219
11976
  id: number;
11220
11977
  title: string | null;
11221
11978
  } | null;
11979
+ /** @description For a pending run held back by its concurrency group (on_conflict=wait), the in-progress run it is waiting on. Null when the run is not pending or nothing blocks it. */
11980
+ waiting_on_test_run_id: number | null;
11222
11981
  /** @description First page of ledger-sourced cases, ordered failed โ†’ flaky โ†’ others so the default 'failed' filter and the failure-first list render correctly on first paint. Shipped inline so the list renders without waiting on a fetch. The client refetches the full set. */
11223
11982
  ledger_cases: components["schemas"]["TestRunCase"][];
11224
11983
  /** @description Total ledger case count for the run, so the client knows how much the inline first page is truncating. */
@@ -11274,6 +12033,35 @@ export interface components {
11274
12033
  test_run_branch: string;
11275
12034
  /** @description Head commit SHA of the test repo. */
11276
12035
  test_run_head_sha: string | null;
12036
+ /** @description Structured test-code provenance. Null for runs created before provenance capture shipped. */
12037
+ test_code: {
12038
+ requested: {
12039
+ branch: string;
12040
+ /** @enum {string} */
12041
+ source: "explicit" | "build" | "project_default" | "legacy";
12042
+ /** @enum {string} */
12043
+ if_missing: "error" | "use_default" | "create";
12044
+ };
12045
+ resolved: {
12046
+ branch: string | null;
12047
+ sha: string | null;
12048
+ /** @enum {string|null} */
12049
+ fallback_reason: "requested_branch_missing" | null;
12050
+ };
12051
+ execution: {
12052
+ ref: string | null;
12053
+ sha: string | null;
12054
+ /** @enum {string|null} */
12055
+ ref_kind: "branch" | "temporary_merge" | null;
12056
+ };
12057
+ merge_base: {
12058
+ branch: string;
12059
+ sha: string | null;
12060
+ } | null;
12061
+ /** @enum {string} */
12062
+ resolution_status: "resolved" | "branch_missing" | "merge_conflict" | "provider_error";
12063
+ resolution_error_code: string | null;
12064
+ } | null;
11277
12065
  /** @description URL of the Playwright JSON report. */
11278
12066
  summary_url: string | null;
11279
12067
  /** @description Whether reporters fire for this run. */
@@ -11302,8 +12090,6 @@ export interface components {
11302
12090
  commit: string | null;
11303
12091
  /** @description Build branch name. */
11304
12092
  branch: string | null;
11305
- /** @description URL of the build commit. */
11306
- commit_url: string | null;
11307
12093
  /** @description Build repository in `org/repo` form. */
11308
12094
  repo: string | null;
11309
12095
  /** @description Git branch of the build. */
@@ -11353,17 +12139,22 @@ export interface components {
11353
12139
  */
11354
12140
  on_conflict: "cancel" | "wait";
11355
12141
  } | null;
11356
- /** @description GitHub PR for the build branch, resolved via the reporter app; null when there is no PR or the reporter is not installed. */
11357
- pull_request: {
11358
- /** @description Pull request number. */
11359
- number: number;
11360
- /** @description Pull request URL. */
11361
- url: string;
12142
+ /** @description The `trigger` the run was created with, or null when none was sent. */
12143
+ trigger: {
11362
12144
  /**
11363
- * @description Pull request state.
12145
+ * @description Event that produced the run.
11364
12146
  * @enum {string}
11365
12147
  */
11366
- state: "open" | "closed" | "merged";
12148
+ event: "pull_request";
12149
+ /** @description Pull request under test. */
12150
+ pull_request: {
12151
+ /** @description Pull request number in the application repository. */
12152
+ number?: number;
12153
+ /** @description Head branch. */
12154
+ head: string;
12155
+ /** @description Base branch. */
12156
+ base: string;
12157
+ };
11367
12158
  } | null;
11368
12159
  /** @description Resolved details for the user that created the run. */
11369
12160
  created_by_user_detail: {
@@ -12084,6 +12875,19 @@ export interface components {
12084
12875
  }[];
12085
12876
  };
12086
12877
  };
12878
+ CurrentUserResponse: {
12879
+ /** @description Response payload. */
12880
+ data: {
12881
+ /** @description User ID. */
12882
+ id: string;
12883
+ /** @description Email address on the session. */
12884
+ email: string | null;
12885
+ /** @description Organizations the user belongs to. */
12886
+ org_ids: number[];
12887
+ /** @description Whether the user can access every org. */
12888
+ is_super_admin: boolean;
12889
+ };
12890
+ };
12087
12891
  UserDetailResponse: {
12088
12892
  /** @description Response payload. */
12089
12893
  data: {
@@ -12231,7 +13035,7 @@ export interface operations {
12231
13035
  "application/json": components["schemas"]["CreateTestRunResponse"];
12232
13036
  };
12233
13037
  };
12234
- /** @description Invalid request, unknown environment, conflicting branch/build, pierre code-storage repo, or the project could not be resolved. */
13038
+ /** @description Invalid request, unknown environment, pierre code-storage repo, or the project could not be resolved. */
12235
13039
  400: {
12236
13040
  headers: {
12237
13041
  [name: string]: unknown;
@@ -12240,8 +13044,17 @@ export interface operations {
12240
13044
  "application/json": components["schemas"]["ErrorResponse"];
12241
13045
  };
12242
13046
  };
12243
- /** @description Project not found or not accessible. */
12244
- 404: {
13047
+ /** @description The organisation has an overdue invoice. */
13048
+ 402: {
13049
+ headers: {
13050
+ [name: string]: unknown;
13051
+ };
13052
+ content: {
13053
+ "application/json": components["schemas"]["ErrorResponse"];
13054
+ };
13055
+ };
13056
+ /** @description Project not found or not accessible. */
13057
+ 404: {
12245
13058
  headers: {
12246
13059
  [name: string]: unknown;
12247
13060
  };
@@ -12307,7 +13120,7 @@ export interface operations {
12307
13120
  query?: never;
12308
13121
  header?: never;
12309
13122
  path: {
12310
- /** @description Test run ID. */
13123
+ /** @description Test run database ID. */
12311
13124
  id: number;
12312
13125
  };
12313
13126
  cookie?: never;
@@ -12396,7 +13209,7 @@ export interface operations {
12396
13209
  query?: never;
12397
13210
  header?: never;
12398
13211
  path: {
12399
- /** @description Database ID of the test run. */
13212
+ /** @description Test run database ID. */
12400
13213
  id: number;
12401
13214
  };
12402
13215
  cookie?: never;
@@ -12450,7 +13263,7 @@ export interface operations {
12450
13263
  query?: never;
12451
13264
  header?: never;
12452
13265
  path: {
12453
- /** @description Database ID of the test run. */
13266
+ /** @description Test run database ID. */
12454
13267
  id: number;
12455
13268
  };
12456
13269
  cookie?: never;
@@ -12479,6 +13292,15 @@ export interface operations {
12479
13292
  "application/json": components["schemas"]["ErrorResponse"];
12480
13293
  };
12481
13294
  };
13295
+ /** @description The organisation has an overdue invoice. */
13296
+ 402: {
13297
+ headers: {
13298
+ [name: string]: unknown;
13299
+ };
13300
+ content: {
13301
+ "application/json": components["schemas"]["ErrorResponse"];
13302
+ };
13303
+ };
12482
13304
  /** @description Source test run or environment not found. */
12483
13305
  404: {
12484
13306
  headers: {
@@ -12537,7 +13359,7 @@ export interface operations {
12537
13359
  query?: never;
12538
13360
  header?: never;
12539
13361
  path: {
12540
- /** @description Test run ID. */
13362
+ /** @description Test run database ID. */
12541
13363
  id: number;
12542
13364
  };
12543
13365
  cookie?: never;
@@ -12578,7 +13400,7 @@ export interface operations {
12578
13400
  query?: never;
12579
13401
  header?: never;
12580
13402
  path: {
12581
- /** @description Test run ID. */
13403
+ /** @description Test run database ID. */
12582
13404
  id: number;
12583
13405
  };
12584
13406
  cookie?: never;
@@ -12664,7 +13486,7 @@ export interface operations {
12664
13486
  query?: never;
12665
13487
  header?: never;
12666
13488
  path: {
12667
- /** @description Test run identifier (database id or external run_id). */
13489
+ /** @description External run_id of the test run. */
12668
13490
  id: number;
12669
13491
  };
12670
13492
  cookie?: never;
@@ -12691,6 +13513,47 @@ export interface operations {
12691
13513
  };
12692
13514
  };
12693
13515
  };
13516
+ getTestRunLinkedChanges: {
13517
+ parameters: {
13518
+ query?: never;
13519
+ header?: never;
13520
+ path: {
13521
+ /** @description Test run database ID. */
13522
+ id: number;
13523
+ };
13524
+ cookie?: never;
13525
+ };
13526
+ requestBody?: never;
13527
+ responses: {
13528
+ /** @description The run's linked test changes. */
13529
+ 200: {
13530
+ headers: {
13531
+ [name: string]: unknown;
13532
+ };
13533
+ content: {
13534
+ "application/json": components["schemas"]["TestRunLinkedChangesResponse"];
13535
+ };
13536
+ };
13537
+ /** @description Invalid database test run ID. */
13538
+ 400: {
13539
+ headers: {
13540
+ [name: string]: unknown;
13541
+ };
13542
+ content: {
13543
+ "application/json": components["schemas"]["ErrorResponse"];
13544
+ };
13545
+ };
13546
+ /** @description Test run not found. */
13547
+ 404: {
13548
+ headers: {
13549
+ [name: string]: unknown;
13550
+ };
13551
+ content: {
13552
+ "application/json": components["schemas"]["ErrorResponse"];
13553
+ };
13554
+ };
13555
+ };
13556
+ };
12694
13557
  getTestRunLogs: {
12695
13558
  parameters: {
12696
13559
  query?: {
@@ -12709,7 +13572,7 @@ export interface operations {
12709
13572
  };
12710
13573
  header?: never;
12711
13574
  path: {
12712
- /** @description Test run identifier (database id or external run_id). */
13575
+ /** @description Test run database ID. */
12713
13576
  id: number;
12714
13577
  };
12715
13578
  cookie?: never;
@@ -12750,7 +13613,7 @@ export interface operations {
12750
13613
  query?: never;
12751
13614
  header?: never;
12752
13615
  path: {
12753
- /** @description Test run identifier (database id or external run_id). */
13616
+ /** @description Test run database ID. */
12754
13617
  id: number;
12755
13618
  };
12756
13619
  cookie?: never;
@@ -12766,6 +13629,15 @@ export interface operations {
12766
13629
  "application/json": components["schemas"]["TestRunManifestTestsResponse"];
12767
13630
  };
12768
13631
  };
13632
+ /** @description Invalid database test run ID. */
13633
+ 400: {
13634
+ headers: {
13635
+ [name: string]: unknown;
13636
+ };
13637
+ content: {
13638
+ "application/json": components["schemas"]["ErrorResponse"];
13639
+ };
13640
+ };
12769
13641
  /** @description Test run not found. */
12770
13642
  404: {
12771
13643
  headers: {
@@ -12782,7 +13654,7 @@ export interface operations {
12782
13654
  query?: never;
12783
13655
  header?: never;
12784
13656
  path: {
12785
- /** @description Test run identifier (database id or external run_id). */
13657
+ /** @description External run_id of the test run. */
12786
13658
  id: number;
12787
13659
  };
12788
13660
  cookie?: never;
@@ -12904,7 +13776,7 @@ export interface operations {
12904
13776
  query?: never;
12905
13777
  header?: never;
12906
13778
  path: {
12907
- /** @description Test run identifier (database id or external run_id). */
13779
+ /** @description Test run database ID. */
12908
13780
  id: number;
12909
13781
  };
12910
13782
  cookie?: never;
@@ -12920,6 +13792,15 @@ export interface operations {
12920
13792
  "application/json": components["schemas"]["TestRunShardsResponse"];
12921
13793
  };
12922
13794
  };
13795
+ /** @description Invalid database test run ID. */
13796
+ 400: {
13797
+ headers: {
13798
+ [name: string]: unknown;
13799
+ };
13800
+ content: {
13801
+ "application/json": components["schemas"]["ErrorResponse"];
13802
+ };
13803
+ };
12923
13804
  /** @description Test run not found. */
12924
13805
  404: {
12925
13806
  headers: {
@@ -13056,7 +13937,7 @@ export interface operations {
13056
13937
  query?: never;
13057
13938
  header?: never;
13058
13939
  path: {
13059
- /** @description Test run identifier (database id or external run_id). */
13940
+ /** @description External run_id of the test run. */
13060
13941
  id: number;
13061
13942
  };
13062
13943
  cookie?: never;
@@ -13088,7 +13969,7 @@ export interface operations {
13088
13969
  query?: never;
13089
13970
  header?: never;
13090
13971
  path: {
13091
- /** @description Database ID of the test run. */
13972
+ /** @description Test run database ID. */
13092
13973
  id: number;
13093
13974
  };
13094
13975
  cookie?: never;
@@ -13142,7 +14023,7 @@ export interface operations {
13142
14023
  query?: never;
13143
14024
  header?: never;
13144
14025
  path: {
13145
- /** @description Test run identifier (database id or external run_id). */
14026
+ /** @description External run_id of the test run. */
13146
14027
  id: number;
13147
14028
  };
13148
14029
  cookie?: never;
@@ -13178,12 +14059,53 @@ export interface operations {
13178
14059
  };
13179
14060
  };
13180
14061
  };
14062
+ getTestRunTriageSession: {
14063
+ parameters: {
14064
+ query?: never;
14065
+ header?: never;
14066
+ path: {
14067
+ /** @description Test run database ID. */
14068
+ id: number;
14069
+ };
14070
+ cookie?: never;
14071
+ };
14072
+ requestBody?: never;
14073
+ responses: {
14074
+ /** @description The newest triage session, if one exists. */
14075
+ 200: {
14076
+ headers: {
14077
+ [name: string]: unknown;
14078
+ };
14079
+ content: {
14080
+ "application/json": components["schemas"]["GetTestRunTriageSessionResponse"];
14081
+ };
14082
+ };
14083
+ /** @description Invalid database test run ID. */
14084
+ 400: {
14085
+ headers: {
14086
+ [name: string]: unknown;
14087
+ };
14088
+ content: {
14089
+ "application/json": components["schemas"]["ErrorResponse"];
14090
+ };
14091
+ };
14092
+ /** @description Test run not found or inaccessible. */
14093
+ 404: {
14094
+ headers: {
14095
+ [name: string]: unknown;
14096
+ };
14097
+ content: {
14098
+ "application/json": components["schemas"]["ErrorResponse"];
14099
+ };
14100
+ };
14101
+ };
14102
+ };
13181
14103
  createTestRunTriageSession: {
13182
14104
  parameters: {
13183
14105
  query?: never;
13184
14106
  header?: never;
13185
14107
  path: {
13186
- /** @description Database ID of the test run. */
14108
+ /** @description Test run database ID. */
13187
14109
  id: number;
13188
14110
  };
13189
14111
  cookie?: never;
@@ -13199,6 +14121,15 @@ export interface operations {
13199
14121
  "application/json": components["schemas"]["TestRunTriageSessionResponse"];
13200
14122
  };
13201
14123
  };
14124
+ /** @description Invalid database test run ID. */
14125
+ 400: {
14126
+ headers: {
14127
+ [name: string]: unknown;
14128
+ };
14129
+ content: {
14130
+ "application/json": components["schemas"]["ErrorResponse"];
14131
+ };
14132
+ };
13202
14133
  /** @description Test run not found or inaccessible. */
13203
14134
  404: {
13204
14135
  headers: {
@@ -13215,7 +14146,7 @@ export interface operations {
13215
14146
  query?: never;
13216
14147
  header?: never;
13217
14148
  path: {
13218
- /** @description Database ID of the test run. */
14149
+ /** @description Test run database ID. */
13219
14150
  id: number;
13220
14151
  };
13221
14152
  cookie?: never;
@@ -13638,7 +14569,7 @@ export interface operations {
13638
14569
  "application/json": components["schemas"]["EnvironmentResponse"];
13639
14570
  };
13640
14571
  };
13641
- /** @description Invalid request, or the slug already exists. */
14572
+ /** @description Invalid request, the slug already exists, or reporter_config names an unknown Slack channel id. */
13642
14573
  400: {
13643
14574
  headers: {
13644
14575
  [name: string]: unknown;
@@ -13733,7 +14664,7 @@ export interface operations {
13733
14664
  "application/json": components["schemas"]["Environment"];
13734
14665
  };
13735
14666
  };
13736
- /** @description Invalid request, or the slug already exists. */
14667
+ /** @description Invalid request, the slug already exists, or reporter_config names an unknown Slack channel id. */
13737
14668
  400: {
13738
14669
  headers: {
13739
14670
  [name: string]: unknown;
@@ -14864,85 +15795,6 @@ export interface operations {
14864
15795
  };
14865
15796
  };
14866
15797
  };
14867
- slackLinkWebhook: {
14868
- parameters: {
14869
- query?: never;
14870
- header?: never;
14871
- path?: never;
14872
- cookie?: never;
14873
- };
14874
- requestBody?: {
14875
- content: {
14876
- "application/x-www-form-urlencoded": {
14877
- /** @description Slack channel ID. */
14878
- channel_id: string;
14879
- /** @description Slack channel name. */
14880
- channel_name: string;
14881
- /** @description Slack workspace (team) ID. */
14882
- team_id: string;
14883
- /** @description Slack trigger ID for opening a modal. */
14884
- trigger_id: string;
14885
- /**
14886
- * @description Text passed to the /empirical slash command.
14887
- * @default
14888
- */
14889
- text?: string;
14890
- };
14891
- };
14892
- };
14893
- responses: {
14894
- /** @description Slash command response shown to the invoking user; empty body when a modal was opened. */
14895
- 200: {
14896
- headers: {
14897
- [name: string]: unknown;
14898
- };
14899
- content: {
14900
- "text/plain": string;
14901
- };
14902
- };
14903
- /** @description Invalid request. */
14904
- 400: {
14905
- headers: {
14906
- [name: string]: unknown;
14907
- };
14908
- content: {
14909
- "application/json": components["schemas"]["ErrorResponse"];
14910
- };
14911
- };
14912
- };
14913
- };
14914
- listSlackChannels: {
14915
- parameters: {
14916
- query?: {
14917
- /** @description When `true`, validate each channel against Slack. */
14918
- validate_slack?: "true" | "false";
14919
- };
14920
- header?: never;
14921
- path?: never;
14922
- cookie?: never;
14923
- };
14924
- requestBody?: never;
14925
- responses: {
14926
- /** @description The project's Slack channels. */
14927
- 200: {
14928
- headers: {
14929
- [name: string]: unknown;
14930
- };
14931
- content: {
14932
- "application/json": components["schemas"]["SlackChannelListResponse"];
14933
- };
14934
- };
14935
- /** @description Invalid request. */
14936
- 400: {
14937
- headers: {
14938
- [name: string]: unknown;
14939
- };
14940
- content: {
14941
- "application/json": components["schemas"]["ErrorResponse"];
14942
- };
14943
- };
14944
- };
14945
- };
14946
15798
  getSlackFileMetadata: {
14947
15799
  parameters: {
14948
15800
  query?: never;
@@ -15457,102 +16309,74 @@ export interface operations {
15457
16309
  };
15458
16310
  };
15459
16311
  };
15460
- deleteSlackChannel: {
16312
+ listSlackChannelsV2: {
15461
16313
  parameters: {
15462
16314
  query?: never;
15463
16315
  header?: never;
15464
- path: {
15465
- /** @description Channel subscription ID. */
15466
- id: number;
15467
- };
16316
+ path?: never;
15468
16317
  cookie?: never;
15469
16318
  };
15470
16319
  requestBody?: never;
15471
16320
  responses: {
15472
- /** @description The channel was deleted. */
16321
+ /** @description The organization's active Slack channels. */
15473
16322
  200: {
15474
16323
  headers: {
15475
16324
  [name: string]: unknown;
15476
16325
  };
15477
16326
  content: {
15478
- "application/json": components["schemas"]["SlackChannelDeleteResponse"];
15479
- };
15480
- };
15481
- /** @description Invalid request. */
15482
- 400: {
15483
- headers: {
15484
- [name: string]: unknown;
15485
- };
15486
- content: {
15487
- "application/json": components["schemas"]["ErrorResponse"];
15488
- };
15489
- };
15490
- /** @description Channel not found. */
15491
- 404: {
15492
- headers: {
15493
- [name: string]: unknown;
15494
- };
15495
- content: {
15496
- "application/json": {
15497
- /** @description Error message. */
15498
- error: string;
15499
- };
16327
+ "application/json": components["schemas"]["SlackChannelListV2Response"];
15500
16328
  };
15501
16329
  };
15502
16330
  };
15503
16331
  };
15504
- updateSlackChannel: {
16332
+ refreshSlackChannelV2: {
15505
16333
  parameters: {
15506
16334
  query?: never;
15507
16335
  header?: never;
15508
16336
  path: {
15509
- /** @description Channel subscription ID. */
16337
+ /** @description Canonical Slack channel ID. */
15510
16338
  id: number;
15511
16339
  };
15512
16340
  cookie?: never;
15513
16341
  };
15514
- requestBody?: {
15515
- content: {
15516
- "application/json": {
15517
- /** @description Environments this channel is subscribed to. */
15518
- subscribed_environments?: string[];
15519
- /** @description Whether the channel filters by environment. */
15520
- is_env_specific?: boolean;
15521
- };
15522
- };
15523
- };
16342
+ requestBody?: never;
15524
16343
  responses: {
15525
- /** @description The updated channel. */
16344
+ /** @description The channel after the refresh, with live validation. */
15526
16345
  200: {
15527
16346
  headers: {
15528
16347
  [name: string]: unknown;
15529
16348
  };
15530
16349
  content: {
15531
- "application/json": components["schemas"]["SlackChannelMutationResponse"];
16350
+ "application/json": components["schemas"]["SlackChannelRefreshV2Response"];
15532
16351
  };
15533
16352
  };
15534
- /** @description Invalid request. */
15535
- 400: {
16353
+ /** @description Channel not found in the scoped project's organization. */
16354
+ 404: {
15536
16355
  headers: {
15537
16356
  [name: string]: unknown;
15538
16357
  };
15539
16358
  content: {
15540
- "application/json": components["schemas"]["ErrorResponse"] | {
15541
- /** @description Error message. */
15542
- error: string;
15543
- };
16359
+ "application/json": components["schemas"]["ErrorResponse"];
15544
16360
  };
15545
16361
  };
15546
- /** @description Channel not found. */
15547
- 404: {
16362
+ };
16363
+ };
16364
+ validateSlackChannelsV2: {
16365
+ parameters: {
16366
+ query?: never;
16367
+ header?: never;
16368
+ path?: never;
16369
+ cookie?: never;
16370
+ };
16371
+ requestBody?: never;
16372
+ responses: {
16373
+ /** @description The organization's active Slack channels with live validation results. */
16374
+ 200: {
15548
16375
  headers: {
15549
16376
  [name: string]: unknown;
15550
16377
  };
15551
16378
  content: {
15552
- "application/json": {
15553
- /** @description Error message. */
15554
- error: string;
15555
- };
16379
+ "application/json": components["schemas"]["SlackChannelValidationListV2Response"];
15556
16380
  };
15557
16381
  };
15558
16382
  };
@@ -16507,10 +17331,12 @@ export interface operations {
16507
17331
  per_page?: number;
16508
17332
  /** @description Row order. `scheduled` (default) is manifest order โ€” stable for a finished run. `recent` is most-recently-completed first, for the live view of an active run. */
16509
17333
  order?: "scheduled" | "recent";
17334
+ /** @description When `true`, also returns cases that have reported at least one attempt but still have retries outstanding, marked `is_retrying: true`. Their `status` is provisional (from the attempts so far) and can change when the remaining retries land. Defaults to `false`. */
17335
+ include_retrying?: "true" | "false";
16510
17336
  };
16511
17337
  header?: never;
16512
17338
  path: {
16513
- /** @description Test run ID. */
17339
+ /** @description Test run database ID. */
16514
17340
  id: number;
16515
17341
  };
16516
17342
  cookie?: never;
@@ -16548,10 +17374,13 @@ export interface operations {
16548
17374
  };
16549
17375
  getTestRunCase: {
16550
17376
  parameters: {
16551
- query?: never;
17377
+ query?: {
17378
+ /** @description When `true`, also returns cases that have reported at least one attempt but still have retries outstanding, marked `is_retrying: true`. Their `status` is provisional (from the attempts so far) and can change when the remaining retries land. Defaults to `false`. */
17379
+ include_retrying?: "true" | "false";
17380
+ };
16552
17381
  header?: never;
16553
17382
  path: {
16554
- /** @description Test run ID. */
17383
+ /** @description Test run database ID. */
16555
17384
  id: number;
16556
17385
  /** @description Playwright test ID (`pw_test_id`) of the case. */
16557
17386
  case_id: string;
@@ -16918,7 +17747,7 @@ export interface operations {
16918
17747
  entity_type: string;
16919
17748
  /** @description Exact entity id, or null when this trigger matches every entity. */
16920
17749
  entity_id: string | null;
16921
- /** @description Optional payload equality filters. Keys must be allowed for the selected event in the canonical event catalog. */
17750
+ /** @description Optional payload equality filters. Keys must be allowed for the selected event in the canonical event catalog, and enum-like fields only accept the values the event emits. */
16922
17751
  payload_filter: {
16923
17752
  [key: string]: string | number | boolean | unknown;
16924
17753
  };
@@ -16965,7 +17794,7 @@ export interface operations {
16965
17794
  event_type: string;
16966
17795
  /** @description Exact canonical entity id to match. Omit on create, or set null on update, to match every entity. */
16967
17796
  entity_id?: string;
16968
- /** @description Optional payload equality filters. Keys must be allowed for the selected event in the canonical event catalog. */
17797
+ /** @description Optional payload equality filters. Keys must be allowed for the selected event in the canonical event catalog, and enum-like fields only accept the values the event emits. */
16969
17798
  payload_filter?: {
16970
17799
  [key: string]: string | number | boolean | unknown;
16971
17800
  };
@@ -16996,7 +17825,7 @@ export interface operations {
16996
17825
  entity_type: string;
16997
17826
  /** @description Exact entity id, or null when this trigger matches every entity. */
16998
17827
  entity_id: string | null;
16999
- /** @description Optional payload equality filters. Keys must be allowed for the selected event in the canonical event catalog. */
17828
+ /** @description Optional payload equality filters. Keys must be allowed for the selected event in the canonical event catalog, and enum-like fields only accept the values the event emits. */
17000
17829
  payload_filter: {
17001
17830
  [key: string]: string | number | boolean | unknown;
17002
17831
  };
@@ -17070,7 +17899,7 @@ export interface operations {
17070
17899
  entity_type: string;
17071
17900
  /** @description Exact entity id, or null when this trigger matches every entity. */
17072
17901
  entity_id: string | null;
17073
- /** @description Optional payload equality filters. Keys must be allowed for the selected event in the canonical event catalog. */
17902
+ /** @description Optional payload equality filters. Keys must be allowed for the selected event in the canonical event catalog, and enum-like fields only accept the values the event emits. */
17074
17903
  payload_filter: {
17075
17904
  [key: string]: string | number | boolean | unknown;
17076
17905
  };
@@ -17145,7 +17974,7 @@ export interface operations {
17145
17974
  event_type?: string;
17146
17975
  /** @description Exact canonical entity id to match. Omit on create, or set null on update, to match every entity. */
17147
17976
  entity_id?: string | null;
17148
- /** @description Optional payload equality filters. Keys must be allowed for the selected event in the canonical event catalog. */
17977
+ /** @description Optional payload equality filters. Keys must be allowed for the selected event in the canonical event catalog, and enum-like fields only accept the values the event emits. */
17149
17978
  payload_filter?: {
17150
17979
  [key: string]: string | number | boolean | unknown;
17151
17980
  };
@@ -17176,7 +18005,7 @@ export interface operations {
17176
18005
  entity_type: string;
17177
18006
  /** @description Exact entity id, or null when this trigger matches every entity. */
17178
18007
  entity_id: string | null;
17179
- /** @description Optional payload equality filters. Keys must be allowed for the selected event in the canonical event catalog. */
18008
+ /** @description Optional payload equality filters. Keys must be allowed for the selected event in the canonical event catalog, and enum-like fields only accept the values the event emits. */
17180
18009
  payload_filter: {
17181
18010
  [key: string]: string | number | boolean | unknown;
17182
18011
  };
@@ -17246,7 +18075,7 @@ export interface operations {
17246
18075
  "application/json": unknown;
17247
18076
  };
17248
18077
  };
17249
- /** @description A proxy rule rejected the request, or GitHub returned a client error. */
18078
+ /** @description A proxy rule rejected the request (including a squash or rebase PR merge), or GitHub returned a client error. */
17250
18079
  400: {
17251
18080
  headers: {
17252
18081
  [name: string]: unknown;
@@ -17255,7 +18084,7 @@ export interface operations {
17255
18084
  "application/json": components["schemas"]["GithubProxyError"];
17256
18085
  };
17257
18086
  };
17258
- /** @description The target repository is blocked, or a sandbox proxy rule forbade the request. */
18087
+ /** @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. */
17259
18088
  403: {
17260
18089
  headers: {
17261
18090
  [name: string]: unknown;
@@ -17836,6 +18665,8 @@ export interface operations {
17836
18665
  page?: number;
17837
18666
  /** @description Items per page. Default 10. */
17838
18667
  per_page?: number;
18668
+ /** @description Optional Manager sidebar category: executor sessions, or all non-manager/non-executor user-facing sessions. */
18669
+ category?: "executor" | "user";
17839
18670
  /** @description Comma-separated project IDs to include. */
17840
18671
  project_ids?: string;
17841
18672
  /** @description Comma-separated project IDs to exclude. */
@@ -17897,6 +18728,7 @@ export interface operations {
17897
18728
  source?: string | null;
17898
18729
  source_identifier?: string | null;
17899
18730
  model?: string | null;
18731
+ /** @description Deprecated. Sessions start on the project default branch; a different branch is added to `message` as an instruction to work from it. */
17900
18732
  base_branch?: string | null;
17901
18733
  created_by?: string | null;
17902
18734
  };
@@ -18580,6 +19412,15 @@ export interface operations {
18580
19412
  "application/json": components["schemas"]["ErrorResponse"];
18581
19413
  };
18582
19414
  };
19415
+ /** @description Billing admission denied. */
19416
+ 402: {
19417
+ headers: {
19418
+ [name: string]: unknown;
19419
+ };
19420
+ content: {
19421
+ "application/json": components["schemas"]["ErrorResponse"];
19422
+ };
19423
+ };
18583
19424
  /** @description Chat session not found. */
18584
19425
  404: {
18585
19426
  headers: {
@@ -18692,12 +19533,9 @@ export interface operations {
18692
19533
  };
18693
19534
  };
18694
19535
  };
18695
- listChatSessionSandboxFiles: {
19536
+ getChatSessionSandboxHealth: {
18696
19537
  parameters: {
18697
- query?: {
18698
- /** @description Absolute path inside the sandbox. */
18699
- path?: string;
18700
- };
19538
+ query?: never;
18701
19539
  header?: never;
18702
19540
  path: {
18703
19541
  /** @description Chat session ID. */
@@ -18707,31 +19545,22 @@ export interface operations {
18707
19545
  };
18708
19546
  requestBody?: never;
18709
19547
  responses: {
18710
- /** @description File tree under the path. */
19548
+ /** @description Sandbox health. */
18711
19549
  200: {
18712
19550
  headers: {
18713
19551
  [name: string]: unknown;
18714
19552
  };
18715
19553
  content: {
18716
- "application/json": components["schemas"]["SandboxFilesList"];
19554
+ "application/json": components["schemas"]["SandboxHealthResult"];
18717
19555
  };
18718
19556
  };
18719
- /** @description File listing failed. */
19557
+ /** @description Invalid request. */
18720
19558
  400: {
18721
19559
  headers: {
18722
19560
  [name: string]: unknown;
18723
19561
  };
18724
19562
  content: {
18725
- "application/json": components["schemas"]["SandboxFilesError"];
18726
- };
18727
- };
18728
- /** @description Forbidden. */
18729
- 403: {
18730
- headers: {
18731
- [name: string]: unknown;
18732
- };
18733
- content: {
18734
- "application/json": components["schemas"]["SandboxErrorMessage"];
19563
+ "application/json": components["schemas"]["ErrorResponse"];
18735
19564
  };
18736
19565
  };
18737
19566
  /** @description Sandbox not found. */
@@ -18743,102 +19572,8 @@ export interface operations {
18743
19572
  "application/json": components["schemas"]["SandboxErrorMessage"];
18744
19573
  };
18745
19574
  };
18746
- };
18747
- };
18748
- getChatSessionSandboxFileContent: {
18749
- parameters: {
18750
- query?: {
18751
- /** @description Absolute path inside the sandbox. */
18752
- path?: string;
18753
- };
18754
- header?: never;
18755
- path: {
18756
- /** @description Chat session ID. */
18757
- id: number;
18758
- };
18759
- cookie?: never;
18760
- };
18761
- requestBody?: never;
18762
- responses: {
18763
- /** @description File content. */
18764
- 200: {
18765
- headers: {
18766
- [name: string]: unknown;
18767
- };
18768
- content: {
18769
- "application/json": components["schemas"]["SandboxFileContent"];
18770
- };
18771
- };
18772
- /** @description Missing path. */
18773
- 400: {
18774
- headers: {
18775
- [name: string]: unknown;
18776
- };
18777
- content: {
18778
- "application/json": components["schemas"]["SandboxFileContentError"];
18779
- };
18780
- };
18781
- /** @description Forbidden. */
18782
- 403: {
18783
- headers: {
18784
- [name: string]: unknown;
18785
- };
18786
- content: {
18787
- "application/json": components["schemas"]["SandboxFileContentError"];
18788
- };
18789
- };
18790
- /** @description Not found. */
18791
- 404: {
18792
- headers: {
18793
- [name: string]: unknown;
18794
- };
18795
- content: {
18796
- "application/json": components["schemas"]["SandboxFileContentError"];
18797
- };
18798
- };
18799
- /** @description File too large. */
18800
- 413: {
18801
- headers: {
18802
- [name: string]: unknown;
18803
- };
18804
- content: {
18805
- "application/json": components["schemas"]["SandboxFileContentError"];
18806
- };
18807
- };
18808
- };
18809
- };
18810
- getChatSessionSandboxHealth: {
18811
- parameters: {
18812
- query?: never;
18813
- header?: never;
18814
- path: {
18815
- /** @description Chat session ID. */
18816
- id: number;
18817
- };
18818
- cookie?: never;
18819
- };
18820
- requestBody?: never;
18821
- responses: {
18822
- /** @description Sandbox health. */
18823
- 200: {
18824
- headers: {
18825
- [name: string]: unknown;
18826
- };
18827
- content: {
18828
- "application/json": components["schemas"]["SandboxHealthResult"];
18829
- };
18830
- };
18831
- /** @description Invalid request. */
18832
- 400: {
18833
- headers: {
18834
- [name: string]: unknown;
18835
- };
18836
- content: {
18837
- "application/json": components["schemas"]["ErrorResponse"];
18838
- };
18839
- };
18840
- /** @description Sandbox not found. */
18841
- 404: {
19575
+ /** @description Sandbox is paused. */
19576
+ 409: {
18842
19577
  headers: {
18843
19578
  [name: string]: unknown;
18844
19579
  };
@@ -18910,56 +19645,6 @@ export interface operations {
18910
19645
  };
18911
19646
  };
18912
19647
  };
18913
- getChatSessionSandboxSessionFile: {
18914
- parameters: {
18915
- query?: never;
18916
- header?: never;
18917
- path: {
18918
- /** @description Chat session ID. */
18919
- id: number;
18920
- };
18921
- cookie?: never;
18922
- };
18923
- requestBody?: never;
18924
- responses: {
18925
- /** @description The session.jsonl file (served as a binary download). */
18926
- 200: {
18927
- headers: {
18928
- [name: string]: unknown;
18929
- };
18930
- content: {
18931
- "application/octet-stream": string;
18932
- };
18933
- };
18934
- /** @description Invalid request. */
18935
- 400: {
18936
- headers: {
18937
- [name: string]: unknown;
18938
- };
18939
- content: {
18940
- "application/json": components["schemas"]["ErrorResponse"];
18941
- };
18942
- };
18943
- /** @description Sandbox not found. */
18944
- 404: {
18945
- headers: {
18946
- [name: string]: unknown;
18947
- };
18948
- content: {
18949
- "application/json": components["schemas"]["SandboxErrorMessage"];
18950
- };
18951
- };
18952
- /** @description Failed to read session file. */
18953
- 500: {
18954
- headers: {
18955
- [name: string]: unknown;
18956
- };
18957
- content: {
18958
- "application/json": components["schemas"]["SandboxErrorMessage"];
18959
- };
18960
- };
18961
- };
18962
- };
18963
19648
  getChatSessionSnapshot: {
18964
19649
  parameters: {
18965
19650
  query?: never;
@@ -19806,6 +20491,53 @@ export interface operations {
19806
20491
  };
19807
20492
  };
19808
20493
  };
20494
+ searchRepositoryBranches: {
20495
+ parameters: {
20496
+ query: {
20497
+ /** @description Repository owner. */
20498
+ owner: string;
20499
+ /** @description Repository name. */
20500
+ repo: string;
20501
+ /** @description Branch-name search text. */
20502
+ query?: string;
20503
+ /** @description Maximum number of matching branches to return. */
20504
+ limit?: number;
20505
+ };
20506
+ header?: never;
20507
+ path?: never;
20508
+ cookie?: never;
20509
+ };
20510
+ requestBody?: never;
20511
+ responses: {
20512
+ /** @description Matching repository branches. */
20513
+ 200: {
20514
+ headers: {
20515
+ [name: string]: unknown;
20516
+ };
20517
+ content: {
20518
+ "application/json": components["schemas"]["GithubBranchSearchResponse"];
20519
+ };
20520
+ };
20521
+ /** @description Repository not found. */
20522
+ 404: {
20523
+ headers: {
20524
+ [name: string]: unknown;
20525
+ };
20526
+ content: {
20527
+ "application/json": components["schemas"]["ErrorResponse"];
20528
+ };
20529
+ };
20530
+ /** @description GitHub rejected the branch search. */
20531
+ 502: {
20532
+ headers: {
20533
+ [name: string]: unknown;
20534
+ };
20535
+ content: {
20536
+ "application/json": components["schemas"]["ErrorResponse"];
20537
+ };
20538
+ };
20539
+ };
20540
+ };
19809
20541
  getCommitDiff: {
19810
20542
  parameters: {
19811
20543
  query: {
@@ -20235,7 +20967,7 @@ export interface operations {
20235
20967
  "application/json": components["schemas"]["GithubPrMergeResponse"];
20236
20968
  };
20237
20969
  };
20238
- /** @description The PR is not open or not mergeable. */
20970
+ /** @description The PR is not open, not mergeable, or GitHub refused the merge. */
20239
20971
  400: {
20240
20972
  headers: {
20241
20973
  [name: string]: unknown;
@@ -20363,6 +21095,49 @@ export interface operations {
20363
21095
  };
20364
21096
  };
20365
21097
  };
21098
+ listReporterDeliveries: {
21099
+ parameters: {
21100
+ query: {
21101
+ /** @description Project whose reporter deliveries to list. */
21102
+ project_id: number;
21103
+ /** @description Max rows per delivery kind (newest first). */
21104
+ limit?: number;
21105
+ };
21106
+ header?: never;
21107
+ path?: never;
21108
+ cookie?: never;
21109
+ };
21110
+ requestBody?: never;
21111
+ responses: {
21112
+ /** @description Reporter check runs, PR comments and linked test changes checks. */
21113
+ 200: {
21114
+ headers: {
21115
+ [name: string]: unknown;
21116
+ };
21117
+ content: {
21118
+ "application/json": components["schemas"]["GhReporterDeliveriesResponse"];
21119
+ };
21120
+ };
21121
+ /** @description Project does not belong to an org. */
21122
+ 400: {
21123
+ headers: {
21124
+ [name: string]: unknown;
21125
+ };
21126
+ content: {
21127
+ "application/json": components["schemas"]["ErrorResponse"];
21128
+ };
21129
+ };
21130
+ /** @description Project not found. */
21131
+ 404: {
21132
+ headers: {
21133
+ [name: string]: unknown;
21134
+ };
21135
+ content: {
21136
+ "application/json": components["schemas"]["ErrorResponse"];
21137
+ };
21138
+ };
21139
+ };
21140
+ };
20366
21141
  receiveReporterGithubEvent: {
20367
21142
  parameters: {
20368
21143
  query?: never;
@@ -20612,21 +21387,17 @@ export interface operations {
20612
21387
  };
20613
21388
  };
20614
21389
  };
20615
- getRepoTree: {
21390
+ getReporterPullRequest: {
20616
21391
  parameters: {
20617
21392
  query: {
20618
- /** @description Repository owner. */
20619
- owner: string;
20620
- /** @description Repository name. */
20621
- repo: string;
20622
- /** @description Repository host; only `github` is supported. */
20623
- repo_host?: string;
20624
- /** @description Unused; reserved. */
20625
- path?: string;
20626
- /** @description Branch or ref to read the tree from. */
20627
- ref?: string;
20628
- /** @description Fallback branch when `ref` does not exist. */
20629
- baseBranch?: string;
21393
+ /** @description Project whose reporter App reads the PR. */
21394
+ project_id: number;
21395
+ repo_owner: string;
21396
+ repo_name: string;
21397
+ /** @description App PR number. When omitted, the PR is found by head_sha. */
21398
+ pr_number?: number;
21399
+ /** @description Commit the reporter delivered to. Compared against the PR's current head; also used to find the PR when pr_number is omitted. */
21400
+ head_sha?: string;
20630
21401
  };
20631
21402
  header?: never;
20632
21403
  path?: never;
@@ -20634,13 +21405,64 @@ export interface operations {
20634
21405
  };
20635
21406
  requestBody?: never;
20636
21407
  responses: {
20637
- /** @description The repository tree. */
21408
+ /** @description The PR's current state and head. */
20638
21409
  200: {
20639
21410
  headers: {
20640
21411
  [name: string]: unknown;
20641
21412
  };
20642
21413
  content: {
20643
- "application/json": components["schemas"]["GithubTreeResponse"];
21414
+ "application/json": components["schemas"]["GhReporterPullRequestResponse"];
21415
+ };
21416
+ };
21417
+ /** @description Neither pr_number nor head_sha given. */
21418
+ 400: {
21419
+ headers: {
21420
+ [name: string]: unknown;
21421
+ };
21422
+ content: {
21423
+ "application/json": components["schemas"]["ErrorResponse"];
21424
+ };
21425
+ };
21426
+ /** @description Project, installation or pull request not found. */
21427
+ 404: {
21428
+ headers: {
21429
+ [name: string]: unknown;
21430
+ };
21431
+ content: {
21432
+ "application/json": components["schemas"]["ErrorResponse"];
21433
+ };
21434
+ };
21435
+ };
21436
+ };
21437
+ getRepoTree: {
21438
+ parameters: {
21439
+ query: {
21440
+ /** @description Repository owner. */
21441
+ owner: string;
21442
+ /** @description Repository name. */
21443
+ repo: string;
21444
+ /** @description Repository host; only `github` is supported. */
21445
+ repo_host?: string;
21446
+ /** @description Unused; reserved. */
21447
+ path?: string;
21448
+ /** @description Branch or ref to read the tree from. */
21449
+ ref?: string;
21450
+ /** @description Fallback branch when `ref` does not exist. */
21451
+ baseBranch?: string;
21452
+ };
21453
+ header?: never;
21454
+ path?: never;
21455
+ cookie?: never;
21456
+ };
21457
+ requestBody?: never;
21458
+ responses: {
21459
+ /** @description The repository tree. */
21460
+ 200: {
21461
+ headers: {
21462
+ [name: string]: unknown;
21463
+ };
21464
+ content: {
21465
+ "application/json": components["schemas"]["GithubTreeResponse"];
20644
21466
  };
20645
21467
  };
20646
21468
  /** @description Only GitHub repositories are supported. */
@@ -22887,6 +23709,38 @@ export interface operations {
22887
23709
  };
22888
23710
  };
22889
23711
  };
23712
+ listMemoryActivity: {
23713
+ parameters: {
23714
+ query?: {
23715
+ /** @description Window for the `daily` series, in days back from now. Per-memory stats always cover full history. Defaults to 90. */
23716
+ since_days?: number;
23717
+ };
23718
+ header?: never;
23719
+ path?: never;
23720
+ cookie?: never;
23721
+ };
23722
+ requestBody?: never;
23723
+ responses: {
23724
+ /** @description Memory activity. */
23725
+ 200: {
23726
+ headers: {
23727
+ [name: string]: unknown;
23728
+ };
23729
+ content: {
23730
+ "application/json": components["schemas"]["MemoryActivityResponse"];
23731
+ };
23732
+ };
23733
+ /** @description Invalid request. */
23734
+ 400: {
23735
+ headers: {
23736
+ [name: string]: unknown;
23737
+ };
23738
+ content: {
23739
+ "application/json": components["schemas"]["ErrorResponse"];
23740
+ };
23741
+ };
23742
+ };
23743
+ };
22890
23744
  getProjectMetricsLast7Days: {
22891
23745
  parameters: {
22892
23746
  query?: never;
@@ -23571,7 +24425,7 @@ export interface operations {
23571
24425
  };
23572
24426
  };
23573
24427
  responses: {
23574
- /** @description Org ids granted via invites and domain match. */
24428
+ /** @description The user's memberships and super-admin flag after resolution. */
23575
24429
  200: {
23576
24430
  headers: {
23577
24431
  [name: string]: unknown;
@@ -24052,9 +24906,8 @@ export interface operations {
24052
24906
  "application/json": {
24053
24907
  name?: string;
24054
24908
  has_email_reporting?: boolean;
24055
- has_branching_enabled?: boolean;
24056
24909
  default_branch?: string;
24057
- persistent_branches?: string[];
24910
+ protected_branches?: string[];
24058
24911
  /**
24059
24912
  * @deprecated
24060
24913
  * @description Read-only. Set `concurrency` on the trigger request or `scheduled_concurrency` on the environment instead.
@@ -24173,8 +25026,6 @@ export interface operations {
24173
25026
  per_page?: number;
24174
25027
  /** @description Look-back window in days (max 365). */
24175
25028
  days?: number;
24176
- /** @description Filter branches by status, or `all`. */
24177
- status?: string;
24178
25029
  };
24179
25030
  header?: never;
24180
25031
  path: {
@@ -24411,6 +25262,120 @@ export interface operations {
24411
25262
  };
24412
25263
  };
24413
25264
  };
25265
+ checkProjectRepoSettings: {
25266
+ parameters: {
25267
+ query?: {
25268
+ /** @description Check this GitHub owner's repo instead of the project's (e.g. a repo transfer destination). Requires `repo_name`; can't be `empirical-run`. */
25269
+ repo_owner?: string;
25270
+ /** @description Repository name to check, with `repo_owner`. */
25271
+ repo_name?: string;
25272
+ };
25273
+ header?: never;
25274
+ path: {
25275
+ /** @description Project ID. */
25276
+ id: number;
25277
+ };
25278
+ cookie?: never;
25279
+ };
25280
+ requestBody?: never;
25281
+ responses: {
25282
+ /** @description Check results. */
25283
+ 200: {
25284
+ headers: {
25285
+ [name: string]: unknown;
25286
+ };
25287
+ content: {
25288
+ "application/json": components["schemas"]["RepoSettingsCheckResponse"];
25289
+ };
25290
+ };
25291
+ /** @description Project has no GitHub repository, or invalid target. */
25292
+ 400: {
25293
+ headers: {
25294
+ [name: string]: unknown;
25295
+ };
25296
+ content: {
25297
+ "application/json": components["schemas"]["ErrorResponse"];
25298
+ };
25299
+ };
25300
+ /** @description Project not found. */
25301
+ 404: {
25302
+ headers: {
25303
+ [name: string]: unknown;
25304
+ };
25305
+ content: {
25306
+ "application/json": components["schemas"]["ErrorResponse"];
25307
+ };
25308
+ };
25309
+ /** @description GitHub request failed. */
25310
+ 502: {
25311
+ headers: {
25312
+ [name: string]: unknown;
25313
+ };
25314
+ content: {
25315
+ "application/json": components["schemas"]["ErrorResponse"];
25316
+ };
25317
+ };
25318
+ };
25319
+ };
25320
+ fixProjectRepoSettings: {
25321
+ parameters: {
25322
+ query?: never;
25323
+ header?: never;
25324
+ path: {
25325
+ /** @description Project ID. */
25326
+ id: number;
25327
+ };
25328
+ cookie?: never;
25329
+ };
25330
+ requestBody?: never;
25331
+ responses: {
25332
+ /** @description Re-checked results. */
25333
+ 200: {
25334
+ headers: {
25335
+ [name: string]: unknown;
25336
+ };
25337
+ content: {
25338
+ "application/json": components["schemas"]["RepoSettingsCheckResponse"];
25339
+ };
25340
+ };
25341
+ /** @description Project has no GitHub repository. */
25342
+ 400: {
25343
+ headers: {
25344
+ [name: string]: unknown;
25345
+ };
25346
+ content: {
25347
+ "application/json": components["schemas"]["ErrorResponse"];
25348
+ };
25349
+ };
25350
+ /** @description Repository isn't owned by empirical-run. */
25351
+ 403: {
25352
+ headers: {
25353
+ [name: string]: unknown;
25354
+ };
25355
+ content: {
25356
+ "application/json": components["schemas"]["ErrorResponse"];
25357
+ };
25358
+ };
25359
+ /** @description Project not found. */
25360
+ 404: {
25361
+ headers: {
25362
+ [name: string]: unknown;
25363
+ };
25364
+ content: {
25365
+ "application/json": components["schemas"]["ErrorResponse"];
25366
+ };
25367
+ };
25368
+ /** @description GitHub request failed. */
25369
+ 502: {
25370
+ headers: {
25371
+ [name: string]: unknown;
25372
+ };
25373
+ content: {
25374
+ "application/json": components["schemas"]["ErrorResponse"];
25375
+ };
25376
+ };
25377
+ };
25378
+ };
24414
25379
  triggerProjectTestCasesSync: {
24415
25380
  parameters: {
24416
25381
  query?: never;
@@ -25537,6 +26502,288 @@ export interface operations {
25537
26502
  };
25538
26503
  };
25539
26504
  };
26505
+ listRunnerBackends: {
26506
+ parameters: {
26507
+ query?: {
26508
+ /** @description Only this organisation's backends. */
26509
+ org_id?: number | null;
26510
+ };
26511
+ header?: never;
26512
+ path?: never;
26513
+ cookie?: never;
26514
+ };
26515
+ requestBody?: never;
26516
+ responses: {
26517
+ /** @description The runner backends. */
26518
+ 200: {
26519
+ headers: {
26520
+ [name: string]: unknown;
26521
+ };
26522
+ content: {
26523
+ "application/json": components["schemas"]["RunnerBackendListResponse"];
26524
+ };
26525
+ };
26526
+ };
26527
+ };
26528
+ createRunnerBackend: {
26529
+ parameters: {
26530
+ query?: never;
26531
+ header?: never;
26532
+ path?: never;
26533
+ cookie?: never;
26534
+ };
26535
+ requestBody?: {
26536
+ content: {
26537
+ "application/json": components["schemas"]["CreateRunnerBackendBody"];
26538
+ };
26539
+ };
26540
+ responses: {
26541
+ /** @description The registered backend. */
26542
+ 200: {
26543
+ headers: {
26544
+ [name: string]: unknown;
26545
+ };
26546
+ content: {
26547
+ "application/json": components["schemas"]["RunnerBackendResponse"];
26548
+ };
26549
+ };
26550
+ /** @description Invalid registration. */
26551
+ 400: {
26552
+ headers: {
26553
+ [name: string]: unknown;
26554
+ };
26555
+ content: {
26556
+ "application/json": components["schemas"]["ErrorResponse"];
26557
+ };
26558
+ };
26559
+ };
26560
+ };
26561
+ getRunnerBackend: {
26562
+ parameters: {
26563
+ query?: never;
26564
+ header?: never;
26565
+ path: {
26566
+ /** @description Runner backend ID. */
26567
+ id: number | null;
26568
+ };
26569
+ cookie?: never;
26570
+ };
26571
+ requestBody?: never;
26572
+ responses: {
26573
+ /** @description The runner backend. */
26574
+ 200: {
26575
+ headers: {
26576
+ [name: string]: unknown;
26577
+ };
26578
+ content: {
26579
+ "application/json": components["schemas"]["RunnerBackendResponse"];
26580
+ };
26581
+ };
26582
+ /** @description Runner backend not found. */
26583
+ 404: {
26584
+ headers: {
26585
+ [name: string]: unknown;
26586
+ };
26587
+ content: {
26588
+ "application/json": components["schemas"]["ErrorResponse"];
26589
+ };
26590
+ };
26591
+ };
26592
+ };
26593
+ disableRunnerBackend: {
26594
+ parameters: {
26595
+ query?: never;
26596
+ header?: never;
26597
+ path: {
26598
+ /** @description Runner backend ID. */
26599
+ id: number | null;
26600
+ };
26601
+ cookie?: never;
26602
+ };
26603
+ requestBody?: never;
26604
+ responses: {
26605
+ /** @description The disabled backend. */
26606
+ 200: {
26607
+ headers: {
26608
+ [name: string]: unknown;
26609
+ };
26610
+ content: {
26611
+ "application/json": components["schemas"]["RunnerBackendResponse"];
26612
+ };
26613
+ };
26614
+ /** @description Runner backend not found. */
26615
+ 404: {
26616
+ headers: {
26617
+ [name: string]: unknown;
26618
+ };
26619
+ content: {
26620
+ "application/json": components["schemas"]["ErrorResponse"];
26621
+ };
26622
+ };
26623
+ };
26624
+ };
26625
+ verifyRunnerBackend: {
26626
+ parameters: {
26627
+ query?: never;
26628
+ header?: never;
26629
+ path: {
26630
+ /** @description Runner backend ID. */
26631
+ id: number | null;
26632
+ };
26633
+ cookie?: never;
26634
+ };
26635
+ requestBody?: never;
26636
+ responses: {
26637
+ /** @description Every check, and the backend after them. */
26638
+ 200: {
26639
+ headers: {
26640
+ [name: string]: unknown;
26641
+ };
26642
+ content: {
26643
+ "application/json": components["schemas"]["RunnerBackendVerifyResponse"];
26644
+ };
26645
+ };
26646
+ /** @description Runner backend not found. */
26647
+ 404: {
26648
+ headers: {
26649
+ [name: string]: unknown;
26650
+ };
26651
+ content: {
26652
+ "application/json": components["schemas"]["ErrorResponse"];
26653
+ };
26654
+ };
26655
+ };
26656
+ };
26657
+ getProjectRunnerBackend: {
26658
+ parameters: {
26659
+ query?: never;
26660
+ header?: never;
26661
+ path?: never;
26662
+ cookie?: never;
26663
+ };
26664
+ requestBody?: never;
26665
+ responses: {
26666
+ /** @description The project's runner backend, or null. */
26667
+ 200: {
26668
+ headers: {
26669
+ [name: string]: unknown;
26670
+ };
26671
+ content: {
26672
+ "application/json": components["schemas"]["ProjectRunnerBackendDetailResponse"];
26673
+ };
26674
+ };
26675
+ /** @description Missing or invalid project scope. */
26676
+ 400: {
26677
+ headers: {
26678
+ [name: string]: unknown;
26679
+ };
26680
+ content: {
26681
+ "application/json": components["schemas"]["ErrorResponse"];
26682
+ };
26683
+ };
26684
+ /** @description Project not found or not accessible. */
26685
+ 404: {
26686
+ headers: {
26687
+ [name: string]: unknown;
26688
+ };
26689
+ content: {
26690
+ "application/json": components["schemas"]["ErrorResponse"];
26691
+ };
26692
+ };
26693
+ };
26694
+ };
26695
+ verifyProjectRunnerBackend: {
26696
+ parameters: {
26697
+ query?: never;
26698
+ header?: never;
26699
+ path?: never;
26700
+ cookie?: never;
26701
+ };
26702
+ requestBody?: never;
26703
+ responses: {
26704
+ /** @description Every check, and the backend after them. */
26705
+ 200: {
26706
+ headers: {
26707
+ [name: string]: unknown;
26708
+ };
26709
+ content: {
26710
+ "application/json": components["schemas"]["RunnerBackendVerifyResponse"];
26711
+ };
26712
+ };
26713
+ /** @description Missing or invalid project scope. */
26714
+ 400: {
26715
+ headers: {
26716
+ [name: string]: unknown;
26717
+ };
26718
+ content: {
26719
+ "application/json": components["schemas"]["ErrorResponse"];
26720
+ };
26721
+ };
26722
+ /** @description Project not found, or it runs on Empirical-hosted. */
26723
+ 404: {
26724
+ headers: {
26725
+ [name: string]: unknown;
26726
+ };
26727
+ content: {
26728
+ "application/json": components["schemas"]["ErrorResponse"];
26729
+ };
26730
+ };
26731
+ /** @description The runner backend is disabled. */
26732
+ 409: {
26733
+ headers: {
26734
+ [name: string]: unknown;
26735
+ };
26736
+ content: {
26737
+ "application/json": components["schemas"]["ErrorResponse"];
26738
+ };
26739
+ };
26740
+ };
26741
+ };
26742
+ setProjectRunnerBackend: {
26743
+ parameters: {
26744
+ query?: never;
26745
+ header?: never;
26746
+ path: {
26747
+ /** @description Project ID. */
26748
+ project_id: number | null;
26749
+ };
26750
+ cookie?: never;
26751
+ };
26752
+ requestBody?: {
26753
+ content: {
26754
+ "application/json": components["schemas"]["SetProjectRunnerBackendBody"];
26755
+ };
26756
+ };
26757
+ responses: {
26758
+ /** @description The project's backend. */
26759
+ 200: {
26760
+ headers: {
26761
+ [name: string]: unknown;
26762
+ };
26763
+ content: {
26764
+ "application/json": components["schemas"]["ProjectRunnerBackendResponse"];
26765
+ };
26766
+ };
26767
+ /** @description The backend belongs to another org or is not active. */
26768
+ 400: {
26769
+ headers: {
26770
+ [name: string]: unknown;
26771
+ };
26772
+ content: {
26773
+ "application/json": components["schemas"]["ErrorResponse"];
26774
+ };
26775
+ };
26776
+ /** @description Project or runner backend not found. */
26777
+ 404: {
26778
+ headers: {
26779
+ [name: string]: unknown;
26780
+ };
26781
+ content: {
26782
+ "application/json": components["schemas"]["ErrorResponse"];
26783
+ };
26784
+ };
26785
+ };
26786
+ };
25540
26787
  listSandboxSnapshots: {
25541
26788
  parameters: {
25542
26789
  query?: never;
@@ -25915,7 +27162,7 @@ export interface operations {
25915
27162
  query?: never;
25916
27163
  header?: never;
25917
27164
  path: {
25918
- /** @description Test run database identifier. */
27165
+ /** @description Test run database ID. */
25919
27166
  id: number;
25920
27167
  };
25921
27168
  cookie?: never;
@@ -25956,7 +27203,7 @@ export interface operations {
25956
27203
  query?: never;
25957
27204
  header?: never;
25958
27205
  path: {
25959
- /** @description Test run database identifier. */
27206
+ /** @description Test run database ID. */
25960
27207
  id: number;
25961
27208
  };
25962
27209
  cookie?: never;
@@ -26207,6 +27454,26 @@ export interface operations {
26207
27454
  };
26208
27455
  };
26209
27456
  };
27457
+ getCurrentUser: {
27458
+ parameters: {
27459
+ query?: never;
27460
+ header?: never;
27461
+ path?: never;
27462
+ cookie?: never;
27463
+ };
27464
+ requestBody?: never;
27465
+ responses: {
27466
+ /** @description The current user. */
27467
+ 200: {
27468
+ headers: {
27469
+ [name: string]: unknown;
27470
+ };
27471
+ content: {
27472
+ "application/json": components["schemas"]["CurrentUserResponse"];
27473
+ };
27474
+ };
27475
+ };
27476
+ };
26210
27477
  createMyMemberships: {
26211
27478
  parameters: {
26212
27479
  query?: never;
@@ -26315,6 +27582,39 @@ export interface operations {
26315
27582
  };
26316
27583
  };
26317
27584
  };
27585
+ trackTelemetryEvent: {
27586
+ parameters: {
27587
+ query?: never;
27588
+ header?: never;
27589
+ path?: never;
27590
+ cookie?: never;
27591
+ };
27592
+ requestBody?: {
27593
+ content: {
27594
+ "application/json": components["schemas"]["TelemetryTrackRequest"];
27595
+ };
27596
+ };
27597
+ responses: {
27598
+ /** @description Event accepted. */
27599
+ 200: {
27600
+ headers: {
27601
+ [name: string]: unknown;
27602
+ };
27603
+ content: {
27604
+ "application/json": components["schemas"]["TelemetryTrackResponse"];
27605
+ };
27606
+ };
27607
+ /** @description Invalid event. */
27608
+ 400: {
27609
+ headers: {
27610
+ [name: string]: unknown;
27611
+ };
27612
+ content: {
27613
+ "application/json": components["schemas"]["ErrorResponse"];
27614
+ };
27615
+ };
27616
+ };
27617
+ };
26318
27618
  getProjectUsageV2: {
26319
27619
  parameters: {
26320
27620
  query?: {