@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,458 @@
1
+ import { chromium } from 'playwright';
2
+ import { run_build_dom_tree } from '../script/build_dom_tree';
3
+ /**
4
+ * Browser Use => `npx playwright install`
5
+ */
6
+ export class BrowserUse {
7
+ constructor() {
8
+ this.browser = null;
9
+ this.browser_context = null;
10
+ this.current_page = null;
11
+ this.name = 'browser_use';
12
+ this.description = `Use structured commands to interact with the browser, manipulating page elements through screenshots and webpage element extraction.
13
+ * 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.
14
+ * Before performing element operations, please call the \`screenshot_extract_element\` command first, which will return the browser page screenshot and structured element information, both specially processed.
15
+ * ELEMENT INTERACTION:
16
+ - Only use indexes that exist in the provided element list
17
+ - Each element has a unique index number (e.g., "[33]:<button>")
18
+ - Elements marked with "[]:" are non-interactive (for context only)
19
+ * NAVIGATION & ERROR HANDLING:
20
+ - If no suitable elements exist, use other functions to complete the task
21
+ - If stuck, try alternative approaches
22
+ - Handle popups/cookies by accepting or closing them
23
+ - Use scroll to find elements you are looking for`;
24
+ this.input_schema = {
25
+ type: 'object',
26
+ properties: {
27
+ action: {
28
+ type: 'string',
29
+ description: `The action to perform. The available actions are:
30
+ * \`screenshot_extract_element\`: Take a screenshot of the web page and extract operable elements.
31
+ - 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.
32
+ - Screenshots help verify element positions and relationships. Labels may sometimes overlap, so extracted elements are used to verify the correct elements.
33
+ - In addition to screenshots, simplified information about interactive elements is returned, with element indexes corresponding to those in the screenshots.
34
+ * \`open_url\`: . Open the specified URL in the browser, the URL is text parameter.
35
+ * \`input_text\`: Enter a string in the interactive element.
36
+ * \`click\`: Click to element.
37
+ * \`right_click\`: Right-click on the element.
38
+ * \`double_click\`: Double-click on the element.
39
+ * \`scroll_to\`: Scroll to the specified element.
40
+ * \`extract_content\`: Extract the text content of the current webpage.
41
+ * \`get_dropdown_options\`: Get all options from a native dropdown element.
42
+ * \`select_dropdown_option\`: Select dropdown option for interactive element index by the text of the option you want to select.`,
43
+ enum: [
44
+ 'screenshot_extract_element',
45
+ 'open_url',
46
+ 'input_text',
47
+ 'click',
48
+ 'right_click',
49
+ 'double_click',
50
+ 'scroll_to',
51
+ 'extract_content',
52
+ 'get_dropdown_options',
53
+ 'select_dropdown_option',
54
+ ],
55
+ },
56
+ index: {
57
+ type: 'integer',
58
+ description: 'index of element, Operation elements must pass the corresponding index of the element',
59
+ },
60
+ text: {
61
+ type: 'string',
62
+ description: 'Required by action: open_url, input_text, select_dropdown_option',
63
+ },
64
+ },
65
+ required: ['action'],
66
+ };
67
+ }
68
+ /**
69
+ * browser
70
+ *
71
+ * @param {*} params { action: 'input_text', index: 1, text: 'string' }
72
+ * @returns > { success: true, image?: { type: 'base64', media_type: 'image/jpeg', data: '/9j...' }, text?: string }
73
+ */
74
+ async execute(context, params) {
75
+ var _a;
76
+ try {
77
+ if (params === null || !params.action) {
78
+ throw new Error('Invalid parameters. Expected an object with a "action" property.');
79
+ }
80
+ let page = this.current_page;
81
+ let selector_map = context.selector_map;
82
+ let selector_xpath;
83
+ if (params.index != null && selector_map) {
84
+ selector_xpath = (_a = selector_map[params.index]) === null || _a === void 0 ? void 0 : _a.xpath;
85
+ if (!selector_xpath) {
86
+ throw new Error('Element does not exist');
87
+ }
88
+ }
89
+ let result;
90
+ let elementHandle;
91
+ switch (params.action) {
92
+ case 'open_url':
93
+ if (!params.text) {
94
+ throw new Error('text (url) parameter is required');
95
+ }
96
+ page = await this.open_url(context, params.text);
97
+ result = {
98
+ title: await page.title(),
99
+ url: page.url(),
100
+ success: true,
101
+ };
102
+ break;
103
+ case 'input_text':
104
+ if (params.index == null) {
105
+ throw new Error('index parameter is required');
106
+ }
107
+ if (params.text == null) {
108
+ throw new Error('text parameter is required');
109
+ }
110
+ elementHandle = await this.get_highlight_element(page, params.index, true);
111
+ if (elementHandle) {
112
+ try {
113
+ await elementHandle.fill('');
114
+ await elementHandle.fill(params.text);
115
+ result = true;
116
+ }
117
+ catch (e) {
118
+ result = await page.evaluate(do_input, { text: params.text, index: params.index });
119
+ }
120
+ }
121
+ else {
122
+ result = false;
123
+ }
124
+ await sleep(200);
125
+ break;
126
+ case 'click':
127
+ if (params.index == null) {
128
+ throw new Error('index parameter is required');
129
+ }
130
+ elementHandle = await this.get_highlight_element(page, params.index);
131
+ if (elementHandle) {
132
+ try {
133
+ await elementHandle.click({ button: 'left', force: true });
134
+ result = true;
135
+ }
136
+ catch (e) {
137
+ result = await page.evaluate(do_click, { type: 'click', index: params.index });
138
+ }
139
+ }
140
+ else {
141
+ result = false;
142
+ }
143
+ await sleep(100);
144
+ break;
145
+ case 'right_click':
146
+ if (params.index == null) {
147
+ throw new Error('index parameter is required');
148
+ }
149
+ elementHandle = await this.get_highlight_element(page, params.index);
150
+ if (elementHandle) {
151
+ try {
152
+ await elementHandle.click({ button: 'right', force: true });
153
+ result = true;
154
+ }
155
+ catch (e) {
156
+ result = await page.evaluate(do_click, { type: 'right_click', index: params.index });
157
+ }
158
+ }
159
+ else {
160
+ result = false;
161
+ }
162
+ await sleep(100);
163
+ break;
164
+ case 'double_click':
165
+ if (params.index == null) {
166
+ throw new Error('index parameter is required');
167
+ }
168
+ elementHandle = await this.get_highlight_element(page, params.index);
169
+ if (elementHandle) {
170
+ try {
171
+ await elementHandle.click({ button: 'left', clickCount: 2, force: true });
172
+ result = true;
173
+ }
174
+ catch (e) {
175
+ result = await page.evaluate(do_click, { type: 'double_click', index: params.index });
176
+ }
177
+ }
178
+ else {
179
+ result = false;
180
+ }
181
+ await sleep(100);
182
+ break;
183
+ case 'scroll_to':
184
+ if (params.index == null) {
185
+ throw new Error('index parameter is required');
186
+ }
187
+ result = await page.evaluate((highlightIndex) => {
188
+ let element = window.get_highlight_element(highlightIndex);
189
+ if (!element) {
190
+ return false;
191
+ }
192
+ element.scrollIntoView({ behavior: 'smooth' });
193
+ return true;
194
+ }, params.index);
195
+ await sleep(500);
196
+ break;
197
+ case 'extract_content':
198
+ let content = await this.extractHtmlContent(page);
199
+ result = {
200
+ title: await page.title(),
201
+ url: page.url(),
202
+ content: content,
203
+ };
204
+ break;
205
+ case 'get_dropdown_options':
206
+ if (params.index == null) {
207
+ throw new Error('index parameter is required');
208
+ }
209
+ result = await this.get_dropdown_options(page, params.index);
210
+ break;
211
+ case 'select_dropdown_option':
212
+ if (params.index == null) {
213
+ throw new Error('index parameter is required');
214
+ }
215
+ if (params.text == null) {
216
+ throw new Error('text parameter is required');
217
+ }
218
+ result = await this.select_dropdown_option(page, params.index, params.text);
219
+ break;
220
+ case 'screenshot_extract_element':
221
+ await sleep(100);
222
+ await this.injectScript(page);
223
+ await sleep(100);
224
+ let element_result = await page.evaluate(() => {
225
+ return window.get_clickable_elements(true);
226
+ });
227
+ context.selector_map = element_result.selector_map;
228
+ let screenshotBuffer = await page.screenshot({
229
+ fullPage: false,
230
+ type: 'jpeg',
231
+ quality: 50,
232
+ });
233
+ let base64 = screenshotBuffer.toString('base64');
234
+ let image = 'data:image/jpeg;base64,' + base64;
235
+ await page.evaluate(() => {
236
+ return window.remove_highlight();
237
+ });
238
+ result = { image: image, text: element_result.element_str };
239
+ break;
240
+ default:
241
+ throw Error(`Invalid parameters. The "${params.action}" value is not included in the "action" enumeration.`);
242
+ }
243
+ if (result) {
244
+ return { success: true, ...result };
245
+ }
246
+ else {
247
+ return { success: false };
248
+ }
249
+ }
250
+ catch (e) {
251
+ console.log(e);
252
+ return { success: false, error: e === null || e === void 0 ? void 0 : e.message };
253
+ }
254
+ }
255
+ async open_url(context, url) {
256
+ if (!this.browser) {
257
+ this.current_page = null;
258
+ this.browser_context = null;
259
+ this.browser = await chromium.launch({
260
+ headless: false,
261
+ args: ['--no-sandbox'],
262
+ });
263
+ }
264
+ if (!this.browser_context) {
265
+ this.current_page = null;
266
+ this.browser_context = await this.browser.newContext();
267
+ }
268
+ const page = await this.browser_context.newPage();
269
+ await page.setViewportSize({ width: 1920, height: 1080 });
270
+ await page.goto(url, {
271
+ waitUntil: 'networkidle',
272
+ timeout: 15000,
273
+ });
274
+ await page.waitForLoadState('load');
275
+ this.current_page = page;
276
+ return page;
277
+ }
278
+ async injectScript(page) {
279
+ return await page.evaluate(run_build_dom_tree);
280
+ }
281
+ async get_highlight_element(page, highlightIndex, findInput) {
282
+ return await page.evaluateHandle((params) => {
283
+ let element = window.get_highlight_element(params.highlightIndex);
284
+ if (element && params.findInput) {
285
+ if (element.tagName != 'INPUT' &&
286
+ element.tagName != 'TEXTAREA' &&
287
+ element.childElementCount != 0) {
288
+ element =
289
+ element.querySelector('input') || element.querySelector('textarea') || element;
290
+ }
291
+ }
292
+ return element;
293
+ }, { highlightIndex, findInput });
294
+ }
295
+ async extractHtmlContent(page) {
296
+ return await page.evaluate(() => {
297
+ let element = document.body;
298
+ let main = element.querySelector('main');
299
+ let content = '';
300
+ if (main) {
301
+ let articles = main.querySelectorAll('article');
302
+ if (articles && articles.length > 0) {
303
+ for (let i = 0; i < articles.length; i++) {
304
+ content += articles[i].innerText.trim() + '\n';
305
+ }
306
+ }
307
+ else {
308
+ content += main.innerText.trim();
309
+ }
310
+ }
311
+ else {
312
+ let articles = element.querySelectorAll('article');
313
+ if (articles && articles.length > 0) {
314
+ for (let i = 0; i < articles.length; i++) {
315
+ content += articles[i].innerText.trim() + '\n';
316
+ }
317
+ }
318
+ }
319
+ content = content.trim();
320
+ if (!content) {
321
+ content = element.innerText;
322
+ }
323
+ return content.replace(/\n+/g, '\n').replace(/ +/g, ' ').trim();
324
+ });
325
+ }
326
+ async get_dropdown_options(page, highlightIndex) {
327
+ return await page.evaluate((highlightIndex) => {
328
+ let select = window.get_highlight_element(highlightIndex);
329
+ if (!select) {
330
+ return null;
331
+ }
332
+ return {
333
+ options: Array.from(select.options).map((opt) => ({
334
+ index: opt.index,
335
+ text: opt.text.trim(),
336
+ value: opt.value,
337
+ })),
338
+ id: select.id,
339
+ name: select.name,
340
+ };
341
+ }, highlightIndex);
342
+ }
343
+ async select_dropdown_option(page, highlightIndex, text) {
344
+ return await page.evaluate((param) => {
345
+ let select = window.get_highlight_element(param.highlightIndex);
346
+ if (!select || select.tagName.toUpperCase() !== 'SELECT') {
347
+ return { success: false, error: 'Select not found or invalid element type' };
348
+ }
349
+ const option = Array.from(select.options).find((opt) => opt.text.trim() === param.text);
350
+ if (!option) {
351
+ return {
352
+ success: false,
353
+ error: 'Option not found',
354
+ availableOptions: Array.from(select.options).map((o) => o.text.trim()),
355
+ };
356
+ }
357
+ select.value = option.value;
358
+ select.dispatchEvent(new Event('change'));
359
+ return {
360
+ success: true,
361
+ selectedValue: option.value,
362
+ selectedText: option.text.trim(),
363
+ };
364
+ }, { highlightIndex, text });
365
+ }
366
+ destroy(context) {
367
+ delete context.selector_map;
368
+ if (this.browser) {
369
+ this.browser.close();
370
+ this.browser = null;
371
+ this.current_page = null;
372
+ this.browser_context = null;
373
+ }
374
+ }
375
+ }
376
+ function sleep(time) {
377
+ return new Promise((resolve) => setTimeout(() => resolve(), time));
378
+ }
379
+ function do_click(param) {
380
+ function simulateMouseEvent(eventTypes, button, highlightIndex) {
381
+ let element = window.get_highlight_element(highlightIndex);
382
+ if (!element) {
383
+ return false;
384
+ }
385
+ for (let i = 0; i < eventTypes.length; i++) {
386
+ const event = new MouseEvent(eventTypes[i], {
387
+ view: window,
388
+ bubbles: true,
389
+ cancelable: true,
390
+ button, // 0 left; 2 right
391
+ });
392
+ let result = element.dispatchEvent(event);
393
+ console.log('simulateMouse', element, { eventTypes, button }, result);
394
+ }
395
+ return true;
396
+ }
397
+ if (param.type == 'right_click') {
398
+ return simulateMouseEvent(['mousedown', 'mouseup', 'contextmenu'], 2, param.index);
399
+ }
400
+ else if (param.type == 'double_click') {
401
+ return simulateMouseEvent(['mousedown', 'mouseup', 'click', 'mousedown', 'mouseup', 'click', 'dblclick'], 0, param.index);
402
+ }
403
+ else {
404
+ return simulateMouseEvent(['mousedown', 'mouseup', 'click'], 0, param.index);
405
+ }
406
+ }
407
+ function do_input(params) {
408
+ let text = params.text;
409
+ let highlightIndex = params.index;
410
+ let element = window.get_highlight_element(highlightIndex);
411
+ if (!element) {
412
+ return false;
413
+ }
414
+ let enter = false;
415
+ if (text.endsWith('\\n')) {
416
+ enter = true;
417
+ text = text.substring(0, text.length - 2);
418
+ }
419
+ else if (text.endsWith('\n')) {
420
+ enter = true;
421
+ text = text.substring(0, text.length - 1);
422
+ }
423
+ let input;
424
+ if (element.tagName == 'INPUT' ||
425
+ element.tagName == 'TEXTAREA' ||
426
+ element.childElementCount == 0) {
427
+ input = element;
428
+ }
429
+ else {
430
+ input = element.querySelector('input') || element.querySelector('textarea') || element;
431
+ }
432
+ input.focus && input.focus();
433
+ if (!text) {
434
+ if (input.value == '') {
435
+ return true;
436
+ }
437
+ input.value = '';
438
+ }
439
+ else {
440
+ input.value += text;
441
+ }
442
+ let result = input.dispatchEvent(new Event('input', { bubbles: true }));
443
+ if (enter) {
444
+ ['keydown', 'keypress', 'keyup'].forEach((eventType) => {
445
+ const event = new KeyboardEvent(eventType, {
446
+ key: 'Enter',
447
+ code: 'Enter',
448
+ keyCode: 13,
449
+ bubbles: true,
450
+ cancelable: true,
451
+ });
452
+ input.dispatchEvent(event);
453
+ });
454
+ }
455
+ console.log('type', input, result);
456
+ return true;
457
+ }
458
+ //# sourceMappingURL=browser_use.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"browser_use.js","sourceRoot":"","sources":["../../../../src/nodejs/tools/browser_use.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,65 @@
1
+ import { createInterface } from 'readline';
2
+ import { exec } from 'child_process';
3
+ import { promisify } from 'util';
4
+ const execAsync = promisify(exec);
5
+ export class CommandExecute {
6
+ constructor() {
7
+ this.name = 'command_execute';
8
+ this.description = 'Execute a shell command with user confirmation';
9
+ this.input_schema = {
10
+ type: 'object',
11
+ properties: {
12
+ command: {
13
+ type: 'string',
14
+ description: 'The command to execute. Ensure that the command is non-interactive and does not require user input.'
15
+ },
16
+ cwd: {
17
+ type: 'string',
18
+ description: 'Working directory for command execution'
19
+ }
20
+ },
21
+ required: ['command']
22
+ };
23
+ }
24
+ async getUserConfirmation(command) {
25
+ const rl = createInterface({
26
+ input: process.stdin,
27
+ output: process.stdout
28
+ });
29
+ return new Promise(resolve => {
30
+ rl.question(`Are you sure you want to execute command: "${command}"? (y/N) `, answer => {
31
+ rl.close();
32
+ resolve(answer.toLowerCase() === 'y');
33
+ });
34
+ });
35
+ }
36
+ async execute(context, params) {
37
+ const confirmed = await this.getUserConfirmation(params.command);
38
+ if (!confirmed) {
39
+ return {
40
+ executed: false,
41
+ reason: 'User cancelled execution'
42
+ };
43
+ }
44
+ try {
45
+ const { stdout, stderr } = await execAsync(params.command, {
46
+ cwd: params.cwd
47
+ });
48
+ return {
49
+ executed: true,
50
+ stdout,
51
+ stderr
52
+ };
53
+ }
54
+ catch (error) {
55
+ const err = error;
56
+ return {
57
+ executed: false,
58
+ error: err.message,
59
+ code: err.code,
60
+ stderr: err.stderr
61
+ };
62
+ }
63
+ }
64
+ }
65
+ //# sourceMappingURL=command_execute.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"command_execute.js","sourceRoot":"","sources":["../../../../src/nodejs/tools/command_execute.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAC3C,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AACrC,OAAO,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AAEjC,MAAM,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;AAOlC,MAAM,OAAO,cAAc;IAA3B;QACE,SAAI,GAAG,iBAAiB,CAAC;QACzB,gBAAW,GAAG,gDAAgD,CAAC;QAC/D,iBAAY,GAAgB;YAC1B,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,OAAO,EAAE;oBACP,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,qGAAqG;iBACnH;gBACD,GAAG,EAAE;oBACH,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,yCAAyC;iBACvD;aACF;YACD,QAAQ,EAAE,CAAC,SAAS,CAAC;SACtB,CAAC;IA4CJ,CAAC;IA1CS,KAAK,CAAC,mBAAmB,CAAC,OAAe;QAC/C,MAAM,EAAE,GAAG,eAAe,CAAC;YACzB,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,MAAM,EAAE,OAAO,CAAC,MAAM;SACvB,CAAC,CAAC;QAEH,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE;YAC3B,EAAE,CAAC,QAAQ,CAAC,8CAA8C,OAAO,WAAW,EAAE,MAAM,CAAC,EAAE;gBACrF,EAAE,CAAC,KAAK,EAAE,CAAC;gBACX,OAAO,CAAC,MAAM,CAAC,WAAW,EAAE,KAAK,GAAG,CAAC,CAAC;YACxC,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,OAAyB,EAAE,MAA4B;QACnE,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACjE,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,OAAO;gBACL,QAAQ,EAAE,KAAK;gBACf,MAAM,EAAE,0BAA0B;aACnC,CAAC;QACJ,CAAC;QAED,IAAI,CAAC;YACH,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,SAAS,CAAC,MAAM,CAAC,OAAO,EAAE;gBACzD,GAAG,EAAE,MAAM,CAAC,GAAG;aAChB,CAAC,CAAC;YACH,OAAO;gBACL,QAAQ,EAAE,IAAI;gBACd,MAAM;gBACN,MAAM;aACP,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,GAAG,GAAG,KAAmD,CAAC;YAChE,OAAO;gBACL,QAAQ,EAAE,KAAK;gBACf,KAAK,EAAE,GAAG,CAAC,OAAO;gBAClB,IAAI,EAAE,GAAG,CAAC,IAAI;gBACd,MAAM,EAAE,GAAG,CAAC,MAAM;aACnB,CAAC;QACJ,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,45 @@
1
+ import { readFile } from 'fs/promises';
2
+ import { resolve } from 'path';
3
+ export class FileRead {
4
+ constructor() {
5
+ this.name = 'file_read';
6
+ this.description = 'Read content from a file';
7
+ this.input_schema = {
8
+ type: 'object',
9
+ properties: {
10
+ path: {
11
+ type: 'string',
12
+ description: 'Path to the file to read'
13
+ },
14
+ encoding: {
15
+ type: 'string',
16
+ description: 'File encoding (default: utf8)',
17
+ enum: ['utf8', 'ascii', 'utf16le', 'base64', 'binary']
18
+ }
19
+ },
20
+ required: ['path']
21
+ };
22
+ }
23
+ async execute(context, params) {
24
+ try {
25
+ const fullPath = resolve(params.path);
26
+ const content = await readFile(fullPath, {
27
+ encoding: params.encoding || 'utf8'
28
+ });
29
+ return {
30
+ success: true,
31
+ path: fullPath,
32
+ content
33
+ };
34
+ }
35
+ catch (error) {
36
+ const err = error;
37
+ return {
38
+ success: false,
39
+ error: err.message,
40
+ code: err.code
41
+ };
42
+ }
43
+ }
44
+ }
45
+ //# sourceMappingURL=file_read.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file_read.js","sourceRoot":"","sources":["../../../../src/nodejs/tools/file_read.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAO/B,MAAM,OAAO,QAAQ;IAArB;QACE,SAAI,GAAG,WAAW,CAAC;QACnB,gBAAW,GAAG,0BAA0B,CAAC;QACzC,iBAAY,GAAgB;YAC1B,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,IAAI,EAAE;oBACJ,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,0BAA0B;iBACxC;gBACD,QAAQ,EAAE;oBACR,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,+BAA+B;oBAC5C,IAAI,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,CAAC;iBACvD;aACF;YACD,QAAQ,EAAE,CAAC,MAAM,CAAC;SACnB,CAAC;IAuBJ,CAAC;IArBC,KAAK,CAAC,OAAO,CAAC,OAAyB,EAAE,MAAsB;QAC7D,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YACtC,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE;gBACvC,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,MAAM;aACpC,CAAC,CAAC;YAEH,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,IAAI,EAAE,QAAQ;gBACd,OAAO;aACR,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,GAAG,GAAG,KAAkC,CAAC;YAC/C,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,GAAG,CAAC,OAAO;gBAClB,IAAI,EAAE,GAAG,CAAC,IAAI;aACf,CAAC;QACJ,CAAC;IACH,CAAC;CACF"}