@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 +15 -0
- package/dist/mailosaur-client.d.ts +18 -1
- package/dist/mailosaur-client.d.ts.map +1 -1
- package/dist/telemetry.d.ts +11 -2
- package/dist/telemetry.d.ts.map +1 -1
- package/dist/telemetry.js +7 -2
- package/dist/test/scripts/pw-locator-patch/dismiss-overlays/index.d.ts.map +1 -1
- package/dist/test/scripts/pw-locator-patch/dismiss-overlays/index.js +31 -41
- package/package.json +3 -3
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
|
-
|
|
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,
|
|
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"}
|
package/dist/telemetry.d.ts
CHANGED
|
@@ -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
|
-
|
|
5
|
-
|
|
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
|
package/dist/telemetry.d.ts.map
CHANGED
|
@@ -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,
|
|
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.
|
|
35
|
-
cache_hit: opts.
|
|
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":"
|
|
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
|
-
|
|
50
|
-
|
|
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
|
-
|
|
58
|
-
|
|
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
|
-
|
|
66
|
-
|
|
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
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
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.
|
|
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.
|
|
45
|
+
"@empiricalrun/llm": "^0.25.2",
|
|
46
46
|
"@empiricalrun/r2-uploader": "^0.9.0",
|
|
47
|
-
"@empiricalrun/test-gen": "^0.79.
|
|
47
|
+
"@empiricalrun/test-gen": "^0.79.1"
|
|
48
48
|
},
|
|
49
49
|
"scripts": {
|
|
50
50
|
"dev": "tsc --build --watch",
|