@loadmill/executer 0.1.197 → 0.1.199

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 (33) hide show
  1. package/dist/ai-assertion/index.js +2 -2
  2. package/dist/ai-assertion/index.js.map +1 -1
  3. package/dist/sequence-executor-like.d.ts +8 -0
  4. package/dist/sequence.js +68 -0
  5. package/dist/sequence.js.map +1 -1
  6. package/dist/step-handlers/playwright/constants.d.ts +2 -0
  7. package/dist/step-handlers/playwright/constants.js +4 -1
  8. package/dist/step-handlers/playwright/constants.js.map +1 -1
  9. package/dist/step-handlers/playwright/cua.d.ts +2 -0
  10. package/dist/step-handlers/playwright/cua.js +40 -0
  11. package/dist/step-handlers/playwright/cua.js.map +1 -0
  12. package/dist/step-handlers/playwright/index.d.ts +2 -2
  13. package/dist/step-handlers/playwright/index.js +11 -9
  14. package/dist/step-handlers/playwright/index.js.map +1 -1
  15. package/dist/step-handlers/playwright/sanitize-sensitive-text.d.ts +2 -0
  16. package/dist/step-handlers/playwright/sanitize-sensitive-text.js +20 -0
  17. package/dist/step-handlers/playwright/sanitize-sensitive-text.js.map +1 -0
  18. package/dist/step-handlers/playwright/transformer.d.ts +1 -1
  19. package/dist/step-handlers/playwright/transformer.js +6 -6
  20. package/dist/step-handlers/playwright/transformer.js.map +1 -1
  21. package/dist/step-handlers/playwright/types.d.ts +5 -0
  22. package/dist/step-handlers/playwright/types.js +1 -0
  23. package/dist/step-handlers/playwright/types.js.map +1 -1
  24. package/dist/step-handlers/playwright-shared-step-handler.d.ts +12 -0
  25. package/dist/step-handlers/playwright-shared-step-handler.js +155 -0
  26. package/dist/step-handlers/playwright-shared-step-handler.js.map +1 -0
  27. package/dist/step-handlers/playwright-step-handler.js +4 -128
  28. package/dist/step-handlers/playwright-step-handler.js.map +1 -1
  29. package/dist/step-handlers/ui-agent-step-handler.d.ts +18 -0
  30. package/dist/step-handlers/ui-agent-step-handler.js +262 -0
  31. package/dist/step-handlers/ui-agent-step-handler.js.map +1 -0
  32. package/dist/types/playwright.d.ts +1 -0
  33. package/package.json +3 -3
@@ -0,0 +1,262 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.UIAgentStepHandler = void 0;
4
+ var tslib_1 = require("tslib");
5
+ var constants_1 = require("@loadmill/core/dist/ui-agent-step/constants");
6
+ var parameters_1 = require("@loadmill/core/dist/parameters");
7
+ var type_guards_1 = require("@loadmill/core/dist/step/type-guards");
8
+ var playwright_step_1 = require("@loadmill/core/dist/playwright-step");
9
+ var superagent_1 = tslib_1.__importDefault(require("superagent"));
10
+ var files_manager_1 = require("./playwright/files-manager");
11
+ var cua_1 = require("./playwright/cua");
12
+ var playwright_shared_step_handler_1 = require("./playwright-shared-step-handler");
13
+ var errors_1 = require("../errors");
14
+ var constants_2 = require("@loadmill/universal/dist/openai/constants");
15
+ var constants_3 = require("./playwright/constants");
16
+ var uri_utils_1 = require("@loadmill/universal/dist/uri-utils");
17
+ var OPENAI_TIMEOUT_MS = 60000;
18
+ var UI_AGENT_VIDEO_EXTENSIONS = ['.webm', '.mp4'];
19
+ var UIAgentStepHandler = /** @class */ (function () {
20
+ function UIAgentStepHandler(context) {
21
+ Object.defineProperty(this, "context", {
22
+ enumerable: true,
23
+ configurable: true,
24
+ writable: true,
25
+ value: context
26
+ });
27
+ Object.defineProperty(this, "fileManager", {
28
+ enumerable: true,
29
+ configurable: true,
30
+ writable: true,
31
+ value: void 0
32
+ });
33
+ this.fileManager = new files_manager_1.PlaywrightFilesManager();
34
+ }
35
+ Object.defineProperty(UIAgentStepHandler.prototype, "canHandle", {
36
+ enumerable: false,
37
+ configurable: true,
38
+ writable: true,
39
+ value: function (step) {
40
+ return (0, type_guards_1.isUIAgentStep)(step);
41
+ }
42
+ });
43
+ Object.defineProperty(UIAgentStepHandler.prototype, "execute", {
44
+ enumerable: false,
45
+ configurable: true,
46
+ writable: true,
47
+ value: function (step, index) {
48
+ var _a, _b;
49
+ return tslib_1.__awaiter(this, void 0, void 0, function () {
50
+ var resolvedStep, openaiApiKey, playwrightStep, playwrightEnvVars, res, err_1;
51
+ var _c;
52
+ return tslib_1.__generator(this, function (_d) {
53
+ switch (_d.label) {
54
+ case 0:
55
+ resolvedStep = this._resolveStepExpressions(step);
56
+ this.context.saveResolvedStep(index, resolvedStep);
57
+ openaiApiKey = ((_b = (_a = this.context.integrations) === null || _a === void 0 ? void 0 : _a.openai) === null || _b === void 0 ? void 0 : _b.apiKey) || process.env[constants_3.UI_AGENT_OPENAI_API_KEY_ENV_VAR];
58
+ if (!openaiApiKey) {
59
+ throw new errors_1.RequestFailuresError('UI Agent execution failed: missing OpenAI API key.');
60
+ }
61
+ _d.label = 1;
62
+ case 1:
63
+ _d.trys.push([1, 4, , 7]);
64
+ playwrightStep = this._convertToPlaywrightStep(resolvedStep);
65
+ playwrightEnvVars = (_c = {},
66
+ _c[constants_3.UI_AGENT_OPENAI_API_KEY_ENV_VAR] = openaiApiKey,
67
+ _c.LOG_LEVEL = process.env.LOG_LEVEL,
68
+ _c);
69
+ return [4 /*yield*/, (0, playwright_shared_step_handler_1.executeWithPlaywrightWrapper)(playwrightStep, index, this.fileManager, this.context, tslib_1.__assign(tslib_1.__assign({}, this.context.playwrightOptions), { takeScreenshotPerTest: true, takeUIAgentVideoPerTest: true }), { shouldSaveHtmlReport: false, shouldSaveStdout: false }, playwrightEnvVars)];
70
+ case 2:
71
+ res = _d.sent();
72
+ return [4 /*yield*/, this._judgeUIAgentStep(resolvedStep, index, openaiApiKey)];
73
+ case 3:
74
+ _d.sent();
75
+ return [2 /*return*/, res];
76
+ case 4:
77
+ err_1 = _d.sent();
78
+ if (!this.context.isPlaywrightTestExecuted(index)) return [3 /*break*/, 6];
79
+ return [4 /*yield*/, this._judgeUIAgentStep(resolvedStep, index, openaiApiKey, err_1)];
80
+ case 5:
81
+ _d.sent();
82
+ // If the judge doesn't throw an error, we return a successful response with empty data, since the playwright script could have failed but the step still passed according to the validation.
83
+ return [2 /*return*/, {}];
84
+ case 6: throw err_1;
85
+ case 7: return [2 /*return*/];
86
+ }
87
+ });
88
+ });
89
+ }
90
+ });
91
+ Object.defineProperty(UIAgentStepHandler.prototype, "_resolveStepExpressions", {
92
+ enumerable: false,
93
+ configurable: true,
94
+ writable: true,
95
+ value: function (step) {
96
+ return tslib_1.__assign(tslib_1.__assign({}, step), { url: (0, uri_utils_1.withProtocol)(parameters_1.parameterUtils.resolveExpression(step.url, this.context.parameters)), instructions: parameters_1.parameterUtils.resolveExpression(step.instructions, this.context.parameters), validation: parameters_1.parameterUtils.resolveExpression(step.validation, this.context.parameters) });
97
+ }
98
+ });
99
+ Object.defineProperty(UIAgentStepHandler.prototype, "processSuccessfulResponse", {
100
+ enumerable: false,
101
+ configurable: true,
102
+ writable: true,
103
+ value: function (_step, index, _res) {
104
+ return tslib_1.__awaiter(this, void 0, void 0, function () {
105
+ return tslib_1.__generator(this, function (_a) {
106
+ switch (_a.label) {
107
+ case 0: return [4 /*yield*/, (0, playwright_shared_step_handler_1.processSuccessfulPlaywrightStepResponse)(this.context, index)];
108
+ case 1: return [2 /*return*/, _a.sent()];
109
+ }
110
+ });
111
+ });
112
+ }
113
+ });
114
+ Object.defineProperty(UIAgentStepHandler.prototype, "_convertToPlaywrightStep", {
115
+ enumerable: false,
116
+ configurable: true,
117
+ writable: true,
118
+ value: function (uiAgentStep) {
119
+ var playwrightStep = new playwright_step_1.PlaywrightStep();
120
+ playwrightStep.id = uiAgentStep.id;
121
+ playwrightStep.description = uiAgentStep.description;
122
+ playwrightStep.timeout = uiAgentStep.timeout || constants_1.DEFAULT_UI_AGENT_TIMEOUT;
123
+ playwrightStep.postScript = (0, cua_1.createCUACode)(uiAgentStep);
124
+ playwrightStep.headedMode = uiAgentStep.headedMode;
125
+ return playwrightStep;
126
+ }
127
+ });
128
+ Object.defineProperty(UIAgentStepHandler.prototype, "_judgeUIAgentStep", {
129
+ enumerable: false,
130
+ configurable: true,
131
+ writable: true,
132
+ value: function (step, index, openaiApiKey, err) {
133
+ var _a;
134
+ return tslib_1.__awaiter(this, void 0, void 0, function () {
135
+ var validation, screenshotBase64, judgeResponse, judge, explanation;
136
+ return tslib_1.__generator(this, function (_b) {
137
+ switch (_b.label) {
138
+ case 0:
139
+ validation = (_a = step.validation) === null || _a === void 0 ? void 0 : _a.trim();
140
+ if (!validation) {
141
+ if (err) {
142
+ throw err;
143
+ }
144
+ return [2 /*return*/];
145
+ }
146
+ screenshotBase64 = this.context.getStepScreenshotBase64(index);
147
+ if (!screenshotBase64) {
148
+ throw new errors_1.RequestFailuresError('UI Agent validation failed: missing final screenshot for judge.');
149
+ }
150
+ return [4 /*yield*/, this._callOpenAiForJudgement(openaiApiKey, step, screenshotBase64, err)];
151
+ case 1:
152
+ judgeResponse = _b.sent();
153
+ judge = this._extractJudgeResult(judgeResponse.body());
154
+ explanation = String(judge.explanation || 'UI Agent validation failed.');
155
+ this.context.setAIReasoning(index, explanation);
156
+ if (judge.pass) {
157
+ if (!this.context.playwrightOptions.takeUIAgentVideoPerTest) {
158
+ this.context.removeStepAttachmentsByExtension(index, UI_AGENT_VIDEO_EXTENSIONS);
159
+ }
160
+ return [2 /*return*/];
161
+ }
162
+ throw new errors_1.RequestFailuresError("UI Agent validation failed: ".concat(explanation));
163
+ }
164
+ });
165
+ });
166
+ }
167
+ });
168
+ Object.defineProperty(UIAgentStepHandler.prototype, "_callOpenAiForJudgement", {
169
+ enumerable: false,
170
+ configurable: true,
171
+ writable: true,
172
+ value: function (openaiApiKey, step, screenshotBase64, err) {
173
+ return tslib_1.__awaiter(this, void 0, void 0, function () {
174
+ return tslib_1.__generator(this, function (_a) {
175
+ switch (_a.label) {
176
+ case 0: return [4 /*yield*/, superagent_1.default
177
+ .post(constants_2.OPENAI_RESPONSES_API_URL)
178
+ .set('Authorization', "Bearer ".concat(openaiApiKey))
179
+ .set('Content-Type', 'application/json')
180
+ .timeout(OPENAI_TIMEOUT_MS)
181
+ .send({
182
+ model: constants_2.OPENAI_CHAT_MODELS.GPT_5,
183
+ input: createValidationInput(step, screenshotBase64, err),
184
+ text: validationResponseSchema,
185
+ })];
186
+ case 1: return [2 /*return*/, _a.sent()];
187
+ }
188
+ });
189
+ });
190
+ }
191
+ });
192
+ Object.defineProperty(UIAgentStepHandler.prototype, "_extractJudgeResult", {
193
+ enumerable: false,
194
+ configurable: true,
195
+ writable: true,
196
+ value: function (response) {
197
+ try {
198
+ var output = Array.isArray(response === null || response === void 0 ? void 0 : response.output) ? response.output : [];
199
+ for (var _i = 0, output_1 = output; _i < output_1.length; _i++) {
200
+ var item = output_1[_i];
201
+ var content = Array.isArray(item === null || item === void 0 ? void 0 : item.content) ? item.content : [];
202
+ for (var _a = 0, content_1 = content; _a < content_1.length; _a++) {
203
+ var part = content_1[_a];
204
+ if (typeof (part === null || part === void 0 ? void 0 : part.text) === 'string' && part.text.trim().startsWith('{')) {
205
+ return JSON.parse(part.text);
206
+ }
207
+ }
208
+ }
209
+ }
210
+ catch (_b) { }
211
+ throw new errors_1.RequestFailuresError('UI Agent validation failed: Failed to judge the final state of the UI.');
212
+ }
213
+ });
214
+ return UIAgentStepHandler;
215
+ }());
216
+ exports.UIAgentStepHandler = UIAgentStepHandler;
217
+ var validationResponseSchema = {
218
+ format: {
219
+ type: 'json_schema',
220
+ name: 'ui_agent_judge',
221
+ strict: true,
222
+ schema: {
223
+ type: 'object',
224
+ additionalProperties: false,
225
+ properties: {
226
+ pass: { type: 'boolean' },
227
+ explanation: { type: 'string' },
228
+ },
229
+ required: ['pass', 'explanation'],
230
+ },
231
+ },
232
+ };
233
+ function createValidationInput(step, screenshotBase64, err) {
234
+ var _a, _b;
235
+ var validation = (_a = step.validation) === null || _a === void 0 ? void 0 : _a.trim();
236
+ var instructions = (_b = step.instructions) === null || _b === void 0 ? void 0 : _b.trim();
237
+ return [
238
+ {
239
+ role: 'system',
240
+ content: [
241
+ {
242
+ type: 'input_text',
243
+ text: 'You are a strict UI validation judge. Decide if the screenshot satisfies the validation statement. Return JSON only.',
244
+ },
245
+ ],
246
+ },
247
+ {
248
+ role: 'user',
249
+ content: [
250
+ {
251
+ type: 'input_text',
252
+ text: "Validation statement:\n ".concat(validation, " \n ").concat(instructions ? "The instructions given to the UI agent were: ".concat(instructions) : '', "\n ").concat(err ? "\n An error was thrown during execution: ".concat(String(err), "\n \n Please consider this in your judgment and provide feedback accordingly. \n If the validation statement is satisfied, still return pass=true but mention the error in the explanation.\n Don't expose sensitive information.") : ''),
253
+ },
254
+ {
255
+ type: 'input_image',
256
+ image_url: "data:image/png;base64,".concat(screenshotBase64),
257
+ },
258
+ ],
259
+ },
260
+ ];
261
+ }
262
+ //# sourceMappingURL=ui-agent-step-handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ui-agent-step-handler.js","sourceRoot":"","sources":["../../src/step-handlers/ui-agent-step-handler.ts"],"names":[],"mappings":";;;;AAEA,yEAAuF;AACvF,6DAAgE;AAChE,oEAAqE;AACrE,uEAAqE;AACrE,kEAAoC;AAKpC,4DAAoE;AACpE,wCAAiD;AACjD,mFAG0C;AAC1C,oCAAiD;AACjD,uEAAyG;AACzG,oDAAyE;AACzE,gEAAkE;AAElE,IAAM,iBAAiB,GAAG,KAAK,CAAC;AAChC,IAAM,yBAAyB,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;AAEpD;IAGE,4BAAoB,OAA6B;;;;;mBAA7B;;QAFpB;;;;;WAA4C;QAG1C,IAAI,CAAC,WAAW,GAAG,IAAI,sCAAsB,EAAE,CAAC;IAClD,CAAC;;;;;eAED,UAAU,IAAU;YAClB,OAAO,IAAA,2BAAa,EAAC,IAAI,CAAC,CAAC;QAC7B,CAAC;;;;;;eAED,UAAc,IAAiB,EAAE,KAAa;;;;;;;;4BACtC,YAAY,GAAG,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,CAAC;4BACxD,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;4BAC7C,YAAY,GAAG,CAAA,MAAA,MAAA,IAAI,CAAC,OAAO,CAAC,YAAY,0CAAE,MAAM,0CAAE,MAAM,KAAI,OAAO,CAAC,GAAG,CAAC,2CAA+B,CAAC,CAAC;4BAC/G,IAAI,CAAC,YAAY,EAAE;gCACjB,MAAM,IAAI,6BAAoB,CAAC,oDAAoD,CAAC,CAAC;6BACtF;;;;4BAGO,cAAc,GAAG,IAAI,CAAC,wBAAwB,CAAC,YAAY,CAAC,CAAC;4BAE7D,iBAAiB;gCACrB,GAAC,2CAA+B,IAAG,YAAY;gCAC/C,YAAS,GAAE,OAAO,CAAC,GAAG,CAAC,SAAS;mCACjC,CAAC;4BAEU,qBAAM,IAAA,6DAA4B,EAC5C,cAAc,EACd,KAAK,EACL,IAAI,CAAC,WAAW,EAChB,IAAI,CAAC,OAAO,wCAEP,IAAI,CAAC,OAAO,CAAC,iBAAiB,KACjC,qBAAqB,EAAE,IAAI,EAC3B,uBAAuB,EAAE,IAAI,KAE/B,EAAE,oBAAoB,EAAE,KAAK,EAAE,gBAAgB,EAAE,KAAK,EAAE,EACxD,iBAAiB,CAClB,EAAA;;4BAZK,GAAG,GAAG,SAYX;4BACD,qBAAM,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE,KAAK,EAAE,YAAY,CAAC,EAAA;;4BAA/D,SAA+D,CAAC;4BAChE,sBAAO,GAAG,EAAC;;;iCAEP,IAAI,CAAC,OAAO,CAAC,wBAAwB,CAAC,KAAK,CAAC,EAA5C,wBAA4C;4BAC9C,qBAAM,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE,KAAK,EAAE,YAAY,EAAE,KAAG,CAAC,EAAA;;4BAApE,SAAoE,CAAC;4BACrE,6LAA6L;4BAC7L,sBAAO,EAAE,EAAC;gCAEZ,MAAM,KAAG,CAAC;;;;;SAEb;;;;;;eAED,UAAwB,IAAiB;YACvC,6CACK,IAAI,KACP,GAAG,EAAE,IAAA,wBAAY,EAAC,2BAAc,CAAC,iBAAiB,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,EACtF,YAAY,EAAE,2BAAc,CAAC,iBAAiB,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,EAC1F,UAAU,EAAE,2BAAc,CAAC,iBAAiB,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,IACtF;QACJ,CAAC;;;;;;eAED,UAAgC,KAAW,EAAE,KAAa,EAAE,IAAgB;;;;gCACnE,qBAAM,IAAA,wEAAuC,EAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,EAAA;gCAAzE,sBAAO,SAAkE,EAAC;;;;SAC3E;;;;;;eAED,UAAiC,WAAwB;YACvD,IAAM,cAAc,GAAG,IAAI,gCAAc,EAAE,CAAC;YAC5C,cAAc,CAAC,EAAE,GAAG,WAAW,CAAC,EAAE,CAAC;YACnC,cAAc,CAAC,WAAW,GAAG,WAAW,CAAC,WAAW,CAAC;YACrD,cAAc,CAAC,OAAO,GAAG,WAAW,CAAC,OAAO,IAAI,oCAAwB,CAAC;YACzE,cAAc,CAAC,UAAU,GAAG,IAAA,mBAAa,EAAC,WAAW,CAAC,CAAC;YACvD,cAAc,CAAC,UAAU,GAAG,WAAW,CAAC,UAAU,CAAC;YACnD,OAAO,cAAc,CAAC;QACxB,CAAC;;;;;;eAED,UAAgC,IAAiB,EAAE,KAAa,EAAE,YAAoB,EAAE,GAAI;;;;;;;4BACpF,UAAU,GAAG,MAAA,IAAI,CAAC,UAAU,0CAAE,IAAI,EAAE,CAAC;4BAC3C,IAAI,CAAC,UAAU,EAAE;gCACf,IAAI,GAAG,EAAE;oCACP,MAAM,GAAG,CAAC;iCACX;gCACD,sBAAO;6BACR;4BAEK,gBAAgB,GAAG,IAAI,CAAC,OAAO,CAAC,uBAAuB,CAAC,KAAK,CAAC,CAAC;4BACrE,IAAI,CAAC,gBAAgB,EAAE;gCACrB,MAAM,IAAI,6BAAoB,CAAC,iEAAiE,CAAC,CAAC;6BACnG;4BAEqB,qBAAM,IAAI,CAAC,uBAAuB,CAAC,YAAY,EAAE,IAAI,EAAE,gBAAgB,EAAE,GAAG,CAAC,EAAA;;4BAA7F,aAAa,GAAG,SAA6E;4BAE7F,KAAK,GAAG,IAAI,CAAC,mBAAmB,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC,CAAC;4BACvD,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC,WAAW,IAAI,6BAA6B,CAAC,CAAC;4BAC/E,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;4BAChD,IAAI,KAAK,CAAC,IAAI,EAAE;gCACd,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,uBAAuB,EAAE;oCAC3D,IAAI,CAAC,OAAO,CAAC,gCAAgC,CAAC,KAAK,EAAE,yBAAyB,CAAC,CAAC;iCACjF;gCACD,sBAAO;6BACR;4BACD,MAAM,IAAI,6BAAoB,CAAC,sCAA+B,WAAW,CAAE,CAAC,CAAC;;;;SAC9E;;;;;;eAED,UACE,YAAoB,EACpB,IAAiB,EACjB,gBAAwB,EACxB,GAAI;;;;gCAEG,qBAAM,oBAAU;iCACpB,IAAI,CAAC,oCAAwB,CAAC;iCAC9B,GAAG,CAAC,eAAe,EAAE,iBAAU,YAAY,CAAE,CAAC;iCAC9C,GAAG,CAAC,cAAc,EAAE,kBAAkB,CAAC;iCACvC,OAAO,CAAC,iBAAiB,CAAC;iCAC1B,IAAI,CAAC;gCACJ,KAAK,EAAE,8BAAkB,CAAC,KAAK;gCAC/B,KAAK,EAAE,qBAAqB,CAAC,IAAI,EAAE,gBAAgB,EAAE,GAAG,CAAC;gCACzD,IAAI,EAAE,wBAAwB;6BAC/B,CAAC,EAAA;gCATJ,sBAAO,SASH,EAAC;;;;SACN;;;;;;eAED,UAA4B,QAAa;YACvC,IAAI;gBACF,IAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;gBACtE,KAAmB,UAAM,EAAN,iBAAM,EAAN,oBAAM,EAAN,IAAM,EAAE;oBAAtB,IAAM,IAAI,eAAA;oBACb,IAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;oBACjE,KAAmB,UAAO,EAAP,mBAAO,EAAP,qBAAO,EAAP,IAAO,EAAE;wBAAvB,IAAM,IAAI,gBAAA;wBACb,IAAI,OAAO,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,IAAI,CAAA,KAAK,QAAQ,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE;4BACtE,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;yBAC9B;qBACF;iBACF;aACF;YAAC,WAAM,GAAE;YACV,MAAM,IAAI,6BAAoB,CAAC,wEAAwE,CAAC,CAAC;QAC3G,CAAC;;IACH,yBAAC;AAAD,CAAC,AAvID,IAuIC;AAvIY,gDAAkB;AAyI/B,IAAM,wBAAwB,GAAG;IAC/B,MAAM,EAAE;QACN,IAAI,EAAE,aAAa;QACnB,IAAI,EAAE,gBAAgB;QACtB,MAAM,EAAE,IAAI;QACZ,MAAM,EAAE;YACN,IAAI,EAAE,QAAQ;YACd,oBAAoB,EAAE,KAAK;YAC3B,UAAU,EAAE;gBACV,IAAI,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;gBACzB,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;aAChC;YACD,QAAQ,EAAE,CAAC,MAAM,EAAE,aAAa,CAAC;SAClC;KACF;CACF,CAAC;AAEF,SAAS,qBAAqB,CAAC,IAAiB,EAAE,gBAAwB,EAAE,GAAI;;IAC9E,IAAM,UAAU,GAAG,MAAA,IAAI,CAAC,UAAU,0CAAE,IAAI,EAAE,CAAC;IAC3C,IAAM,YAAY,GAAG,MAAA,IAAI,CAAC,YAAY,0CAAE,IAAI,EAAE,CAAC;IAC/C,OAAO;QACL;YACE,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,YAAY;oBAClB,IAAI,EAAE,sHAAsH;iBAC7H;aACF;SACF;QACD;YACE,IAAI,EAAE,MAAM;YACZ,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,YAAY;oBAClB,IAAI,EAAE,6CACF,UAAU,4BACV,YAAY,CAAC,CAAC,CAAC,uDAAgD,YAAY,CAAE,CAAC,CAAC,CAAC,EAAE,2BAClF,GAAG,CAAC,CAAC,CAAC,gEACkC,MAAM,CAAC,GAAG,CAAC,6QAGf,CAAC,CAAC,CAAC,EAAE,CAAE;iBAChD;gBACD;oBACE,IAAI,EAAE,aAAa;oBACnB,SAAS,EAAE,gCAAyB,gBAAgB,CAAE;iBACvD;aACF;SACF;KACF,CAAC;AACJ,CAAC"}
@@ -1,5 +1,6 @@
1
1
  export declare type PlaywrightOptions = {
2
2
  takeScreenshotPerTest?: boolean;
3
+ takeUIAgentVideoPerTest?: boolean;
3
4
  captureNetworkData?: boolean;
4
5
  runInCloud?: boolean;
5
6
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@loadmill/executer",
3
- "version": "0.1.197",
3
+ "version": "0.1.199",
4
4
  "description": "Loadmill executer library",
5
5
  "main": "dist/",
6
6
  "scripts": {
@@ -20,8 +20,8 @@
20
20
  "@aws-sdk/client-firehose": "~3.58.0",
21
21
  "@grpc/grpc-js": "^1.9.8",
22
22
  "@grpc/proto-loader": "^0.7.10",
23
- "@loadmill/core": "0.3.196",
24
- "@loadmill/universal": "0.3.191",
23
+ "@loadmill/core": "0.3.198",
24
+ "@loadmill/universal": "0.3.193",
25
25
  "@playwright/test": "1.50.0",
26
26
  "@types/estree": "^0.0.50",
27
27
  "acorn": "^8.4.1",