@empiricalrun/playwright-utils 0.38.2 → 0.38.4

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.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,20 @@
1
1
  # @empiricalrun/playwright-utils
2
2
 
3
+ ## 0.38.4
4
+
5
+ ### Patch Changes
6
+
7
+ - 48126ea: feat: cost tracking for overlay dismissals
8
+ - Updated dependencies [48126ea]
9
+ - @empiricalrun/test-gen@0.79.1
10
+ - @empiricalrun/llm@0.25.2
11
+
12
+ ## 0.38.3
13
+
14
+ ### Patch Changes
15
+
16
+ - cc335d4: fix: inline dashboard client type
17
+
3
18
  ## 0.38.2
4
19
 
5
20
  ### Patch Changes
@@ -1,4 +1,21 @@
1
- import type { IDashboardAPIClient } from "@empiricalrun/shared-types/api/base";
1
+ export interface IDashboardAPIClient {
2
+ request<T>(endpoint: string, options: {
3
+ params?: Record<string, string>;
4
+ body?: Record<string, unknown>;
5
+ method: "GET" | "POST" | "PUT" | "PATCH" | "DELETE";
6
+ }): Promise<T>;
7
+ callGitHubProxy<T>(opts: {
8
+ method: "GET" | "POST" | "PATCH" | "PUT" | "DELETE";
9
+ url: string;
10
+ body?: unknown;
11
+ }): Promise<T>;
12
+ callMailosaurProxy<T>(opts: {
13
+ method: "GET" | "POST" | "PATCH" | "PUT" | "DELETE";
14
+ path: string;
15
+ body?: unknown;
16
+ }): Promise<T>;
17
+ getBaseUrl(): string;
18
+ }
2
19
  type Link = {
3
20
  text?: string;
4
21
  href?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"mailosaur-client.d.ts","sourceRoot":"","sources":["../src/mailosaur-client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAC;AAE/E,KAAK,IAAI,GAAG;IACV,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB,CAAC;AAkCF,KAAK,sBAAsB,GAAG;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;CACjB,GAAG,CACA;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,KAAK,CAAA;CAAE,GACrC;IAAE,MAAM,CAAC,EAAE,KAAK,CAAC;IAAC,SAAS,EAAE,mBAAmB,CAAA;CAAE,CACrD,CAAC;AAEF,qBAAa,eAAe;IAC1B,OAAO,CAAC,MAAM,CAAC,CAAS;IACxB,OAAO,CAAC,SAAS,CAAC,CAAsB;IACxC,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,OAAO,CAAS;gBAEZ,IAAI,EAAE,sBAAsB;YAW1B,WAAW;IA0CnB,YAAY,CAChB,OAAO,EAAE,MAAM,EACf,MAAM,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,GAC1D,OAAO,CAAC,cAAc,CAAC;YAqBZ,iBAAiB;YA2EjB,cAAc;IA+B5B,OAAO,CAAC,kBAAkB;IAmB1B,OAAO,CAAC,KAAK;CAGd"}
1
+ {"version":3,"file":"mailosaur-client.d.ts","sourceRoot":"","sources":["../src/mailosaur-client.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,mBAAmB;IAClC,OAAO,CAAC,CAAC,EACP,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE;QACP,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAChC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC/B,MAAM,EAAE,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,OAAO,GAAG,QAAQ,CAAC;KACrD,GACA,OAAO,CAAC,CAAC,CAAC,CAAC;IACd,eAAe,CAAC,CAAC,EAAE,IAAI,EAAE;QACvB,MAAM,EAAE,KAAK,GAAG,MAAM,GAAG,OAAO,GAAG,KAAK,GAAG,QAAQ,CAAC;QACpD,GAAG,EAAE,MAAM,CAAC;QACZ,IAAI,CAAC,EAAE,OAAO,CAAC;KAChB,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IACf,kBAAkB,CAAC,CAAC,EAAE,IAAI,EAAE;QAC1B,MAAM,EAAE,KAAK,GAAG,MAAM,GAAG,OAAO,GAAG,KAAK,GAAG,QAAQ,CAAC;QACpD,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,CAAC,EAAE,OAAO,CAAC;KAChB,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IACf,UAAU,IAAI,MAAM,CAAC;CACtB;AAED,KAAK,IAAI,GAAG;IACV,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB,CAAC;AAkCF,KAAK,sBAAsB,GAAG;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;CACjB,GAAG,CACA;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,KAAK,CAAA;CAAE,GACrC;IAAE,MAAM,CAAC,EAAE,KAAK,CAAC;IAAC,SAAS,EAAE,mBAAmB,CAAA;CAAE,CACrD,CAAC;AAEF,qBAAa,eAAe;IAC1B,OAAO,CAAC,MAAM,CAAC,CAAS;IACxB,OAAO,CAAC,SAAS,CAAC,CAAsB;IACxC,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,OAAO,CAAS;gBAEZ,IAAI,EAAE,sBAAsB;YAW1B,WAAW;IA0CnB,YAAY,CAChB,OAAO,EAAE,MAAM,EACf,MAAM,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,GAC1D,OAAO,CAAC,cAAc,CAAC;YAqBZ,iBAAiB;YA2EjB,cAAc;IA+B5B,OAAO,CAAC,kBAAkB;IAmB1B,OAAO,CAAC,KAAK;CAGd"}
@@ -1,8 +1,17 @@
1
1
  import { TelemetryEvent } from "@empiricalrun/shared-types/telemetry";
2
2
  export declare function trackEvent(event: TelemetryEvent): Promise<void>;
3
3
  export declare function trackOverlayDismissed(opts: {
4
- overlayDescription: string;
5
- cacheHit: boolean;
4
+ description: string;
5
+ cache: boolean;
6
6
  success: boolean;
7
+ testName?: string;
8
+ tokens?: {
9
+ input: number;
10
+ output: number;
11
+ };
12
+ cost?: {
13
+ input: number;
14
+ output: number;
15
+ };
7
16
  }): void;
8
17
  //# sourceMappingURL=telemetry.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"telemetry.d.ts","sourceRoot":"","sources":["../src/telemetry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,sCAAsC,CAAC;AAKtE,wBAAsB,UAAU,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAqBrE;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE;IAC1C,kBAAkB,EAAE,MAAM,CAAC;IAC3B,QAAQ,EAAE,OAAO,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;CAClB,GAAG,IAAI,CAaP"}
1
+ {"version":3,"file":"telemetry.d.ts","sourceRoot":"","sources":["../src/telemetry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,sCAAsC,CAAC;AAKtE,wBAAsB,UAAU,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAqBrE;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE;IAC1C,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,OAAO,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAC3C,IAAI,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;CAC1C,GAAG,IAAI,CAkBP"}
package/dist/telemetry.js CHANGED
@@ -31,11 +31,16 @@ function trackOverlayDismissed(opts) {
31
31
  name: "overlay.dismissed",
32
32
  properties: {
33
33
  environment,
34
- overlay_description: opts.overlayDescription,
35
- cache_hit: opts.cacheHit,
34
+ overlay_description: opts.description,
35
+ cache_hit: opts.cache,
36
36
  success: opts.success,
37
37
  project_name: process.env.PROJECT_NAME ?? "",
38
38
  test_run_id: process.env.TEST_RUN_GITHUB_ACTION_ID ?? "",
39
+ test_name: opts.testName ?? "",
40
+ tokens_input: opts.tokens?.input ?? 0,
41
+ tokens_output: opts.tokens?.output ?? 0,
42
+ cost_input: opts.cost?.input ?? 0,
43
+ cost_output: opts.cost?.output ?? 0,
39
44
  },
40
45
  });
41
46
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/test/scripts/pw-locator-patch/dismiss-overlays/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAGxC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAG1C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAO9C,wBAAgB,gBAAgB,CAAC,YAAY,EAAE,MAAM,GAAG,SAAS,WAKhE;AAED,qBAAa,mBAAmB;IAOlB,OAAO,CAAC,QAAQ,CAAC,IAAI;IANjC,OAAO,CAAC,iBAAiB,CAIhB;gBAEoB,IAAI,EAAE,IAAI;IAEjC,WAAW;IAMX,GAAG,CACP,aAAa,EAAE,GAAG,EAClB,QAAQ,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,IAAI,EACvC,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,IAAI,CAAC;YA2CF,QAAQ;CAwCvB;AAED,wBAAgB,0BAA0B,CACxC,YAAY,EAAE,MAAM,GACnB,cAAc,GAAG,SAAS,CAiC5B"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/test/scripts/pw-locator-patch/dismiss-overlays/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAGxC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAG1C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAK9C,wBAAgB,gBAAgB,CAAC,YAAY,EAAE,MAAM,GAAG,SAAS,WAKhE;AAED,qBAAa,mBAAmB;IAOlB,OAAO,CAAC,QAAQ,CAAC,IAAI;IANjC,OAAO,CAAC,iBAAiB,CAIhB;gBAEoB,IAAI,EAAE,IAAI;IAEjC,WAAW;IAMX,GAAG,CACP,aAAa,EAAE,GAAG,EAClB,QAAQ,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,IAAI,EACvC,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,IAAI,CAAC;YAkDF,QAAQ;CA6BvB;AAED,wBAAgB,0BAA0B,CACxC,YAAY,EAAE,MAAM,GACnB,cAAc,GAAG,SAAS,CAiC5B"}
@@ -9,7 +9,6 @@ const cache_1 = require("./cache");
9
9
  const prompt_1 = require("./prompt");
10
10
  const utils_1 = require("./utils");
11
11
  const ERROR_SUBSTRING_INTERCEPTION = "intercepts pointer events";
12
- const PREFERRED_AGENT = "openai-cua";
13
12
  function isErrorSupported(errorMessage) {
14
13
  if (!errorMessage) {
15
14
  return false;
@@ -36,6 +35,7 @@ class OverlayDismissAgent {
36
35
  // Ignoring this error
37
36
  }
38
37
  const description = (0, utils_1.overlayDescription)(element) ?? "unknown";
38
+ const testName = testFn.info().title;
39
39
  reporter(`Attempting to auto-dismiss overlay: ${description}`);
40
40
  try {
41
41
  const text = await (0, utils_1.textContent)(this.page, element);
@@ -46,25 +46,30 @@ class OverlayDismissAgent {
46
46
  });
47
47
  if (success) {
48
48
  (0, telemetry_1.trackOverlayDismissed)({
49
- overlayDescription: description,
50
- cacheHit: true,
49
+ description,
50
+ cache: true,
51
51
  success: true,
52
+ testName,
52
53
  });
53
54
  return;
54
55
  }
55
- await this.runAgent(element, text, testFn);
56
+ const usage = await this.runAgent(element, text, testFn);
56
57
  (0, telemetry_1.trackOverlayDismissed)({
57
- overlayDescription: description,
58
- cacheHit: false,
58
+ description,
59
+ cache: false,
59
60
  success: true,
61
+ testName,
62
+ tokens: usage.tokens,
63
+ cost: usage.cost,
60
64
  });
61
65
  }
62
66
  catch (agentError) {
63
67
  reporter(`Error during overlay dismissal agent execution: ${agentError.toString()}`);
64
68
  (0, telemetry_1.trackOverlayDismissed)({
65
- overlayDescription: description,
66
- cacheHit: false,
69
+ description,
70
+ cache: false,
67
71
  success: false,
72
+ testName,
68
73
  });
69
74
  throw originalError;
70
75
  }
@@ -72,39 +77,24 @@ class OverlayDismissAgent {
72
77
  async runAgent(element, text, testFn) {
73
78
  const task = await (0, prompt_1.getTask)(this.page, element, text);
74
79
  const trace = (0, utils_1.traceThis)(task, testFn);
75
- if (PREFERRED_AGENT === "inhouse-master") {
76
- const result = await (0, run_1.createTestUsingMasterAgent)({
77
- task,
78
- page: this.page,
79
- options: {
80
- useActionSpecificAnnotations: true,
81
- },
82
- });
83
- this.cachingCandidates.push({
84
- dom: element?.interceptor,
85
- text,
86
- code: result.code,
87
- });
88
- }
89
- else if (PREFERRED_AGENT === "openai-cua") {
90
- const result = await (0, run_1.createTestUsingComputerUseAgent)({
91
- page: this.page,
92
- task,
93
- trace,
94
- // We don't want to use page.pause approach here because
95
- // overlay dismissal can kick in during a browser agent tool call
96
- // and we need app to be able to use page.pause for agent actions.
97
- // Currently, page.pause does not cleanup properly, causing it to work
98
- // only once in a particular test run.
99
- // Ran into this here: https://dash.empirical.run/quizizz-tests/sessions/2825
100
- prefersElementFromPointCodegen: true,
101
- });
102
- this.cachingCandidates.push({
103
- dom: element?.interceptor,
104
- text,
105
- code: result.code,
106
- });
107
- }
80
+ const result = await (0, run_1.createTestUsingComputerUseAgent)({
81
+ page: this.page,
82
+ task,
83
+ trace,
84
+ // We don't want to use page.pause approach here because
85
+ // overlay dismissal can kick in during a browser agent tool call
86
+ // and we need app to be able to use page.pause for agent actions.
87
+ // Currently, page.pause does not cleanup properly, causing it to work
88
+ // only once in a particular test run.
89
+ // Ran into this here: https://dash.empirical.run/quizizz-tests/sessions/2825
90
+ prefersElementFromPointCodegen: true,
91
+ });
92
+ this.cachingCandidates.push({
93
+ dom: element?.interceptor,
94
+ text,
95
+ code: result.code,
96
+ });
97
+ return result.usage;
108
98
  }
109
99
  }
110
100
  exports.OverlayDismissAgent = OverlayDismissAgent;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@empiricalrun/playwright-utils",
3
- "version": "0.38.2",
3
+ "version": "0.38.4",
4
4
  "publishConfig": {
5
5
  "registry": "https://registry.npmjs.org/",
6
6
  "access": "public"
@@ -42,9 +42,9 @@
42
42
  "console-log-level": "^1.4.1",
43
43
  "puppeteer-extra-plugin-recaptcha": "^3.6.8",
44
44
  "rimraf": "^6.0.1",
45
- "@empiricalrun/llm": "^0.25.1",
45
+ "@empiricalrun/llm": "^0.25.2",
46
46
  "@empiricalrun/r2-uploader": "^0.9.0",
47
- "@empiricalrun/test-gen": "^0.79.0"
47
+ "@empiricalrun/test-gen": "^0.79.1"
48
48
  },
49
49
  "scripts": {
50
50
  "dev": "tsc --build --watch",