@johpaz/hive-agents 0.0.38 → 0.0.40

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 (263) hide show
  1. package/README.md +31 -71
  2. package/dist/hive.js +4318 -2898
  3. package/dist/tool-worker.js +2691 -1969
  4. package/dist/ui/assets/AgentCreateForm-b7xHyfNc.js +1 -0
  5. package/dist/ui/assets/AgentDetailPage-VHy3M7mI.js +1 -0
  6. package/dist/ui/assets/AgentNewPage-BnWImQMx.js +1 -0
  7. package/dist/ui/{dist/assets/AgentsPage-DGNLDXjR.js → assets/AgentsPage-WFy5abqx.js} +5 -5
  8. package/dist/ui/assets/ApiClientPage-BV7zLIL7.js +3 -0
  9. package/dist/ui/assets/{CanvasPage-CnMO1FN8.js → CanvasPage-B9zuIrTm.js} +7 -7
  10. package/dist/ui/assets/ChannelsPage-DiN3NvIM.js +8 -0
  11. package/dist/ui/{dist/assets/DashboardPage-VyXXp3U1.js → assets/DashboardPage-CHjARjVK.js} +2 -2
  12. package/dist/ui/assets/{LoginPage-DPj2s2Qq.js → LoginPage-Dwd_XxoU.js} +1 -1
  13. package/dist/ui/assets/LogsPage-DW8Nnqe6.js +1 -0
  14. package/dist/ui/assets/MeetingPage-D3bkiKYt.js +1 -0
  15. package/dist/ui/assets/{NotFound-BMeQSGcG.js → NotFound-BIUDlIXU.js} +1 -1
  16. package/dist/ui/assets/ProvidersPage-UqsDAxPQ.js +1 -0
  17. package/dist/ui/{dist/assets/RecoverPage-B-hDZUM2.js → assets/RecoverPage-8hTjr_JU.js} +1 -1
  18. package/dist/ui/assets/SettingsPage-DNa0jOkA.js +9 -0
  19. package/dist/ui/assets/SetupPage-Bdm2irQG.js +1 -0
  20. package/dist/ui/assets/WebChatPage-DElJg6P2.js +16 -0
  21. package/dist/ui/assets/accordion-CnLzKNHK.js +1 -0
  22. package/dist/ui/{dist/assets/alert-Bq6awLlW.js → assets/alert-DylmSCDJ.js} +1 -1
  23. package/dist/ui/{dist/assets/alert-dialog-DQvltYmf.js → assets/alert-dialog-DNNWN_SI.js} +1 -1
  24. package/dist/ui/assets/{badge-DXUDdTed.js → badge-ChENFgkC.js} +1 -1
  25. package/dist/ui/assets/bell-8BqRYmzf.js +1 -0
  26. package/dist/ui/assets/chevron-down-DIosfU_U.js +1 -0
  27. package/dist/ui/assets/chevron-up-CI-W21Fy.js +1 -0
  28. package/dist/ui/assets/circle-x-DjLkFDO8.js +1 -0
  29. package/dist/ui/assets/copy-Bu5d7C-0.js +1 -0
  30. package/dist/ui/{dist/assets/dialog-bI9jImCS.js → assets/dialog-BJ-npIv8.js} +1 -1
  31. package/dist/ui/{dist/assets/dropdown-menu-BK-CO3Od.js → assets/dropdown-menu-DDiaHg5y.js} +1 -1
  32. package/dist/ui/assets/{es-Cg8zdT52.js → es-ecSKCyB6.js} +1 -1
  33. package/dist/ui/assets/index-CawKP29y.js +116 -0
  34. package/dist/ui/assets/index-DIcsEkyd.css +2 -0
  35. package/dist/ui/{dist/assets/label-CrH0Jj3v.js → assets/label-Bi6udtSd.js} +1 -1
  36. package/dist/ui/assets/progress-D5c-Eilm.js +1 -0
  37. package/dist/ui/assets/scroll-area-CihOx0cb.js +1 -0
  38. package/dist/ui/assets/search-DzDptO9s.js +1 -0
  39. package/dist/ui/assets/select-BQCOjM2j.js +1 -0
  40. package/dist/ui/assets/send-BPk9XbIq.js +1 -0
  41. package/dist/ui/assets/shield-CxhcUT39.js +1 -0
  42. package/dist/ui/assets/{slider-CsiUDxc3.js → slider-bcUiUfx0.js} +1 -1
  43. package/dist/ui/assets/switch-BR30E4ej.js +1 -0
  44. package/dist/ui/assets/table-B3aGEaVp.js +1 -0
  45. package/dist/ui/assets/tabs-LQidMKRS.js +1 -0
  46. package/dist/ui/assets/textarea-B6Z1Zc6W.js +1 -0
  47. package/dist/ui/assets/useProviders-Dlizq_8q.js +1 -0
  48. package/dist/ui/{dist/assets/vendor-radix-cw1bQaVC.js → assets/vendor-radix-D6rA7xKY.js} +4 -4
  49. package/dist/ui/assets/{vendor-react-D4s9E-zj.js → vendor-react-BU5iQU4f.js} +1 -1
  50. package/dist/ui/dist/assets/AgentCreateForm-b7xHyfNc.js +1 -0
  51. package/dist/ui/dist/assets/AgentDetailPage-VHy3M7mI.js +1 -0
  52. package/dist/ui/dist/assets/AgentNewPage-BnWImQMx.js +1 -0
  53. package/dist/ui/{assets/AgentsPage-DGNLDXjR.js → dist/assets/AgentsPage-WFy5abqx.js} +5 -5
  54. package/dist/ui/dist/assets/ApiClientPage-BV7zLIL7.js +3 -0
  55. package/dist/ui/dist/assets/{CanvasPage-CnMO1FN8.js → CanvasPage-B9zuIrTm.js} +7 -7
  56. package/dist/ui/dist/assets/ChannelsPage-DiN3NvIM.js +8 -0
  57. package/dist/ui/{assets/DashboardPage-VyXXp3U1.js → dist/assets/DashboardPage-CHjARjVK.js} +2 -2
  58. package/dist/ui/dist/assets/{LoginPage-DPj2s2Qq.js → LoginPage-Dwd_XxoU.js} +1 -1
  59. package/dist/ui/dist/assets/LogsPage-DW8Nnqe6.js +1 -0
  60. package/dist/ui/dist/assets/MeetingPage-D3bkiKYt.js +1 -0
  61. package/dist/ui/dist/assets/{NotFound-BMeQSGcG.js → NotFound-BIUDlIXU.js} +1 -1
  62. package/dist/ui/dist/assets/ProvidersPage-UqsDAxPQ.js +1 -0
  63. package/dist/ui/{assets/RecoverPage-B-hDZUM2.js → dist/assets/RecoverPage-8hTjr_JU.js} +1 -1
  64. package/dist/ui/dist/assets/SettingsPage-DNa0jOkA.js +9 -0
  65. package/dist/ui/dist/assets/SetupPage-Bdm2irQG.js +1 -0
  66. package/dist/ui/dist/assets/WebChatPage-DElJg6P2.js +16 -0
  67. package/dist/ui/dist/assets/accordion-CnLzKNHK.js +1 -0
  68. package/dist/ui/{assets/alert-Bq6awLlW.js → dist/assets/alert-DylmSCDJ.js} +1 -1
  69. package/dist/ui/{assets/alert-dialog-DQvltYmf.js → dist/assets/alert-dialog-DNNWN_SI.js} +1 -1
  70. package/dist/ui/dist/assets/{badge-DXUDdTed.js → badge-ChENFgkC.js} +1 -1
  71. package/dist/ui/dist/assets/bell-8BqRYmzf.js +1 -0
  72. package/dist/ui/dist/assets/chevron-down-DIosfU_U.js +1 -0
  73. package/dist/ui/dist/assets/chevron-up-CI-W21Fy.js +1 -0
  74. package/dist/ui/dist/assets/circle-x-DjLkFDO8.js +1 -0
  75. package/dist/ui/dist/assets/copy-Bu5d7C-0.js +1 -0
  76. package/dist/ui/{assets/dialog-bI9jImCS.js → dist/assets/dialog-BJ-npIv8.js} +1 -1
  77. package/dist/ui/{assets/dropdown-menu-BK-CO3Od.js → dist/assets/dropdown-menu-DDiaHg5y.js} +1 -1
  78. package/dist/ui/dist/assets/{es-Cg8zdT52.js → es-ecSKCyB6.js} +1 -1
  79. package/dist/ui/dist/assets/index-CawKP29y.js +116 -0
  80. package/dist/ui/dist/assets/index-DIcsEkyd.css +2 -0
  81. package/dist/ui/{assets/label-CrH0Jj3v.js → dist/assets/label-Bi6udtSd.js} +1 -1
  82. package/dist/ui/dist/assets/progress-D5c-Eilm.js +1 -0
  83. package/dist/ui/dist/assets/scroll-area-CihOx0cb.js +1 -0
  84. package/dist/ui/dist/assets/search-DzDptO9s.js +1 -0
  85. package/dist/ui/dist/assets/select-BQCOjM2j.js +1 -0
  86. package/dist/ui/dist/assets/send-BPk9XbIq.js +1 -0
  87. package/dist/ui/dist/assets/shield-CxhcUT39.js +1 -0
  88. package/dist/ui/dist/assets/{slider-CsiUDxc3.js → slider-bcUiUfx0.js} +1 -1
  89. package/dist/ui/dist/assets/switch-BR30E4ej.js +1 -0
  90. package/dist/ui/dist/assets/table-B3aGEaVp.js +1 -0
  91. package/dist/ui/dist/assets/tabs-LQidMKRS.js +1 -0
  92. package/dist/ui/dist/assets/textarea-B6Z1Zc6W.js +1 -0
  93. package/dist/ui/dist/assets/useProviders-Dlizq_8q.js +1 -0
  94. package/dist/ui/{assets/vendor-radix-cw1bQaVC.js → dist/assets/vendor-radix-D6rA7xKY.js} +4 -4
  95. package/dist/ui/dist/assets/{vendor-react-D4s9E-zj.js → vendor-react-BU5iQU4f.js} +1 -1
  96. package/dist/ui/dist/index.html +6 -6
  97. package/dist/ui/index.html +6 -6
  98. package/package.json +1 -1
  99. package/packages/cli/src/adapters/binary.ts +8 -4
  100. package/packages/cli/src/adapters/bun-global.ts +5 -1
  101. package/packages/cli/src/adapters/config.ts +4 -3
  102. package/packages/cli/src/adapters/docker.ts +2 -1
  103. package/packages/cli/src/commands/gateway.ts +123 -9
  104. package/packages/cli/src/commands/logs.ts +2 -1
  105. package/packages/cli/src/commands/onboard.ts +27 -1
  106. package/packages/cli/src/commands/sessions.ts +2 -1
  107. package/packages/cli/src/commands/skills.ts +2 -1
  108. package/packages/core/src/agent/agent-loop.ts +104 -2
  109. package/packages/core/src/agent/context-compiler.ts +6 -0
  110. package/packages/core/src/agent/llm-client.ts +6 -0
  111. package/packages/core/src/agent/llm-providers/anthropic.ts +23 -8
  112. package/packages/core/src/agent/llm-providers/hiveagents.ts +248 -0
  113. package/packages/core/src/agent/llm-providers/interface.ts +7 -1
  114. package/packages/core/src/agent/llm-providers/minimax.ts +13 -0
  115. package/packages/core/src/agent/llm-providers/openai-compat-base.ts +49 -25
  116. package/packages/core/src/agent/llm-providers/opencode-go.ts +9 -0
  117. package/packages/core/src/agent/providers/index.ts +3 -2
  118. package/packages/core/src/agent/stuck-loop.ts +90 -14
  119. package/packages/core/src/channels/base.ts +7 -1
  120. package/packages/core/src/channels/whatsapp.ts +13 -1
  121. package/packages/core/src/config/loader.ts +8 -8
  122. package/packages/core/src/gateway/helpers/path.ts +2 -1
  123. package/packages/core/src/gateway/initializer.ts +4 -4
  124. package/packages/core/src/gateway/llm-local/downloader.ts +130 -11
  125. package/packages/core/src/gateway/llm-local/index.ts +2 -0
  126. package/packages/core/src/gateway/llm-local/models.ts +4 -3
  127. package/packages/core/src/gateway/router.ts +7 -5
  128. package/packages/core/src/gateway/routes/http-client.ts +16 -0
  129. package/packages/core/src/gateway/routes/llm-local.ts +51 -5
  130. package/packages/core/src/gateway/routes/providers.ts +99 -2
  131. package/packages/core/src/gateway/server.ts +131 -57
  132. package/packages/core/src/gateway/slash-commands.ts +7 -1
  133. package/packages/core/src/gateway/tts/src/install.ts +17 -9
  134. package/packages/core/src/storage/crypto.ts +152 -20
  135. package/packages/core/src/storage/migrate.ts +51 -18
  136. package/packages/core/src/storage/onboarding.ts +28 -0
  137. package/packages/core/src/storage/seed.ts +52 -2
  138. package/packages/core/src/tool-runtime/index.ts +22 -1
  139. package/packages/core/src/tools/api/api-request.ts +174 -0
  140. package/packages/core/src/tools/api/index.ts +16 -0
  141. package/packages/core/src/tools/index.ts +12 -0
  142. package/packages/core/src/tools/web/browser-click.ts +2 -2
  143. package/packages/core/src/tools/web/browser-extract.ts +22 -6
  144. package/packages/core/src/tools/web/browser-navigate.ts +34 -18
  145. package/packages/core/src/tools/web/browser-screenshot.ts +40 -8
  146. package/packages/core/src/tools/web/browser-script.ts +2 -2
  147. package/packages/core/src/tools/web/browser-service.ts +295 -341
  148. package/packages/core/src/tools/web/browser-type.ts +5 -10
  149. package/packages/core/src/tools/web/browser-wait.ts +2 -2
  150. package/packages/core/src/tools/web/index.ts +1 -1
  151. package/packages/core/src/utils/logger.ts +2 -1
  152. package/packages/mcp/src/manager.ts +2 -1
  153. package/packages/skills/src/bundled/api/api_client/SKILL.md +132 -0
  154. package/packages/skills/src/bundled-data.generated.ts +1191 -1134
  155. package/packages/skills/src/loader.ts +2 -1
  156. package/dist/ui/assets/AgentCreateForm-0oFbN3gj.js +0 -1
  157. package/dist/ui/assets/AgentDetailPage-BJ4L2fNJ.js +0 -1
  158. package/dist/ui/assets/AgentNewPage-B3n0LUck.js +0 -1
  159. package/dist/ui/assets/ChannelsPage-fbF8K4MR.js +0 -8
  160. package/dist/ui/assets/LogsPage-B2lY9maY.js +0 -1
  161. package/dist/ui/assets/MeetingPage-2ky_hKiG.js +0 -1
  162. package/dist/ui/assets/ProvidersPage-CEyUM2tD.js +0 -1
  163. package/dist/ui/assets/SettingsPage-eO0i3g8p.js +0 -9
  164. package/dist/ui/assets/SetupPage-ByYqTELb.js +0 -1
  165. package/dist/ui/assets/WebChatPage-BuGT2AL0.js +0 -16
  166. package/dist/ui/assets/accordion-C5d5Rm5z.js +0 -1
  167. package/dist/ui/assets/chevron-up-BYhk0K2J.js +0 -1
  168. package/dist/ui/assets/globe-DeCQTCDJ.js +0 -1
  169. package/dist/ui/assets/index-B2fCYtTS.css +0 -2
  170. package/dist/ui/assets/index-CQ7fn00w.js +0 -116
  171. package/dist/ui/assets/progress-BherYzY6.js +0 -1
  172. package/dist/ui/assets/scroll-area-DkeyX32e.js +0 -1
  173. package/dist/ui/assets/send-B0H5SEIE.js +0 -1
  174. package/dist/ui/assets/switch-BDwN8RYV.js +0 -1
  175. package/dist/ui/assets/table-CSc8ubon.js +0 -1
  176. package/dist/ui/assets/textarea-CXgXWKrT.js +0 -1
  177. package/dist/ui/assets/useProviders-CnlC_qCS.js +0 -1
  178. package/dist/ui/dist/assets/AgentCreateForm-0oFbN3gj.js +0 -1
  179. package/dist/ui/dist/assets/AgentDetailPage-BJ4L2fNJ.js +0 -1
  180. package/dist/ui/dist/assets/AgentNewPage-B3n0LUck.js +0 -1
  181. package/dist/ui/dist/assets/ChannelsPage-fbF8K4MR.js +0 -8
  182. package/dist/ui/dist/assets/LogsPage-B2lY9maY.js +0 -1
  183. package/dist/ui/dist/assets/MeetingPage-2ky_hKiG.js +0 -1
  184. package/dist/ui/dist/assets/ProvidersPage-CEyUM2tD.js +0 -1
  185. package/dist/ui/dist/assets/SettingsPage-eO0i3g8p.js +0 -9
  186. package/dist/ui/dist/assets/SetupPage-ByYqTELb.js +0 -1
  187. package/dist/ui/dist/assets/WebChatPage-BuGT2AL0.js +0 -16
  188. package/dist/ui/dist/assets/accordion-C5d5Rm5z.js +0 -1
  189. package/dist/ui/dist/assets/chevron-up-BYhk0K2J.js +0 -1
  190. package/dist/ui/dist/assets/globe-DeCQTCDJ.js +0 -1
  191. package/dist/ui/dist/assets/index-B2fCYtTS.css +0 -2
  192. package/dist/ui/dist/assets/index-CQ7fn00w.js +0 -116
  193. package/dist/ui/dist/assets/progress-BherYzY6.js +0 -1
  194. package/dist/ui/dist/assets/scroll-area-DkeyX32e.js +0 -1
  195. package/dist/ui/dist/assets/send-B0H5SEIE.js +0 -1
  196. package/dist/ui/dist/assets/switch-BDwN8RYV.js +0 -1
  197. package/dist/ui/dist/assets/table-CSc8ubon.js +0 -1
  198. package/dist/ui/dist/assets/textarea-CXgXWKrT.js +0 -1
  199. package/dist/ui/dist/assets/useProviders-CnlC_qCS.js +0 -1
  200. /package/dist/ui/assets/{card-CNf6BS2e.js → card-DFKnZ6ky.js} +0 -0
  201. /package/dist/ui/assets/{circle-alert-CyHDwUj8.js → circle-alert-KuAm2FWh.js} +0 -0
  202. /package/dist/ui/assets/{circle-check-Bb54Ebmu.js → circle-check-6Ard1-2z.js} +0 -0
  203. /package/dist/ui/assets/{cpu-Cdgc_B1K.js → cpu-KDy6-FAI.js} +0 -0
  204. /package/dist/ui/assets/{download-C3ifGMjJ.js → download-Cjbk4Rek.js} +0 -0
  205. /package/dist/ui/assets/{external-link-BvxYeTP1.js → external-link-6sTlRDUR.js} +0 -0
  206. /package/dist/ui/assets/{eye-DqNTU_GD.js → eye-Df8o0tkC.js} +0 -0
  207. /package/dist/ui/assets/{file-text-BT_9S9SM.js → file-text-lnxnjBp0.js} +0 -0
  208. /package/dist/ui/assets/{folder-open-BhH8y9ac.js → folder-open-DJBLDFjv.js} +0 -0
  209. /package/dist/ui/assets/{format-GVHeOyWI.js → format-BwdV8bB5.js} +0 -0
  210. /package/dist/ui/assets/{gateway-url-COCbW0IR.js → gateway-url-DwzPmoc8.js} +0 -0
  211. /package/dist/ui/assets/{gauge-D_TMa4i9.js → gauge-B8Tj43rC.js} +0 -0
  212. /package/dist/ui/assets/{hexagon-DsGOUl-H.js → hexagon-6L79pgVK.js} +0 -0
  213. /package/dist/ui/assets/{history-BSG-Ypqf.js → history-CAF_R34_.js} +0 -0
  214. /package/dist/ui/assets/{info-NwLoa2Mj.js → info-WjromB4Y.js} +0 -0
  215. /package/dist/ui/assets/{key-3EP0dhkT.js → key-DyKOoQh5.js} +0 -0
  216. /package/dist/ui/assets/{loader-circle-CZNax6kS.js → loader-circle-BmBOgYze.js} +0 -0
  217. /package/dist/ui/assets/{lock-Ei1_J-Nq.js → lock-BS6OLXPv.js} +0 -0
  218. /package/dist/ui/assets/{pause-BUqah9Bi.js → pause-VqeUmp2Z.js} +0 -0
  219. /package/dist/ui/assets/{play-NcZ4swwL.js → play-zJpWuhrr.js} +0 -0
  220. /package/dist/ui/assets/{plus-CX1xyhp5.js → plus-BZQX26Dr.js} +0 -0
  221. /package/dist/ui/assets/{refresh-cw-DaYdjQFk.js → refresh-cw-CCzDCAuz.js} +0 -0
  222. /package/dist/ui/assets/{save-CUdYyHNy.js → save-hUmZhceG.js} +0 -0
  223. /package/dist/ui/assets/{settings-Ds4SqD8s.js → settings-BGfrZ_zM.js} +0 -0
  224. /package/dist/ui/assets/{sparkles-yUEb-7oH.js → sparkles-BhwlS1pc.js} +0 -0
  225. /package/dist/ui/assets/{square-BD81nFtN.js → square-DMNWw4Hi.js} +0 -0
  226. /package/dist/ui/assets/{terminal-DN38Q456.js → terminal--7G943As.js} +0 -0
  227. /package/dist/ui/assets/{trash-2-CNjMkoq6.js → trash-2-xD2o4SgX.js} +0 -0
  228. /package/dist/ui/assets/{triangle-alert-C9Y8Ub4X.js → triangle-alert-pVIJGjga.js} +0 -0
  229. /package/dist/ui/assets/{vendor-router-C9pIYwbJ.js → vendor-router-gqiZ7xhx.js} +0 -0
  230. /package/dist/ui/assets/{volume-2-CeSXNDv4.js → volume-2-BekVQl6P.js} +0 -0
  231. /package/dist/ui/assets/{zap-hlXjpSeA.js → zap-B4RaNNO5.js} +0 -0
  232. /package/dist/ui/dist/assets/{card-CNf6BS2e.js → card-DFKnZ6ky.js} +0 -0
  233. /package/dist/ui/dist/assets/{circle-alert-CyHDwUj8.js → circle-alert-KuAm2FWh.js} +0 -0
  234. /package/dist/ui/dist/assets/{circle-check-Bb54Ebmu.js → circle-check-6Ard1-2z.js} +0 -0
  235. /package/dist/ui/dist/assets/{cpu-Cdgc_B1K.js → cpu-KDy6-FAI.js} +0 -0
  236. /package/dist/ui/dist/assets/{download-C3ifGMjJ.js → download-Cjbk4Rek.js} +0 -0
  237. /package/dist/ui/dist/assets/{external-link-BvxYeTP1.js → external-link-6sTlRDUR.js} +0 -0
  238. /package/dist/ui/dist/assets/{eye-DqNTU_GD.js → eye-Df8o0tkC.js} +0 -0
  239. /package/dist/ui/dist/assets/{file-text-BT_9S9SM.js → file-text-lnxnjBp0.js} +0 -0
  240. /package/dist/ui/dist/assets/{folder-open-BhH8y9ac.js → folder-open-DJBLDFjv.js} +0 -0
  241. /package/dist/ui/dist/assets/{format-GVHeOyWI.js → format-BwdV8bB5.js} +0 -0
  242. /package/dist/ui/dist/assets/{gateway-url-COCbW0IR.js → gateway-url-DwzPmoc8.js} +0 -0
  243. /package/dist/ui/dist/assets/{gauge-D_TMa4i9.js → gauge-B8Tj43rC.js} +0 -0
  244. /package/dist/ui/dist/assets/{hexagon-DsGOUl-H.js → hexagon-6L79pgVK.js} +0 -0
  245. /package/dist/ui/dist/assets/{history-BSG-Ypqf.js → history-CAF_R34_.js} +0 -0
  246. /package/dist/ui/dist/assets/{info-NwLoa2Mj.js → info-WjromB4Y.js} +0 -0
  247. /package/dist/ui/dist/assets/{key-3EP0dhkT.js → key-DyKOoQh5.js} +0 -0
  248. /package/dist/ui/dist/assets/{loader-circle-CZNax6kS.js → loader-circle-BmBOgYze.js} +0 -0
  249. /package/dist/ui/dist/assets/{lock-Ei1_J-Nq.js → lock-BS6OLXPv.js} +0 -0
  250. /package/dist/ui/dist/assets/{pause-BUqah9Bi.js → pause-VqeUmp2Z.js} +0 -0
  251. /package/dist/ui/dist/assets/{play-NcZ4swwL.js → play-zJpWuhrr.js} +0 -0
  252. /package/dist/ui/dist/assets/{plus-CX1xyhp5.js → plus-BZQX26Dr.js} +0 -0
  253. /package/dist/ui/dist/assets/{refresh-cw-DaYdjQFk.js → refresh-cw-CCzDCAuz.js} +0 -0
  254. /package/dist/ui/dist/assets/{save-CUdYyHNy.js → save-hUmZhceG.js} +0 -0
  255. /package/dist/ui/dist/assets/{settings-Ds4SqD8s.js → settings-BGfrZ_zM.js} +0 -0
  256. /package/dist/ui/dist/assets/{sparkles-yUEb-7oH.js → sparkles-BhwlS1pc.js} +0 -0
  257. /package/dist/ui/dist/assets/{square-BD81nFtN.js → square-DMNWw4Hi.js} +0 -0
  258. /package/dist/ui/dist/assets/{terminal-DN38Q456.js → terminal--7G943As.js} +0 -0
  259. /package/dist/ui/dist/assets/{trash-2-CNjMkoq6.js → trash-2-xD2o4SgX.js} +0 -0
  260. /package/dist/ui/dist/assets/{triangle-alert-C9Y8Ub4X.js → triangle-alert-pVIJGjga.js} +0 -0
  261. /package/dist/ui/dist/assets/{vendor-router-C9pIYwbJ.js → vendor-router-gqiZ7xhx.js} +0 -0
  262. /package/dist/ui/dist/assets/{volume-2-CeSXNDv4.js → volume-2-BekVQl6P.js} +0 -0
  263. /package/dist/ui/dist/assets/{zap-hlXjpSeA.js → zap-B4RaNNO5.js} +0 -0
@@ -0,0 +1,174 @@
1
+ /**
2
+ * api_request - Make HTTP requests to REST APIs (curl-like)
3
+ *
4
+ * Supports: GET, POST, PUT, DELETE, PATCH, HEAD, OPTIONS
5
+ * Features: custom headers, JSON/form body, query params, timeout
6
+ *
7
+ * @category api
8
+ * @seedId api_request
9
+ * @spanish llamar api, petición http, curl, post a api, put api, delete api
10
+ */
11
+
12
+ import type { Tool } from "../types.ts";
13
+ import { logger } from "../../utils/logger.ts";
14
+
15
+ const log = logger.child("api-request");
16
+
17
+ const ALLOWED_METHODS = ["GET", "POST", "PUT", "DELETE", "PATCH", "HEAD", "OPTIONS"];
18
+
19
+ export const apiRequestTool: Tool = {
20
+ name: "api_request",
21
+ description:
22
+ "Make an HTTP request to a REST API endpoint. Supports GET, POST, PUT, DELETE, PATCH, HEAD, OPTIONS with custom headers, body, and query parameters. " +
23
+ "Spanish: llamar api, petición http, curl, post a api, put api, delete api, consumir servicio rest",
24
+ parameters: {
25
+ type: "object",
26
+ properties: {
27
+ method: {
28
+ type: "string",
29
+ description: "HTTP method: GET, POST, PUT, DELETE, PATCH, HEAD, OPTIONS",
30
+ enum: ALLOWED_METHODS,
31
+ },
32
+ url: {
33
+ type: "string",
34
+ description: "Full URL of the API endpoint (including query string, or use query_params)",
35
+ },
36
+ headers: {
37
+ type: "object",
38
+ description: "Optional HTTP headers as key-value pairs. Example: {\"Content-Type\": \"application/json\", \"Authorization\": \"Bearer token\"}",
39
+ additionalProperties: { type: "string" },
40
+ },
41
+ body: {
42
+ type: "string",
43
+ description: "Optional request body as a string. For JSON APIs, pass a JSON string. For form data, pass URL-encoded string.",
44
+ },
45
+ query_params: {
46
+ type: "object",
47
+ description: "Optional query parameters as key-value pairs. Will be URL-encoded and appended to the URL.",
48
+ additionalProperties: { type: "string" },
49
+ },
50
+ timeout_ms: {
51
+ type: "number",
52
+ description: "Request timeout in milliseconds. Default: 30000 (30s). Max: 120000 (2 min).",
53
+ minimum: 1000,
54
+ maximum: 120000,
55
+ },
56
+ },
57
+ required: ["method", "url"],
58
+ },
59
+ execute: async (params: Record<string, unknown>) => {
60
+ const method = (params.method as string)?.toUpperCase().trim() || "GET";
61
+ let url = params.url as string;
62
+ const headers = (params.headers as Record<string, string>) || {};
63
+ const body = params.body as string | undefined;
64
+ const queryParams = (params.query_params as Record<string, string>) || {};
65
+ const timeoutMs = (params.timeout_ms as number) || 30000;
66
+
67
+ if (!ALLOWED_METHODS.includes(method)) {
68
+ return {
69
+ ok: false,
70
+ error: `Invalid HTTP method: ${method}. Allowed: ${ALLOWED_METHODS.join(", ")}`,
71
+ };
72
+ }
73
+
74
+ if (!url || typeof url !== "string") {
75
+ return {
76
+ ok: false,
77
+ error: "Missing required parameter: url",
78
+ };
79
+ }
80
+
81
+ // Append query params to URL
82
+ if (Object.keys(queryParams).length > 0) {
83
+ const urlObj = new URL(url);
84
+ for (const [key, value] of Object.entries(queryParams)) {
85
+ urlObj.searchParams.append(key, value);
86
+ }
87
+ url = urlObj.toString();
88
+ }
89
+
90
+ log.info(`[api_request] ${method} ${url}`);
91
+
92
+ const fetchOptions: RequestInit = {
93
+ method,
94
+ headers: {
95
+ "User-Agent": "HiveAgent/1.0",
96
+ ...headers,
97
+ },
98
+ // @ts-ignore — Bun supports timeout
99
+ timeout: timeoutMs,
100
+ };
101
+
102
+ if (body !== undefined && body !== null && body !== "") {
103
+ // Auto-set Content-Type to application/json if body looks like JSON
104
+ if (
105
+ !headers["Content-Type"] &&
106
+ !headers["content-type"] &&
107
+ typeof body === "string" &&
108
+ (body.trim().startsWith("{") || body.trim().startsWith("["))
109
+ ) {
110
+ (fetchOptions.headers as Record<string, string>)["Content-Type"] = "application/json";
111
+ }
112
+ fetchOptions.body = body;
113
+ }
114
+
115
+ try {
116
+ const response = await fetch(url, fetchOptions);
117
+
118
+ // For HEAD requests, don't read body
119
+ if (method === "HEAD") {
120
+ const responseHeaders: Record<string, string> = {};
121
+ response.headers.forEach((value, key) => {
122
+ responseHeaders[key] = value;
123
+ });
124
+ return {
125
+ ok: response.ok,
126
+ status: response.status,
127
+ statusText: response.statusText,
128
+ headers: responseHeaders,
129
+ url: response.url,
130
+ };
131
+ }
132
+
133
+ const contentType = response.headers.get("content-type") || "";
134
+ let responseBody: string | object;
135
+ const rawText = await response.text();
136
+
137
+ if (contentType.includes("application/json")) {
138
+ try {
139
+ responseBody = JSON.parse(rawText);
140
+ } catch {
141
+ responseBody = rawText;
142
+ }
143
+ } else {
144
+ responseBody = rawText;
145
+ }
146
+
147
+ const responseHeaders: Record<string, string> = {};
148
+ response.headers.forEach((value, key) => {
149
+ responseHeaders[key] = value;
150
+ });
151
+
152
+ log.info(`[api_request] ${method} ${url} → ${response.status} ${response.statusText}`);
153
+
154
+ return {
155
+ ok: response.ok,
156
+ status: response.status,
157
+ statusText: response.statusText,
158
+ headers: responseHeaders,
159
+ body: responseBody,
160
+ contentType,
161
+ url: response.url,
162
+ };
163
+ } catch (error) {
164
+ const msg = (error as Error).message;
165
+ log.error(`[api_request] ${method} ${url} failed: ${msg}`);
166
+ return {
167
+ ok: false,
168
+ error: `HTTP request failed: ${msg}`,
169
+ url,
170
+ method,
171
+ };
172
+ }
173
+ },
174
+ };
@@ -0,0 +1,16 @@
1
+ /**
2
+ * API Tools - HTTP client for REST APIs (curl-like)
3
+ *
4
+ * Makes requests to external APIs with full control over method, headers, body.
5
+ */
6
+
7
+ import type { Tool } from "../types.ts";
8
+ import { apiRequestTool } from "./api-request.ts";
9
+
10
+ export function createTools(): Tool[] {
11
+ return [
12
+ apiRequestTool,
13
+ ];
14
+ }
15
+
16
+ export { apiRequestTool } from "./api-request.ts";
@@ -38,6 +38,9 @@ import * as office from "./office/index.ts";
38
38
  // Meeting (4)
39
39
  import * as meeting from "./meeting/index.ts";
40
40
 
41
+ // API (1) - HTTP client for REST APIs
42
+ import * as api from "./api/index.ts";
43
+
41
44
  /**
42
45
  * Creates all tools with proper configuration
43
46
  */
@@ -72,6 +75,9 @@ export function createAllTools(config: Config): Tool[] {
72
75
 
73
76
  // MEETING (4)
74
77
  ...meeting.createTools(),
78
+
79
+ // API (1)
80
+ ...api.createTools(),
75
81
  ];
76
82
  }
77
83
 
@@ -100,6 +106,8 @@ export function createToolsByCategory(category: string, config: Config): Tool[]
100
106
  return office.createTools();
101
107
  case "meeting":
102
108
  return meeting.createTools();
109
+ case "api":
110
+ return api.createTools();
103
111
  default:
104
112
  return [];
105
113
  }
@@ -195,3 +203,7 @@ export {
195
203
  officeLeerPptxTool,
196
204
  officeEscribirPptxTool,
197
205
  } from "./office/index.ts";
206
+
207
+ export {
208
+ apiRequestTool,
209
+ } from "./api/index.ts";
@@ -43,7 +43,7 @@ export const browserClickTool: Tool = {
43
43
  log.warn("Browser not available");
44
44
  return {
45
45
  ok: false,
46
- error: "Browser automation not available. Install Chrome/Chromium.",
46
+ error: "Browser automation not available. Install agent-browser.",
47
47
  };
48
48
  }
49
49
 
@@ -51,7 +51,7 @@ export const browserClickTool: Tool = {
51
51
 
52
52
  try {
53
53
  const view = await browserService.getView();
54
- if (!view) return { ok: false, error: "Browser automation not available. Install Chrome/Chromium." };
54
+ if (!view) return { ok: false, error: "Browser automation not available. Install agent-browser." };
55
55
 
56
56
  if (url) {
57
57
  await view.navigate(url);
@@ -14,7 +14,7 @@ const log = logger.child("browser-extract");
14
14
 
15
15
  export const browserExtractTool: Tool = {
16
16
  name: "browser_extract",
17
- description: "Extract text, links, or structured data from page using CSS selectors or XPath. Spanish: extraer datos, obtener información, scraping, selectores",
17
+ description: "Extract text, links, or structured data from page using CSS selectors or XPath. For general page overview without specific selectors, returns compact accessibility snapshot. Spanish: extraer datos, obtener información, scraping, selectores",
18
18
  parameters: {
19
19
  type: "object",
20
20
  properties: {
@@ -24,7 +24,7 @@ export const browserExtractTool: Tool = {
24
24
  },
25
25
  selector: {
26
26
  type: "string",
27
- description: "CSS selector or XPath (prefix with 'xpath:') to match elements",
27
+ description: "CSS selector or XPath (prefix with 'xpath:') to match elements. Use 'body' or omit for compact accessibility snapshot.",
28
28
  },
29
29
  attribute: {
30
30
  type: "string",
@@ -43,7 +43,7 @@ export const browserExtractTool: Tool = {
43
43
  },
44
44
  execute: async (params: Record<string, unknown>) => {
45
45
  const url = params.url as string | undefined;
46
- const selector = params.selector as string;
46
+ const selector = (params.selector as string) || "body";
47
47
  const attribute = (params.attribute as string) ?? "text";
48
48
  const all = (params.all as boolean) ?? true;
49
49
  const timeout = (params.timeout as number) ?? 30000;
@@ -53,7 +53,7 @@ export const browserExtractTool: Tool = {
53
53
  log.warn("Browser not available");
54
54
  return {
55
55
  ok: false,
56
- error: "Browser automation not available. Install Chrome/Chromium.",
56
+ error: "Browser automation not available. Install agent-browser.",
57
57
  };
58
58
  }
59
59
 
@@ -61,13 +61,30 @@ export const browserExtractTool: Tool = {
61
61
 
62
62
  try {
63
63
  const view = await browserService.getView();
64
- if (!view) return { ok: false, error: "Browser automation not available. Install Chrome/Chromium." };
64
+ if (!view) return { ok: false, error: "Browser automation not available. Install agent-browser." };
65
65
 
66
66
  if (url) {
67
67
  await view.navigate(url);
68
68
  await Bun.sleep(500);
69
69
  }
70
70
 
71
+ const currentUrl = view.url;
72
+
73
+ // If selector is broad (body, html, *, :root) and attribute is text, return compact snapshot
74
+ const isBroadSelector = ["body", "html", "*", ":root", "document"].includes(selector.toLowerCase());
75
+ if (isBroadSelector && attribute === "text") {
76
+ const snapshot = await view.snapshot({ compact: true, depth: 3 });
77
+ log.info(`Snapshot extracted from ${currentUrl} (${snapshot.length} chars)`);
78
+ return {
79
+ ok: true,
80
+ url: currentUrl,
81
+ selector,
82
+ attribute: "snapshot",
83
+ count: 1,
84
+ data: [snapshot],
85
+ };
86
+ }
87
+
71
88
  const isXPath = selector.startsWith("xpath:");
72
89
  const actualSelector = isXPath ? selector.slice(6) : selector;
73
90
 
@@ -117,7 +134,6 @@ export const browserExtractTool: Tool = {
117
134
  })()
118
135
  `) as string[];
119
136
 
120
- const currentUrl = view.url;
121
137
  log.info(`Extracted ${extracted.length} element(s) from ${currentUrl}`);
122
138
 
123
139
  return {
@@ -14,7 +14,7 @@ const log = logger.child("browser-navigate");
14
14
 
15
15
  export const browserNavigateTool: Tool = {
16
16
  name: "browser_navigate",
17
- description: "Navigate browser to URL, get rendered page content (supports JS). Spanish: navegar a url, abrir página, sitio web",
17
+ description: "Navigate browser to URL, get rendered page content (supports JS). Returns compact accessibility tree with element refs (@e1, @e2) for interaction. Spanish: navegar a url, abrir página, sitio web",
18
18
  parameters: {
19
19
  type: "object",
20
20
  properties: {
@@ -30,6 +30,11 @@ export const browserNavigateTool: Tool = {
30
30
  type: "number",
31
31
  description: "Timeout in milliseconds (default: 30000)",
32
32
  },
33
+ mode: {
34
+ type: "string",
35
+ enum: ["snapshot", "text"],
36
+ description: "Content mode: 'snapshot' (compact accessibility tree with refs, default) or 'text' (full innerText). Use 'text' only if you need all readable text.",
37
+ },
33
38
  },
34
39
  required: ["url"],
35
40
  },
@@ -37,21 +42,22 @@ export const browserNavigateTool: Tool = {
37
42
  const url = params.url as string;
38
43
  const waitFor = params.waitFor as string | undefined;
39
44
  const timeout = (params.timeout as number) ?? 30000;
45
+ const mode = (params.mode as string) ?? "snapshot";
40
46
 
41
47
  const browserService = getBrowserService();
42
48
  if (!browserService?.isAvailable()) {
43
49
  log.warn("Browser not available");
44
50
  return {
45
51
  ok: false,
46
- error: "Browser automation not available. Install Chrome/Chromium.",
52
+ error: "Browser automation not available. Install agent-browser.",
47
53
  };
48
54
  }
49
55
 
50
- log.info(`Navigating: ${url}${waitFor ? ` (waiting for: ${waitFor})` : ""}`);
56
+ log.info(`Navigating: ${url}${waitFor ? ` (waiting for: ${waitFor})` : ""} [mode=${mode}]`);
51
57
 
52
58
  try {
53
59
  const view = await browserService.getView();
54
- if (!view) return { ok: false, error: "Browser automation not available. Install Chrome/Chromium." };
60
+ if (!view) return { ok: false, error: "Browser automation not available. Install agent-browser." };
55
61
 
56
62
  await view.navigate(url);
57
63
 
@@ -67,28 +73,38 @@ export const browserNavigateTool: Tool = {
67
73
  }
68
74
 
69
75
  const finalUrl = view.url;
76
+ let content: string;
77
+ let contentType: string;
70
78
 
71
- // Extraer texto limpio del DOM
72
- const content = await view.evaluate(`
73
- (() => {
74
- try {
75
- document.querySelectorAll("script, style, noscript, meta, link, iframe").forEach(el => el.remove());
76
- let text = document.body?.innerText || document.documentElement?.innerText || "";
77
- text = text.replace(/\\s+/g, " ").trim();
78
- return text.slice(0, 50000);
79
- } catch (e) {
80
- return "Error extracting content: " + e.message;
81
- }
82
- })()
83
- `) as string;
79
+ if (mode === "text") {
80
+ // Full innerText (legacy mode, heavy)
81
+ content = await view.evaluate(`
82
+ (() => {
83
+ try {
84
+ document.querySelectorAll("script, style, noscript, meta, link, iframe").forEach(el => el.remove());
85
+ let text = document.body?.innerText || document.documentElement?.innerText || "";
86
+ text = text.replace(/\\s+/g, " ").trim();
87
+ return text.slice(0, 50000);
88
+ } catch (e) {
89
+ return "Error extracting content: " + e.message;
90
+ }
91
+ })()
92
+ `) as string;
93
+ contentType = "text";
94
+ } else {
95
+ // Default: compact accessibility snapshot with refs
96
+ content = await view.snapshot({ compact: true, depth: 3 });
97
+ contentType = "snapshot";
98
+ }
84
99
 
85
- log.info(`Navigation successful: ${finalUrl} (${content.length} chars)`);
100
+ log.info(`Navigation successful: ${finalUrl} (${content.length} chars, ${contentType})`);
86
101
 
87
102
  return {
88
103
  ok: true,
89
104
  url,
90
105
  finalUrl,
91
106
  content,
107
+ contentType,
92
108
  length: content.length,
93
109
  };
94
110
  } catch (error) {
@@ -12,9 +12,12 @@ import { getBrowserService, screenshotElement } from "./browser-service.ts";
12
12
 
13
13
  const log = logger.child("browser-screenshot");
14
14
 
15
+ // Default viewport for screenshots — keeps base64 small (~30-60KB vs ~300KB)
16
+ const DEFAULT_VIEWPORT = { width: 1280, height: 720 };
17
+
15
18
  export const browserScreenshotTool: Tool = {
16
19
  name: "browser_screenshot",
17
- description: "Take screenshot of current browser page. Spanish: captura de pantalla, screenshot, imagen de página",
20
+ description: "Take screenshot of current browser page. Returns JPEG by default for smaller size. Spanish: captura de pantalla, screenshot, imagen de página",
18
21
  parameters: {
19
22
  type: "object",
20
23
  properties: {
@@ -30,6 +33,23 @@ export const browserScreenshotTool: Tool = {
30
33
  type: "string",
31
34
  description: "CSS selector of specific element to screenshot (optional)",
32
35
  },
36
+ format: {
37
+ type: "string",
38
+ enum: ["jpeg", "png"],
39
+ description: "Image format: jpeg (default, smaller) or png (lossless, larger)",
40
+ },
41
+ quality: {
42
+ type: "number",
43
+ description: "JPEG quality 0-100 (default: 80). Ignored for PNG.",
44
+ },
45
+ width: {
46
+ type: "number",
47
+ description: "Viewport width in pixels (default: 1280). Smaller = smaller file.",
48
+ },
49
+ height: {
50
+ type: "number",
51
+ description: "Viewport height in pixels (default: 720). Smaller = smaller file.",
52
+ },
33
53
  },
34
54
  required: [],
35
55
  },
@@ -37,47 +57,59 @@ export const browserScreenshotTool: Tool = {
37
57
  const url = params.url as string | undefined;
38
58
  const fullPage = (params.fullPage as boolean) ?? false;
39
59
  const selector = params.selector as string | undefined;
60
+ const format = (params.format as string) ?? "jpeg";
61
+ const quality = (params.quality as number) ?? 80;
62
+ const width = (params.width as number) ?? DEFAULT_VIEWPORT.width;
63
+ const height = (params.height as number) ?? DEFAULT_VIEWPORT.height;
40
64
 
41
65
  const browserService = getBrowserService();
42
66
  if (!browserService?.isAvailable()) {
43
67
  log.warn("Browser not available");
44
68
  return {
45
69
  ok: false,
46
- error: "Browser automation not available. Install Chrome/Chromium.",
70
+ error: "Browser automation not available. Install agent-browser.",
47
71
  };
48
72
  }
49
73
 
50
- log.info(`Taking screenshot${url ? ` of: ${url}` : ""}${selector ? ` (element: ${selector})` : ""}`);
74
+ log.info(`Taking screenshot${url ? ` of: ${url}` : ""}${selector ? ` (element: ${selector})` : ""} [${format} ${width}x${height}]`);
51
75
 
52
76
  try {
53
77
  const view = await browserService.getView();
54
- if (!view) return { ok: false, error: "Browser automation not available. Install Chrome/Chromium." };
78
+ if (!view) return { ok: false, error: "Browser automation not available. Install agent-browser." };
55
79
 
56
80
  if (url) {
57
81
  await view.navigate(url);
58
82
  await Bun.sleep(500);
59
83
  }
60
84
 
85
+ // Resize viewport before screenshot to keep image small
86
+ await view.resize(width, height);
87
+ await Bun.sleep(200);
88
+
61
89
  let screenshot: string;
62
90
 
63
91
  if (selector) {
64
92
  screenshot = await screenshotElement(view, selector);
65
93
  } else {
66
- screenshot = await view.screenshot({ encoding: "base64", format: "png" });
94
+ screenshot = await view.screenshot({
95
+ encoding: "base64",
96
+ format: format as "jpeg" | "png" | "webp",
97
+ quality: format === "jpeg" ? quality : undefined,
98
+ });
67
99
  }
68
100
 
69
101
  const currentUrl = view.url;
70
- log.info(`Screenshot captured: ${currentUrl} (${screenshot.length} base64 chars)`);
102
+ log.info(`Screenshot captured: ${currentUrl} (${screenshot.length} base64 chars, ${format})`);
71
103
 
72
104
  return {
73
105
  ok: true,
74
106
  url: currentUrl,
75
107
  screenshot,
76
- format: "png",
108
+ format,
77
109
  encoding: "base64",
78
110
  fullPage,
79
111
  selector,
80
- viewport: { width: 1280, height: 800 },
112
+ viewport: { width, height },
81
113
  };
82
114
  } catch (error) {
83
115
  log.error(`Screenshot failed: ${(error as Error).message}`);
@@ -43,7 +43,7 @@ export const browserScriptTool: Tool = {
43
43
  log.warn("Browser not available");
44
44
  return {
45
45
  ok: false,
46
- error: "Browser automation not available. Install Chrome/Chromium.",
46
+ error: "Browser automation not available. Install agent-browser.",
47
47
  };
48
48
  }
49
49
 
@@ -51,7 +51,7 @@ export const browserScriptTool: Tool = {
51
51
 
52
52
  try {
53
53
  const view = await browserService.getView();
54
- if (!view) return { ok: false, error: "Browser automation not available. Install Chrome/Chromium." };
54
+ if (!view) return { ok: false, error: "Browser automation not available. Install agent-browser." };
55
55
 
56
56
  if (url) {
57
57
  await view.navigate(url);