@eko-ai/eko 1.0.8 → 1.0.10

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 (300) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +139 -131
  3. package/dist/core/eko.d.ts +3 -2
  4. package/dist/extension/script/bing.js +0 -0
  5. package/dist/extension/script/build_dom_tree.js +661 -661
  6. package/dist/extension/script/common.js +0 -0
  7. package/dist/extension/script/duckduckgo.js +0 -0
  8. package/dist/extension/script/google.js +0 -0
  9. package/dist/extension/tools/cancel_workflow.d.ts +9 -0
  10. package/dist/extension/tools/get_all_tabs.d.ts +9 -0
  11. package/dist/extension/tools/index.d.ts +3 -1
  12. package/dist/extension/tools/tab_management.d.ts +1 -1
  13. package/dist/extension/utils.d.ts +1 -1
  14. package/dist/extension.cjs.js +749 -278
  15. package/dist/extension.esm.js +749 -278
  16. package/dist/extension_content_script.js +55 -55
  17. package/dist/fellou.cjs.js +18 -18
  18. package/dist/fellou.esm.js +18 -18
  19. package/dist/index.cjs.js +2034 -1609
  20. package/dist/index.d.ts +3 -1
  21. package/dist/index.esm.js +2033 -1610
  22. package/dist/jest.config.js +10 -0
  23. package/dist/jest.config.js.map +1 -0
  24. package/dist/models/action.d.ts +8 -4
  25. package/dist/models/workflow.d.ts +8 -3
  26. package/dist/nodejs/tools/index.d.ts +1 -0
  27. package/dist/nodejs.cjs.js +1832 -1623
  28. package/dist/nodejs.esm.js +1832 -1623
  29. package/dist/rollup.config.js +171 -0
  30. package/dist/rollup.config.js.map +1 -0
  31. package/dist/schemas/workflow.schema.d.ts +2 -13
  32. package/dist/script.js +10 -0
  33. package/dist/script.js.map +1 -0
  34. package/dist/services/llm/claude-provider.d.ts +2 -1
  35. package/dist/services/llm/deepseek-provider.d.ts +13 -0
  36. package/dist/services/llm/openai-provider.d.ts +2 -1
  37. package/dist/services/llm/provider-factory.d.ts +4 -0
  38. package/dist/services/llm/siliconflow-provider.d.ts +13 -0
  39. package/dist/services/parser/workflow-parser.d.ts +0 -7
  40. package/dist/services/workflow/generator.d.ts +1 -0
  41. package/dist/src/core/eko.js +99 -0
  42. package/dist/src/core/eko.js.map +1 -0
  43. package/dist/src/core/tool-registry.js +51 -0
  44. package/dist/src/core/tool-registry.js.map +1 -0
  45. package/dist/src/extension/content/index.js +409 -0
  46. package/dist/src/extension/content/index.js.map +1 -0
  47. package/dist/src/extension/core.js +29 -0
  48. package/dist/src/extension/core.js.map +1 -0
  49. package/dist/src/extension/index.js +12 -0
  50. package/dist/src/extension/index.js.map +1 -0
  51. package/dist/src/extension/script/bing.js +25 -0
  52. package/dist/src/extension/script/bing.js.map +1 -0
  53. package/dist/src/extension/script/build_dom_tree.js +585 -0
  54. package/dist/src/extension/script/build_dom_tree.js.map +1 -0
  55. package/dist/src/extension/script/common.js +203 -0
  56. package/dist/src/extension/script/common.js.map +1 -0
  57. package/dist/src/extension/script/duckduckgo.js +25 -0
  58. package/dist/src/extension/script/duckduckgo.js.map +1 -0
  59. package/dist/src/extension/script/google.js +26 -0
  60. package/dist/src/extension/script/google.js.map +1 -0
  61. package/dist/src/extension/tools/browser.js +174 -0
  62. package/dist/src/extension/tools/browser.js.map +1 -0
  63. package/dist/src/extension/tools/browser_use.js +186 -0
  64. package/dist/src/extension/tools/browser_use.js.map +1 -0
  65. package/dist/src/extension/tools/element_click.js +123 -0
  66. package/dist/src/extension/tools/element_click.js.map +1 -0
  67. package/dist/src/extension/tools/export_file.js +93 -0
  68. package/dist/src/extension/tools/export_file.js.map +1 -0
  69. package/dist/src/extension/tools/extract_content.js +38 -0
  70. package/dist/src/extension/tools/extract_content.js.map +1 -0
  71. package/dist/src/extension/tools/find_element_position.js +125 -0
  72. package/dist/src/extension/tools/find_element_position.js.map +1 -0
  73. package/dist/src/extension/tools/html_script.js +219 -0
  74. package/dist/src/extension/tools/html_script.js.map +1 -0
  75. package/dist/src/extension/tools/index.js +12 -0
  76. package/dist/src/extension/tools/index.js.map +1 -0
  77. package/dist/src/extension/tools/open_url.js +68 -0
  78. package/dist/src/extension/tools/open_url.js.map +1 -0
  79. package/dist/src/extension/tools/request_login.js +87 -0
  80. package/dist/src/extension/tools/request_login.js.map +1 -0
  81. package/dist/src/extension/tools/screenshot.js +26 -0
  82. package/dist/src/extension/tools/screenshot.js.map +1 -0
  83. package/dist/src/extension/tools/tab_management.js +160 -0
  84. package/dist/src/extension/tools/tab_management.js.map +1 -0
  85. package/dist/src/extension/tools/web_search.js +281 -0
  86. package/dist/src/extension/tools/web_search.js.map +1 -0
  87. package/dist/src/extension/utils.js +244 -0
  88. package/dist/src/extension/utils.js.map +1 -0
  89. package/dist/src/fellou/computer.js +104 -0
  90. package/dist/src/fellou/computer.js.map +1 -0
  91. package/dist/src/fellou/index.js +7 -0
  92. package/dist/src/fellou/index.js.map +1 -0
  93. package/dist/src/fellou/tools/computer_use.js +111 -0
  94. package/dist/src/fellou/tools/computer_use.js.map +1 -0
  95. package/dist/src/index.js +9 -0
  96. package/dist/src/index.js.map +1 -0
  97. package/dist/src/models/action.js +364 -0
  98. package/dist/src/models/action.js.map +1 -0
  99. package/dist/src/models/workflow.js +120 -0
  100. package/dist/src/models/workflow.js.map +1 -0
  101. package/dist/src/nodejs/core.js +18 -0
  102. package/dist/src/nodejs/core.js.map +1 -0
  103. package/dist/src/nodejs/index.js +6 -0
  104. package/dist/src/nodejs/index.js.map +1 -0
  105. package/dist/src/nodejs/script/build_dom_tree.js +586 -0
  106. package/dist/src/nodejs/script/build_dom_tree.js.map +1 -0
  107. package/dist/src/nodejs/tools/browser_use.js +458 -0
  108. package/dist/src/nodejs/tools/browser_use.js.map +1 -0
  109. package/dist/src/nodejs/tools/command_execute.js +65 -0
  110. package/dist/src/nodejs/tools/command_execute.js.map +1 -0
  111. package/dist/src/nodejs/tools/file_read.js +45 -0
  112. package/dist/src/nodejs/tools/file_read.js.map +1 -0
  113. package/dist/src/nodejs/tools/file_write.js +95 -0
  114. package/dist/src/nodejs/tools/file_write.js.map +1 -0
  115. package/dist/src/nodejs/tools/index.js +5 -0
  116. package/dist/src/nodejs/tools/index.js.map +1 -0
  117. package/dist/src/schemas/workflow.schema.js +64 -0
  118. package/dist/src/schemas/workflow.schema.js.map +1 -0
  119. package/dist/src/services/llm/claude-provider.js +140 -0
  120. package/dist/src/services/llm/claude-provider.js.map +1 -0
  121. package/dist/src/services/llm/deepseek-provider.js +432 -0
  122. package/dist/src/services/llm/deepseek-provider.js.map +1 -0
  123. package/dist/src/services/llm/glm-provider.js +317 -0
  124. package/dist/src/services/llm/glm-provider.js.map +1 -0
  125. package/dist/src/services/llm/openai-provider copy.js +317 -0
  126. package/dist/src/services/llm/openai-provider copy.js.map +1 -0
  127. package/dist/src/services/llm/openai-provider.js +317 -0
  128. package/dist/src/services/llm/openai-provider.js.map +1 -0
  129. package/dist/src/services/parser/workflow-parser.js +208 -0
  130. package/dist/src/services/parser/workflow-parser.js.map +1 -0
  131. package/dist/src/services/workflow/generator.js +105 -0
  132. package/dist/src/services/workflow/generator.js.map +1 -0
  133. package/dist/src/services/workflow/templates.js +42 -0
  134. package/dist/src/services/workflow/templates.js.map +1 -0
  135. package/dist/src/types/action.types.js +2 -0
  136. package/dist/src/types/action.types.js.map +1 -0
  137. package/dist/src/types/eko.types.js +2 -0
  138. package/dist/src/types/eko.types.js.map +1 -0
  139. package/dist/src/types/index.js +6 -0
  140. package/dist/src/types/index.js.map +1 -0
  141. package/dist/src/types/llm.types.js +2 -0
  142. package/dist/src/types/llm.types.js.map +1 -0
  143. package/dist/src/types/parser.types.js +2 -0
  144. package/dist/src/types/parser.types.js.map +1 -0
  145. package/dist/src/types/tools.types.js +2 -0
  146. package/dist/src/types/tools.types.js.map +1 -0
  147. package/dist/src/types/workflow.types.js +3 -0
  148. package/dist/src/types/workflow.types.js.map +1 -0
  149. package/dist/src/web/core.js +18 -0
  150. package/dist/src/web/core.js.map +1 -0
  151. package/dist/src/web/index.js +9 -0
  152. package/dist/src/web/index.js.map +1 -0
  153. package/dist/src/web/script/build_dom_tree.js +584 -0
  154. package/dist/src/web/script/build_dom_tree.js.map +1 -0
  155. package/dist/src/web/tools/browser.js +249 -0
  156. package/dist/src/web/tools/browser.js.map +1 -0
  157. package/dist/src/web/tools/browser_use.js +176 -0
  158. package/dist/src/web/tools/browser_use.js.map +1 -0
  159. package/dist/src/web/tools/element_click.js +121 -0
  160. package/dist/src/web/tools/element_click.js.map +1 -0
  161. package/dist/src/web/tools/export_file.js +74 -0
  162. package/dist/src/web/tools/export_file.js.map +1 -0
  163. package/dist/src/web/tools/extract_content.js +24 -0
  164. package/dist/src/web/tools/extract_content.js.map +1 -0
  165. package/dist/src/web/tools/find_element_position.js +121 -0
  166. package/dist/src/web/tools/find_element_position.js.map +1 -0
  167. package/dist/src/web/tools/html_script.js +219 -0
  168. package/dist/src/web/tools/html_script.js.map +1 -0
  169. package/dist/src/web/tools/index.js +8 -0
  170. package/dist/src/web/tools/index.js.map +1 -0
  171. package/dist/src/web/tools/screenshot.js +24 -0
  172. package/dist/src/web/tools/screenshot.js.map +1 -0
  173. package/dist/test/integration/claude-provider.test.js +170 -0
  174. package/dist/test/integration/claude-provider.test.js.map +1 -0
  175. package/dist/test/integration/deepseek-provider.test.js +171 -0
  176. package/dist/test/integration/deepseek-provider.test.js.map +1 -0
  177. package/dist/test/integration/glm-provider.test.js +173 -0
  178. package/dist/test/integration/glm-provider.test.js.map +1 -0
  179. package/dist/test/integration/openai-provider.test copy.js +170 -0
  180. package/dist/test/integration/openai-provider.test copy.js.map +1 -0
  181. package/dist/test/integration/openai-provider.test.js +170 -0
  182. package/dist/test/integration/openai-provider.test.js.map +1 -0
  183. package/dist/test/integration/qwen-provider.js +170 -0
  184. package/dist/test/integration/qwen-provider.js.map +1 -0
  185. package/dist/test/integration/qwen-provider.test copy.js +170 -0
  186. package/dist/test/integration/qwen-provider.test copy.js.map +1 -0
  187. package/dist/test/integration/qwen-provider.test.js +170 -0
  188. package/dist/test/integration/qwen-provider.test.js.map +1 -0
  189. package/dist/test/integration/workflow.execution.test.js +152 -0
  190. package/dist/test/integration/workflow.execution.test.js.map +1 -0
  191. package/dist/test/integration/workflow.generation-and-execution.test.js +131 -0
  192. package/dist/test/integration/workflow.generation-and-execution.test.js.map +1 -0
  193. package/dist/test/integration/workflow.generator.test.js +207 -0
  194. package/dist/test/integration/workflow.generator.test.js.map +1 -0
  195. package/dist/test/unit/action.test.js +186 -0
  196. package/dist/test/unit/action.test.js.map +1 -0
  197. package/dist/test/unit/tool-registry.test.js +99 -0
  198. package/dist/test/unit/tool-registry.test.js.map +1 -0
  199. package/dist/test/unit/workflow-parser.test.js +189 -0
  200. package/dist/test/unit/workflow-parser.test.js.map +1 -0
  201. package/dist/test/unit/workflow.test.js +102 -0
  202. package/dist/test/unit/workflow.test.js.map +1 -0
  203. package/dist/types/action.types.d.ts +8 -3
  204. package/dist/types/jest.config.d.ts +10 -0
  205. package/dist/types/rollup.config.d.ts +16 -0
  206. package/dist/types/script.d.ts +1 -0
  207. package/dist/types/src/core/eko.d.ts +20 -0
  208. package/dist/types/src/core/tool-registry.d.ts +13 -0
  209. package/dist/types/src/extension/content/index.d.ts +16 -0
  210. package/dist/types/src/extension/core.d.ts +11 -0
  211. package/dist/types/src/extension/index.d.ts +7 -0
  212. package/dist/types/src/extension/script/bing.d.ts +0 -0
  213. package/dist/types/src/extension/script/build_dom_tree.d.ts +38 -0
  214. package/dist/types/src/extension/script/common.d.ts +0 -0
  215. package/dist/types/src/extension/script/duckduckgo.d.ts +0 -0
  216. package/dist/types/src/extension/script/google.d.ts +0 -0
  217. package/dist/types/src/extension/tools/browser.d.ts +22 -0
  218. package/dist/types/src/extension/tools/browser_use.d.ts +19 -0
  219. package/dist/types/src/extension/tools/element_click.d.ts +12 -0
  220. package/dist/types/src/extension/tools/export_file.d.ts +18 -0
  221. package/dist/types/src/extension/tools/extract_content.d.ts +18 -0
  222. package/dist/types/src/extension/tools/find_element_position.d.ts +12 -0
  223. package/dist/types/src/extension/tools/html_script.d.ts +10 -0
  224. package/dist/types/src/extension/tools/index.d.ts +11 -0
  225. package/dist/types/src/extension/tools/open_url.d.ts +18 -0
  226. package/dist/{extension/tools/form_autofill.d.ts → types/src/extension/tools/request_login.d.ts} +3 -4
  227. package/dist/types/src/extension/tools/screenshot.d.ts +18 -0
  228. package/dist/types/src/extension/tools/tab_management.d.ts +19 -0
  229. package/dist/types/src/extension/tools/web_search.d.ts +18 -0
  230. package/dist/types/src/extension/utils.d.ts +31 -0
  231. package/dist/types/src/fellou/computer.d.ts +20 -0
  232. package/dist/types/src/fellou/index.d.ts +6 -0
  233. package/dist/types/src/fellou/tools/computer_use.d.ts +18 -0
  234. package/dist/types/src/index.d.ts +8 -0
  235. package/dist/types/src/models/action.d.ts +22 -0
  236. package/dist/types/src/models/workflow.d.ts +16 -0
  237. package/dist/types/src/nodejs/core.d.ts +2 -0
  238. package/dist/types/src/nodejs/index.d.ts +3 -0
  239. package/dist/types/src/nodejs/script/build_dom_tree.d.ts +1 -0
  240. package/dist/types/src/nodejs/tools/browser_use.d.ts +28 -0
  241. package/dist/types/src/nodejs/tools/command_execute.d.ts +12 -0
  242. package/dist/types/src/nodejs/tools/file_read.d.ts +11 -0
  243. package/dist/types/src/nodejs/tools/file_write.d.ts +15 -0
  244. package/dist/types/src/nodejs/tools/index.d.ts +4 -0
  245. package/dist/types/src/schemas/workflow.schema.d.ts +88 -0
  246. package/dist/types/src/services/llm/claude-provider.d.ts +11 -0
  247. package/dist/types/src/services/llm/deepseek-provider.d.ts +15 -0
  248. package/dist/types/src/services/llm/glm-provider.d.ts +11 -0
  249. package/dist/types/src/services/llm/openai-provider copy.d.ts +11 -0
  250. package/dist/types/src/services/llm/openai-provider.d.ts +11 -0
  251. package/dist/types/src/services/parser/workflow-parser.d.ts +29 -0
  252. package/dist/types/src/services/workflow/generator.d.ts +13 -0
  253. package/dist/types/src/services/workflow/templates.d.ts +8 -0
  254. package/dist/types/src/types/action.types.d.ts +38 -0
  255. package/dist/types/src/types/eko.types.d.ts +21 -0
  256. package/dist/types/src/types/index.d.ts +5 -0
  257. package/dist/types/src/types/llm.types.d.ts +54 -0
  258. package/dist/types/src/types/parser.types.d.ts +9 -0
  259. package/dist/types/src/types/tools.types.d.ts +88 -0
  260. package/dist/types/src/types/workflow.types.d.ts +39 -0
  261. package/dist/types/src/web/core.d.ts +2 -0
  262. package/dist/types/src/web/index.d.ts +5 -0
  263. package/dist/types/src/web/script/build_dom_tree.d.ts +10 -0
  264. package/dist/types/src/web/tools/browser.d.ts +21 -0
  265. package/dist/types/src/web/tools/browser_use.d.ts +19 -0
  266. package/dist/types/src/web/tools/element_click.d.ts +12 -0
  267. package/dist/types/src/web/tools/export_file.d.ts +18 -0
  268. package/dist/types/src/web/tools/extract_content.d.ts +17 -0
  269. package/dist/types/src/web/tools/find_element_position.d.ts +12 -0
  270. package/dist/types/src/web/tools/html_script.d.ts +10 -0
  271. package/dist/types/src/web/tools/index.d.ts +7 -0
  272. package/dist/types/src/web/tools/screenshot.d.ts +18 -0
  273. package/dist/types/test/integration/claude-provider.test.d.ts +1 -0
  274. package/dist/types/test/integration/deepseek-provider.test.d.ts +1 -0
  275. package/dist/types/test/integration/glm-provider.test.d.ts +1 -0
  276. package/dist/types/test/integration/openai-provider.test copy.d.ts +1 -0
  277. package/dist/types/test/integration/openai-provider.test.d.ts +1 -0
  278. package/dist/types/test/integration/qwen-provider.d.ts +1 -0
  279. package/dist/types/test/integration/qwen-provider.test copy.d.ts +1 -0
  280. package/dist/types/test/integration/qwen-provider.test.d.ts +1 -0
  281. package/dist/types/test/integration/workflow.execution.test.d.ts +1 -0
  282. package/dist/types/test/integration/workflow.generation-and-execution.test.d.ts +1 -0
  283. package/dist/types/test/integration/workflow.generator.test.d.ts +1 -0
  284. package/dist/types/test/unit/action.test.d.ts +1 -0
  285. package/dist/types/test/unit/tool-registry.test.d.ts +1 -0
  286. package/dist/types/test/unit/workflow-parser.test.d.ts +1 -0
  287. package/dist/types/test/unit/workflow.test.d.ts +1 -0
  288. package/dist/types/tools.types.d.ts +44 -1
  289. package/dist/types/workflow.types.d.ts +22 -9
  290. package/dist/universal_tools/cancel_workflow.d.ts +9 -0
  291. package/dist/universal_tools/human/text.d.ts +9 -0
  292. package/dist/universal_tools/human.d.ts +30 -0
  293. package/dist/universal_tools/index.d.ts +4 -0
  294. package/dist/universal_tools/summary_workflow.d.ts +9 -0
  295. package/dist/utils/execution-logger.d.ts +69 -0
  296. package/dist/web.cjs.js +117 -117
  297. package/dist/web.esm.js +117 -117
  298. package/package.json +106 -107
  299. package/dist/fellou/tools/index.d.ts +0 -2
  300. package/dist/types/framework.types.d.ts +0 -11
@@ -0,0 +1,586 @@
1
+ export function run_build_dom_tree() {
2
+ /**
3
+ * Get clickable elements on the page
4
+ *
5
+ * @param {*} doHighlightElements Is highlighted
6
+ * @param {*} includeAttributes [attr_names...]
7
+ * @returns { element_str, selector_map }
8
+ */
9
+ function get_clickable_elements(doHighlightElements = true, includeAttributes) {
10
+ window.clickable_elements = {};
11
+ let page_tree = build_dom_tree(doHighlightElements);
12
+ let element_tree = parse_node(page_tree);
13
+ let selector_map = create_selector_map(element_tree);
14
+ let element_str = clickable_elements_to_string(element_tree, includeAttributes);
15
+ return { element_str, selector_map };
16
+ }
17
+ function get_highlight_element(highlightIndex) {
18
+ return window.clickable_elements[highlightIndex];
19
+ }
20
+ function remove_highlight() {
21
+ let highlight = document.getElementById('playwright-highlight-container');
22
+ if (highlight) {
23
+ highlight.remove();
24
+ }
25
+ }
26
+ function clickable_elements_to_string(element_tree, includeAttributes) {
27
+ if (!includeAttributes) {
28
+ includeAttributes = [
29
+ 'id',
30
+ 'title',
31
+ 'type',
32
+ 'name',
33
+ 'role',
34
+ // 'href',
35
+ 'tabindex',
36
+ 'aria-label',
37
+ 'placeholder',
38
+ 'value',
39
+ 'alt',
40
+ 'aria-expanded',
41
+ ];
42
+ }
43
+ function get_all_text_till_next_clickable_element(element_node) {
44
+ let text_parts = [];
45
+ function collect_text(node) {
46
+ if (node.tagName && node != element_node && node.highlightIndex != null) {
47
+ return;
48
+ }
49
+ if (!node.tagName && node.text) {
50
+ text_parts.push(node.text);
51
+ }
52
+ else if (node.tagName) {
53
+ for (let i = 0; i < node.children.length; i++) {
54
+ collect_text(node.children[i]);
55
+ }
56
+ }
57
+ }
58
+ collect_text(element_node);
59
+ return text_parts.join('\n').trim().replace(/\n+/g, ' ');
60
+ }
61
+ function has_parent_with_highlight_index(node) {
62
+ let current = node.parent;
63
+ while (current) {
64
+ if (current.highlightIndex != null) {
65
+ return true;
66
+ }
67
+ current = current.parent;
68
+ }
69
+ return false;
70
+ }
71
+ let formatted_text = [];
72
+ function process_node(node, depth) {
73
+ if (node.text == null) {
74
+ if (node.highlightIndex != null) {
75
+ let attributes_str = '';
76
+ if (includeAttributes) {
77
+ for (let i = 0; i < includeAttributes.length; i++) {
78
+ let key = includeAttributes[i];
79
+ let value = node.attributes[key];
80
+ if (key && value) {
81
+ attributes_str += ` ${key}="${value}"`;
82
+ }
83
+ }
84
+ attributes_str = attributes_str.replace(/\n+/g, ' ');
85
+ }
86
+ let text = get_all_text_till_next_clickable_element(node);
87
+ formatted_text.push(`[${node.highlightIndex}]:<${node.tagName}${attributes_str}>${text}</${node.tagName}>`);
88
+ }
89
+ for (let i = 0; i < node.children.length; i++) {
90
+ let child = node.children[i];
91
+ process_node(child, depth + 1);
92
+ }
93
+ }
94
+ else if (!has_parent_with_highlight_index(node)) {
95
+ formatted_text.push(`[]:${node.text}`);
96
+ }
97
+ }
98
+ process_node(element_tree, 0);
99
+ return formatted_text.join('\n');
100
+ }
101
+ function create_selector_map(element_tree) {
102
+ let selector_map = {};
103
+ function process_node(node) {
104
+ if (node.tagName) {
105
+ if (node.highlightIndex != null) {
106
+ selector_map[node.highlightIndex] = node;
107
+ }
108
+ for (let i = 0; i < node.children.length; i++) {
109
+ process_node(node.children[i]);
110
+ }
111
+ }
112
+ }
113
+ process_node(element_tree);
114
+ return selector_map;
115
+ }
116
+ function parse_node(node_data, parent) {
117
+ if (!node_data) {
118
+ return;
119
+ }
120
+ if (node_data.type == 'TEXT_NODE') {
121
+ return {
122
+ text: node_data.text || '',
123
+ isVisible: node_data.isVisible || false,
124
+ parent: parent,
125
+ };
126
+ }
127
+ let element_node = {
128
+ tagName: node_data.tagName,
129
+ xpath: node_data.xpath,
130
+ highlightIndex: node_data.highlightIndex,
131
+ attributes: node_data.attributes || {},
132
+ isVisible: node_data.isVisible || false,
133
+ isInteractive: node_data.isInteractive || false,
134
+ isTopElement: node_data.isTopElement || false,
135
+ shadowRoot: node_data.shadowRoot || false,
136
+ children: [],
137
+ parent: parent,
138
+ };
139
+ if (node_data.children) {
140
+ let children = [];
141
+ for (let i = 0; i < node_data.children.length; i++) {
142
+ let child = node_data.children[i];
143
+ if (child) {
144
+ let child_node = parse_node(child, element_node);
145
+ if (child_node) {
146
+ children.push(child_node);
147
+ }
148
+ }
149
+ }
150
+ element_node.children = children;
151
+ }
152
+ return element_node;
153
+ }
154
+ function build_dom_tree(doHighlightElements) {
155
+ let highlightIndex = 0; // Reset highlight index
156
+ function highlightElement(element, index, parentIframe = null) {
157
+ // Create or get highlight container
158
+ let container = document.getElementById('playwright-highlight-container');
159
+ if (!container) {
160
+ container = document.createElement('div');
161
+ container.id = 'playwright-highlight-container';
162
+ container.style.position = 'fixed';
163
+ container.style.pointerEvents = 'none';
164
+ container.style.top = '0';
165
+ container.style.left = '0';
166
+ container.style.width = '100%';
167
+ container.style.height = '100%';
168
+ container.style.zIndex = '2147483647'; // Maximum z-index value
169
+ document.documentElement.appendChild(container);
170
+ }
171
+ // Generate a color based on the index
172
+ const colors = [
173
+ '#FF0000',
174
+ '#00FF00',
175
+ '#0000FF',
176
+ '#FFA500',
177
+ '#800080',
178
+ '#008080',
179
+ '#FF69B4',
180
+ '#4B0082',
181
+ '#FF4500',
182
+ '#2E8B57',
183
+ '#DC143C',
184
+ '#4682B4',
185
+ ];
186
+ const colorIndex = index % colors.length;
187
+ const baseColor = colors[colorIndex];
188
+ const backgroundColor = `${baseColor}1A`; // 10% opacity version of the color
189
+ // Create highlight overlay
190
+ const overlay = document.createElement('div');
191
+ overlay.style.position = 'absolute';
192
+ overlay.style.border = `2px solid ${baseColor}`;
193
+ overlay.style.pointerEvents = 'none';
194
+ overlay.style.boxSizing = 'border-box';
195
+ // Position overlay based on element
196
+ const rect = element.getBoundingClientRect();
197
+ let top = rect.top;
198
+ let left = rect.left;
199
+ if (rect.width < window.innerWidth / 2 || rect.height < window.innerHeight / 2) {
200
+ overlay.style.backgroundColor = backgroundColor;
201
+ }
202
+ // Adjust position if element is inside an iframe
203
+ if (parentIframe) {
204
+ const iframeRect = parentIframe.getBoundingClientRect();
205
+ top += iframeRect.top;
206
+ left += iframeRect.left;
207
+ }
208
+ overlay.style.top = `${top}px`;
209
+ overlay.style.left = `${left}px`;
210
+ overlay.style.width = `${rect.width}px`;
211
+ overlay.style.height = `${rect.height}px`;
212
+ // Create label
213
+ const label = document.createElement('div');
214
+ label.className = 'playwright-highlight-label';
215
+ label.style.position = 'absolute';
216
+ label.style.background = baseColor;
217
+ label.style.color = 'white';
218
+ label.style.padding = '1px 4px';
219
+ label.style.borderRadius = '4px';
220
+ label.style.fontSize = `${Math.min(12, Math.max(8, rect.height / 2))}px`; // Responsive font size
221
+ label.textContent = index;
222
+ // Calculate label position
223
+ const labelWidth = 20; // Approximate width
224
+ const labelHeight = 16; // Approximate height
225
+ // Default position (top-right corner inside the box)
226
+ let labelTop = top + 2;
227
+ let labelLeft = left + rect.width - labelWidth - 2;
228
+ // Adjust if box is too small
229
+ if (rect.width < labelWidth + 4 || rect.height < labelHeight + 4) {
230
+ // Position outside the box if it's too small
231
+ labelTop = top - labelHeight - 2;
232
+ labelLeft = left + rect.width - labelWidth;
233
+ }
234
+ // Ensure label stays within viewport
235
+ if (labelTop < 0)
236
+ labelTop = top + 2;
237
+ if (labelLeft < 0)
238
+ labelLeft = left + 2;
239
+ if (labelLeft + labelWidth > window.innerWidth) {
240
+ labelLeft = left + rect.width - labelWidth - 2;
241
+ }
242
+ label.style.top = `${labelTop}px`;
243
+ label.style.left = `${labelLeft}px`;
244
+ // Add to container
245
+ container.appendChild(overlay);
246
+ container.appendChild(label);
247
+ // Store reference for cleanup
248
+ element.setAttribute('browser-user-highlight-id', `playwright-highlight-${index}`);
249
+ return index + 1;
250
+ }
251
+ // Helper function to generate XPath as a tree
252
+ function getXPathTree(element, stopAtBoundary = true) {
253
+ const segments = [];
254
+ let currentElement = element;
255
+ while (currentElement && currentElement.nodeType === Node.ELEMENT_NODE) {
256
+ // Stop if we hit a shadow root or iframe
257
+ if (stopAtBoundary &&
258
+ (currentElement.parentNode instanceof ShadowRoot ||
259
+ currentElement.parentNode instanceof HTMLIFrameElement)) {
260
+ break;
261
+ }
262
+ let index = 0;
263
+ let sibling = currentElement.previousSibling;
264
+ while (sibling) {
265
+ if (sibling.nodeType === Node.ELEMENT_NODE &&
266
+ sibling.nodeName === currentElement.nodeName) {
267
+ index++;
268
+ }
269
+ sibling = sibling.previousSibling;
270
+ }
271
+ const tagName = currentElement.nodeName.toLowerCase();
272
+ const xpathIndex = index > 0 ? `[${index + 1}]` : '';
273
+ segments.unshift(`${tagName}${xpathIndex}`);
274
+ currentElement = currentElement.parentNode;
275
+ }
276
+ return segments.join('/');
277
+ }
278
+ // Helper function to check if element is accepted
279
+ function isElementAccepted(element) {
280
+ const leafElementDenyList = new Set(['svg', 'script', 'style', 'link', 'meta']);
281
+ return !leafElementDenyList.has(element.tagName.toLowerCase());
282
+ }
283
+ // Helper function to check if element is interactive
284
+ function isInteractiveElement(element) {
285
+ var _a, _b, _c, _d, _e;
286
+ // Base interactive elements and roles
287
+ const interactiveElements = new Set([
288
+ 'a',
289
+ 'button',
290
+ 'details',
291
+ 'embed',
292
+ 'input',
293
+ 'label',
294
+ 'menu',
295
+ 'menuitem',
296
+ 'object',
297
+ 'select',
298
+ 'textarea',
299
+ 'summary',
300
+ ]);
301
+ const interactiveRoles = new Set([
302
+ 'button',
303
+ 'menu',
304
+ 'menuitem',
305
+ 'link',
306
+ 'checkbox',
307
+ 'radio',
308
+ 'slider',
309
+ 'tab',
310
+ 'tabpanel',
311
+ 'textbox',
312
+ 'combobox',
313
+ 'grid',
314
+ 'listbox',
315
+ 'option',
316
+ 'progressbar',
317
+ 'scrollbar',
318
+ 'searchbox',
319
+ 'switch',
320
+ 'tree',
321
+ 'treeitem',
322
+ 'spinbutton',
323
+ 'tooltip',
324
+ 'a-button-inner',
325
+ 'a-dropdown-button',
326
+ 'click',
327
+ 'menuitemcheckbox',
328
+ 'menuitemradio',
329
+ 'a-button-text',
330
+ 'button-text',
331
+ 'button-icon',
332
+ 'button-icon-only',
333
+ 'button-text-icon-only',
334
+ 'dropdown',
335
+ 'combobox',
336
+ ]);
337
+ const tagName = element.tagName.toLowerCase();
338
+ const role = element.getAttribute('role');
339
+ const ariaRole = element.getAttribute('aria-role');
340
+ const tabIndex = element.getAttribute('tabindex');
341
+ // Basic role/attribute checks
342
+ const hasInteractiveRole = interactiveElements.has(tagName) ||
343
+ interactiveRoles.has(role) ||
344
+ interactiveRoles.has(ariaRole) ||
345
+ (tabIndex !== null && tabIndex !== '-1') ||
346
+ element.getAttribute('data-action') === 'a-dropdown-select' ||
347
+ element.getAttribute('data-action') === 'a-dropdown-button';
348
+ if (hasInteractiveRole)
349
+ return true;
350
+ // Get computed style
351
+ const style = window.getComputedStyle(element);
352
+ // Check if element has click-like styling
353
+ // const hasClickStyling = style.cursor === 'pointer' ||
354
+ // element.style.cursor === 'pointer' ||
355
+ // style.pointerEvents !== 'none';
356
+ // Check for event listeners
357
+ const hasClickHandler = element.onclick !== null ||
358
+ element.getAttribute('onclick') !== null ||
359
+ element.hasAttribute('ng-click') ||
360
+ element.hasAttribute('@click') ||
361
+ element.hasAttribute('v-on:click');
362
+ // Helper function to safely get event listeners
363
+ function getEventListeners(el) {
364
+ var _a;
365
+ try {
366
+ // Try to get listeners using Chrome DevTools API
367
+ return ((_a = window.getEventListeners) === null || _a === void 0 ? void 0 : _a.call(window, el)) || {};
368
+ }
369
+ catch (e) {
370
+ // Fallback: check for common event properties
371
+ const listeners = {};
372
+ // List of common event types to check
373
+ const eventTypes = [
374
+ 'click',
375
+ 'mousedown',
376
+ 'mouseup',
377
+ 'touchstart',
378
+ 'touchend',
379
+ 'keydown',
380
+ 'keyup',
381
+ 'focus',
382
+ 'blur',
383
+ ];
384
+ for (const type of eventTypes) {
385
+ const handler = el[`on${type}`];
386
+ if (handler) {
387
+ listeners[type] = [
388
+ {
389
+ listener: handler,
390
+ useCapture: false,
391
+ },
392
+ ];
393
+ }
394
+ }
395
+ return listeners;
396
+ }
397
+ }
398
+ // Check for click-related events on the element itself
399
+ const listeners = getEventListeners(element);
400
+ const hasClickListeners = listeners &&
401
+ (((_a = listeners.click) === null || _a === void 0 ? void 0 : _a.length) > 0 ||
402
+ ((_b = listeners.mousedown) === null || _b === void 0 ? void 0 : _b.length) > 0 ||
403
+ ((_c = listeners.mouseup) === null || _c === void 0 ? void 0 : _c.length) > 0 ||
404
+ ((_d = listeners.touchstart) === null || _d === void 0 ? void 0 : _d.length) > 0 ||
405
+ ((_e = listeners.touchend) === null || _e === void 0 ? void 0 : _e.length) > 0);
406
+ // Check for ARIA properties that suggest interactivity
407
+ const hasAriaProps = element.hasAttribute('aria-expanded') ||
408
+ element.hasAttribute('aria-pressed') ||
409
+ element.hasAttribute('aria-selected') ||
410
+ element.hasAttribute('aria-checked');
411
+ // Check for form-related functionality
412
+ const isFormRelated = element.form !== undefined ||
413
+ element.hasAttribute('contenteditable') ||
414
+ style.userSelect !== 'none';
415
+ // Check if element is draggable
416
+ const isDraggable = element.draggable || element.getAttribute('draggable') === 'true';
417
+ return (hasAriaProps ||
418
+ // hasClickStyling ||
419
+ hasClickHandler ||
420
+ hasClickListeners ||
421
+ // isFormRelated ||
422
+ isDraggable);
423
+ }
424
+ // Helper function to check if element is visible
425
+ function isElementVisible(element) {
426
+ const style = window.getComputedStyle(element);
427
+ return (element.offsetWidth > 0 &&
428
+ element.offsetHeight > 0 &&
429
+ style.visibility !== 'hidden' &&
430
+ style.display !== 'none');
431
+ }
432
+ // Helper function to check if element is the top element at its position
433
+ function isTopElement(element) {
434
+ // Find the correct document context and root element
435
+ let doc = element.ownerDocument;
436
+ // If we're in an iframe, elements are considered top by default
437
+ if (doc !== window.document) {
438
+ return true;
439
+ }
440
+ // For shadow DOM, we need to check within its own root context
441
+ const shadowRoot = element.getRootNode();
442
+ if (shadowRoot instanceof ShadowRoot) {
443
+ const rect = element.getBoundingClientRect();
444
+ const point = { x: rect.left + rect.width / 2, y: rect.top + rect.height / 2 };
445
+ try {
446
+ // Use shadow root's elementFromPoint to check within shadow DOM context
447
+ const topEl = shadowRoot.elementFromPoint(point.x, point.y);
448
+ if (!topEl)
449
+ return false;
450
+ // Check if the element or any of its parents match our target element
451
+ let current = topEl;
452
+ while (current && current !== shadowRoot) {
453
+ if (current === element)
454
+ return true;
455
+ current = current.parentElement;
456
+ }
457
+ return false;
458
+ }
459
+ catch (e) {
460
+ return true; // If we can't determine, consider it visible
461
+ }
462
+ }
463
+ // Regular DOM elements
464
+ const rect = element.getBoundingClientRect();
465
+ const point = { x: rect.left + rect.width / 2, y: rect.top + rect.height / 2 };
466
+ try {
467
+ const topEl = document.elementFromPoint(point.x, point.y);
468
+ if (!topEl)
469
+ return false;
470
+ let current = topEl;
471
+ while (current && current !== document.documentElement) {
472
+ if (current === element)
473
+ return true;
474
+ current = current.parentElement;
475
+ }
476
+ return false;
477
+ }
478
+ catch (e) {
479
+ return true;
480
+ }
481
+ }
482
+ // Helper function to check if text node is visible
483
+ function isTextNodeVisible(textNode) {
484
+ var _a;
485
+ const range = document.createRange();
486
+ range.selectNodeContents(textNode);
487
+ const rect = range.getBoundingClientRect();
488
+ return (rect.width !== 0 &&
489
+ rect.height !== 0 &&
490
+ rect.top >= 0 &&
491
+ rect.top <= window.innerHeight &&
492
+ ((_a = textNode.parentElement) === null || _a === void 0 ? void 0 : _a.checkVisibility({
493
+ checkOpacity: true,
494
+ checkVisibilityCSS: true,
495
+ })));
496
+ }
497
+ // Function to traverse the DOM and create nested JSON
498
+ function buildDomTree(node, parentIframe = null) {
499
+ var _a;
500
+ if (!node)
501
+ return null;
502
+ // Special case for text nodes
503
+ if (node.nodeType === Node.TEXT_NODE) {
504
+ const textContent = node.textContent.trim();
505
+ if (textContent && isTextNodeVisible(node)) {
506
+ return {
507
+ type: 'TEXT_NODE',
508
+ text: textContent,
509
+ isVisible: true,
510
+ };
511
+ }
512
+ return null;
513
+ }
514
+ // Check if element is accepted
515
+ if (node.nodeType === Node.ELEMENT_NODE && !isElementAccepted(node)) {
516
+ return null;
517
+ }
518
+ const nodeData = {
519
+ tagName: node.tagName ? node.tagName.toLowerCase() : null,
520
+ attributes: {},
521
+ xpath: node.nodeType === Node.ELEMENT_NODE ? getXPathTree(node, true) : null,
522
+ children: [],
523
+ };
524
+ // Copy all attributes if the node is an element
525
+ if (node.nodeType === Node.ELEMENT_NODE && node.attributes) {
526
+ // Use getAttributeNames() instead of directly iterating attributes
527
+ const attributeNames = ((_a = node.getAttributeNames) === null || _a === void 0 ? void 0 : _a.call(node)) || [];
528
+ for (const name of attributeNames) {
529
+ nodeData.attributes[name] = node.getAttribute(name);
530
+ }
531
+ }
532
+ if (node.nodeType === Node.ELEMENT_NODE) {
533
+ const isInteractive = isInteractiveElement(node);
534
+ const isVisible = isElementVisible(node);
535
+ const isTop = isTopElement(node);
536
+ nodeData.isInteractive = isInteractive;
537
+ nodeData.isVisible = isVisible;
538
+ nodeData.isTopElement = isTop;
539
+ // Highlight if element meets all criteria and highlighting is enabled
540
+ if (isInteractive && isVisible && isTop) {
541
+ nodeData.highlightIndex = highlightIndex++;
542
+ window.clickable_elements[nodeData.highlightIndex] = node;
543
+ if (doHighlightElements) {
544
+ highlightElement(node, nodeData.highlightIndex, parentIframe);
545
+ }
546
+ }
547
+ }
548
+ // Only add iframeContext if we're inside an iframe
549
+ // if (parentIframe) {
550
+ // nodeData.iframeContext = `iframe[src="${parentIframe.src || ''}"]`;
551
+ // }
552
+ // Only add shadowRoot field if it exists
553
+ if (node.shadowRoot) {
554
+ nodeData.shadowRoot = true;
555
+ }
556
+ // Handle shadow DOM
557
+ if (node.shadowRoot) {
558
+ const shadowChildren = Array.from(node.shadowRoot.childNodes).map((child) => buildDomTree(child, parentIframe));
559
+ nodeData.children.push(...shadowChildren);
560
+ }
561
+ // Handle iframes
562
+ if (node.tagName === 'IFRAME') {
563
+ try {
564
+ const iframeDoc = node.contentDocument || node.contentWindow.document;
565
+ if (iframeDoc) {
566
+ const iframeChildren = Array.from(iframeDoc.body.childNodes).map((child) => buildDomTree(child, node));
567
+ nodeData.children.push(...iframeChildren);
568
+ }
569
+ }
570
+ catch (e) {
571
+ console.warn('Unable to access iframe:', node);
572
+ }
573
+ }
574
+ else {
575
+ const children = Array.from(node.childNodes).map((child) => buildDomTree(child, parentIframe));
576
+ nodeData.children.push(...children);
577
+ }
578
+ return nodeData;
579
+ }
580
+ return buildDomTree(document.body);
581
+ }
582
+ window.get_clickable_elements = get_clickable_elements;
583
+ window.get_highlight_element = get_highlight_element;
584
+ window.remove_highlight = remove_highlight;
585
+ }
586
+ //# sourceMappingURL=build_dom_tree.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build_dom_tree.js","sourceRoot":"","sources":["../../../../src/nodejs/script/build_dom_tree.js"],"names":[],"mappings":"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"}