@empiricalrun/playwright-utils 0.56.0 → 0.57.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -355,6 +355,26 @@ export interface paths {
355
355
  patch?: never;
356
356
  trace?: never;
357
357
  };
358
+ "/api/test-runs/{id}/triage-session": {
359
+ parameters: {
360
+ query?: never;
361
+ header?: never;
362
+ path?: never;
363
+ cookie?: never;
364
+ };
365
+ get?: never;
366
+ put?: never;
367
+ /**
368
+ * ⚙️ Delegate a test run to triage
369
+ * @description Creates the triage chat session for a test run and delivers its first message (awaited, so the 201 means the message landed). The session is stamped `purpose = "triage"` server-side for metering. Re-delegating creates a new session; the newest one is the run's live triage session.
370
+ */
371
+ post: operations["createTestRunTriageSession"];
372
+ delete?: never;
373
+ options?: never;
374
+ head?: never;
375
+ patch?: never;
376
+ trace?: never;
377
+ };
358
378
  "/api/test-runs/{id}/trigger-merge": {
359
379
  parameters: {
360
380
  query?: never;
@@ -488,7 +508,7 @@ export interface paths {
488
508
  };
489
509
  /**
490
510
  * List test case tags
491
- * @description Returns the distinct set of tags across the scoped project's test cases. The response is a bare `{ tags }` object (no `data` envelope) and is cached for 5 minutes via a `Cache-Control` header.
511
+ * @description Returns the distinct set of tags across the scoped project's active test cases (those present at the last synced commit; all synced test cases if the project has never synced). The response is a bare `{ tags }` object (no `data` envelope) and is cached for 5 minutes via a `Cache-Control` header.
492
512
  */
493
513
  get: operations["listTestCaseTags"];
494
514
  put?: never;
@@ -499,6 +519,26 @@ export interface paths {
499
519
  patch?: never;
500
520
  trace?: never;
501
521
  };
522
+ "/api/v2/test-cases/playwright-projects": {
523
+ parameters: {
524
+ query?: never;
525
+ header?: never;
526
+ path?: never;
527
+ cookie?: never;
528
+ };
529
+ /**
530
+ * ⚙️ List test case Playwright projects
531
+ * @description Returns the distinct set of Playwright projects across the scoped project's synced test cases. The response is a bare `{ playwright_projects }` object (no `data` envelope) and is cached for 5 minutes via a `Cache-Control` header. A Playwright project declared in `playwright.config.ts` but carrying no tests will not appear.
532
+ */
533
+ get: operations["listTestCasePlaywrightProjects"];
534
+ put?: never;
535
+ post?: never;
536
+ delete?: never;
537
+ options?: never;
538
+ head?: never;
539
+ patch?: never;
540
+ trace?: never;
541
+ };
502
542
  "/api/environments": {
503
543
  parameters: {
504
544
  query?: never;
@@ -990,6 +1030,26 @@ export interface paths {
990
1030
  patch?: never;
991
1031
  trace?: never;
992
1032
  };
1033
+ "/api/slack/proxy": {
1034
+ parameters: {
1035
+ query?: never;
1036
+ header?: never;
1037
+ path?: never;
1038
+ cookie?: never;
1039
+ };
1040
+ get?: never;
1041
+ put?: never;
1042
+ /**
1043
+ * 🤖 Proxy a read-only Slack API request
1044
+ * @description Calls a read-only Slack Web API method with the workspace token and returns the response verbatim. Sandbox-delegated principals only; the `channel` or `file` argument must resolve to a channel the calling project can read.
1045
+ */
1046
+ post: operations["slackProxy"];
1047
+ delete?: never;
1048
+ options?: never;
1049
+ head?: never;
1050
+ patch?: never;
1051
+ trace?: never;
1052
+ };
993
1053
  "/api/slack/channels/{id}": {
994
1054
  parameters: {
995
1055
  query?: never;
@@ -1113,7 +1173,7 @@ export interface paths {
1113
1173
  put?: never;
1114
1174
  /**
1115
1175
  * Create a failure group
1116
- * @description Creates a durable failure group for a new failure mode. Idempotent on (project, label): an existing label returns the existing group unchanged.
1176
+ * @description Creates a durable failure group for a new failure mode. Labels are unique per project: if the label already exists the request fails with 409 and returns the existing group unchanged — inspect it (note its status) and either reuse it via PATCH/attach or create under a different label.
1117
1177
  */
1118
1178
  post: operations["createFailureGroup"];
1119
1179
  delete?: never;
@@ -1131,7 +1191,7 @@ export interface paths {
1131
1191
  };
1132
1192
  /**
1133
1193
  * Get a failure group
1134
- * @description Retrieves a single failure group with its members.
1194
+ * @description Retrieves a single failure group. Its members are served by `GET /api/failure-groups/{id}/members`.
1135
1195
  */
1136
1196
  get: operations["getFailureGroup"];
1137
1197
  put?: never;
@@ -1145,7 +1205,7 @@ export interface paths {
1145
1205
  head?: never;
1146
1206
  /**
1147
1207
  * Update a failure group
1148
- * @description Updates a group's authored fields. `fingerprint`, when present, replaces the stored one; omit it to keep it. Latest write wins.
1208
+ * @description Updates a group's authored fields. `fingerprint`, when present, replaces the stored one; omit it to keep it. Latest write wins. Renaming to a label another group holds fails with 409 and returns that group — if the two are the same failure mode, merge them instead.
1149
1209
  */
1150
1210
  patch: operations["updateFailureGroup"];
1151
1211
  trace?: never;
@@ -1159,7 +1219,7 @@ export interface paths {
1159
1219
  };
1160
1220
  /**
1161
1221
  * Get a failure group's activity
1162
- * @description Returns the group's activity timeline (newest first): creation, authored edits, status changes, merges, and member joins/removals. Derived from the revision trail and the membership-event log.
1222
+ * @description Returns the group's activity timeline (newest first): creation, authored edits, status changes, merges, member joins, repeat sightings, and removals. Derived from the revision trail and the membership-event log.
1163
1223
  */
1164
1224
  get: operations["getFailureGroupActivity"];
1165
1225
  put?: never;
@@ -1185,7 +1245,7 @@ export interface paths {
1185
1245
  put?: never;
1186
1246
  /**
1187
1247
  * Attach a failing test to a failure group
1188
- * @description Records that a run's failing test belongs to this group, refreshing the group's last-seen rollups. Idempotent: re-attaching an existing member refreshes its sighting. An agent attach will not resurrect a membership a human detached.
1248
+ * @description Records that a run's failing test belongs to this group, refreshing the group's last-seen rollups, and returns the derived member entry. Idempotent: re-attaching an existing member refreshes its sighting (the entry's sighting_count and last_seen reflect it). An agent attach will not resurrect a membership a human detached.
1189
1249
  */
1190
1250
  post: operations["attachFailureGroupMember"];
1191
1251
  delete?: never;
@@ -1310,6 +1370,70 @@ export interface paths {
1310
1370
  patch?: never;
1311
1371
  trace?: never;
1312
1372
  };
1373
+ "/api/beta/alert-rules": {
1374
+ parameters: {
1375
+ query?: never;
1376
+ header?: never;
1377
+ path?: never;
1378
+ cookie?: never;
1379
+ };
1380
+ /**
1381
+ * 🧪 List alert rules
1382
+ * @description Returns the scoped project's alert rules, all-environments rule first.
1383
+ */
1384
+ get: operations["listAlertRules"];
1385
+ put?: never;
1386
+ /**
1387
+ * 🛡️ 🧪 Create an alert rule
1388
+ * @description Creates an alert rule for the scoped project. `environment_id: null` (or omitted) makes it the all-environments rule; an env-specific rule overrides the all-env rule for that environment. At most one rule per (project, environment) — a duplicate fails with 409.
1389
+ */
1390
+ post: operations["createAlertRule"];
1391
+ delete?: never;
1392
+ options?: never;
1393
+ head?: never;
1394
+ patch?: never;
1395
+ trace?: never;
1396
+ };
1397
+ "/api/beta/alerts": {
1398
+ parameters: {
1399
+ query?: never;
1400
+ header?: never;
1401
+ path?: never;
1402
+ cookie?: never;
1403
+ };
1404
+ /**
1405
+ * 🧪 List alerts
1406
+ * @description Returns a paginated list of the scoped project's test-case alerts, newest opened first. Filter by `state` and/or `environment_id`.
1407
+ */
1408
+ get: operations["listAlerts"];
1409
+ put?: never;
1410
+ post?: never;
1411
+ delete?: never;
1412
+ options?: never;
1413
+ head?: never;
1414
+ patch?: never;
1415
+ trace?: never;
1416
+ };
1417
+ "/api/beta/alerts/{id}": {
1418
+ parameters: {
1419
+ query?: never;
1420
+ header?: never;
1421
+ path?: never;
1422
+ cookie?: never;
1423
+ };
1424
+ /**
1425
+ * 🧪 Get an alert
1426
+ * @description Retrieves a single alert with its lifecycle events (oldest first).
1427
+ */
1428
+ get: operations["getAlert"];
1429
+ put?: never;
1430
+ post?: never;
1431
+ delete?: never;
1432
+ options?: never;
1433
+ head?: never;
1434
+ patch?: never;
1435
+ trace?: never;
1436
+ };
1313
1437
  "/api/v1/telemetry/overlay-dismissals": {
1314
1438
  parameters: {
1315
1439
  query?: never;
@@ -1390,6 +1514,26 @@ export interface paths {
1390
1514
  patch?: never;
1391
1515
  trace?: never;
1392
1516
  };
1517
+ "/api/chat-sessions/{id}/alarms": {
1518
+ parameters: {
1519
+ query?: never;
1520
+ header?: never;
1521
+ path?: never;
1522
+ cookie?: never;
1523
+ };
1524
+ /**
1525
+ * 🤖 List a chat session's upcoming alarms
1526
+ * @description Returns the session's pending self-scheduled wake-ups (the agent set_alarm tool). Fired alarms are dropped by the scheduler, so every entry is still upcoming. Empty in environments without a scheduler.
1527
+ */
1528
+ get: operations["listChatSessionAlarms"];
1529
+ put?: never;
1530
+ post?: never;
1531
+ delete?: never;
1532
+ options?: never;
1533
+ head?: never;
1534
+ patch?: never;
1535
+ trace?: never;
1536
+ };
1393
1537
  "/api/chat-sessions/{id}/threads": {
1394
1538
  parameters: {
1395
1539
  query?: never;
@@ -1405,7 +1549,7 @@ export interface paths {
1405
1549
  put?: never;
1406
1550
  /**
1407
1551
  * 🤖 Create a session thread
1408
- * @description Creates a thread for a chat session. `purpose: notification` creates a personal Slack DM mirror. `purpose: agent` creates an agent-controlled Slack thread for explicit outbound messages and mentioned user replies.
1552
+ * @description Creates a thread for a chat session. `purpose: notification` creates a personal Slack DM mirror. `purpose: agent` creates an agent-controlled Slack thread for explicit outbound messages and mentioned user replies (`channel_type: channel`, the default), or an agent-controlled DM to a user (`channel_type: im` with `user_id`) whose in-thread replies are forwarded to the session.
1409
1553
  */
1410
1554
  post: operations["createChatSessionThread"];
1411
1555
  delete?: never;
@@ -1732,26 +1876,6 @@ export interface paths {
1732
1876
  patch?: never;
1733
1877
  trace?: never;
1734
1878
  };
1735
- "/api/admin/requests": {
1736
- parameters: {
1737
- query?: never;
1738
- header?: never;
1739
- path?: never;
1740
- cookie?: never;
1741
- };
1742
- /**
1743
- * 🛡️ List all requests (admin)
1744
- * @description Returns a paginated list of requests across every active project, each with its project attached.
1745
- */
1746
- get: operations["listAllRequests"];
1747
- put?: never;
1748
- post?: never;
1749
- delete?: never;
1750
- options?: never;
1751
- head?: never;
1752
- patch?: never;
1753
- trace?: never;
1754
- };
1755
1879
  "/api/agent-workflows": {
1756
1880
  parameters: {
1757
1881
  query?: never;
@@ -1888,6 +2012,30 @@ export interface paths {
1888
2012
  patch: operations["updateApiKey"];
1889
2013
  trace?: never;
1890
2014
  };
2015
+ "/api/beta/alert-rules/{id}": {
2016
+ parameters: {
2017
+ query?: never;
2018
+ header?: never;
2019
+ path?: never;
2020
+ cookie?: never;
2021
+ };
2022
+ get?: never;
2023
+ put?: never;
2024
+ post?: never;
2025
+ /**
2026
+ * 🛡️ 🧪 Delete an alert rule
2027
+ * @description Permanently deletes an alert rule. The project is derived from the rule itself. A rule that alerts reference cannot be deleted (the alerts FK has no cascade): the request fails with 409 — deactivate the rule (`is_active: false`) instead to stop it evaluating while keeping its alert history.
2028
+ */
2029
+ delete: operations["deleteAlertRule"];
2030
+ options?: never;
2031
+ head?: never;
2032
+ /**
2033
+ * 🛡️ 🧪 Update an alert rule
2034
+ * @description Updates a rule's environment, config, or active state. The project is derived from the rule itself. Moving the rule onto a (project, environment) slot another rule holds fails with 409.
2035
+ */
2036
+ patch: operations["updateAlertRule"];
2037
+ trace?: never;
2038
+ };
1891
2039
  "/api/chat-sessions": {
1892
2040
  parameters: {
1893
2041
  query?: never;
@@ -1936,6 +2084,26 @@ export interface paths {
1936
2084
  patch: operations["patchChatSession"];
1937
2085
  trace?: never;
1938
2086
  };
2087
+ "/api/chat-sessions/{id}/branches": {
2088
+ parameters: {
2089
+ query?: never;
2090
+ header?: never;
2091
+ path?: never;
2092
+ cookie?: never;
2093
+ };
2094
+ /**
2095
+ * ⚙️ Get a session's branches and their pull requests
2096
+ * @description Returns every branch registered to the chat session (its own branch plus any the sandbox pushed), each with the pull requests opened from it. A branch with no pull requests has been pushed but has no PR yet.
2097
+ */
2098
+ get: operations["getChatSessionBranches"];
2099
+ put?: never;
2100
+ post?: never;
2101
+ delete?: never;
2102
+ options?: never;
2103
+ head?: never;
2104
+ patch?: never;
2105
+ trace?: never;
2106
+ };
1939
2107
  "/api/chat-sessions/{id}/close": {
1940
2108
  parameters: {
1941
2109
  query?: never;
@@ -2045,7 +2213,7 @@ export interface paths {
2045
2213
  };
2046
2214
  /**
2047
2215
  * ⚙️ Get the session diff
2048
- * @description Resolves the session's working diff (live branch comparison, falling back to a merged PR).
2216
+ * @description Resolves the session's working diff (live branch comparison, falling back to a merged PR). Pass pr_number to get a specific PR's diff instead.
2049
2217
  */
2050
2218
  get: operations["getChatSessionDiff"];
2051
2219
  put?: never;
@@ -2297,6 +2465,26 @@ export interface paths {
2297
2465
  patch?: never;
2298
2466
  trace?: never;
2299
2467
  };
2468
+ "/api/chat-sessions/{id}/snapshot": {
2469
+ parameters: {
2470
+ query?: never;
2471
+ header?: never;
2472
+ path?: never;
2473
+ cookie?: never;
2474
+ };
2475
+ /**
2476
+ * ⚙️ Get a session's status snapshot
2477
+ * @description Returns the session's current sandbox status, agent lifecycle state, and user messages in one atomic response — the status-shaped subset of session-state, without the entry log. Backs `empirical session status`.
2478
+ */
2479
+ get: operations["getChatSessionSnapshot"];
2480
+ put?: never;
2481
+ post?: never;
2482
+ delete?: never;
2483
+ options?: never;
2484
+ head?: never;
2485
+ patch?: never;
2486
+ trace?: never;
2487
+ };
2300
2488
  "/api/chat-sessions/{id}/threads/{thread_id}": {
2301
2489
  parameters: {
2302
2490
  query?: never;
@@ -2397,6 +2585,26 @@ export interface paths {
2397
2585
  patch?: never;
2398
2586
  trace?: never;
2399
2587
  };
2588
+ "/api/dodo/webhook": {
2589
+ parameters: {
2590
+ query?: never;
2591
+ header?: never;
2592
+ path?: never;
2593
+ cookie?: never;
2594
+ };
2595
+ get?: never;
2596
+ put?: never;
2597
+ /**
2598
+ * Dodo Payments webhook
2599
+ * @description Receives Dodo Payments events directly from Dodo (verified by the Standard Webhooks signature). payment.succeeded events carrying an invoice_id in metadata mirror the payment onto the invoice; everything else is acked and ignored.
2600
+ */
2601
+ post: operations["dodoPaymentsWebhook"];
2602
+ delete?: never;
2603
+ options?: never;
2604
+ head?: never;
2605
+ patch?: never;
2606
+ trace?: never;
2607
+ };
2400
2608
  "/api/environment-variables": {
2401
2609
  parameters: {
2402
2610
  query?: never;
@@ -2855,7 +3063,7 @@ export interface paths {
2855
3063
  get?: never;
2856
3064
  put?: never;
2857
3065
  /**
2858
- * ⚙️ Merge reporter installations
3066
+ * 🛡️ Merge reporter installations
2859
3067
  * @description Merges an unlinked reporter installation into an existing one.
2860
3068
  */
2861
3069
  post: operations["mergeReporterInstallations"];
@@ -3281,7 +3489,7 @@ export interface paths {
3281
3489
  patch?: never;
3282
3490
  trace?: never;
3283
3491
  };
3284
- "/api/invoices/reminders/upcoming": {
3492
+ "/api/invoices/org": {
3285
3493
  parameters: {
3286
3494
  query?: never;
3287
3495
  header?: never;
@@ -3289,10 +3497,10 @@ export interface paths {
3289
3497
  cookie?: never;
3290
3498
  };
3291
3499
  /**
3292
- * 🛡️ List upcoming invoice reminders
3293
- * @description Returns read-only invoice reminder candidates for the next window. This endpoint does not send emails or stamp reminder timestamps.
3500
+ * 🛡️ List the org's invoices
3501
+ * @description Returns all of the scoped project's org's sent invoices (paid and unpaid), newest first, with document availability flags.
3294
3502
  */
3295
- get: operations["listUpcomingInvoiceReminders"];
3503
+ get: operations["listOrgInvoices"];
3296
3504
  put?: never;
3297
3505
  post?: never;
3298
3506
  delete?: never;
@@ -3301,43 +3509,39 @@ export interface paths {
3301
3509
  patch?: never;
3302
3510
  trace?: never;
3303
3511
  };
3304
- "/api/jira/installations": {
3512
+ "/api/invoices/org/{id}/checkout-session": {
3305
3513
  parameters: {
3306
3514
  query?: never;
3307
3515
  header?: never;
3308
3516
  path?: never;
3309
3517
  cookie?: never;
3310
3518
  };
3311
- /**
3312
- * ⚙️ List Jira installations
3313
- * @description Lists Jira app installations for an organisation.
3314
- */
3315
- get: operations["listJiraInstallations"];
3519
+ get?: never;
3316
3520
  put?: never;
3317
3521
  /**
3318
- * ⚙️ Create a Jira installation
3319
- * @description Stores a Jira app installation and optionally registers its webhook.
3522
+ * 🛡️ Create a checkout session to pay an invoice
3523
+ * @description Creates a single-use Dodo Payments checkout session for the outstanding amount of one of the scoped project's org's sent invoices. Sessions are not stored; a new one is created per attempt. Payment confirmation arrives via the Dodo webhook, not this endpoint.
3320
3524
  */
3321
- post: operations["createJiraInstallation"];
3525
+ post: operations["createInvoiceCheckoutSession"];
3322
3526
  delete?: never;
3323
3527
  options?: never;
3324
3528
  head?: never;
3325
3529
  patch?: never;
3326
3530
  trace?: never;
3327
3531
  };
3328
- "/api/jira/installations/{id}/project-mappings": {
3532
+ "/api/invoices/org/{id}/pdf/download": {
3329
3533
  parameters: {
3330
3534
  query?: never;
3331
3535
  header?: never;
3332
3536
  path?: never;
3333
3537
  cookie?: never;
3334
3538
  };
3335
- get?: never;
3336
3539
  /**
3337
- * ⚙️ Update Jira project mappings
3338
- * @description Replaces the Jira-to-Empirical project mappings for an installation.
3540
+ * 🛡️ Download an invoice PDF
3541
+ * @description Streams the PDF of one of the scoped project's org's sent invoices.
3339
3542
  */
3340
- put: operations["updateJiraProjectMappings"];
3543
+ get: operations["downloadOrgInvoicePdf"];
3544
+ put?: never;
3341
3545
  post?: never;
3342
3546
  delete?: never;
3343
3547
  options?: never;
@@ -3345,47 +3549,47 @@ export interface paths {
3345
3549
  patch?: never;
3346
3550
  trace?: never;
3347
3551
  };
3348
- "/api/jira/installations/{id}/refresh-webhook": {
3552
+ "/api/invoices/org/{id}/tax-invoice/download": {
3349
3553
  parameters: {
3350
3554
  query?: never;
3351
3555
  header?: never;
3352
3556
  path?: never;
3353
3557
  cookie?: never;
3354
3558
  };
3355
- get?: never;
3356
- put?: never;
3357
3559
  /**
3358
- * ⚙️ Refresh a Jira webhook
3359
- * @description Re-registers the Jira webhook and extends its expiry for an installation.
3560
+ * 🛡️ Download the tax invoice for a paid invoice
3561
+ * @description Streams the payment processor's (Dodo, the merchant of record) tax invoice PDF for the invoice's most recent settling payment.
3360
3562
  */
3361
- post: operations["refreshJiraWebhook"];
3563
+ get: operations["downloadOrgInvoiceTaxInvoice"];
3564
+ put?: never;
3565
+ post?: never;
3362
3566
  delete?: never;
3363
3567
  options?: never;
3364
3568
  head?: never;
3365
3569
  patch?: never;
3366
3570
  trace?: never;
3367
3571
  };
3368
- "/api/jira/installations/{id}/revoke": {
3572
+ "/api/invoices/reminders/upcoming": {
3369
3573
  parameters: {
3370
3574
  query?: never;
3371
3575
  header?: never;
3372
3576
  path?: never;
3373
3577
  cookie?: never;
3374
3578
  };
3375
- get?: never;
3376
- put?: never;
3377
3579
  /**
3378
- * ⚙️ Revoke a Jira installation
3379
- * @description Deletes a Jira app installation.
3580
+ * 🛡️ List upcoming invoice reminders
3581
+ * @description Returns read-only invoice reminder candidates for the next window. This endpoint does not send emails or stamp reminder timestamps.
3380
3582
  */
3381
- post: operations["revokeJiraInstallation"];
3583
+ get: operations["listUpcomingInvoiceReminders"];
3584
+ put?: never;
3585
+ post?: never;
3382
3586
  delete?: never;
3383
3587
  options?: never;
3384
3588
  head?: never;
3385
3589
  patch?: never;
3386
3590
  trace?: never;
3387
3591
  };
3388
- "/api/jira/installations/{id}/validate": {
3592
+ "/api/jira/installations": {
3389
3593
  parameters: {
3390
3594
  query?: never;
3391
3595
  header?: never;
@@ -3393,19 +3597,23 @@ export interface paths {
3393
3597
  cookie?: never;
3394
3598
  };
3395
3599
  /**
3396
- * ⚙️ Validate a Jira installation
3397
- * @description Validates the stored Jira token against Atlassian and reports webhook status.
3600
+ * ⚙️ List Jira installations
3601
+ * @description Lists Jira app installations for an organisation.
3398
3602
  */
3399
- get: operations["validateJiraInstallation"];
3603
+ get: operations["listJiraInstallations"];
3400
3604
  put?: never;
3401
- post?: never;
3605
+ /**
3606
+ * ⚙️ Create a Jira installation
3607
+ * @description Stores a Jira app installation and optionally registers its webhook.
3608
+ */
3609
+ post: operations["createJiraInstallation"];
3402
3610
  delete?: never;
3403
3611
  options?: never;
3404
3612
  head?: never;
3405
3613
  patch?: never;
3406
3614
  trace?: never;
3407
3615
  };
3408
- "/api/jira/installations/{id}/webhook-expires-at": {
3616
+ "/api/jira/installations/{id}/project-mappings": {
3409
3617
  parameters: {
3410
3618
  query?: never;
3411
3619
  header?: never;
@@ -3413,11 +3621,91 @@ export interface paths {
3413
3621
  cookie?: never;
3414
3622
  };
3415
3623
  get?: never;
3416
- put?: never;
3417
- post?: never;
3418
- delete?: never;
3419
- options?: never;
3420
- head?: never;
3624
+ /**
3625
+ * ⚙️ Update Jira project mappings
3626
+ * @description Replaces the Jira-to-Empirical project mappings for an installation.
3627
+ */
3628
+ put: operations["updateJiraProjectMappings"];
3629
+ post?: never;
3630
+ delete?: never;
3631
+ options?: never;
3632
+ head?: never;
3633
+ patch?: never;
3634
+ trace?: never;
3635
+ };
3636
+ "/api/jira/installations/{id}/refresh-webhook": {
3637
+ parameters: {
3638
+ query?: never;
3639
+ header?: never;
3640
+ path?: never;
3641
+ cookie?: never;
3642
+ };
3643
+ get?: never;
3644
+ put?: never;
3645
+ /**
3646
+ * ⚙️ Refresh a Jira webhook
3647
+ * @description Re-registers the Jira webhook and extends its expiry for an installation.
3648
+ */
3649
+ post: operations["refreshJiraWebhook"];
3650
+ delete?: never;
3651
+ options?: never;
3652
+ head?: never;
3653
+ patch?: never;
3654
+ trace?: never;
3655
+ };
3656
+ "/api/jira/installations/{id}/revoke": {
3657
+ parameters: {
3658
+ query?: never;
3659
+ header?: never;
3660
+ path?: never;
3661
+ cookie?: never;
3662
+ };
3663
+ get?: never;
3664
+ put?: never;
3665
+ /**
3666
+ * ⚙️ Revoke a Jira installation
3667
+ * @description Deletes a Jira app installation.
3668
+ */
3669
+ post: operations["revokeJiraInstallation"];
3670
+ delete?: never;
3671
+ options?: never;
3672
+ head?: never;
3673
+ patch?: never;
3674
+ trace?: never;
3675
+ };
3676
+ "/api/jira/installations/{id}/validate": {
3677
+ parameters: {
3678
+ query?: never;
3679
+ header?: never;
3680
+ path?: never;
3681
+ cookie?: never;
3682
+ };
3683
+ /**
3684
+ * ⚙️ Validate a Jira installation
3685
+ * @description Validates the stored Jira token against Atlassian and reports webhook status.
3686
+ */
3687
+ get: operations["validateJiraInstallation"];
3688
+ put?: never;
3689
+ post?: never;
3690
+ delete?: never;
3691
+ options?: never;
3692
+ head?: never;
3693
+ patch?: never;
3694
+ trace?: never;
3695
+ };
3696
+ "/api/jira/installations/{id}/webhook-expires-at": {
3697
+ parameters: {
3698
+ query?: never;
3699
+ header?: never;
3700
+ path?: never;
3701
+ cookie?: never;
3702
+ };
3703
+ get?: never;
3704
+ put?: never;
3705
+ post?: never;
3706
+ delete?: never;
3707
+ options?: never;
3708
+ head?: never;
3421
3709
  /**
3422
3710
  * ⚙️ Update Jira webhook expiry
3423
3711
  * @description Sets the webhook expiry timestamp for an installation.
@@ -3641,7 +3929,7 @@ export interface paths {
3641
3929
  patch?: never;
3642
3930
  trace?: never;
3643
3931
  };
3644
- "/api/onboarding": {
3932
+ "/api/onboarding/complete": {
3645
3933
  parameters: {
3646
3934
  query?: never;
3647
3935
  header?: never;
@@ -3651,10 +3939,30 @@ export interface paths {
3651
3939
  get?: never;
3652
3940
  put?: never;
3653
3941
  /**
3654
- * Create onboarding organisation
3655
- * @description Creates an organisation for the authenticated user.
3942
+ * Create an org and/or a project
3943
+ * @description With `org_name`, creates a new organisation, adds the caller as a member, then creates the project. With `org_id`, creates the project in an organisation the caller already belongs to. Either way provisions the project's (empty) GitHub repo in the Empirical org.
3656
3944
  */
3657
- post: operations["createOnboardingOrg"];
3945
+ post: operations["completeOnboarding"];
3946
+ delete?: never;
3947
+ options?: never;
3948
+ head?: never;
3949
+ patch?: never;
3950
+ trace?: never;
3951
+ };
3952
+ "/api/onboarding/context": {
3953
+ parameters: {
3954
+ query?: never;
3955
+ header?: never;
3956
+ path?: never;
3957
+ cookie?: never;
3958
+ };
3959
+ /**
3960
+ * Get onboarding context
3961
+ * @description Returns the caller's pending invites and whether their email domain can be offered for auto-join.
3962
+ */
3963
+ get: operations["getOnboardingContext"];
3964
+ put?: never;
3965
+ post?: never;
3658
3966
  delete?: never;
3659
3967
  options?: never;
3660
3968
  head?: never;
@@ -3789,6 +4097,50 @@ export interface paths {
3789
4097
  patch: operations["updateOrg"];
3790
4098
  trace?: never;
3791
4099
  };
4100
+ "/api/orgs/{id}/invites": {
4101
+ parameters: {
4102
+ query?: never;
4103
+ header?: never;
4104
+ path?: never;
4105
+ cookie?: never;
4106
+ };
4107
+ /**
4108
+ * 🛡️ List organization invites
4109
+ * @description Lists invites for the organization, newest first. Restricted to org members and super admins.
4110
+ */
4111
+ get: operations["listOrgInvites"];
4112
+ put?: never;
4113
+ /**
4114
+ * 🛡️ Invite a user to an organization
4115
+ * @description Creates an email-bound invite: the recipient joins by signing in with the invited email address. Restricted to org members and super admins.
4116
+ */
4117
+ post: operations["createOrgInvite"];
4118
+ delete?: never;
4119
+ options?: never;
4120
+ head?: never;
4121
+ patch?: never;
4122
+ trace?: never;
4123
+ };
4124
+ "/api/orgs/{id}/invites/{invite_id}": {
4125
+ parameters: {
4126
+ query?: never;
4127
+ header?: never;
4128
+ path?: never;
4129
+ cookie?: never;
4130
+ };
4131
+ get?: never;
4132
+ put?: never;
4133
+ post?: never;
4134
+ /**
4135
+ * 🛡️ Revoke a pending invite
4136
+ * @description Revokes a pending invite so signing in with that email no longer joins the organization. Restricted to org members and super admins.
4137
+ */
4138
+ delete: operations["revokeOrgInvite"];
4139
+ options?: never;
4140
+ head?: never;
4141
+ patch?: never;
4142
+ trace?: never;
4143
+ };
3792
4144
  "/api/orgs/{id}/members": {
3793
4145
  parameters: {
3794
4146
  query?: never;
@@ -3809,6 +4161,26 @@ export interface paths {
3809
4161
  patch?: never;
3810
4162
  trace?: never;
3811
4163
  };
4164
+ "/api/orgs/{id}/members/{user_id}": {
4165
+ parameters: {
4166
+ query?: never;
4167
+ header?: never;
4168
+ path?: never;
4169
+ cookie?: never;
4170
+ };
4171
+ get?: never;
4172
+ put?: never;
4173
+ post?: never;
4174
+ /**
4175
+ * 🛡️ Remove a member from an organization
4176
+ * @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.
4177
+ */
4178
+ delete: operations["removeOrgMember"];
4179
+ options?: never;
4180
+ head?: never;
4181
+ patch?: never;
4182
+ trace?: never;
4183
+ };
3812
4184
  "/api/orgs/by-email-domain": {
3813
4185
  parameters: {
3814
4186
  query?: never;
@@ -3829,6 +4201,26 @@ export interface paths {
3829
4201
  patch?: never;
3830
4202
  trace?: never;
3831
4203
  };
4204
+ "/api/orgs/resolve-membership": {
4205
+ parameters: {
4206
+ query?: never;
4207
+ header?: never;
4208
+ path?: never;
4209
+ cookie?: never;
4210
+ };
4211
+ get?: never;
4212
+ put?: never;
4213
+ /**
4214
+ * ⚙️ Resolve org membership for a signed-in user
4215
+ * @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.
4216
+ */
4217
+ post: operations["resolveMembership"];
4218
+ delete?: never;
4219
+ options?: never;
4220
+ head?: never;
4221
+ patch?: never;
4222
+ trace?: never;
4223
+ };
3832
4224
  "/api/plan-assignments": {
3833
4225
  parameters: {
3834
4226
  query?: never;
@@ -3892,7 +4284,7 @@ export interface paths {
3892
4284
  put?: never;
3893
4285
  /**
3894
4286
  * ⚙️ Create a project
3895
- * @description Creates a new project (super-admin only).
4287
+ * @description Creates a new project in an organisation the caller belongs to (super admins can create in any org).
3896
4288
  */
3897
4289
  post: operations["createProject"];
3898
4290
  delete?: never;
@@ -4025,26 +4417,6 @@ export interface paths {
4025
4417
  patch?: never;
4026
4418
  trace?: never;
4027
4419
  };
4028
- "/api/projects/{id}/playwright-config": {
4029
- parameters: {
4030
- query?: never;
4031
- header?: never;
4032
- path?: never;
4033
- cookie?: never;
4034
- };
4035
- get?: never;
4036
- put?: never;
4037
- /**
4038
- * ⚙️ Update Playwright config
4039
- * @description Persists the scoped project's Playwright config from an agent tool result.
4040
- */
4041
- post: operations["updateProjectPlaywrightConfig"];
4042
- delete?: never;
4043
- options?: never;
4044
- head?: never;
4045
- patch?: never;
4046
- trace?: never;
4047
- };
4048
4420
  "/api/projects/{id}/repo-exists": {
4049
4421
  parameters: {
4050
4422
  query?: never;
@@ -4129,6 +4501,26 @@ export interface paths {
4129
4501
  patch?: never;
4130
4502
  trace?: never;
4131
4503
  };
4504
+ "/api/projects/{id}/usage": {
4505
+ parameters: {
4506
+ query?: never;
4507
+ header?: never;
4508
+ path?: never;
4509
+ cookie?: never;
4510
+ };
4511
+ /**
4512
+ * ⚙️ Get metered agent usage for a project
4513
+ * @description Agent spend recorded in the usage ledger for a time window, split by source, subagent, model, and workload purpose. Costs are raw provider costs with no markup. `occurred_at` is flush time rather than spend time, so windows shorter than a few minutes can attribute a running turn's spend to the following window.
4514
+ */
4515
+ get: operations["getProjectUsage"];
4516
+ put?: never;
4517
+ post?: never;
4518
+ delete?: never;
4519
+ options?: never;
4520
+ head?: never;
4521
+ patch?: never;
4522
+ trace?: never;
4523
+ };
4132
4524
  "/api/projects/branches/check": {
4133
4525
  parameters: {
4134
4526
  query?: never;
@@ -4313,6 +4705,50 @@ export interface paths {
4313
4705
  patch?: never;
4314
4706
  trace?: never;
4315
4707
  };
4708
+ "/api/recent-pages": {
4709
+ parameters: {
4710
+ query?: never;
4711
+ header?: never;
4712
+ path?: never;
4713
+ cookie?: never;
4714
+ };
4715
+ /**
4716
+ * List recently viewed pages
4717
+ * @description Returns the user's 10 most recently viewed accessible dashboard destinations from the last 14 days.
4718
+ */
4719
+ get: operations["listRecentPages"];
4720
+ /**
4721
+ * Record a recently viewed page
4722
+ * @description Records or refreshes one project/page destination with a sliding 14-day expiry.
4723
+ */
4724
+ put: operations["recordRecentPage"];
4725
+ post?: never;
4726
+ delete?: never;
4727
+ options?: never;
4728
+ head?: never;
4729
+ patch?: never;
4730
+ trace?: never;
4731
+ };
4732
+ "/api/reporter-types": {
4733
+ parameters: {
4734
+ query?: never;
4735
+ header?: never;
4736
+ path?: never;
4737
+ cookie?: never;
4738
+ };
4739
+ /**
4740
+ * ⚙️ 🧪 List reporter capabilities
4741
+ * @description Lists reporter types, supported destinations and events, and inbound-reply capabilities.
4742
+ */
4743
+ get: operations["listReporterTypes"];
4744
+ put?: never;
4745
+ post?: never;
4746
+ delete?: never;
4747
+ options?: never;
4748
+ head?: never;
4749
+ patch?: never;
4750
+ trace?: never;
4751
+ };
4316
4752
  "/api/requests": {
4317
4753
  parameters: {
4318
4754
  query?: never;
@@ -4642,6 +5078,26 @@ export interface paths {
4642
5078
  patch?: never;
4643
5079
  trace?: never;
4644
5080
  };
5081
+ "/api/users/me/memberships": {
5082
+ parameters: {
5083
+ query?: never;
5084
+ header?: never;
5085
+ path?: never;
5086
+ cookie?: never;
5087
+ };
5088
+ get?: never;
5089
+ put?: never;
5090
+ /**
5091
+ * ⚙️ Join organizations from pending invites
5092
+ * @description Creates org memberships for the current user by accepting every pending invite addressed to their verified email.
5093
+ */
5094
+ post: operations["createMyMemberships"];
5095
+ delete?: never;
5096
+ options?: never;
5097
+ head?: never;
5098
+ patch?: never;
5099
+ trace?: never;
5100
+ };
4645
5101
  "/api/users/slack-link": {
4646
5102
  parameters: {
4647
5103
  query?: never;
@@ -4807,6 +5263,63 @@ export interface components {
4807
5263
  /** @description Total number of pages. */
4808
5264
  total_pages: number;
4809
5265
  };
5266
+ OrgInvoiceListResponse: {
5267
+ /** @description Response payload. */
5268
+ data: {
5269
+ invoices: components["schemas"]["OrgInvoice"][];
5270
+ };
5271
+ };
5272
+ OrgInvoice: {
5273
+ /** @description Invoice ID. */
5274
+ id: number;
5275
+ /** @description Invoice number. */
5276
+ number: string;
5277
+ /** @description ISO 8601 issue date. */
5278
+ issue_date: string | null;
5279
+ /** @description ISO 8601 due date. */
5280
+ due_date: string | null;
5281
+ /** @description Invoice currency code. */
5282
+ currency: string;
5283
+ /** @description Invoice amount in minor units. */
5284
+ amount_in_cents: number;
5285
+ /** @description Payment status (`paid`, `outstanding`, …). */
5286
+ paid_status: string;
5287
+ /** @description ISO 8601 timestamp when fully paid. */
5288
+ paid_at: string | null;
5289
+ /** @description Whether the invoice PDF is available. */
5290
+ has_pdf: boolean;
5291
+ /** @description Whether a payment-processor tax invoice is available for download. */
5292
+ has_tax_invoice: boolean;
5293
+ /** @description Whether this invoice can be paid online (unpaid and in a supported currency). */
5294
+ payable: boolean;
5295
+ /** @description Whether an unpaid invoice is past its due date plus the reminder grace period. Always false for paid invoices. */
5296
+ past_reminder_date: boolean;
5297
+ };
5298
+ ErrorResponse: {
5299
+ /** @description Always null for error responses. */
5300
+ data: unknown;
5301
+ /** @description Error details. */
5302
+ error: {
5303
+ /** @description Human-readable error message. */
5304
+ message: string;
5305
+ };
5306
+ };
5307
+ InvoiceCheckoutSessionResponse: {
5308
+ /** @description Response payload. */
5309
+ data: {
5310
+ /** @description Single-use hosted checkout URL (expires in 24h). */
5311
+ checkout_url: string;
5312
+ /** @description Dodo checkout session ID. */
5313
+ session_id: string;
5314
+ };
5315
+ };
5316
+ CreateInvoiceCheckoutSessionRequest: {
5317
+ /**
5318
+ * Format: uri
5319
+ * @description Dashboard URL Dodo redirects to after payment (gets payment_id and status query params appended).
5320
+ */
5321
+ return_url: string;
5322
+ };
4810
5323
  InvoiceListResponse: {
4811
5324
  /** @description The page of invoices. */
4812
5325
  data: {
@@ -4932,15 +5445,6 @@ export interface components {
4932
5445
  invoice: components["schemas"]["InvoiceWithOrg"];
4933
5446
  };
4934
5447
  };
4935
- ErrorResponse: {
4936
- /** @description Always null for error responses. */
4937
- data: unknown;
4938
- /** @description Error details. */
4939
- error: {
4940
- /** @description Human-readable error message. */
4941
- message: string;
4942
- };
4943
- };
4944
5448
  InvoiceSimpleError: {
4945
5449
  /** @description Human-readable error message. */
4946
5450
  error: string;
@@ -5535,102 +6039,6 @@ export interface components {
5535
6039
  /** @description Error detail when ingestion fails. */
5536
6040
  error?: unknown;
5537
6041
  };
5538
- AdminRequestListResponse: {
5539
- /** @description The page of requests across all projects. */
5540
- data: {
5541
- requests: components["schemas"]["AdminRequest"][];
5542
- };
5543
- pagination: components["schemas"]["Pagination"];
5544
- };
5545
- AdminRequest: {
5546
- /** @description Request ID. */
5547
- id: number;
5548
- /** @description ISO 8601 creation timestamp. */
5549
- created_at: string;
5550
- /** @description Supabase user ID of the creator, if known. */
5551
- created_by: string | null;
5552
- /** @description ISO 8601 last-update timestamp. */
5553
- updated_at: string;
5554
- /** @description Project the request belongs to. */
5555
- project_id: number;
5556
- /** @description Origin of the request (e.g. `linear`). */
5557
- source: string;
5558
- /** @description External identifier for the request in its source system. */
5559
- source_identifier: string;
5560
- /** @description Request title. */
5561
- title: string;
5562
- /** @description Request description. */
5563
- description: string;
5564
- /**
5565
- * @description Request status.
5566
- * @enum {string}
5567
- */
5568
- status: "draft" | "open" | "in-review" | "closed" | "resolved";
5569
- /** @description Resolved details for the creating user, if available. */
5570
- created_by_user_detail?: {
5571
- /** @description Supabase user ID. */
5572
- id: string;
5573
- /** @description User email. */
5574
- email: string;
5575
- /** @description Display name. */
5576
- name: string;
5577
- /** @description Avatar URL. */
5578
- picture: string;
5579
- } | null;
5580
- /** @description The request's project, or null if not found/active. */
5581
- project: {
5582
- /** @description Project ID. */
5583
- id: number;
5584
- /** @description Owning organisation ID. */
5585
- org_id: number;
5586
- /** @description Project name. */
5587
- name: string;
5588
- /** @description URL slug. */
5589
- slug: string;
5590
- /** @description Repository name. */
5591
- repo_name: string;
5592
- /** @description Repository owner. */
5593
- repo_owner: string;
5594
- /** @description Repository host. */
5595
- repo_host: string;
5596
- /** @description Default branch. */
5597
- default_branch: string;
5598
- /** @description Whether branching is enabled. */
5599
- has_branching_enabled: boolean | null;
5600
- /** @description Branches that are never garbage-collected. */
5601
- persistent_branches: string[];
5602
- /** @description Stored Playwright config, if any. */
5603
- playwright_config?: unknown;
5604
- /** @description ISO 8601 timestamp config was last updated. */
5605
- playwright_config_updated_at: string | null;
5606
- /** @description Whether email reporting is enabled. */
5607
- has_email_reporting: boolean | null;
5608
- /** @description Project owners. */
5609
- owners: string[];
5610
- /** @description Concurrency limit policy. */
5611
- test_run_concurrency_limit: string;
5612
- /** @description Concurrency behavior policy. */
5613
- test_run_concurrency_behavior: string;
5614
- /** @description Test run region. */
5615
- test_run_region: string;
5616
- /** @description Configured shard count, if any. */
5617
- test_run_shards: number | null;
5618
- /** @description Project icon URL. */
5619
- profile_icon_url: string | null;
5620
- /** @description Raw owners.yaml contents. */
5621
- owners_yaml_raw: string | null;
5622
- /** @description Whether an environments.yaml is present. */
5623
- has_environments_yaml: boolean | null;
5624
- /** @description Whether the project is active. */
5625
- is_active: boolean;
5626
- /** @description Commit SHA of the last test-cases sync. */
5627
- last_synced_test_cases_commit_sha: string | null;
5628
- /** @description Last test-cases sync error, if any. */
5629
- test_cases_sync_error: string | null;
5630
- /** @description ISO 8601 timestamp of the last sync error. */
5631
- test_cases_sync_error_at: string | null;
5632
- } | null;
5633
- };
5634
6042
  CreateProjectResponse: {
5635
6043
  /** @description Response payload. */
5636
6044
  data: {
@@ -5647,6 +6055,8 @@ export interface components {
5647
6055
  /** @description Project slug. */
5648
6056
  slug: string;
5649
6057
  };
6058
+ /** @description Whether the backing GitHub repo was created. When false the project exists but repo provisioning failed and needs a retry. */
6059
+ repo_created: boolean;
5650
6060
  };
5651
6061
  };
5652
6062
  SimpleErrorResponse: {
@@ -5718,10 +6128,6 @@ export interface components {
5718
6128
  has_branching_enabled: boolean | null;
5719
6129
  /** @description Branches kept across runs. */
5720
6130
  persistent_branches: string[];
5721
- /** @description Stored Playwright configuration (JSON). */
5722
- playwright_config?: unknown;
5723
- /** @description ISO 8601 timestamp the config was last updated. */
5724
- playwright_config_updated_at: string | null;
5725
6131
  /** @description Whether email reporting is enabled. */
5726
6132
  has_email_reporting: boolean | null;
5727
6133
  /** @description Project owner emails. */
@@ -5784,10 +6190,6 @@ export interface components {
5784
6190
  has_branching_enabled: boolean | null;
5785
6191
  /** @description Branches kept across runs. */
5786
6192
  persistent_branches: string[];
5787
- /** @description Stored Playwright configuration (JSON). */
5788
- playwright_config?: unknown;
5789
- /** @description ISO 8601 timestamp the config was last updated. */
5790
- playwright_config_updated_at: string | null;
5791
6193
  /** @description Whether email reporting is enabled. */
5792
6194
  has_email_reporting: boolean | null;
5793
6195
  /** @description Project owner emails. */
@@ -5876,16 +6278,9 @@ export interface components {
5876
6278
  };
5877
6279
  };
5878
6280
  MergeRequestsResponse: {
5879
- /** @description Always true. */
5880
- success: boolean;
5881
6281
  /** @description The page of merge requests. */
5882
6282
  data: components["schemas"]["MergeRequest"][];
5883
- /** @description Total merge requests. */
5884
- total: number;
5885
- /** @description Page size requested. */
5886
- limit: number;
5887
- /** @description Offset requested. */
5888
- offset: number;
6283
+ pagination: components["schemas"]["Pagination"];
5889
6284
  };
5890
6285
  MergeRequest: {
5891
6286
  /** @description Merge request ID. */
@@ -5994,19 +6389,6 @@ export interface components {
5994
6389
  exists: boolean;
5995
6390
  };
5996
6391
  };
5997
- UpdatePlaywrightConfigResponse: {
5998
- /** @description Always true. */
5999
- success: boolean;
6000
- /** @description Minimal project reference. */
6001
- project: {
6002
- /** @description Project ID. */
6003
- id?: number;
6004
- /** @description ISO 8601 update timestamp. */
6005
- playwright_config_updated_at?: string | null;
6006
- };
6007
- /** @description Confirmation message. */
6008
- message: string;
6009
- };
6010
6392
  TestCasesSyncTriggeredResponse: {
6011
6393
  /** @description Response payload. */
6012
6394
  data: {
@@ -6016,6 +6398,55 @@ export interface components {
6016
6398
  commit_sha: string;
6017
6399
  };
6018
6400
  };
6401
+ ProjectUsageResponse: {
6402
+ /** @description Response payload. */
6403
+ data: {
6404
+ project_id: number;
6405
+ /** @description Window start actually used (ISO 8601, UTC). */
6406
+ start_date: string;
6407
+ /** @description Window end actually used (ISO 8601, UTC). */
6408
+ end_date: string;
6409
+ total: components["schemas"]["ProjectUsageTotal"];
6410
+ /** @description One row per (source, agent, model, purpose), highest cost first. */
6411
+ breakdown: components["schemas"]["ProjectUsageBreakdownRow"][];
6412
+ };
6413
+ };
6414
+ ProjectUsageTotal: {
6415
+ /** @description Raw provider cost, no markup. */
6416
+ cost_usd: number;
6417
+ /** @description Uncached input tokens (excludes cache reads). */
6418
+ tokens_in: number;
6419
+ /** @description Output tokens. */
6420
+ tokens_out: number;
6421
+ /** @description Cache-read input tokens. */
6422
+ cache_read: number;
6423
+ /** @description Cache-write input tokens. */
6424
+ cache_write: number;
6425
+ /** @description Distinct chat sessions contributing to this row. */
6426
+ sessions: number;
6427
+ };
6428
+ ProjectUsageBreakdownRow: {
6429
+ /** @description "main" or "subagent". */
6430
+ source: string;
6431
+ /** @description Subagent name; null for main-agent spend. */
6432
+ agent: string | null;
6433
+ /** @description Model, verbatim (incl. "@default" suffixes). */
6434
+ model: string | null;
6435
+ /** @description Workload class of the originating session. */
6436
+ purpose: string | null;
6437
+ /** @description Raw provider cost, no markup. */
6438
+ cost_usd: number;
6439
+ /** @description Uncached input tokens (excludes cache reads). */
6440
+ tokens_in: number;
6441
+ /** @description Output tokens. */
6442
+ tokens_out: number;
6443
+ /** @description Cache-read input tokens. */
6444
+ cache_read: number;
6445
+ /** @description Cache-write input tokens. */
6446
+ cache_write: number;
6447
+ /** @description Distinct chat sessions contributing to this row. */
6448
+ sessions: number;
6449
+ };
6019
6450
  ProjectListResponse: {
6020
6451
  /** @description Response payload. */
6021
6452
  data: {
@@ -6050,10 +6481,6 @@ export interface components {
6050
6481
  has_branching_enabled: boolean | null;
6051
6482
  /** @description Branches kept across runs. */
6052
6483
  persistent_branches: string[];
6053
- /** @description Stored Playwright configuration (JSON). */
6054
- playwright_config?: unknown;
6055
- /** @description ISO 8601 timestamp the config was last updated. */
6056
- playwright_config_updated_at: string | null;
6057
6484
  /** @description Whether email reporting is enabled. */
6058
6485
  has_email_reporting: boolean | null;
6059
6486
  /** @description Project owner emails. */
@@ -6261,6 +6688,35 @@ export interface components {
6261
6688
  /** @description Repository name at the target owner. */
6262
6689
  target_repo_name: string;
6263
6690
  };
6691
+ RecentPagesResponse: {
6692
+ /** @description Response payload. */
6693
+ data: {
6694
+ recent_pages: components["schemas"]["RecentPage"][];
6695
+ };
6696
+ };
6697
+ RecentPage: {
6698
+ page_id: string;
6699
+ project_id: number | null;
6700
+ path: string | null;
6701
+ title: string | null;
6702
+ viewed_at: string;
6703
+ };
6704
+ RecordRecentPageResponse: {
6705
+ /** @description Response payload. */
6706
+ data: {
6707
+ recent_page: components["schemas"]["RecentPage"];
6708
+ };
6709
+ };
6710
+ RecordRecentPageRequest: {
6711
+ /** @description Stable dashboard page ID. */
6712
+ page_id: string;
6713
+ /** @description Project for a project-scoped page; null for global pages. */
6714
+ project_id?: number | null;
6715
+ /** @description Exact project-relative pathname, or absolute pathname for a global page. */
6716
+ path?: string;
6717
+ /** @description Current document title for this exact destination. */
6718
+ title?: string;
6719
+ };
6264
6720
  OrgListResponse: {
6265
6721
  /** @description Response payload. */
6266
6722
  data: {
@@ -6323,10 +6779,6 @@ export interface components {
6323
6779
  has_branching_enabled: boolean | null;
6324
6780
  /** @description Branches kept warm/persistent. */
6325
6781
  persistent_branches: string[];
6326
- /** @description Stored Playwright config JSON, or null. */
6327
- playwright_config?: unknown;
6328
- /** @description When playwright_config was last updated (ISO 8601). */
6329
- playwright_config_updated_at: string | null;
6330
6782
  /** @description Whether email reporting is enabled. */
6331
6783
  has_email_reporting: boolean | null;
6332
6784
  /** @description Project owner identifiers. */
@@ -6374,6 +6826,22 @@ export interface components {
6374
6826
  }[];
6375
6827
  };
6376
6828
  };
6829
+ ResolveMembershipResponse: {
6830
+ /** @description Response payload. */
6831
+ data: {
6832
+ /** @description All org ids the user now belongs to via invites and domain match. */
6833
+ org_ids: number[];
6834
+ };
6835
+ };
6836
+ ResolveMembershipRequest: {
6837
+ /**
6838
+ * Format: email
6839
+ * @description Verified email of the user.
6840
+ */
6841
+ email: string;
6842
+ /** @description Supabase user id to grant membership to. */
6843
+ user_id: string;
6844
+ };
6377
6845
  OrgUpdateResponse: {
6378
6846
  /** @description Response payload. */
6379
6847
  data: {
@@ -6453,25 +6921,113 @@ export interface components {
6453
6921
  /** @description Last sign-in timestamp (ISO 8601). */
6454
6922
  last_sign_in_at: string | null;
6455
6923
  };
6456
- OnboardingOrgResponse: {
6924
+ OrgInviteResponse: {
6925
+ /** @description Response payload. */
6926
+ data: {
6927
+ invite: components["schemas"]["OrgInvite"];
6928
+ /** @description Whether the invite email was delivered. */
6929
+ email_sent: boolean;
6930
+ };
6931
+ };
6932
+ OrgInvite: {
6933
+ /** @description Invite ID. */
6934
+ id: number;
6935
+ /** @description Organization ID. */
6936
+ org_id: number;
6937
+ /** @description Invited email (lowercased). */
6938
+ email: string;
6939
+ /** @description User id of the inviting member. */
6940
+ invited_by: string;
6941
+ /**
6942
+ * @description Invite lifecycle status.
6943
+ * @enum {string}
6944
+ */
6945
+ status: "pending" | "accepted" | "revoked";
6946
+ /** @description Creation timestamp (ISO 8601). */
6947
+ created_at: string;
6948
+ /** @description Acceptance timestamp (ISO 8601), if accepted. */
6949
+ accepted_at: string | null;
6950
+ };
6951
+ CreateOrgInviteRequest: {
6952
+ /**
6953
+ * Format: email
6954
+ * @description Email address to invite.
6955
+ */
6956
+ email: string;
6957
+ };
6958
+ OrgInviteListResponse: {
6959
+ /** @description Response payload. */
6960
+ data: {
6961
+ invites: components["schemas"]["OrgInvite"][];
6962
+ };
6963
+ };
6964
+ OrgInviteRevokeResponse: {
6965
+ /** @description Response payload. */
6966
+ data: {
6967
+ invite: components["schemas"]["OrgInvite"];
6968
+ };
6969
+ };
6970
+ RemoveMemberResponse: {
6971
+ /** @description Response payload. */
6972
+ data: {
6973
+ removed: boolean;
6974
+ };
6975
+ };
6976
+ OnboardingContextResponse: {
6977
+ /** @description Response payload. */
6978
+ data: {
6979
+ invites: {
6980
+ /** @description Invite ID. */
6981
+ id: number;
6982
+ /** @description Organisation ID. */
6983
+ org_id: number;
6984
+ /** @description Organisation name. */
6985
+ org_name: string;
6986
+ }[];
6987
+ /** @description The caller's verified email. */
6988
+ email: string;
6989
+ /** @description Domain of the caller's email (may be empty). */
6990
+ email_domain: string;
6991
+ /** @description Whether the caller's email domain can be offered for auto-join (false for public providers like gmail.com). */
6992
+ domain_join_available: boolean;
6993
+ };
6994
+ };
6995
+ OnboardingCompleteResponse: {
6457
6996
  /** @description Response payload. */
6458
6997
  data: {
6459
- /** @description The created organisation. */
6460
6998
  org: {
6461
6999
  /** @description Organisation ID. */
6462
7000
  id: number;
6463
7001
  /** @description Organisation name. */
6464
7002
  name: string;
6465
- /** @description Email domains associated with the org. */
7003
+ /** @description Auto-join email domains on the org. */
6466
7004
  email_domains: string[];
6467
7005
  };
7006
+ project: {
7007
+ /** @description Project ID. */
7008
+ id: number;
7009
+ /** @description Project name. */
7010
+ name: string;
7011
+ /** @description Project slug. */
7012
+ slug: string;
7013
+ /** @description Backing repository name. */
7014
+ repo_name: string;
7015
+ };
7016
+ /** @description Whether the GitHub repo was created. When false the project exists but repo provisioning failed and needs a retry. */
7017
+ repo_created: boolean;
6468
7018
  };
6469
7019
  };
6470
- CreateOnboardingOrgRequest: {
6471
- /** @description Name of the organisation to create. */
6472
- org_name: string;
6473
- /** @description Comma-separated list of email domains (e.g. `example.com, @other.com`). */
6474
- email_domains: string;
7020
+ OnboardingCompleteRequest: {
7021
+ /** @description Existing organisation to add the project to. */
7022
+ org_id?: number;
7023
+ /** @description Name of a new organisation to create. */
7024
+ org_name?: string;
7025
+ /** @description When creating a new org, let anyone with the caller's (non-public) email domain auto-join it on sign-in. The domain is derived server-side from the caller's verified email; it is never accepted as input. Ignored when `org_id` is given. */
7026
+ allow_domain_join?: boolean;
7027
+ /** @description Display name of the project. */
7028
+ project_name: string;
7029
+ /** @description URL slug for the project. */
7030
+ project_slug: string;
6475
7031
  };
6476
7032
  SnoozeListResponse: {
6477
7033
  /** @description The page of snoozes. */
@@ -6607,10 +7163,6 @@ export interface components {
6607
7163
  branch_name: string;
6608
7164
  /** @description Branch this session forks. */
6609
7165
  base_branch: string;
6610
- /** @description Associated PR number, if opened. */
6611
- pr_number: number | null;
6612
- /** @description PR status. */
6613
- pr_status: string;
6614
7166
  /** @description Session mode (e.g. `chat`). */
6615
7167
  mode: string;
6616
7168
  /** @description Source surface (e.g. `request`). */
@@ -6722,10 +7274,6 @@ export interface components {
6722
7274
  branch_name: string;
6723
7275
  /** @description Branch this session forks. */
6724
7276
  base_branch: string;
6725
- /** @description Associated PR number, if opened. */
6726
- pr_number: number | null;
6727
- /** @description PR status. */
6728
- pr_status: string;
6729
7277
  /** @description Session mode (e.g. `chat`). */
6730
7278
  mode: string;
6731
7279
  /** @description Source surface (e.g. `request`). */
@@ -6785,10 +7333,6 @@ export interface components {
6785
7333
  branch_name: string;
6786
7334
  /** @description Branch this session forks. */
6787
7335
  base_branch: string;
6788
- /** @description Associated PR number, if opened. */
6789
- pr_number: number | null;
6790
- /** @description PR status. */
6791
- pr_status: string;
6792
7336
  /** @description Session mode (e.g. `chat`). */
6793
7337
  mode: string;
6794
7338
  /** @description Source surface (e.g. `request`). */
@@ -6814,6 +7358,30 @@ export interface components {
6814
7358
  /** @description Outboxed first message awaiting delivery. */
6815
7359
  pending_first_message?: unknown;
6816
7360
  };
7361
+ ReporterTypesResponse: {
7362
+ /** @description Response payload. */
7363
+ data: {
7364
+ reporter_types: {
7365
+ /** @enum {string} */
7366
+ id: "slack_run_status" | "slack_creator_dm" | "email_run_report" | "github_check" | "github_pr_comment";
7367
+ display_name: string;
7368
+ /** @enum {string} */
7369
+ audience: "broadcast" | "initiator";
7370
+ recipient: {
7371
+ /** @enum {string} */
7372
+ mode: "destinations" | "selector";
7373
+ supported_destination_kinds: ("slack_channel" | "slack_user" | "email" | "github_repository")[];
7374
+ supported_selectors: "run_creator"[];
7375
+ };
7376
+ supported_events: ("run_queued" | "run_started" | "run_progress" | "run_ended" | "run_cancelled" | "run_interrupted" | "run_error")[];
7377
+ inbound_replies: {
7378
+ /** @enum {string} */
7379
+ availability: "unavailable" | "planned" | "available";
7380
+ supported_policies: ("disabled" | "bot_mention" | "configured_recipients" | "org_members")[];
7381
+ };
7382
+ }[];
7383
+ };
7384
+ };
6817
7385
  SandboxSnapshotListResponse: {
6818
7386
  /** @description Response payload. */
6819
7387
  data: {
@@ -7245,10 +7813,6 @@ export interface components {
7245
7813
  branch_name: string;
7246
7814
  /** @description Branch the working branch was created from. */
7247
7815
  base_branch: string;
7248
- /** @description Pull request number, if one has been opened. */
7249
- pr_number: number | null;
7250
- /** @description Pull request status. */
7251
- pr_status: string;
7252
7816
  /** @description Session mode (e.g. `chat`). */
7253
7817
  mode: string;
7254
7818
  /** @description Origin of the session (`agent-workflow` here). */
@@ -7617,6 +8181,10 @@ export interface components {
7617
8181
  /** @description HTTP status returned by Slack, if any. */
7618
8182
  upstream_status?: number;
7619
8183
  };
8184
+ SlackProxyError: {
8185
+ /** @description Error message. */
8186
+ error: string;
8187
+ };
7620
8188
  ChatSessionUsersResponse: {
7621
8189
  /** @description Response payload. */
7622
8190
  data: components["schemas"]["ChatSessionUserDetail"][];
@@ -7660,7 +8228,7 @@ export interface components {
7660
8228
  };
7661
8229
  ChatSessionListResponse: {
7662
8230
  /** @description The page of chat sessions. */
7663
- data: components["schemas"]["ChatSessionWithUser"][];
8231
+ data: components["schemas"]["ChatSessionListItem"][];
7664
8232
  /** @description Pagination + resolved filter state. */
7665
8233
  pagination: {
7666
8234
  /** @description Current page. */
@@ -7680,7 +8248,7 @@ export interface components {
7680
8248
  };
7681
8249
  };
7682
8250
  };
7683
- ChatSessionWithUser: {
8251
+ ChatSessionListItem: {
7684
8252
  /** @description Chat session ID. */
7685
8253
  id: number;
7686
8254
  /** @description Session title. */
@@ -7695,12 +8263,6 @@ export interface components {
7695
8263
  project_id: number;
7696
8264
  /** @description Working branch name. */
7697
8265
  branch_name: string;
7698
- /** @description Base branch name. */
7699
- base_branch: string;
7700
- /** @description Pull request number, if any. */
7701
- pr_number: number | null;
7702
- /** @description Pull request status. */
7703
- pr_status: string;
7704
8266
  /** @description Session mode (e.g. chat). */
7705
8267
  mode: string;
7706
8268
  /** @description Origin of the session. */
@@ -7709,10 +8271,6 @@ export interface components {
7709
8271
  source_identifier: string;
7710
8272
  /** @description Requested model. */
7711
8273
  model: string | null;
7712
- /** @description Opaque agent chat state. */
7713
- chat_state?: unknown;
7714
- /** @description Tests impacted by this session. */
7715
- impacted_tests?: unknown;
7716
8274
  /** @description Whether the agent is awaiting user input. */
7717
8275
  ask_user_for_input: boolean | null;
7718
8276
  /** @description Langfuse trace ID. */
@@ -7723,8 +8281,6 @@ export interface components {
7723
8281
  feature_flags: string[];
7724
8282
  /** @description Bound environment ID. */
7725
8283
  environment_id: number | null;
7726
- /** @description Durable outbox row for the first message. */
7727
- pending_first_message?: unknown;
7728
8284
  /** @description Resolved Supabase details for the creator. */
7729
8285
  created_by_user_detail?: {
7730
8286
  /** @description Supabase user ID. */
@@ -7736,6 +8292,16 @@ export interface components {
7736
8292
  /** @description Avatar URL. */
7737
8293
  picture: string;
7738
8294
  } | null;
8295
+ /** @description Number of the session's most recently updated PR, if any. */
8296
+ pr_number: number | null;
8297
+ /** @description Status of the session's most recently updated PR ('unopened' when it has none). */
8298
+ pr_status: string;
8299
+ /** @description Name of the owning project. */
8300
+ project_name: string | null;
8301
+ /** @description Repository name of the owning project. */
8302
+ project_repo_name: string | null;
8303
+ /** @description Repository owner of the owning project. */
8304
+ project_repo_owner: string | null;
7739
8305
  };
7740
8306
  ChatSessionCreateResponse: {
7741
8307
  /** @description Response payload. */
@@ -7760,10 +8326,6 @@ export interface components {
7760
8326
  branch_name: string;
7761
8327
  /** @description Base branch name. */
7762
8328
  base_branch: string;
7763
- /** @description Pull request number, if any. */
7764
- pr_number: number | null;
7765
- /** @description Pull request status. */
7766
- pr_status: string;
7767
8329
  /** @description Session mode (e.g. chat). */
7768
8330
  mode: string;
7769
8331
  /** @description Origin of the session. */
@@ -7871,6 +8433,59 @@ export interface components {
7871
8433
  chat_session: components["schemas"]["ChatSessionWithUser"];
7872
8434
  };
7873
8435
  };
8436
+ ChatSessionWithUser: {
8437
+ /** @description Chat session ID. */
8438
+ id: number;
8439
+ /** @description Session title. */
8440
+ title: string | null;
8441
+ /** @description Creator user ID. */
8442
+ created_by: string | null;
8443
+ /** @description Creation timestamp (ISO). */
8444
+ created_at: string;
8445
+ /** @description Last update timestamp (ISO). */
8446
+ updated_at: string;
8447
+ /** @description Owning project ID. */
8448
+ project_id: number;
8449
+ /** @description Working branch name. */
8450
+ branch_name: string;
8451
+ /** @description Base branch name. */
8452
+ base_branch: string;
8453
+ /** @description Session mode (e.g. chat). */
8454
+ mode: string;
8455
+ /** @description Origin of the session. */
8456
+ source: string;
8457
+ /** @description Source-specific identifier. */
8458
+ source_identifier: string;
8459
+ /** @description Requested model. */
8460
+ model: string | null;
8461
+ /** @description Opaque agent chat state. */
8462
+ chat_state?: unknown;
8463
+ /** @description Tests impacted by this session. */
8464
+ impacted_tests?: unknown;
8465
+ /** @description Whether the agent is awaiting user input. */
8466
+ ask_user_for_input: boolean | null;
8467
+ /** @description Langfuse trace ID. */
8468
+ langfuse_trace_id: string | null;
8469
+ /** @description Whether the session is closed. */
8470
+ is_closed: boolean | null;
8471
+ /** @description Feature flags enabled for the session. */
8472
+ feature_flags: string[];
8473
+ /** @description Bound environment ID. */
8474
+ environment_id: number | null;
8475
+ /** @description Durable outbox row for the first message. */
8476
+ pending_first_message?: unknown;
8477
+ /** @description Resolved Supabase details for the creator. */
8478
+ created_by_user_detail?: {
8479
+ /** @description Supabase user ID. */
8480
+ id: string;
8481
+ /** @description User email. */
8482
+ email: string;
8483
+ /** @description Display name. */
8484
+ name: string;
8485
+ /** @description Avatar URL. */
8486
+ picture: string;
8487
+ } | null;
8488
+ };
7874
8489
  ChatSessionPatchResponse: {
7875
8490
  /** @description Response payload. */
7876
8491
  data: {
@@ -7943,6 +8558,45 @@ export interface components {
7943
8558
  picture: string;
7944
8559
  } | null;
7945
8560
  };
8561
+ ChatSessionBranchesResponse: {
8562
+ /** @description Response payload. */
8563
+ data: components["schemas"]["ChatSessionBranch"][];
8564
+ };
8565
+ ChatSessionBranch: {
8566
+ /** @description Branch name. */
8567
+ branch_name: string;
8568
+ /** @description Repository host. */
8569
+ repo_host: string;
8570
+ /** @description Repository owner. */
8571
+ repo_owner: string;
8572
+ /** @description Repository name. */
8573
+ repo_name: string;
8574
+ /** @description When the branch was registered (ISO). */
8575
+ created_at: string;
8576
+ /** @description Pull requests opened from this branch, oldest first. Empty when no PR exists yet. */
8577
+ pull_requests: components["schemas"]["ChatSessionBranchPullRequest"][];
8578
+ };
8579
+ ChatSessionBranchPullRequest: {
8580
+ /** @description Pull request number. */
8581
+ number: number;
8582
+ /**
8583
+ * @description Current pull request status.
8584
+ * @enum {string}
8585
+ */
8586
+ status: "unopened" | "open" | "opened" | "closed" | "merged";
8587
+ /** @description Pull request URL. */
8588
+ url: string;
8589
+ /** @description Branch the pull request merges into. */
8590
+ base_branch: string;
8591
+ /** @description Merge timestamp (ISO), null if not merged. */
8592
+ merged_at: string | null;
8593
+ /** @description When the head branch was deleted (ISO), null while it exists. */
8594
+ head_branch_deleted_at: string | null;
8595
+ /** @description Creation timestamp (ISO). */
8596
+ created_at: string;
8597
+ /** @description Last update timestamp (ISO). */
8598
+ updated_at: string;
8599
+ };
7946
8600
  ChatSessionCommitDiffResponse: {
7947
8601
  /** @description Response payload. */
7948
8602
  data: {
@@ -8038,6 +8692,17 @@ export interface components {
8038
8692
  /** @description Current sandbox state, or null when none. */
8039
8693
  sandbox?: unknown;
8040
8694
  };
8695
+ ChatSessionSnapshotResponse: {
8696
+ data: components["schemas"]["ChatSessionSnapshot"];
8697
+ };
8698
+ ChatSessionSnapshot: {
8699
+ /** @description Current sandbox status event. */
8700
+ sandbox?: unknown;
8701
+ /** @description Agent lifecycle state (active run ids, is_working). */
8702
+ lifecycle?: unknown;
8703
+ /** @description All user messages for the session. */
8704
+ user_messages: unknown[];
8705
+ };
8041
8706
  ChatSessionCloseResponse: {
8042
8707
  /** @description Response payload. */
8043
8708
  data: {
@@ -8126,6 +8791,21 @@ export interface components {
8126
8791
  /** @description Error message, or null on success. */
8127
8792
  error: string | null;
8128
8793
  };
8794
+ ChatSessionAlarms: {
8795
+ /** @description Upcoming self-scheduled wake-ups (set_alarm), soonest first. */
8796
+ alarms: {
8797
+ /** @description Opaque id of the scheduled alarm. */
8798
+ alarm_id: string;
8799
+ /** @description The scheduled wake-up time, as an ISO 8601 timestamp. */
8800
+ wake_at: string;
8801
+ /** @description The note the agent will receive back when the alarm fires. */
8802
+ message: string;
8803
+ }[];
8804
+ };
8805
+ ChatSessionAlarmsError: {
8806
+ /** @description Human-readable error message. */
8807
+ error: string;
8808
+ };
8129
8809
  GithubCommitDiffResponse: {
8130
8810
  /** @description Response payload. */
8131
8811
  data: {
@@ -8904,6 +9584,10 @@ export interface components {
8904
9584
  /** @description Distinct tags across the project's test cases. */
8905
9585
  tags: string[];
8906
9586
  };
9587
+ TestCasePlaywrightProjectsResponse: {
9588
+ /** @description Distinct Playwright projects across the project's synced test cases. */
9589
+ playwright_projects: string[];
9590
+ };
8907
9591
  TestCaseListResponse: {
8908
9592
  /** @description Test cases plus the project's sync status. */
8909
9593
  data: {
@@ -9703,6 +10387,12 @@ export interface components {
9703
10387
  /** @description Log line text. */
9704
10388
  message: string;
9705
10389
  };
10390
+ TestRunTriageSessionResponse: {
10391
+ /** @description Response payload. */
10392
+ data: {
10393
+ chat_session: components["schemas"]["ChatSession"];
10394
+ };
10395
+ };
9706
10396
  CancelTestRunResponse: {
9707
10397
  /** @description Confirmation message indicating the test run was cancelled. */
9708
10398
  message: string;
@@ -10425,6 +11115,7 @@ export interface components {
10425
11115
  diagnosis: string | null;
10426
11116
  recommendation: string | null;
10427
11117
  fingerprint: components["schemas"]["Fingerprint"];
11118
+ matcher: components["schemas"]["FailureGroupMatcher"];
10428
11119
  resolved_at: string | null;
10429
11120
  first_seen_at: string;
10430
11121
  last_seen_at: string;
@@ -10446,6 +11137,17 @@ export interface components {
10446
11137
  };
10447
11138
  }[];
10448
11139
  } | null;
11140
+ FailureGroupMatcher: {
11141
+ /** @description Plain-JS async function source: `async ({ testRun, testCase, traceUtils }) => boolean`. */
11142
+ source: string;
11143
+ /** @description Human-readable summary of what the matcher matches and why; re-articulated on every edit. */
11144
+ description: string;
11145
+ /**
11146
+ * @description Input-contract version the source was written against.
11147
+ * @default 1
11148
+ */
11149
+ contract_version: number;
11150
+ } | null;
10449
11151
  MembersByTestRunResponse: {
10450
11152
  /** @description Response payload. */
10451
11153
  data: {
@@ -10473,37 +11175,9 @@ export interface components {
10473
11175
  FailureGroupResponse: {
10474
11176
  /** @description Response payload. */
10475
11177
  data: {
10476
- failure_group: {
10477
- id: string;
10478
- project_id: number;
10479
- label: string;
10480
- /** @enum {string} */
10481
- type: "app" | "test" | "unknown";
10482
- /** @enum {string} */
10483
- status: "open" | "resolved";
10484
- diagnosis: string | null;
10485
- recommendation: string | null;
10486
- fingerprint: components["schemas"]["Fingerprint"];
10487
- resolved_at: string | null;
10488
- first_seen_at: string;
10489
- last_seen_at: string;
10490
- last_test_run_id: number | null;
10491
- created_at: string;
10492
- updated_at: string;
10493
- members: components["schemas"]["FailureGroupMember"][];
10494
- };
11178
+ failure_group: components["schemas"]["FailureGroup"];
10495
11179
  };
10496
11180
  };
10497
- FailureGroupMember: {
10498
- id: string;
10499
- group_id: string;
10500
- /** @description Test case ID (normalized 41-character Playwright test id). */
10501
- test_case_id: string;
10502
- environment_id: number | null;
10503
- first_seen_at: string;
10504
- last_seen_at: string;
10505
- last_test_run_id: number | null;
10506
- };
10507
11181
  FailureGroupActivityResponse: {
10508
11182
  /** @description Response payload. */
10509
11183
  data: {
@@ -10513,7 +11187,7 @@ export interface components {
10513
11187
  FailureGroupActivityEvent: {
10514
11188
  id: string;
10515
11189
  /** @enum {string} */
10516
- type: "created" | "edited" | "status_changed" | "merged" | "member_added" | "member_removed";
11190
+ type: "created" | "edited" | "status_changed" | "merged" | "member_added" | "member_seen" | "member_removed";
10517
11191
  at: string;
10518
11192
  source_run_id: number | null;
10519
11193
  changed_fields: string[] | null;
@@ -10568,6 +11242,14 @@ export interface components {
10568
11242
  detached_at: string | null;
10569
11243
  detached_by: string | null;
10570
11244
  };
11245
+ FailureGroupConflictResponse: {
11246
+ data: {
11247
+ failure_group: components["schemas"]["FailureGroup"];
11248
+ };
11249
+ error: {
11250
+ message: string;
11251
+ };
11252
+ };
10571
11253
  CreateFailureGroupRequest: {
10572
11254
  /** @description Human label for the failure mode (the group_key). */
10573
11255
  label: string;
@@ -10595,6 +11277,18 @@ export interface components {
10595
11277
  };
10596
11278
  }[];
10597
11279
  } | null;
11280
+ /** @description The group's matcher function for future auto-matching. Attribution is derived from the caller, never the body. */
11281
+ matcher?: {
11282
+ /** @description Plain-JS async function source: `async ({ testRun, testCase, traceUtils }) => boolean`. */
11283
+ source: string;
11284
+ /** @description Human-readable summary of what the matcher matches and why; re-articulated on every edit. */
11285
+ description: string;
11286
+ /**
11287
+ * @description Input-contract version the source was written against.
11288
+ * @default 1
11289
+ */
11290
+ contract_version: number;
11291
+ } | null;
10598
11292
  /** @description Run this diagnosis is based on (provenance). */
10599
11293
  source_run_id?: number | null;
10600
11294
  };
@@ -10621,8 +11315,26 @@ export interface components {
10621
11315
  };
10622
11316
  }[];
10623
11317
  } | null;
11318
+ /** @description Present → replaces the stored matcher wholesale (null clears it); omit to keep it. Re-submitting an identical source + description is a no-op (no revision). */
11319
+ matcher?: {
11320
+ /** @description Plain-JS async function source: `async ({ testRun, testCase, traceUtils }) => boolean`. */
11321
+ source: string;
11322
+ /** @description Human-readable summary of what the matcher matches and why; re-articulated on every edit. */
11323
+ description: string;
11324
+ /**
11325
+ * @description Input-contract version the source was written against.
11326
+ * @default 1
11327
+ */
11328
+ contract_version: number;
11329
+ } | null;
10624
11330
  source_run_id?: number | null;
10625
11331
  };
11332
+ FailureGroupMemberResponse: {
11333
+ /** @description Response payload. */
11334
+ data: {
11335
+ member: components["schemas"]["FailureGroupMemberEntry"];
11336
+ };
11337
+ };
10626
11338
  AttachFailureGroupMemberRequest: {
10627
11339
  /** @description The run in which this failure was observed. */
10628
11340
  test_run_id: number;
@@ -10674,6 +11386,189 @@ export interface components {
10674
11386
  deleted: boolean;
10675
11387
  };
10676
11388
  };
11389
+ AlertRuleListResponse: {
11390
+ /** @description Response payload. */
11391
+ data: {
11392
+ alert_rules: components["schemas"]["AlertRule"][];
11393
+ };
11394
+ };
11395
+ AlertRule: {
11396
+ /** @description Alert rule ID. */
11397
+ id: number;
11398
+ /** @description Project the rule belongs to. */
11399
+ project_id: number;
11400
+ /** @description Environment this rule applies to; null means all environments. */
11401
+ environment_id: number | null;
11402
+ /** @description Whether the rule is active. */
11403
+ is_active: boolean;
11404
+ /**
11405
+ * @description Rule type. Only `consecutive` exists today.
11406
+ * @enum {string}
11407
+ */
11408
+ type: "consecutive";
11409
+ config: components["schemas"]["ConsecutiveAlertRuleConfig"];
11410
+ /** @description ISO 8601 creation timestamp. */
11411
+ created_at: string;
11412
+ /** @description ISO 8601 last-update timestamp. */
11413
+ updated_at: string;
11414
+ };
11415
+ ConsecutiveAlertRuleConfig: {
11416
+ /** @description Open an alert after this many consecutive fails. */
11417
+ open_after_fails: number;
11418
+ /** @description Resolve an open alert after this many consecutive passes. */
11419
+ resolve_after_passes: number;
11420
+ };
11421
+ AlertRuleResponse: {
11422
+ /** @description Response payload. */
11423
+ data: {
11424
+ alert_rule: components["schemas"]["AlertRule"];
11425
+ };
11426
+ };
11427
+ CreateAlertRuleRequest: {
11428
+ /**
11429
+ * @description Rule type. Only `consecutive` exists today.
11430
+ * @enum {string}
11431
+ */
11432
+ type: "consecutive";
11433
+ config: components["schemas"]["ConsecutiveAlertRuleConfig"];
11434
+ /** @description Environment this rule applies to; null applies it to all environments. */
11435
+ environment_id?: number | null;
11436
+ /** @description Whether the rule is active. Defaults to true. */
11437
+ is_active?: boolean;
11438
+ };
11439
+ PatchAlertRuleRequest: {
11440
+ /** @description Environment this rule applies to; null applies it to all environments. */
11441
+ environment_id?: number | null;
11442
+ config?: components["schemas"]["ConsecutiveAlertRuleConfig"];
11443
+ /** @description Whether the rule is active. */
11444
+ is_active?: boolean;
11445
+ };
11446
+ AlertRuleDeleteResponse: {
11447
+ /** @description Response payload. */
11448
+ data: {
11449
+ /**
11450
+ * @description Always true on success.
11451
+ * @enum {boolean}
11452
+ */
11453
+ deleted: true;
11454
+ };
11455
+ };
11456
+ AlertListResponse: {
11457
+ data: {
11458
+ alerts: components["schemas"]["Alert"][];
11459
+ };
11460
+ pagination: components["schemas"]["Pagination"];
11461
+ };
11462
+ Alert: {
11463
+ /** @description Alert ID. */
11464
+ id: number;
11465
+ /** @description Project the alert belongs to. */
11466
+ project_id: number;
11467
+ /** @description Environment the alert was opened in. */
11468
+ environment_id: number;
11469
+ /** @description The alert rule that opened this alert. */
11470
+ rule_id: number;
11471
+ /** @description Playwright test ID of the alerting test. */
11472
+ pw_test_id: string;
11473
+ /**
11474
+ * @description Alert lifecycle state.
11475
+ * @enum {string}
11476
+ */
11477
+ state: "open" | "resolved";
11478
+ /** @description Current consecutive-fail streak. */
11479
+ consecutive_fails: number;
11480
+ /** @description Recent evaluated outcomes, newest last. */
11481
+ recent_outcomes: components["schemas"]["AlertRunOutcome"][];
11482
+ /** @description The run whose failure opened the alert. */
11483
+ triggering_test_run_id: number;
11484
+ /** @description ISO 8601 timestamp the alert opened. */
11485
+ opened_at: string;
11486
+ /** @description ISO 8601 timestamp the alert resolved, if it has. */
11487
+ resolved_at: string | null;
11488
+ /** @description ISO 8601 creation timestamp. */
11489
+ created_at: string;
11490
+ /** @description ISO 8601 last-update timestamp. */
11491
+ updated_at: string;
11492
+ /** @description Display info for the alerting test; null when the test is no longer in the test-case ledger. */
11493
+ test_case: {
11494
+ /** @description Human-readable test name. */
11495
+ name: string;
11496
+ /** @description Test file path. */
11497
+ file_path: string;
11498
+ /** @description Test tags. */
11499
+ tags: string[];
11500
+ } | null;
11501
+ };
11502
+ AlertRunOutcome: {
11503
+ /** @description The evaluated test run. */
11504
+ test_run_id: number;
11505
+ /**
11506
+ * @description Evaluated outcome (flaky counts as pass).
11507
+ * @enum {string}
11508
+ */
11509
+ status: "pass" | "fail";
11510
+ };
11511
+ AlertDetailResponse: {
11512
+ /** @description Response payload. */
11513
+ data: {
11514
+ alert: components["schemas"]["AlertDetail"];
11515
+ };
11516
+ };
11517
+ AlertDetail: {
11518
+ /** @description Alert ID. */
11519
+ id: number;
11520
+ /** @description Project the alert belongs to. */
11521
+ project_id: number;
11522
+ /** @description Environment the alert was opened in. */
11523
+ environment_id: number;
11524
+ /** @description The alert rule that opened this alert. */
11525
+ rule_id: number;
11526
+ /** @description Playwright test ID of the alerting test. */
11527
+ pw_test_id: string;
11528
+ /**
11529
+ * @description Alert lifecycle state.
11530
+ * @enum {string}
11531
+ */
11532
+ state: "open" | "resolved";
11533
+ /** @description Current consecutive-fail streak. */
11534
+ consecutive_fails: number;
11535
+ /** @description Recent evaluated outcomes, newest last. */
11536
+ recent_outcomes: components["schemas"]["AlertRunOutcome"][];
11537
+ /** @description The run whose failure opened the alert. */
11538
+ triggering_test_run_id: number;
11539
+ /** @description ISO 8601 timestamp the alert opened. */
11540
+ opened_at: string;
11541
+ /** @description ISO 8601 timestamp the alert resolved, if it has. */
11542
+ resolved_at: string | null;
11543
+ /** @description ISO 8601 creation timestamp. */
11544
+ created_at: string;
11545
+ /** @description ISO 8601 last-update timestamp. */
11546
+ updated_at: string;
11547
+ /** @description Display info for the alerting test; null when the test is no longer in the test-case ledger. */
11548
+ test_case: {
11549
+ /** @description Human-readable test name. */
11550
+ name: string;
11551
+ /** @description Test file path. */
11552
+ file_path: string;
11553
+ /** @description Test tags. */
11554
+ tags: string[];
11555
+ } | null;
11556
+ /** @description The alert's lifecycle events, oldest first. */
11557
+ events: components["schemas"]["AlertEvent"][];
11558
+ };
11559
+ AlertEvent: {
11560
+ /** @description Alert event ID. */
11561
+ id: number;
11562
+ /**
11563
+ * @description What happened.
11564
+ * @enum {string}
11565
+ */
11566
+ type: "opened" | "still_failing" | "resolved";
11567
+ /** @description The test run that produced this event, if any. */
11568
+ test_run_id: number | null;
11569
+ /** @description ISO 8601 timestamp of the event. */
11570
+ created_at: string;
11571
+ };
10677
11572
  WebhookListResponse: {
10678
11573
  /** @description Response payload. */
10679
11574
  data: {
@@ -10785,6 +11680,10 @@ export interface components {
10785
11680
  error: string | null;
10786
11681
  };
10787
11682
  };
11683
+ DodoWebhookAckResponse: {
11684
+ /** @description Ack. */
11685
+ message: string;
11686
+ };
10788
11687
  HiveModelsResponse: {
10789
11688
  /** @description Response payload. */
10790
11689
  data: components["schemas"]["HiveModel"][];
@@ -11144,6 +12043,16 @@ export interface components {
11144
12043
  /** @description ISO 8601 timestamp the link was last updated. */
11145
12044
  updated_at: string;
11146
12045
  };
12046
+ MembershipListResponse: {
12047
+ /** @description Response payload. */
12048
+ data: {
12049
+ /** @description Memberships created from pending invites. */
12050
+ memberships: {
12051
+ /** @description Organization joined. */
12052
+ org_id: number;
12053
+ }[];
12054
+ };
12055
+ };
11147
12056
  UserDetailResponse: {
11148
12057
  /** @description Response payload. */
11149
12058
  data: {
@@ -12048,11 +12957,50 @@ export interface operations {
12048
12957
  [name: string]: unknown;
12049
12958
  };
12050
12959
  content: {
12051
- "application/json": components["schemas"]["ErrorResponse"];
12960
+ "application/json": components["schemas"]["ErrorResponse"];
12961
+ };
12962
+ };
12963
+ /** @description Failed to stop the task. */
12964
+ 500: {
12965
+ headers: {
12966
+ [name: string]: unknown;
12967
+ };
12968
+ content: {
12969
+ "application/json": components["schemas"]["ErrorResponse"];
12970
+ };
12971
+ };
12972
+ };
12973
+ };
12974
+ createTestRunTriageSession: {
12975
+ parameters: {
12976
+ query?: never;
12977
+ header?: never;
12978
+ path: {
12979
+ /** @description Database ID of the test run. */
12980
+ id: number;
12981
+ };
12982
+ cookie?: never;
12983
+ };
12984
+ requestBody?: {
12985
+ content: {
12986
+ "application/json": {
12987
+ /** @description Send the session-started Slack DM. Set when the acting user has a linked Slack account. */
12988
+ send_slack_notification?: boolean | null;
12989
+ };
12990
+ };
12991
+ };
12992
+ responses: {
12993
+ /** @description The created triage session. */
12994
+ 201: {
12995
+ headers: {
12996
+ [name: string]: unknown;
12997
+ };
12998
+ content: {
12999
+ "application/json": components["schemas"]["TestRunTriageSessionResponse"];
12052
13000
  };
12053
13001
  };
12054
- /** @description Failed to stop the task. */
12055
- 500: {
13002
+ /** @description Test run not found or inaccessible. */
13003
+ 404: {
12056
13004
  headers: {
12057
13005
  [name: string]: unknown;
12058
13006
  };
@@ -12428,6 +13376,46 @@ export interface operations {
12428
13376
  };
12429
13377
  };
12430
13378
  };
13379
+ listTestCasePlaywrightProjects: {
13380
+ parameters: {
13381
+ query?: never;
13382
+ header?: never;
13383
+ path?: never;
13384
+ cookie?: never;
13385
+ };
13386
+ requestBody?: never;
13387
+ responses: {
13388
+ /** @description The project's distinct Playwright projects. */
13389
+ 200: {
13390
+ headers: {
13391
+ /** @description Caching directive: `public, s-maxage=300, stale-while-revalidate=600`. */
13392
+ "Cache-Control": string;
13393
+ [name: string]: unknown;
13394
+ };
13395
+ content: {
13396
+ "application/json": components["schemas"]["TestCasePlaywrightProjectsResponse"];
13397
+ };
13398
+ };
13399
+ /** @description Project could not be resolved from the request. */
13400
+ 400: {
13401
+ headers: {
13402
+ [name: string]: unknown;
13403
+ };
13404
+ content: {
13405
+ "application/json": components["schemas"]["ErrorResponse"];
13406
+ };
13407
+ };
13408
+ /** @description Project not found or not accessible. */
13409
+ 404: {
13410
+ headers: {
13411
+ [name: string]: unknown;
13412
+ };
13413
+ content: {
13414
+ "application/json": components["schemas"]["ErrorResponse"];
13415
+ };
13416
+ };
13417
+ };
13418
+ };
12431
13419
  createEnvironment: {
12432
13420
  parameters: {
12433
13421
  query?: never;
@@ -13757,6 +14745,79 @@ export interface operations {
13757
14745
  };
13758
14746
  };
13759
14747
  };
14748
+ slackProxy: {
14749
+ parameters: {
14750
+ query?: never;
14751
+ header?: never;
14752
+ path?: never;
14753
+ cookie?: never;
14754
+ };
14755
+ requestBody?: {
14756
+ content: {
14757
+ "application/json": {
14758
+ /**
14759
+ * @description Slack Web API method to call. Read-only methods only.
14760
+ * @enum {string}
14761
+ */
14762
+ api_method: "conversations.history" | "conversations.replies" | "conversations.info" | "chat.getPermalink" | "files.list" | "files.info" | "users.info";
14763
+ /**
14764
+ * @description Arguments passed to the Slack method.
14765
+ * @default {}
14766
+ */
14767
+ args?: {
14768
+ [key: string]: unknown;
14769
+ };
14770
+ };
14771
+ };
14772
+ };
14773
+ responses: {
14774
+ /** @description The Slack API JSON response, forwarded verbatim. */
14775
+ 200: {
14776
+ headers: {
14777
+ [name: string]: unknown;
14778
+ };
14779
+ content: {
14780
+ "application/json": unknown;
14781
+ };
14782
+ };
14783
+ /** @description Invalid request. */
14784
+ 400: {
14785
+ headers: {
14786
+ [name: string]: unknown;
14787
+ };
14788
+ content: {
14789
+ "application/json": components["schemas"]["SlackProxyError"];
14790
+ };
14791
+ };
14792
+ /** @description Sandbox authentication required, or the resource is out of scope. */
14793
+ 403: {
14794
+ headers: {
14795
+ [name: string]: unknown;
14796
+ };
14797
+ content: {
14798
+ "application/json": components["schemas"]["SlackProxyError"];
14799
+ };
14800
+ };
14801
+ /** @description Chat session or Slack connection not found. */
14802
+ 404: {
14803
+ headers: {
14804
+ [name: string]: unknown;
14805
+ };
14806
+ content: {
14807
+ "application/json": components["schemas"]["SlackProxyError"];
14808
+ };
14809
+ };
14810
+ /** @description Slack upstream error. */
14811
+ 502: {
14812
+ headers: {
14813
+ [name: string]: unknown;
14814
+ };
14815
+ content: {
14816
+ "application/json": components["schemas"]["SlackProxyError"];
14817
+ };
14818
+ };
14819
+ };
14820
+ };
13760
14821
  deleteSlackChannel: {
13761
14822
  parameters: {
13762
14823
  query?: never;
@@ -14196,6 +15257,15 @@ export interface operations {
14196
15257
  "application/json": components["schemas"]["ErrorResponse"];
14197
15258
  };
14198
15259
  };
15260
+ /** @description A group with this label already exists; nothing was written. The existing group is in `data`. */
15261
+ 409: {
15262
+ headers: {
15263
+ [name: string]: unknown;
15264
+ };
15265
+ content: {
15266
+ "application/json": components["schemas"]["FailureGroupConflictResponse"];
15267
+ };
15268
+ };
14199
15269
  };
14200
15270
  };
14201
15271
  getFailureGroup: {
@@ -14305,6 +15375,15 @@ export interface operations {
14305
15375
  "application/json": components["schemas"]["ErrorResponse"];
14306
15376
  };
14307
15377
  };
15378
+ /** @description Another group already holds this label; nothing was written. The conflicting group is in `data`. */
15379
+ 409: {
15380
+ headers: {
15381
+ [name: string]: unknown;
15382
+ };
15383
+ content: {
15384
+ "application/json": components["schemas"]["FailureGroupConflictResponse"];
15385
+ };
15386
+ };
14308
15387
  };
14309
15388
  };
14310
15389
  getFailureGroupActivity: {
@@ -14391,13 +15470,13 @@ export interface operations {
14391
15470
  };
14392
15471
  };
14393
15472
  responses: {
14394
- /** @description The group with its members. */
15473
+ /** @description The attached member, derived from the membership-event log. */
14395
15474
  200: {
14396
15475
  headers: {
14397
15476
  [name: string]: unknown;
14398
15477
  };
14399
15478
  content: {
14400
- "application/json": components["schemas"]["FailureGroupResponse"];
15479
+ "application/json": components["schemas"]["FailureGroupMemberResponse"];
14401
15480
  };
14402
15481
  };
14403
15482
  /** @description Group or test run not found. */
@@ -14706,20 +15785,161 @@ export interface operations {
14706
15785
  /** @description Resource ID. */
14707
15786
  id: number;
14708
15787
  };
14709
- cookie?: never;
15788
+ cookie?: never;
15789
+ };
15790
+ requestBody?: never;
15791
+ responses: {
15792
+ /** @description The resource's binary content. */
15793
+ 200: {
15794
+ headers: {
15795
+ [name: string]: unknown;
15796
+ };
15797
+ content: {
15798
+ "application/octet-stream": string;
15799
+ };
15800
+ };
15801
+ /** @description Invalid request. */
15802
+ 400: {
15803
+ headers: {
15804
+ [name: string]: unknown;
15805
+ };
15806
+ content: {
15807
+ "application/json": components["schemas"]["ErrorResponse"];
15808
+ };
15809
+ };
15810
+ /** @description Invalid scope or expired URL. */
15811
+ 403: {
15812
+ headers: {
15813
+ [name: string]: unknown;
15814
+ };
15815
+ content: {
15816
+ "application/json": components["schemas"]["ErrorResponse"];
15817
+ };
15818
+ };
15819
+ /** @description File not found. */
15820
+ 404: {
15821
+ headers: {
15822
+ [name: string]: unknown;
15823
+ };
15824
+ content: {
15825
+ "application/json": components["schemas"]["ErrorResponse"];
15826
+ };
15827
+ };
15828
+ };
15829
+ };
15830
+ uploadResourceContent: {
15831
+ parameters: {
15832
+ query: {
15833
+ /** @description Capability scope: `r` (read) or `w` (write). */
15834
+ scope: "r" | "w";
15835
+ /** @description Expiry as a Unix timestamp (seconds). */
15836
+ exp?: number | null;
15837
+ /** @description HMAC signature for the capability. */
15838
+ sig: string;
15839
+ };
15840
+ header?: never;
15841
+ path: {
15842
+ /** @description Resource ID. */
15843
+ id: number;
15844
+ };
15845
+ cookie?: never;
15846
+ };
15847
+ requestBody?: {
15848
+ content: {
15849
+ "application/octet-stream": string;
15850
+ };
15851
+ };
15852
+ responses: {
15853
+ /** @description The upload was stored. */
15854
+ 200: {
15855
+ headers: {
15856
+ [name: string]: unknown;
15857
+ };
15858
+ content: {
15859
+ "application/json": components["schemas"]["ResourceUploadContentResponse"];
15860
+ };
15861
+ };
15862
+ /** @description Invalid request or missing body. */
15863
+ 400: {
15864
+ headers: {
15865
+ [name: string]: unknown;
15866
+ };
15867
+ content: {
15868
+ "application/json": components["schemas"]["ErrorResponse"];
15869
+ };
15870
+ };
15871
+ /** @description Invalid scope or expired URL. */
15872
+ 403: {
15873
+ headers: {
15874
+ [name: string]: unknown;
15875
+ };
15876
+ content: {
15877
+ "application/json": components["schemas"]["ErrorResponse"];
15878
+ };
15879
+ };
15880
+ /** @description File not found. */
15881
+ 404: {
15882
+ headers: {
15883
+ [name: string]: unknown;
15884
+ };
15885
+ content: {
15886
+ "application/json": components["schemas"]["ErrorResponse"];
15887
+ };
15888
+ };
15889
+ };
15890
+ };
15891
+ listAlertRules: {
15892
+ parameters: {
15893
+ query?: never;
15894
+ header?: never;
15895
+ path?: never;
15896
+ cookie?: never;
15897
+ };
15898
+ requestBody?: never;
15899
+ responses: {
15900
+ /** @description The project's alert rules. */
15901
+ 200: {
15902
+ headers: {
15903
+ [name: string]: unknown;
15904
+ };
15905
+ content: {
15906
+ "application/json": components["schemas"]["AlertRuleListResponse"];
15907
+ };
15908
+ };
15909
+ /** @description Invalid request or missing project scope. */
15910
+ 400: {
15911
+ headers: {
15912
+ [name: string]: unknown;
15913
+ };
15914
+ content: {
15915
+ "application/json": components["schemas"]["ErrorResponse"];
15916
+ };
15917
+ };
15918
+ };
15919
+ };
15920
+ createAlertRule: {
15921
+ parameters: {
15922
+ query?: never;
15923
+ header?: never;
15924
+ path?: never;
15925
+ cookie?: never;
15926
+ };
15927
+ requestBody?: {
15928
+ content: {
15929
+ "application/json": components["schemas"]["CreateAlertRuleRequest"];
15930
+ };
14710
15931
  };
14711
- requestBody?: never;
14712
15932
  responses: {
14713
- /** @description The resource's binary content. */
15933
+ /** @description The created alert rule. */
14714
15934
  200: {
14715
15935
  headers: {
14716
15936
  [name: string]: unknown;
14717
15937
  };
14718
15938
  content: {
14719
- "application/octet-stream": string;
15939
+ "application/json": components["schemas"]["AlertRuleResponse"];
14720
15940
  };
14721
15941
  };
14722
- /** @description Invalid request. */
15942
+ /** @description Invalid request or missing project scope. */
14723
15943
  400: {
14724
15944
  headers: {
14725
15945
  [name: string]: unknown;
@@ -14728,17 +15948,8 @@ export interface operations {
14728
15948
  "application/json": components["schemas"]["ErrorResponse"];
14729
15949
  };
14730
15950
  };
14731
- /** @description Invalid scope or expired URL. */
14732
- 403: {
14733
- headers: {
14734
- [name: string]: unknown;
14735
- };
14736
- content: {
14737
- "application/json": components["schemas"]["ErrorResponse"];
14738
- };
14739
- };
14740
- /** @description File not found. */
14741
- 404: {
15951
+ /** @description A rule for this (project, environment) already exists. */
15952
+ 409: {
14742
15953
  headers: {
14743
15954
  [name: string]: unknown;
14744
15955
  };
@@ -14748,39 +15959,34 @@ export interface operations {
14748
15959
  };
14749
15960
  };
14750
15961
  };
14751
- uploadResourceContent: {
15962
+ listAlerts: {
14752
15963
  parameters: {
14753
- query: {
14754
- /** @description Capability scope: `r` (read) or `w` (write). */
14755
- scope: "r" | "w";
14756
- /** @description Expiry as a Unix timestamp (seconds). */
14757
- exp?: number | null;
14758
- /** @description HMAC signature for the capability. */
14759
- sig: string;
15964
+ query?: {
15965
+ /** @description Filter by alert state. Omit for all states. */
15966
+ state?: "open" | "resolved";
15967
+ /** @description Filter to alerts in this environment. */
15968
+ environment_id?: number;
15969
+ /** @description Page number (1-indexed). */
15970
+ page?: number;
15971
+ /** @description Items per page (max 100). */
15972
+ per_page?: number;
14760
15973
  };
14761
15974
  header?: never;
14762
- path: {
14763
- /** @description Resource ID. */
14764
- id: number;
14765
- };
15975
+ path?: never;
14766
15976
  cookie?: never;
14767
15977
  };
14768
- requestBody?: {
14769
- content: {
14770
- "application/octet-stream": string;
14771
- };
14772
- };
15978
+ requestBody?: never;
14773
15979
  responses: {
14774
- /** @description The upload was stored. */
15980
+ /** @description Paginated alerts. */
14775
15981
  200: {
14776
15982
  headers: {
14777
15983
  [name: string]: unknown;
14778
15984
  };
14779
15985
  content: {
14780
- "application/json": components["schemas"]["ResourceUploadContentResponse"];
15986
+ "application/json": components["schemas"]["AlertListResponse"];
14781
15987
  };
14782
15988
  };
14783
- /** @description Invalid request or missing body. */
15989
+ /** @description Invalid request or missing project scope. */
14784
15990
  400: {
14785
15991
  headers: {
14786
15992
  [name: string]: unknown;
@@ -14789,16 +15995,30 @@ export interface operations {
14789
15995
  "application/json": components["schemas"]["ErrorResponse"];
14790
15996
  };
14791
15997
  };
14792
- /** @description Invalid scope or expired URL. */
14793
- 403: {
15998
+ };
15999
+ };
16000
+ getAlert: {
16001
+ parameters: {
16002
+ query?: never;
16003
+ header?: never;
16004
+ path: {
16005
+ /** @description Alert ID. */
16006
+ id: number;
16007
+ };
16008
+ cookie?: never;
16009
+ };
16010
+ requestBody?: never;
16011
+ responses: {
16012
+ /** @description The alert with its events. */
16013
+ 200: {
14794
16014
  headers: {
14795
16015
  [name: string]: unknown;
14796
16016
  };
14797
16017
  content: {
14798
- "application/json": components["schemas"]["ErrorResponse"];
16018
+ "application/json": components["schemas"]["AlertDetailResponse"];
14799
16019
  };
14800
16020
  };
14801
- /** @description File not found. */
16021
+ /** @description Alert not found. */
14802
16022
  404: {
14803
16023
  headers: {
14804
16024
  [name: string]: unknown;
@@ -15002,6 +16222,47 @@ export interface operations {
15002
16222
  };
15003
16223
  };
15004
16224
  };
16225
+ listChatSessionAlarms: {
16226
+ parameters: {
16227
+ query?: never;
16228
+ header?: never;
16229
+ path: {
16230
+ /** @description Chat session ID. */
16231
+ id: number;
16232
+ };
16233
+ cookie?: never;
16234
+ };
16235
+ requestBody?: never;
16236
+ responses: {
16237
+ /** @description Upcoming alarms for the session. */
16238
+ 200: {
16239
+ headers: {
16240
+ [name: string]: unknown;
16241
+ };
16242
+ content: {
16243
+ "application/json": components["schemas"]["ChatSessionAlarms"];
16244
+ };
16245
+ };
16246
+ /** @description Invalid request. */
16247
+ 400: {
16248
+ headers: {
16249
+ [name: string]: unknown;
16250
+ };
16251
+ content: {
16252
+ "application/json": components["schemas"]["ErrorResponse"];
16253
+ };
16254
+ };
16255
+ /** @description Session not found. */
16256
+ 404: {
16257
+ headers: {
16258
+ [name: string]: unknown;
16259
+ };
16260
+ content: {
16261
+ "application/json": components["schemas"]["ChatSessionAlarmsError"];
16262
+ };
16263
+ };
16264
+ };
16265
+ };
15005
16266
  listChatSessionThreads: {
15006
16267
  parameters: {
15007
16268
  query?: never;
@@ -15047,6 +16308,27 @@ export interface operations {
15047
16308
  requestBody?: {
15048
16309
  content: {
15049
16310
  "application/json": {
16311
+ /**
16312
+ * @description Messaging provider. Only "slack" is supported.
16313
+ * @default slack
16314
+ * @enum {string}
16315
+ */
16316
+ provider?: "slack";
16317
+ /**
16318
+ * @description Creates an agent-controlled Slack thread: explicit outbound messages, in-thread replies forwarded to the session.
16319
+ * @enum {string}
16320
+ */
16321
+ purpose: "agent";
16322
+ /**
16323
+ * @description Target type. "im" opens a DM with the recipient user.
16324
+ * @enum {string}
16325
+ */
16326
+ channel_type: "im";
16327
+ /** @description Recipient user ID (UUID v4 format) whose linked Slack account receives the agent DM. */
16328
+ user_id: string;
16329
+ /** @description Markdown root message for the Slack DM. Empirical converts it to Slack formatting. */
16330
+ markdown: string;
16331
+ } | {
15050
16332
  /**
15051
16333
  * @description Messaging provider. Only "slack" is supported.
15052
16334
  * @default slack
@@ -15058,6 +16340,12 @@ export interface operations {
15058
16340
  * @enum {string}
15059
16341
  */
15060
16342
  purpose: "agent";
16343
+ /**
16344
+ * @description Target type. "channel" posts the root message into a channel.
16345
+ * @default channel
16346
+ * @enum {string}
16347
+ */
16348
+ channel_type?: "channel";
15061
16349
  /** @description Slack workspace/team ID. */
15062
16350
  team_id: string;
15063
16351
  /** @description Slack channel ID. */
@@ -15159,7 +16447,10 @@ export interface operations {
15159
16447
  createChatSessionThreadMessage: {
15160
16448
  parameters: {
15161
16449
  query?: never;
15162
- header?: never;
16450
+ header?: {
16451
+ /** @description Stable caller-generated key for safely retrying this Slack post. Alternative to the body `idempotency_key` field. */
16452
+ "idempotency-key"?: string;
16453
+ };
15163
16454
  path: {
15164
16455
  /** @description Chat session ID. */
15165
16456
  id: number;
@@ -15173,8 +16464,8 @@ export interface operations {
15173
16464
  "application/json": {
15174
16465
  /** @description Markdown message to post to the Slack thread. Empirical converts it to Slack formatting. */
15175
16466
  markdown: string;
15176
- /** @description Stable caller-generated key for safely retrying this Slack post. */
15177
- idempotency_key: string;
16467
+ /** @description Stable caller-generated key for safely retrying this Slack post. May be sent here or as the `Idempotency-Key` request header; the body field wins when both are present. Exactly one is required. */
16468
+ idempotency_key?: string;
15178
16469
  };
15179
16470
  };
15180
16471
  };
@@ -15197,7 +16488,7 @@ export interface operations {
15197
16488
  "application/json": components["schemas"]["ChatSessionThreadMessageResponse"];
15198
16489
  };
15199
16490
  };
15200
- /** @description Thread is not agent-controlled. */
16491
+ /** @description Thread is not agent-controlled, or the idempotency key is missing. */
15201
16492
  400: {
15202
16493
  headers: {
15203
16494
  [name: string]: unknown;
@@ -15967,40 +17258,6 @@ export interface operations {
15967
17258
  };
15968
17259
  };
15969
17260
  };
15970
- listAllRequests: {
15971
- parameters: {
15972
- query?: {
15973
- /** @description Page number (1-indexed). */
15974
- page?: number;
15975
- /** @description Items per page. */
15976
- per_page?: number;
15977
- };
15978
- header?: never;
15979
- path?: never;
15980
- cookie?: never;
15981
- };
15982
- requestBody?: never;
15983
- responses: {
15984
- /** @description Paginated list of requests across projects. */
15985
- 200: {
15986
- headers: {
15987
- [name: string]: unknown;
15988
- };
15989
- content: {
15990
- "application/json": components["schemas"]["AdminRequestListResponse"];
15991
- };
15992
- };
15993
- /** @description Invalid query. */
15994
- 400: {
15995
- headers: {
15996
- [name: string]: unknown;
15997
- };
15998
- content: {
15999
- "application/json": components["schemas"]["ErrorResponse"];
16000
- };
16001
- };
16002
- };
16003
- };
16004
17261
  listAgentWorkflows: {
16005
17262
  parameters: {
16006
17263
  query?: never;
@@ -16342,37 +17599,132 @@ export interface operations {
16342
17599
  };
16343
17600
  };
16344
17601
  };
16345
- deleteApiKey: {
17602
+ deleteApiKey: {
17603
+ parameters: {
17604
+ query?: never;
17605
+ header?: never;
17606
+ path: {
17607
+ /** @description API key ID (positive integer). */
17608
+ id: string;
17609
+ };
17610
+ cookie?: never;
17611
+ };
17612
+ requestBody?: never;
17613
+ responses: {
17614
+ /** @description The API key was deleted. */
17615
+ 200: {
17616
+ headers: {
17617
+ [name: string]: unknown;
17618
+ };
17619
+ content: {
17620
+ "application/json": components["schemas"]["ApiKeySuccessResponse"];
17621
+ };
17622
+ };
17623
+ /** @description Invalid request. */
17624
+ 400: {
17625
+ headers: {
17626
+ [name: string]: unknown;
17627
+ };
17628
+ content: {
17629
+ "application/json": components["schemas"]["ErrorResponse"];
17630
+ };
17631
+ };
17632
+ /** @description API key not found. */
17633
+ 404: {
17634
+ headers: {
17635
+ [name: string]: unknown;
17636
+ };
17637
+ content: {
17638
+ "application/json": components["schemas"]["ErrorResponse"];
17639
+ };
17640
+ };
17641
+ /** @description Failed to delete the API key. */
17642
+ 500: {
17643
+ headers: {
17644
+ [name: string]: unknown;
17645
+ };
17646
+ content: {
17647
+ "application/json": components["schemas"]["ErrorResponse"];
17648
+ };
17649
+ };
17650
+ };
17651
+ };
17652
+ updateApiKey: {
17653
+ parameters: {
17654
+ query?: never;
17655
+ header?: never;
17656
+ path: {
17657
+ /** @description API key ID (positive integer). */
17658
+ id: string;
17659
+ };
17660
+ cookie?: never;
17661
+ };
17662
+ requestBody?: {
17663
+ content: {
17664
+ "application/json": components["schemas"]["UpdateApiKeyRequest"];
17665
+ };
17666
+ };
17667
+ responses: {
17668
+ /** @description The API key was updated. */
17669
+ 200: {
17670
+ headers: {
17671
+ [name: string]: unknown;
17672
+ };
17673
+ content: {
17674
+ "application/json": components["schemas"]["ApiKeySuccessResponse"];
17675
+ };
17676
+ };
17677
+ /** @description Invalid request. */
17678
+ 400: {
17679
+ headers: {
17680
+ [name: string]: unknown;
17681
+ };
17682
+ content: {
17683
+ "application/json": components["schemas"]["ErrorResponse"];
17684
+ };
17685
+ };
17686
+ /** @description API key not found. */
17687
+ 404: {
17688
+ headers: {
17689
+ [name: string]: unknown;
17690
+ };
17691
+ content: {
17692
+ "application/json": components["schemas"]["ErrorResponse"];
17693
+ };
17694
+ };
17695
+ /** @description Failed to update the API key. */
17696
+ 500: {
17697
+ headers: {
17698
+ [name: string]: unknown;
17699
+ };
17700
+ content: {
17701
+ "application/json": components["schemas"]["ErrorResponse"];
17702
+ };
17703
+ };
17704
+ };
17705
+ };
17706
+ deleteAlertRule: {
16346
17707
  parameters: {
16347
17708
  query?: never;
16348
17709
  header?: never;
16349
17710
  path: {
16350
- /** @description API key ID (positive integer). */
16351
- id: string;
17711
+ /** @description Alert rule ID. */
17712
+ id: number;
16352
17713
  };
16353
17714
  cookie?: never;
16354
17715
  };
16355
17716
  requestBody?: never;
16356
17717
  responses: {
16357
- /** @description The API key was deleted. */
17718
+ /** @description The rule was deleted. */
16358
17719
  200: {
16359
17720
  headers: {
16360
17721
  [name: string]: unknown;
16361
17722
  };
16362
17723
  content: {
16363
- "application/json": components["schemas"]["ApiKeySuccessResponse"];
16364
- };
16365
- };
16366
- /** @description Invalid request. */
16367
- 400: {
16368
- headers: {
16369
- [name: string]: unknown;
16370
- };
16371
- content: {
16372
- "application/json": components["schemas"]["ErrorResponse"];
17724
+ "application/json": components["schemas"]["AlertRuleDeleteResponse"];
16373
17725
  };
16374
17726
  };
16375
- /** @description API key not found. */
17727
+ /** @description Alert rule not found. */
16376
17728
  404: {
16377
17729
  headers: {
16378
17730
  [name: string]: unknown;
@@ -16381,8 +17733,8 @@ export interface operations {
16381
17733
  "application/json": components["schemas"]["ErrorResponse"];
16382
17734
  };
16383
17735
  };
16384
- /** @description Failed to delete the API key. */
16385
- 500: {
17736
+ /** @description Alerts reference this rule; it cannot be deleted. */
17737
+ 409: {
16386
17738
  headers: {
16387
17739
  [name: string]: unknown;
16388
17740
  };
@@ -16392,29 +17744,29 @@ export interface operations {
16392
17744
  };
16393
17745
  };
16394
17746
  };
16395
- updateApiKey: {
17747
+ updateAlertRule: {
16396
17748
  parameters: {
16397
17749
  query?: never;
16398
17750
  header?: never;
16399
17751
  path: {
16400
- /** @description API key ID (positive integer). */
16401
- id: string;
17752
+ /** @description Alert rule ID. */
17753
+ id: number;
16402
17754
  };
16403
17755
  cookie?: never;
16404
17756
  };
16405
17757
  requestBody?: {
16406
17758
  content: {
16407
- "application/json": components["schemas"]["UpdateApiKeyRequest"];
17759
+ "application/json": components["schemas"]["PatchAlertRuleRequest"];
16408
17760
  };
16409
17761
  };
16410
17762
  responses: {
16411
- /** @description The API key was updated. */
17763
+ /** @description The updated alert rule. */
16412
17764
  200: {
16413
17765
  headers: {
16414
17766
  [name: string]: unknown;
16415
17767
  };
16416
17768
  content: {
16417
- "application/json": components["schemas"]["ApiKeySuccessResponse"];
17769
+ "application/json": components["schemas"]["AlertRuleResponse"];
16418
17770
  };
16419
17771
  };
16420
17772
  /** @description Invalid request. */
@@ -16426,7 +17778,7 @@ export interface operations {
16426
17778
  "application/json": components["schemas"]["ErrorResponse"];
16427
17779
  };
16428
17780
  };
16429
- /** @description API key not found. */
17781
+ /** @description Alert rule not found. */
16430
17782
  404: {
16431
17783
  headers: {
16432
17784
  [name: string]: unknown;
@@ -16435,8 +17787,8 @@ export interface operations {
16435
17787
  "application/json": components["schemas"]["ErrorResponse"];
16436
17788
  };
16437
17789
  };
16438
- /** @description Failed to update the API key. */
16439
- 500: {
17790
+ /** @description Another rule already holds this (project, environment). */
17791
+ 409: {
16440
17792
  headers: {
16441
17793
  [name: string]: unknown;
16442
17794
  };
@@ -16465,8 +17817,6 @@ export interface operations {
16465
17817
  exclude_project_ids?: string;
16466
17818
  /** @description Comma-separated creator user IDs to filter by. */
16467
17819
  user_ids?: string;
16468
- /** @description Exclude triage sessions unless set to `false`. */
16469
- exclude_triage?: boolean | null;
16470
17820
  /** @description Only sessions updated within this many days. */
16471
17821
  updated_within_days?: number;
16472
17822
  /** @description URL-encoded JSON array of generic filter conditions. */
@@ -16634,6 +17984,38 @@ export interface operations {
16634
17984
  };
16635
17985
  };
16636
17986
  };
17987
+ getChatSessionBranches: {
17988
+ parameters: {
17989
+ query?: never;
17990
+ header?: never;
17991
+ path: {
17992
+ /** @description Chat session ID. */
17993
+ id: number;
17994
+ };
17995
+ cookie?: never;
17996
+ };
17997
+ requestBody?: never;
17998
+ responses: {
17999
+ /** @description The session's branches. */
18000
+ 200: {
18001
+ headers: {
18002
+ [name: string]: unknown;
18003
+ };
18004
+ content: {
18005
+ "application/json": components["schemas"]["ChatSessionBranchesResponse"];
18006
+ };
18007
+ };
18008
+ /** @description Chat session not found. */
18009
+ 404: {
18010
+ headers: {
18011
+ [name: string]: unknown;
18012
+ };
18013
+ content: {
18014
+ "application/json": components["schemas"]["ErrorResponse"];
18015
+ };
18016
+ };
18017
+ };
18018
+ };
16637
18019
  closeChatSession: {
16638
18020
  parameters: {
16639
18021
  query?: never;
@@ -16829,7 +18211,12 @@ export interface operations {
16829
18211
  };
16830
18212
  getChatSessionDiff: {
16831
18213
  parameters: {
16832
- query?: never;
18214
+ query?: {
18215
+ /** @description Return the diff of this specific PR instead of the session's working diff. A session can have several PRs; the default only covers the latest. */
18216
+ pr_number?: number;
18217
+ /** @description Return the live branch comparison of this specific registered branch instead of the session's own branch. For branches without a PR yet; mutually exclusive with pr_number. */
18218
+ branch?: string;
18219
+ };
16833
18220
  header?: never;
16834
18221
  path: {
16835
18222
  /** @description Chat session ID. */
@@ -16848,7 +18235,16 @@ export interface operations {
16848
18235
  "application/json": components["schemas"]["ChatSessionDiffResponse"];
16849
18236
  };
16850
18237
  };
16851
- /** @description Chat session or project not found. */
18238
+ /** @description Both pr_number and branch were passed. */
18239
+ 400: {
18240
+ headers: {
18241
+ [name: string]: unknown;
18242
+ };
18243
+ content: {
18244
+ "application/json": components["schemas"]["ErrorResponse"];
18245
+ };
18246
+ };
18247
+ /** @description Chat session, project, or registered branch not found. */
16852
18248
  404: {
16853
18249
  headers: {
16854
18250
  [name: string]: unknown;
@@ -17465,6 +18861,38 @@ export interface operations {
17465
18861
  };
17466
18862
  };
17467
18863
  };
18864
+ getChatSessionSnapshot: {
18865
+ parameters: {
18866
+ query?: never;
18867
+ header?: never;
18868
+ path: {
18869
+ /** @description Chat session ID. */
18870
+ id: number;
18871
+ };
18872
+ cookie?: never;
18873
+ };
18874
+ requestBody?: never;
18875
+ responses: {
18876
+ /** @description Sandbox status, agent lifecycle, and user messages. */
18877
+ 200: {
18878
+ headers: {
18879
+ [name: string]: unknown;
18880
+ };
18881
+ content: {
18882
+ "application/json": components["schemas"]["ChatSessionSnapshotResponse"];
18883
+ };
18884
+ };
18885
+ /** @description Chat session not found. */
18886
+ 404: {
18887
+ headers: {
18888
+ [name: string]: unknown;
18889
+ };
18890
+ content: {
18891
+ "application/json": components["schemas"]["ErrorResponse"];
18892
+ };
18893
+ };
18894
+ };
18895
+ };
17468
18896
  updateChatSessionSlackThreadSync: {
17469
18897
  parameters: {
17470
18898
  query?: never;
@@ -17688,6 +19116,55 @@ export interface operations {
17688
19116
  };
17689
19117
  };
17690
19118
  };
19119
+ dodoPaymentsWebhook: {
19120
+ parameters: {
19121
+ query?: never;
19122
+ header?: never;
19123
+ path?: never;
19124
+ cookie?: never;
19125
+ };
19126
+ requestBody?: {
19127
+ content: {
19128
+ "application/json": {
19129
+ /** @description Event type, e.g. "payment.succeeded". */
19130
+ type: string;
19131
+ /** @description Event payload. */
19132
+ data: {
19133
+ /** @description Dodo payment ID. */
19134
+ payment_id?: string;
19135
+ /** @description Charged amount in minor units, tax included. */
19136
+ total_amount?: number;
19137
+ /** @description Tax portion of total_amount in minor units. */
19138
+ tax?: number;
19139
+ /** @description Metadata set at checkout session creation. */
19140
+ metadata?: {
19141
+ [key: string]: string;
19142
+ };
19143
+ };
19144
+ };
19145
+ };
19146
+ };
19147
+ responses: {
19148
+ /** @description Event acknowledged. */
19149
+ 200: {
19150
+ headers: {
19151
+ [name: string]: unknown;
19152
+ };
19153
+ content: {
19154
+ "application/json": components["schemas"]["DodoWebhookAckResponse"];
19155
+ };
19156
+ };
19157
+ /** @description Missing or invalid webhook signature. */
19158
+ 401: {
19159
+ headers: {
19160
+ [name: string]: unknown;
19161
+ };
19162
+ content: {
19163
+ "application/json": components["schemas"]["ErrorResponse"];
19164
+ };
19165
+ };
19166
+ };
19167
+ };
17691
19168
  listEnvironmentVariables: {
17692
19169
  parameters: {
17693
19170
  query?: {
@@ -19853,16 +21330,145 @@ export interface operations {
19853
21330
  };
19854
21331
  };
19855
21332
  responses: {
19856
- /** @description The mirrored invoice. */
21333
+ /** @description The mirrored invoice. */
21334
+ 200: {
21335
+ headers: {
21336
+ [name: string]: unknown;
21337
+ };
21338
+ content: {
21339
+ "application/json": components["schemas"]["InvoicePaymentStatusResponse"];
21340
+ };
21341
+ };
21342
+ /** @description Invalid request. */
21343
+ 400: {
21344
+ headers: {
21345
+ [name: string]: unknown;
21346
+ };
21347
+ content: {
21348
+ "application/json": components["schemas"]["ErrorResponse"];
21349
+ };
21350
+ };
21351
+ /** @description Invoice not found. */
21352
+ 404: {
21353
+ headers: {
21354
+ [name: string]: unknown;
21355
+ };
21356
+ content: {
21357
+ "application/json": components["schemas"]["ErrorResponse"];
21358
+ };
21359
+ };
21360
+ };
21361
+ };
21362
+ getInvoicePdfDownloadUrl: {
21363
+ parameters: {
21364
+ query?: never;
21365
+ header?: never;
21366
+ path: {
21367
+ /** @description Invoice ID. */
21368
+ id: string;
21369
+ };
21370
+ cookie?: never;
21371
+ };
21372
+ requestBody?: never;
21373
+ responses: {
21374
+ /** @description The PDF download URL. */
21375
+ 200: {
21376
+ headers: {
21377
+ [name: string]: unknown;
21378
+ };
21379
+ content: {
21380
+ "application/json": components["schemas"]["InvoicePdfDownloadUrlResponse"];
21381
+ };
21382
+ };
21383
+ /** @description Invalid invoice id. */
21384
+ 400: {
21385
+ headers: {
21386
+ [name: string]: unknown;
21387
+ };
21388
+ content: {
21389
+ "application/json": components["schemas"]["ErrorResponse"];
21390
+ };
21391
+ };
21392
+ /** @description Invoice not found or has no PDF. */
21393
+ 404: {
21394
+ headers: {
21395
+ [name: string]: unknown;
21396
+ };
21397
+ content: {
21398
+ "application/json": components["schemas"]["ErrorResponse"];
21399
+ };
21400
+ };
21401
+ };
21402
+ };
21403
+ downloadInvoicePdf: {
21404
+ parameters: {
21405
+ query?: never;
21406
+ header?: never;
21407
+ path: {
21408
+ /** @description Invoice ID. */
21409
+ id: string;
21410
+ };
21411
+ cookie?: never;
21412
+ };
21413
+ requestBody?: never;
21414
+ responses: {
21415
+ /** @description The invoice PDF. */
21416
+ 200: {
21417
+ headers: {
21418
+ [name: string]: unknown;
21419
+ };
21420
+ content: {
21421
+ "application/pdf": string;
21422
+ };
21423
+ };
21424
+ /** @description Invalid invoice id. */
21425
+ 400: {
21426
+ headers: {
21427
+ [name: string]: unknown;
21428
+ };
21429
+ content: {
21430
+ "application/json": components["schemas"]["ErrorResponse"];
21431
+ };
21432
+ };
21433
+ /** @description Invoice or its PDF not found. */
21434
+ 404: {
21435
+ headers: {
21436
+ [name: string]: unknown;
21437
+ };
21438
+ content: {
21439
+ "application/json": components["schemas"]["ErrorResponse"];
21440
+ };
21441
+ };
21442
+ };
21443
+ };
21444
+ sendInvoice: {
21445
+ parameters: {
21446
+ query?: never;
21447
+ header?: never;
21448
+ path: {
21449
+ /** @description Invoice ID. */
21450
+ id: string;
21451
+ };
21452
+ cookie?: never;
21453
+ };
21454
+ requestBody?: {
21455
+ content: {
21456
+ "application/json": {
21457
+ is_test_email?: boolean;
21458
+ };
21459
+ };
21460
+ };
21461
+ responses: {
21462
+ /** @description The invoice was sent. */
19857
21463
  200: {
19858
21464
  headers: {
19859
21465
  [name: string]: unknown;
19860
21466
  };
19861
21467
  content: {
19862
- "application/json": components["schemas"]["InvoicePaymentStatusResponse"];
21468
+ "application/json": components["schemas"]["SendInvoiceResponse"];
19863
21469
  };
19864
21470
  };
19865
- /** @description Invalid request. */
21471
+ /** @description Invalid request, missing PDF, missing org/billing emails, or no due date. */
19866
21472
  400: {
19867
21473
  headers: {
19868
21474
  [name: string]: unknown;
@@ -19882,7 +21488,36 @@ export interface operations {
19882
21488
  };
19883
21489
  };
19884
21490
  };
19885
- getInvoicePdfDownloadUrl: {
21491
+ listOrgInvoices: {
21492
+ parameters: {
21493
+ query?: never;
21494
+ header?: never;
21495
+ path?: never;
21496
+ cookie?: never;
21497
+ };
21498
+ requestBody?: never;
21499
+ responses: {
21500
+ /** @description The org's invoices. */
21501
+ 200: {
21502
+ headers: {
21503
+ [name: string]: unknown;
21504
+ };
21505
+ content: {
21506
+ "application/json": components["schemas"]["OrgInvoiceListResponse"];
21507
+ };
21508
+ };
21509
+ /** @description Invalid request or missing project scope. */
21510
+ 400: {
21511
+ headers: {
21512
+ [name: string]: unknown;
21513
+ };
21514
+ content: {
21515
+ "application/json": components["schemas"]["ErrorResponse"];
21516
+ };
21517
+ };
21518
+ };
21519
+ };
21520
+ createInvoiceCheckoutSession: {
19886
21521
  parameters: {
19887
21522
  query?: never;
19888
21523
  header?: never;
@@ -19892,18 +21527,22 @@ export interface operations {
19892
21527
  };
19893
21528
  cookie?: never;
19894
21529
  };
19895
- requestBody?: never;
21530
+ requestBody?: {
21531
+ content: {
21532
+ "application/json": components["schemas"]["CreateInvoiceCheckoutSessionRequest"];
21533
+ };
21534
+ };
19896
21535
  responses: {
19897
- /** @description The PDF download URL. */
21536
+ /** @description The checkout session. */
19898
21537
  200: {
19899
21538
  headers: {
19900
21539
  [name: string]: unknown;
19901
21540
  };
19902
21541
  content: {
19903
- "application/json": components["schemas"]["InvoicePdfDownloadUrlResponse"];
21542
+ "application/json": components["schemas"]["InvoiceCheckoutSessionResponse"];
19904
21543
  };
19905
21544
  };
19906
- /** @description Invalid invoice id. */
21545
+ /** @description Invalid request, unsupported currency, or Dodo not configured. */
19907
21546
  400: {
19908
21547
  headers: {
19909
21548
  [name: string]: unknown;
@@ -19912,7 +21551,7 @@ export interface operations {
19912
21551
  "application/json": components["schemas"]["ErrorResponse"];
19913
21552
  };
19914
21553
  };
19915
- /** @description Invoice not found or has no PDF. */
21554
+ /** @description Invoice not found. */
19916
21555
  404: {
19917
21556
  headers: {
19918
21557
  [name: string]: unknown;
@@ -19921,9 +21560,18 @@ export interface operations {
19921
21560
  "application/json": components["schemas"]["ErrorResponse"];
19922
21561
  };
19923
21562
  };
21563
+ /** @description Invoice has no outstanding amount. */
21564
+ 409: {
21565
+ headers: {
21566
+ [name: string]: unknown;
21567
+ };
21568
+ content: {
21569
+ "application/json": components["schemas"]["ErrorResponse"];
21570
+ };
21571
+ };
19924
21572
  };
19925
21573
  };
19926
- downloadInvoicePdf: {
21574
+ downloadOrgInvoicePdf: {
19927
21575
  parameters: {
19928
21576
  query?: never;
19929
21577
  header?: never;
@@ -19964,7 +21612,7 @@ export interface operations {
19964
21612
  };
19965
21613
  };
19966
21614
  };
19967
- sendInvoice: {
21615
+ downloadOrgInvoiceTaxInvoice: {
19968
21616
  parameters: {
19969
21617
  query?: never;
19970
21618
  header?: never;
@@ -19974,24 +21622,18 @@ export interface operations {
19974
21622
  };
19975
21623
  cookie?: never;
19976
21624
  };
19977
- requestBody?: {
19978
- content: {
19979
- "application/json": {
19980
- is_test_email?: boolean;
19981
- };
19982
- };
19983
- };
21625
+ requestBody?: never;
19984
21626
  responses: {
19985
- /** @description The invoice was sent. */
21627
+ /** @description The tax invoice PDF. */
19986
21628
  200: {
19987
21629
  headers: {
19988
21630
  [name: string]: unknown;
19989
21631
  };
19990
21632
  content: {
19991
- "application/json": components["schemas"]["SendInvoiceResponse"];
21633
+ "application/pdf": string;
19992
21634
  };
19993
21635
  };
19994
- /** @description Invalid request, missing PDF, missing org/billing emails, or no due date. */
21636
+ /** @description Invalid invoice id or payments not configured. */
19995
21637
  400: {
19996
21638
  headers: {
19997
21639
  [name: string]: unknown;
@@ -20000,7 +21642,7 @@ export interface operations {
20000
21642
  "application/json": components["schemas"]["ErrorResponse"];
20001
21643
  };
20002
21644
  };
20003
- /** @description Invoice not found. */
21645
+ /** @description Invoice or its tax invoice not found. */
20004
21646
  404: {
20005
21647
  headers: {
20006
21648
  [name: string]: unknown;
@@ -20988,7 +22630,7 @@ export interface operations {
20988
22630
  };
20989
22631
  };
20990
22632
  };
20991
- createOnboardingOrg: {
22633
+ completeOnboarding: {
20992
22634
  parameters: {
20993
22635
  query?: never;
20994
22636
  header?: never;
@@ -20997,17 +22639,17 @@ export interface operations {
20997
22639
  };
20998
22640
  requestBody?: {
20999
22641
  content: {
21000
- "application/json": components["schemas"]["CreateOnboardingOrgRequest"];
22642
+ "application/json": components["schemas"]["OnboardingCompleteRequest"];
21001
22643
  };
21002
22644
  };
21003
22645
  responses: {
21004
- /** @description The created organisation. */
22646
+ /** @description Created org and project. */
21005
22647
  200: {
21006
22648
  headers: {
21007
22649
  [name: string]: unknown;
21008
22650
  };
21009
22651
  content: {
21010
- "application/json": components["schemas"]["OnboardingOrgResponse"];
22652
+ "application/json": components["schemas"]["OnboardingCompleteResponse"];
21011
22653
  };
21012
22654
  };
21013
22655
  /** @description Invalid request. */
@@ -21019,6 +22661,44 @@ export interface operations {
21019
22661
  "application/json": components["schemas"]["ErrorResponse"];
21020
22662
  };
21021
22663
  };
22664
+ /** @description Caller is not a member of the given organisation. */
22665
+ 403: {
22666
+ headers: {
22667
+ [name: string]: unknown;
22668
+ };
22669
+ content: {
22670
+ "application/json": components["schemas"]["ErrorResponse"];
22671
+ };
22672
+ };
22673
+ };
22674
+ };
22675
+ getOnboardingContext: {
22676
+ parameters: {
22677
+ query?: never;
22678
+ header?: never;
22679
+ path?: never;
22680
+ cookie?: never;
22681
+ };
22682
+ requestBody?: never;
22683
+ responses: {
22684
+ /** @description Onboarding context. */
22685
+ 200: {
22686
+ headers: {
22687
+ [name: string]: unknown;
22688
+ };
22689
+ content: {
22690
+ "application/json": components["schemas"]["OnboardingContextResponse"];
22691
+ };
22692
+ };
22693
+ /** @description No verified email on the session. */
22694
+ 400: {
22695
+ headers: {
22696
+ [name: string]: unknown;
22697
+ };
22698
+ content: {
22699
+ "application/json": components["schemas"]["ErrorResponse"];
22700
+ };
22701
+ };
21022
22702
  };
21023
22703
  };
21024
22704
  listOrderForms: {
@@ -21340,6 +23020,135 @@ export interface operations {
21340
23020
  };
21341
23021
  };
21342
23022
  };
23023
+ listOrgInvites: {
23024
+ parameters: {
23025
+ query?: never;
23026
+ header?: never;
23027
+ path: {
23028
+ /** @description Organization ID. */
23029
+ id: number;
23030
+ };
23031
+ cookie?: never;
23032
+ };
23033
+ requestBody?: never;
23034
+ responses: {
23035
+ /** @description Invites for the organization. */
23036
+ 200: {
23037
+ headers: {
23038
+ [name: string]: unknown;
23039
+ };
23040
+ content: {
23041
+ "application/json": components["schemas"]["OrgInviteListResponse"];
23042
+ };
23043
+ };
23044
+ /** @description Forbidden. */
23045
+ 403: {
23046
+ headers: {
23047
+ [name: string]: unknown;
23048
+ };
23049
+ content: {
23050
+ "application/json": components["schemas"]["ErrorResponse"];
23051
+ };
23052
+ };
23053
+ };
23054
+ };
23055
+ createOrgInvite: {
23056
+ parameters: {
23057
+ query?: never;
23058
+ header?: never;
23059
+ path: {
23060
+ /** @description Organization ID. */
23061
+ id: number;
23062
+ };
23063
+ cookie?: never;
23064
+ };
23065
+ requestBody?: {
23066
+ content: {
23067
+ "application/json": components["schemas"]["CreateOrgInviteRequest"];
23068
+ };
23069
+ };
23070
+ responses: {
23071
+ /** @description The created invite. */
23072
+ 200: {
23073
+ headers: {
23074
+ [name: string]: unknown;
23075
+ };
23076
+ content: {
23077
+ "application/json": components["schemas"]["OrgInviteResponse"];
23078
+ };
23079
+ };
23080
+ /** @description Invalid request. */
23081
+ 400: {
23082
+ headers: {
23083
+ [name: string]: unknown;
23084
+ };
23085
+ content: {
23086
+ "application/json": components["schemas"]["ErrorResponse"];
23087
+ };
23088
+ };
23089
+ /** @description Forbidden. */
23090
+ 403: {
23091
+ headers: {
23092
+ [name: string]: unknown;
23093
+ };
23094
+ content: {
23095
+ "application/json": components["schemas"]["ErrorResponse"];
23096
+ };
23097
+ };
23098
+ /** @description Organization not found. */
23099
+ 404: {
23100
+ headers: {
23101
+ [name: string]: unknown;
23102
+ };
23103
+ content: {
23104
+ "application/json": components["schemas"]["ErrorResponse"];
23105
+ };
23106
+ };
23107
+ };
23108
+ };
23109
+ revokeOrgInvite: {
23110
+ parameters: {
23111
+ query?: never;
23112
+ header?: never;
23113
+ path: {
23114
+ /** @description Organization ID. */
23115
+ id: number;
23116
+ /** @description Invite ID. */
23117
+ invite_id: number;
23118
+ };
23119
+ cookie?: never;
23120
+ };
23121
+ requestBody?: never;
23122
+ responses: {
23123
+ /** @description The revoked invite. */
23124
+ 200: {
23125
+ headers: {
23126
+ [name: string]: unknown;
23127
+ };
23128
+ content: {
23129
+ "application/json": components["schemas"]["OrgInviteRevokeResponse"];
23130
+ };
23131
+ };
23132
+ /** @description Forbidden. */
23133
+ 403: {
23134
+ headers: {
23135
+ [name: string]: unknown;
23136
+ };
23137
+ content: {
23138
+ "application/json": components["schemas"]["ErrorResponse"];
23139
+ };
23140
+ };
23141
+ /** @description Pending invite not found. */
23142
+ 404: {
23143
+ headers: {
23144
+ [name: string]: unknown;
23145
+ };
23146
+ content: {
23147
+ "application/json": components["schemas"]["ErrorResponse"];
23148
+ };
23149
+ };
23150
+ };
23151
+ };
21343
23152
  listOrgMembers: {
21344
23153
  parameters: {
21345
23154
  query?: {
@@ -21359,22 +23168,56 @@ export interface operations {
21359
23168
  };
21360
23169
  requestBody?: never;
21361
23170
  responses: {
21362
- /** @description Paginated organization members. */
23171
+ /** @description Paginated organization members. */
23172
+ 200: {
23173
+ headers: {
23174
+ [name: string]: unknown;
23175
+ };
23176
+ content: {
23177
+ "application/json": components["schemas"]["OrgMembersResponse"];
23178
+ };
23179
+ };
23180
+ /** @description Invalid request. */
23181
+ 400: {
23182
+ headers: {
23183
+ [name: string]: unknown;
23184
+ };
23185
+ content: {
23186
+ "application/json": components["schemas"]["ErrorResponse"];
23187
+ };
23188
+ };
23189
+ /** @description Forbidden. */
23190
+ 403: {
23191
+ headers: {
23192
+ [name: string]: unknown;
23193
+ };
23194
+ content: {
23195
+ "application/json": components["schemas"]["ErrorResponse"];
23196
+ };
23197
+ };
23198
+ };
23199
+ };
23200
+ removeOrgMember: {
23201
+ parameters: {
23202
+ query?: never;
23203
+ header?: never;
23204
+ path: {
23205
+ /** @description Organization ID. */
23206
+ id: number;
23207
+ /** @description Supabase user id of the member. */
23208
+ user_id: string;
23209
+ };
23210
+ cookie?: never;
23211
+ };
23212
+ requestBody?: never;
23213
+ responses: {
23214
+ /** @description Removal result. */
21363
23215
  200: {
21364
23216
  headers: {
21365
23217
  [name: string]: unknown;
21366
23218
  };
21367
23219
  content: {
21368
- "application/json": components["schemas"]["OrgMembersResponse"];
21369
- };
21370
- };
21371
- /** @description Invalid request. */
21372
- 400: {
21373
- headers: {
21374
- [name: string]: unknown;
21375
- };
21376
- content: {
21377
- "application/json": components["schemas"]["ErrorResponse"];
23220
+ "application/json": components["schemas"]["RemoveMemberResponse"];
21378
23221
  };
21379
23222
  };
21380
23223
  /** @description Forbidden. */
@@ -21420,6 +23263,39 @@ export interface operations {
21420
23263
  };
21421
23264
  };
21422
23265
  };
23266
+ resolveMembership: {
23267
+ parameters: {
23268
+ query?: never;
23269
+ header?: never;
23270
+ path?: never;
23271
+ cookie?: never;
23272
+ };
23273
+ requestBody?: {
23274
+ content: {
23275
+ "application/json": components["schemas"]["ResolveMembershipRequest"];
23276
+ };
23277
+ };
23278
+ responses: {
23279
+ /** @description Org ids granted via invites and domain match. */
23280
+ 200: {
23281
+ headers: {
23282
+ [name: string]: unknown;
23283
+ };
23284
+ content: {
23285
+ "application/json": components["schemas"]["ResolveMembershipResponse"];
23286
+ };
23287
+ };
23288
+ /** @description Invalid request. */
23289
+ 400: {
23290
+ headers: {
23291
+ [name: string]: unknown;
23292
+ };
23293
+ content: {
23294
+ "application/json": components["schemas"]["ErrorResponse"];
23295
+ };
23296
+ };
23297
+ };
23298
+ };
21423
23299
  listPlanAssignments: {
21424
23300
  parameters: {
21425
23301
  query?: {
@@ -21645,7 +23521,7 @@ export interface operations {
21645
23521
  "application/json": components["schemas"]["CreateProjectResponse"];
21646
23522
  };
21647
23523
  };
21648
- /** @description Invalid repository name. */
23524
+ /** @description Invalid repository name or slug already taken. */
21649
23525
  400: {
21650
23526
  headers: {
21651
23527
  [name: string]: unknown;
@@ -21654,6 +23530,15 @@ export interface operations {
21654
23530
  "application/json": components["schemas"]["SimpleErrorResponse"];
21655
23531
  };
21656
23532
  };
23533
+ /** @description Caller does not belong to the organisation. */
23534
+ 403: {
23535
+ headers: {
23536
+ [name: string]: unknown;
23537
+ };
23538
+ content: {
23539
+ "application/json": components["schemas"]["SimpleErrorResponse"];
23540
+ };
23541
+ };
21657
23542
  /** @description Failed to create project. */
21658
23543
  500: {
21659
23544
  headers: {
@@ -21722,7 +23607,6 @@ export interface operations {
21722
23607
  name?: string;
21723
23608
  has_email_reporting?: boolean;
21724
23609
  has_branching_enabled?: boolean;
21725
- playwright_config?: unknown;
21726
23610
  default_branch?: string;
21727
23611
  owners?: string[];
21728
23612
  persistent_branches?: string[];
@@ -21832,10 +23716,8 @@ export interface operations {
21832
23716
  query?: {
21833
23717
  /** @description Page number (1-indexed). */
21834
23718
  page?: number;
21835
- /** @description Items per page (max 100). Defaults to 20. */
23719
+ /** @description Items per page (max 100). */
21836
23720
  per_page?: number;
21837
- /** @description Deprecated alias for `per_page`. */
21838
- pageSize?: number;
21839
23721
  /** @description Look-back window in days (max 365). */
21840
23722
  days?: number;
21841
23723
  /** @description Filter branches by status, or `all`. */
@@ -21910,10 +23792,10 @@ export interface operations {
21910
23792
  listProjectMergeRequests: {
21911
23793
  parameters: {
21912
23794
  query?: {
21913
- /** @description Max merge requests to return. */
21914
- limit?: number;
21915
- /** @description Number of merge requests to skip. */
21916
- offset?: number | null;
23795
+ /** @description Page number (1-indexed). */
23796
+ page?: number;
23797
+ /** @description Items per page (max 100). */
23798
+ per_page?: number;
21917
23799
  };
21918
23800
  header?: never;
21919
23801
  path: {
@@ -21994,51 +23876,6 @@ export interface operations {
21994
23876
  };
21995
23877
  };
21996
23878
  };
21997
- updateProjectPlaywrightConfig: {
21998
- parameters: {
21999
- query?: never;
22000
- header?: never;
22001
- path: {
22002
- /** @description Project ID. */
22003
- id: number;
22004
- };
22005
- cookie?: never;
22006
- };
22007
- requestBody?: {
22008
- content: {
22009
- "application/json": {
22010
- /** @description ID of the originating agent tool call. */
22011
- request_id?: number | null;
22012
- /** @description Agent tool result carrying the config. */
22013
- tool_result: {
22014
- result?: unknown;
22015
- } & {
22016
- [key: string]: unknown;
22017
- };
22018
- };
22019
- };
22020
- };
22021
- responses: {
22022
- /** @description Config updated. */
22023
- 200: {
22024
- headers: {
22025
- [name: string]: unknown;
22026
- };
22027
- content: {
22028
- "application/json": components["schemas"]["UpdatePlaywrightConfigResponse"];
22029
- };
22030
- };
22031
- /** @description Missing tool result content. */
22032
- 400: {
22033
- headers: {
22034
- [name: string]: unknown;
22035
- };
22036
- content: {
22037
- "application/json": components["schemas"]["ErrorResponse"];
22038
- };
22039
- };
22040
- };
22041
- };
22042
23879
  checkProjectRepoExists: {
22043
23880
  parameters: {
22044
23881
  query?: never;
@@ -22277,6 +24114,47 @@ export interface operations {
22277
24114
  };
22278
24115
  };
22279
24116
  };
24117
+ getProjectUsage: {
24118
+ parameters: {
24119
+ query?: {
24120
+ /** @description Start of the window, inclusive (ISO 8601 date or datetime, UTC). Defaults to `days` before now. */
24121
+ start_date?: string | null;
24122
+ /** @description End of the window, exclusive (ISO 8601 date or datetime, UTC). Defaults to now. */
24123
+ end_date?: string | null;
24124
+ /** @description Window size in days ending at `end_date` (1-365, default 30). Ignored when `start_date` is set. */
24125
+ days?: number;
24126
+ /** @description Filter to one workload class (e.g. "triage"). Pass "none" for spend with no purpose set. Omit for all classes. */
24127
+ purpose?: string;
24128
+ };
24129
+ header?: never;
24130
+ path: {
24131
+ /** @description Project ID. */
24132
+ id: number;
24133
+ };
24134
+ cookie?: never;
24135
+ };
24136
+ requestBody?: never;
24137
+ responses: {
24138
+ /** @description Usage for the window. */
24139
+ 200: {
24140
+ headers: {
24141
+ [name: string]: unknown;
24142
+ };
24143
+ content: {
24144
+ "application/json": components["schemas"]["ProjectUsageResponse"];
24145
+ };
24146
+ };
24147
+ /** @description Project not found. */
24148
+ 404: {
24149
+ headers: {
24150
+ [name: string]: unknown;
24151
+ };
24152
+ content: {
24153
+ "application/json": components["schemas"]["ErrorResponse"];
24154
+ };
24155
+ };
24156
+ };
24157
+ };
22280
24158
  checkBranchExists: {
22281
24159
  parameters: {
22282
24160
  query: {
@@ -22671,6 +24549,124 @@ export interface operations {
22671
24549
  };
22672
24550
  };
22673
24551
  };
24552
+ listRecentPages: {
24553
+ parameters: {
24554
+ query?: never;
24555
+ header?: never;
24556
+ path?: never;
24557
+ cookie?: never;
24558
+ };
24559
+ requestBody?: never;
24560
+ responses: {
24561
+ /** @description Recently viewed dashboard destinations. */
24562
+ 200: {
24563
+ headers: {
24564
+ [name: string]: unknown;
24565
+ };
24566
+ content: {
24567
+ "application/json": components["schemas"]["RecentPagesResponse"];
24568
+ };
24569
+ };
24570
+ /** @description Only signed-in users can access recent pages. */
24571
+ 403: {
24572
+ headers: {
24573
+ [name: string]: unknown;
24574
+ };
24575
+ content: {
24576
+ "application/json": components["schemas"]["ErrorResponse"];
24577
+ };
24578
+ };
24579
+ /** @description Recent pages storage is unavailable. */
24580
+ 503: {
24581
+ headers: {
24582
+ [name: string]: unknown;
24583
+ };
24584
+ content: {
24585
+ "application/json": components["schemas"]["ErrorResponse"];
24586
+ };
24587
+ };
24588
+ };
24589
+ };
24590
+ recordRecentPage: {
24591
+ parameters: {
24592
+ query?: never;
24593
+ header?: never;
24594
+ path?: never;
24595
+ cookie?: never;
24596
+ };
24597
+ requestBody?: {
24598
+ content: {
24599
+ "application/json": components["schemas"]["RecordRecentPageRequest"];
24600
+ };
24601
+ };
24602
+ responses: {
24603
+ /** @description The recorded dashboard destination. */
24604
+ 200: {
24605
+ headers: {
24606
+ [name: string]: unknown;
24607
+ };
24608
+ content: {
24609
+ "application/json": components["schemas"]["RecordRecentPageResponse"];
24610
+ };
24611
+ };
24612
+ /** @description The destination is invalid. */
24613
+ 400: {
24614
+ headers: {
24615
+ [name: string]: unknown;
24616
+ };
24617
+ content: {
24618
+ "application/json": components["schemas"]["ErrorResponse"];
24619
+ };
24620
+ };
24621
+ /** @description Only signed-in users can record recent pages. */
24622
+ 403: {
24623
+ headers: {
24624
+ [name: string]: unknown;
24625
+ };
24626
+ content: {
24627
+ "application/json": components["schemas"]["ErrorResponse"];
24628
+ };
24629
+ };
24630
+ /** @description Project not found. */
24631
+ 404: {
24632
+ headers: {
24633
+ [name: string]: unknown;
24634
+ };
24635
+ content: {
24636
+ "application/json": components["schemas"]["ErrorResponse"];
24637
+ };
24638
+ };
24639
+ /** @description Recent pages storage is unavailable. */
24640
+ 503: {
24641
+ headers: {
24642
+ [name: string]: unknown;
24643
+ };
24644
+ content: {
24645
+ "application/json": components["schemas"]["ErrorResponse"];
24646
+ };
24647
+ };
24648
+ };
24649
+ };
24650
+ listReporterTypes: {
24651
+ parameters: {
24652
+ query?: never;
24653
+ header?: never;
24654
+ path?: never;
24655
+ cookie?: never;
24656
+ };
24657
+ requestBody?: never;
24658
+ responses: {
24659
+ /** @description Reporter capabilities. */
24660
+ 200: {
24661
+ headers: {
24662
+ [name: string]: unknown;
24663
+ };
24664
+ content: {
24665
+ "application/json": components["schemas"]["ReporterTypesResponse"];
24666
+ };
24667
+ };
24668
+ };
24669
+ };
22674
24670
  listRequests: {
22675
24671
  parameters: {
22676
24672
  query?: {
@@ -23691,6 +25687,35 @@ export interface operations {
23691
25687
  };
23692
25688
  };
23693
25689
  };
25690
+ createMyMemberships: {
25691
+ parameters: {
25692
+ query?: never;
25693
+ header?: never;
25694
+ path?: never;
25695
+ cookie?: never;
25696
+ };
25697
+ requestBody?: never;
25698
+ responses: {
25699
+ /** @description Memberships created from pending invites. */
25700
+ 200: {
25701
+ headers: {
25702
+ [name: string]: unknown;
25703
+ };
25704
+ content: {
25705
+ "application/json": components["schemas"]["MembershipListResponse"];
25706
+ };
25707
+ };
25708
+ /** @description No verified email on the session. */
25709
+ 401: {
25710
+ headers: {
25711
+ [name: string]: unknown;
25712
+ };
25713
+ content: {
25714
+ "application/json": components["schemas"]["ErrorResponse"];
25715
+ };
25716
+ };
25717
+ };
25718
+ };
23694
25719
  listMySlackLinks: {
23695
25720
  parameters: {
23696
25721
  query?: never;