@dyyz1993/agent-browser 0.25.0 → 0.26.1

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 (217) hide show
  1. package/dist/__tests__/e2e/utils/test-helpers.d.ts +2 -2
  2. package/dist/__tests__/e2e/utils/test-helpers.d.ts.map +1 -1
  3. package/dist/__tests__/e2e/utils/test-helpers.js +6 -4
  4. package/dist/__tests__/e2e/utils/test-helpers.js.map +1 -1
  5. package/dist/actions/advanced.d.ts +73 -0
  6. package/dist/actions/advanced.d.ts.map +1 -0
  7. package/dist/actions/advanced.js +390 -0
  8. package/dist/actions/advanced.js.map +1 -0
  9. package/dist/actions/context.d.ts +36 -0
  10. package/dist/actions/context.d.ts.map +1 -0
  11. package/dist/actions/context.js +164 -0
  12. package/dist/actions/context.js.map +1 -0
  13. package/dist/actions/crawl.d.ts +8 -0
  14. package/dist/actions/crawl.d.ts.map +1 -0
  15. package/dist/actions/crawl.js +294 -0
  16. package/dist/actions/crawl.js.map +1 -0
  17. package/dist/actions/elements.d.ts +11 -0
  18. package/dist/actions/elements.d.ts.map +1 -0
  19. package/dist/actions/elements.js +78 -0
  20. package/dist/actions/elements.js.map +1 -0
  21. package/dist/actions/flow.d.ts +4 -0
  22. package/dist/actions/flow.d.ts.map +1 -0
  23. package/dist/actions/flow.js +170 -0
  24. package/dist/actions/flow.js.map +1 -0
  25. package/dist/actions/index.d.ts +7 -0
  26. package/dist/actions/index.d.ts.map +1 -0
  27. package/dist/actions/index.js +323 -0
  28. package/dist/actions/index.js.map +1 -0
  29. package/dist/actions/interact.d.ts +4 -0
  30. package/dist/actions/interact.d.ts.map +1 -0
  31. package/dist/actions/interact.js +162 -0
  32. package/dist/actions/interact.js.map +1 -0
  33. package/dist/actions/interaction.d.ts +31 -0
  34. package/dist/actions/interaction.d.ts.map +1 -0
  35. package/dist/actions/interaction.js +477 -0
  36. package/dist/actions/interaction.js.map +1 -0
  37. package/dist/actions/locators.d.ts +14 -0
  38. package/dist/actions/locators.d.ts.map +1 -0
  39. package/dist/actions/locators.js +310 -0
  40. package/dist/actions/locators.js.map +1 -0
  41. package/dist/actions/map.d.ts +4 -0
  42. package/dist/actions/map.d.ts.map +1 -0
  43. package/dist/actions/map.js +79 -0
  44. package/dist/actions/map.js.map +1 -0
  45. package/dist/actions/meta.d.ts +44 -0
  46. package/dist/actions/meta.d.ts.map +1 -0
  47. package/dist/actions/meta.js +190 -0
  48. package/dist/actions/meta.js.map +1 -0
  49. package/dist/actions/mouse.d.ts +8 -0
  50. package/dist/actions/mouse.d.ts.map +1 -0
  51. package/dist/actions/mouse.js +52 -0
  52. package/dist/actions/mouse.js.map +1 -0
  53. package/dist/actions/recorder.d.ts +20 -0
  54. package/dist/actions/recorder.d.ts.map +1 -0
  55. package/dist/actions/recorder.js +231 -0
  56. package/dist/actions/recorder.js.map +1 -0
  57. package/dist/actions/recording.d.ts +6 -0
  58. package/dist/actions/recording.d.ts.map +1 -0
  59. package/dist/actions/recording.js +22 -0
  60. package/dist/actions/recording.js.map +1 -0
  61. package/dist/actions/scrape.d.ts +10 -0
  62. package/dist/actions/scrape.d.ts.map +1 -0
  63. package/dist/actions/scrape.js +40 -0
  64. package/dist/actions/scrape.js.map +1 -0
  65. package/dist/actions/screencast.d.ts +8 -0
  66. package/dist/actions/screencast.d.ts.map +1 -0
  67. package/dist/actions/screencast.js +56 -0
  68. package/dist/actions/screencast.js.map +1 -0
  69. package/dist/actions/search.d.ts +4 -0
  70. package/dist/actions/search.d.ts.map +1 -0
  71. package/dist/actions/search.js +129 -0
  72. package/dist/actions/search.js.map +1 -0
  73. package/dist/actions/storage.d.ts +14 -0
  74. package/dist/actions/storage.d.ts.map +1 -0
  75. package/dist/actions/storage.js +63 -0
  76. package/dist/actions/storage.js.map +1 -0
  77. package/dist/actions/tabs.d.ts +16 -0
  78. package/dist/actions/tabs.d.ts.map +1 -0
  79. package/dist/actions/tabs.js +47 -0
  80. package/dist/actions/tabs.js.map +1 -0
  81. package/dist/actions/utils.d.ts +16 -0
  82. package/dist/actions/utils.d.ts.map +1 -0
  83. package/dist/actions/utils.js +451 -0
  84. package/dist/actions/utils.js.map +1 -0
  85. package/dist/browser/browser-manager.d.ts +249 -0
  86. package/dist/browser/browser-manager.d.ts.map +1 -0
  87. package/dist/browser/browser-manager.js +1251 -0
  88. package/dist/browser/browser-manager.js.map +1 -0
  89. package/dist/browser/index.d.ts +3 -0
  90. package/dist/browser/index.d.ts.map +1 -0
  91. package/dist/browser/index.js +2 -0
  92. package/dist/browser/index.js.map +1 -0
  93. package/dist/browser/network-tracker.d.ts +39 -0
  94. package/dist/browser/network-tracker.d.ts.map +1 -0
  95. package/dist/browser/network-tracker.js +287 -0
  96. package/dist/browser/network-tracker.js.map +1 -0
  97. package/dist/browser/providers.d.ts +27 -0
  98. package/dist/browser/providers.d.ts.map +1 -0
  99. package/dist/browser/providers.js +293 -0
  100. package/dist/browser/providers.js.map +1 -0
  101. package/dist/browser/recorder-manager.d.ts +69 -0
  102. package/dist/browser/recorder-manager.d.ts.map +1 -0
  103. package/dist/browser/recorder-manager.js +755 -0
  104. package/dist/browser/recorder-manager.js.map +1 -0
  105. package/dist/browser/recording-manager.d.ts +46 -0
  106. package/dist/browser/recording-manager.d.ts.map +1 -0
  107. package/dist/browser/recording-manager.js +156 -0
  108. package/dist/browser/recording-manager.js.map +1 -0
  109. package/dist/browser/screencast-manager.d.ts +49 -0
  110. package/dist/browser/screencast-manager.d.ts.map +1 -0
  111. package/dist/browser/screencast-manager.js +131 -0
  112. package/dist/browser/screencast-manager.js.map +1 -0
  113. package/dist/browser/types.d.ts +101 -0
  114. package/dist/browser/types.d.ts.map +1 -0
  115. package/dist/browser/types.js +2 -0
  116. package/dist/browser/types.js.map +1 -0
  117. package/dist/browser-events.d.ts +25 -0
  118. package/dist/browser-events.d.ts.map +1 -0
  119. package/dist/browser-events.js +15 -0
  120. package/dist/browser-events.js.map +1 -0
  121. package/dist/cli/commands.d.ts.map +1 -1
  122. package/dist/cli/commands.js +140 -1
  123. package/dist/cli/commands.js.map +1 -1
  124. package/dist/cli/connection.d.ts.map +1 -1
  125. package/dist/cli/connection.js +15 -22
  126. package/dist/cli/connection.js.map +1 -1
  127. package/dist/cli/help.d.ts.map +1 -1
  128. package/dist/cli/help.js +153 -3
  129. package/dist/cli/help.js.map +1 -1
  130. package/dist/cli/output.d.ts.map +1 -1
  131. package/dist/cli/output.js +72 -0
  132. package/dist/cli/output.js.map +1 -1
  133. package/dist/cli.js +3 -4
  134. package/dist/cli.js.map +1 -1
  135. package/dist/daemon.d.ts +1 -1
  136. package/dist/daemon.d.ts.map +1 -1
  137. package/dist/daemon.js +12 -13
  138. package/dist/daemon.js.map +1 -1
  139. package/dist/flow/exporters/playwright.d.ts +23 -1
  140. package/dist/flow/exporters/playwright.d.ts.map +1 -1
  141. package/dist/flow/exporters/playwright.js +333 -85
  142. package/dist/flow/exporters/playwright.js.map +1 -1
  143. package/dist/flow/exporters/python.d.ts +22 -0
  144. package/dist/flow/exporters/python.d.ts.map +1 -1
  145. package/dist/flow/exporters/python.js +325 -74
  146. package/dist/flow/exporters/python.js.map +1 -1
  147. package/dist/flow/exporters/selenium.d.ts.map +1 -1
  148. package/dist/flow/exporters/selenium.js +0 -1
  149. package/dist/flow/exporters/selenium.js.map +1 -1
  150. package/dist/flow/flow-executor.d.ts +1 -1
  151. package/dist/flow/flow-executor.d.ts.map +1 -1
  152. package/dist/flow/flow-executor.js +11 -11
  153. package/dist/flow/flow-executor.js.map +1 -1
  154. package/dist/flow/output.js.map +1 -1
  155. package/dist/flow/plugin-system.d.ts +1 -1
  156. package/dist/flow/plugin-system.d.ts.map +1 -1
  157. package/dist/flow/plugin-system.js +2 -2
  158. package/dist/flow/plugin-system.js.map +1 -1
  159. package/dist/flow/plugins/logging-plugin.js +1 -1
  160. package/dist/flow/plugins/logging-plugin.js.map +1 -1
  161. package/dist/flow/presets/console-capture.js +33 -14
  162. package/dist/flow/presets/fetch-capture.js +52 -23
  163. package/dist/flow/presets/sse-stream.js +35 -17
  164. package/dist/flow/presets/xhr-only.js +22 -12
  165. package/dist/flow/recorder-to-flow.d.ts.map +1 -1
  166. package/dist/flow/recorder-to-flow.js +1 -3
  167. package/dist/flow/recorder-to-flow.js.map +1 -1
  168. package/dist/flow/site-manager.d.ts.map +1 -1
  169. package/dist/flow/site-manager.js +6 -2
  170. package/dist/flow/site-manager.js.map +1 -1
  171. package/dist/human-mouse.d.ts +1 -1
  172. package/dist/human-mouse.d.ts.map +1 -1
  173. package/dist/human-mouse.js +2 -2
  174. package/dist/human-mouse.js.map +1 -1
  175. package/dist/protocol.d.ts.map +1 -1
  176. package/dist/protocol.js +90 -0
  177. package/dist/protocol.js.map +1 -1
  178. package/dist/rc-config.js +4 -4
  179. package/dist/rc-config.js.map +1 -1
  180. package/dist/recorder/inject.js +31 -5
  181. package/dist/snapshot.d.ts.map +1 -1
  182. package/dist/snapshot.js +3 -4
  183. package/dist/snapshot.js.map +1 -1
  184. package/dist/stream-server-standalone.d.ts +1 -1
  185. package/dist/stream-server-standalone.d.ts.map +1 -1
  186. package/dist/stream-server-standalone.js +42 -23
  187. package/dist/stream-server-standalone.js.map +1 -1
  188. package/dist/stream-server.d.ts +1 -1
  189. package/dist/stream-server.d.ts.map +1 -1
  190. package/dist/stream-server.js +26 -21
  191. package/dist/stream-server.js.map +1 -1
  192. package/dist/test-live.js +9 -3
  193. package/dist/test-live.js.map +1 -1
  194. package/dist/types.d.ts +122 -1
  195. package/dist/types.d.ts.map +1 -1
  196. package/dist/types.js.map +1 -1
  197. package/package.json +4 -3
  198. package/scripts/README.md +66 -0
  199. package/scripts/copy-flow-presets.js +25 -0
  200. package/scripts/douyin-flow-test.sh +72 -0
  201. package/scripts/douyin-test.sh +101 -0
  202. package/dist/actions.d.ts +0 -51
  203. package/dist/actions.d.ts.map +0 -1
  204. package/dist/actions.js +0 -2662
  205. package/dist/actions.js.map +0 -1
  206. package/dist/browser.d.ts +0 -651
  207. package/dist/browser.d.ts.map +0 -1
  208. package/dist/browser.js +0 -3088
  209. package/dist/browser.js.map +0 -1
  210. package/dist/ios-actions.d.ts +0 -11
  211. package/dist/ios-actions.d.ts.map +0 -1
  212. package/dist/ios-actions.js +0 -228
  213. package/dist/ios-actions.js.map +0 -1
  214. package/dist/ios-manager.d.ts +0 -266
  215. package/dist/ios-manager.d.ts.map +0 -1
  216. package/dist/ios-manager.js +0 -1076
  217. package/dist/ios-manager.js.map +0 -1
@@ -0,0 +1,451 @@
1
+ export const EXCLUDE_SELECTORS = [
2
+ 'header',
3
+ 'footer',
4
+ 'nav',
5
+ 'aside',
6
+ '.header',
7
+ '.top',
8
+ '.navbar',
9
+ '#header',
10
+ '.footer',
11
+ '.bottom',
12
+ '#footer',
13
+ '.sidebar',
14
+ '.side',
15
+ '.aside',
16
+ '#sidebar',
17
+ '.modal',
18
+ '.popup',
19
+ '#modal',
20
+ '.overlay',
21
+ '.ad',
22
+ '.ads',
23
+ '.advert',
24
+ '#ad',
25
+ '.lang-selector',
26
+ '.language',
27
+ '#language-selector',
28
+ '.social',
29
+ '.social-media',
30
+ '.social-links',
31
+ '#social',
32
+ '.menu',
33
+ '.navigation',
34
+ '#nav',
35
+ '.nav',
36
+ '.breadcrumbs',
37
+ '#breadcrumbs',
38
+ '.share',
39
+ '#share',
40
+ '.widget',
41
+ '#widget',
42
+ '.cookie',
43
+ '#cookie',
44
+ '.cookie-banner',
45
+ '.cookie-notice',
46
+ '.feedback',
47
+ '.feedback-container',
48
+ '#feedback',
49
+ '.report',
50
+ '.vote',
51
+ '.vote-container',
52
+ 'script',
53
+ 'style',
54
+ 'noscript',
55
+ 'iframe',
56
+ 'svg',
57
+ 'form[action*="search"]',
58
+ '.search-form',
59
+ '#search',
60
+ '.doc-footer',
61
+ '.doc-header',
62
+ '.doc-sidebar',
63
+ '.doc-nav',
64
+ '.page-footer',
65
+ '.page-header',
66
+ '.site-footer',
67
+ '.site-header',
68
+ '.site-nav',
69
+ '.global-nav',
70
+ '.global-footer',
71
+ '.chat-widget',
72
+ '.chat-button',
73
+ '.chat-widget-container',
74
+ '#chat-widget',
75
+ '.consult',
76
+ '.online-consult',
77
+ '.customer-service',
78
+ '.toolbar',
79
+ '.tool-bar',
80
+ '.floating-bar',
81
+ '.fixed-bar',
82
+ '.sticky-bar',
83
+ '.back-to-top',
84
+ '.breadcrumb',
85
+ '[role="navigation"]',
86
+ '[role="banner"]',
87
+ '[role="contentinfo"]',
88
+ '.prev-next',
89
+ '.pagination',
90
+ '.pager',
91
+ '.article-nav',
92
+ '.article-navigation',
93
+ '.post-navigation',
94
+ '.turn-page',
95
+ '[class*="sidebar"]',
96
+ '[class*="Sidebar"]',
97
+ '[class*="feedback"]',
98
+ '[class*="Feedback"]',
99
+ '[class*="footer"]',
100
+ '[class*="Footer"]',
101
+ '[class*="chat-"]',
102
+ '[class*="consult"]',
103
+ '[class*="favorite"]',
104
+ '[class*="download"]',
105
+ '[class*="toolbar"]',
106
+ '[class*="Toolbar"]',
107
+ '[class*="drawer"]',
108
+ '[class*="Drawer"]',
109
+ '[class*="appbar"]',
110
+ '[class*="Appbar"]',
111
+ '[class*="consult"]',
112
+ '[class*="customer"]',
113
+ '[class*="feedback"]',
114
+ '[class*="report"]',
115
+ ];
116
+ const SPECIFIC_CONTENT_SELECTORS = [
117
+ '.markdown-body',
118
+ '.markdown-section',
119
+ '.doc-content',
120
+ '.doc-body',
121
+ '.article-content',
122
+ '.post-content',
123
+ '.entry-content',
124
+ '.documentation',
125
+ '.docs-content',
126
+ '.readme',
127
+ '.theme-default-content',
128
+ '.md-content',
129
+ ];
130
+ const SEMANTIC_CONTENT_SELECTORS = [
131
+ 'article[role="main"]',
132
+ 'main article',
133
+ '#main article',
134
+ '.main article',
135
+ '[role="article"]',
136
+ 'article',
137
+ 'main',
138
+ ];
139
+ const GENERIC_CONTENT_SELECTORS = [
140
+ '#main',
141
+ '#content',
142
+ '#article',
143
+ '.main',
144
+ '.content',
145
+ '.article',
146
+ '.post',
147
+ ];
148
+ const FUZZY_CONTENT_SELECTORS = [
149
+ '[class*="doc-content"]',
150
+ '[class*="docContent"]',
151
+ '[class*="content-doc"]',
152
+ '[class*="markdown-body"]',
153
+ '[class*="markdownBody"]',
154
+ '[class*="markdown-section"]',
155
+ '[class*="markdownSection"]',
156
+ '[class*="article-content"]',
157
+ '[class*="articleContent"]',
158
+ '[class*="docs-content"]',
159
+ '[class*="docsContent"]',
160
+ '[class*="post-content"]',
161
+ '[class*="postContent"]',
162
+ '[class*="md-viewer"]',
163
+ '[class*="MdViewer"]',
164
+ '[class*="md-content"]',
165
+ '[class*="MdContent"]',
166
+ '[class*="doc-viewer"]',
167
+ '[class*="DocViewer"]',
168
+ '[class*="viewer-container"]',
169
+ '[class*="ViewerContainer"]',
170
+ ];
171
+ export const FORCE_INCLUDE_SELECTORS = [
172
+ ...SPECIFIC_CONTENT_SELECTORS,
173
+ ...SEMANTIC_CONTENT_SELECTORS,
174
+ ...GENERIC_CONTENT_SELECTORS,
175
+ ...FUZZY_CONTENT_SELECTORS,
176
+ ];
177
+ export async function extractContentFromPage(page, format, selector) {
178
+ if (selector) {
179
+ const loc = page.locator(selector).first();
180
+ const result = await loc
181
+ .evaluate((el, excludeSelectors) => {
182
+ const clone = el.cloneNode(true);
183
+ for (const sel of excludeSelectors) {
184
+ clone.querySelectorAll(sel).forEach((n) => n.remove());
185
+ }
186
+ clone.querySelectorAll('svg').forEach((n) => n.remove());
187
+ clone.querySelectorAll('img').forEach((img) => {
188
+ const src = img.getAttribute('src') || img.getAttribute('data-src') || '';
189
+ if (src.startsWith('data:image'))
190
+ img.remove();
191
+ });
192
+ return {
193
+ text: clone.textContent?.trim() || '',
194
+ html: clone.innerHTML,
195
+ };
196
+ }, EXCLUDE_SELECTORS)
197
+ .catch(() => null);
198
+ if (result && result.text.length > 0) {
199
+ switch (format) {
200
+ case 'text':
201
+ return result.text;
202
+ case 'html':
203
+ return result.html;
204
+ case 'markdown':
205
+ return htmlToMarkdown(result.html);
206
+ }
207
+ }
208
+ }
209
+ const contentElement = await findMainContentElement(page);
210
+ if (contentElement) {
211
+ switch (format) {
212
+ case 'text':
213
+ return contentElement.text;
214
+ case 'html':
215
+ return contentElement.html;
216
+ case 'markdown':
217
+ return htmlToMarkdown(contentElement.html);
218
+ }
219
+ }
220
+ const cleaned = await page.evaluate((excludeSelectors) => {
221
+ const clone = document.body.cloneNode(true);
222
+ for (const sel of excludeSelectors) {
223
+ clone.querySelectorAll(sel).forEach((el) => el.remove());
224
+ }
225
+ clone.querySelectorAll('svg').forEach((el) => el.remove());
226
+ clone.querySelectorAll('img').forEach((img) => {
227
+ const src = img.getAttribute('src') || img.getAttribute('data-src') || '';
228
+ if (src.startsWith('data:image'))
229
+ img.remove();
230
+ });
231
+ return {
232
+ text: clone.textContent?.trim() || '',
233
+ html: clone.innerHTML,
234
+ };
235
+ }, EXCLUDE_SELECTORS);
236
+ if (cleaned.text.length > 50) {
237
+ switch (format) {
238
+ case 'text':
239
+ return cleaned.text;
240
+ case 'html':
241
+ return cleaned.html;
242
+ case 'markdown':
243
+ return htmlToMarkdown(cleaned.html);
244
+ }
245
+ }
246
+ switch (format) {
247
+ case 'text':
248
+ return await page.evaluate(() => document.body?.innerText || '');
249
+ case 'html':
250
+ return await page.evaluate(() => document.documentElement?.outerHTML || '');
251
+ case 'markdown': {
252
+ const html = await page.evaluate(() => document.documentElement?.outerHTML || '');
253
+ return htmlToMarkdown(html);
254
+ }
255
+ }
256
+ }
257
+ async function findMainContentElement(page) {
258
+ const selectorWeights = [
259
+ ...SPECIFIC_CONTENT_SELECTORS.map((s) => [s, 3]),
260
+ ...FUZZY_CONTENT_SELECTORS.map((s) => [s, 2.5]),
261
+ ...SEMANTIC_CONTENT_SELECTORS.map((s) => [s, 1.5]),
262
+ ...GENERIC_CONTENT_SELECTORS.map((s) => [s, 1]),
263
+ ];
264
+ const best = await page.evaluate(([selWeights, excludeSelectors]) => {
265
+ function cleanElement(el, excSels) {
266
+ const clone = el.cloneNode(true);
267
+ for (const sel of excSels) {
268
+ clone.querySelectorAll(sel).forEach((n) => n.remove());
269
+ }
270
+ clone
271
+ .querySelectorAll('[aria-hidden="true"], [role="navigation"], [role="banner"], [role="complementary"], [role="search"], [role="contentinfo"]')
272
+ .forEach((n) => n.remove());
273
+ clone.querySelectorAll('[hidden]').forEach((n) => n.remove());
274
+ clone.querySelectorAll('[style]').forEach((n) => {
275
+ const style = n.getAttribute('style') || '';
276
+ if (/display\s*:\s*none|visibility\s*:\s*hidden/i.test(style)) {
277
+ n.remove();
278
+ }
279
+ });
280
+ clone.querySelectorAll('svg').forEach((n) => n.remove());
281
+ clone.querySelectorAll('img').forEach((img) => {
282
+ const src = img.getAttribute('src') || img.getAttribute('data-src') || '';
283
+ if (src.startsWith('data:image')) {
284
+ img.remove();
285
+ }
286
+ });
287
+ return clone;
288
+ }
289
+ let bestResult = null;
290
+ for (const [sel, weight] of selWeights) {
291
+ const el = document.querySelector(sel);
292
+ if (!el)
293
+ continue;
294
+ const clone = cleanElement(el, excludeSelectors);
295
+ const text = clone.textContent?.trim() || '';
296
+ if (text.length <= 50)
297
+ continue;
298
+ const contentTags = clone.querySelectorAll('p, h1, h2, h3, h4, h5, h6, ul, ol, pre, table, blockquote');
299
+ if (contentTags.length < 2)
300
+ continue;
301
+ const textLength = text.length;
302
+ const elementCount = clone.querySelectorAll('*').length;
303
+ const density = elementCount > 0 ? textLength / elementCount : 0;
304
+ if (density < 3)
305
+ continue;
306
+ const score = weight * density * Math.log(textLength + 1) * contentTags.length;
307
+ if (!bestResult || score > bestResult.score) {
308
+ bestResult = { text, html: clone.innerHTML, score };
309
+ }
310
+ }
311
+ return bestResult ? { text: bestResult.text, html: bestResult.html } : null;
312
+ }, [selectorWeights, EXCLUDE_SELECTORS]);
313
+ return best;
314
+ }
315
+ export async function assertElementExists(locator, selector, isRef) {
316
+ const count = await locator.count();
317
+ if (count === 0) {
318
+ if (isRef) {
319
+ throw new Error(`Element ref "${selector}" not found. ` + `Run 'snapshot' to get updated element refs.`);
320
+ }
321
+ else {
322
+ throw new Error(`No element matches selector "${selector}". ` + `Run 'snapshot' to see available elements.`);
323
+ }
324
+ }
325
+ }
326
+ export function toAIFriendlyError(error, selector) {
327
+ const message = error instanceof Error ? error.message : String(error);
328
+ if (message.includes('strict mode violation')) {
329
+ const countMatch = message.match(/resolved to (\d+) elements/);
330
+ const count = countMatch ? countMatch[1] : 'multiple';
331
+ return new Error(`Selector "${selector}" matched ${count} elements. ` +
332
+ `Run 'snapshot' to get updated refs, or use a more specific CSS selector. ` +
333
+ `Tip: Use 'find nth <index> ${selector} --click' to target a specific match.`);
334
+ }
335
+ if (message.includes('intercepts pointer events')) {
336
+ return new Error(`Element "${selector}" is blocked by another element (likely a modal or overlay). ` +
337
+ `Try dismissing any modals/cookie banners first. ` +
338
+ `Tip: Run 'snapshot -i' to see all visible elements and identify what's blocking.`);
339
+ }
340
+ if (message.includes('not visible') && !message.includes('Timeout')) {
341
+ return new Error(`Element "${selector}" is not visible. ` +
342
+ `Try 'scrollintoview ${selector}' or check if it's hidden. ` +
343
+ `Tip: Run 'is visible ${selector}' to confirm visibility state.`);
344
+ }
345
+ if (message.includes('Timeout') && message.includes('exceeded')) {
346
+ return new Error(`Action on "${selector}" timed out. The element may be blocked, still loading, or not interactable. ` +
347
+ `Run 'snapshot' to check the current page state. ` +
348
+ `Tip: If the page is still loading, try 'wait --load networkidle' first.`);
349
+ }
350
+ if (message.includes('waiting for') &&
351
+ (message.includes('to be visible') || message.includes('Timeout'))) {
352
+ return new Error(`Element "${selector}" not found or not visible. ` +
353
+ `Run 'snapshot -i' to see current page elements and their refs. ` +
354
+ `Tip: If using @ref, the page may have changed. Re-run 'snapshot -i' to get fresh refs.`);
355
+ }
356
+ if (message.includes('Execution context was destroyed') || message.includes('Target closed')) {
357
+ return new Error(`Browser context was lost (page navigated or closed). ` +
358
+ `Re-open the page with 'open <url>' and start fresh. ` +
359
+ `Tip: This usually happens after a form submission triggers navigation.`);
360
+ }
361
+ if (message.includes('querySelector') || message.includes('is not a valid selector')) {
362
+ return new Error(`Invalid selector "${selector}". ` +
363
+ `CSS selectors like '#id', '.class', or 'tag' are supported. ` +
364
+ `Tip: Use 'snapshot -i' to get @ref selectors (e.g., @e1) that are always valid.`);
365
+ }
366
+ return error instanceof Error ? error : new Error(message);
367
+ }
368
+ const SPA_CONTENT_SELECTORS = [
369
+ '.markdown-section',
370
+ '.theme-default-content',
371
+ '#app main',
372
+ '#main',
373
+ '.content',
374
+ 'article',
375
+ '.md-content',
376
+ '[role="main"]',
377
+ ];
378
+ export async function waitForSPAContent(page, timeoutMs) {
379
+ try {
380
+ await page.waitForFunction((selectors) => {
381
+ for (const sel of selectors) {
382
+ const el = document.querySelector(sel);
383
+ if (el && el.textContent && el.textContent.trim().length > 50) {
384
+ return true;
385
+ }
386
+ }
387
+ return false;
388
+ }, SPA_CONTENT_SELECTORS, { timeout: timeoutMs });
389
+ await page.waitForTimeout(500);
390
+ }
391
+ catch {
392
+ // SPA content selectors may not match on non-SPA pages
393
+ }
394
+ }
395
+ export function htmlToMarkdown(html) {
396
+ let md = html;
397
+ md = md.replace(/<head[^>]*>[\s\S]*?<\/head>/gi, '');
398
+ md = md.replace(/<meta[^>]*>/gi, '');
399
+ md = md.replace(/<link[^>]*>/gi, '');
400
+ md = md.replace(/<svg[^>]*>[\s\S]*?<\/svg>/gi, '');
401
+ md = md.replace(/<style[^>]*>[\s\S]*?<\/style>/gi, '');
402
+ md = md.replace(/<script[^>]*>[\s\S]*?<\/script>/gi, '');
403
+ md = md.replace(/<noscript[^>]*>[\s\S]*?<\/noscript>/gi, '');
404
+ md = md.replace(/<img[^>]*?(?:src|data-src)\s*=\s*["']?\s*data:image\/[^"'>]+["']?[^>]*\/?>/gi, '');
405
+ md = md.replace(/<img[^>]*?(?:src|data-src)\s*=\s*["']data:[^"']+["'][^>]*\/?>/gi, '');
406
+ md = md.replace(/<pre[^>]*><code[^>]*>([\s\S]*?)<\/code><\/pre>/gis, '\n```\n$1\n```\n');
407
+ md = md.replace(/<pre[^>]*>([\s\S]*?)<\/pre>/gis, '\n```\n$1\n```\n');
408
+ md = md.replace(/<code[^>]*>(.*?)<\/code>/gis, '`$1`');
409
+ md = md.replace(/<h1[^>]*>(.*?)<\/h1>/gis, '\n# $1\n\n');
410
+ md = md.replace(/<h2[^>]*>(.*?)<\/h2>/gis, '\n## $1\n\n');
411
+ md = md.replace(/<h3[^>]*>(.*?)<\/h3>/gis, '\n### $1\n\n');
412
+ md = md.replace(/<h4[^>]*>(.*?)<\/h4>/gis, '\n#### $1\n\n');
413
+ md = md.replace(/<h5[^>]*>(.*?)<\/h5>/gis, '\n##### $1\n\n');
414
+ md = md.replace(/<h6[^>]*>(.*?)<\/h6>/gis, '\n###### $1\n\n');
415
+ md = md.replace(/<strong[^>]*>(.*?)<\/strong>/gis, '**$1**');
416
+ md = md.replace(/<b[^>]*>(.*?)<\/b>/gis, '**$1**');
417
+ md = md.replace(/<em[^>]*>(.*?)<\/em>/gis, '*$1*');
418
+ md = md.replace(/<i[^>]*>(.*?)<\/i>/gis, '*$1*');
419
+ md = md.replace(/<p[^>]*>(.*?)<\/p>/gis, '\n$1\n\n');
420
+ md = md.replace(/<div[^>]*>(.*?)<\/div>/gis, '\n$1\n');
421
+ md = md.replace(/<br\s*\/?>/gi, '\n');
422
+ md = md.replace(/<ul[^>]*>([\s\S]*?)<\/ul>/gis, (_match, content) => {
423
+ return '\n' + content.replace(/<li[^>]*>(.*?)<\/li>/gis, '- $1\n') + '\n';
424
+ });
425
+ md = md.replace(/<ol[^>]*>([\s\S]*?)<\/ol>/gis, (_match, content) => {
426
+ let index = 1;
427
+ return '\n' + content.replace(/<li[^>]*>(.*?)<\/li>/gis, () => `${index++}. $1\n`) + '\n';
428
+ });
429
+ md = md.replace(/<a[^>]*href="([^"]*)"[^>]*>(.*?)<\/a>/gis, '[$2]($1)');
430
+ md = md.replace(/<img[^>]*src="([^"]*)"[^>]*alt="([^"]*)"[^>]*>/gis, '![$2]($1)');
431
+ md = md.replace(/<img[^>]*alt="([^"]*)"[^>]*src="([^"]*)"[^>]*>/gis, '![$1]($2)');
432
+ md = md.replace(/<img[^>]*src="([^"]*)"[^>]*>/gis, '![]($1)');
433
+ md = md.replace(/<blockquote[^>]*>(.*?)<\/blockquote>/gis, '\n> $1\n\n');
434
+ md = md.replace(/<hr[^>]*>/gi, '\n---\n');
435
+ md = md.replace(/<[^>]+>/g, '');
436
+ md = md.replace(/!\[[^\]]*\]\([^)]*data:[^)]*\)/gi, '');
437
+ md = md.replace(/!\[[^\]]*\]\(data:image[^)]*\)/gi, '');
438
+ md = md.replace(/data:image\/[a-zA-Z+]+;base64,[A-Za-z0-9+/=]+/gi, '');
439
+ md = md.replace(/(?<!!)\[\]\([^)]*\)/g, '');
440
+ md = md.replace(/\[Skip to Content\]\(.*?\)/gi, '');
441
+ md = md.replace(/\[([^\]]*?)\n([^\]]*?)\]\(/g, '[$1 $2](');
442
+ md = md.replace(/&nbsp;/g, ' ');
443
+ md = md.replace(/&amp;/g, '&');
444
+ md = md.replace(/&lt;/g, '<');
445
+ md = md.replace(/&gt;/g, '>');
446
+ md = md.replace(/&quot;/g, '"');
447
+ md = md.replace(/&#39;/g, "'");
448
+ md = md.replace(/\n{3,}/g, '\n\n');
449
+ return md.trim();
450
+ }
451
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/actions/utils.ts"],"names":[],"mappings":"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"}