orbitx 0.0.7 → 0.0.9

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 (398) hide show
  1. package/Readme.md +227 -67
  2. package/dist/core/agent-providers.d.ts +16 -0
  3. package/dist/core/agent-providers.d.ts.map +1 -0
  4. package/dist/core/agent-providers.js +21 -0
  5. package/dist/core/agent-providers.js.map +1 -0
  6. package/dist/core/ai-provider.d.ts +69 -1
  7. package/dist/core/ai-provider.d.ts.map +1 -1
  8. package/dist/core/ai-provider.js.map +1 -1
  9. package/dist/core/base-agent.d.ts +8 -4
  10. package/dist/core/base-agent.d.ts.map +1 -1
  11. package/dist/core/base-agent.js +220 -88
  12. package/dist/core/base-agent.js.map +1 -1
  13. package/dist/core/deepseek-provider.d.ts +10 -3
  14. package/dist/core/deepseek-provider.d.ts.map +1 -1
  15. package/dist/core/deepseek-provider.js +144 -39
  16. package/dist/core/deepseek-provider.js.map +1 -1
  17. package/dist/core/image-describer.d.ts +13 -0
  18. package/dist/core/image-describer.d.ts.map +1 -0
  19. package/dist/core/image-describer.js +33 -0
  20. package/dist/core/image-describer.js.map +1 -0
  21. package/dist/core/mcp-client.d.ts +17 -4
  22. package/dist/core/mcp-client.d.ts.map +1 -1
  23. package/dist/core/mcp-client.js +32 -16
  24. package/dist/core/mcp-client.js.map +1 -1
  25. package/dist/core/mcp-computer.d.ts +10 -2
  26. package/dist/core/mcp-computer.d.ts.map +1 -1
  27. package/dist/core/mcp-computer.js +108 -2
  28. package/dist/core/mcp-computer.js.map +1 -1
  29. package/dist/core/mcp-fs-storage.d.ts +8 -0
  30. package/dist/core/mcp-fs-storage.d.ts.map +1 -0
  31. package/dist/core/mcp-fs-storage.js +27 -0
  32. package/dist/core/mcp-fs-storage.js.map +1 -0
  33. package/dist/core/mcp-rng.d.ts +7 -0
  34. package/dist/core/mcp-rng.d.ts.map +1 -0
  35. package/dist/core/mcp-rng.js +14 -0
  36. package/dist/core/mcp-rng.js.map +1 -0
  37. package/dist/core/mcp-server.d.ts +8 -4
  38. package/dist/core/mcp-server.d.ts.map +1 -1
  39. package/dist/core/mcp-server.js +20 -3
  40. package/dist/core/mcp-server.js.map +1 -1
  41. package/dist/core/mcp-storage.d.ts +5 -0
  42. package/dist/core/mcp-storage.d.ts.map +1 -0
  43. package/dist/core/mcp-storage.js +3 -0
  44. package/dist/core/mcp-storage.js.map +1 -0
  45. package/dist/core/mcp.d.ts +37 -3
  46. package/dist/core/mcp.d.ts.map +1 -1
  47. package/dist/core/mcp.js +42 -1
  48. package/dist/core/mcp.js.map +1 -1
  49. package/dist/core/ollama-provider.d.ts +10 -3
  50. package/dist/core/ollama-provider.d.ts.map +1 -1
  51. package/dist/core/ollama-provider.js +122 -41
  52. package/dist/core/ollama-provider.js.map +1 -1
  53. package/dist/core/retry.d.ts +10 -0
  54. package/dist/core/retry.d.ts.map +1 -0
  55. package/dist/core/retry.js +39 -0
  56. package/dist/core/retry.js.map +1 -0
  57. package/dist/core/skill.d.ts +3 -0
  58. package/dist/core/skill.d.ts.map +1 -1
  59. package/dist/core/skill.js.map +1 -1
  60. package/dist/core/tool-schema-translator.d.ts +10 -0
  61. package/dist/core/tool-schema-translator.d.ts.map +1 -0
  62. package/dist/core/tool-schema-translator.js +29 -0
  63. package/dist/core/tool-schema-translator.js.map +1 -0
  64. package/dist/index.d.ts +34 -6
  65. package/dist/index.d.ts.map +1 -1
  66. package/dist/index.js +25 -5
  67. package/dist/index.js.map +1 -1
  68. package/dist/sandbox.d.ts +2 -0
  69. package/dist/sandbox.d.ts.map +1 -0
  70. package/dist/sandbox.js +27 -0
  71. package/dist/sandbox.js.map +1 -0
  72. package/dist/skills/backend-security.d.ts +4 -0
  73. package/dist/skills/backend-security.d.ts.map +1 -0
  74. package/dist/skills/backend-security.js +74 -0
  75. package/dist/skills/backend-security.js.map +1 -0
  76. package/dist/skills/big-task.d.ts +4 -0
  77. package/dist/skills/big-task.d.ts.map +1 -0
  78. package/dist/skills/big-task.js +66 -0
  79. package/dist/skills/big-task.js.map +1 -0
  80. package/dist/skills/code-verification.d.ts +4 -0
  81. package/dist/skills/code-verification.d.ts.map +1 -0
  82. package/dist/skills/code-verification.js +59 -0
  83. package/dist/skills/code-verification.js.map +1 -0
  84. package/dist/skills/long-task-efficiency.d.ts +4 -0
  85. package/dist/skills/long-task-efficiency.d.ts.map +1 -0
  86. package/dist/skills/long-task-efficiency.js +50 -0
  87. package/dist/skills/long-task-efficiency.js.map +1 -0
  88. package/dist/skills/node-backend.d.ts +4 -0
  89. package/dist/skills/node-backend.d.ts.map +1 -0
  90. package/dist/skills/node-backend.js +110 -0
  91. package/dist/skills/node-backend.js.map +1 -0
  92. package/dist/skills/planner.d.ts +4 -0
  93. package/dist/skills/planner.d.ts.map +1 -0
  94. package/dist/skills/planner.js +49 -0
  95. package/dist/skills/planner.js.map +1 -0
  96. package/dist/skills/present.d.ts +4 -0
  97. package/dist/skills/present.d.ts.map +1 -0
  98. package/dist/skills/present.js +56 -0
  99. package/dist/skills/present.js.map +1 -0
  100. package/dist/skills/question-answer.d.ts +4 -0
  101. package/dist/skills/question-answer.d.ts.map +1 -0
  102. package/dist/skills/question-answer.js +55 -0
  103. package/dist/skills/question-answer.js.map +1 -0
  104. package/dist/skills/react-frontend.d.ts +4 -0
  105. package/dist/skills/react-frontend.d.ts.map +1 -0
  106. package/dist/skills/react-frontend.js +111 -0
  107. package/dist/skills/react-frontend.js.map +1 -0
  108. package/dist/skills/research.d.ts +4 -0
  109. package/dist/skills/research.d.ts.map +1 -0
  110. package/dist/skills/research.js +81 -0
  111. package/dist/skills/research.js.map +1 -0
  112. package/dist/skills/shopping.d.ts +4 -0
  113. package/dist/skills/shopping.d.ts.map +1 -0
  114. package/dist/skills/shopping.js +71 -0
  115. package/dist/skills/shopping.js.map +1 -0
  116. package/dist/skills/ui-ux-design.d.ts +4 -0
  117. package/dist/skills/ui-ux-design.d.ts.map +1 -0
  118. package/dist/skills/ui-ux-design.js +70 -0
  119. package/dist/skills/ui-ux-design.js.map +1 -0
  120. package/dist/skills/web-end-to-end-test.d.ts +4 -0
  121. package/dist/skills/web-end-to-end-test.d.ts.map +1 -0
  122. package/dist/skills/web-end-to-end-test.js +76 -0
  123. package/dist/skills/web-end-to-end-test.js.map +1 -0
  124. package/dist/templates/simple.d.ts +1 -1
  125. package/dist/templates/simple.d.ts.map +1 -1
  126. package/dist/templates/simple.js +4 -0
  127. package/dist/templates/simple.js.map +1 -1
  128. package/dist/tests/mcp.test.js +2 -54
  129. package/dist/tests/mcp.test.js.map +1 -1
  130. package/dist/tools/bash/index.d.ts +10 -0
  131. package/dist/tools/bash/index.d.ts.map +1 -0
  132. package/dist/tools/bash/index.js +22 -0
  133. package/dist/tools/bash/index.js.map +1 -0
  134. package/dist/tools/bash/interaction.d.ts +29 -0
  135. package/dist/tools/bash/interaction.d.ts.map +1 -0
  136. package/dist/tools/bash/interaction.js +13 -0
  137. package/dist/tools/bash/interaction.js.map +1 -0
  138. package/dist/tools/bash/list.d.ts +4 -0
  139. package/dist/tools/bash/list.d.ts.map +1 -0
  140. package/dist/tools/bash/list.js +23 -0
  141. package/dist/tools/bash/list.js.map +1 -0
  142. package/dist/tools/bash/logs.d.ts +4 -0
  143. package/dist/tools/bash/logs.d.ts.map +1 -0
  144. package/dist/tools/bash/logs.js +47 -0
  145. package/dist/tools/bash/logs.js.map +1 -0
  146. package/dist/tools/bash/process-manager.d.ts +35 -0
  147. package/dist/tools/bash/process-manager.d.ts.map +1 -0
  148. package/dist/tools/bash/process-manager.js +137 -0
  149. package/dist/tools/bash/process-manager.js.map +1 -0
  150. package/dist/tools/bash/run.d.ts +5 -0
  151. package/dist/tools/bash/run.d.ts.map +1 -0
  152. package/dist/tools/bash/run.js +57 -0
  153. package/dist/tools/bash/run.js.map +1 -0
  154. package/dist/tools/bash/terminate.d.ts +5 -0
  155. package/dist/tools/bash/terminate.d.ts.map +1 -0
  156. package/dist/tools/bash/terminate.js +39 -0
  157. package/dist/tools/bash/terminate.js.map +1 -0
  158. package/dist/tools/bash/wait.d.ts +5 -0
  159. package/dist/tools/bash/wait.d.ts.map +1 -0
  160. package/dist/tools/bash/wait.js +50 -0
  161. package/dist/tools/bash/wait.js.map +1 -0
  162. package/dist/tools/bash/write-input.d.ts +5 -0
  163. package/dist/tools/bash/write-input.d.ts.map +1 -0
  164. package/dist/tools/bash/write-input.js +47 -0
  165. package/dist/tools/bash/write-input.js.map +1 -0
  166. package/dist/tools/browser/click.d.ts +5 -0
  167. package/dist/tools/browser/click.d.ts.map +1 -0
  168. package/dist/tools/browser/click.js +44 -0
  169. package/dist/tools/browser/click.js.map +1 -0
  170. package/dist/tools/browser/console.d.ts +4 -0
  171. package/dist/tools/browser/console.d.ts.map +1 -0
  172. package/dist/tools/browser/console.js +41 -0
  173. package/dist/tools/browser/console.js.map +1 -0
  174. package/dist/tools/browser/create-session.d.ts +5 -0
  175. package/dist/tools/browser/create-session.d.ts.map +1 -0
  176. package/dist/tools/browser/create-session.js +30 -0
  177. package/dist/tools/browser/create-session.js.map +1 -0
  178. package/dist/tools/browser/evaluate-safe.d.ts +10 -0
  179. package/dist/tools/browser/evaluate-safe.d.ts.map +1 -0
  180. package/dist/tools/browser/evaluate-safe.js +65 -0
  181. package/dist/tools/browser/evaluate-safe.js.map +1 -0
  182. package/dist/tools/browser/fill.d.ts +5 -0
  183. package/dist/tools/browser/fill.d.ts.map +1 -0
  184. package/dist/tools/browser/fill.js +78 -0
  185. package/dist/tools/browser/fill.js.map +1 -0
  186. package/dist/tools/browser/get-sessions.d.ts +4 -0
  187. package/dist/tools/browser/get-sessions.d.ts.map +1 -0
  188. package/dist/tools/browser/get-sessions.js +14 -0
  189. package/dist/tools/browser/get-sessions.js.map +1 -0
  190. package/dist/tools/browser/index.d.ts +19 -0
  191. package/dist/tools/browser/index.d.ts.map +1 -0
  192. package/dist/tools/browser/index.js +49 -0
  193. package/dist/tools/browser/index.js.map +1 -0
  194. package/dist/tools/browser/inject.d.ts +5 -0
  195. package/dist/tools/browser/inject.d.ts.map +1 -0
  196. package/dist/tools/browser/inject.js +51 -0
  197. package/dist/tools/browser/inject.js.map +1 -0
  198. package/dist/tools/browser/interaction.d.ts +49 -0
  199. package/dist/tools/browser/interaction.d.ts.map +1 -0
  200. package/dist/tools/browser/interaction.js +14 -0
  201. package/dist/tools/browser/interaction.js.map +1 -0
  202. package/dist/tools/browser/navigate.d.ts +5 -0
  203. package/dist/tools/browser/navigate.d.ts.map +1 -0
  204. package/dist/tools/browser/navigate.js +39 -0
  205. package/dist/tools/browser/navigate.js.map +1 -0
  206. package/dist/tools/browser/network-status.d.ts +4 -0
  207. package/dist/tools/browser/network-status.d.ts.map +1 -0
  208. package/dist/tools/browser/network-status.js +35 -0
  209. package/dist/tools/browser/network-status.js.map +1 -0
  210. package/dist/tools/browser/network.d.ts +4 -0
  211. package/dist/tools/browser/network.d.ts.map +1 -0
  212. package/dist/tools/browser/network.js +51 -0
  213. package/dist/tools/browser/network.js.map +1 -0
  214. package/dist/tools/browser/read-page.d.ts +45 -0
  215. package/dist/tools/browser/read-page.d.ts.map +1 -0
  216. package/dist/tools/browser/read-page.js +264 -0
  217. package/dist/tools/browser/read-page.js.map +1 -0
  218. package/dist/tools/browser/read.d.ts +5 -0
  219. package/dist/tools/browser/read.d.ts.map +1 -0
  220. package/dist/tools/browser/read.js +56 -0
  221. package/dist/tools/browser/read.js.map +1 -0
  222. package/dist/tools/browser/remove-session.d.ts +5 -0
  223. package/dist/tools/browser/remove-session.d.ts.map +1 -0
  224. package/dist/tools/browser/remove-session.js +29 -0
  225. package/dist/tools/browser/remove-session.js.map +1 -0
  226. package/dist/tools/browser/screenshot.d.ts +5 -0
  227. package/dist/tools/browser/screenshot.d.ts.map +1 -0
  228. package/dist/tools/browser/screenshot.js +50 -0
  229. package/dist/tools/browser/screenshot.js.map +1 -0
  230. package/dist/tools/browser/scroll-info.d.ts +4 -0
  231. package/dist/tools/browser/scroll-info.d.ts.map +1 -0
  232. package/dist/tools/browser/scroll-info.js +28 -0
  233. package/dist/tools/browser/scroll-info.js.map +1 -0
  234. package/dist/tools/browser/scroll.d.ts +5 -0
  235. package/dist/tools/browser/scroll.d.ts.map +1 -0
  236. package/dist/tools/browser/scroll.js +43 -0
  237. package/dist/tools/browser/scroll.js.map +1 -0
  238. package/dist/tools/browser/session-manager.d.ts +35 -0
  239. package/dist/tools/browser/session-manager.d.ts.map +1 -0
  240. package/dist/tools/browser/session-manager.js +101 -0
  241. package/dist/tools/browser/session-manager.js.map +1 -0
  242. package/dist/tools/browser/submit-form.d.ts +5 -0
  243. package/dist/tools/browser/submit-form.d.ts.map +1 -0
  244. package/dist/tools/browser/submit-form.js +45 -0
  245. package/dist/tools/browser/submit-form.js.map +1 -0
  246. package/dist/tools/fs/create-dir.d.ts +5 -0
  247. package/dist/tools/fs/create-dir.d.ts.map +1 -0
  248. package/dist/tools/fs/create-dir.js +28 -0
  249. package/dist/tools/fs/create-dir.js.map +1 -0
  250. package/dist/tools/fs/delete.d.ts +5 -0
  251. package/dist/tools/fs/delete.d.ts.map +1 -0
  252. package/dist/tools/fs/delete.js +45 -0
  253. package/dist/tools/fs/delete.js.map +1 -0
  254. package/dist/tools/fs/edit-file.d.ts +5 -0
  255. package/dist/tools/fs/edit-file.d.ts.map +1 -0
  256. package/dist/tools/fs/edit-file.js +74 -0
  257. package/dist/tools/fs/edit-file.js.map +1 -0
  258. package/dist/tools/fs/index.d.ts +11 -2
  259. package/dist/tools/fs/index.d.ts.map +1 -1
  260. package/dist/tools/fs/index.js +27 -2
  261. package/dist/tools/fs/index.js.map +1 -1
  262. package/dist/tools/fs/interaction.d.ts +37 -0
  263. package/dist/tools/fs/interaction.d.ts.map +1 -0
  264. package/dist/tools/fs/interaction.js +13 -0
  265. package/dist/tools/fs/interaction.js.map +1 -0
  266. package/dist/tools/fs/list-dir.d.ts +5 -0
  267. package/dist/tools/fs/list-dir.d.ts.map +1 -0
  268. package/dist/tools/fs/list-dir.js +87 -0
  269. package/dist/tools/fs/list-dir.js.map +1 -0
  270. package/dist/tools/fs/move.d.ts +5 -0
  271. package/dist/tools/fs/move.d.ts.map +1 -0
  272. package/dist/tools/fs/move.js +44 -0
  273. package/dist/tools/fs/move.js.map +1 -0
  274. package/dist/tools/fs/read-file.d.ts +4 -3
  275. package/dist/tools/fs/read-file.d.ts.map +1 -1
  276. package/dist/tools/fs/read-file.js +50 -42
  277. package/dist/tools/fs/read-file.js.map +1 -1
  278. package/dist/tools/fs/stat.d.ts +5 -0
  279. package/dist/tools/fs/stat.d.ts.map +1 -0
  280. package/dist/tools/fs/stat.js +40 -0
  281. package/dist/tools/fs/stat.js.map +1 -0
  282. package/dist/tools/fs/utils.d.ts +20 -0
  283. package/dist/tools/fs/utils.d.ts.map +1 -0
  284. package/dist/tools/fs/utils.js +33 -0
  285. package/dist/tools/fs/utils.js.map +1 -0
  286. package/dist/tools/fs/write-file.d.ts +4 -3
  287. package/dist/tools/fs/write-file.d.ts.map +1 -1
  288. package/dist/tools/fs/write-file.js +39 -58
  289. package/dist/tools/fs/write-file.js.map +1 -1
  290. package/dist/tools/present/add.d.ts +5 -0
  291. package/dist/tools/present/add.d.ts.map +1 -0
  292. package/dist/tools/present/add.js +54 -0
  293. package/dist/tools/present/add.js.map +1 -0
  294. package/dist/tools/present/clear.d.ts +5 -0
  295. package/dist/tools/present/clear.d.ts.map +1 -0
  296. package/dist/tools/present/clear.js +23 -0
  297. package/dist/tools/present/clear.js.map +1 -0
  298. package/dist/tools/present/get-list.d.ts +5 -0
  299. package/dist/tools/present/get-list.d.ts.map +1 -0
  300. package/dist/tools/present/get-list.js +24 -0
  301. package/dist/tools/present/get-list.js.map +1 -0
  302. package/dist/tools/present/index.d.ts +8 -0
  303. package/dist/tools/present/index.d.ts.map +1 -0
  304. package/dist/tools/present/index.js +14 -0
  305. package/dist/tools/present/index.js.map +1 -0
  306. package/dist/tools/present/interaction.d.ts +17 -0
  307. package/dist/tools/present/interaction.d.ts.map +1 -0
  308. package/dist/tools/present/interaction.js +15 -0
  309. package/dist/tools/present/interaction.js.map +1 -0
  310. package/dist/tools/present/utils.d.ts +12 -0
  311. package/dist/tools/present/utils.d.ts.map +1 -0
  312. package/dist/tools/present/utils.js +40 -0
  313. package/dist/tools/present/utils.js.map +1 -0
  314. package/dist/tools/question-answer/index.d.ts +5 -0
  315. package/dist/tools/question-answer/index.d.ts.map +1 -0
  316. package/dist/tools/question-answer/index.js +7 -0
  317. package/dist/tools/question-answer/index.js.map +1 -0
  318. package/dist/tools/question-answer/interaction.d.ts +14 -0
  319. package/dist/tools/question-answer/interaction.d.ts.map +1 -0
  320. package/dist/tools/question-answer/interaction.js +13 -0
  321. package/dist/tools/question-answer/interaction.js.map +1 -0
  322. package/dist/tools/question-answer/question-answer.d.ts +5 -0
  323. package/dist/tools/question-answer/question-answer.d.ts.map +1 -0
  324. package/dist/tools/question-answer/question-answer.js +24 -0
  325. package/dist/tools/question-answer/question-answer.js.map +1 -0
  326. package/dist/tools/todo/check-task.d.ts +5 -0
  327. package/dist/tools/todo/check-task.d.ts.map +1 -0
  328. package/dist/tools/todo/check-task.js +49 -0
  329. package/dist/tools/todo/check-task.js.map +1 -0
  330. package/dist/tools/todo/create-list.d.ts +5 -0
  331. package/dist/tools/todo/create-list.d.ts.map +1 -0
  332. package/dist/tools/todo/create-list.js +36 -0
  333. package/dist/tools/todo/create-list.js.map +1 -0
  334. package/dist/tools/todo/create-task.d.ts +5 -0
  335. package/dist/tools/todo/create-task.d.ts.map +1 -0
  336. package/dist/tools/todo/create-task.js +63 -0
  337. package/dist/tools/todo/create-task.js.map +1 -0
  338. package/dist/tools/todo/get-list.d.ts +4 -0
  339. package/dist/tools/todo/get-list.d.ts.map +1 -0
  340. package/dist/tools/todo/get-list.js +38 -0
  341. package/dist/tools/todo/get-list.js.map +1 -0
  342. package/dist/tools/todo/get-lists.d.ts +4 -0
  343. package/dist/tools/todo/get-lists.d.ts.map +1 -0
  344. package/dist/tools/todo/get-lists.js +18 -0
  345. package/dist/tools/todo/get-lists.js.map +1 -0
  346. package/dist/tools/todo/index.d.ts +12 -0
  347. package/dist/tools/todo/index.d.ts.map +1 -0
  348. package/dist/tools/todo/index.js +25 -0
  349. package/dist/tools/todo/index.js.map +1 -0
  350. package/dist/tools/todo/interaction.d.ts +30 -0
  351. package/dist/tools/todo/interaction.d.ts.map +1 -0
  352. package/dist/tools/todo/interaction.js +13 -0
  353. package/dist/tools/todo/interaction.js.map +1 -0
  354. package/dist/tools/todo/remove-list.d.ts +5 -0
  355. package/dist/tools/todo/remove-list.d.ts.map +1 -0
  356. package/dist/tools/todo/remove-list.js +42 -0
  357. package/dist/tools/todo/remove-list.js.map +1 -0
  358. package/dist/tools/todo/remove-task.d.ts +5 -0
  359. package/dist/tools/todo/remove-task.d.ts.map +1 -0
  360. package/dist/tools/todo/remove-task.js +45 -0
  361. package/dist/tools/todo/remove-task.js.map +1 -0
  362. package/dist/tools/todo/storage.d.ts +22 -0
  363. package/dist/tools/todo/storage.d.ts.map +1 -0
  364. package/dist/tools/todo/storage.js +44 -0
  365. package/dist/tools/todo/storage.js.map +1 -0
  366. package/dist/tools/utils/delay.d.ts +10 -0
  367. package/dist/tools/utils/delay.d.ts.map +1 -0
  368. package/dist/tools/utils/delay.js +33 -0
  369. package/dist/tools/utils/delay.js.map +1 -0
  370. package/dist/tools/utils/get-current-time.d.ts +7 -2
  371. package/dist/tools/utils/get-current-time.d.ts.map +1 -1
  372. package/dist/tools/utils/get-current-time.js +12 -31
  373. package/dist/tools/utils/get-current-time.js.map +1 -1
  374. package/dist/tools/utils/index.d.ts +2 -0
  375. package/dist/tools/utils/index.d.ts.map +1 -1
  376. package/dist/tools/utils/index.js +7 -0
  377. package/dist/tools/utils/index.js.map +1 -1
  378. package/package.json +54 -56
  379. package/dist/templates/researcher.d.ts +0 -27
  380. package/dist/templates/researcher.d.ts.map +0 -1
  381. package/dist/templates/researcher.js +0 -70
  382. package/dist/templates/researcher.js.map +0 -1
  383. package/dist/tools/www/fetch.d.ts +0 -4
  384. package/dist/tools/www/fetch.d.ts.map +0 -1
  385. package/dist/tools/www/fetch.js +0 -147
  386. package/dist/tools/www/fetch.js.map +0 -1
  387. package/dist/tools/www/index.d.ts +0 -4
  388. package/dist/tools/www/index.d.ts.map +0 -1
  389. package/dist/tools/www/index.js +0 -4
  390. package/dist/tools/www/index.js.map +0 -1
  391. package/dist/tools/www/read-web-page.d.ts +0 -4
  392. package/dist/tools/www/read-web-page.d.ts.map +0 -1
  393. package/dist/tools/www/read-web-page.js +0 -330
  394. package/dist/tools/www/read-web-page.js.map +0 -1
  395. package/dist/tools/www/web-search.d.ts +0 -4
  396. package/dist/tools/www/web-search.d.ts.map +0 -1
  397. package/dist/tools/www/web-search.js +0 -82
  398. package/dist/tools/www/web-search.js.map +0 -1
@@ -0,0 +1,35 @@
1
+ import { type Browser, type Page } from "puppeteer-core";
2
+ export interface ConsoleLogEntry {
3
+ type: string;
4
+ content: string;
5
+ }
6
+ export interface NetworkLogEntry {
7
+ type: string;
8
+ status: number;
9
+ requestHeaders: Record<string, string>;
10
+ request: string;
11
+ responseHeaders: Record<string, string>;
12
+ response: string;
13
+ }
14
+ /**
15
+ * Holds everything tied to one live browser session: the Puppeteer browser
16
+ * and page, plus the ref-id map used so the AI can refer to clickable /
17
+ * fillable elements by a stable short hex id instead of re-describing them.
18
+ */
19
+ declare class BrowserSession {
20
+ id: string;
21
+ browser: Browser;
22
+ page: Page;
23
+ consoleLogs: ConsoleLogEntry[];
24
+ networkLogs: NetworkLogEntry[];
25
+ constructor(id: string, browser: Browser, page: Page);
26
+ pushConsoleLog(entry: ConsoleLogEntry): void;
27
+ pushNetworkLog(entry: NetworkLogEntry): void;
28
+ }
29
+ export declare function createSession(url: string, sessionId: string): Promise<BrowserSession>;
30
+ export declare function getSession(sessionId: string): BrowserSession;
31
+ export declare function getSessionIds(): string[];
32
+ export declare function removeSession(sessionId: string): Promise<void>;
33
+ export default BrowserSession;
34
+ export { BrowserSession };
35
+ //# sourceMappingURL=session-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-manager.d.ts","sourceRoot":"","sources":["../../../src/tools/browser/session-manager.ts"],"names":[],"mappings":"AACA,OAAkB,EAAE,KAAK,OAAO,EAAE,KAAK,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAEpE,MAAM,WAAW,eAAe;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,eAAe;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACvC,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACxC,QAAQ,EAAE,MAAM,CAAC;CACpB;AAMD;;;;GAIG;AACH,cAAM,cAAc;IAChB,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,IAAI,CAAC;IACX,WAAW,EAAE,eAAe,EAAE,CAAM;IACpC,WAAW,EAAE,eAAe,EAAE,CAAM;gBAExB,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI;IAMpD,cAAc,CAAC,KAAK,EAAE,eAAe;IAOrC,cAAc,CAAC,KAAK,EAAE,eAAe;CAMxC;AAQD,wBAAsB,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CAgD3F;AAED,wBAAgB,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,cAAc,CAM5D;AAED,wBAAgB,aAAa,IAAI,MAAM,EAAE,CAExC;AAED,wBAAsB,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAKpE;AAED,eAAe,cAAc,CAAC;AAC9B,OAAO,EAAE,cAAc,EAAE,CAAC"}
@@ -0,0 +1,101 @@
1
+ import os from "os";
2
+ import puppeteer, {} from "puppeteer-core";
3
+ const CONSOLE_LOG_CAP = 1000;
4
+ const NETWORK_LOG_CAP = 1000;
5
+ const MAX_LOG_ENTRIES = 500;
6
+ /**
7
+ * Holds everything tied to one live browser session: the Puppeteer browser
8
+ * and page, plus the ref-id map used so the AI can refer to clickable /
9
+ * fillable elements by a stable short hex id instead of re-describing them.
10
+ */
11
+ class BrowserSession {
12
+ id;
13
+ browser;
14
+ page;
15
+ consoleLogs = [];
16
+ networkLogs = [];
17
+ constructor(id, browser, page) {
18
+ this.id = id;
19
+ this.browser = browser;
20
+ this.page = page;
21
+ }
22
+ pushConsoleLog(entry) {
23
+ this.consoleLogs.push(entry);
24
+ if (this.consoleLogs.length > MAX_LOG_ENTRIES) {
25
+ this.consoleLogs.splice(0, this.consoleLogs.length - MAX_LOG_ENTRIES);
26
+ }
27
+ }
28
+ pushNetworkLog(entry) {
29
+ this.networkLogs.push(entry);
30
+ if (this.networkLogs.length > MAX_LOG_ENTRIES) {
31
+ this.networkLogs.splice(0, this.networkLogs.length - MAX_LOG_ENTRIES);
32
+ }
33
+ }
34
+ }
35
+ const sessions = new Map();
36
+ function truncate(str, cap) {
37
+ return str.length > cap ? str.slice(0, cap) : str;
38
+ }
39
+ export async function createSession(url, sessionId) {
40
+ const browser = await puppeteer.launch({
41
+ executablePath: process.env.CHROME_PATH || (os.platform() == "win32" ?
42
+ "C:/Program Files/Google/Chrome/Application/chrome.exe" :
43
+ "/usr/bin/google-chrome-stable"),
44
+ headless: Boolean(process.env.HEADLESS_BROWSER_SESSIONS || true),
45
+ args: ["--no-sandbox"],
46
+ });
47
+ const page = await browser.newPage();
48
+ const session = new BrowserSession(sessionId, browser, page);
49
+ page.on("console", (msg) => {
50
+ session.pushConsoleLog({
51
+ type: msg.type(),
52
+ content: truncate(msg.text(), CONSOLE_LOG_CAP),
53
+ });
54
+ });
55
+ page.on("response", async (response) => {
56
+ try {
57
+ const request = response.request();
58
+ let responseBody = "";
59
+ try {
60
+ responseBody = await response.text();
61
+ }
62
+ catch {
63
+ responseBody = "";
64
+ }
65
+ session.pushNetworkLog({
66
+ type: request.resourceType(),
67
+ status: response.status(),
68
+ requestHeaders: request.headers(),
69
+ request: truncate(request.postData() || request.url(), NETWORK_LOG_CAP),
70
+ responseHeaders: response.headers(),
71
+ response: truncate(responseBody, NETWORK_LOG_CAP),
72
+ });
73
+ }
74
+ catch {
75
+ // best-effort logging only, never throw from an event handler
76
+ }
77
+ });
78
+ await page.goto(url, { waitUntil: "domcontentloaded" });
79
+ sessions.set(sessionId, session);
80
+ return session;
81
+ }
82
+ export function getSession(sessionId) {
83
+ const session = sessions.get(sessionId);
84
+ if (!session) {
85
+ throw new Error(`no browser session found with id "${sessionId}"`);
86
+ }
87
+ return session;
88
+ }
89
+ export function getSessionIds() {
90
+ return Array.from(sessions.keys());
91
+ }
92
+ export async function removeSession(sessionId) {
93
+ const session = sessions.get(sessionId);
94
+ if (!session)
95
+ return;
96
+ await session.browser.close().catch(() => { });
97
+ sessions.delete(sessionId);
98
+ }
99
+ export default BrowserSession;
100
+ export { BrowserSession };
101
+ //# sourceMappingURL=session-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-manager.js","sourceRoot":"","sources":["../../../src/tools/browser/session-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import { MCPTool } from "../../core/mcp.js";
2
+ import { BrowserInteraction } from "./interaction.js";
3
+ export declare const BrowserSubmitFormTool: () => MCPTool<BrowserInteraction>;
4
+ export default BrowserSubmitFormTool;
5
+ //# sourceMappingURL=submit-form.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"submit-form.d.ts","sourceRoot":"","sources":["../../../src/tools/browser/submit-form.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAC5C,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAItD,eAAO,MAAM,qBAAqB,mCAkDhC,CAAC;AAEH,eAAe,qBAAqB,CAAC"}
@@ -0,0 +1,45 @@
1
+ import { MCPTool } from "../../core/mcp.js";
2
+ import { BrowserInteraction } from "./interaction.js";
3
+ import { getSession } from "./session-manager.js";
4
+ import { submitForm } from "./read-page.js";
5
+ export const BrowserSubmitFormTool = () => new MCPTool({
6
+ name: "browser-submit-form",
7
+ description: "submit a <form> on the page by its ref id (the [FORM] ref shown by browser-read). " +
8
+ "use this for forms that have no visible submit button — e.g. a search box where the only way to search is pressing Enter — since there is nothing to browser-click. " +
9
+ "this has the same effect as focusing a field inside the form and pressing Enter.",
10
+ inputs: [
11
+ {
12
+ name: "sessionId",
13
+ type: "string",
14
+ description: "session to act on",
15
+ required: true,
16
+ },
17
+ {
18
+ name: "formRef",
19
+ type: "string",
20
+ description: "ref id of the form to submit, e.g. 0x7",
21
+ required: true,
22
+ },
23
+ ],
24
+ customClass: new BrowserInteraction(),
25
+ execute: async (_envID, inputs, _mcp, customClass) => {
26
+ const { sessionId, formRef } = inputs;
27
+ if (!sessionId || typeof sessionId !== "string") {
28
+ throw new Error("sessionId must be a non-empty string");
29
+ }
30
+ if (!formRef || typeof formRef !== "string") {
31
+ throw new Error("formRef must be a non-empty string");
32
+ }
33
+ customClass?.emitBrowserEvent({ type: "submitting-form", sessionId, formRef });
34
+ const session = getSession(sessionId);
35
+ const submitted = await submitForm(session.page, formRef);
36
+ if (!submitted) {
37
+ throw new Error(`formRef "${formRef}" was not found on the page (call browser-read again to get a fresh form ref)`);
38
+ }
39
+ return {
40
+ message: "success",
41
+ };
42
+ },
43
+ });
44
+ export default BrowserSubmitFormTool;
45
+ //# sourceMappingURL=submit-form.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"submit-form.js","sourceRoot":"","sources":["../../../src/tools/browser/submit-form.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAC5C,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAE5C,MAAM,CAAC,MAAM,qBAAqB,GAAG,GAAG,EAAE,CAAC,IAAI,OAAO,CAAqB;IACvE,IAAI,EAAE,qBAAqB;IAC3B,WAAW,EACP,oFAAoF;QACpF,sKAAsK;QACtK,kFAAkF;IACtF,MAAM,EAAE;QACJ;YACI,IAAI,EAAE,WAAW;YACjB,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,mBAAmB;YAChC,QAAQ,EAAE,IAAI;SACjB;QACD;YACI,IAAI,EAAE,SAAS;YACf,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,wCAAwC;YACrD,QAAQ,EAAE,IAAI;SACjB;KACJ;IACD,WAAW,EAAE,IAAI,kBAAkB,EAAE;IACrC,OAAO,EAAE,KAAK,EACV,MAAc,EACd,MAA2B,EAC3B,IAAU,EACV,WAAgC,EACpB,EAAE;QACd,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC;QAEtC,IAAI,CAAC,SAAS,IAAI,OAAO,SAAS,KAAK,QAAQ,EAAE,CAAC;YAC9C,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;QAC5D,CAAC;QAED,IAAI,CAAC,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;YAC1C,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;QAC1D,CAAC;QAED,WAAW,EAAE,gBAAgB,CAAC,EAAE,IAAI,EAAE,iBAAiB,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,CAAC;QAE/E,MAAM,OAAO,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC;QACtC,MAAM,SAAS,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAE1D,IAAI,CAAC,SAAS,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CAAC,YAAY,OAAO,+EAA+E,CAAC,CAAC;QACxH,CAAC;QAED,OAAO;YACH,OAAO,EAAE,SAAS;SACrB,CAAC;IACN,CAAC;CACJ,CAAC,CAAC;AAEH,eAAe,qBAAqB,CAAC"}
@@ -0,0 +1,5 @@
1
+ import { MCPTool } from "../../core/mcp.js";
2
+ import { FsInteraction } from "./interaction.js";
3
+ export declare const FsCreateDirTool: () => MCPTool<FsInteraction>;
4
+ export default FsCreateDirTool;
5
+ //# sourceMappingURL=create-dir.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-dir.d.ts","sourceRoot":"","sources":["../../../src/tools/fs/create-dir.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAY,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAGjD,eAAO,MAAM,eAAe,8BA8B1B,CAAC;AAEH,eAAe,eAAe,CAAC"}
@@ -0,0 +1,28 @@
1
+ import { mkdir } from "fs/promises";
2
+ import { MCPTool } from "../../core/mcp.js";
3
+ import { FsInteraction } from "./interaction.js";
4
+ import { resolvePath } from "./utils.js";
5
+ export const FsCreateDirTool = () => new MCPTool({
6
+ name: "fs-create-dir",
7
+ description: "create a directory, including any missing parent directories",
8
+ inputs: [
9
+ {
10
+ name: "path",
11
+ type: "string",
12
+ description: "absolute or cwd-relative path to the directory to create",
13
+ required: true,
14
+ },
15
+ ],
16
+ customClass: new FsInteraction(),
17
+ execute: async (_envID, inputs, _mcp, customClass) => {
18
+ const { path } = inputs;
19
+ const fullPath = resolvePath(path);
20
+ customClass?.emitFsEvent({ type: "dir-created", path: fullPath });
21
+ await mkdir(fullPath, { recursive: true });
22
+ return {
23
+ message: "success",
24
+ };
25
+ },
26
+ });
27
+ export default FsCreateDirTool;
28
+ //# sourceMappingURL=create-dir.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-dir.js","sourceRoot":"","sources":["../../../src/tools/fs/create-dir.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EAAE,OAAO,EAAY,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEzC,MAAM,CAAC,MAAM,eAAe,GAAG,GAAG,EAAE,CAAC,IAAI,OAAO,CAAgB;IAC5D,IAAI,EAAE,eAAe;IACrB,WAAW,EAAE,8DAA8D;IAC3E,MAAM,EAAE;QACJ;YACI,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,0DAA0D;YACvE,QAAQ,EAAE,IAAI;SACjB;KACJ;IACD,WAAW,EAAE,IAAI,aAAa,EAAE;IAChC,OAAO,EAAE,KAAK,EACV,MAAc,EACd,MAA2B,EAC3B,IAAU,EACV,WAA2B,EACf,EAAE;QACd,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,CAAC;QAExB,MAAM,QAAQ,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;QAEnC,WAAW,EAAE,WAAW,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;QAElE,MAAM,KAAK,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAE3C,OAAO;YACH,OAAO,EAAE,SAAS;SACrB,CAAC;IACN,CAAC;CACJ,CAAC,CAAC;AAEH,eAAe,eAAe,CAAC"}
@@ -0,0 +1,5 @@
1
+ import { MCPTool } from "../../core/mcp.js";
2
+ import { FsInteraction } from "./interaction.js";
3
+ export declare const FsDeleteTool: () => MCPTool<FsInteraction>;
4
+ export default FsDeleteTool;
5
+ //# sourceMappingURL=delete.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delete.d.ts","sourceRoot":"","sources":["../../../src/tools/fs/delete.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAY,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAGjD,eAAO,MAAM,YAAY,8BA+CvB,CAAC;AAEH,eAAe,YAAY,CAAC"}
@@ -0,0 +1,45 @@
1
+ import { rm, stat } from "fs/promises";
2
+ import { MCPTool } from "../../core/mcp.js";
3
+ import { FsInteraction } from "./interaction.js";
4
+ import { resolvePath } from "./utils.js";
5
+ export const FsDeleteTool = () => new MCPTool({
6
+ name: "fs-delete",
7
+ description: "permanently delete a file or a directory (with all of its contents when recursive is true). USE WITH CAUTION: there is no undo.",
8
+ inputs: [
9
+ {
10
+ name: "path",
11
+ type: "string",
12
+ description: "absolute or cwd-relative path to delete",
13
+ required: true,
14
+ },
15
+ {
16
+ name: "recursive",
17
+ type: "boolean",
18
+ description: "if the path is a non-empty directory, delete it and everything inside it",
19
+ required: false,
20
+ default: false,
21
+ },
22
+ ],
23
+ customClass: new FsInteraction(),
24
+ execute: async (_envID, inputs, _mcp, customClass) => {
25
+ const { path, recursive = false } = inputs;
26
+ const fullPath = resolvePath(path);
27
+ customClass?.emitFsEvent({ type: "deleting", path: fullPath });
28
+ let wasDirectory = false;
29
+ try {
30
+ wasDirectory = (await stat(fullPath)).isDirectory();
31
+ }
32
+ catch (err) {
33
+ if (err.code === "ENOENT")
34
+ throw new Error(`no file or directory found at "${path}"`);
35
+ throw err;
36
+ }
37
+ await rm(fullPath, { recursive, force: false });
38
+ return {
39
+ message: "success",
40
+ type: wasDirectory ? "directory" : "file",
41
+ };
42
+ },
43
+ });
44
+ export default FsDeleteTool;
45
+ //# sourceMappingURL=delete.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delete.js","sourceRoot":"","sources":["../../../src/tools/fs/delete.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,OAAO,EAAY,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEzC,MAAM,CAAC,MAAM,YAAY,GAAG,GAAG,EAAE,CAAC,IAAI,OAAO,CAAgB;IACzD,IAAI,EAAE,WAAW;IACjB,WAAW,EACP,iIAAiI;IACrI,MAAM,EAAE;QACJ;YACI,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,yCAAyC;YACtD,QAAQ,EAAE,IAAI;SACjB;QACD;YACI,IAAI,EAAE,WAAW;YACjB,IAAI,EAAE,SAAS;YACf,WAAW,EAAE,0EAA0E;YACvF,QAAQ,EAAE,KAAK;YACf,OAAO,EAAE,KAAK;SACjB;KACJ;IACD,WAAW,EAAE,IAAI,aAAa,EAAE;IAChC,OAAO,EAAE,KAAK,EACV,MAAc,EACd,MAA2B,EAC3B,IAAU,EACV,WAA2B,EACf,EAAE;QACd,MAAM,EAAE,IAAI,EAAE,SAAS,GAAG,KAAK,EAAE,GAAG,MAAM,CAAC;QAE3C,MAAM,QAAQ,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;QAEnC,WAAW,EAAE,WAAW,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;QAE/D,IAAI,YAAY,GAAG,KAAK,CAAC;QACzB,IAAI,CAAC;YACD,YAAY,GAAG,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;QACxD,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAChB,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ;gBAAE,MAAM,IAAI,KAAK,CAAC,kCAAkC,IAAI,GAAG,CAAC,CAAC;YACtF,MAAM,GAAG,CAAC;QACd,CAAC;QAED,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;QAEhD,OAAO;YACH,OAAO,EAAE,SAAS;YAClB,IAAI,EAAE,YAAY,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM;SAC5C,CAAC;IACN,CAAC;CACJ,CAAC,CAAC;AAEH,eAAe,YAAY,CAAC"}
@@ -0,0 +1,5 @@
1
+ import { MCPTool } from "../../core/mcp.js";
2
+ import { FsInteraction } from "./interaction.js";
3
+ export declare const FsEditFileTool: () => MCPTool<FsInteraction>;
4
+ export default FsEditFileTool;
5
+ //# sourceMappingURL=edit-file.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"edit-file.d.ts","sourceRoot":"","sources":["../../../src/tools/fs/edit-file.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAY,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAGjD,eAAO,MAAM,cAAc,8BAiFzB,CAAC;AAEH,eAAe,cAAc,CAAC"}
@@ -0,0 +1,74 @@
1
+ import { readFile, writeFile } from "fs/promises";
2
+ import { MCPTool } from "../../core/mcp.js";
3
+ import { FsInteraction } from "./interaction.js";
4
+ import { resolvePath, toLines } from "./utils.js";
5
+ export const FsEditFileTool = () => new MCPTool({
6
+ name: "fs-edit-file",
7
+ description: "replace a specific line range in an existing file without rewriting the whole file. lines are 0-indexed; the range [offsetLine, offsetLine+limitLine) is replaced entirely by `content` (use limitLine 0 to insert at offsetLine without deleting anything). read the file first (fs-read-file) to get accurate line numbers, since another edit may have shifted them.",
8
+ inputs: [
9
+ {
10
+ name: "path",
11
+ type: "string",
12
+ description: "absolute or cwd-relative path to the file",
13
+ required: true,
14
+ },
15
+ {
16
+ name: "offsetLine",
17
+ type: "number",
18
+ description: "0-indexed line to start replacing from",
19
+ required: true,
20
+ },
21
+ {
22
+ name: "limitLine",
23
+ type: "number",
24
+ description: "number of existing lines to remove starting at offsetLine",
25
+ required: true,
26
+ },
27
+ {
28
+ name: "content",
29
+ type: "string",
30
+ description: "text to insert in place of the removed lines (may itself contain newlines, or be empty to just delete)",
31
+ required: true,
32
+ },
33
+ ],
34
+ customClass: new FsInteraction(),
35
+ execute: async (_envID, inputs, _mcp, customClass) => {
36
+ const { path, offsetLine, limitLine, content } = inputs;
37
+ if (typeof offsetLine !== "number" || offsetLine < 0) {
38
+ throw new Error("offsetLine must be a non-negative number");
39
+ }
40
+ if (typeof limitLine !== "number" || limitLine < 0) {
41
+ throw new Error("limitLine must be a non-negative number");
42
+ }
43
+ if (typeof content !== "string") {
44
+ throw new Error("content must be a string");
45
+ }
46
+ const fullPath = resolvePath(path);
47
+ customClass?.emitFsEvent({ type: "editing", path: fullPath });
48
+ let raw;
49
+ try {
50
+ raw = await readFile(fullPath, { encoding: "utf-8" });
51
+ }
52
+ catch (err) {
53
+ if (err.code === "ENOENT")
54
+ throw new Error(`no file found at "${path}"`);
55
+ throw err;
56
+ }
57
+ const lines = toLines(raw);
58
+ if (offsetLine > lines.length) {
59
+ throw new Error(`offsetLine ${offsetLine} is past end of file (${lines.length} lines)`);
60
+ }
61
+ const removedCount = Math.min(limitLine, lines.length - offsetLine);
62
+ const insertedLines = content.length === 0 ? [] : content.split(/\r\n|\r|\n/);
63
+ lines.splice(offsetLine, removedCount, ...insertedLines);
64
+ await writeFile(fullPath, lines.join("\n"), { encoding: "utf-8" });
65
+ return {
66
+ message: "success",
67
+ removedLines: removedCount,
68
+ insertedLines: insertedLines.length,
69
+ totalLines: lines.length,
70
+ };
71
+ },
72
+ });
73
+ export default FsEditFileTool;
74
+ //# sourceMappingURL=edit-file.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"edit-file.js","sourceRoot":"","sources":["../../../src/tools/fs/edit-file.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,12 @@
1
- export { ReadFileTool } from "./read-file.js";
2
- export { WriteFileTool } from "./write-file.js";
1
+ export { FsReadFileTool } from "./read-file.js";
2
+ export { FsWriteFileTool } from "./write-file.js";
3
+ export { FsEditFileTool } from "./edit-file.js";
4
+ export { FsListDirTool } from "./list-dir.js";
5
+ export { FsCreateDirTool } from "./create-dir.js";
6
+ export { FsDeleteTool } from "./delete.js";
7
+ export { FsMoveTool } from "./move.js";
8
+ export { FsStatTool } from "./stat.js";
9
+ export { FsInteraction } from "./interaction.js";
10
+ export type { FsEvent } from "./interaction.js";
11
+ export declare const FsTools: () => import("../../index.js").MCPTool<import("./interaction.js").FsInteraction>[];
3
12
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tools/fs/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tools/fs/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,YAAY,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAahD,eAAO,MAAM,OAAO,oFASnB,CAAC"}
@@ -1,3 +1,28 @@
1
- export { ReadFileTool } from "./read-file.js";
2
- export { WriteFileTool } from "./write-file.js";
1
+ export { FsReadFileTool } from "./read-file.js";
2
+ export { FsWriteFileTool } from "./write-file.js";
3
+ export { FsEditFileTool } from "./edit-file.js";
4
+ export { FsListDirTool } from "./list-dir.js";
5
+ export { FsCreateDirTool } from "./create-dir.js";
6
+ export { FsDeleteTool } from "./delete.js";
7
+ export { FsMoveTool } from "./move.js";
8
+ export { FsStatTool } from "./stat.js";
9
+ export { FsInteraction } from "./interaction.js";
10
+ import { FsReadFileTool } from "./read-file.js";
11
+ import { FsWriteFileTool } from "./write-file.js";
12
+ import { FsEditFileTool } from "./edit-file.js";
13
+ import { FsListDirTool } from "./list-dir.js";
14
+ import { FsCreateDirTool } from "./create-dir.js";
15
+ import { FsDeleteTool } from "./delete.js";
16
+ import { FsMoveTool } from "./move.js";
17
+ import { FsStatTool } from "./stat.js";
18
+ export const FsTools = () => [
19
+ FsReadFileTool(),
20
+ FsWriteFileTool(),
21
+ FsEditFileTool(),
22
+ FsListDirTool(),
23
+ FsCreateDirTool(),
24
+ FsDeleteTool(),
25
+ FsMoveTool(),
26
+ FsStatTool()
27
+ ];
3
28
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/fs/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/fs/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAIjD,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAGvC,MAAM,CAAC,MAAM,OAAO,GAAG,GAAG,EAAE,CAAC;IACzB,cAAc,EAAE;IAChB,eAAe,EAAE;IACjB,cAAc,EAAE;IAChB,aAAa,EAAE;IACf,eAAe,EAAE;IACjB,YAAY,EAAE;IACd,UAAU,EAAE;IACZ,UAAU,EAAE;CACf,CAAC"}
@@ -0,0 +1,37 @@
1
+ import { MCPCustomClass } from "../../core/mcp.js";
2
+ export type FsEvent = {
3
+ type: "reading";
4
+ path: string;
5
+ } | {
6
+ type: "writing";
7
+ path: string;
8
+ } | {
9
+ type: "editing";
10
+ path: string;
11
+ } | {
12
+ type: "deleting";
13
+ path: string;
14
+ } | {
15
+ type: "moving";
16
+ from: string;
17
+ to: string;
18
+ } | {
19
+ type: "listing";
20
+ path: string;
21
+ } | {
22
+ type: "dir-created";
23
+ path: string;
24
+ } | {
25
+ type: "stat";
26
+ path: string;
27
+ };
28
+ /**
29
+ * Shared custom interaction class for all filesystem tools. A frontend can
30
+ * listen on getEvents() to reflect live activity (e.g. "Reading file.ts...",
31
+ * "Writing config.json...") while the agent works on disk.
32
+ */
33
+ export declare class FsInteraction extends MCPCustomClass {
34
+ emitFsEvent(event: FsEvent): void;
35
+ }
36
+ export default FsInteraction;
37
+ //# sourceMappingURL=interaction.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interaction.d.ts","sourceRoot":"","sources":["../../../src/tools/fs/interaction.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEnD,MAAM,MAAM,OAAO,GACb;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACjC;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACjC;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACjC;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAClC;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,GAC5C;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACjC;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACrC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAErC;;;;GAIG;AACH,qBAAa,aAAc,SAAQ,cAAc;IAC7C,WAAW,CAAC,KAAK,EAAE,OAAO;CAG7B;AAED,eAAe,aAAa,CAAC"}
@@ -0,0 +1,13 @@
1
+ import { MCPCustomClass } from "../../core/mcp.js";
2
+ /**
3
+ * Shared custom interaction class for all filesystem tools. A frontend can
4
+ * listen on getEvents() to reflect live activity (e.g. "Reading file.ts...",
5
+ * "Writing config.json...") while the agent works on disk.
6
+ */
7
+ export class FsInteraction extends MCPCustomClass {
8
+ emitFsEvent(event) {
9
+ this.getEvents().emit("fs", event);
10
+ }
11
+ }
12
+ export default FsInteraction;
13
+ //# sourceMappingURL=interaction.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interaction.js","sourceRoot":"","sources":["../../../src/tools/fs/interaction.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAYnD;;;;GAIG;AACH,MAAM,OAAO,aAAc,SAAQ,cAAc;IAC7C,WAAW,CAAC,KAAc;QACtB,IAAI,CAAC,SAAS,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACvC,CAAC;CACJ;AAED,eAAe,aAAa,CAAC"}
@@ -0,0 +1,5 @@
1
+ import { MCPTool } from "../../core/mcp.js";
2
+ import { FsInteraction } from "./interaction.js";
3
+ export declare const FsListDirTool: () => MCPTool<FsInteraction>;
4
+ export default FsListDirTool;
5
+ //# sourceMappingURL=list-dir.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list-dir.d.ts","sourceRoot":"","sources":["../../../src/tools/fs/list-dir.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAY,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAGjD,eAAO,MAAM,aAAa,8BAyFxB,CAAC;AAEH,eAAe,aAAa,CAAC"}
@@ -0,0 +1,87 @@
1
+ import { readdir, stat } from "fs/promises";
2
+ import { join } from "path";
3
+ import { MCPTool } from "../../core/mcp.js";
4
+ import { FsInteraction } from "./interaction.js";
5
+ import { resolvePath } from "./utils.js";
6
+ export const FsListDirTool = () => new MCPTool({
7
+ name: "fs-list-dir",
8
+ description: "list the entries (files and directories) inside a directory, optionally paging through the results by entry index so very large directories (especially with recursive: true) never need to be returned in one shot",
9
+ inputs: [
10
+ {
11
+ name: "path",
12
+ type: "string",
13
+ description: "absolute or cwd-relative path to the directory",
14
+ required: true,
15
+ },
16
+ {
17
+ name: "recursive",
18
+ type: "boolean",
19
+ description: "recurse into subdirectories",
20
+ required: false,
21
+ default: false,
22
+ },
23
+ {
24
+ name: "offsetResult",
25
+ type: "number",
26
+ description: "entry offset to start listing from (for paging through large directories)",
27
+ required: false,
28
+ default: 0,
29
+ },
30
+ {
31
+ name: "limitResult",
32
+ type: "number",
33
+ description: "max number of entries to return",
34
+ required: false,
35
+ default: 500,
36
+ },
37
+ ],
38
+ customClass: new FsInteraction(),
39
+ execute: async (_envID, inputs, _mcp, customClass) => {
40
+ const { path, recursive = false, offsetResult = 0, limitResult = 500 } = inputs;
41
+ const fullPath = resolvePath(path);
42
+ customClass?.emitFsEvent({ type: "listing", path: fullPath });
43
+ let dirents;
44
+ try {
45
+ dirents = await readdir(fullPath, { withFileTypes: true, recursive });
46
+ }
47
+ catch (err) {
48
+ if (err.code === "ENOENT")
49
+ throw new Error(`no directory found at "${path}"`);
50
+ if (err.code === "ENOTDIR")
51
+ throw new Error(`"${path}" is a file, not a directory`);
52
+ throw err;
53
+ }
54
+ const entries = await Promise.all(dirents.map(async (d) => {
55
+ const entryPath = join(d.parentPath || d.path || fullPath, d.name);
56
+ let size;
57
+ if (d.isFile()) {
58
+ try {
59
+ size = (await stat(entryPath)).size;
60
+ }
61
+ catch {
62
+ size = undefined;
63
+ }
64
+ }
65
+ return {
66
+ name: d.name,
67
+ path: entryPath,
68
+ type: d.isDirectory() ? "directory" : d.isSymbolicLink() ? "symlink" : "file",
69
+ size,
70
+ };
71
+ }));
72
+ const totalResult = entries.length;
73
+ const start = Math.max(0, Math.min(offsetResult, totalResult));
74
+ const end = Math.max(start, Math.min(start + limitResult, totalResult));
75
+ const page = entries.slice(start, end);
76
+ return {
77
+ entries: page,
78
+ result: page,
79
+ total: totalResult,
80
+ totalResult,
81
+ offsetResult: start,
82
+ limitResult,
83
+ };
84
+ },
85
+ });
86
+ export default FsListDirTool;
87
+ //# sourceMappingURL=list-dir.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list-dir.js","sourceRoot":"","sources":["../../../src/tools/fs/list-dir.ts"],"names":[],"mappings":"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"}