@empiricalrun/playwright-utils 0.55.0 → 0.56.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.
@@ -131,6 +131,26 @@ export interface paths {
131
131
  patch?: never;
132
132
  trace?: never;
133
133
  };
134
+ "/api/test-runs/{id}/share-targets": {
135
+ parameters: {
136
+ query?: never;
137
+ header?: never;
138
+ path?: never;
139
+ cookie?: never;
140
+ };
141
+ /**
142
+ * 🤖 List Slack share targets for a run
143
+ * @description Lists Slack destinations for sharing this run's triage content: reply targets for channels with an existing run notification thread, plus subscribed channels for a new message.
144
+ */
145
+ get: operations["listTestRunShareTargets"];
146
+ put?: never;
147
+ post?: never;
148
+ delete?: never;
149
+ options?: never;
150
+ head?: never;
151
+ patch?: never;
152
+ trace?: never;
153
+ };
134
154
  "/api/test-runs/{id}/ecs-task": {
135
155
  parameters: {
136
156
  query?: never;
@@ -890,26 +910,6 @@ export interface paths {
890
910
  patch?: never;
891
911
  trace?: never;
892
912
  };
893
- "/api/slack/internal-alerts/check-scopes": {
894
- parameters: {
895
- query?: never;
896
- header?: never;
897
- path?: never;
898
- cookie?: never;
899
- };
900
- /**
901
- * 🛡️ Check internal-alerts Slack scopes
902
- * @description Runs Slack auth.test for the internal-alerts Slack app and returns its granted scopes.
903
- */
904
- get: operations["slackInternalAlertCheckScopes"];
905
- put?: never;
906
- post?: never;
907
- delete?: never;
908
- options?: never;
909
- head?: never;
910
- patch?: never;
911
- trace?: never;
912
- };
913
913
  "/api/slack/events": {
914
914
  parameters: {
915
915
  query?: never;
@@ -1058,27 +1058,47 @@ export interface paths {
1058
1058
  patch?: never;
1059
1059
  trace?: never;
1060
1060
  };
1061
- "/api/slack/message": {
1061
+ "/api/slack/teams": {
1062
1062
  parameters: {
1063
1063
  query?: never;
1064
1064
  header?: never;
1065
1065
  path?: never;
1066
1066
  cookie?: never;
1067
1067
  };
1068
- get?: never;
1068
+ /**
1069
+ * ⚙️ List Slack workspaces
1070
+ * @description Lists the Slack workspaces available to the scoped project: the shared default Empirical workspace plus any org-specific app installs.
1071
+ */
1072
+ get: operations["listSlackTeams"];
1069
1073
  put?: never;
1074
+ post?: never;
1075
+ delete?: never;
1076
+ options?: never;
1077
+ head?: never;
1078
+ patch?: never;
1079
+ trace?: never;
1080
+ };
1081
+ "/api/badges/projects/{project_slug}/environments/{environment_slug}": {
1082
+ parameters: {
1083
+ query?: never;
1084
+ header?: never;
1085
+ path?: never;
1086
+ cookie?: never;
1087
+ };
1070
1088
  /**
1071
- * ⚙️ Post a Slack message
1072
- * @description Posts a message to a Slack channel the caller can reach via a subscribed project (or via the internal alerts app for unsubscribed channels).
1089
+ * Get an environment status badge
1090
+ * @description Renders an SVG status badge (passing/failing/running/etc.) for the latest test run of a project environment. Served unauthenticated for embedding in READMEs.
1073
1091
  */
1074
- post: operations["postSlackMessage"];
1092
+ get: operations["getEnvironmentBadge"];
1093
+ put?: never;
1094
+ post?: never;
1075
1095
  delete?: never;
1076
1096
  options?: never;
1077
1097
  head?: never;
1078
1098
  patch?: never;
1079
1099
  trace?: never;
1080
1100
  };
1081
- "/api/slack/teams": {
1101
+ "/api/failure-groups": {
1082
1102
  parameters: {
1083
1103
  query?: never;
1084
1104
  header?: never;
@@ -1086,10 +1106,62 @@ export interface paths {
1086
1106
  cookie?: never;
1087
1107
  };
1088
1108
  /**
1089
- * ⚙️ List Slack workspaces
1090
- * @description Lists the Slack workspaces available to the scoped project: the shared default Empirical workspace plus any org-specific app installs.
1109
+ * List failure groups
1110
+ * @description Returns a paginated list of failure groups for the scoped project, newest sighting first. Use this to match a failure against an existing group before creating a new one.
1091
1111
  */
1092
- get: operations["listSlackTeams"];
1112
+ get: operations["listFailureGroups"];
1113
+ put?: never;
1114
+ /**
1115
+ * 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.
1117
+ */
1118
+ post: operations["createFailureGroup"];
1119
+ delete?: never;
1120
+ options?: never;
1121
+ head?: never;
1122
+ patch?: never;
1123
+ trace?: never;
1124
+ };
1125
+ "/api/failure-groups/{id}": {
1126
+ parameters: {
1127
+ query?: never;
1128
+ header?: never;
1129
+ path?: never;
1130
+ cookie?: never;
1131
+ };
1132
+ /**
1133
+ * Get a failure group
1134
+ * @description Retrieves a single failure group with its members.
1135
+ */
1136
+ get: operations["getFailureGroup"];
1137
+ put?: never;
1138
+ post?: never;
1139
+ /**
1140
+ * Delete a failure group
1141
+ * @description Deletes a failure group and its members. Its edit-history revisions survive.
1142
+ */
1143
+ delete: operations["deleteFailureGroup"];
1144
+ options?: never;
1145
+ head?: never;
1146
+ /**
1147
+ * 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.
1149
+ */
1150
+ patch: operations["updateFailureGroup"];
1151
+ trace?: never;
1152
+ };
1153
+ "/api/failure-groups/{id}/activity": {
1154
+ parameters: {
1155
+ query?: never;
1156
+ header?: never;
1157
+ path?: never;
1158
+ cookie?: never;
1159
+ };
1160
+ /**
1161
+ * 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.
1163
+ */
1164
+ get: operations["getFailureGroupActivity"];
1093
1165
  put?: never;
1094
1166
  post?: never;
1095
1167
  delete?: never;
@@ -1098,7 +1170,7 @@ export interface paths {
1098
1170
  patch?: never;
1099
1171
  trace?: never;
1100
1172
  };
1101
- "/api/badges/projects/{project_slug}/environments/{environment_slug}": {
1173
+ "/api/failure-groups/{id}/members": {
1102
1174
  parameters: {
1103
1175
  query?: never;
1104
1176
  header?: never;
@@ -1106,10 +1178,54 @@ export interface paths {
1106
1178
  cookie?: never;
1107
1179
  };
1108
1180
  /**
1109
- * Get an environment status badge
1110
- * @description Renders an SVG status badge (passing/failing/running/etc.) for the latest test run of a project environment. Served unauthenticated for embedding in READMEs.
1181
+ * List a failure group's members
1182
+ * @description Returns the group's members (one entry per test, newest sighting first), derived from the membership-event log: state, provenance of the latest attach, first/last sighting, sighting count and environments.
1111
1183
  */
1112
- get: operations["getEnvironmentBadge"];
1184
+ get: operations["listFailureGroupMembers"];
1185
+ put?: never;
1186
+ /**
1187
+ * 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.
1189
+ */
1190
+ post: operations["attachFailureGroupMember"];
1191
+ delete?: never;
1192
+ options?: never;
1193
+ head?: never;
1194
+ patch?: never;
1195
+ trace?: never;
1196
+ };
1197
+ "/api/failure-groups/{id}/merge": {
1198
+ parameters: {
1199
+ query?: never;
1200
+ header?: never;
1201
+ path?: never;
1202
+ cookie?: never;
1203
+ };
1204
+ get?: never;
1205
+ put?: never;
1206
+ /**
1207
+ * Merge a failure group into another
1208
+ * @description Moves this group's members into the target, unions fingerprints, and deletes this group. Returns the target.
1209
+ */
1210
+ post: operations["mergeFailureGroup"];
1211
+ delete?: never;
1212
+ options?: never;
1213
+ head?: never;
1214
+ patch?: never;
1215
+ trace?: never;
1216
+ };
1217
+ "/api/failure-groups/members": {
1218
+ parameters: {
1219
+ query?: never;
1220
+ header?: never;
1221
+ path?: never;
1222
+ cookie?: never;
1223
+ };
1224
+ /**
1225
+ * List a run's failure-group members
1226
+ * @description Returns one entry per failed test in the run that is attached to a failure group, with the group's content hydrated. Read from the canonical membership-event log; when several sources attached the same test, human wins over agent over machine. Dedupe on group_id for the run's distinct groups.
1227
+ */
1228
+ get: operations["listFailureGroupMembersByTestRun"];
1113
1229
  put?: never;
1114
1230
  post?: never;
1115
1231
  delete?: never;
@@ -1274,7 +1390,7 @@ export interface paths {
1274
1390
  patch?: never;
1275
1391
  trace?: never;
1276
1392
  };
1277
- "/api/diagnosis/{id}": {
1393
+ "/api/chat-sessions/{id}/threads": {
1278
1394
  parameters: {
1279
1395
  query?: never;
1280
1396
  header?: never;
@@ -1282,39 +1398,43 @@ export interface paths {
1282
1398
  cookie?: never;
1283
1399
  };
1284
1400
  /**
1285
- * 🤖 Get diagnosis by ID
1286
- * @description Returns the diagnosis row(s) for a numeric diagnosis ID, including retry details and any snoozes that apply.
1401
+ * 🤖 List a session's threads
1402
+ * @description Returns the messaging threads linked to a chat session.
1287
1403
  */
1288
- get: operations["getDiagnosis"];
1404
+ get: operations["listChatSessionThreads"];
1289
1405
  put?: never;
1290
- post?: never;
1406
+ /**
1407
+ * 🤖 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.
1409
+ */
1410
+ post: operations["createChatSessionThread"];
1291
1411
  delete?: never;
1292
1412
  options?: never;
1293
1413
  head?: never;
1294
1414
  patch?: never;
1295
1415
  trace?: never;
1296
1416
  };
1297
- "/api/diagnosis/{id}/detailed": {
1417
+ "/api/chat-sessions/{id}/threads/{thread_id}/messages": {
1298
1418
  parameters: {
1299
1419
  query?: never;
1300
1420
  header?: never;
1301
1421
  path?: never;
1302
1422
  cookie?: never;
1303
1423
  };
1424
+ get?: never;
1425
+ put?: never;
1304
1426
  /**
1305
- * 🤖 Get detailed diagnosis
1306
- * @description Returns rich context about a failed test case: the test case definition, the failing test run, per-retry details (status, duration, error, attachments), and the file paths + line numbers extracted from the error stack. Useful when investigating a specific failure to pinpoint where to look in the source code.
1427
+ * 🤖 Post a message to a session thread
1428
+ * @description Posts an explicit Markdown message to an agent-controlled Slack thread. This does not create a chat-session user message and does not trigger automatic outbound mirroring.
1307
1429
  */
1308
- get: operations["getDiagnosisDetailed"];
1309
- put?: never;
1310
- post?: never;
1430
+ post: operations["createChatSessionThreadMessage"];
1311
1431
  delete?: never;
1312
1432
  options?: never;
1313
1433
  head?: never;
1314
1434
  patch?: never;
1315
1435
  trace?: never;
1316
1436
  };
1317
- "/api/failure-groups": {
1437
+ "/api/diagnosis/{id}": {
1318
1438
  parameters: {
1319
1439
  query?: never;
1320
1440
  header?: never;
@@ -1322,10 +1442,10 @@ export interface paths {
1322
1442
  cookie?: never;
1323
1443
  };
1324
1444
  /**
1325
- * 🤖 List failure groups
1326
- * @description Returns a paginated list of failure groups for the scoped project, newest sighting first. Use this to match a failure against an existing group before creating a new one.
1445
+ * 🤖 Get diagnosis by ID
1446
+ * @description Returns the diagnosis row(s) for a numeric diagnosis ID, including retry details and any snoozes that apply.
1327
1447
  */
1328
- get: operations["listFailureGroups"];
1448
+ get: operations["getDiagnosis"];
1329
1449
  put?: never;
1330
1450
  post?: never;
1331
1451
  delete?: never;
@@ -1334,7 +1454,7 @@ export interface paths {
1334
1454
  patch?: never;
1335
1455
  trace?: never;
1336
1456
  };
1337
- "/api/failure-groups/{id}": {
1457
+ "/api/diagnosis/{id}/detailed": {
1338
1458
  parameters: {
1339
1459
  query?: never;
1340
1460
  header?: never;
@@ -1342,10 +1462,10 @@ export interface paths {
1342
1462
  cookie?: never;
1343
1463
  };
1344
1464
  /**
1345
- * 🤖 Get a failure group
1346
- * @description Retrieves a single failure group with its members.
1465
+ * 🤖 Get detailed diagnosis
1466
+ * @description Returns rich context about a failed test case: the test case definition, the failing test run, per-retry details (status, duration, error, attachments), and the file paths + line numbers extracted from the error stack. Useful when investigating a specific failure to pinpoint where to look in the source code.
1347
1467
  */
1348
- get: operations["getFailureGroup"];
1468
+ get: operations["getDiagnosisDetailed"];
1349
1469
  put?: never;
1350
1470
  post?: never;
1351
1471
  delete?: never;
@@ -1463,12 +1583,14 @@ export interface paths {
1463
1583
  };
1464
1584
  /**
1465
1585
  * 🤖 List triage reports
1586
+ * @deprecated
1466
1587
  * @description Returns a paginated list of triage reports for the scoped project, optionally filtered by test run or chat session.
1467
1588
  */
1468
1589
  get: operations["listTriageReports"];
1469
1590
  put?: never;
1470
1591
  /**
1471
1592
  * 🤖 Create a triage report
1593
+ * @deprecated
1472
1594
  * @description Creates a triage report for a test run. Requires sandbox authentication; the owning chat session comes from the access token, not the body.
1473
1595
  */
1474
1596
  post: operations["createTriageReport"];
@@ -1487,6 +1609,7 @@ export interface paths {
1487
1609
  };
1488
1610
  /**
1489
1611
  * 🤖 Get a triage report
1612
+ * @deprecated
1490
1613
  * @description Retrieves a single triage report by ID.
1491
1614
  */
1492
1615
  get: operations["getTriageReport"];
@@ -1497,6 +1620,7 @@ export interface paths {
1497
1620
  head?: never;
1498
1621
  /**
1499
1622
  * 🤖 Update a triage report
1623
+ * @deprecated
1500
1624
  * @description Replaces the entire content payload of a triage report.
1501
1625
  */
1502
1626
  patch: operations["updateTriageReport"];
@@ -1513,6 +1637,7 @@ export interface paths {
1513
1637
  put?: never;
1514
1638
  /**
1515
1639
  * 🤖 Update one triage report key
1640
+ * @deprecated
1516
1641
  * @description Sets `reports[test_id]` on the report's content, preserving the version and other keys.
1517
1642
  */
1518
1643
  post: operations["updateTriageReportKey"];
@@ -1531,6 +1656,7 @@ export interface paths {
1531
1656
  };
1532
1657
  /**
1533
1658
  * 🤖 List triage share targets
1659
+ * @deprecated
1534
1660
  * @description Lists Slack destinations for a run's triage diagnosis: reply targets for channels with an existing run thread, plus subscribed channels for a new message.
1535
1661
  */
1536
1662
  get: operations["listTriageShareTargets"];
@@ -1542,6 +1668,50 @@ export interface paths {
1542
1668
  patch?: never;
1543
1669
  trace?: never;
1544
1670
  };
1671
+ "/api/triage-statuses": {
1672
+ parameters: {
1673
+ query?: never;
1674
+ header?: never;
1675
+ path?: never;
1676
+ cookie?: never;
1677
+ };
1678
+ /**
1679
+ * 🤖 List a run's triage statuses
1680
+ * @description Returns one entry per failing test the agent has triaged (or is triaging) in the run, most recently updated first.
1681
+ */
1682
+ get: operations["listTriageStatuses"];
1683
+ put?: never;
1684
+ /**
1685
+ * 🤖 Upsert a triage status
1686
+ * @description Creates or updates the triage status for one failing test in a run, keyed by (test_run_id, pw_test_id) — latest write wins. Requires sandbox authentication; the owning chat session comes from the access token. An omitted `group_id` keeps the stored value.
1687
+ */
1688
+ post: operations["upsertTriageStatus"];
1689
+ delete?: never;
1690
+ options?: never;
1691
+ head?: never;
1692
+ patch?: never;
1693
+ trace?: never;
1694
+ };
1695
+ "/api/users": {
1696
+ parameters: {
1697
+ query?: never;
1698
+ header?: never;
1699
+ path?: never;
1700
+ cookie?: never;
1701
+ };
1702
+ /**
1703
+ * 🤖 Search users
1704
+ * @description Searches users in the resolved project's organization, plus super admins, by name or email. The project is resolved from sandbox/project-api-key auth, x-project-id/x-project-slug, or single-project inference.
1705
+ */
1706
+ get: operations["listUsers"];
1707
+ put?: never;
1708
+ post?: never;
1709
+ delete?: never;
1710
+ options?: never;
1711
+ head?: never;
1712
+ patch?: never;
1713
+ trace?: never;
1714
+ };
1545
1715
  "/api/users/{id}": {
1546
1716
  parameters: {
1547
1717
  query?: never;
@@ -1650,6 +1820,26 @@ export interface paths {
1650
1820
  patch?: never;
1651
1821
  trace?: never;
1652
1822
  };
1823
+ "/api/alarms": {
1824
+ parameters: {
1825
+ query?: never;
1826
+ header?: never;
1827
+ path?: never;
1828
+ cookie?: never;
1829
+ };
1830
+ get?: never;
1831
+ put?: never;
1832
+ /**
1833
+ * ⚙️ Schedule a wake-up for the calling session
1834
+ * @description Schedules a one-time wake-up for the caller's own chat session, `delay` from now. At the scheduled time the message is delivered back into the session, resuming the agent. Only available to sandbox-delegation callers (an agent running in a session).
1835
+ */
1836
+ post: operations["createAlarm"];
1837
+ delete?: never;
1838
+ options?: never;
1839
+ head?: never;
1840
+ patch?: never;
1841
+ trace?: never;
1842
+ };
1653
1843
  "/api/api-keys": {
1654
1844
  parameters: {
1655
1845
  query?: never;
@@ -1957,8 +2147,8 @@ export interface paths {
1957
2147
  get?: never;
1958
2148
  put?: never;
1959
2149
  /**
1960
- * ⚙️ Pause or resume a sandbox
1961
- * @description Pauses or resumes the sandbox attached to a chat session.
2150
+ * ⚙️ Pause, resume, or reprovision a sandbox
2151
+ * @description Pauses, resumes, or reprovisions the sandbox attached to a chat session.
1962
2152
  */
1963
2153
  post: operations["controlChatSessionSandbox"];
1964
2154
  delete?: never;
@@ -2107,30 +2297,6 @@ export interface paths {
2107
2297
  patch?: never;
2108
2298
  trace?: never;
2109
2299
  };
2110
- "/api/chat-sessions/{id}/threads": {
2111
- parameters: {
2112
- query?: never;
2113
- header?: never;
2114
- path?: never;
2115
- cookie?: never;
2116
- };
2117
- /**
2118
- * ⚙️ List a session's threads
2119
- * @description Returns the messaging threads linked to a chat session.
2120
- */
2121
- get: operations["listChatSessionThreads"];
2122
- put?: never;
2123
- /**
2124
- * ⚙️ Create a session thread
2125
- * @description Creates a thread for a chat session. Currently only a personal Slack DM thread can be created, sent to the `user_id` recipient with the supplied `message`. The call is idempotent (keyed on session + recipient): it returns 201 with a newly created thread (and sends the message), or 200 with the existing thread (re-enabling its sync if disabled, without resending the message).
2126
- */
2127
- post: operations["createChatSessionThread"];
2128
- delete?: never;
2129
- options?: never;
2130
- head?: never;
2131
- patch?: never;
2132
- trace?: never;
2133
- };
2134
2300
  "/api/chat-sessions/{id}/threads/{thread_id}": {
2135
2301
  parameters: {
2136
2302
  query?: never;
@@ -2323,18 +2489,58 @@ export interface paths {
2323
2489
  patch?: never;
2324
2490
  trace?: never;
2325
2491
  };
2326
- "/api/flags": {
2492
+ "/api/failure-groups/{id}/members/{test_case_id}": {
2327
2493
  parameters: {
2328
2494
  query?: never;
2329
2495
  header?: never;
2330
2496
  path?: never;
2331
2497
  cookie?: never;
2332
2498
  };
2333
- /**
2334
- * ⚙️ Evaluate feature flags
2335
- * @description Evaluates the requested Flagship feature flags against a server-derived targeting context (worker env, the caller's principal, and the project-slug header). Unresolved flags are omitted from the response.
2336
- */
2337
- get: operations["evaluateFlags"];
2499
+ get?: never;
2500
+ put?: never;
2501
+ post?: never;
2502
+ /**
2503
+ * ⚙️ Detach a test from a failure group
2504
+ * @description Records a human correction: this test does not belong to the group. Sticky — machine and agent attaches will not re-attach it; a later human attach supersedes the detach. Human-only.
2505
+ */
2506
+ delete: operations["detachFailureGroupMember"];
2507
+ options?: never;
2508
+ head?: never;
2509
+ patch?: never;
2510
+ trace?: never;
2511
+ };
2512
+ "/api/failure-groups/{id}/share": {
2513
+ parameters: {
2514
+ query?: never;
2515
+ header?: never;
2516
+ path?: never;
2517
+ cookie?: never;
2518
+ };
2519
+ get?: never;
2520
+ put?: never;
2521
+ /**
2522
+ * ⚙️ Share a failure group's diagnosis
2523
+ * @description Posts this group's diagnosis to a chosen Slack destination, with a link back to the failure group. The diagnosis and header are read from the stored group, never the client. A thread reply must belong to a run in this project; a new message must target a subscribed channel.
2524
+ */
2525
+ post: operations["shareFailureGroup"];
2526
+ delete?: never;
2527
+ options?: never;
2528
+ head?: never;
2529
+ patch?: never;
2530
+ trace?: never;
2531
+ };
2532
+ "/api/flags": {
2533
+ parameters: {
2534
+ query?: never;
2535
+ header?: never;
2536
+ path?: never;
2537
+ cookie?: never;
2538
+ };
2539
+ /**
2540
+ * ⚙️ Evaluate feature flags
2541
+ * @description Evaluates the requested Flagship feature flags against a server-derived targeting context (worker env, the caller's principal, and the project-slug header). Unresolved flags are omitted from the response.
2542
+ */
2543
+ get: operations["evaluateFlags"];
2338
2544
  put?: never;
2339
2545
  post?: never;
2340
2546
  delete?: never;
@@ -2363,6 +2569,26 @@ export interface paths {
2363
2569
  patch?: never;
2364
2570
  trace?: never;
2365
2571
  };
2572
+ "/api/github/admin-app/events": {
2573
+ parameters: {
2574
+ query?: never;
2575
+ header?: never;
2576
+ path?: never;
2577
+ cookie?: never;
2578
+ };
2579
+ get?: never;
2580
+ put?: never;
2581
+ /**
2582
+ * Receive an admin App webhook
2583
+ * @description Receives a GitHub admin App webhook directly from GitHub, verified by the webhook signature. The admin App subscribes to no events today; this acknowledges deliveries (including GitHub's `ping` handshake).
2584
+ */
2585
+ post: operations["receiveAdminGithubEvent"];
2586
+ delete?: never;
2587
+ options?: never;
2588
+ head?: never;
2589
+ patch?: never;
2590
+ trace?: never;
2591
+ };
2366
2592
  "/api/github/commit/diff": {
2367
2593
  parameters: {
2368
2594
  query?: never;
@@ -2393,8 +2619,8 @@ export interface paths {
2393
2619
  get?: never;
2394
2620
  put?: never;
2395
2621
  /**
2396
- * ⚙️ Receive a GitHub webhook
2397
- * @description Receives a raw GitHub webhook (forwarded with a verified signature) and processes installation, PR, and push events asynchronously.
2622
+ * Receive a GitHub webhook
2623
+ * @description Receives a raw GitHub webhook and processes installation, PR, and push events asynchronously. The delivery is verified by the GitHub webhook signature.
2398
2624
  */
2399
2625
  post: operations["receiveGithubEvent"];
2400
2626
  delete?: never;
@@ -2475,6 +2701,26 @@ export interface paths {
2475
2701
  patch?: never;
2476
2702
  trace?: never;
2477
2703
  };
2704
+ "/api/github/main-app/installations/{app_installation_id}/metadata": {
2705
+ parameters: {
2706
+ query?: never;
2707
+ header?: never;
2708
+ path?: never;
2709
+ cookie?: never;
2710
+ };
2711
+ /**
2712
+ * ⚙️ Get main App installation metadata
2713
+ * @description Fetches live GitHub metadata for a main App installation.
2714
+ */
2715
+ get: operations["getMainInstallationMetadata"];
2716
+ put?: never;
2717
+ post?: never;
2718
+ delete?: never;
2719
+ options?: never;
2720
+ head?: never;
2721
+ patch?: never;
2722
+ trace?: never;
2723
+ };
2478
2724
  "/api/github/pr/close": {
2479
2725
  parameters: {
2480
2726
  query?: never;
@@ -2535,27 +2781,6 @@ export interface paths {
2535
2781
  patch?: never;
2536
2782
  trace?: never;
2537
2783
  };
2538
- "/api/github/pull-request-event": {
2539
- parameters: {
2540
- query?: never;
2541
- header?: never;
2542
- path?: never;
2543
- cookie?: never;
2544
- };
2545
- get?: never;
2546
- put?: never;
2547
- /**
2548
- * ⚙️ Receive a normalized PR webhook
2549
- * @deprecated
2550
- * @description Receives a normalized pull-request webhook from the dashboard receiver.
2551
- */
2552
- post: operations["receivePullRequestEvent"];
2553
- delete?: never;
2554
- options?: never;
2555
- head?: never;
2556
- patch?: never;
2557
- trace?: never;
2558
- };
2559
2784
  "/api/github/reporter-app/events": {
2560
2785
  parameters: {
2561
2786
  query?: never;
@@ -2566,8 +2791,8 @@ export interface paths {
2566
2791
  get?: never;
2567
2792
  put?: never;
2568
2793
  /**
2569
- * ⚙️ Receive a reporter App webhook
2570
- * @description Receives a GitHub reporter App webhook (forwarded with a verified signature) and processes it asynchronously.
2794
+ * Receive a reporter App webhook
2795
+ * @description Receives a GitHub reporter App webhook and processes it asynchronously. The delivery is verified by the GitHub webhook signature.
2571
2796
  */
2572
2797
  post: operations["receiveReporterGithubEvent"];
2573
2798
  delete?: never;
@@ -2976,6 +3201,26 @@ export interface paths {
2976
3201
  patch?: never;
2977
3202
  trace?: never;
2978
3203
  };
3204
+ "/api/invoices/{id}/payment-status": {
3205
+ parameters: {
3206
+ query?: never;
3207
+ header?: never;
3208
+ path?: never;
3209
+ cookie?: never;
3210
+ };
3211
+ get?: never;
3212
+ /**
3213
+ * 🛡️ Set invoice payment status
3214
+ * @description Declaratively mirrors reconciled payment status (from fin) onto an invoice. Idempotent: a PUT of the same state is a no-op. Handles marking paid, partial payments, and reverting a premature paid.
3215
+ */
3216
+ put: operations["setInvoicePaymentStatus"];
3217
+ post?: never;
3218
+ delete?: never;
3219
+ options?: never;
3220
+ head?: never;
3221
+ patch?: never;
3222
+ trace?: never;
3223
+ };
2979
3224
  "/api/invoices/{id}/pdf": {
2980
3225
  parameters: {
2981
3226
  query?: never;
@@ -3036,27 +3281,7 @@ export interface paths {
3036
3281
  patch?: never;
3037
3282
  trace?: never;
3038
3283
  };
3039
- "/api/invoices/credits/{id}": {
3040
- parameters: {
3041
- query?: never;
3042
- header?: never;
3043
- path?: never;
3044
- cookie?: never;
3045
- };
3046
- get?: never;
3047
- put?: never;
3048
- post?: never;
3049
- delete?: never;
3050
- options?: never;
3051
- head?: never;
3052
- /**
3053
- * 🛡️ Map a credit to an invoice
3054
- * @description Maps an unmapped credit to an invoice (marking the invoice paid when applicable) or flags it as a non-invoice credit.
3055
- */
3056
- patch: operations["updateInvoiceCreditMapping"];
3057
- trace?: never;
3058
- };
3059
- "/api/invoices/credits/unmapped": {
3284
+ "/api/invoices/reminders/upcoming": {
3060
3285
  parameters: {
3061
3286
  query?: never;
3062
3287
  header?: never;
@@ -3064,10 +3289,10 @@ export interface paths {
3064
3289
  cookie?: never;
3065
3290
  };
3066
3291
  /**
3067
- * 🛡️ List unmapped credits
3068
- * @description Returns bank-statement credits that have not yet been mapped to an invoice.
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.
3069
3294
  */
3070
- get: operations["listUnmappedCredits"];
3295
+ get: operations["listUpcomingInvoiceReminders"];
3071
3296
  put?: never;
3072
3297
  post?: never;
3073
3298
  delete?: never;
@@ -3076,26 +3301,6 @@ export interface paths {
3076
3301
  patch?: never;
3077
3302
  trace?: never;
3078
3303
  };
3079
- "/api/invoices/status": {
3080
- parameters: {
3081
- query?: never;
3082
- header?: never;
3083
- path?: never;
3084
- cookie?: never;
3085
- };
3086
- get?: never;
3087
- put?: never;
3088
- /**
3089
- * 🛡️ Reconcile invoices against a bank statement
3090
- * @description Reconciles outstanding invoices against a base64-encoded bank statement supplied as `bank_statement` in the JSON body: matches credits, marks invoices paid, and sends payment reminders. Returns early when there are no outstanding invoices.
3091
- */
3092
- post: operations["processInvoiceStatus"];
3093
- delete?: never;
3094
- options?: never;
3095
- head?: never;
3096
- patch?: never;
3097
- trace?: never;
3098
- };
3099
3304
  "/api/jira/installations": {
3100
3305
  parameters: {
3101
3306
  query?: never;
@@ -3344,6 +3549,78 @@ export interface paths {
3344
3549
  patch?: never;
3345
3550
  trace?: never;
3346
3551
  };
3552
+ "/api/memories": {
3553
+ parameters: {
3554
+ query?: never;
3555
+ header?: never;
3556
+ path?: never;
3557
+ cookie?: never;
3558
+ };
3559
+ /**
3560
+ * ⚙️ List memories
3561
+ * @description Returns the scoped project's memories, most recently updated first.
3562
+ */
3563
+ get: operations["listMemories"];
3564
+ put?: never;
3565
+ /**
3566
+ * ⚙️ Create a memory
3567
+ * @description Creates a memory in the scoped project and records its first version.
3568
+ */
3569
+ post: operations["createMemory"];
3570
+ delete?: never;
3571
+ options?: never;
3572
+ head?: never;
3573
+ patch?: never;
3574
+ trace?: never;
3575
+ };
3576
+ "/api/memories/{id}": {
3577
+ parameters: {
3578
+ query?: never;
3579
+ header?: never;
3580
+ path?: never;
3581
+ cookie?: never;
3582
+ };
3583
+ /**
3584
+ * ⚙️ Get a memory
3585
+ * @description Returns a single memory by ID. The project is derived from the entity.
3586
+ */
3587
+ get: operations["getMemory"];
3588
+ put?: never;
3589
+ post?: never;
3590
+ /**
3591
+ * ⚙️ Delete a memory
3592
+ * @description Soft-deletes a memory by ID: it stops appearing in listings and prompt context, but its version history is retained. The project is derived from the entity.
3593
+ */
3594
+ delete: operations["deleteMemory"];
3595
+ options?: never;
3596
+ head?: never;
3597
+ /**
3598
+ * ⚙️ Update a memory
3599
+ * @description Updates a memory by ID and appends a new version. The project is derived from the entity.
3600
+ */
3601
+ patch: operations["updateMemory"];
3602
+ trace?: never;
3603
+ };
3604
+ "/api/memories/{id}/versions": {
3605
+ parameters: {
3606
+ query?: never;
3607
+ header?: never;
3608
+ path?: never;
3609
+ cookie?: never;
3610
+ };
3611
+ /**
3612
+ * ⚙️ List a memory's versions
3613
+ * @description Returns the edit history of a memory, newest version first.
3614
+ */
3615
+ get: operations["listMemoryVersions"];
3616
+ put?: never;
3617
+ post?: never;
3618
+ delete?: never;
3619
+ options?: never;
3620
+ head?: never;
3621
+ patch?: never;
3622
+ trace?: never;
3623
+ };
3347
3624
  "/api/metrics/project-last-7-days": {
3348
3625
  parameters: {
3349
3626
  query?: never;
@@ -3375,7 +3652,7 @@ export interface paths {
3375
3652
  put?: never;
3376
3653
  /**
3377
3654
  * Create onboarding organisation
3378
- * @description Creates an organisation for a just-signed-up user who has no org in their JWT yet.
3655
+ * @description Creates an organisation for the authenticated user.
3379
3656
  */
3380
3657
  post: operations["createOnboardingOrg"];
3381
3658
  delete?: never;
@@ -3963,7 +4240,7 @@ export interface paths {
3963
4240
  put?: never;
3964
4241
  /**
3965
4242
  * ⚙️ Get git credentials
3966
- * @description Returns a repo-scoped GitHub installation token for the scoped project, used by the sandbox git credential helper.
4243
+ * @description Returns a repo-scoped GitHub installation token for the scoped project, used by the sandbox git proxy.
3967
4244
  */
3968
4245
  post: operations["getProjectGitToken"];
3969
4246
  delete?: never;
@@ -4247,6 +4524,7 @@ export interface paths {
4247
4524
  put?: never;
4248
4525
  /**
4249
4526
  * ⚙️ Share a triage report
4527
+ * @deprecated
4250
4528
  * @description Posts a report's diagnosis for a test to a chosen Slack destination. The run and diagnosis are read from the stored report, never the client.
4251
4529
  */
4252
4530
  post: operations["shareTriageReport"];
@@ -4480,24 +4758,54 @@ export interface paths {
4480
4758
  export type webhooks = Record<string, never>;
4481
4759
  export interface components {
4482
4760
  schemas: {
4483
- InvoiceStatusResponse: {
4484
- /** @description Response payload. */
4761
+ UpcomingInvoiceRemindersResponse: {
4485
4762
  data: {
4486
- /**
4487
- * @description Outcome of the reconciliation run.
4488
- * @enum {string}
4489
- */
4490
- status: "no_outstanding_invoices" | "success";
4763
+ /** @description Upcoming invoice reminder candidates. */
4764
+ reminders: components["schemas"]["UpcomingInvoiceReminder"][];
4491
4765
  };
4766
+ pagination: components["schemas"]["Pagination"];
4492
4767
  };
4493
- ErrorResponse: {
4494
- /** @description Always null for error responses. */
4495
- data: unknown;
4496
- /** @description Error details. */
4497
- error: {
4498
- /** @description Human-readable error message. */
4499
- message: string;
4500
- };
4768
+ UpcomingInvoiceReminder: {
4769
+ /** @description Invoice ID. */
4770
+ invoice_id: number;
4771
+ /** @description Human-readable invoice number. */
4772
+ invoice_number: string;
4773
+ /** @description Billed organisation ID. */
4774
+ org_id: number;
4775
+ /** @description Billed organisation name. */
4776
+ org_name: string;
4777
+ /** @description Billing recipients for the reminder. */
4778
+ billing_emails: string[];
4779
+ /** @description Invoice amount in minor currency units. */
4780
+ amount_in_cents: number;
4781
+ /** @description Invoice currency. */
4782
+ currency: string;
4783
+ /** @description Invoice due date. */
4784
+ due_date: string | null;
4785
+ /**
4786
+ * @description Reminder email type.
4787
+ * @enum {string}
4788
+ */
4789
+ reminder_type: "first" | "second";
4790
+ /** @description Date this reminder would be sent. */
4791
+ scheduled_send_date: string;
4792
+ /** @description Calendar days since the due date. */
4793
+ days_past_due: number | null;
4794
+ /** @description First reminder timestamp, if already sent. */
4795
+ first_reminder_sent_at: string | null;
4796
+ /** @description Second reminder timestamp, if already sent. */
4797
+ second_reminder_sent_at: string | null;
4798
+ };
4799
+ /** @description Pagination metadata. */
4800
+ Pagination: {
4801
+ /** @description Current page (1-indexed). */
4802
+ page: number;
4803
+ /** @description Items per page. */
4804
+ per_page: number;
4805
+ /** @description Total number of items. */
4806
+ total: number;
4807
+ /** @description Total number of pages. */
4808
+ total_pages: number;
4501
4809
  };
4502
4810
  InvoiceListResponse: {
4503
4811
  /** @description The page of invoices. */
@@ -4528,14 +4836,18 @@ export interface components {
4528
4836
  amount_in_cents: number;
4529
4837
  /** @description R2 file key for the generated PDF, if any. */
4530
4838
  invoice_pdf_url: string | null;
4839
+ /** @description Payment link that can be used to pay this invoice. */
4840
+ payment_link: string | null;
4531
4841
  /** @description Delivery status (e.g. `sent`). */
4532
4842
  send_status: string;
4533
4843
  /** @description Payment status (e.g. `paid`). */
4534
4844
  paid_status: string;
4535
4845
  /** @description ISO 8601 timestamp when paid, if applicable. */
4536
4846
  paid_at: string | null;
4537
- /** @description Base64 proof of payment, if recorded. */
4538
- paid_proof_base64: string | null;
4847
+ /** @description Σ of allocated credit amounts in minor units; null if unreconciled. */
4848
+ paid_minor: number | null;
4849
+ /** @description Bank credits (from fin) that settle this invoice. */
4850
+ credit_refs: components["schemas"]["InvoiceCreditRef"][];
4539
4851
  /** @description Invoice line items. */
4540
4852
  line_items: components["schemas"]["InvoiceLineItem"][];
4541
4853
  /** @description Tax details applied to the invoice. */
@@ -4576,6 +4888,26 @@ export interface components {
4576
4888
  payment_terms_days: number | null;
4577
4889
  } | null;
4578
4890
  };
4891
+ InvoiceCreditRef: {
4892
+ /** @description fin ledger row id — the pointer + proof. */
4893
+ fin_ledger_id: string;
4894
+ /** @description Date of the bank credit (YYYY-MM-DD). */
4895
+ date: string;
4896
+ /** @description UTR / instrument number from the statement. */
4897
+ reference: string | null;
4898
+ /** @description Currency of the credit (e.g. INR). */
4899
+ currency: string;
4900
+ /** @description Full credit amount in `currency` minor units. */
4901
+ amount_minor: number;
4902
+ /** @description Portion allocated to this invoice, minor units. */
4903
+ allocated_minor: number;
4904
+ /** @description Settlement rail, if known. */
4905
+ rail: string | null;
4906
+ /** @description Remitter name, if known. */
4907
+ remitter: string | null;
4908
+ /** @description When fin made this allocation (ISO). */
4909
+ matched_at?: string;
4910
+ };
4579
4911
  InvoiceLineItem: {
4580
4912
  /** @description Line item name. */
4581
4913
  item_name: string;
@@ -4594,61 +4926,32 @@ export interface components {
4594
4926
  /** @description Tax rate as a percentage applied to the amount. */
4595
4927
  tax_percentage: number;
4596
4928
  };
4597
- /** @description Pagination metadata. */
4598
- Pagination: {
4599
- /** @description Current page (1-indexed). */
4600
- page: number;
4601
- /** @description Items per page. */
4602
- per_page: number;
4603
- /** @description Total number of items. */
4604
- total: number;
4605
- /** @description Total number of pages. */
4606
- total_pages: number;
4607
- };
4608
4929
  InvoiceResponse: {
4609
4930
  /** @description Response payload. */
4610
4931
  data: {
4611
4932
  invoice: components["schemas"]["InvoiceWithOrg"];
4612
4933
  };
4613
4934
  };
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
+ };
4614
4944
  InvoiceSimpleError: {
4615
4945
  /** @description Human-readable error message. */
4616
4946
  error: string;
4617
4947
  };
4618
- InvoiceUnmappedCreditsResponse: {
4948
+ InvoicePaymentStatusResponse: {
4619
4949
  /** @description Response payload. */
4620
4950
  data: {
4621
- /** @description Total number of unmapped credits. */
4622
- count: number;
4623
- /** @description The unmapped credits. */
4624
- credits: components["schemas"]["InvoiceCredit"][];
4951
+ invoice: components["schemas"]["InvoiceWithOrg"];
4625
4952
  };
4626
4953
  };
4627
- InvoiceCredit: {
4628
- /** @description Credit row ID. */
4629
- id: number;
4630
- /** @description Statement particulars/description. */
4631
- particulars: string;
4632
- /** @description Credited amount as recorded on the statement. */
4633
- amount: string;
4634
- /** @description Transaction date. */
4635
- date: string;
4636
- /** @description Mapped invoice ID, or null if unmapped. */
4637
- invoice_id: number | null;
4638
- /** @description True if the credit was marked as non-invoice. */
4639
- non_invoice: boolean;
4640
- /** @description Raw statement line. */
4641
- raw: string;
4642
- /** @description ISO 8601 creation timestamp. */
4643
- created_at: string;
4644
- };
4645
- InvoiceCreditMappingResponse: {
4646
- /** @description Response payload. */
4647
- data: {
4648
- credit: components["schemas"]["InvoiceCredit"];
4649
- };
4650
- };
4651
- InvoiceBillingLinesResponse: {
4954
+ InvoiceBillingLinesResponse: {
4652
4955
  /** @description Response payload. */
4653
4956
  data: {
4654
4957
  /** @description The invoice's billing lines. */
@@ -4700,7 +5003,7 @@ export interface components {
4700
5003
  sort_order: number;
4701
5004
  };
4702
5005
  ReplaceInvoiceBillingLinesRequest: {
4703
- lines: {
5006
+ billing_lines: {
4704
5007
  period_month?: string | null;
4705
5008
  fx_rate?: number | null;
4706
5009
  /** @enum {string} */
@@ -6780,6 +7083,104 @@ export interface components {
6780
7083
  environment_variables: components["schemas"]["EnvironmentVariable"][];
6781
7084
  };
6782
7085
  };
7086
+ MemoryListResponse: {
7087
+ data: {
7088
+ memories: components["schemas"]["Memory"][];
7089
+ };
7090
+ pagination: components["schemas"]["Pagination"];
7091
+ };
7092
+ Memory: {
7093
+ id: number;
7094
+ project_id: number;
7095
+ format_version: number;
7096
+ name: string | null;
7097
+ description: string | null;
7098
+ content: string;
7099
+ source: string | null;
7100
+ source_path: string | null;
7101
+ /** @description ID of the chat session the memory was created in, or null if not written from a sandbox session. */
7102
+ source_chat_session_id: number | null;
7103
+ created_by: string | null;
7104
+ updated_by: string | null;
7105
+ /** @description ISO 8601 timestamp. */
7106
+ created_at: string;
7107
+ /** @description ISO 8601 timestamp. */
7108
+ updated_at: string;
7109
+ /** @description ISO 8601 timestamp when the memory was soft-deleted, or null if live. */
7110
+ deleted_at: string | null;
7111
+ };
7112
+ MemoryResponse: {
7113
+ /** @description Response payload. */
7114
+ data: {
7115
+ memory: components["schemas"]["Memory"];
7116
+ };
7117
+ };
7118
+ CreateMemoryRequest: {
7119
+ /** @description Memory content (markdown). */
7120
+ content: string;
7121
+ /** @description Content format version. Defaults to 1. */
7122
+ format_version?: number;
7123
+ /** @description Display name (v2). */
7124
+ name?: string | null;
7125
+ /** @description Short description (v2). */
7126
+ description?: string | null;
7127
+ /** @description Origin of the memory, e.g. "app_knowledge". */
7128
+ source?: string | null;
7129
+ /** @description Source file path for file-sourced memories; unique within the project. */
7130
+ source_path?: string | null;
7131
+ };
7132
+ UpdateMemoryRequest: {
7133
+ /** @description Memory content (markdown). */
7134
+ content?: string;
7135
+ /** @description Content format version. */
7136
+ format_version?: number;
7137
+ /** @description Display name (v2). */
7138
+ name?: string | null;
7139
+ /** @description Short description (v2). */
7140
+ description?: string | null;
7141
+ };
7142
+ MemoryDeleteResponse: {
7143
+ /** @description Response payload. */
7144
+ data: {
7145
+ /** @description Always true on success. */
7146
+ success: boolean;
7147
+ };
7148
+ };
7149
+ MemoryVersionListResponse: {
7150
+ /** @description Response payload. */
7151
+ data: {
7152
+ versions: components["schemas"]["MemoryVersion"][];
7153
+ };
7154
+ };
7155
+ MemoryVersion: {
7156
+ id: number;
7157
+ memory_id: number;
7158
+ version: number;
7159
+ format_version: number;
7160
+ name: string | null;
7161
+ description: string | null;
7162
+ content: string;
7163
+ /** @description ID of the chat session that produced this version, or null if not written from a sandbox session. */
7164
+ source_chat_session_id: number | null;
7165
+ created_by: string | null;
7166
+ /** @description ISO 8601 timestamp. */
7167
+ created_at: string;
7168
+ };
7169
+ AlarmResponse: {
7170
+ /** @description Response payload. */
7171
+ data: {
7172
+ /** @description Opaque id of the scheduled alarm. */
7173
+ alarm_id: string;
7174
+ /** @description The resolved wake-up time, as an ISO 8601 timestamp. */
7175
+ wake_at: string;
7176
+ };
7177
+ };
7178
+ CreateAlarmRequest: {
7179
+ /** @description The note to deliver back into this session when the alarm fires. Write it to your future self: what to resume and any context you'd otherwise lose. */
7180
+ message: string;
7181
+ /** @description How far from now to fire, as a duration string with units m/h/d — e.g. "15m", "2h", "1d", or compound "1h30m". Min 15m, max 72h (3 days). */
7182
+ delay: string;
7183
+ };
6783
7184
  AgentWorkflowListResponse: {
6784
7185
  /** @description Response payload. */
6785
7186
  data: {
@@ -7014,18 +7415,6 @@ export interface components {
7014
7415
  /** @description Raw Slack auth.test result. */
7015
7416
  data?: unknown;
7016
7417
  };
7017
- SlackInternalAlertScopesResponse: {
7018
- /** @description Whether auth.test succeeded. */
7019
- ok: boolean;
7020
- /** @description Slack workspace name. */
7021
- team?: unknown;
7022
- /** @description Slack bot user name. */
7023
- user?: unknown;
7024
- /** @description Slack bot ID. */
7025
- bot_id?: unknown;
7026
- /** @description Granted OAuth scopes. */
7027
- scopes?: unknown;
7028
- };
7029
7418
  SlackChannelListResponse: {
7030
7419
  /** @description Slack channels for the project. */
7031
7420
  data: {
@@ -7228,12 +7617,6 @@ export interface components {
7228
7617
  /** @description HTTP status returned by Slack, if any. */
7229
7618
  upstream_status?: number;
7230
7619
  };
7231
- SlackPostMessageResponse: {
7232
- /** @description Whether the message was posted. */
7233
- ok: boolean;
7234
- /** @description Slack message timestamp, if posted. */
7235
- ts?: string;
7236
- };
7237
7620
  ChatSessionUsersResponse: {
7238
7621
  /** @description Response payload. */
7239
7622
  data: components["schemas"]["ChatSessionUserDetail"][];
@@ -7450,6 +7833,32 @@ export interface components {
7450
7833
  thread: components["schemas"]["ChatSessionThread"];
7451
7834
  };
7452
7835
  };
7836
+ ChatSessionThreadMessageResponse: {
7837
+ /** @description Response payload. */
7838
+ data: {
7839
+ message: components["schemas"]["ChatSessionThreadMessage"];
7840
+ };
7841
+ };
7842
+ ChatSessionThreadMessage: {
7843
+ /** @description Thread message ID. */
7844
+ id: number;
7845
+ /** @description Owning chat session thread ID. */
7846
+ chat_session_thread_id: number;
7847
+ /** @description Caller-provided idempotency key. */
7848
+ idempotency_key: string;
7849
+ /** @description Original Markdown input. */
7850
+ markdown: string;
7851
+ /** @description Delivery status. */
7852
+ status: string;
7853
+ /** @description Slack message timestamp, when sent. */
7854
+ external_message_ts: string | null;
7855
+ /** @description Delivery error, when failed. */
7856
+ error_message: string | null;
7857
+ /** @description Creation timestamp (ISO). */
7858
+ created_at: string;
7859
+ /** @description Last update timestamp (ISO). */
7860
+ updated_at: string;
7861
+ };
7453
7862
  ChatSessionDmThreadResponse: {
7454
7863
  /** @description Response payload. */
7455
7864
  data: {
@@ -7522,6 +7931,17 @@ export interface components {
7522
7931
  created_by: string | null;
7523
7932
  /** @description Event timestamp (ISO). */
7524
7933
  created_at: string;
7934
+ /** @description Resolved Supabase details for the triggerer. */
7935
+ created_by_user_detail?: {
7936
+ /** @description Supabase user ID. */
7937
+ id: string;
7938
+ /** @description User email. */
7939
+ email: string;
7940
+ /** @description Display name. */
7941
+ name: string;
7942
+ /** @description Avatar URL. */
7943
+ picture: string;
7944
+ } | null;
7525
7945
  };
7526
7946
  ChatSessionCommitDiffResponse: {
7527
7947
  /** @description Response payload. */
@@ -7608,6 +8028,7 @@ export interface components {
7608
8028
  };
7609
8029
  ChatSessionStateResponse: {
7610
8030
  data: components["schemas"]["ChatSessionState"];
8031
+ pagination: components["schemas"]["Pagination"];
7611
8032
  };
7612
8033
  ChatSessionState: {
7613
8034
  /** @description Recent session log entries. */
@@ -7820,6 +8241,13 @@ export interface components {
7820
8241
  received: boolean;
7821
8242
  };
7822
8243
  };
8244
+ GithubAdminWebhookAck: {
8245
+ /** @description Response payload. */
8246
+ data: {
8247
+ /** @description Always true; the event was accepted. */
8248
+ received: boolean;
8249
+ };
8250
+ };
7823
8251
  GhMainInstallListResponse: {
7824
8252
  /** @description Response payload. */
7825
8253
  data: {
@@ -7827,6 +8255,23 @@ export interface components {
7827
8255
  gh_app_installs: unknown[];
7828
8256
  };
7829
8257
  };
8258
+ GhMainMetadataResponse: {
8259
+ /** @description Response payload. */
8260
+ data: {
8261
+ ghAppMetadata: {
8262
+ /** @description GitHub App permissions. */
8263
+ permissions?: unknown;
8264
+ ghRepos: {
8265
+ id: number;
8266
+ node_id: string;
8267
+ name: string;
8268
+ full_name: string;
8269
+ private: boolean;
8270
+ }[];
8271
+ ghOrganization: string | null;
8272
+ };
8273
+ };
8274
+ };
7830
8275
  GhMainInstallResponse: {
7831
8276
  /** @description Response payload. */
7832
8277
  data: {
@@ -7845,10 +8290,6 @@ export interface components {
7845
8290
  received: boolean;
7846
8291
  };
7847
8292
  };
7848
- GithubPullRequestWebhookResponse: {
7849
- /** @description Response payload. */
7850
- data?: unknown;
7851
- };
7852
8293
  JiraInstallationListResponse: {
7853
8294
  /** @description Jira app installations for the organisation. */
7854
8295
  data: components["schemas"]["JiraAppInstall"][];
@@ -8660,6 +9101,8 @@ export interface components {
8660
9101
  }[];
8661
9102
  /** @description Tags to filter which tests to run (e.g., `@smoke`, `@critical`). Only tests matching these tags will be executed. */
8662
9103
  tags?: string[];
9104
+ /** @description Specific test case ids (Playwright per-project `test.id`) to run. Only these tests will be executed. */
9105
+ test_case_ids?: string[];
8663
9106
  /** @description Test repo branch to run. Useful for running tests from a feature branch before merging. Cannot be used together with `build` — pick one. */
8664
9107
  branch?: string;
8665
9108
  /** @description Legacy project ID; must match the request's resolved project scope when set. The project scope itself comes from the bound principal or the x-project-id header, never from the body. */
@@ -8927,6 +9370,30 @@ export interface components {
8927
9370
  /** @description Environment the snooze is scoped to; null applies to all environments. */
8928
9371
  scoped_to_environment_id: number | null;
8929
9372
  };
9373
+ TriageShareTargetsResponse: {
9374
+ /** @description Response payload. */
9375
+ data: {
9376
+ /** @description Reply targets for channels that already have a run notification thread. */
9377
+ thread_targets: components["schemas"]["TriageShareTarget"][];
9378
+ /** @description New-message targets for subscribed channels. */
9379
+ channel_targets: components["schemas"]["TriageShareTarget"][];
9380
+ };
9381
+ };
9382
+ TriageShareTarget: {
9383
+ /**
9384
+ * @description Whether this target replies under an existing run thread or starts a new message.
9385
+ * @enum {string}
9386
+ */
9387
+ kind: "thread" | "channel";
9388
+ /** @description Slack channel ID. */
9389
+ channel_id: string;
9390
+ /** @description Slack channel name, if known. */
9391
+ channel_name: string | null;
9392
+ /** @description Slack workspace (team) ID. */
9393
+ team_id: string | null;
9394
+ /** @description Timestamp of the thread to reply under. */
9395
+ thread_ts?: string;
9396
+ };
8930
9397
  GetTestRunResponse: {
8931
9398
  data: {
8932
9399
  test_run: {
@@ -9081,6 +9548,8 @@ export interface components {
9081
9548
  feature_flags: string[];
9082
9549
  /** @description Tags applied to the run. */
9083
9550
  tags: string[];
9551
+ /** @description Specific test case ids to run. */
9552
+ test_case_ids: string[];
9084
9553
  };
9085
9554
  };
9086
9555
  TestRunShardsResponse: {
@@ -9513,6 +9982,11 @@ export interface components {
9513
9982
  /** @description User avatar URL. */
9514
9983
  picture: string;
9515
9984
  } | null;
9985
+ /** @description The agent chat session that triggered this run, if it was triggered from a sandbox (agent) session. Lets the UI render "via agent" and deep-link the session. Null for direct user, scheduler, GitHub Actions, and raw-API triggers. The run's created_by (when set) is the session's owner. */
9986
+ triggered_via_chat_session: {
9987
+ id: number;
9988
+ title: string | null;
9989
+ } | null;
9516
9990
  /** @description First page of ledger-sourced cases, ordered failed → flaky → others so the default 'failed' filter and the failure-first list render correctly on first paint. Shipped inline so the ledger-source list renders without waiting on a fetch. Empty for pre-ledger runs (the client falls back to the diagnoses above). The client refetches the full set. */
9517
9991
  ledger_cases: components["schemas"]["TestRunCase"][];
9518
9992
  /** @description Total ledger case count for the run, so the client knows how much the inline first page is truncating. */
@@ -9633,6 +10107,8 @@ export interface components {
9633
10107
  superseded_by_test_run_id: number | null;
9634
10108
  /** @description Tags applied to the run. */
9635
10109
  tags: string[] | null;
10110
+ /** @description Specific test case ids (Playwright test.id) to run. */
10111
+ test_case_ids: string[] | null;
9636
10112
  /** @description GitHub PR for the build branch, resolved via the reporter app; null when there is no PR or the reporter is not installed. */
9637
10113
  pull_request: {
9638
10114
  /** @description Pull request number. */
@@ -9706,30 +10182,6 @@ export interface components {
9706
10182
  /** @description Environment the snooze is scoped to; null applies to all environments. */
9707
10183
  scoped_to_environment_id: number | null;
9708
10184
  };
9709
- TriageShareTargetsResponse: {
9710
- /** @description Response payload. */
9711
- data: {
9712
- /** @description Reply targets for channels that already have a run notification thread. */
9713
- thread_targets: components["schemas"]["TriageShareTarget"][];
9714
- /** @description New-message targets for subscribed channels. */
9715
- channel_targets: components["schemas"]["TriageShareTarget"][];
9716
- };
9717
- };
9718
- TriageShareTarget: {
9719
- /**
9720
- * @description Whether this target replies under an existing run thread or starts a new message.
9721
- * @enum {string}
9722
- */
9723
- kind: "thread" | "channel";
9724
- /** @description Slack channel ID. */
9725
- channel_id: string;
9726
- /** @description Slack channel name, if known. */
9727
- channel_name: string | null;
9728
- /** @description Slack workspace (team) ID. */
9729
- team_id: string | null;
9730
- /** @description Timestamp of the thread to reply under. */
9731
- thread_ts?: string;
9732
- };
9733
10185
  TriageReportListResponse: {
9734
10186
  /** @description The page of triage reports. */
9735
10187
  data: {
@@ -9908,6 +10360,54 @@ export interface components {
9908
10360
  /** @description Display name of the test for the message header. */
9909
10361
  test_name: string;
9910
10362
  };
10363
+ TriageStatusListResponse: {
10364
+ /** @description Response payload. */
10365
+ data: {
10366
+ triage_statuses: components["schemas"]["TriageStatus"][];
10367
+ };
10368
+ };
10369
+ TriageStatus: {
10370
+ id: string;
10371
+ project_id: number;
10372
+ test_run_id: number;
10373
+ pw_test_id: string;
10374
+ /** @enum {string} */
10375
+ status: "working" | "completed";
10376
+ group_id: string | null;
10377
+ group: components["schemas"]["TriageStatusGroup"];
10378
+ chat_session_id: number | null;
10379
+ created_at: string;
10380
+ updated_at: string;
10381
+ };
10382
+ TriageStatusGroup: {
10383
+ id: string;
10384
+ label: string;
10385
+ /** @enum {string} */
10386
+ type: "app" | "test" | "unknown";
10387
+ /** @enum {string} */
10388
+ status: "open" | "resolved";
10389
+ diagnosis: string | null;
10390
+ recommendation: string | null;
10391
+ } | null;
10392
+ TriageStatusResponse: {
10393
+ /** @description Response payload. */
10394
+ data: {
10395
+ triage_status: components["schemas"]["TriageStatus"];
10396
+ };
10397
+ };
10398
+ UpsertTriageStatusRequest: {
10399
+ /** @description The run in which this failure was observed. */
10400
+ test_run_id: number;
10401
+ /** @description Playwright test id of the failing test. */
10402
+ pw_test_id: string;
10403
+ /**
10404
+ * @description Set "working" when starting a deeper diagnosis, "completed" when done.
10405
+ * @enum {string}
10406
+ */
10407
+ status: "working" | "completed";
10408
+ /** @description The failure group this failure resolved to (the group carries the verdict and diagnosis). Omit to keep the stored value; null clears it. */
10409
+ group_id?: string | null;
10410
+ };
9911
10411
  FailureGroupListResponse: {
9912
10412
  data: {
9913
10413
  failure_groups: components["schemas"]["FailureGroup"][];
@@ -9925,7 +10425,7 @@ export interface components {
9925
10425
  diagnosis: string | null;
9926
10426
  recommendation: string | null;
9927
10427
  fingerprint: components["schemas"]["Fingerprint"];
9928
- member_count: number;
10428
+ resolved_at: string | null;
9929
10429
  first_seen_at: string;
9930
10430
  last_seen_at: string;
9931
10431
  last_test_run_id: number | null;
@@ -9946,6 +10446,30 @@ export interface components {
9946
10446
  };
9947
10447
  }[];
9948
10448
  } | null;
10449
+ MembersByTestRunResponse: {
10450
+ /** @description Response payload. */
10451
+ data: {
10452
+ members: components["schemas"]["MemberByTestRun"][];
10453
+ };
10454
+ };
10455
+ MemberByTestRun: {
10456
+ /** @description Test case ID (normalized 41-character Playwright test id). */
10457
+ test_case_id: string;
10458
+ group_id: string;
10459
+ label: string | null;
10460
+ /** @enum {string|null} */
10461
+ type: "app" | "test" | null;
10462
+ /** @enum {string|null} */
10463
+ status: "open" | "resolved" | null;
10464
+ diagnosis: string | null;
10465
+ recommendation: string | null;
10466
+ /** @enum {string|null} */
10467
+ match_source: "machine" | "agent" | "human" | "system" | null;
10468
+ match_score: number | null;
10469
+ chat_session_id: number | null;
10470
+ matched_at: string | null;
10471
+ detached_at: string | null;
10472
+ };
9949
10473
  FailureGroupResponse: {
9950
10474
  /** @description Response payload. */
9951
10475
  data: {
@@ -9960,7 +10484,7 @@ export interface components {
9960
10484
  diagnosis: string | null;
9961
10485
  recommendation: string | null;
9962
10486
  fingerprint: components["schemas"]["Fingerprint"];
9963
- member_count: number;
10487
+ resolved_at: string | null;
9964
10488
  first_seen_at: string;
9965
10489
  last_seen_at: string;
9966
10490
  last_test_run_id: number | null;
@@ -9973,72 +10497,243 @@ export interface components {
9973
10497
  FailureGroupMember: {
9974
10498
  id: string;
9975
10499
  group_id: string;
9976
- pw_test_id: string;
10500
+ /** @description Test case ID (normalized 41-character Playwright test id). */
10501
+ test_case_id: string;
9977
10502
  environment_id: number | null;
9978
10503
  first_seen_at: string;
9979
10504
  last_seen_at: string;
9980
10505
  last_test_run_id: number | null;
9981
10506
  };
9982
- WebhookListResponse: {
10507
+ FailureGroupActivityResponse: {
9983
10508
  /** @description Response payload. */
9984
10509
  data: {
9985
- webhooks: components["schemas"]["Webhook"][];
10510
+ events: components["schemas"]["FailureGroupActivityEvent"][];
9986
10511
  };
9987
10512
  };
9988
- Webhook: {
9989
- /** @description Webhook ID. */
9990
- id: number;
9991
- /** @description Project the webhook belongs to. */
9992
- project_id: number;
9993
- /** @description Endpoint that receives event payloads. */
9994
- url: string;
9995
- /** @description Event names this webhook subscribes to. */
9996
- events: string[];
9997
- /** @description Whether the webhook is active. */
9998
- is_active: boolean;
9999
- /** @description ISO 8601 creation timestamp. */
10000
- created_at: string;
10001
- /** @description ISO 8601 last-update timestamp. */
10002
- updated_at: string;
10513
+ FailureGroupActivityEvent: {
10514
+ id: string;
10515
+ /** @enum {string} */
10516
+ type: "created" | "edited" | "status_changed" | "merged" | "member_added" | "member_removed";
10517
+ at: string;
10518
+ source_run_id: number | null;
10519
+ changed_fields: string[] | null;
10520
+ from_status: string | null;
10521
+ to_status: string | null;
10522
+ merged_from_group_id: string | null;
10523
+ merged_from_label: string | null;
10524
+ member: {
10525
+ /** @description Test case ID (normalized 41-character Playwright test id). */
10526
+ test_case_id: string;
10527
+ environment_id: number | null;
10528
+ match_source: string | null;
10529
+ match_score: number | null;
10530
+ /** @description For agent-attached members, the chat session that decided the attach. */
10531
+ chat_session_id: number | null;
10532
+ } | null;
10533
+ /** @description Who authored the change. Null on machine-driven member events and on changes made before attribution existed. */
10534
+ actor: {
10535
+ /** @enum {string} */
10536
+ kind: "user" | "agent" | "api_key" | "system";
10537
+ id: string | null;
10538
+ name: string | null;
10539
+ email: string | null;
10540
+ } | null;
10003
10541
  };
10004
- WebhookCreateResponse: {
10542
+ FailureGroupMembersResponse: {
10005
10543
  /** @description Response payload. */
10006
10544
  data: {
10007
- webhook: components["schemas"]["CreatedWebhook"];
10545
+ members: components["schemas"]["FailureGroupMemberEntry"][];
10546
+ total: number;
10547
+ page: number;
10548
+ per_page: number;
10008
10549
  };
10009
10550
  };
10010
- CreatedWebhook: {
10011
- /** @description Webhook ID. */
10012
- id: number;
10013
- /** @description Project the webhook belongs to. */
10014
- project_id: number;
10015
- /** @description Endpoint that receives event payloads. */
10016
- url: string;
10017
- /** @description Event names this webhook subscribes to. */
10018
- events: string[];
10019
- /** @description Whether the webhook is active. */
10020
- is_active: boolean;
10021
- /** @description ISO 8601 creation timestamp. */
10022
- created_at: string;
10023
- /** @description ISO 8601 last-update timestamp. */
10024
- updated_at: string;
10025
- /** @description Signing secret (returned only on creation). */
10026
- secret: string;
10027
- };
10028
- CreateWebhookRequest: {
10551
+ FailureGroupMemberEntry: {
10552
+ /** @description Test case ID (normalized 41-character Playwright test id). */
10553
+ test_case_id: string;
10554
+ /** @enum {string} */
10555
+ state: "active" | "detached";
10556
+ /** @enum {string} */
10557
+ source: "machine" | "agent" | "human" | "system";
10558
+ first_seen_at: string;
10559
+ first_test_run_id: number | null;
10560
+ last_seen_at: string;
10561
+ last_test_run_id: number | null;
10562
+ last_environment_id: number | null;
10563
+ environments: number[];
10564
+ sighting_count: number;
10565
+ chat_session_id: number | null;
10566
+ match_run_id: string | null;
10567
+ actor_id: string | null;
10568
+ detached_at: string | null;
10569
+ detached_by: string | null;
10570
+ };
10571
+ CreateFailureGroupRequest: {
10572
+ /** @description Human label for the failure mode (the group_key). */
10573
+ label: string;
10029
10574
  /**
10030
- * Format: uri
10031
- * @description HTTPS endpoint that will receive event payloads.
10575
+ * @description app or test issue.
10576
+ * @enum {string}
10032
10577
  */
10033
- url: string;
10034
- /** @description Event names this webhook subscribes to. */
10035
- events: string[];
10036
- };
10037
- WebhookUpdateResponse: {
10038
- /** @description Response payload. */
10039
- data: {
10040
- webhook: components["schemas"]["UpdatedWebhook"];
10041
- };
10578
+ type: "app" | "test";
10579
+ /** @description Markdown root-cause summary. */
10580
+ diagnosis: string;
10581
+ /** @description What to do next. */
10582
+ recommendation: string;
10583
+ /** @description Identifying signals for future matching. */
10584
+ fingerprint?: {
10585
+ signals: {
10586
+ kind: string;
10587
+ value: string;
10588
+ /** @enum {string} */
10589
+ match?: "exact" | "contains" | "glob" | "regex";
10590
+ weight?: number;
10591
+ /** @enum {string} */
10592
+ source: "machine" | "agent" | "human";
10593
+ data?: {
10594
+ [key: string]: unknown;
10595
+ };
10596
+ }[];
10597
+ } | null;
10598
+ /** @description Run this diagnosis is based on (provenance). */
10599
+ source_run_id?: number | null;
10600
+ };
10601
+ PatchFailureGroupRequest: {
10602
+ label?: string;
10603
+ /** @enum {string} */
10604
+ type?: "app" | "test";
10605
+ /** @enum {string} */
10606
+ status?: "open" | "resolved";
10607
+ diagnosis?: string;
10608
+ recommendation?: string;
10609
+ /** @description Present → replaces the stored fingerprint wholesale; omit to keep it. */
10610
+ fingerprint?: {
10611
+ signals: {
10612
+ kind: string;
10613
+ value: string;
10614
+ /** @enum {string} */
10615
+ match?: "exact" | "contains" | "glob" | "regex";
10616
+ weight?: number;
10617
+ /** @enum {string} */
10618
+ source: "machine" | "agent" | "human";
10619
+ data?: {
10620
+ [key: string]: unknown;
10621
+ };
10622
+ }[];
10623
+ } | null;
10624
+ source_run_id?: number | null;
10625
+ };
10626
+ AttachFailureGroupMemberRequest: {
10627
+ /** @description The run in which this failure was observed. */
10628
+ 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
+ /**
10632
+ * @deprecated
10633
+ * @description Deprecated alias of `test_case_id`.
10634
+ */
10635
+ pw_test_id?: string;
10636
+ };
10637
+ FailureGroupDetachMemberResponse: {
10638
+ /** @description Response payload. */
10639
+ data: {
10640
+ group_id: string;
10641
+ test_case_id: string;
10642
+ detached: boolean;
10643
+ };
10644
+ };
10645
+ FailureGroupShareResponse: {
10646
+ /** @description Response payload. */
10647
+ data: {
10648
+ /**
10649
+ * @description Always true on success.
10650
+ * @enum {boolean}
10651
+ */
10652
+ ok: true;
10653
+ };
10654
+ };
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
+ };
10665
+ };
10666
+ MergeFailureGroupRequest: {
10667
+ /** @description Target group id; this group merges into it. */
10668
+ into_group_id: string;
10669
+ };
10670
+ DeleteFailureGroupResponse: {
10671
+ /** @description Response payload. */
10672
+ data: {
10673
+ id: string;
10674
+ deleted: boolean;
10675
+ };
10676
+ };
10677
+ WebhookListResponse: {
10678
+ /** @description Response payload. */
10679
+ data: {
10680
+ webhooks: components["schemas"]["Webhook"][];
10681
+ };
10682
+ };
10683
+ Webhook: {
10684
+ /** @description Webhook ID. */
10685
+ id: number;
10686
+ /** @description Project the webhook belongs to. */
10687
+ project_id: number;
10688
+ /** @description Endpoint that receives event payloads. */
10689
+ url: string;
10690
+ /** @description Event names this webhook subscribes to. */
10691
+ events: string[];
10692
+ /** @description Whether the webhook is active. */
10693
+ is_active: boolean;
10694
+ /** @description ISO 8601 creation timestamp. */
10695
+ created_at: string;
10696
+ /** @description ISO 8601 last-update timestamp. */
10697
+ updated_at: string;
10698
+ };
10699
+ WebhookCreateResponse: {
10700
+ /** @description Response payload. */
10701
+ data: {
10702
+ webhook: components["schemas"]["CreatedWebhook"];
10703
+ };
10704
+ };
10705
+ CreatedWebhook: {
10706
+ /** @description Webhook ID. */
10707
+ id: number;
10708
+ /** @description Project the webhook belongs to. */
10709
+ project_id: number;
10710
+ /** @description Endpoint that receives event payloads. */
10711
+ url: string;
10712
+ /** @description Event names this webhook subscribes to. */
10713
+ events: string[];
10714
+ /** @description Whether the webhook is active. */
10715
+ is_active: boolean;
10716
+ /** @description ISO 8601 creation timestamp. */
10717
+ created_at: string;
10718
+ /** @description ISO 8601 last-update timestamp. */
10719
+ updated_at: string;
10720
+ /** @description Signing secret (returned only on creation). */
10721
+ secret: string;
10722
+ };
10723
+ CreateWebhookRequest: {
10724
+ /**
10725
+ * Format: uri
10726
+ * @description HTTPS endpoint that will receive event payloads.
10727
+ */
10728
+ url: string;
10729
+ /** @description Event names this webhook subscribes to. */
10730
+ events: string[];
10731
+ };
10732
+ WebhookUpdateResponse: {
10733
+ /** @description Response payload. */
10734
+ data: {
10735
+ webhook: components["schemas"]["UpdatedWebhook"];
10736
+ };
10042
10737
  };
10043
10738
  UpdatedWebhook: {
10044
10739
  /** @description Webhook ID. */
@@ -10297,6 +10992,51 @@ export interface components {
10297
10992
  /** @description Reason the realtime service is unavailable. */
10298
10993
  error: string;
10299
10994
  };
10995
+ UsersListResponse: {
10996
+ /** @description Response payload. */
10997
+ data: components["schemas"]["UserWithConnectedAccounts"][];
10998
+ };
10999
+ UserWithConnectedAccounts: {
11000
+ /** @description Supabase user ID. */
11001
+ id: string;
11002
+ /** @description User email. */
11003
+ email: string;
11004
+ /** @description User display name. */
11005
+ name: string;
11006
+ /** @description User avatar URL. */
11007
+ picture: string;
11008
+ /** @description Accounts linked to this user. */
11009
+ connected_accounts: {
11010
+ /** @description Valid linked Slack accounts. */
11011
+ slack: components["schemas"]["ConnectedSlackAccount"][];
11012
+ /** @description Valid linked GitHub accounts. */
11013
+ github: components["schemas"]["ConnectedGithubAccount"][];
11014
+ };
11015
+ };
11016
+ ConnectedSlackAccount: {
11017
+ /** @description Slack user ID. */
11018
+ user_id: string;
11019
+ /** @description Slack username. */
11020
+ user_name: string | null;
11021
+ /** @description Slack real name. */
11022
+ real_name: string | null;
11023
+ /** @description Slack display name. */
11024
+ display_name: string | null;
11025
+ /** @description Slack avatar image URL. */
11026
+ image_url: string | null;
11027
+ /** @description Slack team (workspace) ID. */
11028
+ team_id: string;
11029
+ };
11030
+ ConnectedGithubAccount: {
11031
+ /** @description GitHub numeric user ID. */
11032
+ user_id: string;
11033
+ /** @description GitHub login/username. */
11034
+ username: string;
11035
+ /** @description GitHub display name. */
11036
+ display_name: string | null;
11037
+ /** @description GitHub avatar URL. */
11038
+ avatar_url: string | null;
11039
+ };
10300
11040
  GithubLinkListResponse: {
10301
11041
  /** @description Response payload. */
10302
11042
  data: components["schemas"]["GithubUserLink"][];
@@ -10395,8 +11135,8 @@ export interface components {
10395
11135
  slack_dm_channel_id: string | null;
10396
11136
  /** @description ISO 8601 timestamp the DM channel was resolved. */
10397
11137
  slack_dm_channel_updated_at: string | null;
10398
- /** @description Slack app ID the link belongs to. */
10399
- app_id: string;
11138
+ /** @description Slack app ID the link belongs to (provenance only). */
11139
+ app_id: string | null;
10400
11140
  /** @description How the link was created. */
10401
11141
  source: string;
10402
11142
  /** @description ISO 8601 timestamp the link was created. */
@@ -10424,30 +11164,6 @@ export interface components {
10424
11164
  };
10425
11165
  };
10426
11166
  };
10427
- ConnectedSlackAccount: {
10428
- /** @description Slack user ID. */
10429
- user_id: string;
10430
- /** @description Slack username. */
10431
- user_name: string | null;
10432
- /** @description Slack real name. */
10433
- real_name: string | null;
10434
- /** @description Slack display name. */
10435
- display_name: string | null;
10436
- /** @description Slack avatar image URL. */
10437
- image_url: string | null;
10438
- /** @description Slack team (workspace) ID. */
10439
- team_id: string;
10440
- };
10441
- ConnectedGithubAccount: {
10442
- /** @description GitHub numeric user ID. */
10443
- user_id: string;
10444
- /** @description GitHub login/username. */
10445
- username: string;
10446
- /** @description GitHub display name. */
10447
- display_name: string | null;
10448
- /** @description GitHub avatar URL. */
10449
- avatar_url: string | null;
10450
- };
10451
11167
  PlaywrightVersionsResponse: {
10452
11168
  /** @description Response payload. */
10453
11169
  data: {
@@ -10872,6 +11588,47 @@ export interface operations {
10872
11588
  };
10873
11589
  };
10874
11590
  };
11591
+ listTestRunShareTargets: {
11592
+ parameters: {
11593
+ query?: never;
11594
+ header?: never;
11595
+ path: {
11596
+ /** @description Test run ID. */
11597
+ id: number;
11598
+ };
11599
+ cookie?: never;
11600
+ };
11601
+ requestBody?: never;
11602
+ responses: {
11603
+ /** @description Slack share destinations. */
11604
+ 200: {
11605
+ headers: {
11606
+ [name: string]: unknown;
11607
+ };
11608
+ content: {
11609
+ "application/json": components["schemas"]["TriageShareTargetsResponse"];
11610
+ };
11611
+ };
11612
+ /** @description Invalid project header. */
11613
+ 400: {
11614
+ headers: {
11615
+ [name: string]: unknown;
11616
+ };
11617
+ content: {
11618
+ "application/json": components["schemas"]["ErrorResponse"];
11619
+ };
11620
+ };
11621
+ /** @description Test run not found or not accessible. */
11622
+ 404: {
11623
+ headers: {
11624
+ [name: string]: unknown;
11625
+ };
11626
+ content: {
11627
+ "application/json": components["schemas"]["ErrorResponse"];
11628
+ };
11629
+ };
11630
+ };
11631
+ };
10875
11632
  updateTestRunEcsTask: {
10876
11633
  parameters: {
10877
11634
  query?: never;
@@ -12845,38 +13602,6 @@ export interface operations {
12845
13602
  };
12846
13603
  };
12847
13604
  };
12848
- slackInternalAlertCheckScopes: {
12849
- parameters: {
12850
- query?: never;
12851
- header?: never;
12852
- path?: never;
12853
- cookie?: never;
12854
- };
12855
- requestBody?: never;
12856
- responses: {
12857
- /** @description The internal-alerts Slack app scopes. */
12858
- 200: {
12859
- headers: {
12860
- [name: string]: unknown;
12861
- };
12862
- content: {
12863
- "application/json": components["schemas"]["SlackInternalAlertScopesResponse"];
12864
- };
12865
- };
12866
- /** @description Slack token is not configured or auth failed. */
12867
- 500: {
12868
- headers: {
12869
- [name: string]: unknown;
12870
- };
12871
- content: {
12872
- "application/json": {
12873
- /** @description Error message. */
12874
- error: string;
12875
- };
12876
- };
12877
- };
12878
- };
12879
- };
12880
13605
  slackEventsWebhook: {
12881
13606
  parameters: {
12882
13607
  query?: never;
@@ -13345,56 +14070,56 @@ export interface operations {
13345
14070
  };
13346
14071
  };
13347
14072
  };
13348
- postSlackMessage: {
14073
+ listSlackTeams: {
13349
14074
  parameters: {
13350
14075
  query?: never;
13351
14076
  header?: never;
13352
14077
  path?: never;
13353
14078
  cookie?: never;
13354
14079
  };
13355
- requestBody?: {
13356
- content: {
13357
- "application/json": {
13358
- /** @description Slack channel ID to post to. */
13359
- channel_id: string;
13360
- /** @description Message text (mrkdwn, max 3000 chars). */
13361
- message: string;
13362
- /** @description Optional action buttons to render. */
13363
- actions?: {
13364
- /** @description Button label. */
13365
- label: string;
13366
- /** @description URL the button links to. */
13367
- url: string;
13368
- /**
13369
- * @description Button style.
13370
- * @enum {string}
13371
- */
13372
- style?: "primary" | "danger";
13373
- }[];
13374
- };
13375
- };
13376
- };
14080
+ requestBody?: never;
13377
14081
  responses: {
13378
- /** @description The post result. */
14082
+ /** @description The Slack workspaces available to the project. */
13379
14083
  200: {
13380
14084
  headers: {
13381
14085
  [name: string]: unknown;
13382
14086
  };
13383
14087
  content: {
13384
- "application/json": components["schemas"]["SlackPostMessageResponse"];
14088
+ "application/json": components["schemas"]["SlackTeamListResponse"];
13385
14089
  };
13386
14090
  };
13387
- /** @description Invalid request. */
13388
- 400: {
13389
- headers: {
13390
- [name: string]: unknown;
13391
- };
13392
- content: {
13393
- "application/json": components["schemas"]["ErrorResponse"];
14091
+ };
14092
+ };
14093
+ getEnvironmentBadge: {
14094
+ parameters: {
14095
+ query?: {
14096
+ /** @description Restrict the badge to the latest run on this branch. Blank/whitespace is treated as unset (latest run across branches). */
14097
+ branch?: string;
14098
+ /** @description Left-hand label text on the badge. Blank/whitespace falls back to the default (`empirical tests`). */
14099
+ label?: string;
14100
+ };
14101
+ header?: never;
14102
+ path: {
14103
+ /** @description Slug of the project that owns the environment. */
14104
+ project_slug: string;
14105
+ /** @description Slug of the environment to render a badge for. */
14106
+ environment_slug: string;
14107
+ };
14108
+ cookie?: never;
14109
+ };
14110
+ requestBody?: never;
14111
+ responses: {
14112
+ /** @description The rendered SVG badge image. */
14113
+ 200: {
14114
+ headers: {
14115
+ [name: string]: unknown;
14116
+ };
14117
+ content: {
14118
+ "image/svg+xml": string;
13394
14119
  };
13395
14120
  };
13396
- /** @description Forbidden. */
13397
- 403: {
14121
+ /** @description Invalid request. */
14122
+ 400: {
13398
14123
  headers: {
13399
14124
  [name: string]: unknown;
13400
14125
  };
@@ -13402,66 +14127,363 @@ export interface operations {
13402
14127
  "application/json": components["schemas"]["ErrorResponse"];
13403
14128
  };
13404
14129
  };
13405
- /** @description Slack token is not configured. */
13406
- 500: {
14130
+ };
14131
+ };
14132
+ listFailureGroups: {
14133
+ parameters: {
14134
+ query?: {
14135
+ /** @description Page number (1-indexed). */
14136
+ page?: number;
14137
+ /** @description Items per page (max 100). */
14138
+ per_page?: number;
14139
+ /** @description Filter by lifecycle status. */
14140
+ status?: "open" | "resolved";
14141
+ };
14142
+ header?: never;
14143
+ path?: never;
14144
+ cookie?: never;
14145
+ };
14146
+ requestBody?: never;
14147
+ responses: {
14148
+ /** @description Paginated failure groups. */
14149
+ 200: {
13407
14150
  headers: {
13408
14151
  [name: string]: unknown;
13409
14152
  };
13410
14153
  content: {
13411
- "application/json": {
13412
- /** @description Error message. */
13413
- error: string;
13414
- };
14154
+ "application/json": components["schemas"]["FailureGroupListResponse"];
14155
+ };
14156
+ };
14157
+ /** @description Invalid request. */
14158
+ 400: {
14159
+ headers: {
14160
+ [name: string]: unknown;
14161
+ };
14162
+ content: {
14163
+ "application/json": components["schemas"]["ErrorResponse"];
13415
14164
  };
13416
14165
  };
13417
14166
  };
13418
14167
  };
13419
- listSlackTeams: {
14168
+ createFailureGroup: {
13420
14169
  parameters: {
13421
14170
  query?: never;
13422
14171
  header?: never;
13423
14172
  path?: never;
13424
14173
  cookie?: never;
13425
14174
  };
14175
+ requestBody?: {
14176
+ content: {
14177
+ "application/json": components["schemas"]["CreateFailureGroupRequest"];
14178
+ };
14179
+ };
14180
+ responses: {
14181
+ /** @description The failure group. */
14182
+ 200: {
14183
+ headers: {
14184
+ [name: string]: unknown;
14185
+ };
14186
+ content: {
14187
+ "application/json": components["schemas"]["FailureGroupResponse"];
14188
+ };
14189
+ };
14190
+ /** @description Invalid request. */
14191
+ 400: {
14192
+ headers: {
14193
+ [name: string]: unknown;
14194
+ };
14195
+ content: {
14196
+ "application/json": components["schemas"]["ErrorResponse"];
14197
+ };
14198
+ };
14199
+ };
14200
+ };
14201
+ getFailureGroup: {
14202
+ parameters: {
14203
+ query?: never;
14204
+ header?: never;
14205
+ path: {
14206
+ /** @description Failure group ID. */
14207
+ id: string;
14208
+ };
14209
+ cookie?: never;
14210
+ };
13426
14211
  requestBody?: never;
13427
14212
  responses: {
13428
- /** @description The Slack workspaces available to the project. */
14213
+ /** @description The failure group. */
14214
+ 200: {
14215
+ headers: {
14216
+ [name: string]: unknown;
14217
+ };
14218
+ content: {
14219
+ "application/json": components["schemas"]["FailureGroupResponse"];
14220
+ };
14221
+ };
14222
+ /** @description Not found. */
14223
+ 404: {
14224
+ headers: {
14225
+ [name: string]: unknown;
14226
+ };
14227
+ content: {
14228
+ "application/json": components["schemas"]["ErrorResponse"];
14229
+ };
14230
+ };
14231
+ };
14232
+ };
14233
+ deleteFailureGroup: {
14234
+ parameters: {
14235
+ query?: never;
14236
+ header?: never;
14237
+ path: {
14238
+ /** @description Failure group ID. */
14239
+ id: string;
14240
+ };
14241
+ cookie?: never;
14242
+ };
14243
+ requestBody?: never;
14244
+ responses: {
14245
+ /** @description Deleted. */
13429
14246
  200: {
13430
14247
  headers: {
13431
14248
  [name: string]: unknown;
13432
14249
  };
13433
14250
  content: {
13434
- "application/json": components["schemas"]["SlackTeamListResponse"];
14251
+ "application/json": components["schemas"]["DeleteFailureGroupResponse"];
14252
+ };
14253
+ };
14254
+ /** @description Not found. */
14255
+ 404: {
14256
+ headers: {
14257
+ [name: string]: unknown;
14258
+ };
14259
+ content: {
14260
+ "application/json": components["schemas"]["ErrorResponse"];
14261
+ };
14262
+ };
14263
+ };
14264
+ };
14265
+ updateFailureGroup: {
14266
+ parameters: {
14267
+ query?: never;
14268
+ header?: never;
14269
+ path: {
14270
+ /** @description Failure group ID. */
14271
+ id: string;
14272
+ };
14273
+ cookie?: never;
14274
+ };
14275
+ requestBody?: {
14276
+ content: {
14277
+ "application/json": components["schemas"]["PatchFailureGroupRequest"];
14278
+ };
14279
+ };
14280
+ responses: {
14281
+ /** @description The updated failure group. */
14282
+ 200: {
14283
+ headers: {
14284
+ [name: string]: unknown;
14285
+ };
14286
+ content: {
14287
+ "application/json": components["schemas"]["FailureGroupResponse"];
14288
+ };
14289
+ };
14290
+ /** @description Invalid request. */
14291
+ 400: {
14292
+ headers: {
14293
+ [name: string]: unknown;
14294
+ };
14295
+ content: {
14296
+ "application/json": components["schemas"]["ErrorResponse"];
14297
+ };
14298
+ };
14299
+ /** @description Not found. */
14300
+ 404: {
14301
+ headers: {
14302
+ [name: string]: unknown;
14303
+ };
14304
+ content: {
14305
+ "application/json": components["schemas"]["ErrorResponse"];
14306
+ };
14307
+ };
14308
+ };
14309
+ };
14310
+ getFailureGroupActivity: {
14311
+ parameters: {
14312
+ query?: never;
14313
+ header?: never;
14314
+ path: {
14315
+ /** @description Failure group ID. */
14316
+ id: string;
14317
+ };
14318
+ cookie?: never;
14319
+ };
14320
+ requestBody?: never;
14321
+ responses: {
14322
+ /** @description The activity timeline. */
14323
+ 200: {
14324
+ headers: {
14325
+ [name: string]: unknown;
14326
+ };
14327
+ content: {
14328
+ "application/json": components["schemas"]["FailureGroupActivityResponse"];
14329
+ };
14330
+ };
14331
+ /** @description Not found. */
14332
+ 404: {
14333
+ headers: {
14334
+ [name: string]: unknown;
14335
+ };
14336
+ content: {
14337
+ "application/json": components["schemas"]["ErrorResponse"];
14338
+ };
14339
+ };
14340
+ };
14341
+ };
14342
+ listFailureGroupMembers: {
14343
+ parameters: {
14344
+ query?: {
14345
+ state?: "active" | "detached" | "all";
14346
+ page?: number;
14347
+ per_page?: number;
14348
+ };
14349
+ header?: never;
14350
+ path: {
14351
+ /** @description Failure group ID. */
14352
+ id: string;
14353
+ };
14354
+ cookie?: never;
14355
+ };
14356
+ requestBody?: never;
14357
+ responses: {
14358
+ /** @description The group's members. */
14359
+ 200: {
14360
+ headers: {
14361
+ [name: string]: unknown;
14362
+ };
14363
+ content: {
14364
+ "application/json": components["schemas"]["FailureGroupMembersResponse"];
14365
+ };
14366
+ };
14367
+ /** @description Group not found. */
14368
+ 404: {
14369
+ headers: {
14370
+ [name: string]: unknown;
14371
+ };
14372
+ content: {
14373
+ "application/json": components["schemas"]["ErrorResponse"];
14374
+ };
14375
+ };
14376
+ };
14377
+ };
14378
+ attachFailureGroupMember: {
14379
+ parameters: {
14380
+ query?: never;
14381
+ header?: never;
14382
+ path: {
14383
+ /** @description Failure group ID. */
14384
+ id: string;
14385
+ };
14386
+ cookie?: never;
14387
+ };
14388
+ requestBody?: {
14389
+ content: {
14390
+ "application/json": components["schemas"]["AttachFailureGroupMemberRequest"];
14391
+ };
14392
+ };
14393
+ responses: {
14394
+ /** @description The group with its members. */
14395
+ 200: {
14396
+ headers: {
14397
+ [name: string]: unknown;
14398
+ };
14399
+ content: {
14400
+ "application/json": components["schemas"]["FailureGroupResponse"];
14401
+ };
14402
+ };
14403
+ /** @description Group or test run not found. */
14404
+ 404: {
14405
+ headers: {
14406
+ [name: string]: unknown;
14407
+ };
14408
+ content: {
14409
+ "application/json": components["schemas"]["ErrorResponse"];
14410
+ };
14411
+ };
14412
+ /** @description Membership was detached by a human; not re-attached. */
14413
+ 409: {
14414
+ headers: {
14415
+ [name: string]: unknown;
14416
+ };
14417
+ content: {
14418
+ "application/json": components["schemas"]["ErrorResponse"];
14419
+ };
14420
+ };
14421
+ };
14422
+ };
14423
+ mergeFailureGroup: {
14424
+ parameters: {
14425
+ query?: never;
14426
+ header?: never;
14427
+ path: {
14428
+ /** @description Failure group ID. */
14429
+ id: string;
14430
+ };
14431
+ cookie?: never;
14432
+ };
14433
+ requestBody?: {
14434
+ content: {
14435
+ "application/json": components["schemas"]["MergeFailureGroupRequest"];
14436
+ };
14437
+ };
14438
+ responses: {
14439
+ /** @description The target failure group. */
14440
+ 200: {
14441
+ headers: {
14442
+ [name: string]: unknown;
14443
+ };
14444
+ content: {
14445
+ "application/json": components["schemas"]["FailureGroupResponse"];
14446
+ };
14447
+ };
14448
+ /** @description Invalid request. */
14449
+ 400: {
14450
+ headers: {
14451
+ [name: string]: unknown;
14452
+ };
14453
+ content: {
14454
+ "application/json": components["schemas"]["ErrorResponse"];
14455
+ };
14456
+ };
14457
+ /** @description Not found. */
14458
+ 404: {
14459
+ headers: {
14460
+ [name: string]: unknown;
14461
+ };
14462
+ content: {
14463
+ "application/json": components["schemas"]["ErrorResponse"];
13435
14464
  };
13436
14465
  };
13437
14466
  };
13438
14467
  };
13439
- getEnvironmentBadge: {
14468
+ listFailureGroupMembersByTestRun: {
13440
14469
  parameters: {
13441
- query?: {
13442
- /** @description Restrict the badge to the latest run on this branch. Blank/whitespace is treated as unset (latest run across branches). */
13443
- branch?: string;
13444
- /** @description Left-hand label text on the badge. Blank/whitespace falls back to the default (`empirical tests`). */
13445
- label?: string;
14470
+ query: {
14471
+ /** @description Return members attached during this run. */
14472
+ test_run_id: number;
13446
14473
  };
13447
14474
  header?: never;
13448
- path: {
13449
- /** @description Slug of the project that owns the environment. */
13450
- project_slug: string;
13451
- /** @description Slug of the environment to render a badge for. */
13452
- environment_slug: string;
13453
- };
14475
+ path?: never;
13454
14476
  cookie?: never;
13455
14477
  };
13456
14478
  requestBody?: never;
13457
14479
  responses: {
13458
- /** @description The rendered SVG badge image. */
14480
+ /** @description Members attached during the run. */
13459
14481
  200: {
13460
14482
  headers: {
13461
14483
  [name: string]: unknown;
13462
14484
  };
13463
14485
  content: {
13464
- "image/svg+xml": string;
14486
+ "application/json": components["schemas"]["MembersByTestRunResponse"];
13465
14487
  };
13466
14488
  };
13467
14489
  /** @description Invalid request. */
@@ -13873,11 +14895,258 @@ export interface operations {
13873
14895
  [name: string]: unknown;
13874
14896
  };
13875
14897
  content: {
13876
- "application/json": components["schemas"]["OverlayDismissalEventsResponse"];
14898
+ "application/json": components["schemas"]["OverlayDismissalEventsResponse"];
14899
+ };
14900
+ };
14901
+ /** @description Failed to query telemetry. */
14902
+ 500: {
14903
+ headers: {
14904
+ [name: string]: unknown;
14905
+ };
14906
+ content: {
14907
+ "application/json": components["schemas"]["ErrorResponse"];
14908
+ };
14909
+ };
14910
+ };
14911
+ };
14912
+ listTestRunCases: {
14913
+ parameters: {
14914
+ query?: {
14915
+ /** @description Filter to cases with this status. */
14916
+ status?: "passed" | "failed" | "flaky" | "skipped";
14917
+ /** @description Page number (1-indexed). Default 1. */
14918
+ page?: number;
14919
+ /** @description Items per page (capped at 200). Default 50. */
14920
+ per_page?: number;
14921
+ /** @description Row order. `scheduled` (default) is manifest order — stable for a finished run. `recent` is most-recently-completed first, for the live view of an active run. */
14922
+ order?: "scheduled" | "recent";
14923
+ };
14924
+ header?: never;
14925
+ path: {
14926
+ /** @description Test run ID. */
14927
+ id: number;
14928
+ };
14929
+ cookie?: never;
14930
+ };
14931
+ requestBody?: never;
14932
+ responses: {
14933
+ /** @description Paginated list of test run cases. */
14934
+ 200: {
14935
+ headers: {
14936
+ [name: string]: unknown;
14937
+ };
14938
+ content: {
14939
+ "application/json": components["schemas"]["ListTestRunCasesResponse"];
14940
+ };
14941
+ };
14942
+ /** @description Invalid request. */
14943
+ 400: {
14944
+ headers: {
14945
+ [name: string]: unknown;
14946
+ };
14947
+ content: {
14948
+ "application/json": components["schemas"]["ErrorResponse"];
14949
+ };
14950
+ };
14951
+ /** @description Test run not found. */
14952
+ 404: {
14953
+ headers: {
14954
+ [name: string]: unknown;
14955
+ };
14956
+ content: {
14957
+ "application/json": components["schemas"]["ErrorResponse"];
14958
+ };
14959
+ };
14960
+ };
14961
+ };
14962
+ getTestRunCase: {
14963
+ parameters: {
14964
+ query?: never;
14965
+ header?: never;
14966
+ path: {
14967
+ /** @description Test run ID. */
14968
+ id: number;
14969
+ /** @description Playwright test ID (`pw_test_id`) of the case. */
14970
+ case_id: string;
14971
+ };
14972
+ cookie?: never;
14973
+ };
14974
+ requestBody?: never;
14975
+ responses: {
14976
+ /** @description The test run case. */
14977
+ 200: {
14978
+ headers: {
14979
+ [name: string]: unknown;
14980
+ };
14981
+ content: {
14982
+ "application/json": components["schemas"]["GetTestRunCaseResponse"];
14983
+ };
14984
+ };
14985
+ /** @description Invalid request. */
14986
+ 400: {
14987
+ headers: {
14988
+ [name: string]: unknown;
14989
+ };
14990
+ content: {
14991
+ "application/json": components["schemas"]["ErrorResponse"];
14992
+ };
14993
+ };
14994
+ /** @description Test run or test case not found. */
14995
+ 404: {
14996
+ headers: {
14997
+ [name: string]: unknown;
14998
+ };
14999
+ content: {
15000
+ "application/json": components["schemas"]["ErrorResponse"];
15001
+ };
15002
+ };
15003
+ };
15004
+ };
15005
+ listChatSessionThreads: {
15006
+ parameters: {
15007
+ query?: never;
15008
+ header?: never;
15009
+ path: {
15010
+ /** @description Chat session ID. */
15011
+ id: number;
15012
+ };
15013
+ cookie?: never;
15014
+ };
15015
+ requestBody?: never;
15016
+ responses: {
15017
+ /** @description The session's threads. */
15018
+ 200: {
15019
+ headers: {
15020
+ [name: string]: unknown;
15021
+ };
15022
+ content: {
15023
+ "application/json": components["schemas"]["ChatSessionThreadsListResponse"];
15024
+ };
15025
+ };
15026
+ /** @description Chat session not found. */
15027
+ 404: {
15028
+ headers: {
15029
+ [name: string]: unknown;
15030
+ };
15031
+ content: {
15032
+ "application/json": components["schemas"]["ErrorResponse"];
15033
+ };
15034
+ };
15035
+ };
15036
+ };
15037
+ createChatSessionThread: {
15038
+ parameters: {
15039
+ query?: never;
15040
+ header?: never;
15041
+ path: {
15042
+ /** @description Chat session ID. */
15043
+ id: number;
15044
+ };
15045
+ cookie?: never;
15046
+ };
15047
+ requestBody?: {
15048
+ content: {
15049
+ "application/json": {
15050
+ /**
15051
+ * @description Messaging provider. Only "slack" is supported.
15052
+ * @default slack
15053
+ * @enum {string}
15054
+ */
15055
+ provider?: "slack";
15056
+ /**
15057
+ * @description Creates an agent-controlled Slack thread: explicit outbound messages, mentioned replies forwarded to the session.
15058
+ * @enum {string}
15059
+ */
15060
+ purpose: "agent";
15061
+ /** @description Slack workspace/team ID. */
15062
+ team_id: string;
15063
+ /** @description Slack channel ID. */
15064
+ channel_id: string;
15065
+ /** @description Markdown root message for the Slack thread. Empirical converts it to Slack formatting. */
15066
+ markdown: string;
15067
+ } | {
15068
+ /**
15069
+ * @description Messaging provider. Only "slack" is supported.
15070
+ * @default slack
15071
+ * @enum {string}
15072
+ */
15073
+ provider?: "slack";
15074
+ /**
15075
+ * @description Thread purpose. "notification" creates a personal DM mirror.
15076
+ * @default notification
15077
+ * @enum {string}
15078
+ */
15079
+ purpose?: "notification";
15080
+ /**
15081
+ * @description Channel type. Only "im" is supported for notification threads.
15082
+ * @default im
15083
+ * @enum {string}
15084
+ */
15085
+ channel_type?: "im";
15086
+ /** @description Recipient user ID (UUID v4 format) whose linked Slack account receives the DM. */
15087
+ user_id: string;
15088
+ /** @description Message text for the DM, sent only when the thread is first created. */
15089
+ message: string;
15090
+ };
15091
+ };
15092
+ };
15093
+ responses: {
15094
+ /** @description The existing notification thread. */
15095
+ 200: {
15096
+ headers: {
15097
+ [name: string]: unknown;
15098
+ };
15099
+ content: {
15100
+ "application/json": components["schemas"]["ChatSessionThreadResponse"];
15101
+ };
15102
+ };
15103
+ /** @description The newly created thread. */
15104
+ 201: {
15105
+ headers: {
15106
+ [name: string]: unknown;
15107
+ };
15108
+ content: {
15109
+ "application/json": components["schemas"]["ChatSessionThreadResponse"];
15110
+ };
15111
+ };
15112
+ /** @description Invalid request or missing Slack link. */
15113
+ 400: {
15114
+ headers: {
15115
+ [name: string]: unknown;
15116
+ };
15117
+ content: {
15118
+ "application/json": components["schemas"]["ErrorResponse"];
15119
+ };
15120
+ };
15121
+ /** @description Chat session not found. */
15122
+ 404: {
15123
+ headers: {
15124
+ [name: string]: unknown;
15125
+ };
15126
+ content: {
15127
+ "application/json": components["schemas"]["ErrorResponse"];
15128
+ };
15129
+ };
15130
+ /** @description Thread already exists. */
15131
+ 409: {
15132
+ headers: {
15133
+ [name: string]: unknown;
15134
+ };
15135
+ content: {
15136
+ "application/json": components["schemas"]["ErrorResponse"];
15137
+ };
15138
+ };
15139
+ /** @description Slack token is not configured. */
15140
+ 424: {
15141
+ headers: {
15142
+ [name: string]: unknown;
15143
+ };
15144
+ content: {
15145
+ "application/json": components["schemas"]["ErrorResponse"];
13877
15146
  };
13878
15147
  };
13879
- /** @description Failed to query telemetry. */
13880
- 500: {
15148
+ /** @description Failed to create the Slack thread. */
15149
+ 502: {
13881
15150
  headers: {
13882
15151
  [name: string]: unknown;
13883
15152
  };
@@ -13887,35 +15156,48 @@ export interface operations {
13887
15156
  };
13888
15157
  };
13889
15158
  };
13890
- listTestRunCases: {
15159
+ createChatSessionThreadMessage: {
13891
15160
  parameters: {
13892
- query?: {
13893
- /** @description Filter to cases with this status. */
13894
- status?: "passed" | "failed" | "flaky" | "skipped";
13895
- /** @description Page number (1-indexed). Default 1. */
13896
- page?: number;
13897
- /** @description Items per page (capped at 200). Default 50. */
13898
- per_page?: number;
13899
- };
15161
+ query?: never;
13900
15162
  header?: never;
13901
15163
  path: {
13902
- /** @description Test run ID. */
15164
+ /** @description Chat session ID. */
13903
15165
  id: number;
15166
+ /** @description Chat session thread ID. */
15167
+ thread_id: number;
13904
15168
  };
13905
15169
  cookie?: never;
13906
15170
  };
13907
- requestBody?: never;
15171
+ requestBody?: {
15172
+ content: {
15173
+ "application/json": {
15174
+ /** @description Markdown message to post to the Slack thread. Empirical converts it to Slack formatting. */
15175
+ markdown: string;
15176
+ /** @description Stable caller-generated key for safely retrying this Slack post. */
15177
+ idempotency_key: string;
15178
+ };
15179
+ };
15180
+ };
13908
15181
  responses: {
13909
- /** @description Paginated list of test run cases. */
15182
+ /** @description The previously sent message. */
13910
15183
  200: {
13911
15184
  headers: {
13912
15185
  [name: string]: unknown;
13913
15186
  };
13914
15187
  content: {
13915
- "application/json": components["schemas"]["ListTestRunCasesResponse"];
15188
+ "application/json": components["schemas"]["ChatSessionThreadMessageResponse"];
13916
15189
  };
13917
15190
  };
13918
- /** @description Invalid request. */
15191
+ /** @description The sent message. */
15192
+ 201: {
15193
+ headers: {
15194
+ [name: string]: unknown;
15195
+ };
15196
+ content: {
15197
+ "application/json": components["schemas"]["ChatSessionThreadMessageResponse"];
15198
+ };
15199
+ };
15200
+ /** @description Thread is not agent-controlled. */
13919
15201
  400: {
13920
15202
  headers: {
13921
15203
  [name: string]: unknown;
@@ -13924,7 +15206,7 @@ export interface operations {
13924
15206
  "application/json": components["schemas"]["ErrorResponse"];
13925
15207
  };
13926
15208
  };
13927
- /** @description Test run not found. */
15209
+ /** @description Chat session thread not found. */
13928
15210
  404: {
13929
15211
  headers: {
13930
15212
  [name: string]: unknown;
@@ -13933,33 +15215,17 @@ export interface operations {
13933
15215
  "application/json": components["schemas"]["ErrorResponse"];
13934
15216
  };
13935
15217
  };
13936
- };
13937
- };
13938
- getTestRunCase: {
13939
- parameters: {
13940
- query?: never;
13941
- header?: never;
13942
- path: {
13943
- /** @description Test run ID. */
13944
- id: number;
13945
- /** @description Playwright test ID (`pw_test_id`) of the case. */
13946
- case_id: string;
13947
- };
13948
- cookie?: never;
13949
- };
13950
- requestBody?: never;
13951
- responses: {
13952
- /** @description The test run case. */
13953
- 200: {
15218
+ /** @description Idempotency conflict. */
15219
+ 409: {
13954
15220
  headers: {
13955
15221
  [name: string]: unknown;
13956
15222
  };
13957
15223
  content: {
13958
- "application/json": components["schemas"]["GetTestRunCaseResponse"];
15224
+ "application/json": components["schemas"]["ErrorResponse"];
13959
15225
  };
13960
15226
  };
13961
- /** @description Invalid request. */
13962
- 400: {
15227
+ /** @description Slack token is not configured. */
15228
+ 424: {
13963
15229
  headers: {
13964
15230
  [name: string]: unknown;
13965
15231
  };
@@ -13967,8 +15233,8 @@ export interface operations {
13967
15233
  "application/json": components["schemas"]["ErrorResponse"];
13968
15234
  };
13969
15235
  };
13970
- /** @description Test run or test case not found. */
13971
- 404: {
15236
+ /** @description Failed to post Slack message. */
15237
+ 502: {
13972
15238
  headers: {
13973
15239
  [name: string]: unknown;
13974
15240
  };
@@ -14060,74 +15326,6 @@ export interface operations {
14060
15326
  };
14061
15327
  };
14062
15328
  };
14063
- listFailureGroups: {
14064
- parameters: {
14065
- query?: {
14066
- /** @description Page number (1-indexed). */
14067
- page?: number;
14068
- /** @description Items per page (max 100). */
14069
- per_page?: number;
14070
- /** @description Filter by lifecycle status. */
14071
- status?: "open" | "resolved";
14072
- };
14073
- header?: never;
14074
- path?: never;
14075
- cookie?: never;
14076
- };
14077
- requestBody?: never;
14078
- responses: {
14079
- /** @description Paginated failure groups. */
14080
- 200: {
14081
- headers: {
14082
- [name: string]: unknown;
14083
- };
14084
- content: {
14085
- "application/json": components["schemas"]["FailureGroupListResponse"];
14086
- };
14087
- };
14088
- /** @description Invalid request. */
14089
- 400: {
14090
- headers: {
14091
- [name: string]: unknown;
14092
- };
14093
- content: {
14094
- "application/json": components["schemas"]["ErrorResponse"];
14095
- };
14096
- };
14097
- };
14098
- };
14099
- getFailureGroup: {
14100
- parameters: {
14101
- query?: never;
14102
- header?: never;
14103
- path: {
14104
- /** @description Failure group ID. */
14105
- id: string;
14106
- };
14107
- cookie?: never;
14108
- };
14109
- requestBody?: never;
14110
- responses: {
14111
- /** @description The failure group. */
14112
- 200: {
14113
- headers: {
14114
- [name: string]: unknown;
14115
- };
14116
- content: {
14117
- "application/json": components["schemas"]["FailureGroupResponse"];
14118
- };
14119
- };
14120
- /** @description Not found. */
14121
- 404: {
14122
- headers: {
14123
- [name: string]: unknown;
14124
- };
14125
- content: {
14126
- "application/json": components["schemas"]["ErrorResponse"];
14127
- };
14128
- };
14129
- };
14130
- };
14131
15329
  githubProxy: {
14132
15330
  parameters: {
14133
15331
  query?: never;
@@ -14450,26 +15648,157 @@ export interface operations {
14450
15648
  };
14451
15649
  getTriageReport: {
14452
15650
  parameters: {
14453
- query?: never;
14454
- header?: never;
14455
- path: {
14456
- /** @description Triage report ID. */
14457
- id: number;
15651
+ query?: never;
15652
+ header?: never;
15653
+ path: {
15654
+ /** @description Triage report ID. */
15655
+ id: number;
15656
+ };
15657
+ cookie?: never;
15658
+ };
15659
+ requestBody?: never;
15660
+ responses: {
15661
+ /** @description The triage report. */
15662
+ 200: {
15663
+ headers: {
15664
+ [name: string]: unknown;
15665
+ };
15666
+ content: {
15667
+ "application/json": components["schemas"]["TriageReportResponse"];
15668
+ };
15669
+ };
15670
+ /** @description Not found. */
15671
+ 404: {
15672
+ headers: {
15673
+ [name: string]: unknown;
15674
+ };
15675
+ content: {
15676
+ "application/json": components["schemas"]["ErrorResponse"];
15677
+ };
15678
+ };
15679
+ };
15680
+ };
15681
+ updateTriageReport: {
15682
+ parameters: {
15683
+ query?: never;
15684
+ header?: never;
15685
+ path: {
15686
+ /** @description Triage report ID. */
15687
+ id: number;
15688
+ };
15689
+ cookie?: never;
15690
+ };
15691
+ requestBody?: {
15692
+ content: {
15693
+ "application/json": components["schemas"]["UpdateTriageReportRequest"];
15694
+ };
15695
+ };
15696
+ responses: {
15697
+ /** @description The updated triage report. */
15698
+ 200: {
15699
+ headers: {
15700
+ [name: string]: unknown;
15701
+ };
15702
+ content: {
15703
+ "application/json": components["schemas"]["TriageReportResponse"];
15704
+ };
15705
+ };
15706
+ /** @description Invalid request. */
15707
+ 400: {
15708
+ headers: {
15709
+ [name: string]: unknown;
15710
+ };
15711
+ content: {
15712
+ "application/json": components["schemas"]["ErrorResponse"];
15713
+ };
15714
+ };
15715
+ /** @description Not found. */
15716
+ 404: {
15717
+ headers: {
15718
+ [name: string]: unknown;
15719
+ };
15720
+ content: {
15721
+ "application/json": components["schemas"]["ErrorResponse"];
15722
+ };
15723
+ };
15724
+ };
15725
+ };
15726
+ updateTriageReportKey: {
15727
+ parameters: {
15728
+ query?: never;
15729
+ header?: never;
15730
+ path: {
15731
+ /** @description Triage report ID. */
15732
+ id: number;
15733
+ };
15734
+ cookie?: never;
15735
+ };
15736
+ requestBody?: {
15737
+ content: {
15738
+ "application/json": components["schemas"]["UpdateTriageReportKeyRequest"];
15739
+ };
15740
+ };
15741
+ responses: {
15742
+ /** @description The updated triage report. */
15743
+ 200: {
15744
+ headers: {
15745
+ [name: string]: unknown;
15746
+ };
15747
+ content: {
15748
+ "application/json": components["schemas"]["TriageReportResponse"];
15749
+ };
15750
+ };
15751
+ /** @description Invalid request. */
15752
+ 400: {
15753
+ headers: {
15754
+ [name: string]: unknown;
15755
+ };
15756
+ content: {
15757
+ "application/json": components["schemas"]["ErrorResponse"];
15758
+ };
15759
+ };
15760
+ /** @description Not found. */
15761
+ 404: {
15762
+ headers: {
15763
+ [name: string]: unknown;
15764
+ };
15765
+ content: {
15766
+ "application/json": components["schemas"]["ErrorResponse"];
15767
+ };
15768
+ };
15769
+ };
15770
+ };
15771
+ listTriageShareTargets: {
15772
+ parameters: {
15773
+ query: {
15774
+ /** @description Test run to list Slack share destinations for. */
15775
+ test_run_id: number;
14458
15776
  };
15777
+ header?: never;
15778
+ path?: never;
14459
15779
  cookie?: never;
14460
15780
  };
14461
15781
  requestBody?: never;
14462
15782
  responses: {
14463
- /** @description The triage report. */
15783
+ /** @description Slack share destinations. */
14464
15784
  200: {
14465
15785
  headers: {
14466
15786
  [name: string]: unknown;
14467
15787
  };
14468
15788
  content: {
14469
- "application/json": components["schemas"]["TriageReportResponse"];
15789
+ "application/json": components["schemas"]["TriageShareTargetsResponse"];
14470
15790
  };
14471
15791
  };
14472
- /** @description Not found. */
15792
+ /** @description Invalid request. */
15793
+ 400: {
15794
+ headers: {
15795
+ [name: string]: unknown;
15796
+ };
15797
+ content: {
15798
+ "application/json": components["schemas"]["ErrorResponse"];
15799
+ };
15800
+ };
15801
+ /** @description Test run not found. */
14473
15802
  404: {
14474
15803
  headers: {
14475
15804
  [name: string]: unknown;
@@ -14480,29 +15809,25 @@ export interface operations {
14480
15809
  };
14481
15810
  };
14482
15811
  };
14483
- updateTriageReport: {
15812
+ listTriageStatuses: {
14484
15813
  parameters: {
14485
- query?: never;
14486
- header?: never;
14487
- path: {
14488
- /** @description Triage report ID. */
14489
- id: number;
15814
+ query: {
15815
+ /** @description Return the triage statuses recorded for this test run. */
15816
+ test_run_id: number;
14490
15817
  };
15818
+ header?: never;
15819
+ path?: never;
14491
15820
  cookie?: never;
14492
15821
  };
14493
- requestBody?: {
14494
- content: {
14495
- "application/json": components["schemas"]["UpdateTriageReportRequest"];
14496
- };
14497
- };
15822
+ requestBody?: never;
14498
15823
  responses: {
14499
- /** @description The updated triage report. */
15824
+ /** @description The run's triage statuses. */
14500
15825
  200: {
14501
15826
  headers: {
14502
15827
  [name: string]: unknown;
14503
15828
  };
14504
15829
  content: {
14505
- "application/json": components["schemas"]["TriageReportResponse"];
15830
+ "application/json": components["schemas"]["TriageStatusListResponse"];
14506
15831
  };
14507
15832
  };
14508
15833
  /** @description Invalid request. */
@@ -14514,40 +15839,28 @@ export interface operations {
14514
15839
  "application/json": components["schemas"]["ErrorResponse"];
14515
15840
  };
14516
15841
  };
14517
- /** @description Not found. */
14518
- 404: {
14519
- headers: {
14520
- [name: string]: unknown;
14521
- };
14522
- content: {
14523
- "application/json": components["schemas"]["ErrorResponse"];
14524
- };
14525
- };
14526
15842
  };
14527
15843
  };
14528
- updateTriageReportKey: {
15844
+ upsertTriageStatus: {
14529
15845
  parameters: {
14530
15846
  query?: never;
14531
15847
  header?: never;
14532
- path: {
14533
- /** @description Triage report ID. */
14534
- id: number;
14535
- };
15848
+ path?: never;
14536
15849
  cookie?: never;
14537
15850
  };
14538
15851
  requestBody?: {
14539
15852
  content: {
14540
- "application/json": components["schemas"]["UpdateTriageReportKeyRequest"];
15853
+ "application/json": components["schemas"]["UpsertTriageStatusRequest"];
14541
15854
  };
14542
15855
  };
14543
15856
  responses: {
14544
- /** @description The updated triage report. */
15857
+ /** @description The triage status. */
14545
15858
  200: {
14546
15859
  headers: {
14547
15860
  [name: string]: unknown;
14548
15861
  };
14549
15862
  content: {
14550
- "application/json": components["schemas"]["TriageReportResponse"];
15863
+ "application/json": components["schemas"]["TriageStatusResponse"];
14551
15864
  };
14552
15865
  };
14553
15866
  /** @description Invalid request. */
@@ -14559,7 +15872,16 @@ export interface operations {
14559
15872
  "application/json": components["schemas"]["ErrorResponse"];
14560
15873
  };
14561
15874
  };
14562
- /** @description Not found. */
15875
+ /** @description Sandbox authentication required. */
15876
+ 403: {
15877
+ headers: {
15878
+ [name: string]: unknown;
15879
+ };
15880
+ content: {
15881
+ "application/json": components["schemas"]["ErrorResponse"];
15882
+ };
15883
+ };
15884
+ /** @description Test run or failure group not found. */
14563
15885
  404: {
14564
15886
  headers: {
14565
15887
  [name: string]: unknown;
@@ -14570,11 +15892,13 @@ export interface operations {
14570
15892
  };
14571
15893
  };
14572
15894
  };
14573
- listTriageShareTargets: {
15895
+ listUsers: {
14574
15896
  parameters: {
14575
15897
  query: {
14576
- /** @description Test run to list Slack share destinations for. */
14577
- test_run_id: number;
15898
+ /** @description Search term matched against user name or email. */
15899
+ query: string;
15900
+ /** @description Maximum users to return. Default 10; max 10. */
15901
+ limit?: number;
14578
15902
  };
14579
15903
  header?: never;
14580
15904
  path?: never;
@@ -14582,16 +15906,16 @@ export interface operations {
14582
15906
  };
14583
15907
  requestBody?: never;
14584
15908
  responses: {
14585
- /** @description Slack share destinations. */
15909
+ /** @description Matching users. */
14586
15910
  200: {
14587
15911
  headers: {
14588
15912
  [name: string]: unknown;
14589
15913
  };
14590
15914
  content: {
14591
- "application/json": components["schemas"]["TriageShareTargetsResponse"];
15915
+ "application/json": components["schemas"]["UsersListResponse"];
14592
15916
  };
14593
15917
  };
14594
- /** @description Invalid request. */
15918
+ /** @description Invalid request or ambiguous project scope. */
14595
15919
  400: {
14596
15920
  headers: {
14597
15921
  [name: string]: unknown;
@@ -14600,7 +15924,7 @@ export interface operations {
14600
15924
  "application/json": components["schemas"]["ErrorResponse"];
14601
15925
  };
14602
15926
  };
14603
- /** @description Test run not found. */
15927
+ /** @description Project not found or not accessible. */
14604
15928
  404: {
14605
15929
  headers: {
14606
15930
  [name: string]: unknown;
@@ -14878,6 +16202,57 @@ export interface operations {
14878
16202
  };
14879
16203
  };
14880
16204
  };
16205
+ createAlarm: {
16206
+ parameters: {
16207
+ query?: never;
16208
+ header?: never;
16209
+ path?: never;
16210
+ cookie?: never;
16211
+ };
16212
+ requestBody?: {
16213
+ content: {
16214
+ "application/json": components["schemas"]["CreateAlarmRequest"];
16215
+ };
16216
+ };
16217
+ responses: {
16218
+ /** @description The scheduled alarm. */
16219
+ 200: {
16220
+ headers: {
16221
+ [name: string]: unknown;
16222
+ };
16223
+ content: {
16224
+ "application/json": components["schemas"]["AlarmResponse"];
16225
+ };
16226
+ };
16227
+ /** @description Invalid duration or out of the allowed range. */
16228
+ 400: {
16229
+ headers: {
16230
+ [name: string]: unknown;
16231
+ };
16232
+ content: {
16233
+ "application/json": components["schemas"]["ErrorResponse"];
16234
+ };
16235
+ };
16236
+ /** @description Caller is not acting on behalf of a chat session. */
16237
+ 403: {
16238
+ headers: {
16239
+ [name: string]: unknown;
16240
+ };
16241
+ content: {
16242
+ "application/json": components["schemas"]["ErrorResponse"];
16243
+ };
16244
+ };
16245
+ /** @description Scheduling is not available in this environment. */
16246
+ 503: {
16247
+ headers: {
16248
+ [name: string]: unknown;
16249
+ };
16250
+ content: {
16251
+ "application/json": components["schemas"]["ErrorResponse"];
16252
+ };
16253
+ };
16254
+ };
16255
+ };
14881
16256
  listApiKeys: {
14882
16257
  parameters: {
14883
16258
  query?: never;
@@ -15680,10 +17055,10 @@ export interface operations {
15680
17055
  content: {
15681
17056
  "application/json": {
15682
17057
  /**
15683
- * @description Lifecycle action to apply to the sandbox.
17058
+ * @description Lifecycle action to apply to the sandbox. `reprovision` builds a fresh sandbox for a session whose previous one failed to start (only acts from an errored/absent sandbox).
15684
17059
  * @enum {string}
15685
17060
  */
15686
- action: "pause" | "resume";
17061
+ action: "pause" | "resume" | "reprovision";
15687
17062
  };
15688
17063
  };
15689
17064
  };
@@ -16024,179 +17399,63 @@ export interface operations {
16024
17399
  "application/json": components["schemas"]["ErrorResponse"];
16025
17400
  };
16026
17401
  };
16027
- /** @description Forbidden. */
16028
- 403: {
16029
- headers: {
16030
- [name: string]: unknown;
16031
- };
16032
- content: {
16033
- "application/json": components["schemas"]["SandboxTerminalSession"];
16034
- };
16035
- };
16036
- /** @description Sandbox not found. */
16037
- 404: {
16038
- headers: {
16039
- [name: string]: unknown;
16040
- };
16041
- content: {
16042
- "application/json": components["schemas"]["SandboxTerminalSession"];
16043
- };
16044
- };
16045
- /** @description Failed to create terminal session. */
16046
- 500: {
16047
- headers: {
16048
- [name: string]: unknown;
16049
- };
16050
- content: {
16051
- "application/json": components["schemas"]["SandboxTerminalSession"];
16052
- };
16053
- };
16054
- };
16055
- };
16056
- getChatSessionState: {
16057
- parameters: {
16058
- query?: {
16059
- /** @description Cap the number of most-recent entries returned. Omit for the full log. */
16060
- limit?: number;
16061
- };
16062
- header?: never;
16063
- path: {
16064
- /** @description Chat session ID. */
16065
- id: number;
16066
- };
16067
- cookie?: never;
16068
- };
16069
- requestBody?: never;
16070
- responses: {
16071
- /** @description Recent log entries, user messages, and sandbox state. */
16072
- 200: {
16073
- headers: {
16074
- [name: string]: unknown;
16075
- };
16076
- content: {
16077
- "application/json": components["schemas"]["ChatSessionStateResponse"];
16078
- };
16079
- };
16080
- /** @description Chat session not found. */
16081
- 404: {
16082
- headers: {
16083
- [name: string]: unknown;
16084
- };
16085
- content: {
16086
- "application/json": components["schemas"]["ErrorResponse"];
16087
- };
16088
- };
16089
- };
16090
- };
16091
- listChatSessionThreads: {
16092
- parameters: {
16093
- query?: never;
16094
- header?: never;
16095
- path: {
16096
- /** @description Chat session ID. */
16097
- id: number;
16098
- };
16099
- cookie?: never;
16100
- };
16101
- requestBody?: never;
16102
- responses: {
16103
- /** @description The session's threads. */
16104
- 200: {
16105
- headers: {
16106
- [name: string]: unknown;
16107
- };
16108
- content: {
16109
- "application/json": components["schemas"]["ChatSessionThreadsListResponse"];
16110
- };
16111
- };
16112
- /** @description Chat session not found. */
16113
- 404: {
16114
- headers: {
16115
- [name: string]: unknown;
16116
- };
16117
- content: {
16118
- "application/json": components["schemas"]["ErrorResponse"];
16119
- };
16120
- };
16121
- };
16122
- };
16123
- createChatSessionThread: {
16124
- parameters: {
16125
- query?: never;
16126
- header?: never;
16127
- path: {
16128
- /** @description Chat session ID. */
16129
- id: number;
16130
- };
16131
- cookie?: never;
16132
- };
16133
- requestBody?: {
16134
- content: {
16135
- "application/json": {
16136
- /**
16137
- * @description Messaging provider. Only "slack" is supported.
16138
- * @default slack
16139
- * @enum {string}
16140
- */
16141
- provider?: "slack";
16142
- /**
16143
- * @description Thread purpose. Only "notification" (a personal DM) can be created.
16144
- * @default notification
16145
- * @enum {string}
16146
- */
16147
- purpose?: "notification";
16148
- /**
16149
- * @description Channel type. Only "im" (a personal DM) is supported.
16150
- * @default im
16151
- * @enum {string}
16152
- */
16153
- channel_type?: "im";
16154
- /** @description Recipient user ID (UUID v4 format) whose linked Slack account receives the DM. */
16155
- user_id: string;
16156
- /** @description Message text for the DM, sent only when the thread is first created. */
16157
- message: string;
16158
- };
16159
- };
16160
- };
16161
- responses: {
16162
- /** @description The existing thread. */
16163
- 200: {
17402
+ /** @description Forbidden. */
17403
+ 403: {
16164
17404
  headers: {
16165
17405
  [name: string]: unknown;
16166
17406
  };
16167
17407
  content: {
16168
- "application/json": components["schemas"]["ChatSessionThreadResponse"];
17408
+ "application/json": components["schemas"]["SandboxTerminalSession"];
16169
17409
  };
16170
17410
  };
16171
- /** @description The newly created thread. */
16172
- 201: {
17411
+ /** @description Sandbox not found. */
17412
+ 404: {
16173
17413
  headers: {
16174
17414
  [name: string]: unknown;
16175
17415
  };
16176
17416
  content: {
16177
- "application/json": components["schemas"]["ChatSessionThreadResponse"];
17417
+ "application/json": components["schemas"]["SandboxTerminalSession"];
16178
17418
  };
16179
17419
  };
16180
- /** @description Recipient has no valid linked Slack account. */
16181
- 400: {
17420
+ /** @description Failed to create terminal session. */
17421
+ 500: {
16182
17422
  headers: {
16183
17423
  [name: string]: unknown;
16184
17424
  };
16185
17425
  content: {
16186
- "application/json": components["schemas"]["ErrorResponse"];
17426
+ "application/json": components["schemas"]["SandboxTerminalSession"];
16187
17427
  };
16188
17428
  };
16189
- /** @description Chat session not found. */
16190
- 404: {
17429
+ };
17430
+ };
17431
+ getChatSessionState: {
17432
+ parameters: {
17433
+ query?: {
17434
+ /** @description Page number (1-indexed). Default 1. */
17435
+ page?: number;
17436
+ /** @description Entries per page (1-100). Default 50. */
17437
+ per_page?: number;
17438
+ };
17439
+ header?: never;
17440
+ path: {
17441
+ /** @description Chat session ID. */
17442
+ id: number;
17443
+ };
17444
+ cookie?: never;
17445
+ };
17446
+ requestBody?: never;
17447
+ responses: {
17448
+ /** @description A page of log entries (newest block first), plus user messages and sandbox state. */
17449
+ 200: {
16191
17450
  headers: {
16192
17451
  [name: string]: unknown;
16193
17452
  };
16194
17453
  content: {
16195
- "application/json": components["schemas"]["ErrorResponse"];
17454
+ "application/json": components["schemas"]["ChatSessionStateResponse"];
16196
17455
  };
16197
17456
  };
16198
- /** @description Failed to create the Slack DM thread. */
16199
- 502: {
17457
+ /** @description Chat session not found. */
17458
+ 404: {
16200
17459
  headers: {
16201
17460
  [name: string]: unknown;
16202
17461
  };
@@ -16755,6 +18014,103 @@ export interface operations {
16755
18014
  };
16756
18015
  };
16757
18016
  };
18017
+ detachFailureGroupMember: {
18018
+ parameters: {
18019
+ query?: never;
18020
+ header?: never;
18021
+ path: {
18022
+ /** @description Failure group id. */
18023
+ id: string;
18024
+ /** @description Member test to detach. */
18025
+ test_case_id: string;
18026
+ };
18027
+ cookie?: never;
18028
+ };
18029
+ requestBody?: never;
18030
+ responses: {
18031
+ /** @description Membership detached. */
18032
+ 200: {
18033
+ headers: {
18034
+ [name: string]: unknown;
18035
+ };
18036
+ content: {
18037
+ "application/json": components["schemas"]["FailureGroupDetachMemberResponse"];
18038
+ };
18039
+ };
18040
+ /** @description Only humans may detach a membership. */
18041
+ 403: {
18042
+ headers: {
18043
+ [name: string]: unknown;
18044
+ };
18045
+ content: {
18046
+ "application/json": components["schemas"]["ErrorResponse"];
18047
+ };
18048
+ };
18049
+ /** @description Group not found. */
18050
+ 404: {
18051
+ headers: {
18052
+ [name: string]: unknown;
18053
+ };
18054
+ content: {
18055
+ "application/json": components["schemas"]["ErrorResponse"];
18056
+ };
18057
+ };
18058
+ };
18059
+ };
18060
+ shareFailureGroup: {
18061
+ parameters: {
18062
+ query?: never;
18063
+ header?: never;
18064
+ path: {
18065
+ /** @description Failure group ID. */
18066
+ id: string;
18067
+ };
18068
+ cookie?: never;
18069
+ };
18070
+ requestBody?: {
18071
+ content: {
18072
+ "application/json": components["schemas"]["ShareFailureGroupRequest"];
18073
+ };
18074
+ };
18075
+ responses: {
18076
+ /** @description Diagnosis shared. */
18077
+ 200: {
18078
+ headers: {
18079
+ [name: string]: unknown;
18080
+ };
18081
+ content: {
18082
+ "application/json": components["schemas"]["FailureGroupShareResponse"];
18083
+ };
18084
+ };
18085
+ /** @description Invalid request or destination. */
18086
+ 400: {
18087
+ headers: {
18088
+ [name: string]: unknown;
18089
+ };
18090
+ content: {
18091
+ "application/json": components["schemas"]["ErrorResponse"];
18092
+ };
18093
+ };
18094
+ /** @description Group not found, or it has no diagnosis. */
18095
+ 404: {
18096
+ headers: {
18097
+ [name: string]: unknown;
18098
+ };
18099
+ content: {
18100
+ "application/json": components["schemas"]["ErrorResponse"];
18101
+ };
18102
+ };
18103
+ /** @description Failed to post message. */
18104
+ 500: {
18105
+ headers: {
18106
+ [name: string]: unknown;
18107
+ };
18108
+ content: {
18109
+ "application/json": components["schemas"]["ErrorResponse"];
18110
+ };
18111
+ };
18112
+ };
18113
+ };
16758
18114
  evaluateFlags: {
16759
18115
  parameters: {
16760
18116
  query: {
@@ -16807,6 +18163,41 @@ export interface operations {
16807
18163
  };
16808
18164
  };
16809
18165
  };
18166
+ receiveAdminGithubEvent: {
18167
+ parameters: {
18168
+ query?: never;
18169
+ header?: never;
18170
+ path?: never;
18171
+ cookie?: never;
18172
+ };
18173
+ requestBody?: {
18174
+ content: {
18175
+ "application/json": {
18176
+ [key: string]: unknown;
18177
+ };
18178
+ };
18179
+ };
18180
+ responses: {
18181
+ /** @description Event accepted. */
18182
+ 200: {
18183
+ headers: {
18184
+ [name: string]: unknown;
18185
+ };
18186
+ content: {
18187
+ "application/json": components["schemas"]["GithubAdminWebhookAck"];
18188
+ };
18189
+ };
18190
+ /** @description Invalid request. */
18191
+ 400: {
18192
+ headers: {
18193
+ [name: string]: unknown;
18194
+ };
18195
+ content: {
18196
+ "application/json": components["schemas"]["ErrorResponse"];
18197
+ };
18198
+ };
18199
+ };
18200
+ };
16810
18201
  getCommitDiff: {
16811
18202
  parameters: {
16812
18203
  query: {
@@ -16864,12 +18255,7 @@ export interface operations {
16864
18255
  requestBody?: {
16865
18256
  content: {
16866
18257
  "application/json": {
16867
- /** @description GitHub event type (e.g. `installation`, `push`). */
16868
- event_type: string;
16869
- /** @description Raw GitHub webhook payload. */
16870
- payload: {
16871
- [key: string]: unknown;
16872
- };
18258
+ [key: string]: unknown;
16873
18259
  };
16874
18260
  };
16875
18261
  };
@@ -17174,6 +18560,38 @@ export interface operations {
17174
18560
  };
17175
18561
  };
17176
18562
  };
18563
+ getMainInstallationMetadata: {
18564
+ parameters: {
18565
+ query?: never;
18566
+ header?: never;
18567
+ path: {
18568
+ /** @description GitHub App installation ID. */
18569
+ app_installation_id: string;
18570
+ };
18571
+ cookie?: never;
18572
+ };
18573
+ requestBody?: never;
18574
+ responses: {
18575
+ /** @description Main App installation metadata. */
18576
+ 200: {
18577
+ headers: {
18578
+ [name: string]: unknown;
18579
+ };
18580
+ content: {
18581
+ "application/json": components["schemas"]["GhMainMetadataResponse"];
18582
+ };
18583
+ };
18584
+ /** @description Installation metadata was not found. */
18585
+ 404: {
18586
+ headers: {
18587
+ [name: string]: unknown;
18588
+ };
18589
+ content: {
18590
+ "application/json": components["schemas"]["ErrorResponse"];
18591
+ };
18592
+ };
18593
+ };
18594
+ };
17177
18595
  closePullRequest: {
17178
18596
  parameters: {
17179
18597
  query?: never;
@@ -17308,52 +18726,6 @@ export interface operations {
17308
18726
  };
17309
18727
  };
17310
18728
  };
17311
- receivePullRequestEvent: {
17312
- parameters: {
17313
- query?: never;
17314
- header?: never;
17315
- path?: never;
17316
- cookie?: never;
17317
- };
17318
- requestBody?: {
17319
- content: {
17320
- "application/json": {
17321
- /** @description Repository owner. */
17322
- repo_owner: string;
17323
- /** @description Repository name. */
17324
- repo_name: string;
17325
- /** @description PR head branch name, if any. */
17326
- branch_name: string | null;
17327
- /** @description Pull request number. */
17328
- pr_number: number;
17329
- /** @description Whether the PR was merged. */
17330
- merged: boolean;
17331
- /** @description PR state reported by GitHub. */
17332
- state: string;
17333
- };
17334
- };
17335
- };
17336
- responses: {
17337
- /** @description The webhook was applied. */
17338
- 200: {
17339
- headers: {
17340
- [name: string]: unknown;
17341
- };
17342
- content: {
17343
- "application/json": components["schemas"]["GithubPullRequestWebhookResponse"];
17344
- };
17345
- };
17346
- /** @description Invalid request. */
17347
- 400: {
17348
- headers: {
17349
- [name: string]: unknown;
17350
- };
17351
- content: {
17352
- "application/json": components["schemas"]["ErrorResponse"];
17353
- };
17354
- };
17355
- };
17356
- };
17357
18729
  receiveReporterGithubEvent: {
17358
18730
  parameters: {
17359
18731
  query?: never;
@@ -17364,10 +18736,7 @@ export interface operations {
17364
18736
  requestBody?: {
17365
18737
  content: {
17366
18738
  "application/json": {
17367
- event_type: string;
17368
- payload: {
17369
- [key: string]: unknown;
17370
- };
18739
+ [key: string]: unknown;
17371
18740
  };
17372
18741
  };
17373
18742
  };
@@ -18149,11 +19518,13 @@ export interface operations {
18149
19518
  currency: string;
18150
19519
  amount_in_cents: number;
18151
19520
  invoice_pdf_url?: string | null;
19521
+ /** Format: uri */
19522
+ payment_link?: string | null;
18152
19523
  send_status: string;
18153
19524
  paid_status: string;
18154
19525
  /** Format: date-time */
18155
19526
  paid_at?: string | null;
18156
- paid_proof_base64?: string | null;
19527
+ paid_minor?: number | null;
18157
19528
  line_items: {
18158
19529
  item_name: string;
18159
19530
  sub_item_name: string;
@@ -18256,11 +19627,13 @@ export interface operations {
18256
19627
  currency?: string;
18257
19628
  amount_in_cents?: number;
18258
19629
  invoice_pdf_url?: string | null;
19630
+ /** Format: uri */
19631
+ payment_link?: string | null;
18259
19632
  send_status?: string;
18260
19633
  paid_status?: string;
18261
19634
  /** Format: date-time */
18262
19635
  paid_at?: string | null;
18263
- paid_proof_base64?: string | null;
19636
+ paid_minor?: number | null;
18264
19637
  line_items?: {
18265
19638
  item_name: string;
18266
19639
  sub_item_name: string;
@@ -18445,7 +19818,7 @@ export interface operations {
18445
19818
  };
18446
19819
  };
18447
19820
  };
18448
- getInvoicePdfDownloadUrl: {
19821
+ setInvoicePaymentStatus: {
18449
19822
  parameters: {
18450
19823
  query?: never;
18451
19824
  header?: never;
@@ -18455,18 +19828,41 @@ export interface operations {
18455
19828
  };
18456
19829
  cookie?: never;
18457
19830
  };
18458
- requestBody?: never;
19831
+ requestBody?: {
19832
+ content: {
19833
+ "application/json": {
19834
+ /**
19835
+ * @description The reconciled payment status to mirror onto the invoice.
19836
+ * @enum {string}
19837
+ */
19838
+ status: "paid" | "partially_paid" | "outstanding";
19839
+ /**
19840
+ * Format: date-time
19841
+ * @description When the invoice was fully paid; null otherwise.
19842
+ */
19843
+ paid_at?: string | null;
19844
+ /** @description Σ of allocated credit amounts in minor units. */
19845
+ paid_minor?: number | null;
19846
+ /** @description Origin of the write, e.g. "fin-recon". */
19847
+ source: string;
19848
+ /** @description Match confidence in [0,1], if available. */
19849
+ confidence?: number;
19850
+ /** @description Bank credits (from fin) that settle this invoice. */
19851
+ credit_refs?: components["schemas"]["InvoiceCreditRef"][];
19852
+ };
19853
+ };
19854
+ };
18459
19855
  responses: {
18460
- /** @description The PDF download URL. */
19856
+ /** @description The mirrored invoice. */
18461
19857
  200: {
18462
19858
  headers: {
18463
19859
  [name: string]: unknown;
18464
19860
  };
18465
19861
  content: {
18466
- "application/json": components["schemas"]["InvoicePdfDownloadUrlResponse"];
19862
+ "application/json": components["schemas"]["InvoicePaymentStatusResponse"];
18467
19863
  };
18468
19864
  };
18469
- /** @description Invalid invoice id. */
19865
+ /** @description Invalid request. */
18470
19866
  400: {
18471
19867
  headers: {
18472
19868
  [name: string]: unknown;
@@ -18475,7 +19871,7 @@ export interface operations {
18475
19871
  "application/json": components["schemas"]["ErrorResponse"];
18476
19872
  };
18477
19873
  };
18478
- /** @description Invoice not found or has no PDF. */
19874
+ /** @description Invoice not found. */
18479
19875
  404: {
18480
19876
  headers: {
18481
19877
  [name: string]: unknown;
@@ -18486,7 +19882,7 @@ export interface operations {
18486
19882
  };
18487
19883
  };
18488
19884
  };
18489
- downloadInvoicePdf: {
19885
+ getInvoicePdfDownloadUrl: {
18490
19886
  parameters: {
18491
19887
  query?: never;
18492
19888
  header?: never;
@@ -18498,13 +19894,13 @@ export interface operations {
18498
19894
  };
18499
19895
  requestBody?: never;
18500
19896
  responses: {
18501
- /** @description The invoice PDF. */
19897
+ /** @description The PDF download URL. */
18502
19898
  200: {
18503
19899
  headers: {
18504
19900
  [name: string]: unknown;
18505
19901
  };
18506
19902
  content: {
18507
- "application/pdf": string;
19903
+ "application/json": components["schemas"]["InvoicePdfDownloadUrlResponse"];
18508
19904
  };
18509
19905
  };
18510
19906
  /** @description Invalid invoice id. */
@@ -18516,7 +19912,7 @@ export interface operations {
18516
19912
  "application/json": components["schemas"]["ErrorResponse"];
18517
19913
  };
18518
19914
  };
18519
- /** @description Invoice or its PDF not found. */
19915
+ /** @description Invoice not found or has no PDF. */
18520
19916
  404: {
18521
19917
  headers: {
18522
19918
  [name: string]: unknown;
@@ -18527,7 +19923,7 @@ export interface operations {
18527
19923
  };
18528
19924
  };
18529
19925
  };
18530
- sendInvoice: {
19926
+ downloadInvoicePdf: {
18531
19927
  parameters: {
18532
19928
  query?: never;
18533
19929
  header?: never;
@@ -18537,24 +19933,18 @@ export interface operations {
18537
19933
  };
18538
19934
  cookie?: never;
18539
19935
  };
18540
- requestBody?: {
18541
- content: {
18542
- "application/json": {
18543
- is_test_email?: boolean;
18544
- };
18545
- };
18546
- };
19936
+ requestBody?: never;
18547
19937
  responses: {
18548
- /** @description The invoice was sent. */
19938
+ /** @description The invoice PDF. */
18549
19939
  200: {
18550
19940
  headers: {
18551
19941
  [name: string]: unknown;
18552
19942
  };
18553
19943
  content: {
18554
- "application/json": components["schemas"]["SendInvoiceResponse"];
19944
+ "application/pdf": string;
18555
19945
  };
18556
19946
  };
18557
- /** @description Invalid request, missing PDF, missing org/billing emails, or no due date. */
19947
+ /** @description Invalid invoice id. */
18558
19948
  400: {
18559
19949
  headers: {
18560
19950
  [name: string]: unknown;
@@ -18563,7 +19953,7 @@ export interface operations {
18563
19953
  "application/json": components["schemas"]["ErrorResponse"];
18564
19954
  };
18565
19955
  };
18566
- /** @description Invoice not found. */
19956
+ /** @description Invoice or its PDF not found. */
18567
19957
  404: {
18568
19958
  headers: {
18569
19959
  [name: string]: unknown;
@@ -18574,12 +19964,12 @@ export interface operations {
18574
19964
  };
18575
19965
  };
18576
19966
  };
18577
- updateInvoiceCreditMapping: {
19967
+ sendInvoice: {
18578
19968
  parameters: {
18579
19969
  query?: never;
18580
19970
  header?: never;
18581
19971
  path: {
18582
- /** @description Credit ID. */
19972
+ /** @description Invoice ID. */
18583
19973
  id: string;
18584
19974
  };
18585
19975
  cookie?: never;
@@ -18587,24 +19977,21 @@ export interface operations {
18587
19977
  requestBody?: {
18588
19978
  content: {
18589
19979
  "application/json": {
18590
- invoice_id: number;
18591
- } | {
18592
- /** @enum {boolean} */
18593
- non_invoice: true;
19980
+ is_test_email?: boolean;
18594
19981
  };
18595
19982
  };
18596
19983
  };
18597
19984
  responses: {
18598
- /** @description The updated credit. */
19985
+ /** @description The invoice was sent. */
18599
19986
  200: {
18600
19987
  headers: {
18601
19988
  [name: string]: unknown;
18602
19989
  };
18603
19990
  content: {
18604
- "application/json": components["schemas"]["InvoiceCreditMappingResponse"];
19991
+ "application/json": components["schemas"]["SendInvoiceResponse"];
18605
19992
  };
18606
19993
  };
18607
- /** @description Invalid request or credit already mapped. */
19994
+ /** @description Invalid request, missing PDF, missing org/billing emails, or no due date. */
18608
19995
  400: {
18609
19996
  headers: {
18610
19997
  [name: string]: unknown;
@@ -18613,7 +20000,7 @@ export interface operations {
18613
20000
  "application/json": components["schemas"]["ErrorResponse"];
18614
20001
  };
18615
20002
  };
18616
- /** @description Credit, invoice, or organisation not found. */
20003
+ /** @description Invoice not found. */
18617
20004
  404: {
18618
20005
  headers: {
18619
20006
  [name: string]: unknown;
@@ -18624,51 +20011,29 @@ export interface operations {
18624
20011
  };
18625
20012
  };
18626
20013
  };
18627
- listUnmappedCredits: {
20014
+ listUpcomingInvoiceReminders: {
18628
20015
  parameters: {
18629
- query?: never;
18630
- header?: never;
18631
- path?: never;
18632
- cookie?: never;
18633
- };
18634
- requestBody?: never;
18635
- responses: {
18636
- /** @description Unmapped credits and their count. */
18637
- 200: {
18638
- headers: {
18639
- [name: string]: unknown;
18640
- };
18641
- content: {
18642
- "application/json": components["schemas"]["InvoiceUnmappedCreditsResponse"];
18643
- };
20016
+ query?: {
20017
+ /** @description Number of upcoming days to preview. Default 7. */
20018
+ window_days?: string;
20019
+ /** @description Page number (1-indexed). Default 1. */
20020
+ page?: string;
20021
+ /** @description Items per page. Default 50. */
20022
+ per_page?: string;
18644
20023
  };
18645
- };
18646
- };
18647
- processInvoiceStatus: {
18648
- parameters: {
18649
- query?: never;
18650
20024
  header?: never;
18651
20025
  path?: never;
18652
20026
  cookie?: never;
18653
20027
  };
18654
20028
  requestBody?: never;
18655
20029
  responses: {
18656
- /** @description Reconciliation outcome. */
20030
+ /** @description Paginated upcoming invoice reminders. */
18657
20031
  200: {
18658
20032
  headers: {
18659
20033
  [name: string]: unknown;
18660
20034
  };
18661
20035
  content: {
18662
- "application/json": components["schemas"]["InvoiceStatusResponse"];
18663
- };
18664
- };
18665
- /** @description Missing or invalid bank statement. */
18666
- 400: {
18667
- headers: {
18668
- [name: string]: unknown;
18669
- };
18670
- content: {
18671
- "application/json": components["schemas"]["ErrorResponse"];
20036
+ "application/json": components["schemas"]["UpcomingInvoiceRemindersResponse"];
18672
20037
  };
18673
20038
  };
18674
20039
  };
@@ -19353,6 +20718,238 @@ export interface operations {
19353
20718
  };
19354
20719
  };
19355
20720
  };
20721
+ listMemories: {
20722
+ parameters: {
20723
+ query?: {
20724
+ /** @description Page number (1-indexed). */
20725
+ page?: number;
20726
+ /** @description Items per page (max 100). */
20727
+ per_page?: number;
20728
+ /** @description Filter to memories with this exact name. */
20729
+ name?: string;
20730
+ /** @description When `true`, soft-deleted memories are included in the listing (marked via `deleted_at`). Defaults to `false`. */
20731
+ include_deleted?: "true" | "false";
20732
+ /** @description When `false`, each memory's `content` is returned as an empty string (skipped for a smaller/faster response). Use for name+description index views. Defaults to `true`. */
20733
+ include_content?: "true" | "false";
20734
+ };
20735
+ header?: never;
20736
+ path?: never;
20737
+ cookie?: never;
20738
+ };
20739
+ requestBody?: never;
20740
+ responses: {
20741
+ /** @description The page of memories. */
20742
+ 200: {
20743
+ headers: {
20744
+ [name: string]: unknown;
20745
+ };
20746
+ content: {
20747
+ "application/json": components["schemas"]["MemoryListResponse"];
20748
+ };
20749
+ };
20750
+ /** @description Invalid request or missing project scope. */
20751
+ 400: {
20752
+ headers: {
20753
+ [name: string]: unknown;
20754
+ };
20755
+ content: {
20756
+ "application/json": components["schemas"]["ErrorResponse"];
20757
+ };
20758
+ };
20759
+ /** @description Project not found or not accessible. */
20760
+ 404: {
20761
+ headers: {
20762
+ [name: string]: unknown;
20763
+ };
20764
+ content: {
20765
+ "application/json": components["schemas"]["ErrorResponse"];
20766
+ };
20767
+ };
20768
+ };
20769
+ };
20770
+ createMemory: {
20771
+ parameters: {
20772
+ query?: never;
20773
+ header?: never;
20774
+ path?: never;
20775
+ cookie?: never;
20776
+ };
20777
+ requestBody?: {
20778
+ content: {
20779
+ "application/json": components["schemas"]["CreateMemoryRequest"];
20780
+ };
20781
+ };
20782
+ responses: {
20783
+ /** @description The created memory. */
20784
+ 200: {
20785
+ headers: {
20786
+ [name: string]: unknown;
20787
+ };
20788
+ content: {
20789
+ "application/json": components["schemas"]["MemoryResponse"];
20790
+ };
20791
+ };
20792
+ /** @description Invalid request or missing project scope. */
20793
+ 400: {
20794
+ headers: {
20795
+ [name: string]: unknown;
20796
+ };
20797
+ content: {
20798
+ "application/json": components["schemas"]["ErrorResponse"];
20799
+ };
20800
+ };
20801
+ /** @description Project not found or not accessible. */
20802
+ 404: {
20803
+ headers: {
20804
+ [name: string]: unknown;
20805
+ };
20806
+ content: {
20807
+ "application/json": components["schemas"]["ErrorResponse"];
20808
+ };
20809
+ };
20810
+ /** @description A memory with this source_path already exists. */
20811
+ 409: {
20812
+ headers: {
20813
+ [name: string]: unknown;
20814
+ };
20815
+ content: {
20816
+ "application/json": components["schemas"]["ErrorResponse"];
20817
+ };
20818
+ };
20819
+ };
20820
+ };
20821
+ getMemory: {
20822
+ parameters: {
20823
+ query?: never;
20824
+ header?: never;
20825
+ path: {
20826
+ /** @description Memory ID. */
20827
+ id: number;
20828
+ };
20829
+ cookie?: never;
20830
+ };
20831
+ requestBody?: never;
20832
+ responses: {
20833
+ /** @description The memory. */
20834
+ 200: {
20835
+ headers: {
20836
+ [name: string]: unknown;
20837
+ };
20838
+ content: {
20839
+ "application/json": components["schemas"]["MemoryResponse"];
20840
+ };
20841
+ };
20842
+ /** @description Memory not found or not accessible. */
20843
+ 404: {
20844
+ headers: {
20845
+ [name: string]: unknown;
20846
+ };
20847
+ content: {
20848
+ "application/json": components["schemas"]["ErrorResponse"];
20849
+ };
20850
+ };
20851
+ };
20852
+ };
20853
+ deleteMemory: {
20854
+ parameters: {
20855
+ query?: never;
20856
+ header?: never;
20857
+ path: {
20858
+ /** @description Memory ID. */
20859
+ id: number;
20860
+ };
20861
+ cookie?: never;
20862
+ };
20863
+ requestBody?: never;
20864
+ responses: {
20865
+ /** @description Deletion succeeded. */
20866
+ 200: {
20867
+ headers: {
20868
+ [name: string]: unknown;
20869
+ };
20870
+ content: {
20871
+ "application/json": components["schemas"]["MemoryDeleteResponse"];
20872
+ };
20873
+ };
20874
+ /** @description Memory not found or not accessible. */
20875
+ 404: {
20876
+ headers: {
20877
+ [name: string]: unknown;
20878
+ };
20879
+ content: {
20880
+ "application/json": components["schemas"]["ErrorResponse"];
20881
+ };
20882
+ };
20883
+ };
20884
+ };
20885
+ updateMemory: {
20886
+ parameters: {
20887
+ query?: never;
20888
+ header?: never;
20889
+ path: {
20890
+ /** @description Memory ID. */
20891
+ id: number;
20892
+ };
20893
+ cookie?: never;
20894
+ };
20895
+ requestBody?: {
20896
+ content: {
20897
+ "application/json": components["schemas"]["UpdateMemoryRequest"];
20898
+ };
20899
+ };
20900
+ responses: {
20901
+ /** @description The updated memory. */
20902
+ 200: {
20903
+ headers: {
20904
+ [name: string]: unknown;
20905
+ };
20906
+ content: {
20907
+ "application/json": components["schemas"]["MemoryResponse"];
20908
+ };
20909
+ };
20910
+ /** @description Memory not found or not accessible. */
20911
+ 404: {
20912
+ headers: {
20913
+ [name: string]: unknown;
20914
+ };
20915
+ content: {
20916
+ "application/json": components["schemas"]["ErrorResponse"];
20917
+ };
20918
+ };
20919
+ };
20920
+ };
20921
+ listMemoryVersions: {
20922
+ parameters: {
20923
+ query?: never;
20924
+ header?: never;
20925
+ path: {
20926
+ /** @description Memory ID. */
20927
+ id: number;
20928
+ };
20929
+ cookie?: never;
20930
+ };
20931
+ requestBody?: never;
20932
+ responses: {
20933
+ /** @description The memory's versions. */
20934
+ 200: {
20935
+ headers: {
20936
+ [name: string]: unknown;
20937
+ };
20938
+ content: {
20939
+ "application/json": components["schemas"]["MemoryVersionListResponse"];
20940
+ };
20941
+ };
20942
+ /** @description Memory not found or not accessible. */
20943
+ 404: {
20944
+ headers: {
20945
+ [name: string]: unknown;
20946
+ };
20947
+ content: {
20948
+ "application/json": components["schemas"]["ErrorResponse"];
20949
+ };
20950
+ };
20951
+ };
20952
+ };
19356
20953
  getProjectMetricsLast7Days: {
19357
20954
  parameters: {
19358
20955
  query?: never;