@godscene/web 1.7.11

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 (129) hide show
  1. package/README.md +7 -0
  2. package/bin/midscene-playground +3 -0
  3. package/bin/midscene-web +2 -0
  4. package/dist/es/bin.mjs +14 -0
  5. package/dist/es/bridge-mode/agent-cli-side.mjs +135 -0
  6. package/dist/es/bridge-mode/browser.mjs +2 -0
  7. package/dist/es/bridge-mode/common.mjs +41 -0
  8. package/dist/es/bridge-mode/index.mjs +4 -0
  9. package/dist/es/bridge-mode/io-client.mjs +99 -0
  10. package/dist/es/bridge-mode/io-server.mjs +218 -0
  11. package/dist/es/bridge-mode/page-browser-side.mjs +119 -0
  12. package/dist/es/cdp-proxy-constants.mjs +7 -0
  13. package/dist/es/cdp-proxy-manager.mjs +217 -0
  14. package/dist/es/cdp-proxy.mjs +151 -0
  15. package/dist/es/cdp-target-store.mjs +26 -0
  16. package/dist/es/chrome-extension/agent.mjs +8 -0
  17. package/dist/es/chrome-extension/cdpInput.mjs +172 -0
  18. package/dist/es/chrome-extension/cdpInput.mjs.LICENSE.txt +5 -0
  19. package/dist/es/chrome-extension/dynamic-scripts.mjs +36 -0
  20. package/dist/es/chrome-extension/index.mjs +5 -0
  21. package/dist/es/chrome-extension/page.mjs +733 -0
  22. package/dist/es/cli-options.mjs +97 -0
  23. package/dist/es/cli.mjs +26 -0
  24. package/dist/es/common/cache-helper.mjs +26 -0
  25. package/dist/es/common/viewport.mjs +36 -0
  26. package/dist/es/index.mjs +8 -0
  27. package/dist/es/mcp-server.mjs +33 -0
  28. package/dist/es/mcp-tools-cdp.mjs +164 -0
  29. package/dist/es/mcp-tools-puppeteer.mjs +246 -0
  30. package/dist/es/mcp-tools.mjs +81 -0
  31. package/dist/es/platform.mjs +37 -0
  32. package/dist/es/playwright/ai-fixture.mjs +364 -0
  33. package/dist/es/playwright/index.mjs +36 -0
  34. package/dist/es/playwright/page.mjs +42 -0
  35. package/dist/es/playwright/reporter/index.mjs +178 -0
  36. package/dist/es/puppeteer/agent-launcher.mjs +172 -0
  37. package/dist/es/puppeteer/base-page.mjs +830 -0
  38. package/dist/es/puppeteer/index.mjs +35 -0
  39. package/dist/es/puppeteer/page.mjs +7 -0
  40. package/dist/es/static/index.mjs +3 -0
  41. package/dist/es/static/static-agent.mjs +10 -0
  42. package/dist/es/static/static-page.mjs +123 -0
  43. package/dist/es/utils.mjs +6 -0
  44. package/dist/es/web-element.mjs +57 -0
  45. package/dist/es/web-page.mjs +272 -0
  46. package/dist/lib/bin.js +20 -0
  47. package/dist/lib/bridge-mode/agent-cli-side.js +172 -0
  48. package/dist/lib/bridge-mode/browser.js +36 -0
  49. package/dist/lib/bridge-mode/common.js +105 -0
  50. package/dist/lib/bridge-mode/index.js +44 -0
  51. package/dist/lib/bridge-mode/io-client.js +133 -0
  52. package/dist/lib/bridge-mode/io-server.js +255 -0
  53. package/dist/lib/bridge-mode/page-browser-side.js +163 -0
  54. package/dist/lib/cdp-proxy-constants.js +50 -0
  55. package/dist/lib/cdp-proxy-manager.js +273 -0
  56. package/dist/lib/cdp-proxy.js +179 -0
  57. package/dist/lib/cdp-target-store.js +66 -0
  58. package/dist/lib/chrome-extension/agent.js +42 -0
  59. package/dist/lib/chrome-extension/cdpInput.js +206 -0
  60. package/dist/lib/chrome-extension/cdpInput.js.LICENSE.txt +5 -0
  61. package/dist/lib/chrome-extension/dynamic-scripts.js +86 -0
  62. package/dist/lib/chrome-extension/index.js +58 -0
  63. package/dist/lib/chrome-extension/page.js +767 -0
  64. package/dist/lib/cli-options.js +131 -0
  65. package/dist/lib/cli.js +54 -0
  66. package/dist/lib/common/cache-helper.js +66 -0
  67. package/dist/lib/common/viewport.js +88 -0
  68. package/dist/lib/index.js +66 -0
  69. package/dist/lib/mcp-server.js +73 -0
  70. package/dist/lib/mcp-tools-cdp.js +208 -0
  71. package/dist/lib/mcp-tools-puppeteer.js +296 -0
  72. package/dist/lib/mcp-tools.js +115 -0
  73. package/dist/lib/platform.js +71 -0
  74. package/dist/lib/playwright/ai-fixture.js +401 -0
  75. package/dist/lib/playwright/index.js +89 -0
  76. package/dist/lib/playwright/page.js +76 -0
  77. package/dist/lib/playwright/reporter/index.js +212 -0
  78. package/dist/lib/puppeteer/agent-launcher.js +240 -0
  79. package/dist/lib/puppeteer/base-page.js +876 -0
  80. package/dist/lib/puppeteer/index.js +85 -0
  81. package/dist/lib/puppeteer/page.js +41 -0
  82. package/dist/lib/static/index.js +50 -0
  83. package/dist/lib/static/static-agent.js +44 -0
  84. package/dist/lib/static/static-page.js +157 -0
  85. package/dist/lib/utils.js +38 -0
  86. package/dist/lib/web-element.js +94 -0
  87. package/dist/lib/web-page.js +322 -0
  88. package/dist/types/bin.d.ts +1 -0
  89. package/dist/types/bridge-mode/agent-cli-side.d.ts +49 -0
  90. package/dist/types/bridge-mode/browser.d.ts +2 -0
  91. package/dist/types/bridge-mode/common.d.ts +74 -0
  92. package/dist/types/bridge-mode/index.d.ts +4 -0
  93. package/dist/types/bridge-mode/io-client.d.ts +10 -0
  94. package/dist/types/bridge-mode/io-server.d.ts +27 -0
  95. package/dist/types/bridge-mode/page-browser-side.d.ts +21 -0
  96. package/dist/types/cdp-proxy-constants.d.ts +4 -0
  97. package/dist/types/cdp-proxy-manager.d.ts +53 -0
  98. package/dist/types/cdp-proxy.d.ts +37 -0
  99. package/dist/types/cdp-target-store.d.ts +26 -0
  100. package/dist/types/chrome-extension/agent.d.ts +4 -0
  101. package/dist/types/chrome-extension/cdpInput.d.ts +52 -0
  102. package/dist/types/chrome-extension/dynamic-scripts.d.ts +3 -0
  103. package/dist/types/chrome-extension/index.d.ts +5 -0
  104. package/dist/types/chrome-extension/page.d.ts +120 -0
  105. package/dist/types/cli-options.d.ts +8 -0
  106. package/dist/types/cli.d.ts +1 -0
  107. package/dist/types/common/cache-helper.d.ts +20 -0
  108. package/dist/types/common/viewport.d.ts +17 -0
  109. package/dist/types/index.d.ts +9 -0
  110. package/dist/types/mcp-server.d.ts +26 -0
  111. package/dist/types/mcp-tools-cdp.d.ts +23 -0
  112. package/dist/types/mcp-tools-puppeteer.d.ts +23 -0
  113. package/dist/types/mcp-tools.d.ts +14 -0
  114. package/dist/types/platform.d.ts +10 -0
  115. package/dist/types/playwright/ai-fixture.d.ts +133 -0
  116. package/dist/types/playwright/index.d.ts +13 -0
  117. package/dist/types/playwright/page.d.ts +11 -0
  118. package/dist/types/playwright/reporter/index.d.ts +28 -0
  119. package/dist/types/puppeteer/agent-launcher.d.ts +59 -0
  120. package/dist/types/puppeteer/base-page.d.ts +123 -0
  121. package/dist/types/puppeteer/index.d.ts +11 -0
  122. package/dist/types/puppeteer/page.d.ts +6 -0
  123. package/dist/types/static/index.d.ts +2 -0
  124. package/dist/types/static/static-agent.d.ts +5 -0
  125. package/dist/types/static/static-page.d.ts +46 -0
  126. package/dist/types/utils.d.ts +6 -0
  127. package/dist/types/web-element.d.ts +48 -0
  128. package/dist/types/web-page.d.ts +69 -0
  129. package/package.json +173 -0
@@ -0,0 +1,401 @@
1
+ "use strict";
2
+ var __webpack_require__ = {};
3
+ (()=>{
4
+ __webpack_require__.d = (exports1, definition)=>{
5
+ for(var key in definition)if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
6
+ enumerable: true,
7
+ get: definition[key]
8
+ });
9
+ };
10
+ })();
11
+ (()=>{
12
+ __webpack_require__.o = (obj, prop)=>Object.prototype.hasOwnProperty.call(obj, prop);
13
+ })();
14
+ (()=>{
15
+ __webpack_require__.r = (exports1)=>{
16
+ if ("u" > typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, {
17
+ value: 'Module'
18
+ });
19
+ Object.defineProperty(exports1, '__esModule', {
20
+ value: true
21
+ });
22
+ };
23
+ })();
24
+ var __webpack_exports__ = {};
25
+ __webpack_require__.r(__webpack_exports__);
26
+ __webpack_require__.d(__webpack_exports__, {
27
+ PlaywrightAiFixture: ()=>PlaywrightAiFixture,
28
+ midsceneDumpAnnotationId: ()=>midsceneDumpAnnotationId
29
+ });
30
+ const external_index_js_namespaceObject = require("./index.js");
31
+ const utils_namespaceObject = require("@godscene/core/utils");
32
+ const constants_namespaceObject = require("@godscene/shared/constants");
33
+ const logger_namespaceObject = require("@godscene/shared/logger");
34
+ const shared_utils_namespaceObject = require("@godscene/shared/utils");
35
+ const test_namespaceObject = require("@playwright/test");
36
+ const debugPage = (0, logger_namespaceObject.getDebug)('web:playwright:ai-fixture');
37
+ const groupAndCaseForTest = (testInfo)=>{
38
+ let taskFile;
39
+ let taskTitle;
40
+ const titlePath = [
41
+ ...testInfo.titlePath
42
+ ];
43
+ if (titlePath.length > 1) {
44
+ taskFile = titlePath.shift() || 'unnamed';
45
+ taskTitle = titlePath.join('__');
46
+ } else if (1 === titlePath.length) {
47
+ taskTitle = titlePath[0];
48
+ taskFile = `${taskTitle}`;
49
+ } else {
50
+ taskTitle = 'unnamed';
51
+ taskFile = 'unnamed';
52
+ }
53
+ const taskTitleWithRetry = `${taskTitle}${testInfo.retry ? `(retry #${testInfo.retry})` : ''}`;
54
+ return {
55
+ file: taskFile,
56
+ id: (0, shared_utils_namespaceObject.replaceIllegalPathCharsAndSpace)(`${taskFile}(${taskTitle})`),
57
+ title: (0, shared_utils_namespaceObject.replaceIllegalPathCharsAndSpace)(taskTitleWithRetry)
58
+ };
59
+ };
60
+ const midsceneAgentKeyId = '_midsceneAgentId';
61
+ const midsceneDumpAnnotationId = 'MIDSCENE_DUMP_ANNOTATION';
62
+ const PlaywrightAiFixture = (options)=>{
63
+ const { forceSameTabNavigation = true, waitForNetworkIdleTimeout = constants_namespaceObject.DEFAULT_WAIT_FOR_NETWORK_IDLE_TIMEOUT, waitForNavigationTimeout = constants_namespaceObject.DEFAULT_WAIT_FOR_NAVIGATION_TIMEOUT, cache, ...sharedAgentOptions } = options ?? {};
64
+ const processTestCacheConfig = (testInfo)=>{
65
+ const { id } = groupAndCaseForTest(testInfo);
66
+ return (0, utils_namespaceObject.processCacheConfig)(cache, id);
67
+ };
68
+ const pageAgentMap = {};
69
+ const testAgentRecords = new Map();
70
+ const getAgentRecordsForTest = (testInfo)=>{
71
+ let records = testAgentRecords.get(testInfo.testId);
72
+ if (!records) {
73
+ records = new Map();
74
+ testAgentRecords.set(testInfo.testId, records);
75
+ }
76
+ return records;
77
+ };
78
+ const setReportAnnotation = (testInfo, reportPaths)=>{
79
+ testInfo.annotations = testInfo.annotations.filter((item)=>item.type !== midsceneDumpAnnotationId);
80
+ for (const reportPath of reportPaths)testInfo.annotations.push({
81
+ type: midsceneDumpAnnotationId,
82
+ description: reportPath
83
+ });
84
+ };
85
+ const finalizeAgentRecord = async (record)=>{
86
+ if (!record.finalizePromise) record.finalizePromise = (async ()=>{
87
+ await record.agent.destroy();
88
+ const reportPath = record.agent.reportFile || void 0;
89
+ record.finalReportPath = reportPath;
90
+ return reportPath;
91
+ })();
92
+ return await record.finalizePromise;
93
+ };
94
+ const createOrReuseAgentForPage = (page, testInfo, opts)=>{
95
+ let idForPage = page[midsceneAgentKeyId];
96
+ if (!idForPage) {
97
+ idForPage = (0, shared_utils_namespaceObject.uuid)();
98
+ page[midsceneAgentKeyId] = idForPage;
99
+ const { file, title } = groupAndCaseForTest(testInfo);
100
+ const cacheConfig = processTestCacheConfig(testInfo);
101
+ const reportTag = `playwright-${title.replace(/[\\/]/g, '-')}-${idForPage}`;
102
+ const agent = new external_index_js_namespaceObject.PlaywrightAgent(page, {
103
+ testId: reportTag,
104
+ reportFileName: reportTag,
105
+ forceSameTabNavigation,
106
+ cache: cacheConfig,
107
+ groupName: title,
108
+ groupDescription: file,
109
+ generateReport: true,
110
+ ...sharedAgentOptions,
111
+ ...opts
112
+ });
113
+ pageAgentMap[idForPage] = agent;
114
+ const records = getAgentRecordsForTest(testInfo);
115
+ const record = {
116
+ agent
117
+ };
118
+ records.set(idForPage, record);
119
+ page.on('close', async ()=>{
120
+ debugPage('page closed');
121
+ try {
122
+ await finalizeAgentRecord(record);
123
+ } finally{
124
+ delete pageAgentMap[idForPage];
125
+ }
126
+ });
127
+ }
128
+ return pageAgentMap[idForPage];
129
+ };
130
+ async function generateAiFunction(options) {
131
+ const { page, testInfo, use, aiActionType } = options;
132
+ const agent = createOrReuseAgentForPage(page, testInfo, {
133
+ waitForNavigationTimeout,
134
+ waitForNetworkIdleTimeout
135
+ });
136
+ await use(async (taskPrompt, ...args)=>new Promise((resolve, reject)=>{
137
+ test_namespaceObject.test.step(`ai-${aiActionType} - ${JSON.stringify(taskPrompt)}`, async ()=>{
138
+ try {
139
+ const result = await agent[aiActionType].bind(agent)(taskPrompt, ...args);
140
+ resolve(result);
141
+ } catch (error) {
142
+ reject(error);
143
+ }
144
+ });
145
+ }));
146
+ }
147
+ return {
148
+ _midsceneFinalizeReports: [
149
+ async ({}, use, testInfo)=>{
150
+ await use();
151
+ const records = testAgentRecords.get(testInfo.testId);
152
+ if (!records || 0 === records.size) return;
153
+ const reportPaths = (await Promise.all(Array.from(records.values()).map((record)=>finalizeAgentRecord(record)))).filter((reportPath)=>Boolean(reportPath));
154
+ if (reportPaths.length > 0) setReportAnnotation(testInfo, reportPaths);
155
+ testAgentRecords.delete(testInfo.testId);
156
+ },
157
+ {
158
+ auto: true
159
+ }
160
+ ],
161
+ agentForPage: async ({ page }, use, testInfo)=>{
162
+ await use(async (propsPage, opts)=>{
163
+ const cacheConfig = processTestCacheConfig(testInfo);
164
+ let finalCacheConfig = cacheConfig;
165
+ if (opts?.cache !== void 0) {
166
+ const userCache = opts.cache;
167
+ if (false === userCache) finalCacheConfig = false;
168
+ else if (true === userCache) {
169
+ const { id } = groupAndCaseForTest(testInfo);
170
+ finalCacheConfig = {
171
+ id
172
+ };
173
+ } else if ('object' == typeof userCache) if (userCache.id) finalCacheConfig = userCache;
174
+ else {
175
+ const { id } = groupAndCaseForTest(testInfo);
176
+ finalCacheConfig = {
177
+ ...userCache,
178
+ id
179
+ };
180
+ }
181
+ }
182
+ const agent = createOrReuseAgentForPage(propsPage || page, testInfo, {
183
+ waitForNavigationTimeout,
184
+ waitForNetworkIdleTimeout,
185
+ cache: finalCacheConfig,
186
+ ...opts
187
+ });
188
+ return agent;
189
+ });
190
+ },
191
+ ai: async ({ page }, use, testInfo)=>{
192
+ await generateAiFunction({
193
+ page,
194
+ testInfo,
195
+ use,
196
+ aiActionType: 'ai'
197
+ });
198
+ },
199
+ aiAct: async ({ page }, use, testInfo)=>{
200
+ await generateAiFunction({
201
+ page,
202
+ testInfo,
203
+ use,
204
+ aiActionType: 'aiAct'
205
+ });
206
+ },
207
+ aiAction: async ({ page }, use, testInfo)=>{
208
+ await generateAiFunction({
209
+ page,
210
+ testInfo,
211
+ use,
212
+ aiActionType: 'aiAction'
213
+ });
214
+ },
215
+ aiTap: async ({ page }, use, testInfo)=>{
216
+ await generateAiFunction({
217
+ page,
218
+ testInfo,
219
+ use,
220
+ aiActionType: 'aiTap'
221
+ });
222
+ },
223
+ aiRightClick: async ({ page }, use, testInfo)=>{
224
+ await generateAiFunction({
225
+ page,
226
+ testInfo,
227
+ use,
228
+ aiActionType: 'aiRightClick'
229
+ });
230
+ },
231
+ aiDoubleClick: async ({ page }, use, testInfo)=>{
232
+ await generateAiFunction({
233
+ page,
234
+ testInfo,
235
+ use,
236
+ aiActionType: 'aiDoubleClick'
237
+ });
238
+ },
239
+ aiHover: async ({ page }, use, testInfo)=>{
240
+ await generateAiFunction({
241
+ page,
242
+ testInfo,
243
+ use,
244
+ aiActionType: 'aiHover'
245
+ });
246
+ },
247
+ aiInput: async ({ page }, use, testInfo)=>{
248
+ await generateAiFunction({
249
+ page,
250
+ testInfo,
251
+ use,
252
+ aiActionType: 'aiInput'
253
+ });
254
+ },
255
+ aiKeyboardPress: async ({ page }, use, testInfo)=>{
256
+ await generateAiFunction({
257
+ page,
258
+ testInfo,
259
+ use,
260
+ aiActionType: 'aiKeyboardPress'
261
+ });
262
+ },
263
+ aiScroll: async ({ page }, use, testInfo)=>{
264
+ await generateAiFunction({
265
+ page,
266
+ testInfo,
267
+ use,
268
+ aiActionType: 'aiScroll'
269
+ });
270
+ },
271
+ aiQuery: async ({ page }, use, testInfo)=>{
272
+ await generateAiFunction({
273
+ page,
274
+ testInfo,
275
+ use,
276
+ aiActionType: 'aiQuery'
277
+ });
278
+ },
279
+ aiAssert: async ({ page }, use, testInfo)=>{
280
+ await generateAiFunction({
281
+ page,
282
+ testInfo,
283
+ use,
284
+ aiActionType: 'aiAssert'
285
+ });
286
+ },
287
+ aiWaitFor: async ({ page }, use, testInfo)=>{
288
+ await generateAiFunction({
289
+ page,
290
+ testInfo,
291
+ use,
292
+ aiActionType: 'aiWaitFor'
293
+ });
294
+ },
295
+ aiLocate: async ({ page }, use, testInfo)=>{
296
+ await generateAiFunction({
297
+ page,
298
+ testInfo,
299
+ use,
300
+ aiActionType: 'aiLocate'
301
+ });
302
+ },
303
+ aiNumber: async ({ page }, use, testInfo)=>{
304
+ await generateAiFunction({
305
+ page,
306
+ testInfo,
307
+ use,
308
+ aiActionType: 'aiNumber'
309
+ });
310
+ },
311
+ aiString: async ({ page }, use, testInfo)=>{
312
+ await generateAiFunction({
313
+ page,
314
+ testInfo,
315
+ use,
316
+ aiActionType: 'aiString'
317
+ });
318
+ },
319
+ aiBoolean: async ({ page }, use, testInfo)=>{
320
+ await generateAiFunction({
321
+ page,
322
+ testInfo,
323
+ use,
324
+ aiActionType: 'aiBoolean'
325
+ });
326
+ },
327
+ aiAsk: async ({ page }, use, testInfo)=>{
328
+ await generateAiFunction({
329
+ page,
330
+ testInfo,
331
+ use,
332
+ aiActionType: 'aiAsk'
333
+ });
334
+ },
335
+ runYaml: async ({ page }, use, testInfo)=>{
336
+ await generateAiFunction({
337
+ page,
338
+ testInfo,
339
+ use,
340
+ aiActionType: 'runYaml'
341
+ });
342
+ },
343
+ setAIActionContext: async ({ page }, use, testInfo)=>{
344
+ await generateAiFunction({
345
+ page,
346
+ testInfo,
347
+ use,
348
+ aiActionType: 'setAIActionContext'
349
+ });
350
+ },
351
+ evaluateJavaScript: async ({ page }, use, testInfo)=>{
352
+ await generateAiFunction({
353
+ page,
354
+ testInfo,
355
+ use,
356
+ aiActionType: 'evaluateJavaScript'
357
+ });
358
+ },
359
+ recordToReport: async ({ page }, use, testInfo)=>{
360
+ await generateAiFunction({
361
+ page,
362
+ testInfo,
363
+ use,
364
+ aiActionType: 'recordToReport'
365
+ });
366
+ },
367
+ logScreenshot: async ({ page }, use, testInfo)=>{
368
+ await generateAiFunction({
369
+ page,
370
+ testInfo,
371
+ use,
372
+ aiActionType: 'logScreenshot'
373
+ });
374
+ },
375
+ freezePageContext: async ({ page }, use, testInfo)=>{
376
+ await generateAiFunction({
377
+ page,
378
+ testInfo,
379
+ use,
380
+ aiActionType: 'freezePageContext'
381
+ });
382
+ },
383
+ unfreezePageContext: async ({ page }, use, testInfo)=>{
384
+ await generateAiFunction({
385
+ page,
386
+ testInfo,
387
+ use,
388
+ aiActionType: 'unfreezePageContext'
389
+ });
390
+ }
391
+ };
392
+ };
393
+ exports.PlaywrightAiFixture = __webpack_exports__.PlaywrightAiFixture;
394
+ exports.midsceneDumpAnnotationId = __webpack_exports__.midsceneDumpAnnotationId;
395
+ for(var __rspack_i in __webpack_exports__)if (-1 === [
396
+ "PlaywrightAiFixture",
397
+ "midsceneDumpAnnotationId"
398
+ ].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
399
+ Object.defineProperty(exports, '__esModule', {
400
+ value: true
401
+ });
@@ -0,0 +1,89 @@
1
+ "use strict";
2
+ var __webpack_require__ = {};
3
+ (()=>{
4
+ __webpack_require__.n = (module)=>{
5
+ var getter = module && module.__esModule ? ()=>module['default'] : ()=>module;
6
+ __webpack_require__.d(getter, {
7
+ a: getter
8
+ });
9
+ return getter;
10
+ };
11
+ })();
12
+ (()=>{
13
+ __webpack_require__.d = (exports1, definition)=>{
14
+ for(var key in definition)if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
15
+ enumerable: true,
16
+ get: definition[key]
17
+ });
18
+ };
19
+ })();
20
+ (()=>{
21
+ __webpack_require__.o = (obj, prop)=>Object.prototype.hasOwnProperty.call(obj, prop);
22
+ })();
23
+ (()=>{
24
+ __webpack_require__.r = (exports1)=>{
25
+ if ("u" > typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, {
26
+ value: 'Module'
27
+ });
28
+ Object.defineProperty(exports1, '__esModule', {
29
+ value: true
30
+ });
31
+ };
32
+ })();
33
+ var __webpack_exports__ = {};
34
+ __webpack_require__.r(__webpack_exports__);
35
+ __webpack_require__.d(__webpack_exports__, {
36
+ PlaywrightAiFixture: ()=>external_ai_fixture_js_namespaceObject.PlaywrightAiFixture,
37
+ PlaywrightWebPage: ()=>external_page_js_namespaceObject.WebPage,
38
+ overrideAIConfig: ()=>env_namespaceObject.overrideAIConfig,
39
+ PlaywrightAgent: ()=>PlaywrightAgent
40
+ });
41
+ const agent_namespaceObject = require("@godscene/core/agent");
42
+ const external_page_js_namespaceObject = require("./page.js");
43
+ const external_ai_fixture_js_namespaceObject = require("./ai-fixture.js");
44
+ const env_namespaceObject = require("@godscene/shared/env");
45
+ const logger_namespaceObject = require("@godscene/shared/logger");
46
+ const external_semver_namespaceObject = require("semver");
47
+ var external_semver_default = /*#__PURE__*/ __webpack_require__.n(external_semver_namespaceObject);
48
+ const base_page_js_namespaceObject = require("../puppeteer/base-page.js");
49
+ const external_utils_js_namespaceObject = require("../utils.js");
50
+ const debug = (0, logger_namespaceObject.getDebug)('playwright:agent');
51
+ function getPlaywrightVersion() {
52
+ try {
53
+ const playwrightPkg = (0, external_utils_js_namespaceObject.getWebpackRequire)()('playwright/package.json');
54
+ return playwrightPkg.version || null;
55
+ } catch (error) {
56
+ console.error('[midscene:error] Failed to get Playwright version', error);
57
+ return null;
58
+ }
59
+ }
60
+ class PlaywrightAgent extends agent_namespaceObject.Agent {
61
+ isRetryableContextError(error) {
62
+ return error instanceof Error && base_page_js_namespaceObject.BROWSER_NAVIGATION_ERROR_PATTERN.test(error.message);
63
+ }
64
+ constructor(page, opts){
65
+ if (!page) throw new Error('[midscene] PlaywrightAgent requires a valid Playwright page instance. Please make sure to pass a valid page object.');
66
+ const webPage = new external_page_js_namespaceObject.WebPage(page, opts);
67
+ super(webPage, opts);
68
+ const { forceSameTabNavigation = true, forceChromeSelectRendering } = opts ?? {};
69
+ if (forceSameTabNavigation) (0, base_page_js_namespaceObject.forceClosePopup)(page, debug);
70
+ if (forceChromeSelectRendering) {
71
+ const playwrightVersion = getPlaywrightVersion();
72
+ if (playwrightVersion && !external_semver_default().gte(playwrightVersion, '1.52.0')) console.warn(`[midscene:error] forceChromeSelectRendering requires Playwright >= 1.52.0, but current version is ${playwrightVersion}. This feature may not work correctly.`);
73
+ (0, base_page_js_namespaceObject.forceChromeSelectRendering)(page);
74
+ }
75
+ }
76
+ }
77
+ exports.PlaywrightAgent = __webpack_exports__.PlaywrightAgent;
78
+ exports.PlaywrightAiFixture = __webpack_exports__.PlaywrightAiFixture;
79
+ exports.PlaywrightWebPage = __webpack_exports__.PlaywrightWebPage;
80
+ exports.overrideAIConfig = __webpack_exports__.overrideAIConfig;
81
+ for(var __rspack_i in __webpack_exports__)if (-1 === [
82
+ "PlaywrightAgent",
83
+ "PlaywrightAiFixture",
84
+ "PlaywrightWebPage",
85
+ "overrideAIConfig"
86
+ ].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
87
+ Object.defineProperty(exports, '__esModule', {
88
+ value: true
89
+ });
@@ -0,0 +1,76 @@
1
+ "use strict";
2
+ var __webpack_require__ = {};
3
+ (()=>{
4
+ __webpack_require__.d = (exports1, definition)=>{
5
+ for(var key in definition)if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
6
+ enumerable: true,
7
+ get: definition[key]
8
+ });
9
+ };
10
+ })();
11
+ (()=>{
12
+ __webpack_require__.o = (obj, prop)=>Object.prototype.hasOwnProperty.call(obj, prop);
13
+ })();
14
+ (()=>{
15
+ __webpack_require__.r = (exports1)=>{
16
+ if ("u" > typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, {
17
+ value: 'Module'
18
+ });
19
+ Object.defineProperty(exports1, '__esModule', {
20
+ value: true
21
+ });
22
+ };
23
+ })();
24
+ var __webpack_exports__ = {};
25
+ __webpack_require__.r(__webpack_exports__);
26
+ __webpack_require__.d(__webpack_exports__, {
27
+ WebPage: ()=>WebPage
28
+ });
29
+ const base_page_js_namespaceObject = require("../puppeteer/base-page.js");
30
+ function _define_property(obj, key, value) {
31
+ if (key in obj) Object.defineProperty(obj, key, {
32
+ value: value,
33
+ enumerable: true,
34
+ configurable: true,
35
+ writable: true
36
+ });
37
+ else obj[key] = value;
38
+ return obj;
39
+ }
40
+ class WebPage extends base_page_js_namespaceObject.Page {
41
+ async registerFileChooserListener(handler) {
42
+ const page = this.underlyingPage;
43
+ let capturedError;
44
+ this.playwrightFileChooserHandler = async (chooser)=>{
45
+ try {
46
+ await handler({
47
+ accept: async (files)=>{
48
+ await chooser.setFiles(files);
49
+ }
50
+ });
51
+ } catch (error) {
52
+ capturedError = error;
53
+ }
54
+ };
55
+ page.on('filechooser', this.playwrightFileChooserHandler);
56
+ return {
57
+ dispose: ()=>{
58
+ if (this.playwrightFileChooserHandler) {
59
+ page.off('filechooser', this.playwrightFileChooserHandler);
60
+ this.playwrightFileChooserHandler = void 0;
61
+ }
62
+ },
63
+ getError: ()=>capturedError
64
+ };
65
+ }
66
+ constructor(page, opts){
67
+ super(page, 'playwright', opts), _define_property(this, "playwrightFileChooserHandler", void 0);
68
+ }
69
+ }
70
+ exports.WebPage = __webpack_exports__.WebPage;
71
+ for(var __rspack_i in __webpack_exports__)if (-1 === [
72
+ "WebPage"
73
+ ].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
74
+ Object.defineProperty(exports, '__esModule', {
75
+ value: true
76
+ });