@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,249 @@
1
+ import html2canvas from 'html2canvas';
2
+ export function type(text, xpath, highlightIndex) {
3
+ return do_input(text, xpath, highlightIndex);
4
+ }
5
+ export function clear_input(xpath, highlightIndex) {
6
+ return do_input('', xpath, highlightIndex);
7
+ }
8
+ export function left_click(xpath, highlightIndex) {
9
+ return simulateMouseEvent(['mousedown', 'mouseup', 'click'], 0, xpath, highlightIndex);
10
+ }
11
+ export function right_click(xpath, highlightIndex) {
12
+ return simulateMouseEvent(['mousedown', 'mouseup', 'contextmenu'], 2, xpath, highlightIndex);
13
+ }
14
+ export function double_click(xpath, highlightIndex) {
15
+ return simulateMouseEvent(['mousedown', 'mouseup', 'click', 'mousedown', 'mouseup', 'click', 'dblclick'], 0, xpath, highlightIndex);
16
+ }
17
+ export async function screenshot(compress) {
18
+ const [width, height] = size();
19
+ const scrollX = window.scrollX || window.pageXOffset;
20
+ const scrollY = window.scrollY || window.pageYOffset;
21
+ const canvas = await html2canvas(document.body, {
22
+ width,
23
+ height,
24
+ windowWidth: width,
25
+ windowHeight: height,
26
+ x: scrollX,
27
+ y: scrollY,
28
+ scrollX: -scrollX,
29
+ scrollY: -scrollY,
30
+ useCORS: true,
31
+ foreignObjectRendering: true,
32
+ // backgroundColor: 'white',
33
+ // scale: window.devicePixelRatio || 1,
34
+ });
35
+ let dataUrl = canvas.toDataURL('image/png');
36
+ if (compress) {
37
+ dataUrl = await compress_image(dataUrl, 0.7, 0.8);
38
+ }
39
+ let data = dataUrl.substring(dataUrl.indexOf('base64,') + 7);
40
+ return {
41
+ image: {
42
+ type: 'base64',
43
+ media_type: dataUrl.indexOf('image/png') > -1 ? 'image/png' : 'image/jpeg',
44
+ data: data,
45
+ },
46
+ };
47
+ }
48
+ export function compress_image(dataUrl, scale = 0.8, quality = 0.8) {
49
+ return new Promise((resolve) => {
50
+ const img = new Image();
51
+ img.onload = function () {
52
+ const canvas = document.createElement('canvas');
53
+ const ctx = canvas.getContext('2d');
54
+ let width = img.width * scale;
55
+ let height = img.height * scale;
56
+ canvas.width = width;
57
+ canvas.height = height;
58
+ ctx.drawImage(img, 0, 0, width, height);
59
+ resolve(canvas.toDataURL('image/jpeg', quality));
60
+ };
61
+ img.onerror = function () {
62
+ resolve(dataUrl);
63
+ };
64
+ img.src = dataUrl;
65
+ });
66
+ }
67
+ export function scroll_to(xpath, highlightIndex) {
68
+ let element = null;
69
+ if (highlightIndex != null) {
70
+ element = window.get_highlight_element(highlightIndex);
71
+ }
72
+ else if (xpath) {
73
+ element = document.evaluate(xpath, document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null)
74
+ .singleNodeValue;
75
+ }
76
+ if (!element) {
77
+ return false;
78
+ }
79
+ element.scrollIntoView({
80
+ behavior: 'smooth',
81
+ });
82
+ return true;
83
+ }
84
+ export function get_dropdown_options(xpath, highlightIndex) {
85
+ let select = null;
86
+ if (highlightIndex != null) {
87
+ select = window.get_highlight_element(highlightIndex);
88
+ }
89
+ else if (xpath) {
90
+ select = document.evaluate(xpath, document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null)
91
+ .singleNodeValue;
92
+ }
93
+ if (!select) {
94
+ return null;
95
+ }
96
+ return {
97
+ options: Array.from(select.options).map((opt) => ({
98
+ index: opt.index,
99
+ text: opt.text.trim(),
100
+ value: opt.value,
101
+ })),
102
+ id: select.id,
103
+ name: select.name,
104
+ };
105
+ }
106
+ export function select_dropdown_option(text, xpath, highlightIndex) {
107
+ let select = null;
108
+ if (highlightIndex != null) {
109
+ select = window.get_highlight_element(highlightIndex);
110
+ }
111
+ else if (xpath) {
112
+ select = document.evaluate(xpath, document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null)
113
+ .singleNodeValue;
114
+ }
115
+ if (!select || select.tagName.toUpperCase() !== 'SELECT') {
116
+ return { success: false, error: 'Select not found or invalid element type' };
117
+ }
118
+ const option = Array.from(select.options).find((opt) => opt.text.trim() === text);
119
+ if (!option) {
120
+ return {
121
+ success: false,
122
+ error: 'Option not found',
123
+ availableOptions: Array.from(select.options).map((o) => o.text.trim()),
124
+ };
125
+ }
126
+ select.value = option.value;
127
+ select.dispatchEvent(new Event('change'));
128
+ return {
129
+ success: true,
130
+ selectedValue: option.value,
131
+ selectedText: option.text.trim(),
132
+ };
133
+ }
134
+ export function extractHtmlContent() {
135
+ let element = document.body;
136
+ let main = element.querySelector('main');
137
+ let content = '';
138
+ if (main) {
139
+ let articles = main.querySelectorAll('article');
140
+ if (articles && articles.length > 0) {
141
+ for (let i = 0; i < articles.length; i++) {
142
+ content += articles[i].innerText.trim() + '\n';
143
+ }
144
+ }
145
+ else {
146
+ content += main.innerText.trim();
147
+ }
148
+ }
149
+ else {
150
+ let articles = element.querySelectorAll('article');
151
+ if (articles && articles.length > 0) {
152
+ for (let i = 0; i < articles.length; i++) {
153
+ content += articles[i].innerText.trim() + '\n';
154
+ }
155
+ }
156
+ }
157
+ content = content.trim();
158
+ if (!content) {
159
+ content = element.innerText;
160
+ }
161
+ return content.replace(/\n+/g, '\n').replace(/ +/g, ' ').trim();
162
+ }
163
+ export function size() {
164
+ return [
165
+ window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth,
166
+ window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight,
167
+ ];
168
+ }
169
+ function do_input(text, xpath, highlightIndex) {
170
+ let element = null;
171
+ if (highlightIndex != null) {
172
+ element = window.get_highlight_element(highlightIndex);
173
+ }
174
+ else if (xpath) {
175
+ element = document.evaluate(xpath, document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null)
176
+ .singleNodeValue;
177
+ }
178
+ if (!element) {
179
+ return false;
180
+ }
181
+ let enter = false;
182
+ if (text.endsWith('\\n')) {
183
+ enter = true;
184
+ text = text.substring(0, text.length - 2);
185
+ }
186
+ else if (text.endsWith('\n')) {
187
+ enter = true;
188
+ text = text.substring(0, text.length - 1);
189
+ }
190
+ let input;
191
+ if (element.tagName == 'INPUT' ||
192
+ element.tagName == 'TEXTAREA' ||
193
+ element.childElementCount == 0) {
194
+ input = element;
195
+ }
196
+ else {
197
+ input = element.querySelector('input') || element.querySelector('textarea') || element;
198
+ }
199
+ input.focus && input.focus();
200
+ if (!text) {
201
+ if (input.value == '') {
202
+ return true;
203
+ }
204
+ input.value = '';
205
+ }
206
+ else {
207
+ input.value += text;
208
+ }
209
+ let result = input.dispatchEvent(new Event('input', { bubbles: true }));
210
+ if (enter) {
211
+ ['keydown', 'keypress', 'keyup'].forEach((eventType) => {
212
+ const event = new KeyboardEvent(eventType, {
213
+ key: 'Enter',
214
+ code: 'Enter',
215
+ keyCode: 13,
216
+ bubbles: true,
217
+ cancelable: true,
218
+ });
219
+ input.dispatchEvent(event);
220
+ });
221
+ }
222
+ console.log('type', input, result);
223
+ return true;
224
+ }
225
+ function simulateMouseEvent(eventTypes, button, xpath, highlightIndex) {
226
+ let element = null;
227
+ if (highlightIndex != null) {
228
+ element = window.get_highlight_element(highlightIndex);
229
+ }
230
+ else if (xpath) {
231
+ element = document.evaluate(xpath, document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null)
232
+ .singleNodeValue;
233
+ }
234
+ if (!element) {
235
+ return false;
236
+ }
237
+ for (let i = 0; i < eventTypes.length; i++) {
238
+ const event = new MouseEvent(eventTypes[i], {
239
+ view: window,
240
+ bubbles: true,
241
+ cancelable: true,
242
+ button, // 0 left; 2 right
243
+ });
244
+ let result = element.dispatchEvent(event);
245
+ console.log('simulateMouse', element, { xpath, eventTypes, button }, result);
246
+ }
247
+ return true;
248
+ }
249
+ //# sourceMappingURL=browser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"browser.js","sourceRoot":"","sources":["../../../../src/web/tools/browser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,176 @@
1
+ import { get_clickable_elements, remove_highlight } from '../script/build_dom_tree';
2
+ import * as browser from './browser';
3
+ /**
4
+ * Browser Use for general
5
+ */
6
+ export class BrowserUse {
7
+ constructor() {
8
+ this.name = 'browser_use';
9
+ this.description = `Use structured commands to interact with the browser, manipulating page elements through screenshots and webpage element extraction.
10
+ * This is a browser GUI interface where you need to analyze webpages by taking screenshots and extracting page element structures, and specify action sequences to complete designated tasks.
11
+ * Before any operation, you must first call the \`screenshot_extract_element\` command, which will return the browser page screenshot and structured element information, both specially processed.
12
+ * ELEMENT INTERACTION:
13
+ - Only use indexes that exist in the provided element list
14
+ - Each element has a unique index number (e.g., "[33]:<button>")
15
+ - Elements marked with "[]:" are non-interactive (for context only)
16
+ * NAVIGATION & ERROR HANDLING:
17
+ - If no suitable elements exist, use other functions to complete the task
18
+ - If stuck, try alternative approaches
19
+ - Handle popups/cookies by accepting or closing them
20
+ - Use scroll to find elements you are looking for`;
21
+ this.input_schema = {
22
+ type: 'object',
23
+ properties: {
24
+ action: {
25
+ type: 'string',
26
+ description: `The action to perform. The available actions are:
27
+ * \`screenshot_extract_element\`: Take a screenshot of the web page and extract operable elements.
28
+ - Screenshots are used to understand page layouts, with labeled bounding boxes corresponding to element indexes. Each bounding box and its label share the same color, with labels typically positioned in the top-right corner of the box.
29
+ - Screenshots help verify element positions and relationships. Labels may sometimes overlap, so extracted elements are used to verify the correct elements.
30
+ - In addition to screenshots, simplified information about interactive elements is returned, with element indexes corresponding to those in the screenshots.
31
+ * \`input_text\`: Enter a string in the interactive element.
32
+ * \`click\`: Click to element.
33
+ * \`right_click\`: Right-click on the element.
34
+ * \`double_click\`: Double-click on the element.
35
+ * \`scroll_to\`: Scroll to the specified element.
36
+ * \`extract_content\`: Extract the text content of the current webpage.
37
+ * \`get_dropdown_options\`: Get all options from a native dropdown element.
38
+ * \`select_dropdown_option\`: Select dropdown option for interactive element index by the text of the option you want to select.`,
39
+ enum: [
40
+ 'screenshot_extract_element',
41
+ 'input_text',
42
+ 'click',
43
+ 'right_click',
44
+ 'double_click',
45
+ 'scroll_to',
46
+ 'extract_content',
47
+ 'get_dropdown_options',
48
+ 'select_dropdown_option',
49
+ ],
50
+ },
51
+ index: {
52
+ type: 'integer',
53
+ description: 'index of element, Operation elements must pass the corresponding index of the element',
54
+ },
55
+ text: {
56
+ type: 'string',
57
+ description: 'Required by `action=input_text` and `action=select_dropdown_option`',
58
+ },
59
+ },
60
+ required: ['action'],
61
+ };
62
+ }
63
+ /**
64
+ * browser
65
+ *
66
+ * @param {*} params { action: 'input_text', index: 1, text: 'string' }
67
+ * @returns > { success: true, image?: { type: 'base64', media_type: 'image/jpeg', data: '/9j...' }, text?: string }
68
+ */
69
+ async execute(context, params) {
70
+ var _a;
71
+ try {
72
+ if (params === null || !params.action) {
73
+ throw new Error('Invalid parameters. Expected an object with a "action" property.');
74
+ }
75
+ let selector_map = context.selector_map;
76
+ let selector_xpath;
77
+ if (params.index != null && selector_map) {
78
+ selector_xpath = (_a = selector_map[params.index]) === null || _a === void 0 ? void 0 : _a.xpath;
79
+ if (!selector_xpath) {
80
+ throw new Error('Element does not exist');
81
+ }
82
+ }
83
+ let result;
84
+ switch (params.action) {
85
+ case 'input_text':
86
+ if (params.index == null) {
87
+ throw new Error('index parameter is required');
88
+ }
89
+ if (params.text == null) {
90
+ throw new Error('text parameter is required');
91
+ }
92
+ await browser.clear_input(selector_xpath, params.index);
93
+ result = await browser.type(params.text, selector_xpath, params.index);
94
+ await sleep(200);
95
+ break;
96
+ case 'click':
97
+ if (params.index == null) {
98
+ throw new Error('index parameter is required');
99
+ }
100
+ result = await browser.left_click(selector_xpath, params.index);
101
+ await sleep(100);
102
+ break;
103
+ case 'right_click':
104
+ if (params.index == null) {
105
+ throw new Error('index parameter is required');
106
+ }
107
+ result = await browser.right_click(selector_xpath, params.index);
108
+ await sleep(100);
109
+ break;
110
+ case 'double_click':
111
+ if (params.index == null) {
112
+ throw new Error('index parameter is required');
113
+ }
114
+ result = await browser.double_click(selector_xpath, params.index);
115
+ await sleep(100);
116
+ break;
117
+ case 'scroll_to':
118
+ if (params.index == null) {
119
+ throw new Error('index parameter is required');
120
+ }
121
+ result = await browser.scroll_to(selector_xpath, params.index);
122
+ await sleep(500);
123
+ break;
124
+ case 'extract_content':
125
+ await sleep(200);
126
+ let content = browser.extractHtmlContent();
127
+ result = {
128
+ title: document.title,
129
+ content: content,
130
+ };
131
+ break;
132
+ case 'get_dropdown_options':
133
+ if (params.index == null) {
134
+ throw new Error('index parameter is required');
135
+ }
136
+ result = browser.get_dropdown_options(selector_xpath, params.index);
137
+ break;
138
+ case 'select_dropdown_option':
139
+ if (params.index == null) {
140
+ throw new Error('index parameter is required');
141
+ }
142
+ if (params.text == null) {
143
+ throw new Error('text parameter is required');
144
+ }
145
+ result = browser.select_dropdown_option(params.text, selector_xpath, params.index);
146
+ break;
147
+ case 'screenshot_extract_element':
148
+ await sleep(100);
149
+ let element_result = get_clickable_elements(true, null);
150
+ context.selector_map = element_result.selector_map;
151
+ let screenshot = await browser.screenshot(true);
152
+ remove_highlight();
153
+ result = { image: screenshot.image, text: element_result.element_str };
154
+ break;
155
+ default:
156
+ throw Error(`Invalid parameters. The "${params.action}" value is not included in the "action" enumeration.`);
157
+ }
158
+ if (result) {
159
+ return { success: true, ...result };
160
+ }
161
+ else {
162
+ return { success: false };
163
+ }
164
+ }
165
+ catch (e) {
166
+ return { success: false, error: e === null || e === void 0 ? void 0 : e.message };
167
+ }
168
+ }
169
+ destroy(context) {
170
+ delete context.selector_map;
171
+ }
172
+ }
173
+ function sleep(time) {
174
+ return new Promise((resolve) => setTimeout(() => resolve(), time));
175
+ }
176
+ //# sourceMappingURL=browser_use.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"browser_use.js","sourceRoot":"","sources":["../../../../src/web/tools/browser_use.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,121 @@
1
+ import { extractOperableElements, clickOperableElement, xpath } from './html_script';
2
+ import { left_click, screenshot } from './browser';
3
+ /**
4
+ * Element click
5
+ */
6
+ export class ElementClick {
7
+ constructor() {
8
+ this.name = 'element_click';
9
+ this.description = 'Click the element through task prompts';
10
+ this.input_schema = {
11
+ type: 'object',
12
+ properties: {
13
+ task_prompt: {
14
+ type: 'string',
15
+ description: 'Task prompt, eg: click search button',
16
+ },
17
+ },
18
+ required: ['task_prompt'],
19
+ };
20
+ }
21
+ async execute(context, params) {
22
+ if (typeof params !== 'object' || params === null || !params.task_prompt) {
23
+ throw new Error('Invalid parameters. Expected an object with a "task_prompt" property.');
24
+ }
25
+ let result;
26
+ let task_prompt = params.task_prompt;
27
+ try {
28
+ result = await executeWithHtmlElement(context, task_prompt);
29
+ }
30
+ catch (e) {
31
+ console.log(e);
32
+ result = false;
33
+ }
34
+ if (!result) {
35
+ result = await executeWithBrowserUse(context, task_prompt);
36
+ }
37
+ return result;
38
+ }
39
+ }
40
+ async function executeWithHtmlElement(context, task_prompt) {
41
+ let pseudoHtml = extractOperableElements();
42
+ let messages = [
43
+ {
44
+ role: 'user',
45
+ content: `# Task
46
+ Determine the operation intent based on user input, find the element ID that the user needs to operate on in the webpage HTML, and if the element does not exist, do nothing.
47
+ Output JSON format, no explanation required.
48
+
49
+ # User input
50
+ ${task_prompt}
51
+
52
+ # Output example (when the element exists)
53
+ {"elementId": "1", "operationType": "click"}
54
+
55
+ # Output example (when the element does not exist)
56
+ {"elementId": null, "operationType": "unknown"}
57
+
58
+ # HTML
59
+ ${pseudoHtml}
60
+ `,
61
+ },
62
+ ];
63
+ let llm_params = { maxTokens: 1024 };
64
+ let response = await context.llmProvider.generateText(messages, llm_params);
65
+ let content = typeof response.content == 'string' ? response.content : response.content[0].text;
66
+ let json = content.substring(content.indexOf('{'), content.indexOf('}') + 1);
67
+ let elementId = JSON.parse(json).elementId;
68
+ if (elementId) {
69
+ return clickOperableElement(elementId);
70
+ }
71
+ return false;
72
+ }
73
+ async function executeWithBrowserUse(context, task_prompt) {
74
+ let screenshot_result = await screenshot(false);
75
+ let messages = [
76
+ {
77
+ role: 'user',
78
+ content: [
79
+ {
80
+ type: 'image',
81
+ source: screenshot_result.image,
82
+ },
83
+ {
84
+ type: 'text',
85
+ text: 'click: ' + task_prompt,
86
+ },
87
+ ],
88
+ },
89
+ ];
90
+ let llm_params = {
91
+ maxTokens: 1024,
92
+ toolChoice: {
93
+ type: 'tool',
94
+ name: 'left_click',
95
+ },
96
+ tools: [
97
+ {
98
+ name: 'left_click',
99
+ description: 'click element',
100
+ input_schema: {
101
+ type: 'object',
102
+ properties: {
103
+ coordinate: {
104
+ type: 'array',
105
+ description: '(x, y): The x (pixels from the left edge) and y (pixels from the top edge) coordinates.',
106
+ },
107
+ },
108
+ required: ['coordinate'],
109
+ },
110
+ },
111
+ ],
112
+ };
113
+ let response = await context.llmProvider.generateText(messages, llm_params);
114
+ let input = response.toolCalls[0].input;
115
+ let coordinate = input.coordinate;
116
+ let element = document.elementFromPoint(coordinate[0], coordinate[1]);
117
+ let _xpath = xpath(element);
118
+ let click_result = left_click(_xpath);
119
+ return click_result;
120
+ }
121
+ //# sourceMappingURL=element_click.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"element_click.js","sourceRoot":"","sources":["../../../../src/web/tools/element_click.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,74 @@
1
+ import { exportFile } from './html_script';
2
+ /**
3
+ * Export file
4
+ */
5
+ export class ExportFile {
6
+ constructor() {
7
+ this.name = 'export_file';
8
+ this.description = 'Content exported as a file, support text format';
9
+ this.input_schema = {
10
+ type: 'object',
11
+ properties: {
12
+ fileType: {
13
+ type: 'string',
14
+ description: 'File format type',
15
+ enum: ['txt', 'csv', 'md', 'html', 'js', 'xml', 'json', 'yml', 'sql'],
16
+ },
17
+ content: {
18
+ type: 'string',
19
+ description: 'Export file content',
20
+ },
21
+ filename: {
22
+ type: 'string',
23
+ description: 'File name',
24
+ },
25
+ },
26
+ required: ['fileType', 'content'],
27
+ };
28
+ }
29
+ /**
30
+ * export
31
+ *
32
+ * @param {*} params { fileType: 'csv', content: 'field1,field2\ndata1,data2' }
33
+ * @returns > { success: true }
34
+ */
35
+ async execute(context, params) {
36
+ if (typeof params !== 'object' || params === null || !('content' in params)) {
37
+ throw new Error('Invalid parameters. Expected an object with a "content" property.');
38
+ }
39
+ let type = 'text/plain';
40
+ switch (params.fileType) {
41
+ case 'csv':
42
+ type = 'text/csv';
43
+ break;
44
+ case 'md':
45
+ type = 'text/markdown';
46
+ break;
47
+ case 'html':
48
+ type = 'text/html';
49
+ break;
50
+ case 'js':
51
+ type = 'application/javascript';
52
+ break;
53
+ case 'xml':
54
+ type = 'text/xml';
55
+ break;
56
+ case 'json':
57
+ type = 'application/json';
58
+ break;
59
+ }
60
+ let filename;
61
+ if (!params.filename) {
62
+ filename = new Date().getTime() + '.' + params.fileType;
63
+ }
64
+ else if (!(params.filename + '').endsWith(params.fileType)) {
65
+ filename = params.filename + '.' + params.fileType;
66
+ }
67
+ else {
68
+ filename = params.filename;
69
+ }
70
+ exportFile(filename, type, params.content);
71
+ return { success: true };
72
+ }
73
+ }
74
+ //# sourceMappingURL=export_file.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"export_file.js","sourceRoot":"","sources":["../../../../src/web/tools/export_file.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAE3C;;GAEG;AACH,MAAM,OAAO,UAAU;IAKrB;QACE,IAAI,CAAC,IAAI,GAAG,aAAa,CAAC;QAC1B,IAAI,CAAC,WAAW,GAAG,iDAAiD,CAAC;QACrE,IAAI,CAAC,YAAY,GAAG;YAClB,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,QAAQ,EAAE;oBACR,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,kBAAkB;oBAC/B,IAAI,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC;iBACtE;gBACD,OAAO,EAAE;oBACP,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,qBAAqB;iBACnC;gBACD,QAAQ,EAAE;oBACR,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,WAAW;iBACzB;aACF;YACD,QAAQ,EAAE,CAAC,UAAU,EAAE,SAAS,CAAC;SAClC,CAAC;IACJ,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,OAAO,CAAC,OAAyB,EAAE,MAAuB;QAC9D,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI,IAAI,CAAC,CAAC,SAAS,IAAI,MAAM,CAAC,EAAE,CAAC;YAC5E,MAAM,IAAI,KAAK,CAAC,mEAAmE,CAAC,CAAC;QACvF,CAAC;QACD,IAAI,IAAI,GAAG,YAAY,CAAC;QACxB,QAAQ,MAAM,CAAC,QAAQ,EAAE,CAAC;YACxB,KAAK,KAAK;gBACR,IAAI,GAAG,UAAU,CAAC;gBAClB,MAAM;YACR,KAAK,IAAI;gBACP,IAAI,GAAG,eAAe,CAAC;gBACvB,MAAM;YACR,KAAK,MAAM;gBACT,IAAI,GAAG,WAAW,CAAC;gBACnB,MAAM;YACR,KAAK,IAAI;gBACP,IAAI,GAAG,wBAAwB,CAAC;gBAChC,MAAM;YACR,KAAK,KAAK;gBACR,IAAI,GAAG,UAAU,CAAC;gBAClB,MAAM;YACR,KAAK,MAAM;gBACT,IAAI,GAAG,kBAAkB,CAAC;gBAC1B,MAAM;QACV,CAAC;QACD,IAAI,QAAgB,CAAC;QACrB,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;YACrB,QAAQ,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,GAAG,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC;QAC1D,CAAC;aAAM,IAAI,CAAC,CAAC,MAAM,CAAC,QAAQ,GAAG,EAAE,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC7D,QAAQ,GAAG,MAAM,CAAC,QAAQ,GAAG,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC;QACrD,CAAC;aAAM,CAAC;YACN,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;QAC7B,CAAC;QACD,UAAU,CAAC,QAAQ,EAAE,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;QAC3C,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC3B,CAAC;CAEF"}