@empiricalrun/playwright-utils 0.62.0 → 0.62.1

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.
@@ -1772,6 +1772,86 @@ export interface paths {
1772
1772
  patch: operations["updateChatSessionTrigger"];
1773
1773
  trace?: never;
1774
1774
  };
1775
+ "/api/failure-groups/{id}/matcher-overlap": {
1776
+ parameters: {
1777
+ query?: never;
1778
+ header?: never;
1779
+ path?: never;
1780
+ cookie?: never;
1781
+ };
1782
+ get?: never;
1783
+ put?: never;
1784
+ /**
1785
+ * 🤖 Check a matcher against other groups' members
1786
+ * @description Runs a candidate matcher source for this group against the 2 most recently seen active members of every other open group in the project (round-robin, at most 40 cases) and reports the ones it returns true for. A claim means the matcher overlaps that group. Nothing is persisted.
1787
+ */
1788
+ post: operations["checkFailureGroupMatcherOverlap"];
1789
+ delete?: never;
1790
+ options?: never;
1791
+ head?: never;
1792
+ patch?: never;
1793
+ trace?: never;
1794
+ };
1795
+ "/api/failure-groups/{id}/members/{test_case_id}": {
1796
+ parameters: {
1797
+ query?: never;
1798
+ header?: never;
1799
+ path?: never;
1800
+ cookie?: never;
1801
+ };
1802
+ get?: never;
1803
+ put?: never;
1804
+ post?: never;
1805
+ /**
1806
+ * 🤖 Detach a test from a failure group
1807
+ * @description Records that this test does not belong to the group. Detaching as an agent is a correction the agent may undo by attaching again. A human detach is sticky: agent attaches will not re-attach the test; only a later human attach supersedes it.
1808
+ */
1809
+ delete: operations["detachFailureGroupMember"];
1810
+ options?: never;
1811
+ head?: never;
1812
+ patch?: never;
1813
+ trace?: never;
1814
+ };
1815
+ "/api/failure-groups/{id}/share": {
1816
+ parameters: {
1817
+ query?: never;
1818
+ header?: never;
1819
+ path?: never;
1820
+ cookie?: never;
1821
+ };
1822
+ get?: never;
1823
+ put?: never;
1824
+ /**
1825
+ * 🤖 Share a failure group's diagnosis
1826
+ * @description Posts this group's diagnosis to a chosen Slack destination, with a link back to the failure group. The diagnosis and header are read from the stored group, never the client. A thread reply must belong to a run in this project; the channel must be accessible to the project's organization.
1827
+ */
1828
+ post: operations["shareFailureGroup"];
1829
+ delete?: never;
1830
+ options?: never;
1831
+ head?: never;
1832
+ patch?: never;
1833
+ trace?: never;
1834
+ };
1835
+ "/api/failure-groups/match": {
1836
+ parameters: {
1837
+ query?: never;
1838
+ header?: never;
1839
+ path?: never;
1840
+ cookie?: never;
1841
+ };
1842
+ get?: never;
1843
+ put?: never;
1844
+ /**
1845
+ * 🤖 Run failure-group matchers against a case
1846
+ * @description Runs every open group's matcher (or the given group_ids, or one dry-run source) against a failed or flaky case and reports which returned true. Nothing is persisted: attach the case with POST /{id}/members. Matchers run in an isolated Worker with network limited to report storage, under a per-matcher time limit and the isolate's memory and CPU limits.
1847
+ */
1848
+ post: operations["matchFailureGroups"];
1849
+ delete?: never;
1850
+ options?: never;
1851
+ head?: never;
1852
+ patch?: never;
1853
+ trace?: never;
1854
+ };
1775
1855
  "/api/github/proxy": {
1776
1856
  parameters: {
1777
1857
  query?: never;
@@ -1783,7 +1863,7 @@ export interface paths {
1783
1863
  put?: never;
1784
1864
  /**
1785
1865
  * 🤖 Proxy a GitHub API request
1786
- * @description Forwards an authenticated request to the GitHub API and returns the GitHub response verbatim. The request's project (bound token, or the `x-project-id`/`x-project-slug` header) picks the GitHub App: its own repo goes through the main App; another repo the project's org installed the reporter App on is read through the reporter App, and writes to it are rejected. Without a project, the main App is used. Merging a pull request with `merge_method` `squash` or `rebase` is rejected; only merge commits are allowed. Other writes to a project's default or protected branches are refused, as git-worker refuses the equivalent push. Project API keys are read-only. Sandbox-delegation principals are additionally constrained by per-session proxy rules.
1866
+ * @description Forwards an authenticated request to the GitHub API and returns the GitHub response verbatim. The request's project (bound token, or the `x-project-id`/`x-project-slug` header) picks the GitHub App: its own repo goes through the main App; another repo the project's org installed the reporter App on is read through the reporter App, and writes to it are rejected. Without a project, the main App is used. Merging a pull request with `merge_method` `squash` or `rebase` is rejected; only merge commits are allowed, and creating a draft pull request is rejected. Other writes to a project's default or protected branches are refused, as git-worker refuses the equivalent push. Project API keys are read-only. Sandbox-delegation principals are additionally constrained by per-session proxy rules.
1787
1867
  */
1788
1868
  post: operations["githubProxy"];
1789
1869
  delete?: never;
@@ -1852,6 +1932,26 @@ export interface paths {
1852
1932
  patch?: never;
1853
1933
  trace?: never;
1854
1934
  };
1935
+ "/api/traces/query": {
1936
+ parameters: {
1937
+ query?: never;
1938
+ header?: never;
1939
+ path?: never;
1940
+ cookie?: never;
1941
+ };
1942
+ get?: never;
1943
+ put?: never;
1944
+ /**
1945
+ * 🤖 Run a trace-utils function on a case's trace
1946
+ * @description Calls one trace-utils function on the trace of a run's case (by default its last attempt with a trace) and returns the result. The trace is read in an isolated Worker with ranged reads; nothing is downloaded or stored.
1947
+ */
1948
+ post: operations["queryTrace"];
1949
+ delete?: never;
1950
+ options?: never;
1951
+ head?: never;
1952
+ patch?: never;
1953
+ trace?: never;
1954
+ };
1855
1955
  "/api/triage-statuses": {
1856
1956
  parameters: {
1857
1957
  query?: never;
@@ -2607,26 +2707,6 @@ export interface paths {
2607
2707
  patch?: never;
2608
2708
  trace?: never;
2609
2709
  };
2610
- "/api/chat-sessions/analytics/combined": {
2611
- parameters: {
2612
- query?: never;
2613
- header?: never;
2614
- path?: never;
2615
- cookie?: never;
2616
- };
2617
- /**
2618
- * ⚙️ Combined chat-session analytics
2619
- * @description Returns the caller's own and overall chat-session creation/merge charts. Super admins see global stats; other users are scoped to their orgs.
2620
- */
2621
- get: operations["getChatSessionCombinedAnalytics"];
2622
- put?: never;
2623
- post?: never;
2624
- delete?: never;
2625
- options?: never;
2626
- head?: never;
2627
- patch?: never;
2628
- trace?: never;
2629
- };
2630
2710
  "/api/chat-sessions/sandbox/branches": {
2631
2711
  parameters: {
2632
2712
  query?: never;
@@ -2799,46 +2879,6 @@ export interface paths {
2799
2879
  patch?: never;
2800
2880
  trace?: never;
2801
2881
  };
2802
- "/api/failure-groups/{id}/members/{test_case_id}": {
2803
- parameters: {
2804
- query?: never;
2805
- header?: never;
2806
- path?: never;
2807
- cookie?: never;
2808
- };
2809
- get?: never;
2810
- put?: never;
2811
- post?: never;
2812
- /**
2813
- * ⚙️ Detach a test from a failure group
2814
- * @description Records a human correction: this test does not belong to the group. Sticky — machine and agent attaches will not re-attach it; a later human attach supersedes the detach. Human-only.
2815
- */
2816
- delete: operations["detachFailureGroupMember"];
2817
- options?: never;
2818
- head?: never;
2819
- patch?: never;
2820
- trace?: never;
2821
- };
2822
- "/api/failure-groups/{id}/share": {
2823
- parameters: {
2824
- query?: never;
2825
- header?: never;
2826
- path?: never;
2827
- cookie?: never;
2828
- };
2829
- get?: never;
2830
- put?: never;
2831
- /**
2832
- * ⚙️ Share a failure group's diagnosis
2833
- * @description Posts this group's diagnosis to a chosen Slack destination, with a link back to the failure group. The diagnosis and header are read from the stored group, never the client. A thread reply must belong to a run in this project; the channel must be accessible to the project's organization.
2834
- */
2835
- post: operations["shareFailureGroup"];
2836
- delete?: never;
2837
- options?: never;
2838
- head?: never;
2839
- patch?: never;
2840
- trace?: never;
2841
- };
2842
2882
  "/api/flags": {
2843
2883
  parameters: {
2844
2884
  query?: never;
@@ -3091,6 +3131,26 @@ export interface paths {
3091
3131
  patch?: never;
3092
3132
  trace?: never;
3093
3133
  };
3134
+ "/api/github/pr/ready-for-review": {
3135
+ parameters: {
3136
+ query?: never;
3137
+ header?: never;
3138
+ path?: never;
3139
+ cookie?: never;
3140
+ };
3141
+ get?: never;
3142
+ put?: never;
3143
+ /**
3144
+ * ⚙️ Mark a pull request ready for review
3145
+ * @description Converts an open draft pull request to ready for review.
3146
+ */
3147
+ post: operations["markPullRequestReadyForReview"];
3148
+ delete?: never;
3149
+ options?: never;
3150
+ head?: never;
3151
+ patch?: never;
3152
+ trace?: never;
3153
+ };
3094
3154
  "/api/github/pr/review": {
3095
3155
  parameters: {
3096
3156
  query?: never;
@@ -4191,6 +4251,26 @@ export interface paths {
4191
4251
  patch?: never;
4192
4252
  trace?: never;
4193
4253
  };
4254
+ "/api/memories/classifications": {
4255
+ parameters: {
4256
+ query?: never;
4257
+ header?: never;
4258
+ path?: never;
4259
+ cookie?: never;
4260
+ };
4261
+ /**
4262
+ * 🛡️ 🧪 Memory classifications across projects
4263
+ * @description Returns every stored JEV classification under one vocabulary version, for all versions of all memories (soft-deleted included). A memory's current labels are the row for its latest version; rows for older versions mean it was edited since.
4264
+ */
4265
+ get: operations["listMemoryClassifications"];
4266
+ put?: never;
4267
+ post?: never;
4268
+ delete?: never;
4269
+ options?: never;
4270
+ head?: never;
4271
+ patch?: never;
4272
+ trace?: never;
4273
+ };
4194
4274
  "/api/metrics/project-last-7-days": {
4195
4275
  parameters: {
4196
4276
  query?: never;
@@ -5203,12 +5283,17 @@ export interface paths {
5203
5283
  cookie?: never;
5204
5284
  };
5205
5285
  /**
5206
- * ⚙️ Issue a realtime token
5207
- * @description Mints a short-lived token (1 hour TTL) the caller uses to open the realtime-worker WebSocket channel.
5286
+ * ⚙️ Issue an unscoped realtime token (deprecated)
5287
+ * @deprecated
5288
+ * @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.
5208
5289
  */
5209
5290
  get: operations["getRealtimeToken"];
5210
5291
  put?: never;
5211
- post?: never;
5292
+ /**
5293
+ * ⚙️ Issue a channel-scoped realtime token
5294
+ * @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.
5295
+ */
5296
+ post: operations["createRealtimeToken"];
5212
5297
  delete?: never;
5213
5298
  options?: never;
5214
5299
  head?: never;
@@ -8182,6 +8267,8 @@ export interface components {
8182
8267
  langfuse_trace_id: string | null;
8183
8268
  /** @description Whether the session is closed. */
8184
8269
  is_closed: boolean;
8270
+ /** @description For a manager closed by rollover, the manager session that took over. */
8271
+ superseded_by_session_id: number | null;
8185
8272
  /** @description Feature flags enabled for the session. */
8186
8273
  feature_flags: string[];
8187
8274
  /** @description Durable outbox row for the first message. */
@@ -9584,6 +9671,36 @@ export interface components {
9584
9671
  edited: number;
9585
9672
  deleted: number;
9586
9673
  };
9674
+ MemoryClassificationsResponse: {
9675
+ /** @description Response payload. */
9676
+ data: {
9677
+ vocabulary_version: number;
9678
+ classifications: components["schemas"]["MemoryClassification"][];
9679
+ };
9680
+ };
9681
+ MemoryClassification: {
9682
+ memory_id: number;
9683
+ /** @description Memory version number the labels apply to (v1 = create). */
9684
+ version: number;
9685
+ vocabulary_version: number;
9686
+ project_id: number;
9687
+ /** @description JEV model that answered, e.g. "jev-1.13.0". */
9688
+ model: string;
9689
+ retention: string;
9690
+ retention_confidence: number;
9691
+ subject: string;
9692
+ subject_confidence: number;
9693
+ role: string;
9694
+ role_confidence: number;
9695
+ /** @description Per-option probabilities for each axis. */
9696
+ probabilities: {
9697
+ [key: string]: {
9698
+ [key: string]: number;
9699
+ };
9700
+ };
9701
+ /** @description ISO 8601 timestamp. */
9702
+ classified_at: string;
9703
+ };
9587
9704
  MemoryWriteResponse: {
9588
9705
  /** @description Response payload. */
9589
9706
  data: {
@@ -10217,33 +10334,6 @@ export interface components {
10217
10334
  /** @description Avatar URL. */
10218
10335
  picture: string;
10219
10336
  };
10220
- ChatSessionCombinedAnalyticsResponse: {
10221
- /** @description Response payload. */
10222
- data: {
10223
- my: components["schemas"]["ChatSessionChartData"];
10224
- overall: components["schemas"]["ChatSessionChartData"];
10225
- /** @description Label for the `overall` chart. */
10226
- overallLabel: string;
10227
- };
10228
- };
10229
- ChatSessionChartData: {
10230
- /** @description Per-day session counts. */
10231
- daily: {
10232
- /** @description Day (ISO date). */
10233
- date: string;
10234
- /** @description Sessions created that day. */
10235
- created: number;
10236
- /** @description Sessions merged that day. */
10237
- merged: number;
10238
- }[];
10239
- /** @description Totals across the window. */
10240
- summary: {
10241
- total_created: number;
10242
- total_merged: number;
10243
- /** @description Merge rate as a percentage (0-100). */
10244
- merge_rate: number;
10245
- };
10246
- };
10247
10337
  ChatSessionListResponse: {
10248
10338
  /** @description The page of chat sessions. */
10249
10339
  data: components["schemas"]["ChatSessionListItem"][];
@@ -10300,6 +10390,8 @@ export interface components {
10300
10390
  langfuse_trace_id: string | null;
10301
10391
  /** @description Whether the session is closed. */
10302
10392
  is_closed: boolean;
10393
+ /** @description For a manager closed by rollover, the manager session that took over. */
10394
+ superseded_by_session_id: number | null;
10303
10395
  /** @description Feature flags enabled for the session. */
10304
10396
  feature_flags: string[];
10305
10397
  /** @description Resolved Supabase details for the creator. */
@@ -10399,6 +10491,8 @@ export interface components {
10399
10491
  langfuse_trace_id: string | null;
10400
10492
  /** @description Whether the session is closed. */
10401
10493
  is_closed: boolean;
10494
+ /** @description For a manager closed by rollover, the manager session that took over. */
10495
+ superseded_by_session_id: number | null;
10402
10496
  /** @description Feature flags enabled for the session. */
10403
10497
  feature_flags: string[];
10404
10498
  /** @description Durable outbox row for the first message. */
@@ -10725,6 +10819,15 @@ export interface components {
10725
10819
  };
10726
10820
  error: unknown;
10727
10821
  };
10822
+ GithubPrReadyForReviewResponse: {
10823
+ data: {
10824
+ /** @description Whether the PR is now ready for review. */
10825
+ ready: boolean;
10826
+ /** @description Human-readable status. */
10827
+ message: string;
10828
+ };
10829
+ error: unknown;
10830
+ };
10728
10831
  GithubPrReviewResponse: {
10729
10832
  /** @description Response payload. */
10730
10833
  data: {
@@ -10735,6 +10838,8 @@ export interface components {
10735
10838
  number: number;
10736
10839
  /** @enum {string} */
10737
10840
  status: "open" | "closed" | "merged";
10841
+ /** @description Whether the PR is a draft. */
10842
+ draft: boolean;
10738
10843
  url: string;
10739
10844
  title: string;
10740
10845
  description: string;
@@ -10770,6 +10875,8 @@ export interface components {
10770
10875
  status: "not_open" | "mergeable" | "not_mergeable" | "calculating";
10771
10876
  /** @description GitHub's mergeable_state value. */
10772
10877
  mergeable_state: string;
10878
+ /** @description Whether the PR is a draft. */
10879
+ draft: boolean;
10773
10880
  /** @description Base branch of the PR. */
10774
10881
  base: string;
10775
10882
  };
@@ -14122,6 +14229,18 @@ export interface components {
14122
14229
  /** @description Reason the realtime service is unavailable. */
14123
14230
  error: string;
14124
14231
  };
14232
+ ScopedRealtimeTokenResponse: {
14233
+ /** @description Signed token to authenticate the WebSocket. Opens only the channels listed in `channels`. */
14234
+ token: string;
14235
+ /** @description Unix epoch (seconds) when the token expires. */
14236
+ expires_at: number;
14237
+ /** @description The requested channels the caller may subscribe to. Channels left out are unknown, for another environment, or not accessible. */
14238
+ channels: string[];
14239
+ };
14240
+ CreateRealtimeTokenBody: {
14241
+ /** @description Channel names to subscribe to, e.g. `chat-sessions-project-<id>-<env>` or `test-run-<id>-<env>`. */
14242
+ channels: string[];
14243
+ };
14125
14244
  UsersListResponse: {
14126
14245
  /** @description Response payload. */
14127
14246
  data: components["schemas"]["UserWithConnectedAccounts"][];
@@ -19563,55 +19682,296 @@ export interface operations {
19563
19682
  };
19564
19683
  };
19565
19684
  };
19566
- githubProxy: {
19685
+ checkFailureGroupMatcherOverlap: {
19567
19686
  parameters: {
19568
19687
  query?: never;
19569
19688
  header?: never;
19570
- path?: never;
19689
+ path: {
19690
+ /** @description Failure group ID. */
19691
+ id: string;
19692
+ };
19571
19693
  cookie?: never;
19572
19694
  };
19573
19695
  requestBody?: {
19574
19696
  content: {
19575
19697
  "application/json": {
19576
- /** @description HTTP method for the GitHub request. */
19577
- method: string;
19578
- /** @description GitHub API path, e.g. `/repos/o/r`. */
19579
- url: string;
19580
- /** @description Request body for write methods. */
19581
- body?: {
19582
- [key: string]: unknown;
19583
- };
19584
- /** @description GitHub App installation owner. Inferred from `/repos/{owner}/{repo}` URLs when omitted; otherwise defaults to `empirical-run`. */
19585
- owner?: string;
19698
+ /** @description Candidate matcher source for this group: `async ({ testRun, testCase, traceUtils }) => boolean`. */
19699
+ source: string;
19586
19700
  };
19587
19701
  };
19588
19702
  };
19589
19703
  responses: {
19590
- /** @description The GitHub API JSON response, forwarded verbatim. */
19704
+ /** @description The other groups' cases the source claims. */
19591
19705
  200: {
19592
19706
  headers: {
19593
19707
  [name: string]: unknown;
19594
19708
  };
19595
19709
  content: {
19596
- "application/json": unknown;
19710
+ "application/json": {
19711
+ /** @description Response payload. */
19712
+ data: {
19713
+ /** @description Cases the source was run against. */
19714
+ checked_cases: number;
19715
+ /** @description Candidate cases whose run or case could not be loaded. */
19716
+ skipped_cases: number;
19717
+ /** @description True when candidates were dropped: more than 40 cases, or more than 500 open groups. */
19718
+ truncated: boolean;
19719
+ /** @description Other groups' members the source returned true for. Empty means no overlap was found among the checked cases. */
19720
+ claims: {
19721
+ group_id: string;
19722
+ label: string | null;
19723
+ test_run_id: number;
19724
+ pw_test_id: string;
19725
+ }[];
19726
+ /** @description Cases where the source errored or was not run: no verdict, not a claim. */
19727
+ errors: {
19728
+ group_id: string;
19729
+ label: string | null;
19730
+ test_run_id: number;
19731
+ pw_test_id: string;
19732
+ /** @description The matcher's error kind (compile, runtime, not_boolean, timeout, out_of_memory, executor), or budget when the check ran out of time before reaching the case. */
19733
+ error_kind: string;
19734
+ error: string;
19735
+ }[];
19736
+ };
19737
+ };
19597
19738
  };
19598
19739
  };
19599
- /** @description A proxy rule rejected the request (including a squash or rebase PR merge), or GitHub returned a client error. */
19600
- 400: {
19740
+ /** @description Group not found. */
19741
+ 404: {
19601
19742
  headers: {
19602
19743
  [name: string]: unknown;
19603
19744
  };
19604
19745
  content: {
19605
- "application/json": components["schemas"]["GithubProxyError"];
19746
+ "application/json": components["schemas"]["ErrorResponse"];
19606
19747
  };
19607
19748
  };
19608
- /** @description The URL uses a numeric repository id, the request writes to a protected branch, a project API key attempted a write, or a sandbox proxy rule forbade the request. */
19609
- 403: {
19749
+ };
19750
+ };
19751
+ detachFailureGroupMember: {
19752
+ parameters: {
19753
+ query?: never;
19754
+ header?: never;
19755
+ path: {
19756
+ /** @description Failure group id. */
19757
+ id: string;
19758
+ /** @description Member test to detach. */
19759
+ test_case_id: string;
19760
+ };
19761
+ cookie?: never;
19762
+ };
19763
+ requestBody?: never;
19764
+ responses: {
19765
+ /** @description Membership detached. */
19766
+ 200: {
19610
19767
  headers: {
19611
19768
  [name: string]: unknown;
19612
19769
  };
19613
19770
  content: {
19614
- "application/json": components["schemas"]["GithubProxyError"];
19771
+ "application/json": components["schemas"]["FailureGroupDetachMemberResponse"];
19772
+ };
19773
+ };
19774
+ /** @description Only humans and agents may detach a membership. */
19775
+ 403: {
19776
+ headers: {
19777
+ [name: string]: unknown;
19778
+ };
19779
+ content: {
19780
+ "application/json": components["schemas"]["ErrorResponse"];
19781
+ };
19782
+ };
19783
+ /** @description Group not found. */
19784
+ 404: {
19785
+ headers: {
19786
+ [name: string]: unknown;
19787
+ };
19788
+ content: {
19789
+ "application/json": components["schemas"]["ErrorResponse"];
19790
+ };
19791
+ };
19792
+ };
19793
+ };
19794
+ shareFailureGroup: {
19795
+ parameters: {
19796
+ query?: never;
19797
+ header?: never;
19798
+ path: {
19799
+ /** @description Failure group ID. */
19800
+ id: string;
19801
+ };
19802
+ cookie?: never;
19803
+ };
19804
+ requestBody?: {
19805
+ content: {
19806
+ "application/json": components["schemas"]["ShareFailureGroupRequest"];
19807
+ };
19808
+ };
19809
+ responses: {
19810
+ /** @description Diagnosis shared. */
19811
+ 200: {
19812
+ headers: {
19813
+ [name: string]: unknown;
19814
+ };
19815
+ content: {
19816
+ "application/json": components["schemas"]["FailureGroupShareResponse"];
19817
+ };
19818
+ };
19819
+ /** @description Invalid request or destination. */
19820
+ 400: {
19821
+ headers: {
19822
+ [name: string]: unknown;
19823
+ };
19824
+ content: {
19825
+ "application/json": components["schemas"]["ErrorResponse"];
19826
+ };
19827
+ };
19828
+ /** @description Group not found, or it has no diagnosis. */
19829
+ 404: {
19830
+ headers: {
19831
+ [name: string]: unknown;
19832
+ };
19833
+ content: {
19834
+ "application/json": components["schemas"]["ErrorResponse"];
19835
+ };
19836
+ };
19837
+ /** @description Failed to post message. */
19838
+ 500: {
19839
+ headers: {
19840
+ [name: string]: unknown;
19841
+ };
19842
+ content: {
19843
+ "application/json": components["schemas"]["ErrorResponse"];
19844
+ };
19845
+ };
19846
+ };
19847
+ };
19848
+ matchFailureGroups: {
19849
+ parameters: {
19850
+ query?: never;
19851
+ header?: never;
19852
+ path?: never;
19853
+ cookie?: never;
19854
+ };
19855
+ requestBody?: {
19856
+ content: {
19857
+ "application/json": {
19858
+ /** @description Run holding the case to match. */
19859
+ test_run_id: number;
19860
+ /** @description Case (Playwright test id) to match. Any status: failed or flaky. */
19861
+ pw_test_id: string;
19862
+ /** @description Dry-run this matcher source instead of the groups' matchers: `async ({ testRun, testCase, traceUtils }) => boolean`. */
19863
+ source?: string;
19864
+ /** @description Only run these groups' matchers. Default: every open group with a matcher. */
19865
+ group_ids?: string[];
19866
+ };
19867
+ };
19868
+ };
19869
+ responses: {
19870
+ /** @description Matcher results for the case. */
19871
+ 200: {
19872
+ headers: {
19873
+ [name: string]: unknown;
19874
+ };
19875
+ content: {
19876
+ "application/json": {
19877
+ /** @description Response payload. */
19878
+ data: {
19879
+ test_run_id: number;
19880
+ pw_test_id: string;
19881
+ /**
19882
+ * @description How many matchers returned true: one, several, or none.
19883
+ * @enum {string}
19884
+ */
19885
+ decision: "single" | "multiple" | "none";
19886
+ matched_group_ids: string[];
19887
+ candidate_count: number;
19888
+ /** @description True when the project has more than 500 open groups and only the most recently seen were run. */
19889
+ truncated: boolean;
19890
+ /** @description Matcher input contract the matchers ran under; store it with a matcher. */
19891
+ contract_version: number;
19892
+ results: {
19893
+ /** @description The group whose matcher ran; null for a dry-run source. */
19894
+ group_id: string | null;
19895
+ label: string | null;
19896
+ /** @description The matcher returned true. False on any error. */
19897
+ matched: boolean;
19898
+ error?: string;
19899
+ /** @description compile, runtime, not_a_function, not_boolean, timeout, out_of_memory, or executor. */
19900
+ error_kind?: string;
19901
+ duration_ms?: number;
19902
+ /** @description The matcher's console output. */
19903
+ logs: string[];
19904
+ /** @description Trace reads that threw, including ones the matcher caught: a false with trace errors means it could not tell, not that it did not match. */
19905
+ trace_errors: {
19906
+ fn: string;
19907
+ message: string;
19908
+ swallowed?: boolean;
19909
+ }[];
19910
+ }[];
19911
+ };
19912
+ };
19913
+ };
19914
+ };
19915
+ /** @description Test run or case not found. */
19916
+ 404: {
19917
+ headers: {
19918
+ [name: string]: unknown;
19919
+ };
19920
+ content: {
19921
+ "application/json": components["schemas"]["ErrorResponse"];
19922
+ };
19923
+ };
19924
+ };
19925
+ };
19926
+ githubProxy: {
19927
+ parameters: {
19928
+ query?: never;
19929
+ header?: never;
19930
+ path?: never;
19931
+ cookie?: never;
19932
+ };
19933
+ requestBody?: {
19934
+ content: {
19935
+ "application/json": {
19936
+ /** @description HTTP method for the GitHub request. */
19937
+ method: string;
19938
+ /** @description GitHub API path, e.g. `/repos/o/r`. */
19939
+ url: string;
19940
+ /** @description Request body for write methods. */
19941
+ body?: {
19942
+ [key: string]: unknown;
19943
+ };
19944
+ /** @description GitHub App installation owner. Inferred from `/repos/{owner}/{repo}` URLs when omitted; otherwise defaults to `empirical-run`. */
19945
+ owner?: string;
19946
+ };
19947
+ };
19948
+ };
19949
+ responses: {
19950
+ /** @description The GitHub API JSON response, forwarded verbatim. */
19951
+ 200: {
19952
+ headers: {
19953
+ [name: string]: unknown;
19954
+ };
19955
+ content: {
19956
+ "application/json": unknown;
19957
+ };
19958
+ };
19959
+ /** @description A proxy rule rejected the request (including a squash or rebase PR merge), or GitHub returned a client error. */
19960
+ 400: {
19961
+ headers: {
19962
+ [name: string]: unknown;
19963
+ };
19964
+ content: {
19965
+ "application/json": components["schemas"]["GithubProxyError"];
19966
+ };
19967
+ };
19968
+ /** @description The URL uses a numeric repository id, the request writes to a protected branch, a project API key attempted a write, or a sandbox proxy rule forbade the request. */
19969
+ 403: {
19970
+ headers: {
19971
+ [name: string]: unknown;
19972
+ };
19973
+ content: {
19974
+ "application/json": components["schemas"]["GithubProxyError"];
19615
19975
  };
19616
19976
  };
19617
19977
  /** @description Any other GitHub upstream status is forwarded verbatim with an `{ error }` body. */
@@ -19753,6 +20113,74 @@ export interface operations {
19753
20113
  };
19754
20114
  };
19755
20115
  };
20116
+ queryTrace: {
20117
+ parameters: {
20118
+ query?: never;
20119
+ header?: never;
20120
+ path?: never;
20121
+ cookie?: never;
20122
+ };
20123
+ requestBody?: {
20124
+ content: {
20125
+ "application/json": {
20126
+ /** @description Run holding the case. */
20127
+ test_run_id: number;
20128
+ /** @description Case (Playwright test id) whose trace to read. */
20129
+ pw_test_id: string;
20130
+ /** @description Attempt to read (retry_details.retries[].retryIndex). Default: the last attempt with a trace. */
20131
+ retry?: number;
20132
+ /**
20133
+ * @description trace-utils function to call: listSteps, getUniquePageIds, searchNetwork, getConsoleLogs, getWebSocketFrames, getDomSnapshot or extractScreenshots.
20134
+ * @enum {string}
20135
+ */
20136
+ fn: "listSteps" | "getUniquePageIds" | "searchNetwork" | "getConsoleLogs" | "getWebSocketFrames" | "getDomSnapshot" | "extractScreenshots";
20137
+ /** @description The function's arguments without `file` (e.g. { urlPattern, status, bodies } for searchNetwork). See the trace-utils skill. */
20138
+ args?: {
20139
+ [key: string]: unknown;
20140
+ };
20141
+ };
20142
+ };
20143
+ };
20144
+ responses: {
20145
+ /** @description The function's result. */
20146
+ 200: {
20147
+ headers: {
20148
+ [name: string]: unknown;
20149
+ };
20150
+ content: {
20151
+ "application/json": {
20152
+ /** @description Response payload. */
20153
+ data: {
20154
+ /** @description The trace.zip that was read. */
20155
+ file: string;
20156
+ retry: number;
20157
+ fn: string;
20158
+ /** @description What the trace-utils function returned (screenshots carry base64 image data). */
20159
+ result?: unknown;
20160
+ };
20161
+ };
20162
+ };
20163
+ };
20164
+ /** @description Test run, case, or trace not found. */
20165
+ 404: {
20166
+ headers: {
20167
+ [name: string]: unknown;
20168
+ };
20169
+ content: {
20170
+ "application/json": components["schemas"]["ErrorResponse"];
20171
+ };
20172
+ };
20173
+ /** @description The trace-utils call failed. */
20174
+ 422: {
20175
+ headers: {
20176
+ [name: string]: unknown;
20177
+ };
20178
+ content: {
20179
+ "application/json": components["schemas"]["ErrorResponse"];
20180
+ };
20181
+ };
20182
+ };
20183
+ };
19756
20184
  listTriageStatuses: {
19757
20185
  parameters: {
19758
20186
  query: {
@@ -21690,35 +22118,6 @@ export interface operations {
21690
22118
  };
21691
22119
  };
21692
22120
  };
21693
- getChatSessionCombinedAnalytics: {
21694
- parameters: {
21695
- query?: never;
21696
- header?: never;
21697
- path?: never;
21698
- cookie?: never;
21699
- };
21700
- requestBody?: never;
21701
- responses: {
21702
- /** @description Combined analytics charts. */
21703
- 200: {
21704
- headers: {
21705
- [name: string]: unknown;
21706
- };
21707
- content: {
21708
- "application/json": components["schemas"]["ChatSessionCombinedAnalyticsResponse"];
21709
- };
21710
- };
21711
- /** @description Unauthorized. */
21712
- 403: {
21713
- headers: {
21714
- [name: string]: unknown;
21715
- };
21716
- content: {
21717
- "application/json": components["schemas"]["ErrorResponse"];
21718
- };
21719
- };
21720
- };
21721
- };
21722
22121
  registerChatSessionSandboxBranches: {
21723
22122
  parameters: {
21724
22123
  query?: never;
@@ -22231,103 +22630,6 @@ export interface operations {
22231
22630
  };
22232
22631
  };
22233
22632
  };
22234
- detachFailureGroupMember: {
22235
- parameters: {
22236
- query?: never;
22237
- header?: never;
22238
- path: {
22239
- /** @description Failure group id. */
22240
- id: string;
22241
- /** @description Member test to detach. */
22242
- test_case_id: string;
22243
- };
22244
- cookie?: never;
22245
- };
22246
- requestBody?: never;
22247
- responses: {
22248
- /** @description Membership detached. */
22249
- 200: {
22250
- headers: {
22251
- [name: string]: unknown;
22252
- };
22253
- content: {
22254
- "application/json": components["schemas"]["FailureGroupDetachMemberResponse"];
22255
- };
22256
- };
22257
- /** @description Only humans may detach a membership. */
22258
- 403: {
22259
- headers: {
22260
- [name: string]: unknown;
22261
- };
22262
- content: {
22263
- "application/json": components["schemas"]["ErrorResponse"];
22264
- };
22265
- };
22266
- /** @description Group not found. */
22267
- 404: {
22268
- headers: {
22269
- [name: string]: unknown;
22270
- };
22271
- content: {
22272
- "application/json": components["schemas"]["ErrorResponse"];
22273
- };
22274
- };
22275
- };
22276
- };
22277
- shareFailureGroup: {
22278
- parameters: {
22279
- query?: never;
22280
- header?: never;
22281
- path: {
22282
- /** @description Failure group ID. */
22283
- id: string;
22284
- };
22285
- cookie?: never;
22286
- };
22287
- requestBody?: {
22288
- content: {
22289
- "application/json": components["schemas"]["ShareFailureGroupRequest"];
22290
- };
22291
- };
22292
- responses: {
22293
- /** @description Diagnosis shared. */
22294
- 200: {
22295
- headers: {
22296
- [name: string]: unknown;
22297
- };
22298
- content: {
22299
- "application/json": components["schemas"]["FailureGroupShareResponse"];
22300
- };
22301
- };
22302
- /** @description Invalid request or destination. */
22303
- 400: {
22304
- headers: {
22305
- [name: string]: unknown;
22306
- };
22307
- content: {
22308
- "application/json": components["schemas"]["ErrorResponse"];
22309
- };
22310
- };
22311
- /** @description Group not found, or it has no diagnosis. */
22312
- 404: {
22313
- headers: {
22314
- [name: string]: unknown;
22315
- };
22316
- content: {
22317
- "application/json": components["schemas"]["ErrorResponse"];
22318
- };
22319
- };
22320
- /** @description Failed to post message. */
22321
- 500: {
22322
- headers: {
22323
- [name: string]: unknown;
22324
- };
22325
- content: {
22326
- "application/json": components["schemas"]["ErrorResponse"];
22327
- };
22328
- };
22329
- };
22330
- };
22331
22633
  evaluateFlags: {
22332
22634
  parameters: {
22333
22635
  query: {
@@ -22900,7 +23202,7 @@ export interface operations {
22900
23202
  "application/json": components["schemas"]["GithubPrMergeResponse"];
22901
23203
  };
22902
23204
  };
22903
- /** @description The PR is not open, not mergeable, or GitHub refused the merge. */
23205
+ /** @description The PR is not open, is a draft, is not mergeable, or GitHub refused the merge. */
22904
23206
  400: {
22905
23207
  headers: {
22906
23208
  [name: string]: unknown;
@@ -22956,6 +23258,55 @@ export interface operations {
22956
23258
  };
22957
23259
  };
22958
23260
  };
23261
+ markPullRequestReadyForReview: {
23262
+ parameters: {
23263
+ query?: never;
23264
+ header?: never;
23265
+ path?: never;
23266
+ cookie?: never;
23267
+ };
23268
+ requestBody?: {
23269
+ content: {
23270
+ "application/json": {
23271
+ /** @description Repository owner. */
23272
+ owner: string;
23273
+ /** @description Repository name. */
23274
+ repo: string;
23275
+ /** @description Pull request number. */
23276
+ pull_number: number;
23277
+ };
23278
+ };
23279
+ };
23280
+ responses: {
23281
+ /** @description The PR is ready for review. */
23282
+ 200: {
23283
+ headers: {
23284
+ [name: string]: unknown;
23285
+ };
23286
+ content: {
23287
+ "application/json": components["schemas"]["GithubPrReadyForReviewResponse"];
23288
+ };
23289
+ };
23290
+ /** @description The PR is not open. */
23291
+ 400: {
23292
+ headers: {
23293
+ [name: string]: unknown;
23294
+ };
23295
+ content: {
23296
+ "application/json": components["schemas"]["GithubActionError"];
23297
+ };
23298
+ };
23299
+ /** @description Caller cannot access the project. */
23300
+ 403: {
23301
+ headers: {
23302
+ [name: string]: unknown;
23303
+ };
23304
+ content: {
23305
+ "application/json": components["schemas"]["ErrorResponse"];
23306
+ };
23307
+ };
23308
+ };
23309
+ };
22959
23310
  getPullRequestReview: {
22960
23311
  parameters: {
22961
23312
  query: {
@@ -25815,6 +26166,40 @@ export interface operations {
25815
26166
  };
25816
26167
  };
25817
26168
  };
26169
+ listMemoryClassifications: {
26170
+ parameters: {
26171
+ query?: {
26172
+ /** @description Limit to memories in this project. Defaults to all projects. */
26173
+ project_id?: number;
26174
+ /** @description Vocabulary version to read labels for. Defaults to the current vocabulary. */
26175
+ vocabulary_version?: number;
26176
+ };
26177
+ header?: never;
26178
+ path?: never;
26179
+ cookie?: never;
26180
+ };
26181
+ requestBody?: never;
26182
+ responses: {
26183
+ /** @description Memory classifications. */
26184
+ 200: {
26185
+ headers: {
26186
+ [name: string]: unknown;
26187
+ };
26188
+ content: {
26189
+ "application/json": components["schemas"]["MemoryClassificationsResponse"];
26190
+ };
26191
+ };
26192
+ /** @description Invalid request. */
26193
+ 400: {
26194
+ headers: {
26195
+ [name: string]: unknown;
26196
+ };
26197
+ content: {
26198
+ "application/json": components["schemas"]["ErrorResponse"];
26199
+ };
26200
+ };
26201
+ };
26202
+ };
25818
26203
  getProjectMetricsLast7Days: {
25819
26204
  parameters: {
25820
26205
  query?: never;
@@ -28364,6 +28749,57 @@ export interface operations {
28364
28749
  };
28365
28750
  };
28366
28751
  };
28752
+ createRealtimeToken: {
28753
+ parameters: {
28754
+ query?: never;
28755
+ header?: never;
28756
+ path?: never;
28757
+ cookie?: never;
28758
+ };
28759
+ requestBody?: {
28760
+ content: {
28761
+ "application/json": components["schemas"]["CreateRealtimeTokenBody"];
28762
+ };
28763
+ };
28764
+ responses: {
28765
+ /** @description The issued token and the channels it opens. */
28766
+ 200: {
28767
+ headers: {
28768
+ [name: string]: unknown;
28769
+ };
28770
+ content: {
28771
+ "application/json": components["schemas"]["ScopedRealtimeTokenResponse"];
28772
+ };
28773
+ };
28774
+ /** @description Invalid request. */
28775
+ 400: {
28776
+ headers: {
28777
+ [name: string]: unknown;
28778
+ };
28779
+ content: {
28780
+ "application/json": components["schemas"]["ErrorResponse"];
28781
+ };
28782
+ };
28783
+ /** @description None of the requested channels is accessible. */
28784
+ 403: {
28785
+ headers: {
28786
+ [name: string]: unknown;
28787
+ };
28788
+ content: {
28789
+ "application/json": components["schemas"]["ErrorResponse"];
28790
+ };
28791
+ };
28792
+ /** @description Realtime service is not configured. */
28793
+ 503: {
28794
+ headers: {
28795
+ [name: string]: unknown;
28796
+ };
28797
+ content: {
28798
+ "application/json": components["schemas"]["RealtimeUnavailableResponse"];
28799
+ };
28800
+ };
28801
+ };
28802
+ };
28367
28803
  listRecentPages: {
28368
28804
  parameters: {
28369
28805
  query?: never;