@empiricalrun/playwright-utils 0.63.2 → 0.64.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.
@@ -286,7 +286,7 @@ export interface paths {
286
286
  put?: never;
287
287
  /**
288
288
  * ⚙️ Store a test run's run manifest
289
- * @description Stores the run manifest (scheduled tests) the run worker computed, keyed by the external run_id, and enqueues expected-duration enrichment.
289
+ * @description Stores the run manifest (scheduled tests) the run worker computed, keyed by the external run_id.
290
290
  */
291
291
  post: operations["createTestRunManifest"];
292
292
  delete?: never;
@@ -444,7 +444,7 @@ export interface paths {
444
444
  };
445
445
  /**
446
446
  * ⚙️ 🧪 Get test case durations for shard planning
447
- * @description Returns the run's project's 7-day average duration per test case, keyed by the normalized 41-char Playwright test id, addressed by the run's external run_id. Used by the `run_setup` container to pack a shard plan: the analytics token is account-scoped and cannot be handed to a sandbox running customer test code, so the api-worker holds it and serves the numbers. Project-wide rather than per-run — the container filters to the tests it listed. A project with no history returns an empty object; a broken analytics query returns 503, so the container can tell the two apart and fall back rather than plan off nothing.
447
+ * @description Returns the run's project's 7-day and last-day average duration per test case (skipped results excluded), keyed by the normalized 41-char Playwright test id, addressed by the run's external run_id. Used by the `run_setup` container to pack a shard plan: the analytics token is account-scoped and cannot be handed to a sandbox running customer test code, so the api-worker holds it and serves the numbers. Project-wide rather than per-run — the container filters to the tests it listed. A project with no history returns an empty object; a broken analytics query returns 503, so the container can tell the two apart and fall back rather than plan off nothing.
448
448
  */
449
449
  get: operations["getTestRunTestCaseDurations"];
450
450
  put?: never;
@@ -1178,6 +1178,30 @@ export interface paths {
1178
1178
  patch?: never;
1179
1179
  trace?: never;
1180
1180
  };
1181
+ "/api/slack/messages/{channel}/{ts}": {
1182
+ parameters: {
1183
+ query?: never;
1184
+ header?: never;
1185
+ path?: never;
1186
+ cookie?: never;
1187
+ };
1188
+ get?: never;
1189
+ put?: never;
1190
+ post?: never;
1191
+ /**
1192
+ * 🤖 Delete a Slack message
1193
+ * @description Deletes a message the calling project's agent posted with POST /api/slack/messages. Deleting a thread root leaves its replies in place under Slack's deleted-message placeholder. Sandbox-delegated principals only.
1194
+ */
1195
+ delete: operations["slackDeleteMessage"];
1196
+ options?: never;
1197
+ head?: never;
1198
+ /**
1199
+ * 🤖 Edit a Slack message
1200
+ * @description Replaces the Markdown and buttons of a message the calling project's agent posted with POST /api/slack/messages. Messages whose input buttons were already selected cannot be edited. Channel-wide mentions are rejected. Sandbox-delegated principals only.
1201
+ */
1202
+ patch: operations["slackUpdateMessage"];
1203
+ trace?: never;
1204
+ };
1181
1205
  "/api/slack/proxy": {
1182
1206
  parameters: {
1183
1207
  query?: never;
@@ -1720,7 +1744,7 @@ export interface paths {
1720
1744
  put?: never;
1721
1745
  /**
1722
1746
  * 🧪 Create a task
1723
- * @description Creates a task for the scoped project and, for non-draft tasks, spawns a chat session for the agent.
1747
+ * @description Creates a task for the scoped project. Every task is owed to a person: `created_by` defaults to the signed-in user or, for an agent, the person who started its session. An agent acting for someone else, such as the person who asked in Slack, passes their user ID as `created_by`. Track your own follow-ups elsewhere; a task with no person behind it is rejected. It does not start a chat session; use `POST /api/tasks/{id}/chat-sessions` for that.
1724
1748
  */
1725
1749
  post: operations["createTask"];
1726
1750
  delete?: never;
@@ -2223,6 +2247,26 @@ export interface paths {
2223
2247
  patch?: never;
2224
2248
  trace?: never;
2225
2249
  };
2250
+ "/api/activity": {
2251
+ parameters: {
2252
+ query?: never;
2253
+ header?: never;
2254
+ path?: never;
2255
+ cookie?: never;
2256
+ };
2257
+ /**
2258
+ * ⚙️ 🧪 List project activity
2259
+ * @description The scoped project's activity grouped by local day, newest first. Each day has a summary of its test runs and a list of sessions, pull requests, tasks and failure groups. A session appears once, at its latest state, with its pull request folded in.
2260
+ */
2261
+ get: operations["listActivity"];
2262
+ put?: never;
2263
+ post?: never;
2264
+ delete?: never;
2265
+ options?: never;
2266
+ head?: never;
2267
+ patch?: never;
2268
+ trace?: never;
2269
+ };
2226
2270
  "/api/alarms": {
2227
2271
  parameters: {
2228
2272
  query?: never;
@@ -2507,7 +2551,7 @@ export interface paths {
2507
2551
  put?: never;
2508
2552
  /**
2509
2553
  * ⚙️ Create a chat session
2510
- * @description Creates a chat session in the scoped project for a Hive agent (`agent`, default `main`) and delivers its first message (awaited, so the 201 means the message landed). An agent or version Hive does not serve is rejected with a 400 before anything is created.
2554
+ * @description Creates a chat session in the scoped project for a Hive agent (`agent`, default `main`) and delivers its first message (awaited, so the 201 means the message landed). An agent or version Hive does not serve is rejected with a 400, and an organization that billing blocks with a 402, before anything is created.
2511
2555
  */
2512
2556
  post: operations["createChatSession"];
2513
2557
  delete?: never;
@@ -2680,6 +2724,26 @@ export interface paths {
2680
2724
  patch?: never;
2681
2725
  trace?: never;
2682
2726
  };
2727
+ "/api/chat-sessions/{id}/entries": {
2728
+ parameters: {
2729
+ query?: never;
2730
+ header?: never;
2731
+ path?: never;
2732
+ cookie?: never;
2733
+ };
2734
+ /**
2735
+ * ⚙️ 🧪 Get session log entries by log_seq range
2736
+ * @description Returns the full log entries (tool arguments, results and media refs) between two log_seq values, for expanding a transcript row.
2737
+ */
2738
+ get: operations["getChatSessionEntryRange"];
2739
+ put?: never;
2740
+ post?: never;
2741
+ delete?: never;
2742
+ options?: never;
2743
+ head?: never;
2744
+ patch?: never;
2745
+ trace?: never;
2746
+ };
2683
2747
  "/api/chat-sessions/{id}/entries/{entry_id}/media/{media_index}": {
2684
2748
  parameters: {
2685
2749
  query?: never;
@@ -2894,6 +2958,46 @@ export interface paths {
2894
2958
  patch?: never;
2895
2959
  trace?: never;
2896
2960
  };
2961
+ "/api/chat-sessions/{id}/subagents": {
2962
+ parameters: {
2963
+ query?: never;
2964
+ header?: never;
2965
+ path?: never;
2966
+ cookie?: never;
2967
+ };
2968
+ /**
2969
+ * ⚙️ 🧪 Get a session's subagents
2970
+ * @description Returns each subagent's own log entries: the call that started it, its result, start, end and async-end entries, and only its latest message.
2971
+ */
2972
+ get: operations["getChatSessionSubagents"];
2973
+ put?: never;
2974
+ post?: never;
2975
+ delete?: never;
2976
+ options?: never;
2977
+ head?: never;
2978
+ patch?: never;
2979
+ trace?: never;
2980
+ };
2981
+ "/api/chat-sessions/{id}/subagents/{tool_call_id}/entries": {
2982
+ parameters: {
2983
+ query?: never;
2984
+ header?: never;
2985
+ path?: never;
2986
+ cookie?: never;
2987
+ };
2988
+ /**
2989
+ * ⚙️ 🧪 Get one subagent's log entries
2990
+ * @description Returns every log entry of one subagent, including all of its messages.
2991
+ */
2992
+ get: operations["getChatSessionSubagentEntries"];
2993
+ put?: never;
2994
+ post?: never;
2995
+ delete?: never;
2996
+ options?: never;
2997
+ head?: never;
2998
+ patch?: never;
2999
+ trace?: never;
3000
+ };
2897
3001
  "/api/chat-sessions/{id}/subscribe": {
2898
3002
  parameters: {
2899
3003
  query?: never;
@@ -2934,6 +3038,26 @@ export interface paths {
2934
3038
  patch?: never;
2935
3039
  trace?: never;
2936
3040
  };
3041
+ "/api/chat-sessions/{id}/transcript": {
3042
+ parameters: {
3043
+ query?: never;
3044
+ header?: never;
3045
+ path?: never;
3046
+ cookie?: never;
3047
+ };
3048
+ /**
3049
+ * ⚙️ 🧪 Get a session's transcript rows
3050
+ * @description Returns the whole session as display rows (messages, condensed tool runs, cards), each with the log_seq range it covers. Tool arguments and results are not included; read them from the entries in a row's seq range.
3051
+ */
3052
+ get: operations["getChatSessionTranscript"];
3053
+ put?: never;
3054
+ post?: never;
3055
+ delete?: never;
3056
+ options?: never;
3057
+ head?: never;
3058
+ patch?: never;
3059
+ trace?: never;
3060
+ };
2937
3061
  "/api/chat-sessions/sandbox/branches": {
2938
3062
  parameters: {
2939
3063
  query?: never;
@@ -2994,6 +3118,74 @@ export interface paths {
2994
3118
  patch?: never;
2995
3119
  trace?: never;
2996
3120
  };
3121
+ "/api/credit-grants": {
3122
+ parameters: {
3123
+ query?: never;
3124
+ header?: never;
3125
+ path?: never;
3126
+ cookie?: never;
3127
+ };
3128
+ /**
3129
+ * 🛡️ List an organisation's credit grants
3130
+ * @description Returns the organisation's credit grants with what each has left, and the trial balance.
3131
+ */
3132
+ get: operations["listCreditGrants"];
3133
+ put?: never;
3134
+ /**
3135
+ * 🛡️ Grant trial credit to an organisation
3136
+ * @description Grants credit that the organisation's test runs and AI usage draw from. An organisation with no plan is started on `plan_id` as a trial that ends when the credit expires; a trial organisation's plan is extended to the latest expiry. Organisations on any other plan are refused.
3137
+ */
3138
+ post: operations["createCreditGrant"];
3139
+ delete?: never;
3140
+ options?: never;
3141
+ head?: never;
3142
+ patch?: never;
3143
+ trace?: never;
3144
+ };
3145
+ "/api/credit-offers": {
3146
+ parameters: {
3147
+ query?: never;
3148
+ header?: never;
3149
+ path?: never;
3150
+ cookie?: never;
3151
+ };
3152
+ /**
3153
+ * 🛡️ List credit offers
3154
+ * @description Returns every credit offer with its status, newest first.
3155
+ */
3156
+ get: operations["listCreditOffers"];
3157
+ put?: never;
3158
+ /**
3159
+ * 🛡️ Offer trial credit to an email, an email domain or all work domains
3160
+ * @description Reserves trial credit for a person who has no organisation yet. When someone the offer covers creates an organisation, it is granted the credit for `duration_days` on `plan_id`. An email or domain offer is claimed once, and an email or domain has at most one open offer. A `work_domains` offer stays open and grants once per work email domain, to callers with no email or domain offer; at most one is open.
3161
+ */
3162
+ post: operations["createCreditOffer"];
3163
+ delete?: never;
3164
+ options?: never;
3165
+ head?: never;
3166
+ patch?: never;
3167
+ trace?: never;
3168
+ };
3169
+ "/api/credit-offers/{id}": {
3170
+ parameters: {
3171
+ query?: never;
3172
+ header?: never;
3173
+ path?: never;
3174
+ cookie?: never;
3175
+ };
3176
+ get?: never;
3177
+ put?: never;
3178
+ post?: never;
3179
+ /**
3180
+ * 🛡️ Revoke a credit offer
3181
+ * @description Revokes an open offer so creating an organisation no longer claims it. Claimed offers can't be revoked; their credit is a grant on the organisation. Revoking a `work_domains` offer keeps the grants it already made.
3182
+ */
3183
+ delete: operations["revokeCreditOffer"];
3184
+ options?: never;
3185
+ head?: never;
3186
+ patch?: never;
3187
+ trace?: never;
3188
+ };
2997
3189
  "/api/dodo/webhook": {
2998
3190
  parameters: {
2999
3191
  query?: never;
@@ -3338,6 +3530,26 @@ export interface paths {
3338
3530
  patch?: never;
3339
3531
  trace?: never;
3340
3532
  };
3533
+ "/api/github/pr/impacted-tests": {
3534
+ parameters: {
3535
+ query?: never;
3536
+ header?: never;
3537
+ path?: never;
3538
+ cookie?: never;
3539
+ };
3540
+ /**
3541
+ * ⚙️ 🧪 Get impacted tests for a pull request
3542
+ * @description Returns the tests impacted by the pull request's diff against its merge base. Computed on every head push; the first read of an unseen pull request queues the computation and returns status `pending`.
3543
+ */
3544
+ get: operations["getPullRequestImpactedTests"];
3545
+ put?: never;
3546
+ post?: never;
3547
+ delete?: never;
3548
+ options?: never;
3549
+ head?: never;
3550
+ patch?: never;
3551
+ trace?: never;
3552
+ };
3341
3553
  "/api/github/pr/merge": {
3342
3554
  parameters: {
3343
3555
  query?: never;
@@ -3642,6 +3854,26 @@ export interface paths {
3642
3854
  patch?: never;
3643
3855
  trace?: never;
3644
3856
  };
3857
+ "/api/internal/fixture-emails/login": {
3858
+ parameters: {
3859
+ query?: never;
3860
+ header?: never;
3861
+ path?: never;
3862
+ cookie?: never;
3863
+ };
3864
+ get?: never;
3865
+ put?: never;
3866
+ /**
3867
+ * ⚙️ Send a fixture app login email
3868
+ * @description Sends a login code and magic link for a fixture app (such as magic-link-app) used by e2e tests. Recipients outside @empiricalrun.email are rejected.
3869
+ */
3870
+ post: operations["sendFixtureLoginEmail"];
3871
+ delete?: never;
3872
+ options?: never;
3873
+ head?: never;
3874
+ patch?: never;
3875
+ trace?: never;
3876
+ };
3645
3877
  "/api/internal/request-ingestion/jira/webhook": {
3646
3878
  parameters: {
3647
3879
  query?: never;
@@ -3722,6 +3954,26 @@ export interface paths {
3722
3954
  patch?: never;
3723
3955
  trace?: never;
3724
3956
  };
3957
+ "/api/internal/seed/chat-sessions": {
3958
+ parameters: {
3959
+ query?: never;
3960
+ header?: never;
3961
+ path?: never;
3962
+ cookie?: never;
3963
+ };
3964
+ get?: never;
3965
+ put?: never;
3966
+ /**
3967
+ * ⚙️ 🧪 Seed a chat session with messages (preview only)
3968
+ * @description Creates a chat session in the scoped project whose history is the given messages, without starting an agent turn or checking billing. For e2e tests that need an ongoing session, such as the in-session billing block. Returns 404 outside preview and local.
3969
+ */
3970
+ post: operations["seedChatSession"];
3971
+ delete?: never;
3972
+ options?: never;
3973
+ head?: never;
3974
+ patch?: never;
3975
+ trace?: never;
3976
+ };
3725
3977
  "/api/internal/service-tokens": {
3726
3978
  parameters: {
3727
3979
  query?: never;
@@ -4538,7 +4790,7 @@ export interface paths {
4538
4790
  patch?: never;
4539
4791
  trace?: never;
4540
4792
  };
4541
- "/api/metrics/project-last-7-days": {
4793
+ "/api/notifications": {
4542
4794
  parameters: {
4543
4795
  query?: never;
4544
4796
  header?: never;
@@ -4546,10 +4798,10 @@ export interface paths {
4546
4798
  cookie?: never;
4547
4799
  };
4548
4800
  /**
4549
- * ⚙️ Project metrics (last 7 days)
4550
- * @description Returns test-authoring activity metrics for the scoped project over the last 7 days: sessions created/merged, tests added/modified, and the most recently added/modified tests.
4801
+ * List my notifications
4802
+ * @description Returns the signed-in user's unread notifications and their most recent read ones, limited to projects they can still access.
4551
4803
  */
4552
- get: operations["getProjectMetricsLast7Days"];
4804
+ get: operations["listNotifications"];
4553
4805
  put?: never;
4554
4806
  post?: never;
4555
4807
  delete?: never;
@@ -4558,27 +4810,27 @@ export interface paths {
4558
4810
  patch?: never;
4559
4811
  trace?: never;
4560
4812
  };
4561
- "/api/notifications": {
4813
+ "/api/notifications/{id}/read": {
4562
4814
  parameters: {
4563
4815
  query?: never;
4564
4816
  header?: never;
4565
4817
  path?: never;
4566
4818
  cookie?: never;
4567
4819
  };
4820
+ get?: never;
4821
+ put?: never;
4568
4822
  /**
4569
- * List my notifications
4570
- * @description Returns the signed-in user's unread notifications and their most recent read ones, limited to projects they can still access.
4823
+ * Mark a notification read
4824
+ * @description Marks one of the signed-in user's notifications as read.
4571
4825
  */
4572
- get: operations["listNotifications"];
4573
- put?: never;
4574
- post?: never;
4826
+ post: operations["markNotificationRead"];
4575
4827
  delete?: never;
4576
4828
  options?: never;
4577
4829
  head?: never;
4578
4830
  patch?: never;
4579
4831
  trace?: never;
4580
4832
  };
4581
- "/api/notifications/{id}/read": {
4833
+ "/api/notifications/dummy": {
4582
4834
  parameters: {
4583
4835
  query?: never;
4584
4836
  header?: never;
@@ -4588,10 +4840,10 @@ export interface paths {
4588
4840
  get?: never;
4589
4841
  put?: never;
4590
4842
  /**
4591
- * Mark a notification read
4592
- * @description Marks one of the signed-in user's notifications as read.
4843
+ * 🧪 Create a dummy notification (non-production only)
4844
+ * @description Creates an unread notification for the signed-in user about the project's latest chat session or test run, and pushes it on the user's realtime channel. Not available in production.
4593
4845
  */
4594
- post: operations["markNotificationRead"];
4846
+ post: operations["createDummyNotification"];
4595
4847
  delete?: never;
4596
4848
  options?: never;
4597
4849
  head?: never;
@@ -4658,46 +4910,6 @@ export interface paths {
4658
4910
  patch?: never;
4659
4911
  trace?: never;
4660
4912
  };
4661
- "/api/onboarding/complete": {
4662
- parameters: {
4663
- query?: never;
4664
- header?: never;
4665
- path?: never;
4666
- cookie?: never;
4667
- };
4668
- get?: never;
4669
- put?: never;
4670
- /**
4671
- * Create an org and/or a project
4672
- * @description With `org_name`, creates a new organisation, adds the caller as a member, then creates the project. With `org_id`, creates the project in an organisation the caller already belongs to. Either way provisions the project's (empty) GitHub repo in the Empirical org.
4673
- */
4674
- post: operations["completeOnboarding"];
4675
- delete?: never;
4676
- options?: never;
4677
- head?: never;
4678
- patch?: never;
4679
- trace?: never;
4680
- };
4681
- "/api/onboarding/context": {
4682
- parameters: {
4683
- query?: never;
4684
- header?: never;
4685
- path?: never;
4686
- cookie?: never;
4687
- };
4688
- /**
4689
- * Get onboarding context
4690
- * @description Returns the caller's pending invites and whether their email domain can be offered for auto-join.
4691
- */
4692
- get: operations["getOnboardingContext"];
4693
- put?: never;
4694
- post?: never;
4695
- delete?: never;
4696
- options?: never;
4697
- head?: never;
4698
- patch?: never;
4699
- trace?: never;
4700
- };
4701
4913
  "/api/order-forms": {
4702
4914
  parameters: {
4703
4915
  query?: never;
@@ -4799,7 +5011,11 @@ export interface paths {
4799
5011
  */
4800
5012
  get: operations["listOrgs"];
4801
5013
  put?: never;
4802
- post?: never;
5014
+ /**
5015
+ * Create an organization
5016
+ * @description Creates an organization and adds the caller as its first member. If a credit offer is open for the caller's email or email domain, the organization claims it and starts a trial with that credit. Otherwise a caller with a work email gets the open offer for work email domains, once per domain. Create projects in it with `POST /api/projects`.
5017
+ */
5018
+ post: operations["createOrg"];
4803
5019
  delete?: never;
4804
5020
  options?: never;
4805
5021
  head?: never;
@@ -4965,7 +5181,7 @@ export interface paths {
4965
5181
  put?: never;
4966
5182
  /**
4967
5183
  * 🛡️ Create a plan assignment
4968
- * @description Puts an existing organisation on a plan from `effective_from`.
5184
+ * @description Puts an existing organisation on a plan from `effective_from`. A trial the organisation is on ends then, with its credit.
4969
5185
  */
4970
5186
  post: operations["createPlanAssignment"];
4971
5187
  delete?: never;
@@ -5033,7 +5249,7 @@ export interface paths {
5033
5249
  put?: never;
5034
5250
  /**
5035
5251
  * 🛡️ Create a shared plan
5036
- * @description Creates a shared plan and its meters. Plans are immutable once created, apart from `status`: to change a price, create a new plan with a new key and retire the old one. Custom plans are created through order forms.
5252
+ * @description Creates a shared plan and its meters. With `dodo_sync` and no `dodo_product_id`, its Dodo product is created (or an existing one for the key is linked) in the same request; if that fails, nothing is saved. Plans are immutable once created, apart from `name`, `status` and `dodo_sync`: to change a price, create a new plan with a new key and retire the old one. Custom plans are created through order forms.
5037
5253
  */
5038
5254
  post: operations["createPlan"];
5039
5255
  delete?: never;
@@ -5060,8 +5276,8 @@ export interface paths {
5060
5276
  options?: never;
5061
5277
  head?: never;
5062
5278
  /**
5063
- * 🛡️ Update a plan's status
5064
- * @description Sets a plan's `status`. Plans are immutable apart from status: any other field is rejected. Retiring a plan does not touch existing assignments, which stay on it.
5279
+ * 🛡️ Update a plan's name, status or Dodo sync
5280
+ * @description Sets a plan's `name`, `status` or `dodo_sync`. Plans are immutable apart from these: any other field is rejected. None of them touches existing assignments, which stay on the plan. A new name is applied to the plan's Dodo product first, and turning `dodo_sync` on creates the product if there is none; if Dodo refuses either, nothing changes.
5065
5281
  */
5066
5282
  patch: operations["updatePlan"];
5067
5283
  trace?: never;
@@ -5629,16 +5845,11 @@ export interface paths {
5629
5845
  path?: never;
5630
5846
  cookie?: never;
5631
5847
  };
5632
- /**
5633
- * ⚙️ Issue an unscoped realtime token (deprecated)
5634
- * @deprecated
5635
- * @description Deprecated: use `POST /api/realtime/token`, which scopes the token to the channels the caller may read. Mints a short-lived token (1 hour TTL) the caller uses to open the realtime-worker WebSocket channel.
5636
- */
5637
- get: operations["getRealtimeToken"];
5848
+ get?: never;
5638
5849
  put?: never;
5639
5850
  /**
5640
5851
  * ⚙️ Issue a channel-scoped realtime token
5641
- * @description Mints a short-lived token (1 hour TTL) that opens only the requested realtime-worker WebSocket channels the caller may read: project channels for projects the caller can access, test-run channels for runs in those projects. Inaccessible or unknown channels are left out of the token; if none remain the request is refused.
5852
+ * @description Mints a short-lived token (1 hour TTL) that opens only the requested realtime-worker WebSocket channels the caller may read: project channels for projects the caller can access, test-run channels for runs in those projects, and the signed-in user's own user channel. Inaccessible or unknown channels are left out of the token; if none remain the request is refused.
5642
5853
  */
5643
5854
  post: operations["createRealtimeToken"];
5644
5855
  delete?: never;
@@ -6081,7 +6292,7 @@ export interface paths {
6081
6292
  patch?: never;
6082
6293
  trace?: never;
6083
6294
  };
6084
- "/api/test-runs/shards": {
6295
+ "/api/test-runs/events/begin": {
6085
6296
  parameters: {
6086
6297
  query?: never;
6087
6298
  header?: never;
@@ -6089,7 +6300,27 @@ export interface paths {
6089
6300
  cookie?: never;
6090
6301
  };
6091
6302
  get?: never;
6092
- put?: never;
6303
+ /**
6304
+ * ⚙️ Ingest a test-case run-begin event
6305
+ * @description Records when a test attempt starts on the runner, so the run manifest shows in-flight tests and how long they have been running. Sent by EmpiricalReporter in packages/playwright-utils.
6306
+ */
6307
+ put: operations["ingestTestCaseRunBeginEvent"];
6308
+ post?: never;
6309
+ delete?: never;
6310
+ options?: never;
6311
+ head?: never;
6312
+ patch?: never;
6313
+ trace?: never;
6314
+ };
6315
+ "/api/test-runs/shards": {
6316
+ parameters: {
6317
+ query?: never;
6318
+ header?: never;
6319
+ path?: never;
6320
+ cookie?: never;
6321
+ };
6322
+ get?: never;
6323
+ put?: never;
6093
6324
  /**
6094
6325
  * ⚙️ Update a shard's state
6095
6326
  * @description Records a shard state transition from the test-run worker: shard write plus terminal guard, parent start on first shard start, resume dispatch for interrupted shards, merge orchestration once all shards complete, and parent finalization plus report ingestion when the merge job ends.
@@ -6161,46 +6392,6 @@ export interface paths {
6161
6392
  patch?: never;
6162
6393
  trace?: never;
6163
6394
  };
6164
- "/api/upload": {
6165
- parameters: {
6166
- query?: never;
6167
- header?: never;
6168
- path?: never;
6169
- cookie?: never;
6170
- };
6171
- get?: never;
6172
- put?: never;
6173
- /**
6174
- * ⚙️ Create presigned upload URLs
6175
- * @description Generates S3-style presigned PUT URLs for uploading files directly to an R2 bucket. Each uploading client must send the same Content-Type used here.
6176
- */
6177
- post: operations["createUploadUrls"];
6178
- delete?: never;
6179
- options?: never;
6180
- head?: never;
6181
- patch?: never;
6182
- trace?: never;
6183
- };
6184
- "/api/upload/loom": {
6185
- parameters: {
6186
- query?: never;
6187
- header?: never;
6188
- path?: never;
6189
- cookie?: never;
6190
- };
6191
- get?: never;
6192
- put?: never;
6193
- /**
6194
- * ⚙️ Import a Loom video
6195
- * @description Downloads a Loom share video and stores it in the dashboard uploads bucket, returning its public URL.
6196
- */
6197
- post: operations["uploadLoomVideo"];
6198
- delete?: never;
6199
- options?: never;
6200
- head?: never;
6201
- patch?: never;
6202
- trace?: never;
6203
- };
6204
6395
  "/api/users/github-link": {
6205
6396
  parameters: {
6206
6397
  query?: never;
@@ -6293,6 +6484,26 @@ export interface paths {
6293
6484
  patch?: never;
6294
6485
  trace?: never;
6295
6486
  };
6487
+ "/api/users/me/onboarding": {
6488
+ parameters: {
6489
+ query?: never;
6490
+ header?: never;
6491
+ path?: never;
6492
+ cookie?: never;
6493
+ };
6494
+ /**
6495
+ * Get my onboarding checklist
6496
+ * @description The steps to get a user from sign-up to a merged first test and Slack, with each step's status worked out from data. Each item's `action` says how to do it: an API call (with the inputs to ask the user for) or a browser URL. Call it, do `next_item_id`, and call it again. Pass `-p <slug>` (`x-project-slug`) once a project exists.
6497
+ */
6498
+ get: operations["getMyOnboarding"];
6499
+ put?: never;
6500
+ post?: never;
6501
+ delete?: never;
6502
+ options?: never;
6503
+ head?: never;
6504
+ patch?: never;
6505
+ trace?: never;
6506
+ };
6296
6507
  "/api/users/slack-link": {
6297
6508
  parameters: {
6298
6509
  query?: never;
@@ -6463,6 +6674,128 @@ export interface components {
6463
6674
  acked_at: string;
6464
6675
  };
6465
6676
  };
6677
+ ActivityDay: {
6678
+ /** @description Local date, YYYY-MM-DD. */
6679
+ date: string;
6680
+ /** @description Every test run of the day, summarized. */
6681
+ test_runs: {
6682
+ count: number;
6683
+ outcomes: {
6684
+ running: number;
6685
+ failed: number;
6686
+ errored: number;
6687
+ interrupted: number;
6688
+ passed: number;
6689
+ cancelled: number;
6690
+ ended: number;
6691
+ };
6692
+ /** @description The latest run's time. */
6693
+ occurred_at: string;
6694
+ /** @description The earliest run's time. */
6695
+ since: string;
6696
+ locations: {
6697
+ branch: string;
6698
+ environment: string | null;
6699
+ count: number;
6700
+ outcomes: {
6701
+ running: number;
6702
+ failed: number;
6703
+ errored: number;
6704
+ interrupted: number;
6705
+ passed: number;
6706
+ cancelled: number;
6707
+ ended: number;
6708
+ };
6709
+ }[];
6710
+ } | null;
6711
+ items: components["schemas"]["ActivityItem"][];
6712
+ };
6713
+ ActivityItem: {
6714
+ id: string;
6715
+ occurred_at: string;
6716
+ actor: {
6717
+ id: string;
6718
+ name: string;
6719
+ picture: string | null;
6720
+ } | null;
6721
+ /** @enum {string} */
6722
+ kind: "chat_session";
6723
+ /**
6724
+ * @description The session's latest state: started, closed, or what happened to its pull request.
6725
+ * @enum {string}
6726
+ */
6727
+ action: "created" | "closed" | "pr_opened" | "pr_reopened" | "pr_merged" | "pr_closed";
6728
+ chat_session: {
6729
+ id: number;
6730
+ title: string | null;
6731
+ };
6732
+ pull_request: {
6733
+ number: number;
6734
+ url: string | null;
6735
+ } | null;
6736
+ } | {
6737
+ id: string;
6738
+ occurred_at: string;
6739
+ actor: {
6740
+ id: string;
6741
+ name: string;
6742
+ picture: string | null;
6743
+ } | null;
6744
+ /** @enum {string} */
6745
+ kind: "pull_request";
6746
+ /** @enum {string} */
6747
+ action: "opened" | "reopened" | "closed" | "merged";
6748
+ pull_request: {
6749
+ number: number;
6750
+ url: string | null;
6751
+ repo: string;
6752
+ head_branch: string;
6753
+ };
6754
+ } | {
6755
+ id: string;
6756
+ occurred_at: string;
6757
+ actor: {
6758
+ id: string;
6759
+ name: string;
6760
+ picture: string | null;
6761
+ } | null;
6762
+ /** @enum {string} */
6763
+ kind: "task";
6764
+ /** @enum {string} */
6765
+ action: "created";
6766
+ task: {
6767
+ id: number;
6768
+ title: string;
6769
+ source: string;
6770
+ status: string;
6771
+ };
6772
+ } | {
6773
+ id: string;
6774
+ occurred_at: string;
6775
+ actor: {
6776
+ id: string;
6777
+ name: string;
6778
+ picture: string | null;
6779
+ } | null;
6780
+ /** @enum {string} */
6781
+ kind: "failure_group";
6782
+ /** @enum {string} */
6783
+ action: "created";
6784
+ failure_group: {
6785
+ id: string;
6786
+ label: string;
6787
+ type: string;
6788
+ status: string;
6789
+ };
6790
+ };
6791
+ ActivityResponse: {
6792
+ /** @description Response payload. */
6793
+ data: {
6794
+ days: components["schemas"]["ActivityDay"][];
6795
+ /** @description Pass as `before` to load older days. */
6796
+ next_cursor: string | null;
6797
+ };
6798
+ };
6466
6799
  AddSnoozeTestCasesRequest: {
6467
6800
  /** @description Playwright test IDs to add to the snooze. */
6468
6801
  test_ids: string[];
@@ -6747,6 +7080,7 @@ export interface components {
6747
7080
  used: number;
6748
7081
  /** @description Projected units at month end (trailing 7-day pace); null when too early to project. */
6749
7082
  projected: number | null;
7083
+ /** @description Usage beyond the allowance, priced at the overage rate. On a trial, credits pay for it. */
6750
7084
  overage_cents: number;
6751
7085
  projected_overage_cents: number | null;
6752
7086
  };
@@ -6772,6 +7106,8 @@ export interface components {
6772
7106
  name: string;
6773
7107
  currency: string;
6774
7108
  base_price_cents: number;
7109
+ /** @description Whether the org is on a trial, where usage draws from credits instead of being billed. */
7110
+ trial: boolean;
6775
7111
  } | null;
6776
7112
  meters: components["schemas"]["BillingMeterSummary"][];
6777
7113
  projects: {
@@ -6781,8 +7117,20 @@ export interface components {
6781
7117
  ai_credits: number;
6782
7118
  test_minutes: number;
6783
7119
  }[];
7120
+ /** @description Overage billed on top of the plan so far. 0 on a trial, where credits pay for usage. */
6784
7121
  overage_cents: number;
6785
7122
  projected_overage_cents: number | null;
7123
+ /** @description The trial's credit, for the current period of an org on a trial; null otherwise. */
7124
+ credits: {
7125
+ /** @description Total credit granted to the org, in US cents. */
7126
+ granted_cents: number;
7127
+ /** @description Credit used so far, in US cents. */
7128
+ used_cents: number;
7129
+ /** @description Credit left on grants active now, in US cents. The trial ends at 0. */
7130
+ balance_cents: number;
7131
+ /** @description When the last active grant expires (ISO 8601); null when none is active. */
7132
+ expires_at: string | null;
7133
+ } | null;
6786
7134
  /** @description Overage of the previous usage period, as a guide when picking a limit. Current period only. */
6787
7135
  last_month_overage_cents: number | null;
6788
7136
  usage_limit: components["schemas"]["UsageLimit"];
@@ -6844,8 +7192,6 @@ export interface components {
6844
7192
  purpose?: "triage" | "manager" | null;
6845
7193
  /** @description Requested model. */
6846
7194
  model: string | null;
6847
- /** @description Opaque agent chat state. */
6848
- chat_state?: unknown;
6849
7195
  /** @description Tests impacted by this session. */
6850
7196
  impacted_tests: {
6851
7197
  test_case: {
@@ -7034,6 +7380,15 @@ export interface components {
7034
7380
  head_ref?: string;
7035
7381
  };
7036
7382
  };
7383
+ ChatSessionEntryRange: {
7384
+ /** @description Session log entries in log_seq order. */
7385
+ entries: unknown[];
7386
+ /** @description from_seq for the next page when the range holds more than `limit` entries, else null. */
7387
+ next_from_seq: number | null;
7388
+ };
7389
+ ChatSessionEntryRangeResponse: {
7390
+ data: components["schemas"]["ChatSessionEntryRange"];
7391
+ };
7037
7392
  ChatSessionForwardMessageResponse: {
7038
7393
  /** @description Response payload. */
7039
7394
  data: {
@@ -7135,6 +7490,21 @@ export interface components {
7135
7490
  chat_session: components["schemas"]["ChatSession"];
7136
7491
  };
7137
7492
  };
7493
+ ChatSessionSeedRequest: {
7494
+ /** @description Hive agent recorded on the session, as `<name>` or `<name>@<version>`. Defaults to `main`. */
7495
+ agent?: string | null;
7496
+ messages: {
7497
+ /** @enum {string} */
7498
+ role: "user" | "assistant";
7499
+ text: string;
7500
+ }[];
7501
+ };
7502
+ ChatSessionSeedResponse: {
7503
+ /** @description Response payload. */
7504
+ data: {
7505
+ chat_session: components["schemas"]["ChatSession"];
7506
+ };
7507
+ };
7138
7508
  ChatSessionSnapshot: {
7139
7509
  /** @description Current sandbox status event. */
7140
7510
  sandbox?: unknown;
@@ -7158,6 +7528,24 @@ export interface components {
7158
7528
  data: components["schemas"]["ChatSessionState"];
7159
7529
  pagination: components["schemas"]["Pagination"];
7160
7530
  };
7531
+ ChatSessionSubagentEntries: {
7532
+ /** @description Session log entries in log_seq order. */
7533
+ entries: unknown[];
7534
+ };
7535
+ ChatSessionSubagentEntriesResponse: {
7536
+ data: components["schemas"]["ChatSessionSubagentEntries"];
7537
+ };
7538
+ ChatSessionSubagents: {
7539
+ subagents: {
7540
+ /** @description Tool call that started the subagent. */
7541
+ tool_call_id: string;
7542
+ /** @description Session log entries in log_seq order. */
7543
+ entries: unknown[];
7544
+ }[];
7545
+ };
7546
+ ChatSessionSubagentsResponse: {
7547
+ data: components["schemas"]["ChatSessionSubagents"];
7548
+ };
7161
7549
  ChatSessionTimelineEvent: {
7162
7550
  /** @description Timeline event ID. */
7163
7551
  id: number;
@@ -7190,6 +7578,9 @@ export interface components {
7190
7578
  /** @description Response payload. */
7191
7579
  data: components["schemas"]["ChatSessionTimelineEvent"][];
7192
7580
  };
7581
+ ChatSessionTranscriptResponse: {
7582
+ data: components["schemas"]["SessionTranscript"];
7583
+ };
7193
7584
  ChatSessionUserDetail: {
7194
7585
  /** @description Supabase user ID. */
7195
7586
  id: string;
@@ -7226,8 +7617,6 @@ export interface components {
7226
7617
  purpose?: "triage" | "manager" | null;
7227
7618
  /** @description Requested model. */
7228
7619
  model: string | null;
7229
- /** @description Opaque agent chat state. */
7230
- chat_state?: unknown;
7231
7620
  /** @description Tests impacted by this session. */
7232
7621
  impacted_tests: {
7233
7622
  test_case: {
@@ -7375,6 +7764,60 @@ export interface components {
7375
7764
  /** @description Human-readable name for the API key. */
7376
7765
  name: string;
7377
7766
  };
7767
+ CreateCreditGrantRequest: {
7768
+ /** @description Organisation to grant credit to. */
7769
+ org_id: number;
7770
+ /** @description Credit to grant, in US cents (5000 = $50). */
7771
+ amount_cents: number;
7772
+ /**
7773
+ * Format: date-time
7774
+ * @description When the credit expires. The trial plan is extended to this time if it ends earlier.
7775
+ */
7776
+ expires_at: string | null;
7777
+ /** @description Lowercase slug that groups grants for comparison, e.g. `admin_trial`, `high_risk_trial`, `trial_extension`. */
7778
+ campaign: string;
7779
+ /** @description Free-text note on why the credit is granted. */
7780
+ reason?: string;
7781
+ /** @description Trial plan to start the organisation on. Required when it has no trial; omit it when extending one. */
7782
+ plan_id?: number;
7783
+ };
7784
+ CreateCreditOfferRequest: {
7785
+ /**
7786
+ * Format: email
7787
+ * @description Email to reserve the credit for. Pass exactly one of `email`, `email_domain` and `all_work_domains`.
7788
+ */
7789
+ email?: string;
7790
+ /** @description Work email domain to reserve the credit for, e.g. `acme.com`. Public providers like gmail.com are refused. */
7791
+ email_domain?: string;
7792
+ /**
7793
+ * @description Offer the credit to the first organisation created at every work email domain that hasn't had a trial. One such offer can be open at a time.
7794
+ * @enum {boolean}
7795
+ */
7796
+ all_work_domains?: true;
7797
+ /** @description Credit to grant, in US cents (5000 = $50). */
7798
+ amount_cents: number;
7799
+ /** @description Days the credit lasts, counted from the claim. */
7800
+ duration_days: number;
7801
+ /** @description Trial plan to start the organisation on. */
7802
+ plan_id: number;
7803
+ /** @description Lowercase slug the resulting grant is recorded under, e.g. `admin_trial`. */
7804
+ campaign: string;
7805
+ /** @description Free-text note on why the offer is made. */
7806
+ reason?: string;
7807
+ /**
7808
+ * Format: date-time
7809
+ * @description Deadline to claim the offer. Omit for no deadline.
7810
+ */
7811
+ claim_by?: string | null;
7812
+ };
7813
+ CreateDummyNotificationBody: {
7814
+ project_id: number;
7815
+ /**
7816
+ * @default chat_session_waiting
7817
+ * @enum {string}
7818
+ */
7819
+ kind: "chat_session_waiting" | "test_run";
7820
+ };
7378
7821
  CreateEnvironmentRequest: {
7379
7822
  /** @description Display name. */
7380
7823
  name: string;
@@ -7614,8 +8057,10 @@ export interface components {
7614
8057
  currency?: "usd" | "inr" | "aed";
7615
8058
  /** @description Monthly base price in cents of `currency`. */
7616
8059
  base_price_cents: number;
7617
- /** @description Dodo product that bills this plan by subscription, in this environment's Dodo mode. New Dodo checkouts use the newest active plan that has one. */
8060
+ /** @description Dodo product that bills this plan by subscription, in this environment's Dodo mode. New Dodo checkouts use the newest active `dodo_sync` plan that has one. */
7618
8061
  dodo_product_id?: string;
8062
+ /** @description Sell the plan through Dodo: its Dodo product is created now if `dodo_product_id` is unset, and it is offered at checkout. Defaults to `false`. */
8063
+ dodo_sync?: boolean;
7619
8064
  /**
7620
8065
  * @description Metered allowances, in display order.
7621
8066
  * @default []
@@ -7671,7 +8116,7 @@ export interface components {
7671
8116
  };
7672
8117
  };
7673
8118
  CreateRealtimeTokenBody: {
7674
- /** @description Channel names to subscribe to, e.g. `chat-sessions-project-<id>-<env>` or `test-run-<id>-<env>`. */
8119
+ /** @description Channel names to subscribe to, e.g. `chat-sessions-project-<id>-<env>`, `test-run-<id>-<env>` or `user-<user uuid>-<env>`. */
7675
8120
  channels: string[];
7676
8121
  };
7677
8122
  CreateSandboxSnapshotRequest: {
@@ -7741,48 +8186,17 @@ export interface components {
7741
8186
  /** @description Identifier of the task in its source system. */
7742
8187
  source_identifier: string;
7743
8188
  /**
7744
- * @description Initial status; defaults to `open`. A `draft` task does not start an agent session.
8189
+ * @description Initial status; defaults to `open`.
7745
8190
  * @enum {string}
7746
8191
  */
7747
8192
  status?: "draft" | "open" | "in-review" | "closed" | "resolved";
8193
+ /** @description User ID of the person the task is for. Defaults to the signed-in user, or to the person who started the calling agent's session. Pass it when acting for someone else; there must be a person. */
8194
+ created_by?: string;
7748
8195
  };
7749
8196
  CreateTaskResponse: {
7750
8197
  /** @description Response payload. */
7751
8198
  data: {
7752
8199
  task: components["schemas"]["Task"];
7753
- /** @description Chat session created for non-draft tasks, else null. */
7754
- session: {
7755
- /** @description Chat session ID. */
7756
- id: number;
7757
- /** @description Session title, if generated. */
7758
- title: string | null;
7759
- /** @description Supabase user ID of the creator. */
7760
- created_by: string | null;
7761
- /** @description ISO 8601 creation timestamp. */
7762
- created_at: string;
7763
- /** @description ISO 8601 last-update timestamp. */
7764
- updated_at: string;
7765
- /** @description Project ID. */
7766
- project_id: number;
7767
- /** @description Session mode (e.g. `chat`). */
7768
- mode: string;
7769
- /** @description Model used for the session. */
7770
- model: string | null;
7771
- /** @description Opaque agent chat state. */
7772
- chat_state?: unknown;
7773
- /** @description Tests impacted by the session. */
7774
- impacted_tests: unknown[];
7775
- /** @description Whether the agent is awaiting user input. */
7776
- ask_user_for_input: boolean | null;
7777
- /** @description Langfuse trace ID for observability. */
7778
- langfuse_trace_id: string | null;
7779
- /** @description Whether the session is closed. */
7780
- is_closed: boolean;
7781
- /** @description Feature flags active for this session. */
7782
- feature_flags: string[];
7783
- /** @description Outboxed first message awaiting delivery. */
7784
- pending_first_message?: unknown;
7785
- } | null;
7786
8200
  };
7787
8201
  };
7788
8202
  CreateTestRunResponse: {
@@ -7861,15 +8275,6 @@ export interface components {
7861
8275
  };
7862
8276
  };
7863
8277
  };
7864
- CreateUploadUrlsResponse: {
7865
- /** @description Response payload. */
7866
- data: {
7867
- /** @description One presigned upload URL per requested file. */
7868
- presigned_urls: components["schemas"]["PresignedUploadUrl"][];
7869
- };
7870
- /** @description Always null on success. */
7871
- error: unknown;
7872
- };
7873
8278
  CreateWebhookRequest: {
7874
8279
  /**
7875
8280
  * Format: uri
@@ -7943,6 +8348,103 @@ export interface components {
7943
8348
  /** @description Signing secret (returned only on creation). */
7944
8349
  secret: string;
7945
8350
  };
8351
+ CreditGrant: {
8352
+ /** @description Credit grant ID. */
8353
+ id: number;
8354
+ /** @description Organisation the credit was granted to. */
8355
+ org_id: number;
8356
+ /** @description Credit granted, in US cents. */
8357
+ amount_cents: number;
8358
+ /** @description ISO-8601 timestamp the credit starts. */
8359
+ starts_at: string;
8360
+ /** @description ISO-8601 timestamp the credit expires. */
8361
+ expires_at: string;
8362
+ /** @description Slug that groups grants for comparison, e.g. `admin_trial` or `trial_extension`. */
8363
+ campaign: string;
8364
+ /** @description Free-text note on why the credit was granted. */
8365
+ reason: string | null;
8366
+ /** @description ID of the user or service that granted it. */
8367
+ granted_by: string | null;
8368
+ /** @description Usage taken from this grant, in US cents; null when the organisation isn't on a trial. */
8369
+ used_cents: number | null;
8370
+ /** @description Credit left on this grant, in US cents; null when the organisation isn't on a trial. */
8371
+ remaining_cents: number | null;
8372
+ /** @description ISO-8601 creation timestamp. */
8373
+ created_at: string;
8374
+ };
8375
+ CreditGrantListResponse: {
8376
+ /** @description Response payload. */
8377
+ data: {
8378
+ /** @description The organisation's grants, oldest first. */
8379
+ credit_grants: components["schemas"]["CreditGrant"][];
8380
+ /** @description Credit left on grants active now, in US cents; null when the organisation isn't on a trial. */
8381
+ balance_cents: number | null;
8382
+ /** @description Trial usage beyond every grant, in US cents; null when the organisation isn't on a trial. */
8383
+ uncovered_cents: number | null;
8384
+ };
8385
+ };
8386
+ CreditGrantResponse: {
8387
+ /** @description Response payload. */
8388
+ data: {
8389
+ credit_grant: components["schemas"]["CreditGrant"];
8390
+ /** @description ISO-8601 timestamp the organisation's trial plan now ends, or null for open-ended. */
8391
+ trial_ends_at: string | null;
8392
+ };
8393
+ };
8394
+ CreditOffer: {
8395
+ /** @description Credit offer ID. */
8396
+ id: number;
8397
+ audience: components["schemas"]["CreditOfferAudience"];
8398
+ /** @description Email the offer is for; null unless `audience` is `email`. */
8399
+ email: string | null;
8400
+ /** @description Email domain the offer is for; null unless `audience` is `email_domain`. The first organisation created by anyone at the domain claims it. */
8401
+ email_domain: string | null;
8402
+ /** @description Credit to grant, in US cents. */
8403
+ amount_cents: number;
8404
+ /** @description Days the credit lasts, counted from the claim. */
8405
+ duration_days: number;
8406
+ /** @description Trial plan the organisation starts on. */
8407
+ plan_id: number;
8408
+ /** @description Campaign slug the resulting grant is recorded under. */
8409
+ campaign: string;
8410
+ /** @description Free-text note on why the offer was made. */
8411
+ reason: string | null;
8412
+ /** @description ISO-8601 timestamp after which the offer can't be claimed, or null for no deadline. */
8413
+ claim_by: string | null;
8414
+ status: components["schemas"]["CreditOfferStatus"];
8415
+ /** @description ID of the user or service that made the offer. */
8416
+ created_by: string | null;
8417
+ /** @description ISO-8601 creation timestamp. */
8418
+ created_at: string;
8419
+ /** @description ISO-8601 timestamp the offer was revoked. */
8420
+ revoked_at: string | null;
8421
+ /** @description ISO-8601 timestamp the offer was claimed. A `work_domains` offer is never claimed; each grant it makes links back to it. */
8422
+ claimed_at: string | null;
8423
+ /** @description Organisation that claimed the offer. */
8424
+ claimed_org_id: number | null;
8425
+ /** @description Credit grant created by the claim. */
8426
+ claimed_grant_id: number | null;
8427
+ };
8428
+ /**
8429
+ * @description Who the offer covers: one `email`, one `email_domain`, or `work_domains`, every email domain that isn't a public provider and hasn't had a trial yet.
8430
+ * @enum {string}
8431
+ */
8432
+ CreditOfferAudience: "email" | "email_domain" | "work_domains";
8433
+ CreditOfferListResponse: {
8434
+ /** @description Response payload. */
8435
+ data: {
8436
+ /** @description All credit offers, newest first. */
8437
+ credit_offers: components["schemas"]["CreditOffer"][];
8438
+ };
8439
+ };
8440
+ CreditOfferResponse: {
8441
+ /** @description Response payload. */
8442
+ data: {
8443
+ credit_offer: components["schemas"]["CreditOffer"];
8444
+ };
8445
+ };
8446
+ /** @enum {string} */
8447
+ CreditOfferStatus: "open" | "claimed" | "revoked" | "expired";
7946
8448
  CurrentUserResponse: {
7947
8449
  /** @description Response payload. */
7948
8450
  data: {
@@ -8066,7 +8568,10 @@ export interface components {
8066
8568
  } | {
8067
8569
  /** @enum {string} */
8068
8570
  kind: "no_billing_plan";
8069
- params: Record<string, never>;
8571
+ params: {
8572
+ /** @description Whether the org's last plan was a trial that has ended. */
8573
+ trial_ended: boolean;
8574
+ };
8070
8575
  /** @description Higher shows first; the dashboard shows one at a time. */
8071
8576
  priority: number;
8072
8577
  /** @description Null when the banner can't be dismissed. */
@@ -8148,6 +8653,12 @@ export interface components {
8148
8653
  /** @description Acknowledgement. */
8149
8654
  message: string;
8150
8655
  };
8656
+ DummyNotificationResponse: {
8657
+ /** @description Response payload. */
8658
+ data: {
8659
+ id: number;
8660
+ };
8661
+ };
8151
8662
  EmpiricalOrgInvoice: {
8152
8663
  /**
8153
8664
  * @description An invoice we issued (order-form billing). (enum property replaced by openapi-typescript)
@@ -8732,6 +9243,27 @@ export interface components {
8732
9243
  };
8733
9244
  }[];
8734
9245
  } | null;
9246
+ FixtureLoginEmailRequest: {
9247
+ /**
9248
+ * Format: email
9249
+ * @description Recipient; must be an @empiricalrun.email address.
9250
+ */
9251
+ to: string;
9252
+ /** @description Six-digit login code. */
9253
+ code: string;
9254
+ /**
9255
+ * Format: uri
9256
+ * @description Magic link that signs the recipient in.
9257
+ */
9258
+ link: string;
9259
+ };
9260
+ FixtureLoginEmailResponse: {
9261
+ /** @description Response payload. */
9262
+ data: {
9263
+ /** @description Resend email id. */
9264
+ email_id: string;
9265
+ };
9266
+ };
8735
9267
  FlagsResponse: {
8736
9268
  /** @description Response payload. */
8737
9269
  data: {
@@ -9195,25 +9727,64 @@ export interface components {
9195
9727
  };
9196
9728
  error: unknown;
9197
9729
  };
9198
- GithubPrMergeResponse: {
9199
- data: {
9200
- /** @description Whether the PR was merged. */
9201
- merged: boolean;
9202
- /** @description Human-readable status. */
9203
- message: string;
9204
- };
9205
- error: unknown;
9206
- };
9207
- GithubPrMergeabilityResponse: {
9730
+ GithubPrImpactedTestsResponse: {
9731
+ /** @description Response payload. */
9208
9732
  data: {
9209
9733
  /**
9210
- * @description Computed mergeability status.
9734
+ * @description Computation state for the current head commit.
9211
9735
  * @enum {string}
9212
9736
  */
9213
- status: "not_open" | "mergeable" | "not_mergeable" | "calculating";
9214
- /** @description GitHub's mergeable_state value. */
9215
- mergeable_state: string;
9216
- /** @description Whether the PR is a draft. */
9737
+ status: "pending" | "completed" | "failed";
9738
+ /** @description Pull request head commit the result belongs to. */
9739
+ head_sha: string;
9740
+ /** @description Tests impacted by the pull request diff. */
9741
+ impacted_tests: {
9742
+ test_case: {
9743
+ name: string;
9744
+ suites: string[];
9745
+ file_path: string;
9746
+ start_line: number;
9747
+ end_line: number;
9748
+ };
9749
+ /** @enum {string} */
9750
+ type: "added" | "removed" | "modified";
9751
+ modified_by: {
9752
+ file_path: string;
9753
+ line: {
9754
+ number: number;
9755
+ /** @enum {string} */
9756
+ type: "added" | "removed" | "modified";
9757
+ };
9758
+ }[] | null;
9759
+ }[] | null;
9760
+ /** @description Failure reason when status is failed. */
9761
+ error: string | null;
9762
+ /**
9763
+ * Format: date-time
9764
+ * @description When the result last changed.
9765
+ */
9766
+ updated_at: string;
9767
+ };
9768
+ };
9769
+ GithubPrMergeResponse: {
9770
+ data: {
9771
+ /** @description Whether the PR was merged. */
9772
+ merged: boolean;
9773
+ /** @description Human-readable status. */
9774
+ message: string;
9775
+ };
9776
+ error: unknown;
9777
+ };
9778
+ GithubPrMergeabilityResponse: {
9779
+ data: {
9780
+ /**
9781
+ * @description Computed mergeability status.
9782
+ * @enum {string}
9783
+ */
9784
+ status: "not_open" | "mergeable" | "not_mergeable" | "calculating";
9785
+ /** @description GitHub's mergeable_state value. */
9786
+ mergeable_state: string;
9787
+ /** @description Whether the PR is a draft. */
9217
9788
  draft: boolean;
9218
9789
  /** @description Base branch of the PR. */
9219
9790
  base: string;
@@ -9990,17 +10561,6 @@ export interface components {
9990
10561
  /** @description ID of the run that supersedes this one, if any. */
9991
10562
  superseded_by_test_run_id: number | null;
9992
10563
  };
9993
- LoomUploadResponse: {
9994
- /** @description Response payload. */
9995
- data: {
9996
- /** @description Public URL of the uploaded video in R2. */
9997
- url: string;
9998
- /** @description Stored file name (`loom-<id>.<ext>`). */
9999
- name: string;
10000
- };
10001
- /** @description Always null on success. */
10002
- error: unknown;
10003
- };
10004
10564
  MarkAnnouncementsSeenRequest: {
10005
10565
  /**
10006
10566
  * Format: date-time
@@ -10348,16 +10908,6 @@ export interface components {
10348
10908
  data: components["schemas"]["MergeRequest"][];
10349
10909
  pagination: components["schemas"]["Pagination"];
10350
10910
  };
10351
- MetricsImpactedTestSummary: {
10352
- /** @description Name of the impacted Playwright test. */
10353
- testName: string;
10354
- /** @description File path of the impacted test. */
10355
- filePath: string;
10356
- /** @description ID of the chat session whose merged PR changed this test. */
10357
- sessionId: number;
10358
- /** @description ISO 8601 timestamp the session was last updated. */
10359
- updatedAt: string;
10360
- };
10361
10911
  Notification: {
10362
10912
  id: number;
10363
10913
  /** @enum {string} */
@@ -10397,61 +10947,126 @@ export interface components {
10397
10947
  updated: number;
10398
10948
  };
10399
10949
  };
10400
- OnboardingCompleteRequest: {
10401
- /** @description Existing organisation to add the project to. */
10402
- org_id?: number;
10403
- /** @description Name of a new organisation to create. */
10404
- org_name?: string;
10405
- /** @description When creating a new org, let anyone with the caller's (non-public) email domain auto-join it on sign-in. The domain is derived server-side from the caller's verified email; it is never accepted as input. Ignored when `org_id` is given. */
10406
- allow_domain_join?: boolean;
10407
- /** @description Display name of the project. */
10408
- project_name: string;
10409
- /** @description URL slug for the project. */
10410
- project_slug: string;
10411
- };
10412
- OnboardingCompleteResponse: {
10950
+ OnboardingChecklistResponse: {
10413
10951
  /** @description Response payload. */
10414
10952
  data: {
10415
- org: {
10416
- /** @description Organisation ID. */
10953
+ email: string;
10954
+ email_domain: string;
10955
+ /** @description Whether a new org may claim the caller's email domain for auto-join. */
10956
+ domain_join_available: boolean;
10957
+ invites: {
10417
10958
  id: number;
10418
- /** @description Organisation name. */
10419
- name: string;
10420
- /** @description Auto-join email domains on the org. */
10421
- email_domains: string[];
10422
- };
10959
+ org_id: number;
10960
+ org_name: string;
10961
+ }[];
10962
+ /** @description Trial credit the org they create will get: an offer for the caller's email or email domain, else the offer for work email domains that haven't had a trial. `null` once they belong to an org or when no offer applies. */
10963
+ credit_offer: {
10964
+ /** @description Trial credit, in US cents. */
10965
+ amount_cents: number;
10966
+ /** @description Days the credit lasts, counted from org creation. */
10967
+ duration_days: number;
10968
+ } | null;
10969
+ /** @description Why the org they create gets no trial credit while there is a work email domains offer: `public_email` (a work email would get it) or `domain_trial_used` (ask a teammate for an invite). `null` when `credit_offer` is set, once they belong to an org, or when there's no work email domains offer. */
10970
+ credit_unavailable: ({
10971
+ /** @enum {string} */
10972
+ reason: "public_email";
10973
+ /** @description Trial credit a work email would get, in US cents. */
10974
+ amount_cents: number;
10975
+ /** @description Days that credit lasts. */
10976
+ duration_days: number;
10977
+ } | {
10978
+ /** @enum {string} */
10979
+ reason: "domain_trial_used";
10980
+ /** @description Work email domain that already had a trial. */
10981
+ domain: string;
10982
+ }) | null;
10983
+ /** @description Why `project`'s organization can't start agent sessions, from its billing; `null` when it can or without a `project`. While set, `first_test` points at the billing page. */
10984
+ sessions_blocked: {
10985
+ /** @enum {string} */
10986
+ reason: "overdue_invoice" | "subscription_on_hold" | "no_active_plan" | "spend_cap_reached";
10987
+ message: string;
10988
+ } | null;
10989
+ /** @description Project the project items describe: the one in `x-project-slug` / `x-project-id`, or the caller's only project. */
10423
10990
  project: {
10424
- /** @description Project ID. */
10425
10991
  id: number;
10426
- /** @description Project name. */
10992
+ slug: string;
10427
10993
  name: string;
10428
- /** @description Project slug. */
10994
+ org_id: number;
10995
+ } | null;
10996
+ /** @description The caller's projects. With more than one, pass a project header to get project items. */
10997
+ projects: {
10998
+ id: number;
10429
10999
  slug: string;
10430
- /** @description Backing repository name. */
10431
- repo_name: string;
10432
- };
10433
- /** @description Whether the GitHub repo was created. When false the project exists but repo provisioning failed and needs a retry. */
10434
- repo_created: boolean;
11000
+ }[];
11001
+ /** @description `null` without a `project`. */
11002
+ slack: {
11003
+ /** @description Slack workspaces the project's org installed the Empirical app in. */
11004
+ workspaces: {
11005
+ team_id: string;
11006
+ team_name: string;
11007
+ }[];
11008
+ /** @description Channels registered to the project's org, by mentioning @Empirical in them. */
11009
+ channels: {
11010
+ id: number;
11011
+ name: string | null;
11012
+ team_name: string | null;
11013
+ }[];
11014
+ } | null;
11015
+ /**
11016
+ * @description First required item still to do; `null` when onboarded.
11017
+ * @enum {string|null}
11018
+ */
11019
+ next_item_id: "create_org" | "create_project" | "first_test" | "connect_slack" | null;
11020
+ /** @description Listed in the order to do them. */
11021
+ items: components["schemas"]["OnboardingItem"][];
10435
11022
  };
10436
11023
  };
10437
- OnboardingContextResponse: {
10438
- /** @description Response payload. */
10439
- data: {
10440
- invites: {
10441
- /** @description Invite ID. */
10442
- id: number;
10443
- /** @description Organisation ID. */
10444
- org_id: number;
10445
- /** @description Organisation name. */
10446
- org_name: string;
11024
+ OnboardingItem: {
11025
+ /** @enum {string} */
11026
+ id: "create_org" | "create_project" | "first_test" | "connect_slack";
11027
+ /** @enum {string} */
11028
+ scope: "account" | "org" | "project";
11029
+ title: string;
11030
+ description: string;
11031
+ /**
11032
+ * @description Worked out from data. `blocked` until every `depends_on` item is done.
11033
+ * @enum {string}
11034
+ */
11035
+ status: "done" | "todo" | "blocked";
11036
+ /** @description Optional items can be skipped or dismissed. */
11037
+ required: boolean;
11038
+ depends_on: ("create_org" | "create_project" | "first_test" | "connect_slack")[];
11039
+ /** @description How to do the item now; `null` when done or blocked. */
11040
+ action: ({
11041
+ /** @enum {string} */
11042
+ kind: "api";
11043
+ /** @description OpenAPI operation to call; read its body schema from `GET /api/endpoints`. */
11044
+ operation_id: string;
11045
+ /** @enum {string} */
11046
+ method: "POST";
11047
+ path: string;
11048
+ headers?: {
11049
+ [key: string]: string;
11050
+ };
11051
+ body_example: {
11052
+ [key: string]: unknown;
11053
+ };
11054
+ inputs: {
11055
+ /** @description Field to ask the user for. */
11056
+ name: string;
11057
+ /** @description What to ask. */
11058
+ description: string;
11059
+ required: boolean;
11060
+ /** @description Sample answers to show the user. */
11061
+ examples?: string[];
10447
11062
  }[];
10448
- /** @description The caller's verified email. */
10449
- email: string;
10450
- /** @description Domain of the caller's email (may be empty). */
10451
- email_domain: string;
10452
- /** @description Whether the caller's email domain can be offered for auto-join (false for public providers like gmail.com). */
10453
- domain_join_available: boolean;
10454
- };
11063
+ } | {
11064
+ /** @enum {string} */
11065
+ kind: "browser";
11066
+ url: string;
11067
+ /** @description Why this needs a person. */
11068
+ reason: string;
11069
+ }) | null;
10455
11070
  };
10456
11071
  OrderFormLine: {
10457
11072
  /** @description Order form line ID. */
@@ -10566,6 +11181,25 @@ export interface components {
10566
11181
  /** @description Pricing lines on the order form. */
10567
11182
  lines: components["schemas"]["OrderFormLine"][];
10568
11183
  };
11184
+ OrgCreateRequest: {
11185
+ /** @description Organization display name. */
11186
+ name: string;
11187
+ /** @description Let anyone with the caller's (non-public) email domain auto-join the org on sign-in. The domain is derived server-side from the caller's verified email; it is never accepted as input. Ignored when another org already claims the domain. */
11188
+ allow_domain_join?: boolean;
11189
+ };
11190
+ OrgCreateResponse: {
11191
+ /** @description Response payload. */
11192
+ data: {
11193
+ org: components["schemas"]["Organization"];
11194
+ /** @description Trial credit from the credit offer the organization claimed, or null when none applied. */
11195
+ credit_grant: {
11196
+ /** @description Trial credit granted, in US cents. */
11197
+ amount_cents: number;
11198
+ /** @description ISO-8601 timestamp the credit expires. */
11199
+ expires_at: string;
11200
+ } | null;
11201
+ };
11202
+ };
10569
11203
  OrgInvite: {
10570
11204
  /** @description Invite ID. */
10571
11205
  id: number;
@@ -10646,7 +11280,7 @@ export interface components {
10646
11280
  has_plan: boolean;
10647
11281
  /** @description The shared plan in effect, or null when the org has no plan or is on a custom plan. */
10648
11282
  plan: {
10649
- /** @description Plan name, e.g. `Managed`. */
11283
+ /** @description Plan name, as shown to customers. */
10650
11284
  name: string;
10651
11285
  /** @description Currency of the prices below, e.g. `usd`. */
10652
11286
  currency: string;
@@ -10662,6 +11296,8 @@ export interface components {
10662
11296
  overage_price_cents: number | null;
10663
11297
  }[];
10664
11298
  } | null;
11299
+ /** @description Whether the plan in effect is a trial, where usage draws from credits. The month summary has the credit. */
11300
+ trial: boolean;
10665
11301
  /** @description The org's live Dodo subscription now, or null when it's billed by invoice or has none. */
10666
11302
  subscription: {
10667
11303
  /**
@@ -10819,7 +11455,7 @@ export interface components {
10819
11455
  OrgUpdateResponse: {
10820
11456
  /** @description Response payload. */
10821
11457
  data: {
10822
- org: components["schemas"]["Organization"];
11458
+ org: components["schemas"]["Organization"] & unknown;
10823
11459
  };
10824
11460
  };
10825
11461
  Organisation: {
@@ -10881,7 +11517,7 @@ export interface components {
10881
11517
  place_of_supply: string | null;
10882
11518
  /** @description Payment terms in days. */
10883
11519
  payment_terms_days: number | null;
10884
- } | null;
11520
+ };
10885
11521
  OrganizationWithProjects: {
10886
11522
  /** @description Organization ID. */
10887
11523
  id: number;
@@ -11109,7 +11745,7 @@ export interface components {
11109
11745
  kind: string;
11110
11746
  /** @description Stable unique key of a shared plan, e.g. `managed`. */
11111
11747
  key: string | null;
11112
- /** @description Display name, e.g. `Managed`, `Starter`. */
11748
+ /** @description Display name, as shown to customers. */
11113
11749
  name: string | null;
11114
11750
  /** @description Currency the plan is priced in, e.g. `usd`. */
11115
11751
  currency: string;
@@ -11119,6 +11755,8 @@ export interface components {
11119
11755
  status: string;
11120
11756
  /** @description Dodo product that bills this plan by subscription; null when it isn't sold through Dodo. */
11121
11757
  dodo_product_id: string | null;
11758
+ /** @description Whether the plan is sold through Dodo. Only these plans get a Dodo product and are offered at checkout. */
11759
+ dodo_sync: boolean;
11122
11760
  /** @description ISO-8601 creation timestamp. */
11123
11761
  created_at: string;
11124
11762
  /** @description Metered allowances and overage rates. */
@@ -11135,7 +11773,7 @@ export interface components {
11135
11773
  effective_from: string;
11136
11774
  /** @description ISO-8601 timestamp the assignment ends, or null for open-ended. */
11137
11775
  effective_to: string | null;
11138
- /** @description Origin: `order_form`, `derived_from_invoice`, or `manual`. */
11776
+ /** @description Origin: `order_form`, `derived_from_invoice`, `manual`, `trial` or `dodo`. */
11139
11777
  source: string;
11140
11778
  /** @description ISO-8601 creation timestamp. */
11141
11779
  created_at: string;
@@ -11236,14 +11874,6 @@ export interface components {
11236
11874
  /** @description Fraction of planned tests that had a real historical duration. */
11237
11875
  coverage?: number;
11238
11876
  };
11239
- PresignedUploadUrl: {
11240
- /** @description The original file name. */
11241
- file_name: string;
11242
- /** @description Presigned PUT URL; upload with the same MIME type. */
11243
- upload_url: string;
11244
- /** @description Object key (`destination_dir/name`) in the bucket. */
11245
- key: string;
11246
- };
11247
11877
  Project: {
11248
11878
  /** @description Project ID. */
11249
11879
  id: number;
@@ -11425,23 +12055,6 @@ export interface components {
11425
12055
  created: boolean;
11426
12056
  };
11427
12057
  };
11428
- ProjectMetricsResponse: {
11429
- /** @description Response payload. */
11430
- data: {
11431
- /** @description Chat sessions created in the project in the last 7 days. */
11432
- sessionsCreated: number;
11433
- /** @description Chat sessions whose PR was merged in the project in the last 7 days. */
11434
- sessionsMerged: number;
11435
- /** @description Tests added across merged sessions in the last 7 days. */
11436
- testsAdded: number;
11437
- /** @description Tests modified across merged sessions in the last 7 days. */
11438
- testsModified: number;
11439
- /** @description Up to 10 most recently added tests. */
11440
- recentlyAddedTests?: components["schemas"]["MetricsImpactedTestSummary"][];
11441
- /** @description Up to 10 most recently modified tests. */
11442
- recentlyModifiedTests?: components["schemas"]["MetricsImpactedTestSummary"][];
11443
- };
11444
- };
11445
12058
  ProjectOrgResponse: {
11446
12059
  /** @description Response payload. */
11447
12060
  data: {
@@ -11630,6 +12243,8 @@ export interface components {
11630
12243
  name: string;
11631
12244
  /** @description Playwright test id, if known. */
11632
12245
  pw_test_id?: string | null;
12246
+ /** @description Duration (ms) the run worker scheduled this test with, if it had history. */
12247
+ expected_duration_ms?: number | null;
11633
12248
  }[];
11634
12249
  /** @description Scheduled dependency groups (serial blocks). */
11635
12250
  dependency_groups?: {
@@ -11657,12 +12272,6 @@ export interface components {
11657
12272
  /** @description Acknowledgement. */
11658
12273
  message: string;
11659
12274
  };
11660
- RealtimeTokenResponse: {
11661
- /** @description Signed token to authenticate the WebSocket. */
11662
- token: string;
11663
- /** @description Unix epoch (seconds) when the token expires. */
11664
- expires_at: number;
11665
- };
11666
12275
  RealtimeUnavailableResponse: {
11667
12276
  /** @description Reason the realtime service is unavailable. */
11668
12277
  error: string;
@@ -12451,118 +13060,360 @@ export interface components {
12451
13060
  service_token: components["schemas"]["ServiceToken"];
12452
13061
  };
12453
13062
  };
12454
- SetProjectRunnerBackendBody: {
12455
- /** @description An active backend of the project's organisation, or null for Empirical-hosted. */
12456
- runner_backend_id: number | null;
12457
- };
12458
- SetupRunnerBackendBody: {
12459
- /** @description 12-digit AWS account to install the runner in. */
12460
- aws_account_id: string;
12461
- /** @description AWS region with a published template, e.g. `us-east-1`. */
12462
- region: string;
13063
+ SessionMedia: {
13064
+ handle: string;
13065
+ name: string;
13066
+ key: string;
13067
+ url: string;
13068
+ mime_type: string;
13069
+ size_bytes: number;
13070
+ source_tool_call_id: string | null;
13071
+ created_at: string;
12463
13072
  };
12464
- SetupRunnerBackendResponse: {
12465
- /** @description Response payload. */
12466
- data: {
12467
- runner_backend: components["schemas"]["RunnerBackend"];
12468
- /** @description Response payload. */
12469
- registration: {
12470
- /** @description Credential the installation's stack calls home with. Shown once; Empirical keeps only its hash. */
12471
- registration_token: string;
12472
- /** @description ISO-8601 time the link stops working if unused. */
12473
- expires_at: string;
12474
- /** @description Release of the template the link installs. */
12475
- stack_version: string;
12476
- /** @description The template the link installs. */
12477
- template_url: string;
12478
- /** @description AWS console link that opens CloudFormation with the template and Empirical's parameters filled in. */
12479
- quick_create_url: string;
12480
- };
13073
+ SessionTranscript: {
13074
+ rows: components["schemas"]["SessionTranscriptRow"][];
13075
+ /** @description Media referenced by user and assistant text, keyed by handle. */
13076
+ media_refs: {
13077
+ [key: string]: components["schemas"]["SessionMedia"];
12481
13078
  };
13079
+ /** @description log_seq of the newest entry the rows were built from. */
13080
+ last_seq: number | null;
12482
13081
  };
12483
- ShardManifestTests: {
12484
- /** @description Shard index, or null for a non-sharded run. */
12485
- shard_index: number | null;
12486
- /** @description Scheduled tests on this shard that have run. */
12487
- ran_count: number;
12488
- /** @description Total tests scheduled on this shard. */
12489
- scheduled_count: number;
12490
- /** @description Scheduled tests in order, each tagged ran/pending. */
12491
- tests: components["schemas"]["TestRunManifestTest"][];
12492
- };
12493
- ShardPlanResponse: {
12494
- /** @description Response payload. */
13082
+ SessionTranscriptRow: {
13083
+ id: string;
13084
+ /** @enum {string} */
13085
+ kind: "user";
13086
+ timestamp: string;
13087
+ seqFrom?: number;
13088
+ seqTo?: number;
12495
13089
  data: {
12496
- /** @description Rows inserted. Zero when the run was already planned — the first plan wins and a retried POST is a no-op. */
12497
- shards_written: number;
12498
- /** @description Tests across the posted partition. */
12499
- total_tests: number;
13090
+ text: string;
13091
+ createdBy?: string | null;
13092
+ rpcCommandId?: string;
12500
13093
  };
12501
- };
12502
- SimpleErrorResponse: {
12503
- /** @description Error message. */
12504
- error: string;
12505
- };
12506
- SkipTestRunRequest: {
12507
- /** @description Full repository name in owner/repo format. */
12508
- repo: string;
12509
- /** @description Full Git commit SHA. */
12510
- commit_sha: string;
12511
- /** @description Environment slug. */
12512
- environment?: string;
12513
- };
12514
- SkipTestRunResponse: {
13094
+ } | {
13095
+ id: string;
13096
+ /** @enum {string} */
13097
+ kind: "assistant";
13098
+ timestamp: string;
13099
+ seqFrom?: number;
13100
+ seqTo?: number;
12515
13101
  data: {
12516
- /** @description ID of the GitHub check run created as skipped, or null if no GitHub reporter app is installed for the repo. */
12517
- check_run_id: number | null;
12518
- /** @description The status of the test run. */
12519
- status: string;
13102
+ text: string;
12520
13103
  };
12521
- /** @description Always null for success responses. */
12522
- error: unknown;
12523
- };
12524
- SlackAppInstall: {
12525
- /** @description Slack app install ID. */
12526
- id: number;
12527
- /** @description Organisation ID. */
12528
- org_id: number;
12529
- /** @description Slack app ID. */
12530
- slack_app_id: string;
12531
- /** @description Authorizing Slack user ID. */
12532
- authed_user_id: string;
12533
- /** @description OAuth scopes (CSV). */
12534
- scope: string;
12535
- /** @description OAuth token type. */
12536
- token_type: string;
12537
- /** @description Bot user ID. */
12538
- bot_user_id: string;
12539
- /** @description Slack workspace (team) ID. */
12540
- team_id: string;
12541
- /** @description Slack workspace name. */
12542
- team_name: string;
12543
- /**
12544
- * Format: uri
12545
- * @description Slack workspace URL learned from auth.test.
12546
- */
12547
- team_url: string | null;
12548
- /** @description ISO 8601 creation timestamp. */
12549
- created_at: string | null;
12550
- };
12551
- SlackAppInstallListResponse: {
12552
- /** @description The Slack app installs. */
12553
- data: components["schemas"]["SlackAppInstall"][];
12554
- /** @description Number of installs. */
12555
- count: number;
12556
- };
12557
- SlackAppInstallMutationResponse: {
12558
- /** @description Whether the write succeeded. */
12559
- success: boolean;
12560
- /** @description The Slack app install. */
13104
+ } | {
13105
+ id: string;
13106
+ /** @enum {string} */
13107
+ kind: "tools";
13108
+ timestamp: string;
13109
+ seqFrom?: number;
13110
+ seqTo?: number;
12561
13111
  data: {
12562
- /** @description Slack app install ID. */
12563
- id: number;
12564
- /** @description Organisation ID. */
12565
- org_id: number;
13112
+ label: string;
13113
+ count: number;
13114
+ tools: {
13115
+ name: string;
13116
+ count: number;
13117
+ }[];
13118
+ durationMs: number;
13119
+ failed: number;
13120
+ running: boolean;
13121
+ };
13122
+ } | {
13123
+ id: string;
13124
+ /** @enum {string} */
13125
+ kind: "tool";
13126
+ timestamp: string;
13127
+ seqFrom?: number;
13128
+ seqTo?: number;
13129
+ data: {
13130
+ toolCallId: string;
13131
+ name: string;
13132
+ argsSummary: string;
13133
+ failed: boolean;
13134
+ running: boolean;
13135
+ };
13136
+ } | {
13137
+ id: string;
13138
+ /** @enum {string} */
13139
+ kind: "message-session";
13140
+ timestamp: string;
13141
+ seqFrom?: number;
13142
+ seqTo?: number;
13143
+ data: {
13144
+ toolCallId: string;
13145
+ sessionId: number;
13146
+ created: boolean;
13147
+ message: string | null;
13148
+ failed: boolean;
13149
+ };
13150
+ } | {
13151
+ id: string;
13152
+ /** @enum {string} */
13153
+ kind: "subagent";
13154
+ timestamp: string;
13155
+ seqFrom?: number;
13156
+ seqTo?: number;
13157
+ data: {
13158
+ toolCallId: string;
13159
+ agent: string;
13160
+ /** @enum {string} */
13161
+ mode: "sync" | "async";
13162
+ /** @enum {string} */
13163
+ part: "call" | "async-end";
13164
+ /** @enum {string} */
13165
+ state: "running" | "done" | "failed";
13166
+ error?: string;
13167
+ };
13168
+ } | {
13169
+ id: string;
13170
+ /** @enum {string} */
13171
+ kind: "test-report";
13172
+ timestamp: string;
13173
+ seqFrom?: number;
13174
+ seqTo?: number;
13175
+ data: {
13176
+ toolCallId: string;
13177
+ reportUrl: string;
13178
+ summaryUrl: string;
13179
+ };
13180
+ } | {
13181
+ id: string;
13182
+ /** @enum {string} */
13183
+ kind: "commit";
13184
+ timestamp: string;
13185
+ seqFrom?: number;
13186
+ seqTo?: number;
13187
+ data: {
13188
+ toolCallId: string;
13189
+ sha: string;
13190
+ branch: string | null;
13191
+ };
13192
+ } | {
13193
+ id: string;
13194
+ /** @enum {string} */
13195
+ kind: "pr-event";
13196
+ timestamp: string;
13197
+ seqFrom?: number;
13198
+ seqTo?: number;
13199
+ data: {
13200
+ /** @enum {string} */
13201
+ event: "opened" | "merged" | "closed";
13202
+ prNumber: number | null;
13203
+ actor: {
13204
+ userId: string;
13205
+ displayName: string | null;
13206
+ } | null;
13207
+ };
13208
+ } | {
13209
+ id: string;
13210
+ /** @enum {string} */
13211
+ kind: "session-closed";
13212
+ timestamp: string;
13213
+ seqFrom?: number;
13214
+ seqTo?: number;
13215
+ data: {
13216
+ actor: {
13217
+ userId: string;
13218
+ displayName: string | null;
13219
+ } | null;
13220
+ };
13221
+ } | {
13222
+ id: string;
13223
+ /** @enum {string} */
13224
+ kind: "notification";
13225
+ timestamp: string;
13226
+ seqFrom?: number;
13227
+ seqTo?: number;
13228
+ data: {
13229
+ notification: {
13230
+ /** @enum {string} */
13231
+ kind: "alarm";
13232
+ instruction: string;
13233
+ } | {
13234
+ /** @enum {string} */
13235
+ kind: "event_subscription";
13236
+ delivery: {
13237
+ instruction: string;
13238
+ event: {
13239
+ id: string;
13240
+ type: string;
13241
+ entity_type: string;
13242
+ entity_id: string;
13243
+ occurred_at: string;
13244
+ payload: {
13245
+ [key: string]: unknown;
13246
+ };
13247
+ };
13248
+ };
13249
+ } | {
13250
+ /** @enum {string} */
13251
+ kind: "system_message";
13252
+ delivery: {
13253
+ id: number;
13254
+ message: string;
13255
+ ack_instructions: string;
13256
+ };
13257
+ };
13258
+ rpcCommandId?: string;
13259
+ };
13260
+ } | {
13261
+ id: string;
13262
+ /** @enum {string} */
13263
+ kind: "compaction";
13264
+ timestamp: string;
13265
+ seqFrom?: number;
13266
+ seqTo?: number;
13267
+ data: {
13268
+ tokensBefore: number;
13269
+ tokensAfter?: number;
13270
+ };
13271
+ } | {
13272
+ id: string;
13273
+ /** @enum {string} */
13274
+ kind: "job";
13275
+ timestamp: string;
13276
+ seqFrom?: number;
13277
+ seqTo?: number;
13278
+ data: {
13279
+ jobId: string;
13280
+ command: string;
13281
+ exitCode: number | null;
13282
+ signal: string | null;
13283
+ timedOut: boolean;
13284
+ durationMs: number;
13285
+ };
13286
+ } | {
13287
+ id: string;
13288
+ /** @enum {string} */
13289
+ kind: "error";
13290
+ timestamp: string;
13291
+ seqFrom?: number;
13292
+ seqTo?: number;
13293
+ data: {
13294
+ message: string;
13295
+ };
13296
+ } | {
13297
+ id: string;
13298
+ /** @enum {string} */
13299
+ kind: "stopped";
13300
+ timestamp: string;
13301
+ seqFrom?: number;
13302
+ seqTo?: number;
13303
+ data: Record<string, never>;
13304
+ };
13305
+ SetProjectRunnerBackendBody: {
13306
+ /** @description An active backend of the project's organisation, or null for Empirical-hosted. */
13307
+ runner_backend_id: number | null;
13308
+ };
13309
+ SetupRunnerBackendBody: {
13310
+ /** @description 12-digit AWS account to install the runner in. */
13311
+ aws_account_id: string;
13312
+ /** @description AWS region with a published template, e.g. `us-east-1`. */
13313
+ region: string;
13314
+ };
13315
+ SetupRunnerBackendResponse: {
13316
+ /** @description Response payload. */
13317
+ data: {
13318
+ runner_backend: components["schemas"]["RunnerBackend"];
13319
+ /** @description Response payload. */
13320
+ registration: {
13321
+ /** @description Credential the installation's stack calls home with. Shown once; Empirical keeps only its hash. */
13322
+ registration_token: string;
13323
+ /** @description ISO-8601 time the link stops working if unused. */
13324
+ expires_at: string;
13325
+ /** @description Release of the template the link installs. */
13326
+ stack_version: string;
13327
+ /** @description The template the link installs. */
13328
+ template_url: string;
13329
+ /** @description AWS console link that opens CloudFormation with the template and Empirical's parameters filled in. */
13330
+ quick_create_url: string;
13331
+ };
13332
+ };
13333
+ };
13334
+ ShardManifestTests: {
13335
+ /** @description Shard index, or null for a non-sharded run. */
13336
+ shard_index: number | null;
13337
+ /** @description Scheduled tests on this shard that have run. */
13338
+ ran_count: number;
13339
+ /** @description Total tests scheduled on this shard. */
13340
+ scheduled_count: number;
13341
+ /** @description Scheduled tests in order, each tagged ran/pending. */
13342
+ tests: components["schemas"]["TestRunManifestTest"][];
13343
+ };
13344
+ ShardPlanResponse: {
13345
+ /** @description Response payload. */
13346
+ data: {
13347
+ /** @description Rows inserted. Zero when the run was already planned — the first plan wins and a retried POST is a no-op. */
13348
+ shards_written: number;
13349
+ /** @description Tests across the posted partition. */
13350
+ total_tests: number;
13351
+ };
13352
+ };
13353
+ SimpleErrorResponse: {
13354
+ /** @description Error message. */
13355
+ error: string;
13356
+ };
13357
+ SkipTestRunRequest: {
13358
+ /** @description Full repository name in owner/repo format. */
13359
+ repo: string;
13360
+ /** @description Full Git commit SHA. */
13361
+ commit_sha: string;
13362
+ /** @description Environment slug. */
13363
+ environment?: string;
13364
+ };
13365
+ SkipTestRunResponse: {
13366
+ data: {
13367
+ /** @description ID of the GitHub check run created as skipped, or null if no GitHub reporter app is installed for the repo. */
13368
+ check_run_id: number | null;
13369
+ /** @description The status of the test run. */
13370
+ status: string;
13371
+ };
13372
+ /** @description Always null for success responses. */
13373
+ error: unknown;
13374
+ };
13375
+ SlackAppInstall: {
13376
+ /** @description Slack app install ID. */
13377
+ id: number;
13378
+ /** @description Organisation ID. */
13379
+ org_id: number;
13380
+ /** @description Slack app ID. */
13381
+ slack_app_id: string;
13382
+ /** @description Authorizing Slack user ID. */
13383
+ authed_user_id: string;
13384
+ /** @description OAuth scopes (CSV). */
13385
+ scope: string;
13386
+ /** @description OAuth token type. */
13387
+ token_type: string;
13388
+ /** @description Bot user ID. */
13389
+ bot_user_id: string;
13390
+ /** @description Slack workspace (team) ID. */
13391
+ team_id: string;
13392
+ /** @description Slack workspace name. */
13393
+ team_name: string;
13394
+ /**
13395
+ * Format: uri
13396
+ * @description Slack workspace URL learned from auth.test.
13397
+ */
13398
+ team_url: string | null;
13399
+ /** @description ISO 8601 creation timestamp. */
13400
+ created_at: string | null;
13401
+ };
13402
+ SlackAppInstallListResponse: {
13403
+ /** @description The Slack app installs. */
13404
+ data: components["schemas"]["SlackAppInstall"][];
13405
+ /** @description Number of installs. */
13406
+ count: number;
13407
+ };
13408
+ SlackAppInstallMutationResponse: {
13409
+ /** @description Whether the write succeeded. */
13410
+ success: boolean;
13411
+ /** @description The Slack app install. */
13412
+ data: {
13413
+ /** @description Slack app install ID. */
13414
+ id: number;
13415
+ /** @description Organisation ID. */
13416
+ org_id: number;
12566
13417
  /** @description Slack app ID. */
12567
13418
  slack_app_id: string;
12568
13419
  /** @description Authorizing Slack user ID. */
@@ -12730,6 +13581,14 @@ export interface components {
12730
13581
  /** @description Response payload. */
12731
13582
  data: components["schemas"]["SlackUserLink"][];
12732
13583
  };
13584
+ SlackMessageEditResult: {
13585
+ /** @enum {boolean} */
13586
+ ok: true;
13587
+ /** @description Slack channel ID. */
13588
+ channel: string;
13589
+ /** @description Timestamp id of the message. */
13590
+ ts: string;
13591
+ };
12733
13592
  SlackMessageError: {
12734
13593
  /** @description Error message. */
12735
13594
  error: string;
@@ -13082,7 +13941,7 @@ export interface components {
13082
13941
  reason: "not_configured" | "no_org" | "inr" | "has_plan" | "no_plan" | null;
13083
13942
  /** @description The plan checkout would subscribe to, when available. */
13084
13943
  plan: {
13085
- /** @description Plan name, e.g. `Managed`. */
13944
+ /** @description Plan name, as shown to customers. */
13086
13945
  name: string;
13087
13946
  /** @description Currency of the prices below, e.g. `usd`. */
13088
13947
  currency: string;
@@ -13172,7 +14031,6 @@ export interface components {
13172
14031
  ack_note: string | null;
13173
14032
  acked_at: string | null;
13174
14033
  acked_by_chat_session_id: number | null;
13175
- session_error: string | null;
13176
14034
  session_is_closed: boolean | null;
13177
14035
  };
13178
14036
  SystemMessageSummary: {
@@ -13199,7 +14057,7 @@ export interface components {
13199
14057
  source: string;
13200
14058
  /** @description Identifier of the task in its source system. */
13201
14059
  source_identifier: string;
13202
- /** @description User ID of the creator. `null` for integration-created tasks. */
14060
+ /** @description User ID of the person the task is owed to. `null` only on tasks created before this was required. */
13203
14061
  created_by: string | null;
13204
14062
  /** @description ISO 8601 timestamp of when the task was created. */
13205
14063
  created_at: string;
@@ -13223,8 +14081,6 @@ export interface components {
13223
14081
  mode: string;
13224
14082
  /** @description Model used for the session. */
13225
14083
  model: string | null;
13226
- /** @description Opaque agent chat state. */
13227
- chat_state?: unknown;
13228
14084
  /** @description Tests impacted by the session. */
13229
14085
  impacted_tests: unknown[];
13230
14086
  /** @description Whether the agent is awaiting user input. */
@@ -13255,8 +14111,6 @@ export interface components {
13255
14111
  mode: string;
13256
14112
  /** @description Model used for the session. */
13257
14113
  model: string | null;
13258
- /** @description Opaque agent chat state. */
13259
- chat_state?: unknown;
13260
14114
  /** @description Tests impacted by the session. */
13261
14115
  impacted_tests: unknown[];
13262
14116
  /** @description Whether the agent is awaiting user input. */
@@ -13310,7 +14164,7 @@ export interface components {
13310
14164
  };
13311
14165
  };
13312
14166
  /**
13313
- * @description `draft` tasks do not start an agent session; `open` ones do. `closed` and `resolved` are terminal.
14167
+ * @description Moving a `draft` task to `open` starts an agent session. `closed` and `resolved` are terminal.
13314
14168
  * @enum {string}
13315
14169
  */
13316
14170
  TaskStatus: "draft" | "open" | "in-review" | "closed" | "resolved";
@@ -13328,7 +14182,7 @@ export interface components {
13328
14182
  source: string;
13329
14183
  /** @description Identifier of the task in its source system. */
13330
14184
  source_identifier: string;
13331
- /** @description User ID of the creator. `null` for integration-created tasks. */
14185
+ /** @description User ID of the person the task is owed to. `null` only on tasks created before this was required. */
13332
14186
  created_by: string | null;
13333
14187
  /** @description ISO 8601 timestamp of when the task was created. */
13334
14188
  created_at: string;
@@ -13510,6 +14364,25 @@ export interface components {
13510
14364
  /** @description Distinct Playwright projects across the project's synced test cases. */
13511
14365
  playwright_projects: string[];
13512
14366
  };
14367
+ TestCaseRunBeginEvent: {
14368
+ runId: string;
14369
+ test: components["schemas"]["TestCaseRunEndPayloadTest"];
14370
+ suites: string[];
14371
+ result: {
14372
+ retry: number;
14373
+ startTime: string;
14374
+ };
14375
+ projectName: string;
14376
+ shardIndex?: number;
14377
+ };
14378
+ TestCaseRunBeginEventRequest: {
14379
+ /**
14380
+ * @description Event name, always `test_case_run_begin`.
14381
+ * @enum {string}
14382
+ */
14383
+ name: "test_case_run_begin";
14384
+ data: components["schemas"]["TestCaseRunBeginEvent"];
14385
+ };
13513
14386
  TestCaseRunEndAttachment: {
13514
14387
  name: string;
13515
14388
  path: string;
@@ -14128,7 +15001,7 @@ export interface components {
14128
15001
  /** @description Playwright `test.id`, if known. */
14129
15002
  pw_test_id?: string | null;
14130
15003
  /** @description Pass/fail verdict for a completed test. */
14131
- result_status?: ("passed" | "failed" | "flaky" | "skipped") | unknown;
15004
+ result_status?: ("passed" | "failed" | "flaky" | "skipped") | null;
14132
15005
  /** @description Number of retries recorded. */
14133
15006
  retries?: number | null;
14134
15007
  /** @description Total run duration in milliseconds. */
@@ -14142,6 +15015,8 @@ export interface components {
14142
15015
  nesting?: string[] | null;
14143
15016
  /** @description 7-day average duration (ms) snapshotted at landing. */
14144
15017
  expected_duration_ms?: number | null;
15018
+ /** @description Unix ms the latest attempt started. A pending or retrying test with a `started_at` is in flight. */
15019
+ started_at?: number | null;
14145
15020
  /** @description Resume shard that re-scheduled this test, when `status` is `interrupted`. */
14146
15021
  superseded_by_shard?: number | null;
14147
15022
  };
@@ -14386,8 +15261,10 @@ export interface components {
14386
15261
  /** @description Per-test-case history, keyed by the normalized 41-char Playwright test id. */
14387
15262
  durations: {
14388
15263
  [key: string]: {
14389
- /** @description Mean total duration over the window, in ms. */
15264
+ /** @description Mean total duration over the window, skipped results excluded, in ms. */
14390
15265
  avg_duration_total: number;
15266
+ /** @description Mean total duration over the last day, in ms; null without recent results. */
15267
+ recent_avg_duration_total?: number | null;
14391
15268
  /** @description Results the average was taken over. */
14392
15269
  total_runs: number;
14393
15270
  };
@@ -14906,11 +15783,15 @@ export interface components {
14906
15783
  source?: "order_form" | "derived_from_invoice" | "manual";
14907
15784
  };
14908
15785
  UpdatePlanRequest: {
15786
+ /** @description Display name, as shown to customers. Renames the linked Dodo product too, so Dodo's checkout, portal and invoices match. */
15787
+ name?: string;
14909
15788
  /**
14910
15789
  * @description `retired` hides the plan from new sales; existing assignments keep it.
14911
15790
  * @enum {string}
14912
15791
  */
14913
- status: "active" | "retired";
15792
+ status?: "active" | "retired";
15793
+ /** @description `true` creates the plan's Dodo product now if it has none. `false` stops offering it at checkout; a linked Dodo product and existing subscriptions are left as they are. */
15794
+ dodo_sync?: boolean;
14914
15795
  };
14915
15796
  UpdateProjectResourceRequest: {
14916
15797
  /** @description New name for the file. */
@@ -18588,44 +19469,188 @@ export interface operations {
18588
19469
  };
18589
19470
  };
18590
19471
  };
18591
- slackProxy: {
19472
+ slackDeleteMessage: {
18592
19473
  parameters: {
18593
19474
  query?: never;
18594
19475
  header?: never;
18595
- path?: never;
18596
- cookie?: never;
18597
- };
18598
- requestBody?: {
18599
- content: {
18600
- "application/json": {
18601
- /**
18602
- * @description Slack Web API method to call. Read-only methods only.
18603
- * @enum {string}
18604
- */
18605
- api_method: "conversations.history" | "conversations.replies" | "conversations.info" | "chat.getPermalink" | "files.list" | "files.info" | "users.info";
18606
- /**
18607
- * @description Arguments passed to the Slack method.
18608
- * @default {}
18609
- */
18610
- args?: {
18611
- [key: string]: unknown;
18612
- };
18613
- };
19476
+ path: {
19477
+ /** @description Slack channel or DM channel ID of the message. */
19478
+ channel: string;
19479
+ /** @description Timestamp id of the message, as returned by POST /api/slack/messages. */
19480
+ ts: string;
18614
19481
  };
19482
+ cookie?: never;
18615
19483
  };
19484
+ requestBody?: never;
18616
19485
  responses: {
18617
- /** @description The Slack API JSON response, forwarded verbatim. */
19486
+ /** @description Message deleted. */
18618
19487
  200: {
18619
19488
  headers: {
18620
19489
  [name: string]: unknown;
18621
19490
  };
18622
19491
  content: {
18623
- "application/json": unknown;
19492
+ "application/json": components["schemas"]["SlackMessageEditResult"];
18624
19493
  };
18625
19494
  };
18626
- /** @description Invalid request. */
18627
- 400: {
18628
- headers: {
19495
+ /** @description Sandbox authentication required, or the channel is out of scope. */
19496
+ 403: {
19497
+ headers: {
19498
+ [name: string]: unknown;
19499
+ };
19500
+ content: {
19501
+ "application/json": components["schemas"]["SlackMessageError"];
19502
+ };
19503
+ };
19504
+ /** @description No message posted by this project's agent at these coordinates. */
19505
+ 404: {
19506
+ headers: {
19507
+ [name: string]: unknown;
19508
+ };
19509
+ content: {
19510
+ "application/json": components["schemas"]["SlackMessageError"];
19511
+ };
19512
+ };
19513
+ /** @description Slack upstream error. */
19514
+ 502: {
19515
+ headers: {
19516
+ [name: string]: unknown;
19517
+ };
19518
+ content: {
19519
+ "application/json": components["schemas"]["SlackMessageError"];
19520
+ };
19521
+ };
19522
+ };
19523
+ };
19524
+ slackUpdateMessage: {
19525
+ parameters: {
19526
+ query?: never;
19527
+ header?: never;
19528
+ path: {
19529
+ /** @description Slack channel or DM channel ID of the message. */
19530
+ channel: string;
19531
+ /** @description Timestamp id of the message, as returned by POST /api/slack/messages. */
19532
+ ts: string;
19533
+ };
19534
+ cookie?: never;
19535
+ };
19536
+ requestBody?: {
19537
+ content: {
19538
+ "application/json": {
19539
+ /** @description Replacement Markdown body; not Slack's text field. */
19540
+ markdown: string;
19541
+ /** @description Replacement buttons, with the same rules as POST /api/slack/messages. Omit to remove all buttons. */
19542
+ actions?: ({
19543
+ /** @description Button text shown to the user. */
19544
+ label: string;
19545
+ /** @description Text sent to this message's originating agent when selected. Supply enough context to act on it. */
19546
+ input: string;
19547
+ } | {
19548
+ /** @description Button text shown to the user. */
19549
+ label: string;
19550
+ /**
19551
+ * Format: uri
19552
+ * @description HTTP(S) destination opened by this repeatable navigation button. Does not send input to the agent or consume the message's choices.
19553
+ */
19554
+ url: string;
19555
+ })[];
19556
+ };
19557
+ };
19558
+ };
19559
+ responses: {
19560
+ /** @description Message updated. */
19561
+ 200: {
19562
+ headers: {
19563
+ [name: string]: unknown;
19564
+ };
19565
+ content: {
19566
+ "application/json": components["schemas"]["SlackMessageEditResult"];
19567
+ };
19568
+ };
19569
+ /** @description Invalid request. */
19570
+ 400: {
19571
+ headers: {
19572
+ [name: string]: unknown;
19573
+ };
19574
+ content: {
19575
+ "application/json": components["schemas"]["SlackMessageError"];
19576
+ };
19577
+ };
19578
+ /** @description Sandbox authentication required, or the channel is out of scope. */
19579
+ 403: {
19580
+ headers: {
19581
+ [name: string]: unknown;
19582
+ };
19583
+ content: {
19584
+ "application/json": components["schemas"]["SlackMessageError"];
19585
+ };
19586
+ };
19587
+ /** @description No message posted by this project's agent at these coordinates. */
19588
+ 404: {
19589
+ headers: {
19590
+ [name: string]: unknown;
19591
+ };
19592
+ content: {
19593
+ "application/json": components["schemas"]["SlackMessageError"];
19594
+ };
19595
+ };
19596
+ /** @description A button on the message was already selected. */
19597
+ 409: {
19598
+ headers: {
19599
+ [name: string]: unknown;
19600
+ };
19601
+ content: {
19602
+ "application/json": components["schemas"]["SlackMessageError"];
19603
+ };
19604
+ };
19605
+ /** @description Slack upstream error. */
19606
+ 502: {
19607
+ headers: {
19608
+ [name: string]: unknown;
19609
+ };
19610
+ content: {
19611
+ "application/json": components["schemas"]["SlackMessageError"];
19612
+ };
19613
+ };
19614
+ };
19615
+ };
19616
+ slackProxy: {
19617
+ parameters: {
19618
+ query?: never;
19619
+ header?: never;
19620
+ path?: never;
19621
+ cookie?: never;
19622
+ };
19623
+ requestBody?: {
19624
+ content: {
19625
+ "application/json": {
19626
+ /**
19627
+ * @description Slack Web API method to call. Read-only methods only.
19628
+ * @enum {string}
19629
+ */
19630
+ api_method: "conversations.history" | "conversations.replies" | "conversations.info" | "chat.getPermalink" | "files.list" | "files.info" | "users.info";
19631
+ /**
19632
+ * @description Arguments passed to the Slack method.
19633
+ * @default {}
19634
+ */
19635
+ args?: {
19636
+ [key: string]: unknown;
19637
+ };
19638
+ };
19639
+ };
19640
+ };
19641
+ responses: {
19642
+ /** @description The Slack API JSON response, forwarded verbatim. */
19643
+ 200: {
19644
+ headers: {
19645
+ [name: string]: unknown;
19646
+ };
19647
+ content: {
19648
+ "application/json": unknown;
19649
+ };
19650
+ };
19651
+ /** @description Invalid request. */
19652
+ 400: {
19653
+ headers: {
18629
19654
  [name: string]: unknown;
18630
19655
  };
18631
19656
  content: {
@@ -20048,7 +21073,7 @@ export interface operations {
20048
21073
  };
20049
21074
  };
20050
21075
  responses: {
20051
- /** @description The created task and session. */
21076
+ /** @description The created task. */
20052
21077
  201: {
20053
21078
  headers: {
20054
21079
  [name: string]: unknown;
@@ -20057,7 +21082,7 @@ export interface operations {
20057
21082
  "application/json": components["schemas"]["CreateTaskResponse"];
20058
21083
  };
20059
21084
  };
20060
- /** @description Missing required fields or invalid input. */
21085
+ /** @description Missing required fields, no person to own the task, or invalid input. */
20061
21086
  400: {
20062
21087
  headers: {
20063
21088
  [name: string]: unknown;
@@ -20753,12 +21778,12 @@ export interface operations {
20753
21778
  entity_id: string | null;
20754
21779
  /** @description Optional payload filters. Keys must be allowed for the selected event in the canonical event catalog. A primitive value is an equality match, and enum-like fields only accept the values the event emits. Numeric fields also accept a comparison object such as {"gt": 2} or {"gte": 1, "lte": 5}; operators combine with AND and never match null. */
20755
21780
  payload_filter: {
20756
- [key: string]: string | number | boolean | {
21781
+ [key: string]: (string | number | boolean | {
20757
21782
  gt?: number;
20758
21783
  gte?: number;
20759
21784
  lt?: number;
20760
21785
  lte?: number;
20761
- } | unknown;
21786
+ }) | null;
20762
21787
  };
20763
21788
  message: string;
20764
21789
  /**
@@ -20805,12 +21830,12 @@ export interface operations {
20805
21830
  entity_id?: string;
20806
21831
  /** @description Optional payload filters. Keys must be allowed for the selected event in the canonical event catalog. A primitive value is an equality match, and enum-like fields only accept the values the event emits. Numeric fields also accept a comparison object such as {"gt": 2} or {"gte": 1, "lte": 5}; operators combine with AND and never match null. */
20807
21832
  payload_filter?: {
20808
- [key: string]: string | number | boolean | {
21833
+ [key: string]: (string | number | boolean | {
20809
21834
  gt?: number;
20810
21835
  gte?: number;
20811
21836
  lt?: number;
20812
21837
  lte?: number;
20813
- } | unknown;
21838
+ }) | null;
20814
21839
  };
20815
21840
  /** @description Continuation instruction delivered to the session after the event matches. */
20816
21841
  message: string;
@@ -20841,12 +21866,12 @@ export interface operations {
20841
21866
  entity_id: string | null;
20842
21867
  /** @description Optional payload filters. Keys must be allowed for the selected event in the canonical event catalog. A primitive value is an equality match, and enum-like fields only accept the values the event emits. Numeric fields also accept a comparison object such as {"gt": 2} or {"gte": 1, "lte": 5}; operators combine with AND and never match null. */
20843
21868
  payload_filter: {
20844
- [key: string]: string | number | boolean | {
21869
+ [key: string]: (string | number | boolean | {
20845
21870
  gt?: number;
20846
21871
  gte?: number;
20847
21872
  lt?: number;
20848
21873
  lte?: number;
20849
- } | unknown;
21874
+ }) | null;
20850
21875
  };
20851
21876
  message: string;
20852
21877
  /**
@@ -20920,12 +21945,12 @@ export interface operations {
20920
21945
  entity_id: string | null;
20921
21946
  /** @description Optional payload filters. Keys must be allowed for the selected event in the canonical event catalog. A primitive value is an equality match, and enum-like fields only accept the values the event emits. Numeric fields also accept a comparison object such as {"gt": 2} or {"gte": 1, "lte": 5}; operators combine with AND and never match null. */
20922
21947
  payload_filter: {
20923
- [key: string]: string | number | boolean | {
21948
+ [key: string]: (string | number | boolean | {
20924
21949
  gt?: number;
20925
21950
  gte?: number;
20926
21951
  lt?: number;
20927
21952
  lte?: number;
20928
- } | unknown;
21953
+ }) | null;
20929
21954
  };
20930
21955
  message: string;
20931
21956
  /**
@@ -21000,12 +22025,12 @@ export interface operations {
21000
22025
  entity_id?: string | null;
21001
22026
  /** @description Optional payload filters. Keys must be allowed for the selected event in the canonical event catalog. A primitive value is an equality match, and enum-like fields only accept the values the event emits. Numeric fields also accept a comparison object such as {"gt": 2} or {"gte": 1, "lte": 5}; operators combine with AND and never match null. */
21002
22027
  payload_filter?: {
21003
- [key: string]: string | number | boolean | {
22028
+ [key: string]: (string | number | boolean | {
21004
22029
  gt?: number;
21005
22030
  gte?: number;
21006
22031
  lt?: number;
21007
22032
  lte?: number;
21008
- } | unknown;
22033
+ }) | null;
21009
22034
  };
21010
22035
  /** @description Continuation instruction delivered to the session after the event matches. */
21011
22036
  message?: string;
@@ -21036,12 +22061,12 @@ export interface operations {
21036
22061
  entity_id: string | null;
21037
22062
  /** @description Optional payload filters. Keys must be allowed for the selected event in the canonical event catalog. A primitive value is an equality match, and enum-like fields only accept the values the event emits. Numeric fields also accept a comparison object such as {"gt": 2} or {"gte": 1, "lte": 5}; operators combine with AND and never match null. */
21038
22063
  payload_filter: {
21039
- [key: string]: string | number | boolean | {
22064
+ [key: string]: (string | number | boolean | {
21040
22065
  gt?: number;
21041
22066
  gte?: number;
21042
22067
  lt?: number;
21043
22068
  lte?: number;
21044
- } | unknown;
22069
+ }) | null;
21045
22070
  };
21046
22071
  message: string;
21047
22072
  /**
@@ -21910,6 +22935,42 @@ export interface operations {
21910
22935
  };
21911
22936
  };
21912
22937
  };
22938
+ listActivity: {
22939
+ parameters: {
22940
+ query?: {
22941
+ /** @description Cursor from a previous page's `next_cursor`. */
22942
+ before?: string;
22943
+ /** @description Days with activity per page. */
22944
+ days?: number;
22945
+ /** @description IANA time zone that days are split in. */
22946
+ timezone?: string;
22947
+ };
22948
+ header?: never;
22949
+ path?: never;
22950
+ cookie?: never;
22951
+ };
22952
+ requestBody?: never;
22953
+ responses: {
22954
+ /** @description A page of activity. */
22955
+ 200: {
22956
+ headers: {
22957
+ [name: string]: unknown;
22958
+ };
22959
+ content: {
22960
+ "application/json": components["schemas"]["ActivityResponse"];
22961
+ };
22962
+ };
22963
+ /** @description Invalid cursor or time zone. */
22964
+ 400: {
22965
+ headers: {
22966
+ [name: string]: unknown;
22967
+ };
22968
+ content: {
22969
+ "application/json": components["schemas"]["ErrorResponse"];
22970
+ };
22971
+ };
22972
+ };
22973
+ };
21913
22974
  createAlarm: {
21914
22975
  parameters: {
21915
22976
  query?: never;
@@ -22683,6 +23744,15 @@ export interface operations {
22683
23744
  "application/json": components["schemas"]["ErrorResponse"];
22684
23745
  };
22685
23746
  };
23747
+ /** @description Billing blocked: an overdue invoice, a failed renewal, no active plan, or the spend limit reached. */
23748
+ 402: {
23749
+ headers: {
23750
+ [name: string]: unknown;
23751
+ };
23752
+ content: {
23753
+ "application/json": components["schemas"]["ErrorResponse"];
23754
+ };
23755
+ };
22686
23756
  };
22687
23757
  };
22688
23758
  getChatSession: {
@@ -23037,6 +24107,45 @@ export interface operations {
23037
24107
  };
23038
24108
  };
23039
24109
  };
24110
+ getChatSessionEntryRange: {
24111
+ parameters: {
24112
+ query: {
24113
+ /** @description First log_seq to return (inclusive). */
24114
+ from_seq: number;
24115
+ /** @description Last log_seq to return (inclusive). */
24116
+ to_seq: number;
24117
+ /** @description Maximum entries to return (1-200). Default 100. */
24118
+ limit?: number;
24119
+ };
24120
+ header?: never;
24121
+ path: {
24122
+ /** @description Chat session ID. */
24123
+ id: number;
24124
+ };
24125
+ cookie?: never;
24126
+ };
24127
+ requestBody?: never;
24128
+ responses: {
24129
+ /** @description Entries in the range, and where the next page starts. */
24130
+ 200: {
24131
+ headers: {
24132
+ [name: string]: unknown;
24133
+ };
24134
+ content: {
24135
+ "application/json": components["schemas"]["ChatSessionEntryRangeResponse"];
24136
+ };
24137
+ };
24138
+ /** @description Chat session not found. */
24139
+ 404: {
24140
+ headers: {
24141
+ [name: string]: unknown;
24142
+ };
24143
+ content: {
24144
+ "application/json": components["schemas"]["ErrorResponse"];
24145
+ };
24146
+ };
24147
+ };
24148
+ };
23040
24149
  getChatSessionEntryMedia: {
23041
24150
  parameters: {
23042
24151
  query?: never;
@@ -23222,9 +24331,9 @@ export interface operations {
23222
24331
  entity_type: string;
23223
24332
  entity_id: string | null;
23224
24333
  payload_filter: {
23225
- [key: string]: string | number | boolean | {
24334
+ [key: string]: (string | number | boolean | {
23226
24335
  [key: string]: number;
23227
- } | unknown;
24336
+ }) | null;
23228
24337
  };
23229
24338
  message: string;
23230
24339
  /** @enum {string} */
@@ -23673,6 +24782,72 @@ export interface operations {
23673
24782
  };
23674
24783
  };
23675
24784
  };
24785
+ getChatSessionSubagents: {
24786
+ parameters: {
24787
+ query?: never;
24788
+ header?: never;
24789
+ path: {
24790
+ /** @description Chat session ID. */
24791
+ id: number;
24792
+ };
24793
+ cookie?: never;
24794
+ };
24795
+ requestBody?: never;
24796
+ responses: {
24797
+ /** @description Subagents in start order. */
24798
+ 200: {
24799
+ headers: {
24800
+ [name: string]: unknown;
24801
+ };
24802
+ content: {
24803
+ "application/json": components["schemas"]["ChatSessionSubagentsResponse"];
24804
+ };
24805
+ };
24806
+ /** @description Chat session not found. */
24807
+ 404: {
24808
+ headers: {
24809
+ [name: string]: unknown;
24810
+ };
24811
+ content: {
24812
+ "application/json": components["schemas"]["ErrorResponse"];
24813
+ };
24814
+ };
24815
+ };
24816
+ };
24817
+ getChatSessionSubagentEntries: {
24818
+ parameters: {
24819
+ query?: never;
24820
+ header?: never;
24821
+ path: {
24822
+ /** @description Chat session ID. */
24823
+ id: number;
24824
+ /** @description Tool call that started the subagent. */
24825
+ tool_call_id: string;
24826
+ };
24827
+ cookie?: never;
24828
+ };
24829
+ requestBody?: never;
24830
+ responses: {
24831
+ /** @description The subagent's entries, empty when no subagent started from that tool call. */
24832
+ 200: {
24833
+ headers: {
24834
+ [name: string]: unknown;
24835
+ };
24836
+ content: {
24837
+ "application/json": components["schemas"]["ChatSessionSubagentEntriesResponse"];
24838
+ };
24839
+ };
24840
+ /** @description Chat session not found. */
24841
+ 404: {
24842
+ headers: {
24843
+ [name: string]: unknown;
24844
+ };
24845
+ content: {
24846
+ "application/json": components["schemas"]["ErrorResponse"];
24847
+ };
24848
+ };
24849
+ };
24850
+ };
23676
24851
  subscribeChatSession: {
23677
24852
  parameters: {
23678
24853
  query?: never;
@@ -23763,6 +24938,38 @@ export interface operations {
23763
24938
  };
23764
24939
  };
23765
24940
  };
24941
+ getChatSessionTranscript: {
24942
+ parameters: {
24943
+ query?: never;
24944
+ header?: never;
24945
+ path: {
24946
+ /** @description Chat session ID. */
24947
+ id: number;
24948
+ };
24949
+ cookie?: never;
24950
+ };
24951
+ requestBody?: never;
24952
+ responses: {
24953
+ /** @description Transcript rows, media referenced by message text, and the newest log_seq. */
24954
+ 200: {
24955
+ headers: {
24956
+ [name: string]: unknown;
24957
+ };
24958
+ content: {
24959
+ "application/json": components["schemas"]["ChatSessionTranscriptResponse"];
24960
+ };
24961
+ };
24962
+ /** @description Chat session not found. */
24963
+ 404: {
24964
+ headers: {
24965
+ [name: string]: unknown;
24966
+ };
24967
+ content: {
24968
+ "application/json": components["schemas"]["ErrorResponse"];
24969
+ };
24970
+ };
24971
+ };
24972
+ };
23766
24973
  registerChatSessionSandboxBranches: {
23767
24974
  parameters: {
23768
24975
  query?: never;
@@ -23870,22 +25077,217 @@ export interface operations {
23870
25077
  preset?: "all" | "active" | "merged";
23871
25078
  };
23872
25079
  header?: never;
23873
- path?: never;
25080
+ path?: never;
25081
+ cookie?: never;
25082
+ };
25083
+ requestBody?: never;
25084
+ responses: {
25085
+ /** @description Distinct chat-session creators. */
25086
+ 200: {
25087
+ headers: {
25088
+ [name: string]: unknown;
25089
+ };
25090
+ content: {
25091
+ "application/json": components["schemas"]["ChatSessionUsersResponse"];
25092
+ };
25093
+ };
25094
+ /** @description Invalid request. */
25095
+ 400: {
25096
+ headers: {
25097
+ [name: string]: unknown;
25098
+ };
25099
+ content: {
25100
+ "application/json": components["schemas"]["ErrorResponse"];
25101
+ };
25102
+ };
25103
+ /** @description Project not found or not accessible. */
25104
+ 404: {
25105
+ headers: {
25106
+ [name: string]: unknown;
25107
+ };
25108
+ content: {
25109
+ "application/json": components["schemas"]["ErrorResponse"];
25110
+ };
25111
+ };
25112
+ };
25113
+ };
25114
+ listCreditGrants: {
25115
+ parameters: {
25116
+ query?: {
25117
+ /** @description Organisation to list grants for. */
25118
+ org_id?: number | null;
25119
+ };
25120
+ header?: never;
25121
+ path?: never;
25122
+ cookie?: never;
25123
+ };
25124
+ requestBody?: never;
25125
+ responses: {
25126
+ /** @description The organisation's credit grants. */
25127
+ 200: {
25128
+ headers: {
25129
+ [name: string]: unknown;
25130
+ };
25131
+ content: {
25132
+ "application/json": components["schemas"]["CreditGrantListResponse"];
25133
+ };
25134
+ };
25135
+ /** @description Invalid request. */
25136
+ 400: {
25137
+ headers: {
25138
+ [name: string]: unknown;
25139
+ };
25140
+ content: {
25141
+ "application/json": components["schemas"]["ErrorResponse"];
25142
+ };
25143
+ };
25144
+ /** @description Organisation not found. */
25145
+ 404: {
25146
+ headers: {
25147
+ [name: string]: unknown;
25148
+ };
25149
+ content: {
25150
+ "application/json": components["schemas"]["ErrorResponse"];
25151
+ };
25152
+ };
25153
+ };
25154
+ };
25155
+ createCreditGrant: {
25156
+ parameters: {
25157
+ query?: never;
25158
+ header?: never;
25159
+ path?: never;
25160
+ cookie?: never;
25161
+ };
25162
+ requestBody?: {
25163
+ content: {
25164
+ "application/json": components["schemas"]["CreateCreditGrantRequest"];
25165
+ };
25166
+ };
25167
+ responses: {
25168
+ /** @description The created credit grant. */
25169
+ 200: {
25170
+ headers: {
25171
+ [name: string]: unknown;
25172
+ };
25173
+ content: {
25174
+ "application/json": components["schemas"]["CreditGrantResponse"];
25175
+ };
25176
+ };
25177
+ /** @description Validation failed, the expiry is in the past, or the trial plan is missing or unusable. */
25178
+ 400: {
25179
+ headers: {
25180
+ [name: string]: unknown;
25181
+ };
25182
+ content: {
25183
+ "application/json": components["schemas"]["ErrorResponse"];
25184
+ };
25185
+ };
25186
+ /** @description Organisation not found. */
25187
+ 404: {
25188
+ headers: {
25189
+ [name: string]: unknown;
25190
+ };
25191
+ content: {
25192
+ "application/json": components["schemas"]["ErrorResponse"];
25193
+ };
25194
+ };
25195
+ /** @description The organisation is on a plan that isn't a trial, or a trial would overlap another assignment. */
25196
+ 409: {
25197
+ headers: {
25198
+ [name: string]: unknown;
25199
+ };
25200
+ content: {
25201
+ "application/json": components["schemas"]["ErrorResponse"];
25202
+ };
25203
+ };
25204
+ };
25205
+ };
25206
+ listCreditOffers: {
25207
+ parameters: {
25208
+ query?: never;
25209
+ header?: never;
25210
+ path?: never;
25211
+ cookie?: never;
25212
+ };
25213
+ requestBody?: never;
25214
+ responses: {
25215
+ /** @description All credit offers. */
25216
+ 200: {
25217
+ headers: {
25218
+ [name: string]: unknown;
25219
+ };
25220
+ content: {
25221
+ "application/json": components["schemas"]["CreditOfferListResponse"];
25222
+ };
25223
+ };
25224
+ };
25225
+ };
25226
+ createCreditOffer: {
25227
+ parameters: {
25228
+ query?: never;
25229
+ header?: never;
25230
+ path?: never;
25231
+ cookie?: never;
25232
+ };
25233
+ requestBody?: {
25234
+ content: {
25235
+ "application/json": components["schemas"]["CreateCreditOfferRequest"];
25236
+ };
25237
+ };
25238
+ responses: {
25239
+ /** @description The created credit offer. */
25240
+ 200: {
25241
+ headers: {
25242
+ [name: string]: unknown;
25243
+ };
25244
+ content: {
25245
+ "application/json": components["schemas"]["CreditOfferResponse"];
25246
+ };
25247
+ };
25248
+ /** @description Validation failed, the recipient is invalid, the deadline is in the past, or the trial plan is missing or unusable. */
25249
+ 400: {
25250
+ headers: {
25251
+ [name: string]: unknown;
25252
+ };
25253
+ content: {
25254
+ "application/json": components["schemas"]["ErrorResponse"];
25255
+ };
25256
+ };
25257
+ /** @description The email or domain already has an open offer, or a work domains offer is already open. */
25258
+ 409: {
25259
+ headers: {
25260
+ [name: string]: unknown;
25261
+ };
25262
+ content: {
25263
+ "application/json": components["schemas"]["ErrorResponse"];
25264
+ };
25265
+ };
25266
+ };
25267
+ };
25268
+ revokeCreditOffer: {
25269
+ parameters: {
25270
+ query?: never;
25271
+ header?: never;
25272
+ path: {
25273
+ /** @description Credit offer ID. */
25274
+ id: number;
25275
+ };
23874
25276
  cookie?: never;
23875
25277
  };
23876
25278
  requestBody?: never;
23877
25279
  responses: {
23878
- /** @description Distinct chat-session creators. */
25280
+ /** @description The revoked credit offer. */
23879
25281
  200: {
23880
25282
  headers: {
23881
25283
  [name: string]: unknown;
23882
25284
  };
23883
25285
  content: {
23884
- "application/json": components["schemas"]["ChatSessionUsersResponse"];
25286
+ "application/json": components["schemas"]["CreditOfferResponse"];
23885
25287
  };
23886
25288
  };
23887
- /** @description Invalid request. */
23888
- 400: {
25289
+ /** @description Credit offer not found. */
25290
+ 404: {
23889
25291
  headers: {
23890
25292
  [name: string]: unknown;
23891
25293
  };
@@ -23893,8 +25295,8 @@ export interface operations {
23893
25295
  "application/json": components["schemas"]["ErrorResponse"];
23894
25296
  };
23895
25297
  };
23896
- /** @description Project not found or not accessible. */
23897
- 404: {
25298
+ /** @description The offer was already claimed or revoked. */
25299
+ 409: {
23898
25300
  headers: {
23899
25301
  [name: string]: unknown;
23900
25302
  };
@@ -24860,6 +26262,42 @@ export interface operations {
24860
26262
  };
24861
26263
  };
24862
26264
  };
26265
+ getPullRequestImpactedTests: {
26266
+ parameters: {
26267
+ query: {
26268
+ /** @description Repository owner. */
26269
+ owner: string;
26270
+ /** @description Repository name. */
26271
+ repo: string;
26272
+ /** @description Pull request number. */
26273
+ pull_number: number;
26274
+ };
26275
+ header?: never;
26276
+ path?: never;
26277
+ cookie?: never;
26278
+ };
26279
+ requestBody?: never;
26280
+ responses: {
26281
+ /** @description The pull request's impacted tests. */
26282
+ 200: {
26283
+ headers: {
26284
+ [name: string]: unknown;
26285
+ };
26286
+ content: {
26287
+ "application/json": components["schemas"]["GithubPrImpactedTestsResponse"];
26288
+ };
26289
+ };
26290
+ /** @description Project or pull request not found. */
26291
+ 404: {
26292
+ headers: {
26293
+ [name: string]: unknown;
26294
+ };
26295
+ content: {
26296
+ "application/json": components["schemas"]["ErrorResponse"];
26297
+ };
26298
+ };
26299
+ };
26300
+ };
24863
26301
  mergePullRequest: {
24864
26302
  parameters: {
24865
26303
  query?: never;
@@ -25541,6 +26979,39 @@ export interface operations {
25541
26979
  };
25542
26980
  };
25543
26981
  };
26982
+ sendFixtureLoginEmail: {
26983
+ parameters: {
26984
+ query?: never;
26985
+ header?: never;
26986
+ path?: never;
26987
+ cookie?: never;
26988
+ };
26989
+ requestBody?: {
26990
+ content: {
26991
+ "application/json": components["schemas"]["FixtureLoginEmailRequest"];
26992
+ };
26993
+ };
26994
+ responses: {
26995
+ /** @description The email was sent. */
26996
+ 200: {
26997
+ headers: {
26998
+ [name: string]: unknown;
26999
+ };
27000
+ content: {
27001
+ "application/json": components["schemas"]["FixtureLoginEmailResponse"];
27002
+ };
27003
+ };
27004
+ /** @description Invalid request. */
27005
+ 400: {
27006
+ headers: {
27007
+ [name: string]: unknown;
27008
+ };
27009
+ content: {
27010
+ "application/json": components["schemas"]["ErrorResponse"];
27011
+ };
27012
+ };
27013
+ };
27014
+ };
25544
27015
  jiraWebhook: {
25545
27016
  parameters: {
25546
27017
  query?: never;
@@ -25705,6 +27176,48 @@ export interface operations {
25705
27176
  };
25706
27177
  };
25707
27178
  };
27179
+ seedChatSession: {
27180
+ parameters: {
27181
+ query?: never;
27182
+ header?: never;
27183
+ path?: never;
27184
+ cookie?: never;
27185
+ };
27186
+ requestBody?: {
27187
+ content: {
27188
+ "application/json": components["schemas"]["ChatSessionSeedRequest"];
27189
+ };
27190
+ };
27191
+ responses: {
27192
+ /** @description The seeded chat session. */
27193
+ 201: {
27194
+ headers: {
27195
+ [name: string]: unknown;
27196
+ };
27197
+ content: {
27198
+ "application/json": components["schemas"]["ChatSessionSeedResponse"];
27199
+ };
27200
+ };
27201
+ /** @description Invalid request. */
27202
+ 400: {
27203
+ headers: {
27204
+ [name: string]: unknown;
27205
+ };
27206
+ content: {
27207
+ "application/json": components["schemas"]["ErrorResponse"];
27208
+ };
27209
+ };
27210
+ /** @description Not available in this environment. */
27211
+ 404: {
27212
+ headers: {
27213
+ [name: string]: unknown;
27214
+ };
27215
+ content: {
27216
+ "application/json": components["schemas"]["ErrorResponse"];
27217
+ };
27218
+ };
27219
+ };
27220
+ };
25708
27221
  listServiceTokens: {
25709
27222
  parameters: {
25710
27223
  query?: never;
@@ -27923,35 +29436,29 @@ export interface operations {
27923
29436
  };
27924
29437
  };
27925
29438
  };
27926
- getProjectMetricsLast7Days: {
29439
+ listNotifications: {
27927
29440
  parameters: {
27928
- query?: never;
29441
+ query?: {
29442
+ /** @description Maximum read notifications to return. Default 20. */
29443
+ read_limit?: number;
29444
+ };
27929
29445
  header?: never;
27930
29446
  path?: never;
27931
29447
  cookie?: never;
27932
29448
  };
27933
29449
  requestBody?: never;
27934
29450
  responses: {
27935
- /** @description Project metrics for the last 7 days. */
29451
+ /** @description The user's notifications. */
27936
29452
  200: {
27937
29453
  headers: {
27938
29454
  [name: string]: unknown;
27939
29455
  };
27940
29456
  content: {
27941
- "application/json": components["schemas"]["ProjectMetricsResponse"];
27942
- };
27943
- };
27944
- /** @description Invalid request or missing project scope. */
27945
- 400: {
27946
- headers: {
27947
- [name: string]: unknown;
27948
- };
27949
- content: {
27950
- "application/json": components["schemas"]["ErrorResponse"];
29457
+ "application/json": components["schemas"]["NotificationListResponse"];
27951
29458
  };
27952
29459
  };
27953
- /** @description Project not found. */
27954
- 404: {
29460
+ /** @description Only signed-in users have notifications. */
29461
+ 403: {
27955
29462
  headers: {
27956
29463
  [name: string]: unknown;
27957
29464
  };
@@ -27961,25 +29468,25 @@ export interface operations {
27961
29468
  };
27962
29469
  };
27963
29470
  };
27964
- listNotifications: {
29471
+ markNotificationRead: {
27965
29472
  parameters: {
27966
- query?: {
27967
- /** @description Maximum read notifications to return. Default 20. */
27968
- read_limit?: number;
27969
- };
29473
+ query?: never;
27970
29474
  header?: never;
27971
- path?: never;
29475
+ path: {
29476
+ /** @description Notification ID. */
29477
+ id: number;
29478
+ };
27972
29479
  cookie?: never;
27973
29480
  };
27974
29481
  requestBody?: never;
27975
29482
  responses: {
27976
- /** @description The user's notifications. */
29483
+ /** @description The notification's read time. */
27977
29484
  200: {
27978
29485
  headers: {
27979
29486
  [name: string]: unknown;
27980
29487
  };
27981
29488
  content: {
27982
- "application/json": components["schemas"]["NotificationListResponse"];
29489
+ "application/json": components["schemas"]["NotificationReadResponse"];
27983
29490
  };
27984
29491
  };
27985
29492
  /** @description Only signed-in users have notifications. */
@@ -27991,27 +29498,37 @@ export interface operations {
27991
29498
  "application/json": components["schemas"]["ErrorResponse"];
27992
29499
  };
27993
29500
  };
29501
+ /** @description Notification not found. */
29502
+ 404: {
29503
+ headers: {
29504
+ [name: string]: unknown;
29505
+ };
29506
+ content: {
29507
+ "application/json": components["schemas"]["ErrorResponse"];
29508
+ };
29509
+ };
27994
29510
  };
27995
29511
  };
27996
- markNotificationRead: {
29512
+ createDummyNotification: {
27997
29513
  parameters: {
27998
29514
  query?: never;
27999
29515
  header?: never;
28000
- path: {
28001
- /** @description Notification ID. */
28002
- id: number;
28003
- };
29516
+ path?: never;
28004
29517
  cookie?: never;
28005
29518
  };
28006
- requestBody?: never;
29519
+ requestBody?: {
29520
+ content: {
29521
+ "application/json": components["schemas"]["CreateDummyNotificationBody"];
29522
+ };
29523
+ };
28007
29524
  responses: {
28008
- /** @description The notification's read time. */
28009
- 200: {
29525
+ /** @description The created notification. */
29526
+ 201: {
28010
29527
  headers: {
28011
29528
  [name: string]: unknown;
28012
29529
  };
28013
29530
  content: {
28014
- "application/json": components["schemas"]["NotificationReadResponse"];
29531
+ "application/json": components["schemas"]["DummyNotificationResponse"];
28015
29532
  };
28016
29533
  };
28017
29534
  /** @description Only signed-in users have notifications. */
@@ -28023,7 +29540,7 @@ export interface operations {
28023
29540
  "application/json": components["schemas"]["ErrorResponse"];
28024
29541
  };
28025
29542
  };
28026
- /** @description Notification not found. */
29543
+ /** @description Not available, or nothing to notify about. */
28027
29544
  404: {
28028
29545
  headers: {
28029
29546
  [name: string]: unknown;
@@ -28162,77 +29679,6 @@ export interface operations {
28162
29679
  };
28163
29680
  };
28164
29681
  };
28165
- completeOnboarding: {
28166
- parameters: {
28167
- query?: never;
28168
- header?: never;
28169
- path?: never;
28170
- cookie?: never;
28171
- };
28172
- requestBody?: {
28173
- content: {
28174
- "application/json": components["schemas"]["OnboardingCompleteRequest"];
28175
- };
28176
- };
28177
- responses: {
28178
- /** @description Created org and project. */
28179
- 200: {
28180
- headers: {
28181
- [name: string]: unknown;
28182
- };
28183
- content: {
28184
- "application/json": components["schemas"]["OnboardingCompleteResponse"];
28185
- };
28186
- };
28187
- /** @description Invalid request. */
28188
- 400: {
28189
- headers: {
28190
- [name: string]: unknown;
28191
- };
28192
- content: {
28193
- "application/json": components["schemas"]["ErrorResponse"];
28194
- };
28195
- };
28196
- /** @description Caller is not a member of the given organisation. */
28197
- 403: {
28198
- headers: {
28199
- [name: string]: unknown;
28200
- };
28201
- content: {
28202
- "application/json": components["schemas"]["ErrorResponse"];
28203
- };
28204
- };
28205
- };
28206
- };
28207
- getOnboardingContext: {
28208
- parameters: {
28209
- query?: never;
28210
- header?: never;
28211
- path?: never;
28212
- cookie?: never;
28213
- };
28214
- requestBody?: never;
28215
- responses: {
28216
- /** @description Onboarding context. */
28217
- 200: {
28218
- headers: {
28219
- [name: string]: unknown;
28220
- };
28221
- content: {
28222
- "application/json": components["schemas"]["OnboardingContextResponse"];
28223
- };
28224
- };
28225
- /** @description No verified email on the session. */
28226
- 400: {
28227
- headers: {
28228
- [name: string]: unknown;
28229
- };
28230
- content: {
28231
- "application/json": components["schemas"]["ErrorResponse"];
28232
- };
28233
- };
28234
- };
28235
- };
28236
29682
  listOrderForms: {
28237
29683
  parameters: {
28238
29684
  query?: {
@@ -28473,27 +29919,60 @@ export interface operations {
28473
29919
  [name: string]: unknown;
28474
29920
  };
28475
29921
  content: {
28476
- "application/json": components["schemas"]["ErrorResponse"];
29922
+ "application/json": components["schemas"]["ErrorResponse"];
29923
+ };
29924
+ };
29925
+ };
29926
+ };
29927
+ listOrgs: {
29928
+ parameters: {
29929
+ query?: never;
29930
+ header?: never;
29931
+ path?: never;
29932
+ cookie?: never;
29933
+ };
29934
+ requestBody?: never;
29935
+ responses: {
29936
+ /** @description Organizations the principal can access, with their projects. */
29937
+ 200: {
29938
+ headers: {
29939
+ [name: string]: unknown;
29940
+ };
29941
+ content: {
29942
+ "application/json": components["schemas"]["OrgListResponse"];
28477
29943
  };
28478
29944
  };
28479
29945
  };
28480
29946
  };
28481
- listOrgs: {
29947
+ createOrg: {
28482
29948
  parameters: {
28483
29949
  query?: never;
28484
29950
  header?: never;
28485
29951
  path?: never;
28486
29952
  cookie?: never;
28487
29953
  };
28488
- requestBody?: never;
29954
+ requestBody?: {
29955
+ content: {
29956
+ "application/json": components["schemas"]["OrgCreateRequest"];
29957
+ };
29958
+ };
28489
29959
  responses: {
28490
- /** @description Organizations the principal can access, with their projects. */
29960
+ /** @description The created organization. */
28491
29961
  200: {
28492
29962
  headers: {
28493
29963
  [name: string]: unknown;
28494
29964
  };
28495
29965
  content: {
28496
- "application/json": components["schemas"]["OrgListResponse"];
29966
+ "application/json": components["schemas"]["OrgCreateResponse"];
29967
+ };
29968
+ };
29969
+ /** @description Invalid request. */
29970
+ 400: {
29971
+ headers: {
29972
+ [name: string]: unknown;
29973
+ };
29974
+ content: {
29975
+ "application/json": components["schemas"]["ErrorResponse"];
28497
29976
  };
28498
29977
  };
28499
29978
  };
@@ -28550,6 +30029,15 @@ export interface operations {
28550
30029
  "application/json": components["schemas"]["ErrorResponse"];
28551
30030
  };
28552
30031
  };
30032
+ /** @description An email domain is already claimed by another org. */
30033
+ 409: {
30034
+ headers: {
30035
+ [name: string]: unknown;
30036
+ };
30037
+ content: {
30038
+ "application/json": components["schemas"]["ErrorResponse"];
30039
+ };
30040
+ };
28553
30041
  };
28554
30042
  };
28555
30043
  listOrgInvites: {
@@ -28906,6 +30394,15 @@ export interface operations {
28906
30394
  "application/json": components["schemas"]["CreatePlanAssignmentBadRequest"];
28907
30395
  };
28908
30396
  };
30397
+ /** @description The organisation already has a plan assignment that overlaps this period. */
30398
+ 409: {
30399
+ headers: {
30400
+ [name: string]: unknown;
30401
+ };
30402
+ content: {
30403
+ "application/json": components["schemas"]["ErrorResponse"];
30404
+ };
30405
+ };
28909
30406
  };
28910
30407
  };
28911
30408
  getPlanAssignmentById: {
@@ -28992,6 +30489,15 @@ export interface operations {
28992
30489
  "application/json": components["schemas"]["ErrorResponse"];
28993
30490
  };
28994
30491
  };
30492
+ /** @description The change makes the assignment overlap another one for the organisation. */
30493
+ 409: {
30494
+ headers: {
30495
+ [name: string]: unknown;
30496
+ };
30497
+ content: {
30498
+ "application/json": components["schemas"]["ErrorResponse"];
30499
+ };
30500
+ };
28995
30501
  };
28996
30502
  };
28997
30503
  getOrgPlan: {
@@ -29073,7 +30579,7 @@ export interface operations {
29073
30579
  "application/json": components["schemas"]["PlanResponse"];
29074
30580
  };
29075
30581
  };
29076
- /** @description Validation failed. */
30582
+ /** @description Validation failed, or `dodo_sync` is set on a plan Dodo can't bill. */
29077
30583
  400: {
29078
30584
  headers: {
29079
30585
  [name: string]: unknown;
@@ -29082,7 +30588,7 @@ export interface operations {
29082
30588
  "application/json": components["schemas"]["ErrorResponse"];
29083
30589
  };
29084
30590
  };
29085
- /** @description A plan with this key or Dodo product already exists. */
30591
+ /** @description A plan with this key or Dodo product already exists, or Dodo has a product for this key with other terms. */
29086
30592
  409: {
29087
30593
  headers: {
29088
30594
  [name: string]: unknown;
@@ -29091,6 +30597,15 @@ export interface operations {
29091
30597
  "application/json": components["schemas"]["ErrorResponse"];
29092
30598
  };
29093
30599
  };
30600
+ /** @description Dodo refused to create the plan's product. */
30601
+ 502: {
30602
+ headers: {
30603
+ [name: string]: unknown;
30604
+ };
30605
+ content: {
30606
+ "application/json": components["schemas"]["ErrorResponse"];
30607
+ };
30608
+ };
29094
30609
  };
29095
30610
  };
29096
30611
  getPlanById: {
@@ -29159,7 +30674,7 @@ export interface operations {
29159
30674
  "application/json": components["schemas"]["PlanResponse"];
29160
30675
  };
29161
30676
  };
29162
- /** @description Validation failed. */
30677
+ /** @description Validation failed, or `dodo_sync` is turned on for a plan Dodo can't bill. */
29163
30678
  400: {
29164
30679
  headers: {
29165
30680
  [name: string]: unknown;
@@ -29177,6 +30692,24 @@ export interface operations {
29177
30692
  "application/json": components["schemas"]["ErrorResponse"];
29178
30693
  };
29179
30694
  };
30695
+ /** @description Dodo has a product for this key with other terms. */
30696
+ 409: {
30697
+ headers: {
30698
+ [name: string]: unknown;
30699
+ };
30700
+ content: {
30701
+ "application/json": components["schemas"]["ErrorResponse"];
30702
+ };
30703
+ };
30704
+ /** @description Dodo refused to rename the plan's product or create one. */
30705
+ 502: {
30706
+ headers: {
30707
+ [name: string]: unknown;
30708
+ };
30709
+ content: {
30710
+ "application/json": components["schemas"]["ErrorResponse"];
30711
+ };
30712
+ };
29180
30713
  };
29181
30714
  };
29182
30715
  listProjectAddons: {
@@ -29378,10 +30911,11 @@ export interface operations {
29378
30911
  name: string;
29379
30912
  /** @description Unique project slug. */
29380
30913
  slug: string;
29381
- /** @description Repository name (without slashes). */
29382
- repo_name: string;
30914
+ /** @description Repository name (without slashes). Defaults to `<slug>-tests`. */
30915
+ repo_name?: string;
29383
30916
  /**
29384
- * @description Repository host backing the project.
30917
+ * @description Repository host backing the project. A `github` repo is created in the Empirical org.
30918
+ * @default github
29385
30919
  * @enum {string}
29386
30920
  */
29387
30921
  repo_host?: "github" | "pierre_code_storage";
@@ -30591,35 +32125,6 @@ export interface operations {
30591
32125
  };
30592
32126
  };
30593
32127
  };
30594
- getRealtimeToken: {
30595
- parameters: {
30596
- query?: never;
30597
- header?: never;
30598
- path?: never;
30599
- cookie?: never;
30600
- };
30601
- requestBody?: never;
30602
- responses: {
30603
- /** @description The issued realtime token. */
30604
- 200: {
30605
- headers: {
30606
- [name: string]: unknown;
30607
- };
30608
- content: {
30609
- "application/json": components["schemas"]["RealtimeTokenResponse"];
30610
- };
30611
- };
30612
- /** @description Realtime service is not configured. */
30613
- 503: {
30614
- headers: {
30615
- [name: string]: unknown;
30616
- };
30617
- content: {
30618
- "application/json": components["schemas"]["RealtimeUnavailableResponse"];
30619
- };
30620
- };
30621
- };
30622
- };
30623
32128
  createRealtimeToken: {
30624
32129
  parameters: {
30625
32130
  query?: never;
@@ -31695,7 +33200,7 @@ export interface operations {
31695
33200
  content: {
31696
33201
  "application/json": {
31697
33202
  /** @description Project the chat session belongs to. */
31698
- project_id?: number | string | unknown;
33203
+ project_id?: (number | string) | null;
31699
33204
  /** @description First message to send to the agent. */
31700
33205
  initial_prompt?: string | null;
31701
33206
  /** @description Model to use for the chat session. */
@@ -31784,6 +33289,48 @@ export interface operations {
31784
33289
  };
31785
33290
  };
31786
33291
  };
33292
+ ingestTestCaseRunBeginEvent: {
33293
+ parameters: {
33294
+ query?: never;
33295
+ header?: never;
33296
+ path?: never;
33297
+ cookie?: never;
33298
+ };
33299
+ requestBody?: {
33300
+ content: {
33301
+ "application/json": components["schemas"]["TestCaseRunBeginEventRequest"];
33302
+ };
33303
+ };
33304
+ responses: {
33305
+ /** @description Event accepted (acknowledgement). */
33306
+ 200: {
33307
+ headers: {
33308
+ [name: string]: unknown;
33309
+ };
33310
+ content: {
33311
+ "application/json": components["schemas"]["IngestTestCaseRunEndEventResponse"];
33312
+ };
33313
+ };
33314
+ /** @description Invalid request. */
33315
+ 400: {
33316
+ headers: {
33317
+ [name: string]: unknown;
33318
+ };
33319
+ content: {
33320
+ "application/json": components["schemas"]["ErrorResponse"];
33321
+ };
33322
+ };
33323
+ /** @description Test run not found. */
33324
+ 404: {
33325
+ headers: {
33326
+ [name: string]: unknown;
33327
+ };
33328
+ content: {
33329
+ "application/json": components["schemas"]["ErrorResponse"];
33330
+ };
33331
+ };
33332
+ };
33333
+ };
31787
33334
  updateTestRunShardState: {
31788
33335
  parameters: {
31789
33336
  query?: never;
@@ -31982,96 +33529,6 @@ export interface operations {
31982
33529
  };
31983
33530
  };
31984
33531
  };
31985
- createUploadUrls: {
31986
- parameters: {
31987
- query?: never;
31988
- header?: never;
31989
- path?: never;
31990
- cookie?: never;
31991
- };
31992
- requestBody?: {
31993
- content: {
31994
- "application/json": {
31995
- /** @description Files to generate presigned upload URLs for. */
31996
- files: {
31997
- /** @description File name; appended to `destination_dir`. */
31998
- name: string;
31999
- /** @description MIME type signed into the presigned URL. */
32000
- type: string;
32001
- }[];
32002
- /** @description Directory prefix (key prefix) within the bucket. */
32003
- destination_dir: string;
32004
- /** @description Ignored. Uploads always go to the files bucket. */
32005
- bucket?: string;
32006
- };
32007
- };
32008
- };
32009
- responses: {
32010
- /** @description The generated presigned upload URLs. */
32011
- 200: {
32012
- headers: {
32013
- [name: string]: unknown;
32014
- };
32015
- content: {
32016
- "application/json": components["schemas"]["CreateUploadUrlsResponse"];
32017
- };
32018
- };
32019
- /** @description Invalid request. */
32020
- 400: {
32021
- headers: {
32022
- [name: string]: unknown;
32023
- };
32024
- content: {
32025
- "application/json": components["schemas"]["ErrorResponse"];
32026
- };
32027
- };
32028
- };
32029
- };
32030
- uploadLoomVideo: {
32031
- parameters: {
32032
- query?: never;
32033
- header?: never;
32034
- path?: never;
32035
- cookie?: never;
32036
- };
32037
- requestBody?: {
32038
- content: {
32039
- "application/json": {
32040
- /** @description Loom share URL (loom.com/share/<id>). */
32041
- url: string;
32042
- };
32043
- };
32044
- };
32045
- responses: {
32046
- /** @description The uploaded Loom video. */
32047
- 200: {
32048
- headers: {
32049
- [name: string]: unknown;
32050
- };
32051
- content: {
32052
- "application/json": components["schemas"]["LoomUploadResponse"];
32053
- };
32054
- };
32055
- /** @description Invalid Loom URL. */
32056
- 400: {
32057
- headers: {
32058
- [name: string]: unknown;
32059
- };
32060
- content: {
32061
- "application/json": components["schemas"]["ErrorResponse"];
32062
- };
32063
- };
32064
- /** @description Failed to process the Loom video. */
32065
- 500: {
32066
- headers: {
32067
- [name: string]: unknown;
32068
- };
32069
- content: {
32070
- "application/json": components["schemas"]["ErrorResponse"];
32071
- };
32072
- };
32073
- };
32074
- };
32075
33532
  listMyGithubLinks: {
32076
33533
  parameters: {
32077
33534
  query?: never;
@@ -32319,6 +33776,56 @@ export interface operations {
32319
33776
  };
32320
33777
  };
32321
33778
  };
33779
+ getMyOnboarding: {
33780
+ parameters: {
33781
+ query?: {
33782
+ /** @description Super admins only: the email of the user whose checklist to return. */
33783
+ view_as?: string;
33784
+ };
33785
+ header?: never;
33786
+ path?: never;
33787
+ cookie?: never;
33788
+ };
33789
+ requestBody?: never;
33790
+ responses: {
33791
+ /** @description The caller's onboarding checklist. */
33792
+ 200: {
33793
+ headers: {
33794
+ [name: string]: unknown;
33795
+ };
33796
+ content: {
33797
+ "application/json": components["schemas"]["OnboardingChecklistResponse"];
33798
+ };
33799
+ };
33800
+ /** @description No verified email on the session. */
33801
+ 400: {
33802
+ headers: {
33803
+ [name: string]: unknown;
33804
+ };
33805
+ content: {
33806
+ "application/json": components["schemas"]["ErrorResponse"];
33807
+ };
33808
+ };
33809
+ /** @description `view_as` needs a super admin. */
33810
+ 403: {
33811
+ headers: {
33812
+ [name: string]: unknown;
33813
+ };
33814
+ content: {
33815
+ "application/json": components["schemas"]["ErrorResponse"];
33816
+ };
33817
+ };
33818
+ /** @description Project or `view_as` user not found. */
33819
+ 404: {
33820
+ headers: {
33821
+ [name: string]: unknown;
33822
+ };
33823
+ content: {
33824
+ "application/json": components["schemas"]["ErrorResponse"];
33825
+ };
33826
+ };
33827
+ };
33828
+ };
32322
33829
  listMySlackLinks: {
32323
33830
  parameters: {
32324
33831
  query?: never;