@empiricalrun/playwright-utils 0.61.2 → 0.62.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.
Files changed (29) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/dist/generated/api-worker-openapi.d.ts +290 -4
  3. package/dist/generated/api-worker-openapi.d.ts.map +1 -1
  4. package/dist/test/expect/visual.d.ts.map +1 -1
  5. package/dist/test/expect/visual.js +0 -7
  6. package/dist/test/index.d.ts.map +1 -1
  7. package/dist/test/index.js +10 -8
  8. package/dist/test/scripts/index.d.ts.map +1 -1
  9. package/dist/test/scripts/index.js +1 -6
  10. package/dist/test/scripts/pw-locator-patch/highlight/expect.js +1 -1
  11. package/dist/test/scripts/pw-locator-patch/highlight/hover.d.ts.map +1 -1
  12. package/dist/test/scripts/pw-locator-patch/highlight/hover.js +0 -1
  13. package/dist/test/scripts/pw-locator-patch/highlight/inner-text.js +1 -1
  14. package/dist/test/scripts/pw-locator-patch/highlight/input-value.js +1 -1
  15. package/dist/test/scripts/pw-locator-patch/highlight/is-checked.js +1 -1
  16. package/dist/test/scripts/pw-locator-patch/highlight/is-disabled.js +1 -1
  17. package/dist/test/scripts/pw-locator-patch/highlight/is-editable.js +1 -1
  18. package/dist/test/scripts/pw-locator-patch/highlight/text-content.js +1 -1
  19. package/dist/test/scripts/pw-locator-patch/utils/index.d.ts +1 -2
  20. package/dist/test/scripts/pw-locator-patch/utils/index.d.ts.map +1 -1
  21. package/dist/test/scripts/pw-locator-patch/utils/index.js +3 -25
  22. package/dist/test/types.d.ts +1 -0
  23. package/dist/test/types.d.ts.map +1 -1
  24. package/docs/fixtures.md +10 -8
  25. package/package.json +3 -3
  26. package/tsconfig.tsbuildinfo +1 -1
  27. package/dist/test/scripts/mouse-pointer.d.ts +0 -5
  28. package/dist/test/scripts/mouse-pointer.d.ts.map +0 -1
  29. package/dist/test/scripts/mouse-pointer.js +0 -125
package/CHANGELOG.md CHANGED
@@ -1,5 +1,21 @@
1
1
  # @empiricalrun/playwright-utils
2
2
 
3
+ ## 0.62.0
4
+
5
+ ### Minor Changes
6
+
7
+ - 771fafd: Use Playwright's built-in video action annotations instead of the injected mouse pointer highlighter
8
+
9
+ ## 0.61.3
10
+
11
+ ### Patch Changes
12
+
13
+ - Updated dependencies [842aeb6]
14
+ - @empiricalrun/r2-uploader@0.11.1
15
+ - @empiricalrun/cua@0.5.1
16
+ - @empiricalrun/llm@0.28.1
17
+ - @empiricalrun/reporter@0.30.2
18
+
3
19
  ## 0.61.2
4
20
 
5
21
  ### Patch Changes
@@ -1985,6 +1985,26 @@ export interface paths {
1985
1985
  patch: operations["updateApiKey"];
1986
1986
  trace?: never;
1987
1987
  };
1988
+ "/api/banners": {
1989
+ parameters: {
1990
+ query?: never;
1991
+ header?: never;
1992
+ path?: never;
1993
+ cookie?: never;
1994
+ };
1995
+ /**
1996
+ * 🛡️ List the dashboard's warning banners
1997
+ * @description The warnings shown at the top of the dashboard for the scoped project's org (unpaid invoices, failed renewal, usage limit, no plan, Jira and Slack reconnects). Reads stored state only, so it is cheap enough to call while server-rendering a page.
1998
+ */
1999
+ get: operations["listDashboardBanners"];
2000
+ put?: never;
2001
+ post?: never;
2002
+ delete?: never;
2003
+ options?: never;
2004
+ head?: never;
2005
+ patch?: never;
2006
+ trace?: never;
2007
+ };
1988
2008
  "/api/billing/month-summary": {
1989
2009
  parameters: {
1990
2010
  query?: never;
@@ -6976,6 +6996,135 @@ export interface components {
6976
6996
  }[];
6977
6997
  };
6978
6998
  };
6999
+ DashboardBannersResponse: {
7000
+ /** @description Response payload. */
7001
+ data: {
7002
+ /** @description Active banners, highest priority first. */
7003
+ banners: components["schemas"]["DashboardBanner"][];
7004
+ };
7005
+ };
7006
+ DashboardBanner: {
7007
+ /** @enum {string} */
7008
+ kind: "unpaid_invoices";
7009
+ params: {
7010
+ /** @description Sent invoices still unpaid at least a day past their due date. */
7011
+ overdue_count: number;
7012
+ /** @description How many of those are past the billing gate's overdue threshold. */
7013
+ escalated_count: number;
7014
+ };
7015
+ /** @description Higher shows first; the dashboard shows one at a time. */
7016
+ priority: number;
7017
+ /** @description Null when the banner can't be dismissed. */
7018
+ dismissal: {
7019
+ /** @description Stable for the fact the banner is about; a new fact (period, limit, missing scopes) makes a new key. */
7020
+ key: string;
7021
+ /** @description How long a dismissal lasts; null means until the key changes. */
7022
+ ttl_seconds: number | null;
7023
+ } | null;
7024
+ desktop_only: boolean;
7025
+ } | {
7026
+ /** @enum {string} */
7027
+ kind: "renewal_failed";
7028
+ params: Record<string, never>;
7029
+ /** @description Higher shows first; the dashboard shows one at a time. */
7030
+ priority: number;
7031
+ /** @description Null when the banner can't be dismissed. */
7032
+ dismissal: {
7033
+ /** @description Stable for the fact the banner is about; a new fact (period, limit, missing scopes) makes a new key. */
7034
+ key: string;
7035
+ /** @description How long a dismissal lasts; null means until the key changes. */
7036
+ ttl_seconds: number | null;
7037
+ } | null;
7038
+ desktop_only: boolean;
7039
+ } | {
7040
+ /** @enum {string} */
7041
+ kind: "usage_limit_reached";
7042
+ params: {
7043
+ /** @description The limit as a bill: plan price + cap. */
7044
+ limit_bill_cents: number;
7045
+ };
7046
+ /** @description Higher shows first; the dashboard shows one at a time. */
7047
+ priority: number;
7048
+ /** @description Null when the banner can't be dismissed. */
7049
+ dismissal: {
7050
+ /** @description Stable for the fact the banner is about; a new fact (period, limit, missing scopes) makes a new key. */
7051
+ key: string;
7052
+ /** @description How long a dismissal lasts; null means until the key changes. */
7053
+ ttl_seconds: number | null;
7054
+ } | null;
7055
+ desktop_only: boolean;
7056
+ } | {
7057
+ /** @enum {string} */
7058
+ kind: "usage_limit_warning";
7059
+ params: {
7060
+ /** @description Plan price + overage so far, as last evaluated. */
7061
+ bill_cents: number;
7062
+ /** @description The limit as a bill: plan price + cap. */
7063
+ limit_bill_cents: number;
7064
+ /** @enum {string} */
7065
+ period_kind: "month" | "cycle";
7066
+ period_start: string;
7067
+ /** @description Exclusive (ISO 8601). */
7068
+ period_end: string;
7069
+ };
7070
+ /** @description Higher shows first; the dashboard shows one at a time. */
7071
+ priority: number;
7072
+ /** @description Null when the banner can't be dismissed. */
7073
+ dismissal: {
7074
+ /** @description Stable for the fact the banner is about; a new fact (period, limit, missing scopes) makes a new key. */
7075
+ key: string;
7076
+ /** @description How long a dismissal lasts; null means until the key changes. */
7077
+ ttl_seconds: number | null;
7078
+ } | null;
7079
+ desktop_only: boolean;
7080
+ } | {
7081
+ /** @enum {string} */
7082
+ kind: "jira_reauthorization";
7083
+ params: {
7084
+ installation_id: number;
7085
+ };
7086
+ /** @description Higher shows first; the dashboard shows one at a time. */
7087
+ priority: number;
7088
+ /** @description Null when the banner can't be dismissed. */
7089
+ dismissal: {
7090
+ /** @description Stable for the fact the banner is about; a new fact (period, limit, missing scopes) makes a new key. */
7091
+ key: string;
7092
+ /** @description How long a dismissal lasts; null means until the key changes. */
7093
+ ttl_seconds: number | null;
7094
+ } | null;
7095
+ desktop_only: boolean;
7096
+ } | {
7097
+ /** @enum {string} */
7098
+ kind: "slack_permissions";
7099
+ params: {
7100
+ team_id: string;
7101
+ missing_scopes: string[];
7102
+ };
7103
+ /** @description Higher shows first; the dashboard shows one at a time. */
7104
+ priority: number;
7105
+ /** @description Null when the banner can't be dismissed. */
7106
+ dismissal: {
7107
+ /** @description Stable for the fact the banner is about; a new fact (period, limit, missing scopes) makes a new key. */
7108
+ key: string;
7109
+ /** @description How long a dismissal lasts; null means until the key changes. */
7110
+ ttl_seconds: number | null;
7111
+ } | null;
7112
+ desktop_only: boolean;
7113
+ } | {
7114
+ /** @enum {string} */
7115
+ kind: "no_billing_plan";
7116
+ params: Record<string, never>;
7117
+ /** @description Higher shows first; the dashboard shows one at a time. */
7118
+ priority: number;
7119
+ /** @description Null when the banner can't be dismissed. */
7120
+ dismissal: {
7121
+ /** @description Stable for the fact the banner is about; a new fact (period, limit, missing scopes) makes a new key. */
7122
+ key: string;
7123
+ /** @description How long a dismissal lasts; null means until the key changes. */
7124
+ ttl_seconds: number | null;
7125
+ } | null;
7126
+ desktop_only: boolean;
7127
+ };
6979
7128
  ClaimRunnerBackendResponse: {
6980
7129
  /** @description Response payload. */
6981
7130
  data: {
@@ -9435,12 +9584,67 @@ export interface components {
9435
9584
  edited: number;
9436
9585
  deleted: number;
9437
9586
  };
9438
- MemoryResponse: {
9587
+ MemoryWriteResponse: {
9439
9588
  /** @description Response payload. */
9440
9589
  data: {
9441
9590
  memory: components["schemas"]["Memory"];
9591
+ /** @description Memory write gate verdict for agent writes; null when the write was not classified. */
9592
+ gate: {
9593
+ /**
9594
+ * @description `rejected` = classified as failure/incident state; `error` = classification failed and the write was not checked.
9595
+ * @enum {string}
9596
+ */
9597
+ decision: "accepted" | "rejected" | "error";
9598
+ /**
9599
+ * @description `shadow` saves regardless of the decision; `enforce` refuses rejected writes.
9600
+ * @enum {string}
9601
+ */
9602
+ mode: "shadow" | "enforce";
9603
+ /** @description True when the write was refused. */
9604
+ blocked: boolean;
9605
+ reason: string;
9606
+ model: string | null;
9607
+ vocabulary_version: number | null;
9608
+ retention: string | null;
9609
+ retention_confidence: number | null;
9610
+ /** @description Probability of the failure/incident retention class; the write is rejected at or above the gate's threshold. */
9611
+ failure_incident_probability: number | null;
9612
+ subject: string | null;
9613
+ role: string | null;
9614
+ } | null;
9615
+ };
9616
+ };
9617
+ MemoryWriteRejectedResponse: {
9618
+ data: unknown;
9619
+ error: {
9620
+ /** @description Why the write was refused. */
9621
+ message: string;
9622
+ gate: components["schemas"]["MemoryWriteVerdict"];
9442
9623
  };
9443
9624
  };
9625
+ MemoryWriteVerdict: {
9626
+ /**
9627
+ * @description `rejected` = classified as failure/incident state; `error` = classification failed and the write was not checked.
9628
+ * @enum {string}
9629
+ */
9630
+ decision: "accepted" | "rejected" | "error";
9631
+ /**
9632
+ * @description `shadow` saves regardless of the decision; `enforce` refuses rejected writes.
9633
+ * @enum {string}
9634
+ */
9635
+ mode: "shadow" | "enforce";
9636
+ /** @description True when the write was refused. */
9637
+ blocked: boolean;
9638
+ reason: string;
9639
+ model: string | null;
9640
+ vocabulary_version: number | null;
9641
+ retention: string | null;
9642
+ retention_confidence: number | null;
9643
+ /** @description Probability of the failure/incident retention class; the write is rejected at or above the gate's threshold. */
9644
+ failure_incident_probability: number | null;
9645
+ subject: string | null;
9646
+ role: string | null;
9647
+ };
9444
9648
  CreateMemoryRequest: {
9445
9649
  /** @description Memory content (markdown). */
9446
9650
  content: string;
@@ -9455,6 +9659,12 @@ export interface components {
9455
9659
  /** @description Source file path for file-sourced memories; unique within the project. */
9456
9660
  source_path?: string | null;
9457
9661
  };
9662
+ MemoryResponse: {
9663
+ /** @description Response payload. */
9664
+ data: {
9665
+ memory: components["schemas"]["Memory"];
9666
+ };
9667
+ };
9458
9668
  UpdateMemoryRequest: {
9459
9669
  /** @description Memory content (markdown). */
9460
9670
  content?: string;
@@ -9924,6 +10134,26 @@ export interface components {
9924
10134
  /** @description Error message. */
9925
10135
  error: string;
9926
10136
  };
10137
+ SlackRunStartThreadReplacedError: {
10138
+ /** @description Error message. */
10139
+ error: string;
10140
+ /**
10141
+ * @description Machine-readable reason for the rejection.
10142
+ * @enum {string}
10143
+ */
10144
+ code: "run_start_thread_replaced";
10145
+ /** @description Test run whose run-start notification was replaced. */
10146
+ test_run_id: string;
10147
+ /** @description The run's current notification thread in the same channel, or null while the final notification is still being posted. */
10148
+ replacement: {
10149
+ /** @description Slack channel ID. */
10150
+ channel: string;
10151
+ /** @description Root timestamp to reply to instead. */
10152
+ thread_ts: string;
10153
+ /** @description Registered physical Slack root ID. */
10154
+ slack_thread_id: number;
10155
+ } | null;
10156
+ };
9927
10157
  SlackSupportedAction: {
9928
10158
  /**
9929
10159
  * @description Add a button that opens this pull request for review.
@@ -17349,6 +17579,15 @@ export interface operations {
17349
17579
  "application/json": components["schemas"]["SlackMessageError"];
17350
17580
  };
17351
17581
  };
17582
+ /** @description The thread was a test run's run-start notification, which was deleted when the run's final notification was posted. Reply in `replacement` instead. */
17583
+ 410: {
17584
+ headers: {
17585
+ [name: string]: unknown;
17586
+ };
17587
+ content: {
17588
+ "application/json": components["schemas"]["SlackRunStartThreadReplacedError"];
17589
+ };
17590
+ };
17352
17591
  /** @description Slack upstream error. */
17353
17592
  502: {
17354
17593
  headers: {
@@ -19934,6 +20173,35 @@ export interface operations {
19934
20173
  };
19935
20174
  };
19936
20175
  };
20176
+ listDashboardBanners: {
20177
+ parameters: {
20178
+ query?: never;
20179
+ header?: never;
20180
+ path?: never;
20181
+ cookie?: never;
20182
+ };
20183
+ requestBody?: never;
20184
+ responses: {
20185
+ /** @description Active banners. */
20186
+ 200: {
20187
+ headers: {
20188
+ [name: string]: unknown;
20189
+ };
20190
+ content: {
20191
+ "application/json": components["schemas"]["DashboardBannersResponse"];
20192
+ };
20193
+ };
20194
+ /** @description Missing project scope. */
20195
+ 400: {
20196
+ headers: {
20197
+ [name: string]: unknown;
20198
+ };
20199
+ content: {
20200
+ "application/json": components["schemas"]["ErrorResponse"];
20201
+ };
20202
+ };
20203
+ };
20204
+ };
19937
20205
  getBillingMonthSummary: {
19938
20206
  parameters: {
19939
20207
  query?: {
@@ -21040,7 +21308,7 @@ export interface operations {
21040
21308
  "application/json": {
21041
21309
  message: string;
21042
21310
  /** @enum {string} */
21043
- send_action: "steer" | "follow_up" | "stop";
21311
+ send_action: "steer" | "follow_up";
21044
21312
  created_by?: string | null;
21045
21313
  rpc_command_id?: string;
21046
21314
  /** @description When the caller is an agent session, wake it the next time this session waits for input (one-shot). Defaults to true; pass false for a fire-and-forget message. Ignored for other callers. */
@@ -25333,7 +25601,7 @@ export interface operations {
25333
25601
  [name: string]: unknown;
25334
25602
  };
25335
25603
  content: {
25336
- "application/json": components["schemas"]["MemoryResponse"];
25604
+ "application/json": components["schemas"]["MemoryWriteResponse"];
25337
25605
  };
25338
25606
  };
25339
25607
  /** @description Invalid request or missing project scope. */
@@ -25363,6 +25631,15 @@ export interface operations {
25363
25631
  "application/json": components["schemas"]["ErrorResponse"];
25364
25632
  };
25365
25633
  };
25634
+ /** @description Refused by the memory write gate: classified as failure/incident state. */
25635
+ 422: {
25636
+ headers: {
25637
+ [name: string]: unknown;
25638
+ };
25639
+ content: {
25640
+ "application/json": components["schemas"]["MemoryWriteRejectedResponse"];
25641
+ };
25642
+ };
25366
25643
  };
25367
25644
  };
25368
25645
  getMemory: {
@@ -25451,7 +25728,7 @@ export interface operations {
25451
25728
  [name: string]: unknown;
25452
25729
  };
25453
25730
  content: {
25454
- "application/json": components["schemas"]["MemoryResponse"];
25731
+ "application/json": components["schemas"]["MemoryWriteResponse"];
25455
25732
  };
25456
25733
  };
25457
25734
  /** @description Memory not found or not accessible. */
@@ -25463,6 +25740,15 @@ export interface operations {
25463
25740
  "application/json": components["schemas"]["ErrorResponse"];
25464
25741
  };
25465
25742
  };
25743
+ /** @description Refused by the memory write gate: classified as failure/incident state. */
25744
+ 422: {
25745
+ headers: {
25746
+ [name: string]: unknown;
25747
+ };
25748
+ content: {
25749
+ "application/json": components["schemas"]["MemoryWriteRejectedResponse"];
25750
+ };
25751
+ };
25466
25752
  };
25467
25753
  };
25468
25754
  listMemoryVersions: {