@empiricalrun/playwright-utils 0.56.0 → 0.58.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,90 @@ 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
+ };
1437
+ "/api/beta/alerts/events": {
1438
+ parameters: {
1439
+ query?: never;
1440
+ header?: never;
1441
+ path?: never;
1442
+ cookie?: never;
1443
+ };
1444
+ /**
1445
+ * 🧪 List recent alert events
1446
+ * @description Returns the scoped project's alert opened and resolved events, newest first.
1447
+ */
1448
+ get: operations["listRecentAlertEvents"];
1449
+ put?: never;
1450
+ post?: never;
1451
+ delete?: never;
1452
+ options?: never;
1453
+ head?: never;
1454
+ patch?: never;
1455
+ trace?: never;
1456
+ };
1313
1457
  "/api/v1/telemetry/overlay-dismissals": {
1314
1458
  parameters: {
1315
1459
  query?: never;
@@ -1390,6 +1534,26 @@ export interface paths {
1390
1534
  patch?: never;
1391
1535
  trace?: never;
1392
1536
  };
1537
+ "/api/chat-sessions/{id}/alarms": {
1538
+ parameters: {
1539
+ query?: never;
1540
+ header?: never;
1541
+ path?: never;
1542
+ cookie?: never;
1543
+ };
1544
+ /**
1545
+ * 🤖 List a chat session's upcoming alarms
1546
+ * @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.
1547
+ */
1548
+ get: operations["listChatSessionAlarms"];
1549
+ put?: never;
1550
+ post?: never;
1551
+ delete?: never;
1552
+ options?: never;
1553
+ head?: never;
1554
+ patch?: never;
1555
+ trace?: never;
1556
+ };
1393
1557
  "/api/chat-sessions/{id}/threads": {
1394
1558
  parameters: {
1395
1559
  query?: never;
@@ -1405,7 +1569,7 @@ export interface paths {
1405
1569
  put?: never;
1406
1570
  /**
1407
1571
  * 🤖 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.
1572
+ * @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
1573
  */
1410
1574
  post: operations["createChatSessionThread"];
1411
1575
  delete?: never;
@@ -1732,26 +1896,6 @@ export interface paths {
1732
1896
  patch?: never;
1733
1897
  trace?: never;
1734
1898
  };
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
1899
  "/api/agent-workflows": {
1756
1900
  parameters: {
1757
1901
  query?: never;
@@ -1888,6 +2032,30 @@ export interface paths {
1888
2032
  patch: operations["updateApiKey"];
1889
2033
  trace?: never;
1890
2034
  };
2035
+ "/api/beta/alert-rules/{id}": {
2036
+ parameters: {
2037
+ query?: never;
2038
+ header?: never;
2039
+ path?: never;
2040
+ cookie?: never;
2041
+ };
2042
+ get?: never;
2043
+ put?: never;
2044
+ post?: never;
2045
+ /**
2046
+ * 🛡️ 🧪 Delete an alert rule
2047
+ * @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.
2048
+ */
2049
+ delete: operations["deleteAlertRule"];
2050
+ options?: never;
2051
+ head?: never;
2052
+ /**
2053
+ * 🛡️ 🧪 Update an alert rule
2054
+ * @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.
2055
+ */
2056
+ patch: operations["updateAlertRule"];
2057
+ trace?: never;
2058
+ };
1891
2059
  "/api/chat-sessions": {
1892
2060
  parameters: {
1893
2061
  query?: never;
@@ -1936,6 +2104,26 @@ export interface paths {
1936
2104
  patch: operations["patchChatSession"];
1937
2105
  trace?: never;
1938
2106
  };
2107
+ "/api/chat-sessions/{id}/branches": {
2108
+ parameters: {
2109
+ query?: never;
2110
+ header?: never;
2111
+ path?: never;
2112
+ cookie?: never;
2113
+ };
2114
+ /**
2115
+ * ⚙️ Get a session's branches and their pull requests
2116
+ * @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.
2117
+ */
2118
+ get: operations["getChatSessionBranches"];
2119
+ put?: never;
2120
+ post?: never;
2121
+ delete?: never;
2122
+ options?: never;
2123
+ head?: never;
2124
+ patch?: never;
2125
+ trace?: never;
2126
+ };
1939
2127
  "/api/chat-sessions/{id}/close": {
1940
2128
  parameters: {
1941
2129
  query?: never;
@@ -2045,7 +2233,7 @@ export interface paths {
2045
2233
  };
2046
2234
  /**
2047
2235
  * ⚙️ Get the session diff
2048
- * @description Resolves the session's working diff (live branch comparison, falling back to a merged PR).
2236
+ * @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
2237
  */
2050
2238
  get: operations["getChatSessionDiff"];
2051
2239
  put?: never;
@@ -2297,6 +2485,26 @@ export interface paths {
2297
2485
  patch?: never;
2298
2486
  trace?: never;
2299
2487
  };
2488
+ "/api/chat-sessions/{id}/snapshot": {
2489
+ parameters: {
2490
+ query?: never;
2491
+ header?: never;
2492
+ path?: never;
2493
+ cookie?: never;
2494
+ };
2495
+ /**
2496
+ * ⚙️ Get a session's status snapshot
2497
+ * @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`.
2498
+ */
2499
+ get: operations["getChatSessionSnapshot"];
2500
+ put?: never;
2501
+ post?: never;
2502
+ delete?: never;
2503
+ options?: never;
2504
+ head?: never;
2505
+ patch?: never;
2506
+ trace?: never;
2507
+ };
2300
2508
  "/api/chat-sessions/{id}/threads/{thread_id}": {
2301
2509
  parameters: {
2302
2510
  query?: never;
@@ -2397,6 +2605,26 @@ export interface paths {
2397
2605
  patch?: never;
2398
2606
  trace?: never;
2399
2607
  };
2608
+ "/api/dodo/webhook": {
2609
+ parameters: {
2610
+ query?: never;
2611
+ header?: never;
2612
+ path?: never;
2613
+ cookie?: never;
2614
+ };
2615
+ get?: never;
2616
+ put?: never;
2617
+ /**
2618
+ * Dodo Payments webhook
2619
+ * @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.
2620
+ */
2621
+ post: operations["dodoPaymentsWebhook"];
2622
+ delete?: never;
2623
+ options?: never;
2624
+ head?: never;
2625
+ patch?: never;
2626
+ trace?: never;
2627
+ };
2400
2628
  "/api/environment-variables": {
2401
2629
  parameters: {
2402
2630
  query?: never;
@@ -2855,7 +3083,7 @@ export interface paths {
2855
3083
  get?: never;
2856
3084
  put?: never;
2857
3085
  /**
2858
- * ⚙️ Merge reporter installations
3086
+ * 🛡️ Merge reporter installations
2859
3087
  * @description Merges an unlinked reporter installation into an existing one.
2860
3088
  */
2861
3089
  post: operations["mergeReporterInstallations"];
@@ -3281,7 +3509,7 @@ export interface paths {
3281
3509
  patch?: never;
3282
3510
  trace?: never;
3283
3511
  };
3284
- "/api/invoices/reminders/upcoming": {
3512
+ "/api/invoices/org": {
3285
3513
  parameters: {
3286
3514
  query?: never;
3287
3515
  header?: never;
@@ -3289,10 +3517,10 @@ export interface paths {
3289
3517
  cookie?: never;
3290
3518
  };
3291
3519
  /**
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.
3520
+ * 🛡️ List the org's invoices
3521
+ * @description Returns all of the scoped project's org's sent invoices (paid and unpaid), newest first, with document availability flags.
3294
3522
  */
3295
- get: operations["listUpcomingInvoiceReminders"];
3523
+ get: operations["listOrgInvoices"];
3296
3524
  put?: never;
3297
3525
  post?: never;
3298
3526
  delete?: never;
@@ -3301,43 +3529,39 @@ export interface paths {
3301
3529
  patch?: never;
3302
3530
  trace?: never;
3303
3531
  };
3304
- "/api/jira/installations": {
3532
+ "/api/invoices/org/{id}/checkout-session": {
3305
3533
  parameters: {
3306
3534
  query?: never;
3307
3535
  header?: never;
3308
3536
  path?: never;
3309
3537
  cookie?: never;
3310
3538
  };
3311
- /**
3312
- * ⚙️ List Jira installations
3313
- * @description Lists Jira app installations for an organisation.
3314
- */
3315
- get: operations["listJiraInstallations"];
3539
+ get?: never;
3316
3540
  put?: never;
3317
3541
  /**
3318
- * ⚙️ Create a Jira installation
3319
- * @description Stores a Jira app installation and optionally registers its webhook.
3542
+ * 🛡️ Create a checkout session to pay an invoice
3543
+ * @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
3544
  */
3321
- post: operations["createJiraInstallation"];
3545
+ post: operations["createInvoiceCheckoutSession"];
3322
3546
  delete?: never;
3323
3547
  options?: never;
3324
3548
  head?: never;
3325
3549
  patch?: never;
3326
3550
  trace?: never;
3327
3551
  };
3328
- "/api/jira/installations/{id}/project-mappings": {
3552
+ "/api/invoices/org/{id}/pdf/download": {
3329
3553
  parameters: {
3330
3554
  query?: never;
3331
3555
  header?: never;
3332
3556
  path?: never;
3333
3557
  cookie?: never;
3334
3558
  };
3335
- get?: never;
3336
3559
  /**
3337
- * ⚙️ Update Jira project mappings
3338
- * @description Replaces the Jira-to-Empirical project mappings for an installation.
3560
+ * 🛡️ Download an invoice PDF
3561
+ * @description Streams the PDF of one of the scoped project's org's sent invoices.
3339
3562
  */
3340
- put: operations["updateJiraProjectMappings"];
3563
+ get: operations["downloadOrgInvoicePdf"];
3564
+ put?: never;
3341
3565
  post?: never;
3342
3566
  delete?: never;
3343
3567
  options?: never;
@@ -3345,7 +3569,7 @@ export interface paths {
3345
3569
  patch?: never;
3346
3570
  trace?: never;
3347
3571
  };
3348
- "/api/jira/installations/{id}/refresh-webhook": {
3572
+ "/api/invoices/org/{id}/razorpay-order": {
3349
3573
  parameters: {
3350
3574
  query?: never;
3351
3575
  header?: never;
@@ -3355,17 +3579,17 @@ export interface paths {
3355
3579
  get?: never;
3356
3580
  put?: never;
3357
3581
  /**
3358
- * ⚙️ Refresh a Jira webhook
3359
- * @description Re-registers the Jira webhook and extends its expiry for an installation.
3582
+ * 🛡️ Create a Razorpay order to pay an INR invoice
3583
+ * @description Creates a Razorpay order for the outstanding amount of one of the scoped project's org's sent INR invoices. The browser opens Razorpay Standard Checkout with the returned order and key ids; the resulting payment is confirmed via the razorpay-verify endpoint. Orders are not stored; a new one is created per attempt.
3360
3584
  */
3361
- post: operations["refreshJiraWebhook"];
3585
+ post: operations["createInvoiceRazorpayOrder"];
3362
3586
  delete?: never;
3363
3587
  options?: never;
3364
3588
  head?: never;
3365
3589
  patch?: never;
3366
3590
  trace?: never;
3367
3591
  };
3368
- "/api/jira/installations/{id}/revoke": {
3592
+ "/api/invoices/org/{id}/razorpay-verify": {
3369
3593
  parameters: {
3370
3594
  query?: never;
3371
3595
  header?: never;
@@ -3375,17 +3599,17 @@ export interface paths {
3375
3599
  get?: never;
3376
3600
  put?: never;
3377
3601
  /**
3378
- * ⚙️ Revoke a Jira installation
3379
- * @description Deletes a Jira app installation.
3602
+ * 🛡️ Verify a Razorpay payment and settle the invoice
3603
+ * @description Verifies the Standard Checkout signature for a payment on one of the scoped project's org's sent invoices, cross-checks the order and payment against Razorpay's API, and mirrors the payment onto the invoice (paid status, paid amount, payment ref). Idempotent per payment: redelivering a settled payment is a no-op.
3380
3604
  */
3381
- post: operations["revokeJiraInstallation"];
3605
+ post: operations["verifyInvoiceRazorpayPayment"];
3382
3606
  delete?: never;
3383
3607
  options?: never;
3384
3608
  head?: never;
3385
3609
  patch?: never;
3386
3610
  trace?: never;
3387
3611
  };
3388
- "/api/jira/installations/{id}/validate": {
3612
+ "/api/invoices/org/{id}/tax-invoice/download": {
3389
3613
  parameters: {
3390
3614
  query?: never;
3391
3615
  header?: never;
@@ -3393,10 +3617,10 @@ export interface paths {
3393
3617
  cookie?: never;
3394
3618
  };
3395
3619
  /**
3396
- * ⚙️ Validate a Jira installation
3397
- * @description Validates the stored Jira token against Atlassian and reports webhook status.
3620
+ * 🛡️ Download the tax invoice for a paid invoice
3621
+ * @description Streams the payment processor's (Dodo, the merchant of record) tax invoice PDF for the invoice's most recent settling payment.
3398
3622
  */
3399
- get: operations["validateJiraInstallation"];
3623
+ get: operations["downloadOrgInvoiceTaxInvoice"];
3400
3624
  put?: never;
3401
3625
  post?: never;
3402
3626
  delete?: never;
@@ -3405,24 +3629,148 @@ export interface paths {
3405
3629
  patch?: never;
3406
3630
  trace?: never;
3407
3631
  };
3408
- "/api/jira/installations/{id}/webhook-expires-at": {
3632
+ "/api/invoices/reminders/upcoming": {
3409
3633
  parameters: {
3410
3634
  query?: never;
3411
3635
  header?: never;
3412
3636
  path?: never;
3413
3637
  cookie?: never;
3414
3638
  };
3415
- get?: never;
3639
+ /**
3640
+ * 🛡️ List upcoming invoice reminders
3641
+ * @description Returns read-only invoice reminder candidates for the next window. This endpoint does not send emails or stamp reminder timestamps.
3642
+ */
3643
+ get: operations["listUpcomingInvoiceReminders"];
3416
3644
  put?: never;
3417
3645
  post?: never;
3418
3646
  delete?: never;
3419
3647
  options?: never;
3420
3648
  head?: never;
3421
- /**
3422
- * ⚙️ Update Jira webhook expiry
3423
- * @description Sets the webhook expiry timestamp for an installation.
3424
- */
3425
- patch: operations["updateJiraWebhookExpiresAt"];
3649
+ patch?: never;
3650
+ trace?: never;
3651
+ };
3652
+ "/api/jira/installations": {
3653
+ parameters: {
3654
+ query?: never;
3655
+ header?: never;
3656
+ path?: never;
3657
+ cookie?: never;
3658
+ };
3659
+ /**
3660
+ * ⚙️ List Jira installations
3661
+ * @description Lists Jira app installations for an organisation.
3662
+ */
3663
+ get: operations["listJiraInstallations"];
3664
+ put?: never;
3665
+ /**
3666
+ * ⚙️ Create a Jira installation
3667
+ * @description Stores a Jira app installation and optionally registers its webhook.
3668
+ */
3669
+ post: operations["createJiraInstallation"];
3670
+ delete?: never;
3671
+ options?: never;
3672
+ head?: never;
3673
+ patch?: never;
3674
+ trace?: never;
3675
+ };
3676
+ "/api/jira/installations/{id}/project-mappings": {
3677
+ parameters: {
3678
+ query?: never;
3679
+ header?: never;
3680
+ path?: never;
3681
+ cookie?: never;
3682
+ };
3683
+ get?: never;
3684
+ /**
3685
+ * ⚙️ Update Jira project mappings
3686
+ * @description Replaces the Jira-to-Empirical project mappings for an installation.
3687
+ */
3688
+ put: operations["updateJiraProjectMappings"];
3689
+ post?: never;
3690
+ delete?: never;
3691
+ options?: never;
3692
+ head?: never;
3693
+ patch?: never;
3694
+ trace?: never;
3695
+ };
3696
+ "/api/jira/installations/{id}/refresh-webhook": {
3697
+ parameters: {
3698
+ query?: never;
3699
+ header?: never;
3700
+ path?: never;
3701
+ cookie?: never;
3702
+ };
3703
+ get?: never;
3704
+ put?: never;
3705
+ /**
3706
+ * ⚙️ Refresh a Jira webhook
3707
+ * @description Re-registers the Jira webhook and extends its expiry for an installation.
3708
+ */
3709
+ post: operations["refreshJiraWebhook"];
3710
+ delete?: never;
3711
+ options?: never;
3712
+ head?: never;
3713
+ patch?: never;
3714
+ trace?: never;
3715
+ };
3716
+ "/api/jira/installations/{id}/revoke": {
3717
+ parameters: {
3718
+ query?: never;
3719
+ header?: never;
3720
+ path?: never;
3721
+ cookie?: never;
3722
+ };
3723
+ get?: never;
3724
+ put?: never;
3725
+ /**
3726
+ * ⚙️ Revoke a Jira installation
3727
+ * @description Deletes a Jira app installation.
3728
+ */
3729
+ post: operations["revokeJiraInstallation"];
3730
+ delete?: never;
3731
+ options?: never;
3732
+ head?: never;
3733
+ patch?: never;
3734
+ trace?: never;
3735
+ };
3736
+ "/api/jira/installations/{id}/validate": {
3737
+ parameters: {
3738
+ query?: never;
3739
+ header?: never;
3740
+ path?: never;
3741
+ cookie?: never;
3742
+ };
3743
+ /**
3744
+ * ⚙️ Validate a Jira installation
3745
+ * @description Validates the stored Jira token against Atlassian and reports webhook status.
3746
+ */
3747
+ get: operations["validateJiraInstallation"];
3748
+ put?: never;
3749
+ post?: never;
3750
+ delete?: never;
3751
+ options?: never;
3752
+ head?: never;
3753
+ patch?: never;
3754
+ trace?: never;
3755
+ };
3756
+ "/api/jira/installations/{id}/webhook-expires-at": {
3757
+ parameters: {
3758
+ query?: never;
3759
+ header?: never;
3760
+ path?: never;
3761
+ cookie?: never;
3762
+ };
3763
+ get?: never;
3764
+ put?: never;
3765
+ post?: never;
3766
+ delete?: never;
3767
+ options?: never;
3768
+ head?: never;
3769
+ /**
3770
+ * ⚙️ Update Jira webhook expiry
3771
+ * @description Sets the webhook expiry timestamp for an installation.
3772
+ */
3773
+ patch: operations["updateJiraWebhookExpiresAt"];
3426
3774
  trace?: never;
3427
3775
  };
3428
3776
  "/api/linear/installations": {
@@ -3641,7 +3989,7 @@ export interface paths {
3641
3989
  patch?: never;
3642
3990
  trace?: never;
3643
3991
  };
3644
- "/api/onboarding": {
3992
+ "/api/onboarding/complete": {
3645
3993
  parameters: {
3646
3994
  query?: never;
3647
3995
  header?: never;
@@ -3651,10 +3999,30 @@ export interface paths {
3651
3999
  get?: never;
3652
4000
  put?: never;
3653
4001
  /**
3654
- * Create onboarding organisation
3655
- * @description Creates an organisation for the authenticated user.
4002
+ * Create an org and/or a project
4003
+ * @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
4004
  */
3657
- post: operations["createOnboardingOrg"];
4005
+ post: operations["completeOnboarding"];
4006
+ delete?: never;
4007
+ options?: never;
4008
+ head?: never;
4009
+ patch?: never;
4010
+ trace?: never;
4011
+ };
4012
+ "/api/onboarding/context": {
4013
+ parameters: {
4014
+ query?: never;
4015
+ header?: never;
4016
+ path?: never;
4017
+ cookie?: never;
4018
+ };
4019
+ /**
4020
+ * Get onboarding context
4021
+ * @description Returns the caller's pending invites and whether their email domain can be offered for auto-join.
4022
+ */
4023
+ get: operations["getOnboardingContext"];
4024
+ put?: never;
4025
+ post?: never;
3658
4026
  delete?: never;
3659
4027
  options?: never;
3660
4028
  head?: never;
@@ -3789,6 +4157,50 @@ export interface paths {
3789
4157
  patch: operations["updateOrg"];
3790
4158
  trace?: never;
3791
4159
  };
4160
+ "/api/orgs/{id}/invites": {
4161
+ parameters: {
4162
+ query?: never;
4163
+ header?: never;
4164
+ path?: never;
4165
+ cookie?: never;
4166
+ };
4167
+ /**
4168
+ * 🛡️ List organization invites
4169
+ * @description Lists invites for the organization, newest first. Restricted to org members and super admins.
4170
+ */
4171
+ get: operations["listOrgInvites"];
4172
+ put?: never;
4173
+ /**
4174
+ * 🛡️ Invite a user to an organization
4175
+ * @description Creates an email-bound invite: the recipient joins by signing in with the invited email address. Restricted to org members and super admins.
4176
+ */
4177
+ post: operations["createOrgInvite"];
4178
+ delete?: never;
4179
+ options?: never;
4180
+ head?: never;
4181
+ patch?: never;
4182
+ trace?: never;
4183
+ };
4184
+ "/api/orgs/{id}/invites/{invite_id}": {
4185
+ parameters: {
4186
+ query?: never;
4187
+ header?: never;
4188
+ path?: never;
4189
+ cookie?: never;
4190
+ };
4191
+ get?: never;
4192
+ put?: never;
4193
+ post?: never;
4194
+ /**
4195
+ * 🛡️ Revoke a pending invite
4196
+ * @description Revokes a pending invite so signing in with that email no longer joins the organization. Restricted to org members and super admins.
4197
+ */
4198
+ delete: operations["revokeOrgInvite"];
4199
+ options?: never;
4200
+ head?: never;
4201
+ patch?: never;
4202
+ trace?: never;
4203
+ };
3792
4204
  "/api/orgs/{id}/members": {
3793
4205
  parameters: {
3794
4206
  query?: never;
@@ -3809,6 +4221,26 @@ export interface paths {
3809
4221
  patch?: never;
3810
4222
  trace?: never;
3811
4223
  };
4224
+ "/api/orgs/{id}/members/{user_id}": {
4225
+ parameters: {
4226
+ query?: never;
4227
+ header?: never;
4228
+ path?: never;
4229
+ cookie?: never;
4230
+ };
4231
+ get?: never;
4232
+ put?: never;
4233
+ post?: never;
4234
+ /**
4235
+ * 🛡️ Remove a member from an organization
4236
+ * @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.
4237
+ */
4238
+ delete: operations["removeOrgMember"];
4239
+ options?: never;
4240
+ head?: never;
4241
+ patch?: never;
4242
+ trace?: never;
4243
+ };
3812
4244
  "/api/orgs/by-email-domain": {
3813
4245
  parameters: {
3814
4246
  query?: never;
@@ -3829,6 +4261,26 @@ export interface paths {
3829
4261
  patch?: never;
3830
4262
  trace?: never;
3831
4263
  };
4264
+ "/api/orgs/resolve-membership": {
4265
+ parameters: {
4266
+ query?: never;
4267
+ header?: never;
4268
+ path?: never;
4269
+ cookie?: never;
4270
+ };
4271
+ get?: never;
4272
+ put?: never;
4273
+ /**
4274
+ * ⚙️ Resolve org membership for a signed-in user
4275
+ * @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.
4276
+ */
4277
+ post: operations["resolveMembership"];
4278
+ delete?: never;
4279
+ options?: never;
4280
+ head?: never;
4281
+ patch?: never;
4282
+ trace?: never;
4283
+ };
3832
4284
  "/api/plan-assignments": {
3833
4285
  parameters: {
3834
4286
  query?: never;
@@ -3892,7 +4344,7 @@ export interface paths {
3892
4344
  put?: never;
3893
4345
  /**
3894
4346
  * ⚙️ Create a project
3895
- * @description Creates a new project (super-admin only).
4347
+ * @description Creates a new project in an organisation the caller belongs to (super admins can create in any org).
3896
4348
  */
3897
4349
  post: operations["createProject"];
3898
4350
  delete?: never;
@@ -4025,26 +4477,6 @@ export interface paths {
4025
4477
  patch?: never;
4026
4478
  trace?: never;
4027
4479
  };
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
4480
  "/api/projects/{id}/repo-exists": {
4049
4481
  parameters: {
4050
4482
  query?: never;
@@ -4129,6 +4561,26 @@ export interface paths {
4129
4561
  patch?: never;
4130
4562
  trace?: never;
4131
4563
  };
4564
+ "/api/projects/{id}/usage": {
4565
+ parameters: {
4566
+ query?: never;
4567
+ header?: never;
4568
+ path?: never;
4569
+ cookie?: never;
4570
+ };
4571
+ /**
4572
+ * ⚙️ Get metered agent usage for a project
4573
+ * @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.
4574
+ */
4575
+ get: operations["getProjectUsage"];
4576
+ put?: never;
4577
+ post?: never;
4578
+ delete?: never;
4579
+ options?: never;
4580
+ head?: never;
4581
+ patch?: never;
4582
+ trace?: never;
4583
+ };
4132
4584
  "/api/projects/branches/check": {
4133
4585
  parameters: {
4134
4586
  query?: never;
@@ -4313,6 +4765,50 @@ export interface paths {
4313
4765
  patch?: never;
4314
4766
  trace?: never;
4315
4767
  };
4768
+ "/api/recent-pages": {
4769
+ parameters: {
4770
+ query?: never;
4771
+ header?: never;
4772
+ path?: never;
4773
+ cookie?: never;
4774
+ };
4775
+ /**
4776
+ * List recently viewed pages
4777
+ * @description Returns the user's 10 most recently viewed accessible dashboard destinations from the last 14 days.
4778
+ */
4779
+ get: operations["listRecentPages"];
4780
+ /**
4781
+ * Record a recently viewed page
4782
+ * @description Records or refreshes one project/page destination with a sliding 14-day expiry.
4783
+ */
4784
+ put: operations["recordRecentPage"];
4785
+ post?: never;
4786
+ delete?: never;
4787
+ options?: never;
4788
+ head?: never;
4789
+ patch?: never;
4790
+ trace?: never;
4791
+ };
4792
+ "/api/reporter-types": {
4793
+ parameters: {
4794
+ query?: never;
4795
+ header?: never;
4796
+ path?: never;
4797
+ cookie?: never;
4798
+ };
4799
+ /**
4800
+ * ⚙️ 🧪 List reporter capabilities
4801
+ * @description Lists reporter types, supported destinations and events, and inbound-reply capabilities.
4802
+ */
4803
+ get: operations["listReporterTypes"];
4804
+ put?: never;
4805
+ post?: never;
4806
+ delete?: never;
4807
+ options?: never;
4808
+ head?: never;
4809
+ patch?: never;
4810
+ trace?: never;
4811
+ };
4316
4812
  "/api/requests": {
4317
4813
  parameters: {
4318
4814
  query?: never;
@@ -4642,6 +5138,26 @@ export interface paths {
4642
5138
  patch?: never;
4643
5139
  trace?: never;
4644
5140
  };
5141
+ "/api/users/me/memberships": {
5142
+ parameters: {
5143
+ query?: never;
5144
+ header?: never;
5145
+ path?: never;
5146
+ cookie?: never;
5147
+ };
5148
+ get?: never;
5149
+ put?: never;
5150
+ /**
5151
+ * ⚙️ Join organizations from pending invites
5152
+ * @description Creates org memberships for the current user by accepting every pending invite addressed to their verified email.
5153
+ */
5154
+ post: operations["createMyMemberships"];
5155
+ delete?: never;
5156
+ options?: never;
5157
+ head?: never;
5158
+ patch?: never;
5159
+ trace?: never;
5160
+ };
4645
5161
  "/api/users/slack-link": {
4646
5162
  parameters: {
4647
5163
  query?: never;
@@ -4807,6 +5323,102 @@ export interface components {
4807
5323
  /** @description Total number of pages. */
4808
5324
  total_pages: number;
4809
5325
  };
5326
+ OrgInvoiceListResponse: {
5327
+ /** @description Response payload. */
5328
+ data: {
5329
+ invoices: components["schemas"]["OrgInvoice"][];
5330
+ };
5331
+ };
5332
+ OrgInvoice: {
5333
+ /** @description Invoice ID. */
5334
+ id: number;
5335
+ /** @description Invoice number. */
5336
+ number: string;
5337
+ /** @description ISO 8601 issue date. */
5338
+ issue_date: string | null;
5339
+ /** @description ISO 8601 due date. */
5340
+ due_date: string | null;
5341
+ /** @description Invoice currency code. */
5342
+ currency: string;
5343
+ /** @description Invoice amount in minor units. */
5344
+ amount_in_cents: number;
5345
+ /** @description Payment status (`paid`, `outstanding`, …). */
5346
+ paid_status: string;
5347
+ /** @description ISO 8601 timestamp when fully paid. */
5348
+ paid_at: string | null;
5349
+ /** @description Whether the invoice PDF is available. */
5350
+ has_pdf: boolean;
5351
+ /** @description Whether a payment-processor tax invoice is available for download. */
5352
+ has_tax_invoice: boolean;
5353
+ /** @description Whether this invoice can be paid online (unpaid and in a supported currency). */
5354
+ payable: boolean;
5355
+ /**
5356
+ * @description Which provider pays this invoice's currency (USD via Dodo checkout sessions, INR via Razorpay Standard Checkout), or null if none does. Drives the Pay button's checkout flow.
5357
+ * @enum {string|null}
5358
+ */
5359
+ payment_provider: "dodo" | "razorpay" | null;
5360
+ /** @description Whether an unpaid invoice is past its due date plus the reminder grace period. Always false for paid invoices. */
5361
+ past_reminder_date: boolean;
5362
+ };
5363
+ ErrorResponse: {
5364
+ /** @description Always null for error responses. */
5365
+ data: unknown;
5366
+ /** @description Error details. */
5367
+ error: {
5368
+ /** @description Human-readable error message. */
5369
+ message: string;
5370
+ };
5371
+ };
5372
+ InvoiceCheckoutSessionResponse: {
5373
+ /** @description Response payload. */
5374
+ data: {
5375
+ /** @description Single-use hosted checkout URL (expires in 24h). */
5376
+ checkout_url: string;
5377
+ /** @description Dodo checkout session ID. */
5378
+ session_id: string;
5379
+ };
5380
+ };
5381
+ CreateInvoiceCheckoutSessionRequest: {
5382
+ /**
5383
+ * Format: uri
5384
+ * @description Dashboard URL Dodo redirects to after payment (gets payment_id and status query params appended).
5385
+ */
5386
+ return_url: string;
5387
+ };
5388
+ InvoiceRazorpayOrderResponse: {
5389
+ /** @description Response payload. */
5390
+ data: {
5391
+ /** @description Razorpay order ID. */
5392
+ order_id: string;
5393
+ /** @description Order amount in paise (the outstanding amount). */
5394
+ amount: number;
5395
+ /** @description Order currency (INR). */
5396
+ currency: string;
5397
+ /** @description Publishable Razorpay key id the browser passes to Standard Checkout. */
5398
+ key_id: string;
5399
+ /** @description Org billing email, for checkout prefill. */
5400
+ billing_email: string | null;
5401
+ /** @description Org name, for checkout prefill. */
5402
+ org_name: string | null;
5403
+ };
5404
+ };
5405
+ VerifyInvoiceRazorpayPaymentResponse: {
5406
+ /** @description Response payload. */
5407
+ data: {
5408
+ /** @description Invoice paid status after settling. */
5409
+ paid_status: string;
5410
+ /** @description Total settled amount in paise after this payment. */
5411
+ paid_minor: number;
5412
+ };
5413
+ };
5414
+ VerifyInvoiceRazorpayPaymentRequest: {
5415
+ /** @description Order id returned by razorpay-order. */
5416
+ razorpay_order_id: string;
5417
+ /** @description Payment id from the checkout success handler. */
5418
+ razorpay_payment_id: string;
5419
+ /** @description Checkout signature: hex HMAC-SHA256 of `order_id|payment_id`. */
5420
+ razorpay_signature: string;
5421
+ };
4810
5422
  InvoiceListResponse: {
4811
5423
  /** @description The page of invoices. */
4812
5424
  data: {
@@ -4932,15 +5544,6 @@ export interface components {
4932
5544
  invoice: components["schemas"]["InvoiceWithOrg"];
4933
5545
  };
4934
5546
  };
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
5547
  InvoiceSimpleError: {
4945
5548
  /** @description Human-readable error message. */
4946
5549
  error: string;
@@ -5535,102 +6138,6 @@ export interface components {
5535
6138
  /** @description Error detail when ingestion fails. */
5536
6139
  error?: unknown;
5537
6140
  };
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
6141
  CreateProjectResponse: {
5635
6142
  /** @description Response payload. */
5636
6143
  data: {
@@ -5647,6 +6154,8 @@ export interface components {
5647
6154
  /** @description Project slug. */
5648
6155
  slug: string;
5649
6156
  };
6157
+ /** @description Whether the backing GitHub repo was created. When false the project exists but repo provisioning failed and needs a retry. */
6158
+ repo_created: boolean;
5650
6159
  };
5651
6160
  };
5652
6161
  SimpleErrorResponse: {
@@ -5718,10 +6227,6 @@ export interface components {
5718
6227
  has_branching_enabled: boolean | null;
5719
6228
  /** @description Branches kept across runs. */
5720
6229
  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
6230
  /** @description Whether email reporting is enabled. */
5726
6231
  has_email_reporting: boolean | null;
5727
6232
  /** @description Project owner emails. */
@@ -5784,10 +6289,6 @@ export interface components {
5784
6289
  has_branching_enabled: boolean | null;
5785
6290
  /** @description Branches kept across runs. */
5786
6291
  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
6292
  /** @description Whether email reporting is enabled. */
5792
6293
  has_email_reporting: boolean | null;
5793
6294
  /** @description Project owner emails. */
@@ -5876,16 +6377,9 @@ export interface components {
5876
6377
  };
5877
6378
  };
5878
6379
  MergeRequestsResponse: {
5879
- /** @description Always true. */
5880
- success: boolean;
5881
6380
  /** @description The page of merge requests. */
5882
6381
  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;
6382
+ pagination: components["schemas"]["Pagination"];
5889
6383
  };
5890
6384
  MergeRequest: {
5891
6385
  /** @description Merge request ID. */
@@ -5994,19 +6488,6 @@ export interface components {
5994
6488
  exists: boolean;
5995
6489
  };
5996
6490
  };
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
6491
  TestCasesSyncTriggeredResponse: {
6011
6492
  /** @description Response payload. */
6012
6493
  data: {
@@ -6016,6 +6497,55 @@ export interface components {
6016
6497
  commit_sha: string;
6017
6498
  };
6018
6499
  };
6500
+ ProjectUsageResponse: {
6501
+ /** @description Response payload. */
6502
+ data: {
6503
+ project_id: number;
6504
+ /** @description Window start actually used (ISO 8601, UTC). */
6505
+ start_date: string;
6506
+ /** @description Window end actually used (ISO 8601, UTC). */
6507
+ end_date: string;
6508
+ total: components["schemas"]["ProjectUsageTotal"];
6509
+ /** @description One row per (source, agent, model, purpose), highest cost first. */
6510
+ breakdown: components["schemas"]["ProjectUsageBreakdownRow"][];
6511
+ };
6512
+ };
6513
+ ProjectUsageTotal: {
6514
+ /** @description Raw provider cost, no markup. */
6515
+ cost_usd: number;
6516
+ /** @description Uncached input tokens (excludes cache reads). */
6517
+ tokens_in: number;
6518
+ /** @description Output tokens. */
6519
+ tokens_out: number;
6520
+ /** @description Cache-read input tokens. */
6521
+ cache_read: number;
6522
+ /** @description Cache-write input tokens. */
6523
+ cache_write: number;
6524
+ /** @description Distinct chat sessions contributing to this row. */
6525
+ sessions: number;
6526
+ };
6527
+ ProjectUsageBreakdownRow: {
6528
+ /** @description "main" or "subagent". */
6529
+ source: string;
6530
+ /** @description Subagent name; null for main-agent spend. */
6531
+ agent: string | null;
6532
+ /** @description Model, verbatim (incl. "@default" suffixes). */
6533
+ model: string | null;
6534
+ /** @description Workload class of the originating session. */
6535
+ purpose: string | null;
6536
+ /** @description Raw provider cost, no markup. */
6537
+ cost_usd: number;
6538
+ /** @description Uncached input tokens (excludes cache reads). */
6539
+ tokens_in: number;
6540
+ /** @description Output tokens. */
6541
+ tokens_out: number;
6542
+ /** @description Cache-read input tokens. */
6543
+ cache_read: number;
6544
+ /** @description Cache-write input tokens. */
6545
+ cache_write: number;
6546
+ /** @description Distinct chat sessions contributing to this row. */
6547
+ sessions: number;
6548
+ };
6019
6549
  ProjectListResponse: {
6020
6550
  /** @description Response payload. */
6021
6551
  data: {
@@ -6050,10 +6580,6 @@ export interface components {
6050
6580
  has_branching_enabled: boolean | null;
6051
6581
  /** @description Branches kept across runs. */
6052
6582
  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
6583
  /** @description Whether email reporting is enabled. */
6058
6584
  has_email_reporting: boolean | null;
6059
6585
  /** @description Project owner emails. */
@@ -6261,6 +6787,35 @@ export interface components {
6261
6787
  /** @description Repository name at the target owner. */
6262
6788
  target_repo_name: string;
6263
6789
  };
6790
+ RecentPagesResponse: {
6791
+ /** @description Response payload. */
6792
+ data: {
6793
+ recent_pages: components["schemas"]["RecentPage"][];
6794
+ };
6795
+ };
6796
+ RecentPage: {
6797
+ page_id: string;
6798
+ project_id: number | null;
6799
+ path: string | null;
6800
+ title: string | null;
6801
+ viewed_at: string;
6802
+ };
6803
+ RecordRecentPageResponse: {
6804
+ /** @description Response payload. */
6805
+ data: {
6806
+ recent_page: components["schemas"]["RecentPage"];
6807
+ };
6808
+ };
6809
+ RecordRecentPageRequest: {
6810
+ /** @description Stable dashboard page ID. */
6811
+ page_id: string;
6812
+ /** @description Project for a project-scoped page; null for global pages. */
6813
+ project_id?: number | null;
6814
+ /** @description Exact project-relative pathname, or absolute pathname for a global page. */
6815
+ path?: string;
6816
+ /** @description Current document title for this exact destination. */
6817
+ title?: string;
6818
+ };
6264
6819
  OrgListResponse: {
6265
6820
  /** @description Response payload. */
6266
6821
  data: {
@@ -6323,10 +6878,6 @@ export interface components {
6323
6878
  has_branching_enabled: boolean | null;
6324
6879
  /** @description Branches kept warm/persistent. */
6325
6880
  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
6881
  /** @description Whether email reporting is enabled. */
6331
6882
  has_email_reporting: boolean | null;
6332
6883
  /** @description Project owner identifiers. */
@@ -6374,6 +6925,22 @@ export interface components {
6374
6925
  }[];
6375
6926
  };
6376
6927
  };
6928
+ ResolveMembershipResponse: {
6929
+ /** @description Response payload. */
6930
+ data: {
6931
+ /** @description All org ids the user now belongs to via invites and domain match. */
6932
+ org_ids: number[];
6933
+ };
6934
+ };
6935
+ ResolveMembershipRequest: {
6936
+ /**
6937
+ * Format: email
6938
+ * @description Verified email of the user.
6939
+ */
6940
+ email: string;
6941
+ /** @description Supabase user id to grant membership to. */
6942
+ user_id: string;
6943
+ };
6377
6944
  OrgUpdateResponse: {
6378
6945
  /** @description Response payload. */
6379
6946
  data: {
@@ -6453,25 +7020,113 @@ export interface components {
6453
7020
  /** @description Last sign-in timestamp (ISO 8601). */
6454
7021
  last_sign_in_at: string | null;
6455
7022
  };
6456
- OnboardingOrgResponse: {
7023
+ OrgInviteResponse: {
7024
+ /** @description Response payload. */
7025
+ data: {
7026
+ invite: components["schemas"]["OrgInvite"];
7027
+ /** @description Whether the invite email was delivered. */
7028
+ email_sent: boolean;
7029
+ };
7030
+ };
7031
+ OrgInvite: {
7032
+ /** @description Invite ID. */
7033
+ id: number;
7034
+ /** @description Organization ID. */
7035
+ org_id: number;
7036
+ /** @description Invited email (lowercased). */
7037
+ email: string;
7038
+ /** @description User id of the inviting member. */
7039
+ invited_by: string;
7040
+ /**
7041
+ * @description Invite lifecycle status.
7042
+ * @enum {string}
7043
+ */
7044
+ status: "pending" | "accepted" | "revoked";
7045
+ /** @description Creation timestamp (ISO 8601). */
7046
+ created_at: string;
7047
+ /** @description Acceptance timestamp (ISO 8601), if accepted. */
7048
+ accepted_at: string | null;
7049
+ };
7050
+ CreateOrgInviteRequest: {
7051
+ /**
7052
+ * Format: email
7053
+ * @description Email address to invite.
7054
+ */
7055
+ email: string;
7056
+ };
7057
+ OrgInviteListResponse: {
7058
+ /** @description Response payload. */
7059
+ data: {
7060
+ invites: components["schemas"]["OrgInvite"][];
7061
+ };
7062
+ };
7063
+ OrgInviteRevokeResponse: {
7064
+ /** @description Response payload. */
7065
+ data: {
7066
+ invite: components["schemas"]["OrgInvite"];
7067
+ };
7068
+ };
7069
+ RemoveMemberResponse: {
7070
+ /** @description Response payload. */
7071
+ data: {
7072
+ removed: boolean;
7073
+ };
7074
+ };
7075
+ OnboardingContextResponse: {
7076
+ /** @description Response payload. */
7077
+ data: {
7078
+ invites: {
7079
+ /** @description Invite ID. */
7080
+ id: number;
7081
+ /** @description Organisation ID. */
7082
+ org_id: number;
7083
+ /** @description Organisation name. */
7084
+ org_name: string;
7085
+ }[];
7086
+ /** @description The caller's verified email. */
7087
+ email: string;
7088
+ /** @description Domain of the caller's email (may be empty). */
7089
+ email_domain: string;
7090
+ /** @description Whether the caller's email domain can be offered for auto-join (false for public providers like gmail.com). */
7091
+ domain_join_available: boolean;
7092
+ };
7093
+ };
7094
+ OnboardingCompleteResponse: {
6457
7095
  /** @description Response payload. */
6458
7096
  data: {
6459
- /** @description The created organisation. */
6460
7097
  org: {
6461
7098
  /** @description Organisation ID. */
6462
7099
  id: number;
6463
7100
  /** @description Organisation name. */
6464
7101
  name: string;
6465
- /** @description Email domains associated with the org. */
7102
+ /** @description Auto-join email domains on the org. */
6466
7103
  email_domains: string[];
6467
7104
  };
7105
+ project: {
7106
+ /** @description Project ID. */
7107
+ id: number;
7108
+ /** @description Project name. */
7109
+ name: string;
7110
+ /** @description Project slug. */
7111
+ slug: string;
7112
+ /** @description Backing repository name. */
7113
+ repo_name: string;
7114
+ };
7115
+ /** @description Whether the GitHub repo was created. When false the project exists but repo provisioning failed and needs a retry. */
7116
+ repo_created: boolean;
6468
7117
  };
6469
7118
  };
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;
7119
+ OnboardingCompleteRequest: {
7120
+ /** @description Existing organisation to add the project to. */
7121
+ org_id?: number;
7122
+ /** @description Name of a new organisation to create. */
7123
+ org_name?: string;
7124
+ /** @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. */
7125
+ allow_domain_join?: boolean;
7126
+ /** @description Display name of the project. */
7127
+ project_name: string;
7128
+ /** @description URL slug for the project. */
7129
+ project_slug: string;
6475
7130
  };
6476
7131
  SnoozeListResponse: {
6477
7132
  /** @description The page of snoozes. */
@@ -6607,10 +7262,6 @@ export interface components {
6607
7262
  branch_name: string;
6608
7263
  /** @description Branch this session forks. */
6609
7264
  base_branch: string;
6610
- /** @description Associated PR number, if opened. */
6611
- pr_number: number | null;
6612
- /** @description PR status. */
6613
- pr_status: string;
6614
7265
  /** @description Session mode (e.g. `chat`). */
6615
7266
  mode: string;
6616
7267
  /** @description Source surface (e.g. `request`). */
@@ -6722,10 +7373,6 @@ export interface components {
6722
7373
  branch_name: string;
6723
7374
  /** @description Branch this session forks. */
6724
7375
  base_branch: string;
6725
- /** @description Associated PR number, if opened. */
6726
- pr_number: number | null;
6727
- /** @description PR status. */
6728
- pr_status: string;
6729
7376
  /** @description Session mode (e.g. `chat`). */
6730
7377
  mode: string;
6731
7378
  /** @description Source surface (e.g. `request`). */
@@ -6785,10 +7432,6 @@ export interface components {
6785
7432
  branch_name: string;
6786
7433
  /** @description Branch this session forks. */
6787
7434
  base_branch: string;
6788
- /** @description Associated PR number, if opened. */
6789
- pr_number: number | null;
6790
- /** @description PR status. */
6791
- pr_status: string;
6792
7435
  /** @description Session mode (e.g. `chat`). */
6793
7436
  mode: string;
6794
7437
  /** @description Source surface (e.g. `request`). */
@@ -6814,6 +7457,30 @@ export interface components {
6814
7457
  /** @description Outboxed first message awaiting delivery. */
6815
7458
  pending_first_message?: unknown;
6816
7459
  };
7460
+ ReporterTypesResponse: {
7461
+ /** @description Response payload. */
7462
+ data: {
7463
+ reporter_types: {
7464
+ /** @enum {string} */
7465
+ id: "slack_run_status" | "slack_creator_dm" | "email_run_report" | "github_check" | "github_pr_comment";
7466
+ display_name: string;
7467
+ /** @enum {string} */
7468
+ audience: "broadcast" | "initiator";
7469
+ recipient: {
7470
+ /** @enum {string} */
7471
+ mode: "destinations" | "selector";
7472
+ supported_destination_kinds: ("slack_channel" | "slack_user" | "email" | "github_repository")[];
7473
+ supported_selectors: "run_creator"[];
7474
+ };
7475
+ supported_events: ("run_queued" | "run_started" | "run_progress" | "run_ended" | "run_cancelled" | "run_interrupted" | "run_error")[];
7476
+ inbound_replies: {
7477
+ /** @enum {string} */
7478
+ availability: "unavailable" | "planned" | "available";
7479
+ supported_policies: ("disabled" | "bot_mention" | "configured_recipients" | "org_members")[];
7480
+ };
7481
+ }[];
7482
+ };
7483
+ };
6817
7484
  SandboxSnapshotListResponse: {
6818
7485
  /** @description Response payload. */
6819
7486
  data: {
@@ -7245,10 +7912,6 @@ export interface components {
7245
7912
  branch_name: string;
7246
7913
  /** @description Branch the working branch was created from. */
7247
7914
  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
7915
  /** @description Session mode (e.g. `chat`). */
7253
7916
  mode: string;
7254
7917
  /** @description Origin of the session (`agent-workflow` here). */
@@ -7617,6 +8280,10 @@ export interface components {
7617
8280
  /** @description HTTP status returned by Slack, if any. */
7618
8281
  upstream_status?: number;
7619
8282
  };
8283
+ SlackProxyError: {
8284
+ /** @description Error message. */
8285
+ error: string;
8286
+ };
7620
8287
  ChatSessionUsersResponse: {
7621
8288
  /** @description Response payload. */
7622
8289
  data: components["schemas"]["ChatSessionUserDetail"][];
@@ -7660,7 +8327,7 @@ export interface components {
7660
8327
  };
7661
8328
  ChatSessionListResponse: {
7662
8329
  /** @description The page of chat sessions. */
7663
- data: components["schemas"]["ChatSessionWithUser"][];
8330
+ data: components["schemas"]["ChatSessionListItem"][];
7664
8331
  /** @description Pagination + resolved filter state. */
7665
8332
  pagination: {
7666
8333
  /** @description Current page. */
@@ -7680,7 +8347,7 @@ export interface components {
7680
8347
  };
7681
8348
  };
7682
8349
  };
7683
- ChatSessionWithUser: {
8350
+ ChatSessionListItem: {
7684
8351
  /** @description Chat session ID. */
7685
8352
  id: number;
7686
8353
  /** @description Session title. */
@@ -7695,12 +8362,6 @@ export interface components {
7695
8362
  project_id: number;
7696
8363
  /** @description Working branch name. */
7697
8364
  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
8365
  /** @description Session mode (e.g. chat). */
7705
8366
  mode: string;
7706
8367
  /** @description Origin of the session. */
@@ -7709,10 +8370,6 @@ export interface components {
7709
8370
  source_identifier: string;
7710
8371
  /** @description Requested model. */
7711
8372
  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
8373
  /** @description Whether the agent is awaiting user input. */
7717
8374
  ask_user_for_input: boolean | null;
7718
8375
  /** @description Langfuse trace ID. */
@@ -7723,8 +8380,6 @@ export interface components {
7723
8380
  feature_flags: string[];
7724
8381
  /** @description Bound environment ID. */
7725
8382
  environment_id: number | null;
7726
- /** @description Durable outbox row for the first message. */
7727
- pending_first_message?: unknown;
7728
8383
  /** @description Resolved Supabase details for the creator. */
7729
8384
  created_by_user_detail?: {
7730
8385
  /** @description Supabase user ID. */
@@ -7736,6 +8391,16 @@ export interface components {
7736
8391
  /** @description Avatar URL. */
7737
8392
  picture: string;
7738
8393
  } | null;
8394
+ /** @description Number of the session's most recently updated PR, if any. */
8395
+ pr_number: number | null;
8396
+ /** @description Status of the session's most recently updated PR ('unopened' when it has none). */
8397
+ pr_status: string;
8398
+ /** @description Name of the owning project. */
8399
+ project_name: string | null;
8400
+ /** @description Repository name of the owning project. */
8401
+ project_repo_name: string | null;
8402
+ /** @description Repository owner of the owning project. */
8403
+ project_repo_owner: string | null;
7739
8404
  };
7740
8405
  ChatSessionCreateResponse: {
7741
8406
  /** @description Response payload. */
@@ -7760,10 +8425,6 @@ export interface components {
7760
8425
  branch_name: string;
7761
8426
  /** @description Base branch name. */
7762
8427
  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
8428
  /** @description Session mode (e.g. chat). */
7768
8429
  mode: string;
7769
8430
  /** @description Origin of the session. */
@@ -7871,6 +8532,59 @@ export interface components {
7871
8532
  chat_session: components["schemas"]["ChatSessionWithUser"];
7872
8533
  };
7873
8534
  };
8535
+ ChatSessionWithUser: {
8536
+ /** @description Chat session ID. */
8537
+ id: number;
8538
+ /** @description Session title. */
8539
+ title: string | null;
8540
+ /** @description Creator user ID. */
8541
+ created_by: string | null;
8542
+ /** @description Creation timestamp (ISO). */
8543
+ created_at: string;
8544
+ /** @description Last update timestamp (ISO). */
8545
+ updated_at: string;
8546
+ /** @description Owning project ID. */
8547
+ project_id: number;
8548
+ /** @description Working branch name. */
8549
+ branch_name: string;
8550
+ /** @description Base branch name. */
8551
+ base_branch: string;
8552
+ /** @description Session mode (e.g. chat). */
8553
+ mode: string;
8554
+ /** @description Origin of the session. */
8555
+ source: string;
8556
+ /** @description Source-specific identifier. */
8557
+ source_identifier: string;
8558
+ /** @description Requested model. */
8559
+ model: string | null;
8560
+ /** @description Opaque agent chat state. */
8561
+ chat_state?: unknown;
8562
+ /** @description Tests impacted by this session. */
8563
+ impacted_tests?: unknown;
8564
+ /** @description Whether the agent is awaiting user input. */
8565
+ ask_user_for_input: boolean | null;
8566
+ /** @description Langfuse trace ID. */
8567
+ langfuse_trace_id: string | null;
8568
+ /** @description Whether the session is closed. */
8569
+ is_closed: boolean | null;
8570
+ /** @description Feature flags enabled for the session. */
8571
+ feature_flags: string[];
8572
+ /** @description Bound environment ID. */
8573
+ environment_id: number | null;
8574
+ /** @description Durable outbox row for the first message. */
8575
+ pending_first_message?: unknown;
8576
+ /** @description Resolved Supabase details for the creator. */
8577
+ created_by_user_detail?: {
8578
+ /** @description Supabase user ID. */
8579
+ id: string;
8580
+ /** @description User email. */
8581
+ email: string;
8582
+ /** @description Display name. */
8583
+ name: string;
8584
+ /** @description Avatar URL. */
8585
+ picture: string;
8586
+ } | null;
8587
+ };
7874
8588
  ChatSessionPatchResponse: {
7875
8589
  /** @description Response payload. */
7876
8590
  data: {
@@ -7943,6 +8657,45 @@ export interface components {
7943
8657
  picture: string;
7944
8658
  } | null;
7945
8659
  };
8660
+ ChatSessionBranchesResponse: {
8661
+ /** @description Response payload. */
8662
+ data: components["schemas"]["ChatSessionBranch"][];
8663
+ };
8664
+ ChatSessionBranch: {
8665
+ /** @description Branch name. */
8666
+ branch_name: string;
8667
+ /** @description Repository host. */
8668
+ repo_host: string;
8669
+ /** @description Repository owner. */
8670
+ repo_owner: string;
8671
+ /** @description Repository name. */
8672
+ repo_name: string;
8673
+ /** @description When the branch was registered (ISO). */
8674
+ created_at: string;
8675
+ /** @description Pull requests opened from this branch, oldest first. Empty when no PR exists yet. */
8676
+ pull_requests: components["schemas"]["ChatSessionBranchPullRequest"][];
8677
+ };
8678
+ ChatSessionBranchPullRequest: {
8679
+ /** @description Pull request number. */
8680
+ number: number;
8681
+ /**
8682
+ * @description Current pull request status.
8683
+ * @enum {string}
8684
+ */
8685
+ status: "unopened" | "open" | "opened" | "closed" | "merged";
8686
+ /** @description Pull request URL. */
8687
+ url: string;
8688
+ /** @description Branch the pull request merges into. */
8689
+ base_branch: string;
8690
+ /** @description Merge timestamp (ISO), null if not merged. */
8691
+ merged_at: string | null;
8692
+ /** @description When the head branch was deleted (ISO), null while it exists. */
8693
+ head_branch_deleted_at: string | null;
8694
+ /** @description Creation timestamp (ISO). */
8695
+ created_at: string;
8696
+ /** @description Last update timestamp (ISO). */
8697
+ updated_at: string;
8698
+ };
7946
8699
  ChatSessionCommitDiffResponse: {
7947
8700
  /** @description Response payload. */
7948
8701
  data: {
@@ -8038,6 +8791,17 @@ export interface components {
8038
8791
  /** @description Current sandbox state, or null when none. */
8039
8792
  sandbox?: unknown;
8040
8793
  };
8794
+ ChatSessionSnapshotResponse: {
8795
+ data: components["schemas"]["ChatSessionSnapshot"];
8796
+ };
8797
+ ChatSessionSnapshot: {
8798
+ /** @description Current sandbox status event. */
8799
+ sandbox?: unknown;
8800
+ /** @description Agent lifecycle state (active run ids, is_working). */
8801
+ lifecycle?: unknown;
8802
+ /** @description All user messages for the session. */
8803
+ user_messages: unknown[];
8804
+ };
8041
8805
  ChatSessionCloseResponse: {
8042
8806
  /** @description Response payload. */
8043
8807
  data: {
@@ -8126,6 +8890,21 @@ export interface components {
8126
8890
  /** @description Error message, or null on success. */
8127
8891
  error: string | null;
8128
8892
  };
8893
+ ChatSessionAlarms: {
8894
+ /** @description Upcoming self-scheduled wake-ups (set_alarm), soonest first. */
8895
+ alarms: {
8896
+ /** @description Opaque id of the scheduled alarm. */
8897
+ alarm_id: string;
8898
+ /** @description The scheduled wake-up time, as an ISO 8601 timestamp. */
8899
+ wake_at: string;
8900
+ /** @description The note the agent will receive back when the alarm fires. */
8901
+ message: string;
8902
+ }[];
8903
+ };
8904
+ ChatSessionAlarmsError: {
8905
+ /** @description Human-readable error message. */
8906
+ error: string;
8907
+ };
8129
8908
  GithubCommitDiffResponse: {
8130
8909
  /** @description Response payload. */
8131
8910
  data: {
@@ -8904,6 +9683,10 @@ export interface components {
8904
9683
  /** @description Distinct tags across the project's test cases. */
8905
9684
  tags: string[];
8906
9685
  };
9686
+ TestCasePlaywrightProjectsResponse: {
9687
+ /** @description Distinct Playwright projects across the project's synced test cases. */
9688
+ playwright_projects: string[];
9689
+ };
8907
9690
  TestCaseListResponse: {
8908
9691
  /** @description Test cases plus the project's sync status. */
8909
9692
  data: {
@@ -9703,6 +10486,12 @@ export interface components {
9703
10486
  /** @description Log line text. */
9704
10487
  message: string;
9705
10488
  };
10489
+ TestRunTriageSessionResponse: {
10490
+ /** @description Response payload. */
10491
+ data: {
10492
+ chat_session: components["schemas"]["ChatSession"];
10493
+ };
10494
+ };
9706
10495
  CancelTestRunResponse: {
9707
10496
  /** @description Confirmation message indicating the test run was cancelled. */
9708
10497
  message: string;
@@ -10425,6 +11214,7 @@ export interface components {
10425
11214
  diagnosis: string | null;
10426
11215
  recommendation: string | null;
10427
11216
  fingerprint: components["schemas"]["Fingerprint"];
11217
+ matcher: components["schemas"]["FailureGroupMatcher"];
10428
11218
  resolved_at: string | null;
10429
11219
  first_seen_at: string;
10430
11220
  last_seen_at: string;
@@ -10446,6 +11236,17 @@ export interface components {
10446
11236
  };
10447
11237
  }[];
10448
11238
  } | null;
11239
+ FailureGroupMatcher: {
11240
+ /** @description Plain-JS async function source: `async ({ testRun, testCase, traceUtils }) => boolean`. */
11241
+ source: string;
11242
+ /** @description Human-readable summary of what the matcher matches and why; re-articulated on every edit. */
11243
+ description: string;
11244
+ /**
11245
+ * @description Input-contract version the source was written against.
11246
+ * @default 1
11247
+ */
11248
+ contract_version: number;
11249
+ } | null;
10449
11250
  MembersByTestRunResponse: {
10450
11251
  /** @description Response payload. */
10451
11252
  data: {
@@ -10473,37 +11274,9 @@ export interface components {
10473
11274
  FailureGroupResponse: {
10474
11275
  /** @description Response payload. */
10475
11276
  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
- };
11277
+ failure_group: components["schemas"]["FailureGroup"];
10495
11278
  };
10496
11279
  };
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
11280
  FailureGroupActivityResponse: {
10508
11281
  /** @description Response payload. */
10509
11282
  data: {
@@ -10513,7 +11286,7 @@ export interface components {
10513
11286
  FailureGroupActivityEvent: {
10514
11287
  id: string;
10515
11288
  /** @enum {string} */
10516
- type: "created" | "edited" | "status_changed" | "merged" | "member_added" | "member_removed";
11289
+ type: "created" | "edited" | "status_changed" | "merged" | "member_added" | "member_seen" | "member_removed";
10517
11290
  at: string;
10518
11291
  source_run_id: number | null;
10519
11292
  changed_fields: string[] | null;
@@ -10568,6 +11341,14 @@ export interface components {
10568
11341
  detached_at: string | null;
10569
11342
  detached_by: string | null;
10570
11343
  };
11344
+ FailureGroupConflictResponse: {
11345
+ data: {
11346
+ failure_group: components["schemas"]["FailureGroup"];
11347
+ };
11348
+ error: {
11349
+ message: string;
11350
+ };
11351
+ };
10571
11352
  CreateFailureGroupRequest: {
10572
11353
  /** @description Human label for the failure mode (the group_key). */
10573
11354
  label: string;
@@ -10595,6 +11376,18 @@ export interface components {
10595
11376
  };
10596
11377
  }[];
10597
11378
  } | null;
11379
+ /** @description The group's matcher function for future auto-matching. Attribution is derived from the caller, never the body. */
11380
+ matcher?: {
11381
+ /** @description Plain-JS async function source: `async ({ testRun, testCase, traceUtils }) => boolean`. */
11382
+ source: string;
11383
+ /** @description Human-readable summary of what the matcher matches and why; re-articulated on every edit. */
11384
+ description: string;
11385
+ /**
11386
+ * @description Input-contract version the source was written against.
11387
+ * @default 1
11388
+ */
11389
+ contract_version: number;
11390
+ } | null;
10598
11391
  /** @description Run this diagnosis is based on (provenance). */
10599
11392
  source_run_id?: number | null;
10600
11393
  };
@@ -10621,58 +11414,334 @@ export interface components {
10621
11414
  };
10622
11415
  }[];
10623
11416
  } | null;
10624
- source_run_id?: number | null;
11417
+ /** @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). */
11418
+ matcher?: {
11419
+ /** @description Plain-JS async function source: `async ({ testRun, testCase, traceUtils }) => boolean`. */
11420
+ source: string;
11421
+ /** @description Human-readable summary of what the matcher matches and why; re-articulated on every edit. */
11422
+ description: string;
11423
+ /**
11424
+ * @description Input-contract version the source was written against.
11425
+ * @default 1
11426
+ */
11427
+ contract_version: number;
11428
+ } | null;
11429
+ source_run_id?: number | null;
11430
+ };
11431
+ FailureGroupMemberResponse: {
11432
+ /** @description Response payload. */
11433
+ data: {
11434
+ member: components["schemas"]["FailureGroupMemberEntry"];
11435
+ };
11436
+ };
11437
+ AttachFailureGroupMemberRequest: {
11438
+ /** @description The run in which this failure was observed. */
11439
+ test_run_id: number;
11440
+ /** @description Test case ID (normalized 41-character Playwright test id) of the failing test. */
11441
+ test_case_id?: string;
11442
+ /**
11443
+ * @deprecated
11444
+ * @description Deprecated alias of `test_case_id`.
11445
+ */
11446
+ pw_test_id?: string;
11447
+ };
11448
+ FailureGroupDetachMemberResponse: {
11449
+ /** @description Response payload. */
11450
+ data: {
11451
+ group_id: string;
11452
+ test_case_id: string;
11453
+ detached: boolean;
11454
+ };
11455
+ };
11456
+ FailureGroupShareResponse: {
11457
+ /** @description Response payload. */
11458
+ data: {
11459
+ /**
11460
+ * @description Always true on success.
11461
+ * @enum {boolean}
11462
+ */
11463
+ ok: true;
11464
+ };
11465
+ };
11466
+ ShareFailureGroupRequest: {
11467
+ /** @description The share destination. */
11468
+ target: {
11469
+ /** @enum {string} */
11470
+ type: "slack";
11471
+ /** @description Slack channel ID to post to. */
11472
+ channel_id: string;
11473
+ /** @description Thread timestamp to reply under, if any. */
11474
+ thread_ts?: string;
11475
+ };
11476
+ };
11477
+ MergeFailureGroupRequest: {
11478
+ /** @description Target group id; this group merges into it. */
11479
+ into_group_id: string;
11480
+ };
11481
+ DeleteFailureGroupResponse: {
11482
+ /** @description Response payload. */
11483
+ data: {
11484
+ id: string;
11485
+ deleted: boolean;
11486
+ };
11487
+ };
11488
+ AlertRuleListResponse: {
11489
+ /** @description Response payload. */
11490
+ data: {
11491
+ alert_rules: components["schemas"]["AlertRule"][];
11492
+ };
11493
+ };
11494
+ AlertRule: {
11495
+ /** @description Alert rule ID. */
11496
+ id: number;
11497
+ /** @description Project the rule belongs to. */
11498
+ project_id: number;
11499
+ /** @description Environment this rule applies to; null means all environments. */
11500
+ environment_id: number | null;
11501
+ /** @description Whether the rule is active. */
11502
+ is_active: boolean;
11503
+ /**
11504
+ * @description Rule type. Only `consecutive` exists today.
11505
+ * @enum {string}
11506
+ */
11507
+ type: "consecutive";
11508
+ config: components["schemas"]["ConsecutiveAlertRuleConfig"];
11509
+ /** @description ISO 8601 creation timestamp. */
11510
+ created_at: string;
11511
+ /** @description ISO 8601 last-update timestamp. */
11512
+ updated_at: string;
11513
+ };
11514
+ ConsecutiveAlertRuleConfig: {
11515
+ /** @description Open an alert after this many consecutive fails. */
11516
+ open_after_fails: number;
11517
+ /** @description Resolve an open alert after this many consecutive passes. */
11518
+ resolve_after_passes: number;
11519
+ };
11520
+ AlertRuleResponse: {
11521
+ /** @description Response payload. */
11522
+ data: {
11523
+ alert_rule: components["schemas"]["AlertRule"];
11524
+ };
11525
+ };
11526
+ CreateAlertRuleRequest: {
11527
+ /**
11528
+ * @description Rule type. Only `consecutive` exists today.
11529
+ * @enum {string}
11530
+ */
11531
+ type: "consecutive";
11532
+ config: components["schemas"]["ConsecutiveAlertRuleConfig"];
11533
+ /** @description Environment this rule applies to; null applies it to all environments. */
11534
+ environment_id?: number | null;
11535
+ /** @description Whether the rule is active. Defaults to true. */
11536
+ is_active?: boolean;
11537
+ };
11538
+ PatchAlertRuleRequest: {
11539
+ /** @description Environment this rule applies to; null applies it to all environments. */
11540
+ environment_id?: number | null;
11541
+ config?: components["schemas"]["ConsecutiveAlertRuleConfig"];
11542
+ /** @description Whether the rule is active. */
11543
+ is_active?: boolean;
11544
+ };
11545
+ AlertRuleDeleteResponse: {
11546
+ /** @description Response payload. */
11547
+ data: {
11548
+ /**
11549
+ * @description Always true on success.
11550
+ * @enum {boolean}
11551
+ */
11552
+ deleted: true;
11553
+ };
11554
+ };
11555
+ AlertListResponse: {
11556
+ data: {
11557
+ alerts: components["schemas"]["Alert"][];
11558
+ };
11559
+ pagination: components["schemas"]["Pagination"];
11560
+ };
11561
+ Alert: {
11562
+ /** @description Alert ID. */
11563
+ id: number;
11564
+ /** @description Project the alert belongs to. */
11565
+ project_id: number;
11566
+ /** @description Environment the alert was opened in. */
11567
+ environment_id: number;
11568
+ /** @description The alert rule that opened this alert. */
11569
+ rule_id: number;
11570
+ /** @description Playwright test ID of the alerting test. */
11571
+ pw_test_id: string;
11572
+ /**
11573
+ * @description Alert lifecycle state.
11574
+ * @enum {string}
11575
+ */
11576
+ state: "open" | "resolved";
11577
+ /** @description Current consecutive-fail streak. */
11578
+ consecutive_fails: number;
11579
+ /** @description Recent evaluated outcomes, newest last. */
11580
+ recent_outcomes: components["schemas"]["AlertRunOutcome"][];
11581
+ /** @description The run whose failure opened the alert. */
11582
+ triggering_test_run_id: number;
11583
+ /** @description ISO 8601 timestamp the alert opened. */
11584
+ opened_at: string;
11585
+ /** @description ISO 8601 timestamp the alert resolved, if it has. */
11586
+ resolved_at: string | null;
11587
+ /** @description ISO 8601 creation timestamp. */
11588
+ created_at: string;
11589
+ /** @description ISO 8601 last-update timestamp. */
11590
+ updated_at: string;
11591
+ /** @description Display info for the alerting test; null when the test is no longer in the test-case ledger. */
11592
+ test_case: {
11593
+ /** @description Human-readable test name. */
11594
+ name: string;
11595
+ /** @description Test file path. */
11596
+ file_path: string;
11597
+ /** @description Test tags. */
11598
+ tags: string[];
11599
+ } | null;
11600
+ /** @description The most-recently-seen failure group this alert's test is currently attached to; null when the test is in no group. */
11601
+ failure_group: {
11602
+ /** @description Failure group ID. */
11603
+ id: string;
11604
+ /** @description Human-readable group label. */
11605
+ label: string;
11606
+ /**
11607
+ * @description Group lifecycle status.
11608
+ * @enum {string}
11609
+ */
11610
+ status: "open" | "resolved";
11611
+ /** @description True when a membership sighting cites a run in the alert's outcome window. */
11612
+ seen_in_window: boolean;
11613
+ } | null;
10625
11614
  };
10626
- AttachFailureGroupMemberRequest: {
10627
- /** @description The run in which this failure was observed. */
11615
+ AlertRunOutcome: {
11616
+ /** @description The evaluated test run. */
10628
11617
  test_run_id: number;
10629
- /** @description Test case ID (normalized 41-character Playwright test id) of the failing test. */
10630
- test_case_id?: string;
10631
11618
  /**
10632
- * @deprecated
10633
- * @description Deprecated alias of `test_case_id`.
11619
+ * @description Evaluated outcome (flaky counts as pass).
11620
+ * @enum {string}
10634
11621
  */
10635
- pw_test_id?: string;
11622
+ status: "pass" | "fail";
10636
11623
  };
10637
- FailureGroupDetachMemberResponse: {
10638
- /** @description Response payload. */
11624
+ RecentAlertEventListResponse: {
10639
11625
  data: {
10640
- group_id: string;
10641
- test_case_id: string;
10642
- detached: boolean;
11626
+ events: components["schemas"]["RecentAlertEvent"][];
10643
11627
  };
11628
+ pagination: components["schemas"]["Pagination"];
10644
11629
  };
10645
- FailureGroupShareResponse: {
11630
+ RecentAlertEvent: {
11631
+ id: number;
11632
+ alert_id: number;
11633
+ /** @enum {string} */
11634
+ type: "opened" | "resolved";
11635
+ test_run_id: number | null;
11636
+ environment_id: number;
11637
+ pw_test_id: string;
11638
+ created_at: string;
11639
+ test_case: components["schemas"]["AlertTestCase"];
11640
+ };
11641
+ AlertTestCase: {
11642
+ /** @description Human-readable test name. */
11643
+ name: string;
11644
+ /** @description Test file path. */
11645
+ file_path: string;
11646
+ /** @description Test tags. */
11647
+ tags: string[];
11648
+ } | null;
11649
+ AlertDetailResponse: {
10646
11650
  /** @description Response payload. */
10647
11651
  data: {
10648
- /**
10649
- * @description Always true on success.
10650
- * @enum {boolean}
10651
- */
10652
- ok: true;
11652
+ alert: components["schemas"]["AlertDetail"];
10653
11653
  };
10654
11654
  };
10655
- ShareFailureGroupRequest: {
10656
- /** @description The share destination. */
10657
- target: {
10658
- /** @enum {string} */
10659
- type: "slack";
10660
- /** @description Slack channel ID to post to. */
10661
- channel_id: string;
10662
- /** @description Thread timestamp to reply under, if any. */
10663
- thread_ts?: string;
10664
- };
11655
+ AlertDetail: {
11656
+ /** @description Alert ID. */
11657
+ id: number;
11658
+ /** @description Project the alert belongs to. */
11659
+ project_id: number;
11660
+ /** @description Environment the alert was opened in. */
11661
+ environment_id: number;
11662
+ /** @description The alert rule that opened this alert. */
11663
+ rule_id: number;
11664
+ /** @description Playwright test ID of the alerting test. */
11665
+ pw_test_id: string;
11666
+ /**
11667
+ * @description Alert lifecycle state.
11668
+ * @enum {string}
11669
+ */
11670
+ state: "open" | "resolved";
11671
+ /** @description Current consecutive-fail streak. */
11672
+ consecutive_fails: number;
11673
+ /** @description Recent evaluated outcomes, newest last. */
11674
+ recent_outcomes: components["schemas"]["AlertRunOutcome"][];
11675
+ /** @description The run whose failure opened the alert. */
11676
+ triggering_test_run_id: number;
11677
+ /** @description ISO 8601 timestamp the alert opened. */
11678
+ opened_at: string;
11679
+ /** @description ISO 8601 timestamp the alert resolved, if it has. */
11680
+ resolved_at: string | null;
11681
+ /** @description ISO 8601 creation timestamp. */
11682
+ created_at: string;
11683
+ /** @description ISO 8601 last-update timestamp. */
11684
+ updated_at: string;
11685
+ /** @description Display info for the alerting test; null when the test is no longer in the test-case ledger. */
11686
+ test_case: {
11687
+ /** @description Human-readable test name. */
11688
+ name: string;
11689
+ /** @description Test file path. */
11690
+ file_path: string;
11691
+ /** @description Test tags. */
11692
+ tags: string[];
11693
+ } | null;
11694
+ /** @description The most-recently-seen failure group this alert's test is currently attached to; null when the test is in no group. */
11695
+ failure_group: {
11696
+ /** @description Failure group ID. */
11697
+ id: string;
11698
+ /** @description Human-readable group label. */
11699
+ label: string;
11700
+ /**
11701
+ * @description Group lifecycle status.
11702
+ * @enum {string}
11703
+ */
11704
+ status: "open" | "resolved";
11705
+ /** @description True when a membership sighting cites a run in the alert's outcome window. */
11706
+ seen_in_window: boolean;
11707
+ } | null;
11708
+ /** @description The alert's lifecycle events, oldest first. */
11709
+ events: components["schemas"]["AlertEvent"][];
11710
+ /** @description Failure groups the alerting test is currently attached to, most recently seen first; empty when the test is in no group. */
11711
+ related_failure_groups: components["schemas"]["AlertRelatedFailureGroup"][];
10665
11712
  };
10666
- MergeFailureGroupRequest: {
10667
- /** @description Target group id; this group merges into it. */
10668
- into_group_id: string;
11713
+ AlertEvent: {
11714
+ /** @description Alert event ID. */
11715
+ id: number;
11716
+ /**
11717
+ * @description What happened.
11718
+ * @enum {string}
11719
+ */
11720
+ type: "opened" | "still_failing" | "resolved";
11721
+ /** @description The test run that produced this event, if any. */
11722
+ test_run_id: number | null;
11723
+ /** @description ISO 8601 timestamp of the event. */
11724
+ created_at: string;
10669
11725
  };
10670
- DeleteFailureGroupResponse: {
10671
- /** @description Response payload. */
10672
- data: {
10673
- id: string;
10674
- deleted: boolean;
10675
- };
11726
+ AlertRelatedFailureGroup: {
11727
+ /** @description Failure group ID. */
11728
+ id: string;
11729
+ /** @description Human-readable group label. */
11730
+ label: string;
11731
+ /**
11732
+ * @description Failure-mode classification.
11733
+ * @enum {string}
11734
+ */
11735
+ type: "app" | "test" | "unknown";
11736
+ /**
11737
+ * @description Group lifecycle status.
11738
+ * @enum {string}
11739
+ */
11740
+ status: "open" | "resolved";
11741
+ /** @description ISO 8601 timestamp the group was last seen. */
11742
+ last_seen_at: string;
11743
+ /** @description True when a membership sighting for this test cites one of the runs in the alert's outcome window (deterministic test × env × run mapping). False = the test is attached to the group in this environment, but not via the runs this alert counted. */
11744
+ seen_in_window: boolean;
10676
11745
  };
10677
11746
  WebhookListResponse: {
10678
11747
  /** @description Response payload. */
@@ -10785,6 +11854,10 @@ export interface components {
10785
11854
  error: string | null;
10786
11855
  };
10787
11856
  };
11857
+ DodoWebhookAckResponse: {
11858
+ /** @description Ack. */
11859
+ message: string;
11860
+ };
10788
11861
  HiveModelsResponse: {
10789
11862
  /** @description Response payload. */
10790
11863
  data: components["schemas"]["HiveModel"][];
@@ -11144,6 +12217,16 @@ export interface components {
11144
12217
  /** @description ISO 8601 timestamp the link was last updated. */
11145
12218
  updated_at: string;
11146
12219
  };
12220
+ MembershipListResponse: {
12221
+ /** @description Response payload. */
12222
+ data: {
12223
+ /** @description Memberships created from pending invites. */
12224
+ memberships: {
12225
+ /** @description Organization joined. */
12226
+ org_id: number;
12227
+ }[];
12228
+ };
12229
+ };
11147
12230
  UserDetailResponse: {
11148
12231
  /** @description Response payload. */
11149
12232
  data: {
@@ -12062,6 +13145,45 @@ export interface operations {
12062
13145
  };
12063
13146
  };
12064
13147
  };
13148
+ createTestRunTriageSession: {
13149
+ parameters: {
13150
+ query?: never;
13151
+ header?: never;
13152
+ path: {
13153
+ /** @description Database ID of the test run. */
13154
+ id: number;
13155
+ };
13156
+ cookie?: never;
13157
+ };
13158
+ requestBody?: {
13159
+ content: {
13160
+ "application/json": {
13161
+ /** @description Send the session-started Slack DM. Set when the acting user has a linked Slack account. */
13162
+ send_slack_notification?: boolean | null;
13163
+ };
13164
+ };
13165
+ };
13166
+ responses: {
13167
+ /** @description The created triage session. */
13168
+ 201: {
13169
+ headers: {
13170
+ [name: string]: unknown;
13171
+ };
13172
+ content: {
13173
+ "application/json": components["schemas"]["TestRunTriageSessionResponse"];
13174
+ };
13175
+ };
13176
+ /** @description Test run not found or inaccessible. */
13177
+ 404: {
13178
+ headers: {
13179
+ [name: string]: unknown;
13180
+ };
13181
+ content: {
13182
+ "application/json": components["schemas"]["ErrorResponse"];
13183
+ };
13184
+ };
13185
+ };
13186
+ };
12065
13187
  triggerTestRunMerge: {
12066
13188
  parameters: {
12067
13189
  query?: never;
@@ -12428,6 +13550,46 @@ export interface operations {
12428
13550
  };
12429
13551
  };
12430
13552
  };
13553
+ listTestCasePlaywrightProjects: {
13554
+ parameters: {
13555
+ query?: never;
13556
+ header?: never;
13557
+ path?: never;
13558
+ cookie?: never;
13559
+ };
13560
+ requestBody?: never;
13561
+ responses: {
13562
+ /** @description The project's distinct Playwright projects. */
13563
+ 200: {
13564
+ headers: {
13565
+ /** @description Caching directive: `public, s-maxage=300, stale-while-revalidate=600`. */
13566
+ "Cache-Control": string;
13567
+ [name: string]: unknown;
13568
+ };
13569
+ content: {
13570
+ "application/json": components["schemas"]["TestCasePlaywrightProjectsResponse"];
13571
+ };
13572
+ };
13573
+ /** @description Project could not be resolved from the request. */
13574
+ 400: {
13575
+ headers: {
13576
+ [name: string]: unknown;
13577
+ };
13578
+ content: {
13579
+ "application/json": components["schemas"]["ErrorResponse"];
13580
+ };
13581
+ };
13582
+ /** @description Project not found or not accessible. */
13583
+ 404: {
13584
+ headers: {
13585
+ [name: string]: unknown;
13586
+ };
13587
+ content: {
13588
+ "application/json": components["schemas"]["ErrorResponse"];
13589
+ };
13590
+ };
13591
+ };
13592
+ };
12431
13593
  createEnvironment: {
12432
13594
  parameters: {
12433
13595
  query?: never;
@@ -13676,7 +14838,88 @@ export interface operations {
13676
14838
  };
13677
14839
  };
13678
14840
  };
13679
- slackLinkWebhook: {
14841
+ slackLinkWebhook: {
14842
+ parameters: {
14843
+ query?: never;
14844
+ header?: never;
14845
+ path?: never;
14846
+ cookie?: never;
14847
+ };
14848
+ requestBody?: {
14849
+ content: {
14850
+ "application/x-www-form-urlencoded": {
14851
+ /** @description Slack channel ID. */
14852
+ channel_id: string;
14853
+ /** @description Slack channel name. */
14854
+ channel_name: string;
14855
+ /** @description Slack workspace (team) ID. */
14856
+ team_id: string;
14857
+ /** @description Slack trigger ID for opening a modal. */
14858
+ trigger_id: string;
14859
+ /**
14860
+ * @description Text passed to the /empirical slash command.
14861
+ * @default
14862
+ */
14863
+ text?: string;
14864
+ };
14865
+ };
14866
+ };
14867
+ responses: {
14868
+ /** @description Slash command response shown to the invoking user; empty body when a modal was opened. */
14869
+ 200: {
14870
+ headers: {
14871
+ [name: string]: unknown;
14872
+ };
14873
+ content: {
14874
+ "text/plain": string;
14875
+ };
14876
+ };
14877
+ /** @description Invalid request. */
14878
+ 400: {
14879
+ headers: {
14880
+ [name: string]: unknown;
14881
+ };
14882
+ content: {
14883
+ "application/json": components["schemas"]["ErrorResponse"];
14884
+ };
14885
+ };
14886
+ };
14887
+ };
14888
+ listSlackChannels: {
14889
+ parameters: {
14890
+ query?: {
14891
+ /** @description When `true`, validate each channel against Slack. */
14892
+ validate_slack?: "true" | "false";
14893
+ /** @description When `true` (super admins only), also include project-less generic channels. */
14894
+ include_generic?: "true" | "false";
14895
+ };
14896
+ header?: never;
14897
+ path?: never;
14898
+ cookie?: never;
14899
+ };
14900
+ requestBody?: never;
14901
+ responses: {
14902
+ /** @description The project's Slack channels. */
14903
+ 200: {
14904
+ headers: {
14905
+ [name: string]: unknown;
14906
+ };
14907
+ content: {
14908
+ "application/json": components["schemas"]["SlackChannelListResponse"];
14909
+ };
14910
+ };
14911
+ /** @description Invalid request. */
14912
+ 400: {
14913
+ headers: {
14914
+ [name: string]: unknown;
14915
+ };
14916
+ content: {
14917
+ "application/json": components["schemas"]["ErrorResponse"];
14918
+ };
14919
+ };
14920
+ };
14921
+ };
14922
+ slackProxy: {
13680
14923
  parameters: {
13681
14924
  query?: never;
13682
14925
  header?: never;
@@ -13685,31 +14928,30 @@ export interface operations {
13685
14928
  };
13686
14929
  requestBody?: {
13687
14930
  content: {
13688
- "application/x-www-form-urlencoded": {
13689
- /** @description Slack channel ID. */
13690
- channel_id: string;
13691
- /** @description Slack channel name. */
13692
- channel_name: string;
13693
- /** @description Slack workspace (team) ID. */
13694
- team_id: string;
13695
- /** @description Slack trigger ID for opening a modal. */
13696
- trigger_id: string;
14931
+ "application/json": {
13697
14932
  /**
13698
- * @description Text passed to the /empirical slash command.
13699
- * @default
14933
+ * @description Slack Web API method to call. Read-only methods only.
14934
+ * @enum {string}
13700
14935
  */
13701
- text?: string;
14936
+ api_method: "conversations.history" | "conversations.replies" | "conversations.info" | "chat.getPermalink" | "files.list" | "files.info" | "users.info";
14937
+ /**
14938
+ * @description Arguments passed to the Slack method.
14939
+ * @default {}
14940
+ */
14941
+ args?: {
14942
+ [key: string]: unknown;
14943
+ };
13702
14944
  };
13703
14945
  };
13704
14946
  };
13705
14947
  responses: {
13706
- /** @description Slash command response shown to the invoking user; empty body when a modal was opened. */
14948
+ /** @description The Slack API JSON response, forwarded verbatim. */
13707
14949
  200: {
13708
14950
  headers: {
13709
14951
  [name: string]: unknown;
13710
14952
  };
13711
14953
  content: {
13712
- "text/plain": string;
14954
+ "application/json": unknown;
13713
14955
  };
13714
14956
  };
13715
14957
  /** @description Invalid request. */
@@ -13718,41 +14960,34 @@ export interface operations {
13718
14960
  [name: string]: unknown;
13719
14961
  };
13720
14962
  content: {
13721
- "application/json": components["schemas"]["ErrorResponse"];
14963
+ "application/json": components["schemas"]["SlackProxyError"];
13722
14964
  };
13723
14965
  };
13724
- };
13725
- };
13726
- listSlackChannels: {
13727
- parameters: {
13728
- query?: {
13729
- /** @description When `true`, validate each channel against Slack. */
13730
- validate_slack?: "true" | "false";
13731
- /** @description When `true` (super admins only), also include project-less generic channels. */
13732
- include_generic?: "true" | "false";
14966
+ /** @description Sandbox authentication required, or the resource is out of scope. */
14967
+ 403: {
14968
+ headers: {
14969
+ [name: string]: unknown;
14970
+ };
14971
+ content: {
14972
+ "application/json": components["schemas"]["SlackProxyError"];
14973
+ };
13733
14974
  };
13734
- header?: never;
13735
- path?: never;
13736
- cookie?: never;
13737
- };
13738
- requestBody?: never;
13739
- responses: {
13740
- /** @description The project's Slack channels. */
13741
- 200: {
14975
+ /** @description Chat session or Slack connection not found. */
14976
+ 404: {
13742
14977
  headers: {
13743
14978
  [name: string]: unknown;
13744
14979
  };
13745
14980
  content: {
13746
- "application/json": components["schemas"]["SlackChannelListResponse"];
14981
+ "application/json": components["schemas"]["SlackProxyError"];
13747
14982
  };
13748
14983
  };
13749
- /** @description Invalid request. */
13750
- 400: {
14984
+ /** @description Slack upstream error. */
14985
+ 502: {
13751
14986
  headers: {
13752
14987
  [name: string]: unknown;
13753
14988
  };
13754
14989
  content: {
13755
- "application/json": components["schemas"]["ErrorResponse"];
14990
+ "application/json": components["schemas"]["SlackProxyError"];
13756
14991
  };
13757
14992
  };
13758
14993
  };
@@ -14196,6 +15431,15 @@ export interface operations {
14196
15431
  "application/json": components["schemas"]["ErrorResponse"];
14197
15432
  };
14198
15433
  };
15434
+ /** @description A group with this label already exists; nothing was written. The existing group is in `data`. */
15435
+ 409: {
15436
+ headers: {
15437
+ [name: string]: unknown;
15438
+ };
15439
+ content: {
15440
+ "application/json": components["schemas"]["FailureGroupConflictResponse"];
15441
+ };
15442
+ };
14199
15443
  };
14200
15444
  };
14201
15445
  getFailureGroup: {
@@ -14305,6 +15549,15 @@ export interface operations {
14305
15549
  "application/json": components["schemas"]["ErrorResponse"];
14306
15550
  };
14307
15551
  };
15552
+ /** @description Another group already holds this label; nothing was written. The conflicting group is in `data`. */
15553
+ 409: {
15554
+ headers: {
15555
+ [name: string]: unknown;
15556
+ };
15557
+ content: {
15558
+ "application/json": components["schemas"]["FailureGroupConflictResponse"];
15559
+ };
15560
+ };
14308
15561
  };
14309
15562
  };
14310
15563
  getFailureGroupActivity: {
@@ -14391,13 +15644,13 @@ export interface operations {
14391
15644
  };
14392
15645
  };
14393
15646
  responses: {
14394
- /** @description The group with its members. */
15647
+ /** @description The attached member, derived from the membership-event log. */
14395
15648
  200: {
14396
15649
  headers: {
14397
15650
  [name: string]: unknown;
14398
15651
  };
14399
15652
  content: {
14400
- "application/json": components["schemas"]["FailureGroupResponse"];
15653
+ "application/json": components["schemas"]["FailureGroupMemberResponse"];
14401
15654
  };
14402
15655
  };
14403
15656
  /** @description Group or test run not found. */
@@ -14809,6 +16062,179 @@ export interface operations {
14809
16062
  };
14810
16063
  };
14811
16064
  };
16065
+ listAlertRules: {
16066
+ parameters: {
16067
+ query?: never;
16068
+ header?: never;
16069
+ path?: never;
16070
+ cookie?: never;
16071
+ };
16072
+ requestBody?: never;
16073
+ responses: {
16074
+ /** @description The project's alert rules. */
16075
+ 200: {
16076
+ headers: {
16077
+ [name: string]: unknown;
16078
+ };
16079
+ content: {
16080
+ "application/json": components["schemas"]["AlertRuleListResponse"];
16081
+ };
16082
+ };
16083
+ /** @description Invalid request or missing project scope. */
16084
+ 400: {
16085
+ headers: {
16086
+ [name: string]: unknown;
16087
+ };
16088
+ content: {
16089
+ "application/json": components["schemas"]["ErrorResponse"];
16090
+ };
16091
+ };
16092
+ };
16093
+ };
16094
+ createAlertRule: {
16095
+ parameters: {
16096
+ query?: never;
16097
+ header?: never;
16098
+ path?: never;
16099
+ cookie?: never;
16100
+ };
16101
+ requestBody?: {
16102
+ content: {
16103
+ "application/json": components["schemas"]["CreateAlertRuleRequest"];
16104
+ };
16105
+ };
16106
+ responses: {
16107
+ /** @description The created alert rule. */
16108
+ 200: {
16109
+ headers: {
16110
+ [name: string]: unknown;
16111
+ };
16112
+ content: {
16113
+ "application/json": components["schemas"]["AlertRuleResponse"];
16114
+ };
16115
+ };
16116
+ /** @description Invalid request or missing project scope. */
16117
+ 400: {
16118
+ headers: {
16119
+ [name: string]: unknown;
16120
+ };
16121
+ content: {
16122
+ "application/json": components["schemas"]["ErrorResponse"];
16123
+ };
16124
+ };
16125
+ /** @description A rule for this (project, environment) already exists. */
16126
+ 409: {
16127
+ headers: {
16128
+ [name: string]: unknown;
16129
+ };
16130
+ content: {
16131
+ "application/json": components["schemas"]["ErrorResponse"];
16132
+ };
16133
+ };
16134
+ };
16135
+ };
16136
+ listAlerts: {
16137
+ parameters: {
16138
+ query?: {
16139
+ /** @description Filter by alert state. Omit for all states. */
16140
+ state?: "open" | "resolved";
16141
+ /** @description Filter to alerts in this environment. */
16142
+ environment_id?: number;
16143
+ /** @description Page number (1-indexed). */
16144
+ page?: number;
16145
+ /** @description Items per page (max 100). */
16146
+ per_page?: number;
16147
+ };
16148
+ header?: never;
16149
+ path?: never;
16150
+ cookie?: never;
16151
+ };
16152
+ requestBody?: never;
16153
+ responses: {
16154
+ /** @description Paginated alerts. */
16155
+ 200: {
16156
+ headers: {
16157
+ [name: string]: unknown;
16158
+ };
16159
+ content: {
16160
+ "application/json": components["schemas"]["AlertListResponse"];
16161
+ };
16162
+ };
16163
+ /** @description Invalid request or missing project scope. */
16164
+ 400: {
16165
+ headers: {
16166
+ [name: string]: unknown;
16167
+ };
16168
+ content: {
16169
+ "application/json": components["schemas"]["ErrorResponse"];
16170
+ };
16171
+ };
16172
+ };
16173
+ };
16174
+ getAlert: {
16175
+ parameters: {
16176
+ query?: never;
16177
+ header?: never;
16178
+ path: {
16179
+ /** @description Alert ID. */
16180
+ id: number;
16181
+ };
16182
+ cookie?: never;
16183
+ };
16184
+ requestBody?: never;
16185
+ responses: {
16186
+ /** @description The alert with its events. */
16187
+ 200: {
16188
+ headers: {
16189
+ [name: string]: unknown;
16190
+ };
16191
+ content: {
16192
+ "application/json": components["schemas"]["AlertDetailResponse"];
16193
+ };
16194
+ };
16195
+ /** @description Alert not found. */
16196
+ 404: {
16197
+ headers: {
16198
+ [name: string]: unknown;
16199
+ };
16200
+ content: {
16201
+ "application/json": components["schemas"]["ErrorResponse"];
16202
+ };
16203
+ };
16204
+ };
16205
+ };
16206
+ listRecentAlertEvents: {
16207
+ parameters: {
16208
+ query?: {
16209
+ page?: number;
16210
+ per_page?: number;
16211
+ };
16212
+ header?: never;
16213
+ path?: never;
16214
+ cookie?: never;
16215
+ };
16216
+ requestBody?: never;
16217
+ responses: {
16218
+ /** @description Paginated alert opened and resolved events. */
16219
+ 200: {
16220
+ headers: {
16221
+ [name: string]: unknown;
16222
+ };
16223
+ content: {
16224
+ "application/json": components["schemas"]["RecentAlertEventListResponse"];
16225
+ };
16226
+ };
16227
+ /** @description Invalid request or missing project scope. */
16228
+ 400: {
16229
+ headers: {
16230
+ [name: string]: unknown;
16231
+ };
16232
+ content: {
16233
+ "application/json": components["schemas"]["ErrorResponse"];
16234
+ };
16235
+ };
16236
+ };
16237
+ };
14812
16238
  getOverlayDismissalSummary: {
14813
16239
  parameters: {
14814
16240
  query?: {
@@ -14930,13 +16356,56 @@ export interface operations {
14930
16356
  };
14931
16357
  requestBody?: never;
14932
16358
  responses: {
14933
- /** @description Paginated list of test run cases. */
16359
+ /** @description Paginated list of test run cases. */
16360
+ 200: {
16361
+ headers: {
16362
+ [name: string]: unknown;
16363
+ };
16364
+ content: {
16365
+ "application/json": components["schemas"]["ListTestRunCasesResponse"];
16366
+ };
16367
+ };
16368
+ /** @description Invalid request. */
16369
+ 400: {
16370
+ headers: {
16371
+ [name: string]: unknown;
16372
+ };
16373
+ content: {
16374
+ "application/json": components["schemas"]["ErrorResponse"];
16375
+ };
16376
+ };
16377
+ /** @description Test run not found. */
16378
+ 404: {
16379
+ headers: {
16380
+ [name: string]: unknown;
16381
+ };
16382
+ content: {
16383
+ "application/json": components["schemas"]["ErrorResponse"];
16384
+ };
16385
+ };
16386
+ };
16387
+ };
16388
+ getTestRunCase: {
16389
+ parameters: {
16390
+ query?: never;
16391
+ header?: never;
16392
+ path: {
16393
+ /** @description Test run ID. */
16394
+ id: number;
16395
+ /** @description Playwright test ID (`pw_test_id`) of the case. */
16396
+ case_id: string;
16397
+ };
16398
+ cookie?: never;
16399
+ };
16400
+ requestBody?: never;
16401
+ responses: {
16402
+ /** @description The test run case. */
14934
16403
  200: {
14935
16404
  headers: {
14936
16405
  [name: string]: unknown;
14937
16406
  };
14938
16407
  content: {
14939
- "application/json": components["schemas"]["ListTestRunCasesResponse"];
16408
+ "application/json": components["schemas"]["GetTestRunCaseResponse"];
14940
16409
  };
14941
16410
  };
14942
16411
  /** @description Invalid request. */
@@ -14948,7 +16417,7 @@ export interface operations {
14948
16417
  "application/json": components["schemas"]["ErrorResponse"];
14949
16418
  };
14950
16419
  };
14951
- /** @description Test run not found. */
16420
+ /** @description Test run or test case not found. */
14952
16421
  404: {
14953
16422
  headers: {
14954
16423
  [name: string]: unknown;
@@ -14959,27 +16428,25 @@ export interface operations {
14959
16428
  };
14960
16429
  };
14961
16430
  };
14962
- getTestRunCase: {
16431
+ listChatSessionAlarms: {
14963
16432
  parameters: {
14964
16433
  query?: never;
14965
16434
  header?: never;
14966
16435
  path: {
14967
- /** @description Test run ID. */
16436
+ /** @description Chat session ID. */
14968
16437
  id: number;
14969
- /** @description Playwright test ID (`pw_test_id`) of the case. */
14970
- case_id: string;
14971
16438
  };
14972
16439
  cookie?: never;
14973
16440
  };
14974
16441
  requestBody?: never;
14975
16442
  responses: {
14976
- /** @description The test run case. */
16443
+ /** @description Upcoming alarms for the session. */
14977
16444
  200: {
14978
16445
  headers: {
14979
16446
  [name: string]: unknown;
14980
16447
  };
14981
16448
  content: {
14982
- "application/json": components["schemas"]["GetTestRunCaseResponse"];
16449
+ "application/json": components["schemas"]["ChatSessionAlarms"];
14983
16450
  };
14984
16451
  };
14985
16452
  /** @description Invalid request. */
@@ -14991,13 +16458,13 @@ export interface operations {
14991
16458
  "application/json": components["schemas"]["ErrorResponse"];
14992
16459
  };
14993
16460
  };
14994
- /** @description Test run or test case not found. */
16461
+ /** @description Session not found. */
14995
16462
  404: {
14996
16463
  headers: {
14997
16464
  [name: string]: unknown;
14998
16465
  };
14999
16466
  content: {
15000
- "application/json": components["schemas"]["ErrorResponse"];
16467
+ "application/json": components["schemas"]["ChatSessionAlarmsError"];
15001
16468
  };
15002
16469
  };
15003
16470
  };
@@ -15047,6 +16514,27 @@ export interface operations {
15047
16514
  requestBody?: {
15048
16515
  content: {
15049
16516
  "application/json": {
16517
+ /**
16518
+ * @description Messaging provider. Only "slack" is supported.
16519
+ * @default slack
16520
+ * @enum {string}
16521
+ */
16522
+ provider?: "slack";
16523
+ /**
16524
+ * @description Creates an agent-controlled Slack thread: explicit outbound messages, in-thread replies forwarded to the session.
16525
+ * @enum {string}
16526
+ */
16527
+ purpose: "agent";
16528
+ /**
16529
+ * @description Target type. "im" opens a DM with the recipient user.
16530
+ * @enum {string}
16531
+ */
16532
+ channel_type: "im";
16533
+ /** @description Recipient user ID (UUID v4 format) whose linked Slack account receives the agent DM. */
16534
+ user_id: string;
16535
+ /** @description Markdown root message for the Slack DM. Empirical converts it to Slack formatting. */
16536
+ markdown: string;
16537
+ } | {
15050
16538
  /**
15051
16539
  * @description Messaging provider. Only "slack" is supported.
15052
16540
  * @default slack
@@ -15058,6 +16546,12 @@ export interface operations {
15058
16546
  * @enum {string}
15059
16547
  */
15060
16548
  purpose: "agent";
16549
+ /**
16550
+ * @description Target type. "channel" posts the root message into a channel.
16551
+ * @default channel
16552
+ * @enum {string}
16553
+ */
16554
+ channel_type?: "channel";
15061
16555
  /** @description Slack workspace/team ID. */
15062
16556
  team_id: string;
15063
16557
  /** @description Slack channel ID. */
@@ -15159,7 +16653,10 @@ export interface operations {
15159
16653
  createChatSessionThreadMessage: {
15160
16654
  parameters: {
15161
16655
  query?: never;
15162
- header?: never;
16656
+ header?: {
16657
+ /** @description Stable caller-generated key for safely retrying this Slack post. Alternative to the body `idempotency_key` field. */
16658
+ "idempotency-key"?: string;
16659
+ };
15163
16660
  path: {
15164
16661
  /** @description Chat session ID. */
15165
16662
  id: number;
@@ -15173,8 +16670,8 @@ export interface operations {
15173
16670
  "application/json": {
15174
16671
  /** @description Markdown message to post to the Slack thread. Empirical converts it to Slack formatting. */
15175
16672
  markdown: string;
15176
- /** @description Stable caller-generated key for safely retrying this Slack post. */
15177
- idempotency_key: string;
16673
+ /** @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. */
16674
+ idempotency_key?: string;
15178
16675
  };
15179
16676
  };
15180
16677
  };
@@ -15197,7 +16694,7 @@ export interface operations {
15197
16694
  "application/json": components["schemas"]["ChatSessionThreadMessageResponse"];
15198
16695
  };
15199
16696
  };
15200
- /** @description Thread is not agent-controlled. */
16697
+ /** @description Thread is not agent-controlled, or the idempotency key is missing. */
15201
16698
  400: {
15202
16699
  headers: {
15203
16700
  [name: string]: unknown;
@@ -15967,40 +17464,6 @@ export interface operations {
15967
17464
  };
15968
17465
  };
15969
17466
  };
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
17467
  listAgentWorkflows: {
16005
17468
  parameters: {
16006
17469
  query?: never;
@@ -16446,6 +17909,101 @@ export interface operations {
16446
17909
  };
16447
17910
  };
16448
17911
  };
17912
+ deleteAlertRule: {
17913
+ parameters: {
17914
+ query?: never;
17915
+ header?: never;
17916
+ path: {
17917
+ /** @description Alert rule ID. */
17918
+ id: number;
17919
+ };
17920
+ cookie?: never;
17921
+ };
17922
+ requestBody?: never;
17923
+ responses: {
17924
+ /** @description The rule was deleted. */
17925
+ 200: {
17926
+ headers: {
17927
+ [name: string]: unknown;
17928
+ };
17929
+ content: {
17930
+ "application/json": components["schemas"]["AlertRuleDeleteResponse"];
17931
+ };
17932
+ };
17933
+ /** @description Alert rule not found. */
17934
+ 404: {
17935
+ headers: {
17936
+ [name: string]: unknown;
17937
+ };
17938
+ content: {
17939
+ "application/json": components["schemas"]["ErrorResponse"];
17940
+ };
17941
+ };
17942
+ /** @description Alerts reference this rule; it cannot be deleted. */
17943
+ 409: {
17944
+ headers: {
17945
+ [name: string]: unknown;
17946
+ };
17947
+ content: {
17948
+ "application/json": components["schemas"]["ErrorResponse"];
17949
+ };
17950
+ };
17951
+ };
17952
+ };
17953
+ updateAlertRule: {
17954
+ parameters: {
17955
+ query?: never;
17956
+ header?: never;
17957
+ path: {
17958
+ /** @description Alert rule ID. */
17959
+ id: number;
17960
+ };
17961
+ cookie?: never;
17962
+ };
17963
+ requestBody?: {
17964
+ content: {
17965
+ "application/json": components["schemas"]["PatchAlertRuleRequest"];
17966
+ };
17967
+ };
17968
+ responses: {
17969
+ /** @description The updated alert rule. */
17970
+ 200: {
17971
+ headers: {
17972
+ [name: string]: unknown;
17973
+ };
17974
+ content: {
17975
+ "application/json": components["schemas"]["AlertRuleResponse"];
17976
+ };
17977
+ };
17978
+ /** @description Invalid request. */
17979
+ 400: {
17980
+ headers: {
17981
+ [name: string]: unknown;
17982
+ };
17983
+ content: {
17984
+ "application/json": components["schemas"]["ErrorResponse"];
17985
+ };
17986
+ };
17987
+ /** @description Alert rule not found. */
17988
+ 404: {
17989
+ headers: {
17990
+ [name: string]: unknown;
17991
+ };
17992
+ content: {
17993
+ "application/json": components["schemas"]["ErrorResponse"];
17994
+ };
17995
+ };
17996
+ /** @description Another rule already holds this (project, environment). */
17997
+ 409: {
17998
+ headers: {
17999
+ [name: string]: unknown;
18000
+ };
18001
+ content: {
18002
+ "application/json": components["schemas"]["ErrorResponse"];
18003
+ };
18004
+ };
18005
+ };
18006
+ };
16449
18007
  listChatSessions: {
16450
18008
  parameters: {
16451
18009
  query?: {
@@ -16465,8 +18023,6 @@ export interface operations {
16465
18023
  exclude_project_ids?: string;
16466
18024
  /** @description Comma-separated creator user IDs to filter by. */
16467
18025
  user_ids?: string;
16468
- /** @description Exclude triage sessions unless set to `false`. */
16469
- exclude_triage?: boolean | null;
16470
18026
  /** @description Only sessions updated within this many days. */
16471
18027
  updated_within_days?: number;
16472
18028
  /** @description URL-encoded JSON array of generic filter conditions. */
@@ -16634,6 +18190,38 @@ export interface operations {
16634
18190
  };
16635
18191
  };
16636
18192
  };
18193
+ getChatSessionBranches: {
18194
+ parameters: {
18195
+ query?: never;
18196
+ header?: never;
18197
+ path: {
18198
+ /** @description Chat session ID. */
18199
+ id: number;
18200
+ };
18201
+ cookie?: never;
18202
+ };
18203
+ requestBody?: never;
18204
+ responses: {
18205
+ /** @description The session's branches. */
18206
+ 200: {
18207
+ headers: {
18208
+ [name: string]: unknown;
18209
+ };
18210
+ content: {
18211
+ "application/json": components["schemas"]["ChatSessionBranchesResponse"];
18212
+ };
18213
+ };
18214
+ /** @description Chat session not found. */
18215
+ 404: {
18216
+ headers: {
18217
+ [name: string]: unknown;
18218
+ };
18219
+ content: {
18220
+ "application/json": components["schemas"]["ErrorResponse"];
18221
+ };
18222
+ };
18223
+ };
18224
+ };
16637
18225
  closeChatSession: {
16638
18226
  parameters: {
16639
18227
  query?: never;
@@ -16829,7 +18417,12 @@ export interface operations {
16829
18417
  };
16830
18418
  getChatSessionDiff: {
16831
18419
  parameters: {
16832
- query?: never;
18420
+ query?: {
18421
+ /** @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. */
18422
+ pr_number?: number;
18423
+ /** @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. */
18424
+ branch?: string;
18425
+ };
16833
18426
  header?: never;
16834
18427
  path: {
16835
18428
  /** @description Chat session ID. */
@@ -16848,7 +18441,16 @@ export interface operations {
16848
18441
  "application/json": components["schemas"]["ChatSessionDiffResponse"];
16849
18442
  };
16850
18443
  };
16851
- /** @description Chat session or project not found. */
18444
+ /** @description Both pr_number and branch were passed. */
18445
+ 400: {
18446
+ headers: {
18447
+ [name: string]: unknown;
18448
+ };
18449
+ content: {
18450
+ "application/json": components["schemas"]["ErrorResponse"];
18451
+ };
18452
+ };
18453
+ /** @description Chat session, project, or registered branch not found. */
16852
18454
  404: {
16853
18455
  headers: {
16854
18456
  [name: string]: unknown;
@@ -17465,6 +19067,38 @@ export interface operations {
17465
19067
  };
17466
19068
  };
17467
19069
  };
19070
+ getChatSessionSnapshot: {
19071
+ parameters: {
19072
+ query?: never;
19073
+ header?: never;
19074
+ path: {
19075
+ /** @description Chat session ID. */
19076
+ id: number;
19077
+ };
19078
+ cookie?: never;
19079
+ };
19080
+ requestBody?: never;
19081
+ responses: {
19082
+ /** @description Sandbox status, agent lifecycle, and user messages. */
19083
+ 200: {
19084
+ headers: {
19085
+ [name: string]: unknown;
19086
+ };
19087
+ content: {
19088
+ "application/json": components["schemas"]["ChatSessionSnapshotResponse"];
19089
+ };
19090
+ };
19091
+ /** @description Chat session not found. */
19092
+ 404: {
19093
+ headers: {
19094
+ [name: string]: unknown;
19095
+ };
19096
+ content: {
19097
+ "application/json": components["schemas"]["ErrorResponse"];
19098
+ };
19099
+ };
19100
+ };
19101
+ };
17468
19102
  updateChatSessionSlackThreadSync: {
17469
19103
  parameters: {
17470
19104
  query?: never;
@@ -17657,28 +19291,77 @@ export interface operations {
17657
19291
  path?: never;
17658
19292
  cookie?: never;
17659
19293
  };
17660
- requestBody?: never;
17661
- responses: {
17662
- /** @description Distinct chat-session creators. */
17663
- 200: {
17664
- headers: {
17665
- [name: string]: unknown;
17666
- };
17667
- content: {
17668
- "application/json": components["schemas"]["ChatSessionUsersResponse"];
19294
+ requestBody?: never;
19295
+ responses: {
19296
+ /** @description Distinct chat-session creators. */
19297
+ 200: {
19298
+ headers: {
19299
+ [name: string]: unknown;
19300
+ };
19301
+ content: {
19302
+ "application/json": components["schemas"]["ChatSessionUsersResponse"];
19303
+ };
19304
+ };
19305
+ /** @description Invalid request. */
19306
+ 400: {
19307
+ headers: {
19308
+ [name: string]: unknown;
19309
+ };
19310
+ content: {
19311
+ "application/json": components["schemas"]["ErrorResponse"];
19312
+ };
19313
+ };
19314
+ /** @description Project not found or not accessible. */
19315
+ 404: {
19316
+ headers: {
19317
+ [name: string]: unknown;
19318
+ };
19319
+ content: {
19320
+ "application/json": components["schemas"]["ErrorResponse"];
19321
+ };
19322
+ };
19323
+ };
19324
+ };
19325
+ dodoPaymentsWebhook: {
19326
+ parameters: {
19327
+ query?: never;
19328
+ header?: never;
19329
+ path?: never;
19330
+ cookie?: never;
19331
+ };
19332
+ requestBody?: {
19333
+ content: {
19334
+ "application/json": {
19335
+ /** @description Event type, e.g. "payment.succeeded". */
19336
+ type: string;
19337
+ /** @description Event payload. */
19338
+ data: {
19339
+ /** @description Dodo payment ID. */
19340
+ payment_id?: string;
19341
+ /** @description Charged amount in minor units, tax included. */
19342
+ total_amount?: number;
19343
+ /** @description Tax portion of total_amount in minor units. */
19344
+ tax?: number;
19345
+ /** @description Metadata set at checkout session creation. */
19346
+ metadata?: {
19347
+ [key: string]: string;
19348
+ };
19349
+ };
17669
19350
  };
17670
19351
  };
17671
- /** @description Invalid request. */
17672
- 400: {
19352
+ };
19353
+ responses: {
19354
+ /** @description Event acknowledged. */
19355
+ 200: {
17673
19356
  headers: {
17674
19357
  [name: string]: unknown;
17675
19358
  };
17676
19359
  content: {
17677
- "application/json": components["schemas"]["ErrorResponse"];
19360
+ "application/json": components["schemas"]["DodoWebhookAckResponse"];
17678
19361
  };
17679
19362
  };
17680
- /** @description Project not found or not accessible. */
17681
- 404: {
19363
+ /** @description Missing or invalid webhook signature. */
19364
+ 401: {
17682
19365
  headers: {
17683
19366
  [name: string]: unknown;
17684
19367
  };
@@ -19853,16 +21536,269 @@ export interface operations {
19853
21536
  };
19854
21537
  };
19855
21538
  responses: {
19856
- /** @description The mirrored invoice. */
21539
+ /** @description The mirrored invoice. */
21540
+ 200: {
21541
+ headers: {
21542
+ [name: string]: unknown;
21543
+ };
21544
+ content: {
21545
+ "application/json": components["schemas"]["InvoicePaymentStatusResponse"];
21546
+ };
21547
+ };
21548
+ /** @description Invalid request. */
21549
+ 400: {
21550
+ headers: {
21551
+ [name: string]: unknown;
21552
+ };
21553
+ content: {
21554
+ "application/json": components["schemas"]["ErrorResponse"];
21555
+ };
21556
+ };
21557
+ /** @description Invoice not found. */
21558
+ 404: {
21559
+ headers: {
21560
+ [name: string]: unknown;
21561
+ };
21562
+ content: {
21563
+ "application/json": components["schemas"]["ErrorResponse"];
21564
+ };
21565
+ };
21566
+ };
21567
+ };
21568
+ getInvoicePdfDownloadUrl: {
21569
+ parameters: {
21570
+ query?: never;
21571
+ header?: never;
21572
+ path: {
21573
+ /** @description Invoice ID. */
21574
+ id: string;
21575
+ };
21576
+ cookie?: never;
21577
+ };
21578
+ requestBody?: never;
21579
+ responses: {
21580
+ /** @description The PDF download URL. */
21581
+ 200: {
21582
+ headers: {
21583
+ [name: string]: unknown;
21584
+ };
21585
+ content: {
21586
+ "application/json": components["schemas"]["InvoicePdfDownloadUrlResponse"];
21587
+ };
21588
+ };
21589
+ /** @description Invalid invoice id. */
21590
+ 400: {
21591
+ headers: {
21592
+ [name: string]: unknown;
21593
+ };
21594
+ content: {
21595
+ "application/json": components["schemas"]["ErrorResponse"];
21596
+ };
21597
+ };
21598
+ /** @description Invoice not found or has no PDF. */
21599
+ 404: {
21600
+ headers: {
21601
+ [name: string]: unknown;
21602
+ };
21603
+ content: {
21604
+ "application/json": components["schemas"]["ErrorResponse"];
21605
+ };
21606
+ };
21607
+ };
21608
+ };
21609
+ downloadInvoicePdf: {
21610
+ parameters: {
21611
+ query?: never;
21612
+ header?: never;
21613
+ path: {
21614
+ /** @description Invoice ID. */
21615
+ id: string;
21616
+ };
21617
+ cookie?: never;
21618
+ };
21619
+ requestBody?: never;
21620
+ responses: {
21621
+ /** @description The invoice PDF. */
21622
+ 200: {
21623
+ headers: {
21624
+ [name: string]: unknown;
21625
+ };
21626
+ content: {
21627
+ "application/pdf": string;
21628
+ };
21629
+ };
21630
+ /** @description Invalid invoice id. */
21631
+ 400: {
21632
+ headers: {
21633
+ [name: string]: unknown;
21634
+ };
21635
+ content: {
21636
+ "application/json": components["schemas"]["ErrorResponse"];
21637
+ };
21638
+ };
21639
+ /** @description Invoice or its PDF not found. */
21640
+ 404: {
21641
+ headers: {
21642
+ [name: string]: unknown;
21643
+ };
21644
+ content: {
21645
+ "application/json": components["schemas"]["ErrorResponse"];
21646
+ };
21647
+ };
21648
+ };
21649
+ };
21650
+ sendInvoice: {
21651
+ parameters: {
21652
+ query?: never;
21653
+ header?: never;
21654
+ path: {
21655
+ /** @description Invoice ID. */
21656
+ id: string;
21657
+ };
21658
+ cookie?: never;
21659
+ };
21660
+ requestBody?: {
21661
+ content: {
21662
+ "application/json": {
21663
+ is_test_email?: boolean;
21664
+ };
21665
+ };
21666
+ };
21667
+ responses: {
21668
+ /** @description The invoice was sent. */
21669
+ 200: {
21670
+ headers: {
21671
+ [name: string]: unknown;
21672
+ };
21673
+ content: {
21674
+ "application/json": components["schemas"]["SendInvoiceResponse"];
21675
+ };
21676
+ };
21677
+ /** @description Invalid request, missing PDF, missing org/billing emails, or no due date. */
21678
+ 400: {
21679
+ headers: {
21680
+ [name: string]: unknown;
21681
+ };
21682
+ content: {
21683
+ "application/json": components["schemas"]["ErrorResponse"];
21684
+ };
21685
+ };
21686
+ /** @description Invoice not found. */
21687
+ 404: {
21688
+ headers: {
21689
+ [name: string]: unknown;
21690
+ };
21691
+ content: {
21692
+ "application/json": components["schemas"]["ErrorResponse"];
21693
+ };
21694
+ };
21695
+ };
21696
+ };
21697
+ listOrgInvoices: {
21698
+ parameters: {
21699
+ query?: never;
21700
+ header?: never;
21701
+ path?: never;
21702
+ cookie?: never;
21703
+ };
21704
+ requestBody?: never;
21705
+ responses: {
21706
+ /** @description The org's invoices. */
21707
+ 200: {
21708
+ headers: {
21709
+ [name: string]: unknown;
21710
+ };
21711
+ content: {
21712
+ "application/json": components["schemas"]["OrgInvoiceListResponse"];
21713
+ };
21714
+ };
21715
+ /** @description Invalid request or missing project scope. */
21716
+ 400: {
21717
+ headers: {
21718
+ [name: string]: unknown;
21719
+ };
21720
+ content: {
21721
+ "application/json": components["schemas"]["ErrorResponse"];
21722
+ };
21723
+ };
21724
+ };
21725
+ };
21726
+ createInvoiceCheckoutSession: {
21727
+ parameters: {
21728
+ query?: never;
21729
+ header?: never;
21730
+ path: {
21731
+ /** @description Invoice ID. */
21732
+ id: string;
21733
+ };
21734
+ cookie?: never;
21735
+ };
21736
+ requestBody?: {
21737
+ content: {
21738
+ "application/json": components["schemas"]["CreateInvoiceCheckoutSessionRequest"];
21739
+ };
21740
+ };
21741
+ responses: {
21742
+ /** @description The checkout session. */
21743
+ 200: {
21744
+ headers: {
21745
+ [name: string]: unknown;
21746
+ };
21747
+ content: {
21748
+ "application/json": components["schemas"]["InvoiceCheckoutSessionResponse"];
21749
+ };
21750
+ };
21751
+ /** @description Invalid request, unsupported currency, or Dodo not configured. */
21752
+ 400: {
21753
+ headers: {
21754
+ [name: string]: unknown;
21755
+ };
21756
+ content: {
21757
+ "application/json": components["schemas"]["ErrorResponse"];
21758
+ };
21759
+ };
21760
+ /** @description Invoice not found. */
21761
+ 404: {
21762
+ headers: {
21763
+ [name: string]: unknown;
21764
+ };
21765
+ content: {
21766
+ "application/json": components["schemas"]["ErrorResponse"];
21767
+ };
21768
+ };
21769
+ /** @description Invoice has no outstanding amount. */
21770
+ 409: {
21771
+ headers: {
21772
+ [name: string]: unknown;
21773
+ };
21774
+ content: {
21775
+ "application/json": components["schemas"]["ErrorResponse"];
21776
+ };
21777
+ };
21778
+ };
21779
+ };
21780
+ downloadOrgInvoicePdf: {
21781
+ parameters: {
21782
+ query?: never;
21783
+ header?: never;
21784
+ path: {
21785
+ /** @description Invoice ID. */
21786
+ id: string;
21787
+ };
21788
+ cookie?: never;
21789
+ };
21790
+ requestBody?: never;
21791
+ responses: {
21792
+ /** @description The invoice PDF. */
19857
21793
  200: {
19858
21794
  headers: {
19859
21795
  [name: string]: unknown;
19860
21796
  };
19861
21797
  content: {
19862
- "application/json": components["schemas"]["InvoicePaymentStatusResponse"];
21798
+ "application/pdf": string;
19863
21799
  };
19864
21800
  };
19865
- /** @description Invalid request. */
21801
+ /** @description Invalid invoice id. */
19866
21802
  400: {
19867
21803
  headers: {
19868
21804
  [name: string]: unknown;
@@ -19871,7 +21807,7 @@ export interface operations {
19871
21807
  "application/json": components["schemas"]["ErrorResponse"];
19872
21808
  };
19873
21809
  };
19874
- /** @description Invoice not found. */
21810
+ /** @description Invoice or its PDF not found. */
19875
21811
  404: {
19876
21812
  headers: {
19877
21813
  [name: string]: unknown;
@@ -19882,7 +21818,7 @@ export interface operations {
19882
21818
  };
19883
21819
  };
19884
21820
  };
19885
- getInvoicePdfDownloadUrl: {
21821
+ createInvoiceRazorpayOrder: {
19886
21822
  parameters: {
19887
21823
  query?: never;
19888
21824
  header?: never;
@@ -19894,16 +21830,16 @@ export interface operations {
19894
21830
  };
19895
21831
  requestBody?: never;
19896
21832
  responses: {
19897
- /** @description The PDF download URL. */
21833
+ /** @description The Razorpay order. */
19898
21834
  200: {
19899
21835
  headers: {
19900
21836
  [name: string]: unknown;
19901
21837
  };
19902
21838
  content: {
19903
- "application/json": components["schemas"]["InvoicePdfDownloadUrlResponse"];
21839
+ "application/json": components["schemas"]["InvoiceRazorpayOrderResponse"];
19904
21840
  };
19905
21841
  };
19906
- /** @description Invalid invoice id. */
21842
+ /** @description Invalid request, unsupported currency, or Razorpay not configured. */
19907
21843
  400: {
19908
21844
  headers: {
19909
21845
  [name: string]: unknown;
@@ -19912,7 +21848,7 @@ export interface operations {
19912
21848
  "application/json": components["schemas"]["ErrorResponse"];
19913
21849
  };
19914
21850
  };
19915
- /** @description Invoice not found or has no PDF. */
21851
+ /** @description Invoice not found. */
19916
21852
  404: {
19917
21853
  headers: {
19918
21854
  [name: string]: unknown;
@@ -19921,9 +21857,18 @@ export interface operations {
19921
21857
  "application/json": components["schemas"]["ErrorResponse"];
19922
21858
  };
19923
21859
  };
21860
+ /** @description Invoice has no outstanding amount. */
21861
+ 409: {
21862
+ headers: {
21863
+ [name: string]: unknown;
21864
+ };
21865
+ content: {
21866
+ "application/json": components["schemas"]["ErrorResponse"];
21867
+ };
21868
+ };
19924
21869
  };
19925
21870
  };
19926
- downloadInvoicePdf: {
21871
+ verifyInvoiceRazorpayPayment: {
19927
21872
  parameters: {
19928
21873
  query?: never;
19929
21874
  header?: never;
@@ -19933,18 +21878,22 @@ export interface operations {
19933
21878
  };
19934
21879
  cookie?: never;
19935
21880
  };
19936
- requestBody?: never;
21881
+ requestBody?: {
21882
+ content: {
21883
+ "application/json": components["schemas"]["VerifyInvoiceRazorpayPaymentRequest"];
21884
+ };
21885
+ };
19937
21886
  responses: {
19938
- /** @description The invoice PDF. */
21887
+ /** @description The settled payment state. */
19939
21888
  200: {
19940
21889
  headers: {
19941
21890
  [name: string]: unknown;
19942
21891
  };
19943
21892
  content: {
19944
- "application/pdf": string;
21893
+ "application/json": components["schemas"]["VerifyInvoiceRazorpayPaymentResponse"];
19945
21894
  };
19946
21895
  };
19947
- /** @description Invalid invoice id. */
21896
+ /** @description Invalid request, signature mismatch, order/invoice mismatch, or Razorpay not configured. */
19948
21897
  400: {
19949
21898
  headers: {
19950
21899
  [name: string]: unknown;
@@ -19953,7 +21902,7 @@ export interface operations {
19953
21902
  "application/json": components["schemas"]["ErrorResponse"];
19954
21903
  };
19955
21904
  };
19956
- /** @description Invoice or its PDF not found. */
21905
+ /** @description Invoice not found. */
19957
21906
  404: {
19958
21907
  headers: {
19959
21908
  [name: string]: unknown;
@@ -19962,9 +21911,18 @@ export interface operations {
19962
21911
  "application/json": components["schemas"]["ErrorResponse"];
19963
21912
  };
19964
21913
  };
21914
+ /** @description Payment not in a settled state. */
21915
+ 409: {
21916
+ headers: {
21917
+ [name: string]: unknown;
21918
+ };
21919
+ content: {
21920
+ "application/json": components["schemas"]["ErrorResponse"];
21921
+ };
21922
+ };
19965
21923
  };
19966
21924
  };
19967
- sendInvoice: {
21925
+ downloadOrgInvoiceTaxInvoice: {
19968
21926
  parameters: {
19969
21927
  query?: never;
19970
21928
  header?: never;
@@ -19974,24 +21932,18 @@ export interface operations {
19974
21932
  };
19975
21933
  cookie?: never;
19976
21934
  };
19977
- requestBody?: {
19978
- content: {
19979
- "application/json": {
19980
- is_test_email?: boolean;
19981
- };
19982
- };
19983
- };
21935
+ requestBody?: never;
19984
21936
  responses: {
19985
- /** @description The invoice was sent. */
21937
+ /** @description The tax invoice PDF. */
19986
21938
  200: {
19987
21939
  headers: {
19988
21940
  [name: string]: unknown;
19989
21941
  };
19990
21942
  content: {
19991
- "application/json": components["schemas"]["SendInvoiceResponse"];
21943
+ "application/pdf": string;
19992
21944
  };
19993
21945
  };
19994
- /** @description Invalid request, missing PDF, missing org/billing emails, or no due date. */
21946
+ /** @description Invalid invoice id or payments not configured. */
19995
21947
  400: {
19996
21948
  headers: {
19997
21949
  [name: string]: unknown;
@@ -20000,7 +21952,7 @@ export interface operations {
20000
21952
  "application/json": components["schemas"]["ErrorResponse"];
20001
21953
  };
20002
21954
  };
20003
- /** @description Invoice not found. */
21955
+ /** @description Invoice or its tax invoice not found. */
20004
21956
  404: {
20005
21957
  headers: {
20006
21958
  [name: string]: unknown;
@@ -20988,7 +22940,7 @@ export interface operations {
20988
22940
  };
20989
22941
  };
20990
22942
  };
20991
- createOnboardingOrg: {
22943
+ completeOnboarding: {
20992
22944
  parameters: {
20993
22945
  query?: never;
20994
22946
  header?: never;
@@ -20997,17 +22949,17 @@ export interface operations {
20997
22949
  };
20998
22950
  requestBody?: {
20999
22951
  content: {
21000
- "application/json": components["schemas"]["CreateOnboardingOrgRequest"];
22952
+ "application/json": components["schemas"]["OnboardingCompleteRequest"];
21001
22953
  };
21002
22954
  };
21003
22955
  responses: {
21004
- /** @description The created organisation. */
22956
+ /** @description Created org and project. */
21005
22957
  200: {
21006
22958
  headers: {
21007
22959
  [name: string]: unknown;
21008
22960
  };
21009
22961
  content: {
21010
- "application/json": components["schemas"]["OnboardingOrgResponse"];
22962
+ "application/json": components["schemas"]["OnboardingCompleteResponse"];
21011
22963
  };
21012
22964
  };
21013
22965
  /** @description Invalid request. */
@@ -21019,6 +22971,44 @@ export interface operations {
21019
22971
  "application/json": components["schemas"]["ErrorResponse"];
21020
22972
  };
21021
22973
  };
22974
+ /** @description Caller is not a member of the given organisation. */
22975
+ 403: {
22976
+ headers: {
22977
+ [name: string]: unknown;
22978
+ };
22979
+ content: {
22980
+ "application/json": components["schemas"]["ErrorResponse"];
22981
+ };
22982
+ };
22983
+ };
22984
+ };
22985
+ getOnboardingContext: {
22986
+ parameters: {
22987
+ query?: never;
22988
+ header?: never;
22989
+ path?: never;
22990
+ cookie?: never;
22991
+ };
22992
+ requestBody?: never;
22993
+ responses: {
22994
+ /** @description Onboarding context. */
22995
+ 200: {
22996
+ headers: {
22997
+ [name: string]: unknown;
22998
+ };
22999
+ content: {
23000
+ "application/json": components["schemas"]["OnboardingContextResponse"];
23001
+ };
23002
+ };
23003
+ /** @description No verified email on the session. */
23004
+ 400: {
23005
+ headers: {
23006
+ [name: string]: unknown;
23007
+ };
23008
+ content: {
23009
+ "application/json": components["schemas"]["ErrorResponse"];
23010
+ };
23011
+ };
21022
23012
  };
21023
23013
  };
21024
23014
  listOrderForms: {
@@ -21340,6 +23330,135 @@ export interface operations {
21340
23330
  };
21341
23331
  };
21342
23332
  };
23333
+ listOrgInvites: {
23334
+ parameters: {
23335
+ query?: never;
23336
+ header?: never;
23337
+ path: {
23338
+ /** @description Organization ID. */
23339
+ id: number;
23340
+ };
23341
+ cookie?: never;
23342
+ };
23343
+ requestBody?: never;
23344
+ responses: {
23345
+ /** @description Invites for the organization. */
23346
+ 200: {
23347
+ headers: {
23348
+ [name: string]: unknown;
23349
+ };
23350
+ content: {
23351
+ "application/json": components["schemas"]["OrgInviteListResponse"];
23352
+ };
23353
+ };
23354
+ /** @description Forbidden. */
23355
+ 403: {
23356
+ headers: {
23357
+ [name: string]: unknown;
23358
+ };
23359
+ content: {
23360
+ "application/json": components["schemas"]["ErrorResponse"];
23361
+ };
23362
+ };
23363
+ };
23364
+ };
23365
+ createOrgInvite: {
23366
+ parameters: {
23367
+ query?: never;
23368
+ header?: never;
23369
+ path: {
23370
+ /** @description Organization ID. */
23371
+ id: number;
23372
+ };
23373
+ cookie?: never;
23374
+ };
23375
+ requestBody?: {
23376
+ content: {
23377
+ "application/json": components["schemas"]["CreateOrgInviteRequest"];
23378
+ };
23379
+ };
23380
+ responses: {
23381
+ /** @description The created invite. */
23382
+ 200: {
23383
+ headers: {
23384
+ [name: string]: unknown;
23385
+ };
23386
+ content: {
23387
+ "application/json": components["schemas"]["OrgInviteResponse"];
23388
+ };
23389
+ };
23390
+ /** @description Invalid request. */
23391
+ 400: {
23392
+ headers: {
23393
+ [name: string]: unknown;
23394
+ };
23395
+ content: {
23396
+ "application/json": components["schemas"]["ErrorResponse"];
23397
+ };
23398
+ };
23399
+ /** @description Forbidden. */
23400
+ 403: {
23401
+ headers: {
23402
+ [name: string]: unknown;
23403
+ };
23404
+ content: {
23405
+ "application/json": components["schemas"]["ErrorResponse"];
23406
+ };
23407
+ };
23408
+ /** @description Organization not found. */
23409
+ 404: {
23410
+ headers: {
23411
+ [name: string]: unknown;
23412
+ };
23413
+ content: {
23414
+ "application/json": components["schemas"]["ErrorResponse"];
23415
+ };
23416
+ };
23417
+ };
23418
+ };
23419
+ revokeOrgInvite: {
23420
+ parameters: {
23421
+ query?: never;
23422
+ header?: never;
23423
+ path: {
23424
+ /** @description Organization ID. */
23425
+ id: number;
23426
+ /** @description Invite ID. */
23427
+ invite_id: number;
23428
+ };
23429
+ cookie?: never;
23430
+ };
23431
+ requestBody?: never;
23432
+ responses: {
23433
+ /** @description The revoked invite. */
23434
+ 200: {
23435
+ headers: {
23436
+ [name: string]: unknown;
23437
+ };
23438
+ content: {
23439
+ "application/json": components["schemas"]["OrgInviteRevokeResponse"];
23440
+ };
23441
+ };
23442
+ /** @description Forbidden. */
23443
+ 403: {
23444
+ headers: {
23445
+ [name: string]: unknown;
23446
+ };
23447
+ content: {
23448
+ "application/json": components["schemas"]["ErrorResponse"];
23449
+ };
23450
+ };
23451
+ /** @description Pending invite not found. */
23452
+ 404: {
23453
+ headers: {
23454
+ [name: string]: unknown;
23455
+ };
23456
+ content: {
23457
+ "application/json": components["schemas"]["ErrorResponse"];
23458
+ };
23459
+ };
23460
+ };
23461
+ };
21343
23462
  listOrgMembers: {
21344
23463
  parameters: {
21345
23464
  query?: {
@@ -21359,22 +23478,56 @@ export interface operations {
21359
23478
  };
21360
23479
  requestBody?: never;
21361
23480
  responses: {
21362
- /** @description Paginated organization members. */
23481
+ /** @description Paginated organization members. */
23482
+ 200: {
23483
+ headers: {
23484
+ [name: string]: unknown;
23485
+ };
23486
+ content: {
23487
+ "application/json": components["schemas"]["OrgMembersResponse"];
23488
+ };
23489
+ };
23490
+ /** @description Invalid request. */
23491
+ 400: {
23492
+ headers: {
23493
+ [name: string]: unknown;
23494
+ };
23495
+ content: {
23496
+ "application/json": components["schemas"]["ErrorResponse"];
23497
+ };
23498
+ };
23499
+ /** @description Forbidden. */
23500
+ 403: {
23501
+ headers: {
23502
+ [name: string]: unknown;
23503
+ };
23504
+ content: {
23505
+ "application/json": components["schemas"]["ErrorResponse"];
23506
+ };
23507
+ };
23508
+ };
23509
+ };
23510
+ removeOrgMember: {
23511
+ parameters: {
23512
+ query?: never;
23513
+ header?: never;
23514
+ path: {
23515
+ /** @description Organization ID. */
23516
+ id: number;
23517
+ /** @description Supabase user id of the member. */
23518
+ user_id: string;
23519
+ };
23520
+ cookie?: never;
23521
+ };
23522
+ requestBody?: never;
23523
+ responses: {
23524
+ /** @description Removal result. */
21363
23525
  200: {
21364
23526
  headers: {
21365
23527
  [name: string]: unknown;
21366
23528
  };
21367
23529
  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"];
23530
+ "application/json": components["schemas"]["RemoveMemberResponse"];
21378
23531
  };
21379
23532
  };
21380
23533
  /** @description Forbidden. */
@@ -21420,6 +23573,39 @@ export interface operations {
21420
23573
  };
21421
23574
  };
21422
23575
  };
23576
+ resolveMembership: {
23577
+ parameters: {
23578
+ query?: never;
23579
+ header?: never;
23580
+ path?: never;
23581
+ cookie?: never;
23582
+ };
23583
+ requestBody?: {
23584
+ content: {
23585
+ "application/json": components["schemas"]["ResolveMembershipRequest"];
23586
+ };
23587
+ };
23588
+ responses: {
23589
+ /** @description Org ids granted via invites and domain match. */
23590
+ 200: {
23591
+ headers: {
23592
+ [name: string]: unknown;
23593
+ };
23594
+ content: {
23595
+ "application/json": components["schemas"]["ResolveMembershipResponse"];
23596
+ };
23597
+ };
23598
+ /** @description Invalid request. */
23599
+ 400: {
23600
+ headers: {
23601
+ [name: string]: unknown;
23602
+ };
23603
+ content: {
23604
+ "application/json": components["schemas"]["ErrorResponse"];
23605
+ };
23606
+ };
23607
+ };
23608
+ };
21423
23609
  listPlanAssignments: {
21424
23610
  parameters: {
21425
23611
  query?: {
@@ -21645,7 +23831,7 @@ export interface operations {
21645
23831
  "application/json": components["schemas"]["CreateProjectResponse"];
21646
23832
  };
21647
23833
  };
21648
- /** @description Invalid repository name. */
23834
+ /** @description Invalid repository name or slug already taken. */
21649
23835
  400: {
21650
23836
  headers: {
21651
23837
  [name: string]: unknown;
@@ -21654,6 +23840,15 @@ export interface operations {
21654
23840
  "application/json": components["schemas"]["SimpleErrorResponse"];
21655
23841
  };
21656
23842
  };
23843
+ /** @description Caller does not belong to the organisation. */
23844
+ 403: {
23845
+ headers: {
23846
+ [name: string]: unknown;
23847
+ };
23848
+ content: {
23849
+ "application/json": components["schemas"]["SimpleErrorResponse"];
23850
+ };
23851
+ };
21657
23852
  /** @description Failed to create project. */
21658
23853
  500: {
21659
23854
  headers: {
@@ -21722,7 +23917,6 @@ export interface operations {
21722
23917
  name?: string;
21723
23918
  has_email_reporting?: boolean;
21724
23919
  has_branching_enabled?: boolean;
21725
- playwright_config?: unknown;
21726
23920
  default_branch?: string;
21727
23921
  owners?: string[];
21728
23922
  persistent_branches?: string[];
@@ -21832,10 +24026,8 @@ export interface operations {
21832
24026
  query?: {
21833
24027
  /** @description Page number (1-indexed). */
21834
24028
  page?: number;
21835
- /** @description Items per page (max 100). Defaults to 20. */
24029
+ /** @description Items per page (max 100). */
21836
24030
  per_page?: number;
21837
- /** @description Deprecated alias for `per_page`. */
21838
- pageSize?: number;
21839
24031
  /** @description Look-back window in days (max 365). */
21840
24032
  days?: number;
21841
24033
  /** @description Filter branches by status, or `all`. */
@@ -21910,10 +24102,10 @@ export interface operations {
21910
24102
  listProjectMergeRequests: {
21911
24103
  parameters: {
21912
24104
  query?: {
21913
- /** @description Max merge requests to return. */
21914
- limit?: number;
21915
- /** @description Number of merge requests to skip. */
21916
- offset?: number | null;
24105
+ /** @description Page number (1-indexed). */
24106
+ page?: number;
24107
+ /** @description Items per page (max 100). */
24108
+ per_page?: number;
21917
24109
  };
21918
24110
  header?: never;
21919
24111
  path: {
@@ -21994,51 +24186,6 @@ export interface operations {
21994
24186
  };
21995
24187
  };
21996
24188
  };
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
24189
  checkProjectRepoExists: {
22043
24190
  parameters: {
22044
24191
  query?: never;
@@ -22277,6 +24424,47 @@ export interface operations {
22277
24424
  };
22278
24425
  };
22279
24426
  };
24427
+ getProjectUsage: {
24428
+ parameters: {
24429
+ query?: {
24430
+ /** @description Start of the window, inclusive (ISO 8601 date or datetime, UTC). Defaults to `days` before now. */
24431
+ start_date?: string | null;
24432
+ /** @description End of the window, exclusive (ISO 8601 date or datetime, UTC). Defaults to now. */
24433
+ end_date?: string | null;
24434
+ /** @description Window size in days ending at `end_date` (1-365, default 30). Ignored when `start_date` is set. */
24435
+ days?: number;
24436
+ /** @description Filter to one workload class (e.g. "triage"). Pass "none" for spend with no purpose set. Omit for all classes. */
24437
+ purpose?: string;
24438
+ };
24439
+ header?: never;
24440
+ path: {
24441
+ /** @description Project ID. */
24442
+ id: number;
24443
+ };
24444
+ cookie?: never;
24445
+ };
24446
+ requestBody?: never;
24447
+ responses: {
24448
+ /** @description Usage for the window. */
24449
+ 200: {
24450
+ headers: {
24451
+ [name: string]: unknown;
24452
+ };
24453
+ content: {
24454
+ "application/json": components["schemas"]["ProjectUsageResponse"];
24455
+ };
24456
+ };
24457
+ /** @description Project not found. */
24458
+ 404: {
24459
+ headers: {
24460
+ [name: string]: unknown;
24461
+ };
24462
+ content: {
24463
+ "application/json": components["schemas"]["ErrorResponse"];
24464
+ };
24465
+ };
24466
+ };
24467
+ };
22280
24468
  checkBranchExists: {
22281
24469
  parameters: {
22282
24470
  query: {
@@ -22671,6 +24859,124 @@ export interface operations {
22671
24859
  };
22672
24860
  };
22673
24861
  };
24862
+ listRecentPages: {
24863
+ parameters: {
24864
+ query?: never;
24865
+ header?: never;
24866
+ path?: never;
24867
+ cookie?: never;
24868
+ };
24869
+ requestBody?: never;
24870
+ responses: {
24871
+ /** @description Recently viewed dashboard destinations. */
24872
+ 200: {
24873
+ headers: {
24874
+ [name: string]: unknown;
24875
+ };
24876
+ content: {
24877
+ "application/json": components["schemas"]["RecentPagesResponse"];
24878
+ };
24879
+ };
24880
+ /** @description Only signed-in users can access recent pages. */
24881
+ 403: {
24882
+ headers: {
24883
+ [name: string]: unknown;
24884
+ };
24885
+ content: {
24886
+ "application/json": components["schemas"]["ErrorResponse"];
24887
+ };
24888
+ };
24889
+ /** @description Recent pages storage is unavailable. */
24890
+ 503: {
24891
+ headers: {
24892
+ [name: string]: unknown;
24893
+ };
24894
+ content: {
24895
+ "application/json": components["schemas"]["ErrorResponse"];
24896
+ };
24897
+ };
24898
+ };
24899
+ };
24900
+ recordRecentPage: {
24901
+ parameters: {
24902
+ query?: never;
24903
+ header?: never;
24904
+ path?: never;
24905
+ cookie?: never;
24906
+ };
24907
+ requestBody?: {
24908
+ content: {
24909
+ "application/json": components["schemas"]["RecordRecentPageRequest"];
24910
+ };
24911
+ };
24912
+ responses: {
24913
+ /** @description The recorded dashboard destination. */
24914
+ 200: {
24915
+ headers: {
24916
+ [name: string]: unknown;
24917
+ };
24918
+ content: {
24919
+ "application/json": components["schemas"]["RecordRecentPageResponse"];
24920
+ };
24921
+ };
24922
+ /** @description The destination is invalid. */
24923
+ 400: {
24924
+ headers: {
24925
+ [name: string]: unknown;
24926
+ };
24927
+ content: {
24928
+ "application/json": components["schemas"]["ErrorResponse"];
24929
+ };
24930
+ };
24931
+ /** @description Only signed-in users can record recent pages. */
24932
+ 403: {
24933
+ headers: {
24934
+ [name: string]: unknown;
24935
+ };
24936
+ content: {
24937
+ "application/json": components["schemas"]["ErrorResponse"];
24938
+ };
24939
+ };
24940
+ /** @description Project not found. */
24941
+ 404: {
24942
+ headers: {
24943
+ [name: string]: unknown;
24944
+ };
24945
+ content: {
24946
+ "application/json": components["schemas"]["ErrorResponse"];
24947
+ };
24948
+ };
24949
+ /** @description Recent pages storage is unavailable. */
24950
+ 503: {
24951
+ headers: {
24952
+ [name: string]: unknown;
24953
+ };
24954
+ content: {
24955
+ "application/json": components["schemas"]["ErrorResponse"];
24956
+ };
24957
+ };
24958
+ };
24959
+ };
24960
+ listReporterTypes: {
24961
+ parameters: {
24962
+ query?: never;
24963
+ header?: never;
24964
+ path?: never;
24965
+ cookie?: never;
24966
+ };
24967
+ requestBody?: never;
24968
+ responses: {
24969
+ /** @description Reporter capabilities. */
24970
+ 200: {
24971
+ headers: {
24972
+ [name: string]: unknown;
24973
+ };
24974
+ content: {
24975
+ "application/json": components["schemas"]["ReporterTypesResponse"];
24976
+ };
24977
+ };
24978
+ };
24979
+ };
22674
24980
  listRequests: {
22675
24981
  parameters: {
22676
24982
  query?: {
@@ -23691,6 +25997,35 @@ export interface operations {
23691
25997
  };
23692
25998
  };
23693
25999
  };
26000
+ createMyMemberships: {
26001
+ parameters: {
26002
+ query?: never;
26003
+ header?: never;
26004
+ path?: never;
26005
+ cookie?: never;
26006
+ };
26007
+ requestBody?: never;
26008
+ responses: {
26009
+ /** @description Memberships created from pending invites. */
26010
+ 200: {
26011
+ headers: {
26012
+ [name: string]: unknown;
26013
+ };
26014
+ content: {
26015
+ "application/json": components["schemas"]["MembershipListResponse"];
26016
+ };
26017
+ };
26018
+ /** @description No verified email on the session. */
26019
+ 401: {
26020
+ headers: {
26021
+ [name: string]: unknown;
26022
+ };
26023
+ content: {
26024
+ "application/json": components["schemas"]["ErrorResponse"];
26025
+ };
26026
+ };
26027
+ };
26028
+ };
23694
26029
  listMySlackLinks: {
23695
26030
  parameters: {
23696
26031
  query?: never;