@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
@@ -21,16 +21,16 @@
21
21
  <meta name="twitter:title" content="Hive">
22
22
  <meta property="og:description" content="Hive Agents">
23
23
  <meta name="twitter:description" content="Hive Agents">
24
- <script type="module" crossorigin src="/assets/index-CQ7fn00w.js"></script>
24
+ <script type="module" crossorigin src="/assets/index-CawKP29y.js"></script>
25
25
  <link rel="modulepreload" crossorigin href="/assets/rolldown-runtime-S-ySWqyJ.js">
26
26
  <link rel="modulepreload" crossorigin href="/assets/vendor-charts-Bu2lyBKP.js">
27
- <link rel="modulepreload" crossorigin href="/assets/vendor-router-C9pIYwbJ.js">
27
+ <link rel="modulepreload" crossorigin href="/assets/vendor-router-gqiZ7xhx.js">
28
28
  <link rel="modulepreload" crossorigin href="/assets/vendor-query-DsWPbQdG.js">
29
- <link rel="modulepreload" crossorigin href="/assets/vendor-radix-cw1bQaVC.js">
29
+ <link rel="modulepreload" crossorigin href="/assets/vendor-radix-D6rA7xKY.js">
30
30
  <link rel="modulepreload" crossorigin href="/assets/utils-3pnRFmFe.js">
31
- <link rel="modulepreload" crossorigin href="/assets/vendor-react-D4s9E-zj.js">
32
- <link rel="modulepreload" crossorigin href="/assets/gateway-url-COCbW0IR.js">
33
- <link rel="stylesheet" crossorigin href="/assets/index-B2fCYtTS.css">
31
+ <link rel="modulepreload" crossorigin href="/assets/vendor-react-BU5iQU4f.js">
32
+ <link rel="modulepreload" crossorigin href="/assets/gateway-url-DwzPmoc8.js">
33
+ <link rel="stylesheet" crossorigin href="/assets/index-DIcsEkyd.css">
34
34
  </head>
35
35
 
36
36
  <body>
@@ -21,16 +21,16 @@
21
21
  <meta name="twitter:title" content="Hive">
22
22
  <meta property="og:description" content="Hive Agents">
23
23
  <meta name="twitter:description" content="Hive Agents">
24
- <script type="module" crossorigin src="/assets/index-CQ7fn00w.js"></script>
24
+ <script type="module" crossorigin src="/assets/index-CawKP29y.js"></script>
25
25
  <link rel="modulepreload" crossorigin href="/assets/rolldown-runtime-S-ySWqyJ.js">
26
26
  <link rel="modulepreload" crossorigin href="/assets/vendor-charts-Bu2lyBKP.js">
27
- <link rel="modulepreload" crossorigin href="/assets/vendor-router-C9pIYwbJ.js">
27
+ <link rel="modulepreload" crossorigin href="/assets/vendor-router-gqiZ7xhx.js">
28
28
  <link rel="modulepreload" crossorigin href="/assets/vendor-query-DsWPbQdG.js">
29
- <link rel="modulepreload" crossorigin href="/assets/vendor-radix-cw1bQaVC.js">
29
+ <link rel="modulepreload" crossorigin href="/assets/vendor-radix-D6rA7xKY.js">
30
30
  <link rel="modulepreload" crossorigin href="/assets/utils-3pnRFmFe.js">
31
- <link rel="modulepreload" crossorigin href="/assets/vendor-react-D4s9E-zj.js">
32
- <link rel="modulepreload" crossorigin href="/assets/gateway-url-COCbW0IR.js">
33
- <link rel="stylesheet" crossorigin href="/assets/index-B2fCYtTS.css">
31
+ <link rel="modulepreload" crossorigin href="/assets/vendor-react-BU5iQU4f.js">
32
+ <link rel="modulepreload" crossorigin href="/assets/gateway-url-DwzPmoc8.js">
33
+ <link rel="stylesheet" crossorigin href="/assets/index-DIcsEkyd.css">
34
34
  </head>
35
35
 
36
36
  <body>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@johpaz/hive-agents",
3
- "version": "0.0.38",
3
+ "version": "0.0.40",
4
4
  "description": "Tu colmena de agentes IA. Local-first. Multi-canal. Open source. Construido desde Colombia para el mundo.",
5
5
  "private": false,
6
6
  "bin": {
@@ -8,6 +8,7 @@
8
8
 
9
9
  import { spawn, execSync } from "node:child_process";
10
10
  import * as path from "node:path";
11
+ import { homedir } from "node:os";
11
12
  import { existsSync, readFileSync, unlinkSync, chmodSync } from "node:fs";
12
13
  import type {
13
14
  InstallationAdapter,
@@ -93,8 +94,8 @@ export class BinaryAdapter implements InstallationAdapter {
93
94
  path.join(process.cwd(), "dist", "hive.exe"),
94
95
  "/usr/local/bin/hive",
95
96
  "/usr/bin/hive",
96
- path.join(process.env.HOME || "", ".local", "bin", "hive"),
97
- path.join(process.env.HOME || "", ".bun", "bin", "hive"),
97
+ path.join(homedir(), ".local", "bin", "hive"),
98
+ path.join(homedir(), ".bun", "bin", "hive"),
98
99
  ];
99
100
 
100
101
  for (const binaryPath of commonPaths) {
@@ -279,8 +280,11 @@ export class BinaryAdapter implements InstallationAdapter {
279
280
  } else {
280
281
  // Try to kill by process name
281
282
  try {
282
- const pattern = process.platform === "win32" ? "hive.exe" : "hive";
283
- execSync(`pkill -f "${pattern}"`, { stdio: "ignore" });
283
+ if (process.platform === "win32") {
284
+ execSync("taskkill /IM hive.exe /F", { stdio: "ignore" });
285
+ } else {
286
+ execSync('pkill -f "hive"', { stdio: "ignore" });
287
+ }
284
288
  console.log("✅ Hive Gateway detenido");
285
289
  } catch {
286
290
  console.log("⚠️ Hive Gateway no está corriendo");
@@ -202,7 +202,11 @@ export class BunGlobalAdapter implements InstallationAdapter {
202
202
  } else {
203
203
  // Try to kill by process name
204
204
  try {
205
- execSync("pkill -f 'bun.*hive.*start'", { stdio: "ignore" });
205
+ if (process.platform === "win32") {
206
+ execSync("taskkill /IM bun.exe /F", { stdio: "ignore" });
207
+ } else {
208
+ execSync("pkill -f 'bun.*hive.*start'", { stdio: "ignore" });
209
+ }
206
210
  console.log("✅ Hive Gateway detenido");
207
211
  } catch {
208
212
  console.log("⚠️ Hive Gateway no está corriendo");
@@ -7,6 +7,7 @@
7
7
 
8
8
  import { z } from "zod";
9
9
  import * as path from "node:path";
10
+ import { homedir } from "node:os";
10
11
  import { existsSync, readFileSync } from "node:fs";
11
12
  import type { GatewayConfig, InstallationConfig, InstallationPaths } from "./types";
12
13
  import { DEFAULT_GATEWAY_CONFIG, PORTS, gatewayConfigSchema, installationConfigSchema } from "./types";
@@ -26,11 +27,11 @@ export function getHiveDir(customDir?: string): string {
26
27
 
27
28
  // Development mode
28
29
  if (process.env.HIVE_DEV === "true") {
29
- return path.join(process.env.HOME || "", ".hive-dev");
30
+ return path.join(homedir(), ".hive-dev");
30
31
  }
31
32
 
32
33
  // Default production location
33
- return path.join(process.env.HOME || "", ".hive");
34
+ return path.join(homedir(), ".hive");
34
35
  }
35
36
 
36
37
  /**
@@ -230,7 +231,7 @@ export function expandPath(input: string): string {
230
231
 
231
232
  // Expand ~ to home directory
232
233
  if (input.startsWith("~/")) {
233
- return path.join(process.env.HOME || "", input.slice(2));
234
+ return path.join(homedir(), input.slice(2));
234
235
  }
235
236
 
236
237
  // Expand environment variables ${VAR} or $VAR
@@ -7,6 +7,7 @@
7
7
 
8
8
  import { spawn, execSync } from "node:child_process";
9
9
  import * as path from "node:path";
10
+ import { homedir } from "node:os";
10
11
  import { existsSync } from "node:fs";
11
12
  import type {
12
13
  InstallationAdapter,
@@ -55,7 +56,7 @@ export class DockerAdapter implements InstallationAdapter {
55
56
  const standardPaths = [
56
57
  "/opt/hive/docker-compose.yml",
57
58
  "/usr/local/share/hive/docker-compose.yml",
58
- path.join(process.env.HOME || "", ".hive", "docker-compose.yml"),
59
+ path.join(homedir(), ".hive", "docker-compose.yml"),
59
60
  ];
60
61
 
61
62
  for (const composePath of standardPaths) {
@@ -113,7 +113,11 @@ function cleanup() {
113
113
  for (const child of children) {
114
114
  if (child.pid) {
115
115
  try {
116
- process.kill(-child.pid, "SIGTERM");
116
+ if (process.platform !== "win32") {
117
+ process.kill(-child.pid, "SIGTERM");
118
+ } else {
119
+ child.kill("SIGTERM");
120
+ }
117
121
  } catch {
118
122
  child.kill("SIGTERM");
119
123
  }
@@ -212,10 +216,52 @@ async function isSetupMode(): Promise<boolean> {
212
216
  return !existsSync(dbPath);
213
217
  }
214
218
 
219
+ /**
220
+ * Kill any process listening on a given TCP port (cross-platform)
221
+ */
222
+ async function killPortProcess(port: number): Promise<void> {
223
+ try {
224
+ if (process.platform === "win32") {
225
+ const result = Bun.spawnSync(["netstat", "-ano"], { stderr: "pipe" });
226
+ for (const line of result.stdout.toString().split("\n")) {
227
+ if (line.includes(`:${port} `) && line.includes("LISTENING")) {
228
+ const pid = line.trim().split(/\s+/).pop();
229
+ if (pid && !isNaN(parseInt(pid, 10))) {
230
+ Bun.spawnSync(["taskkill", "/PID", pid, "/F"], { stderr: "pipe" });
231
+ }
232
+ }
233
+ }
234
+ } else {
235
+ const result = Bun.spawnSync(["fuser", "-k", `${port}/tcp`], { stderr: "pipe" });
236
+ if (result.exitCode !== 0) {
237
+ const lsof = Bun.spawnSync(["lsof", "-ti", `tcp:${port}`], { stderr: "pipe" });
238
+ const pids = lsof.stdout.toString().trim().split("\n").filter(Boolean);
239
+ for (const pid of pids) {
240
+ try { process.kill(parseInt(pid, 10), "SIGTERM"); } catch { }
241
+ }
242
+ }
243
+ }
244
+ await Bun.sleep(500);
245
+ } catch { }
246
+ }
247
+
215
248
  /**
216
249
  * Check if gateway is running using the adapter
217
250
  */
218
251
  async function isRunning(): Promise<boolean> {
252
+ // HTTP health check first — if the port responds, something is running
253
+ // regardless of PID file or adapter state
254
+ try {
255
+ const coreConfig = await loadConfig().catch(() => null);
256
+ const port = coreConfig?.gateway?.port ?? 18790;
257
+ const res = await fetch(`http://127.0.0.1:${port}/health`, {
258
+ signal: AbortSignal.timeout(600),
259
+ });
260
+ if (res.ok) return true;
261
+ } catch {
262
+ // Nothing listening on the port — continue to other checks
263
+ }
264
+
219
265
  try {
220
266
  // Try adapter first
221
267
  const adapter = await getAdapter();
@@ -319,7 +365,7 @@ export async function start(flags: string[]): Promise<void> {
319
365
  ║ ██║ ██║██║ ╚████╔╝ ███████╗ ║
320
366
  ║ ╚═╝ ╚═╝╚═╝ ╚═══╝ ╚══════╝ ║
321
367
  ║ ║
322
- ║ Personal Swarm AI Gateway — v0.0.38
368
+ ║ Personal Swarm AI Gateway — v0.0.40
323
369
  ╚════════════════════════════════════════════╝
324
370
 
325
371
  📦 Installation: ${adapter.name}
@@ -405,7 +451,40 @@ async function handleDevMode(
405
451
  }
406
452
  }
407
453
 
454
+ // Verify port is free before spawning children
455
+ {
456
+ const portBusy = await (async () => {
457
+ try {
458
+ const r = await fetch(`http://127.0.0.1:${gatewayConfig.port}/health`, { signal: AbortSignal.timeout(500) });
459
+ return r.ok;
460
+ } catch { return false; }
461
+ })();
462
+ if (portBusy) {
463
+ // Try to free it (works for local processes; silently fails for Docker/root processes)
464
+ await killPortProcess(gatewayConfig.port);
465
+ await Bun.sleep(800);
466
+ const stillBusy = await (async () => {
467
+ try {
468
+ const r = await fetch(`http://127.0.0.1:${gatewayConfig.port}/health`, { signal: AbortSignal.timeout(500) });
469
+ return r.ok;
470
+ } catch { return false; }
471
+ })();
472
+ if (stillBusy) {
473
+ const manualCmd = process.platform === "win32"
474
+ ? `netstat -ano | findstr :${gatewayConfig.port} → taskkill /PID <pid> /F`
475
+ : `sudo fuser -k ${gatewayConfig.port}/tcp`;
476
+ console.error(`\n❌ El puerto ${gatewayConfig.port} está ocupado por otro proceso (Docker u otro servicio).`);
477
+ console.error(` Detén el servicio antes de iniciar el modo dev:`);
478
+ console.error(` • Docker: docker stop $(docker ps -q --filter publish=${gatewayConfig.port})`);
479
+ console.error(` • Hive: hive stop`);
480
+ console.error(` • Manual: ${manualCmd}\n`);
481
+ return;
482
+ }
483
+ }
484
+ }
485
+
408
486
  // Spawn Gateway child process
487
+ let gwExitedEarly = false;
409
488
  const spawnGateway = (): ReturnType<typeof spawn> => {
410
489
  const gw = spawn(process.execPath, [process.argv[1] || "", "start", "--skip-check", "--dev-internal"], {
411
490
  detached: true,
@@ -437,6 +516,8 @@ async function handleDevMode(
437
516
  const newGw = spawnGateway();
438
517
  const idx = children.indexOf(gw);
439
518
  if (idx !== -1) children.splice(idx, 1, newGw);
519
+ } else if (code !== null) {
520
+ gwExitedEarly = true;
440
521
  }
441
522
  });
442
523
 
@@ -458,6 +539,19 @@ async function handleDevMode(
458
539
  waitForHttpPort(18790, "/health", 30000),
459
540
  ]);
460
541
 
542
+ // Give the child a moment to potentially fail before we declare success
543
+ await Bun.sleep(600);
544
+
545
+ if (gwExitedEarly) {
546
+ const portCheckCmd = process.platform === "win32"
547
+ ? `netstat -ano | findstr :${gatewayConfig.port}`
548
+ : `sudo fuser ${gatewayConfig.port}/tcp`;
549
+ console.error(`\n❌ El proceso Gateway terminó inesperadamente.`);
550
+ console.error(` El puerto ${gatewayConfig.port} puede estar ocupado por otro servicio.`);
551
+ console.error(` Revisa con: ${portCheckCmd}\n`);
552
+ return;
553
+ }
554
+
461
555
  if (!viteReady && hasVite) {
462
556
  console.error("⚠️ Vite no respondió a tiempo");
463
557
  }
@@ -466,15 +560,30 @@ async function handleDevMode(
466
560
  return;
467
561
  }
468
562
 
469
- // Additional wait: ensure Gateway is fully initialized and serving UI
470
- // In dev mode, Gateway needs a moment to set up HMR proxy
471
- await Bun.sleep(500);
472
-
473
563
  console.log("✅ Servicios listos\n");
474
564
 
475
- // Open browser - en desarrollo, Gateway sirve la UI igual que en producción
476
- const setupMode = await isSetupMode();
477
- const browserPort = gatewayConfig.port; // 18790, igual que producción
565
+ // Open browser - en desarrollo, Gateway sirve la UI igual que en producción.
566
+ // Poll /api/setup/status (same as production mode) so the decision is based on
567
+ // the gateway's own check (users count == 0), not just whether the DB file exists.
568
+ const browserPort = gatewayConfig.port;
569
+ let setupMode = await isSetupMode(); // fallback default
570
+ {
571
+ const deadline = Date.now() + 10_000;
572
+ while (Date.now() < deadline) {
573
+ try {
574
+ const res = await fetch(`http://127.0.0.1:${browserPort}/api/setup/status`, {
575
+ signal: AbortSignal.timeout(1000),
576
+ });
577
+ if (res.ok) {
578
+ const body = await res.json() as { setupMode?: boolean };
579
+ setupMode = body.setupMode === true;
580
+ break;
581
+ }
582
+ // 503 = gateway still initializing ("starting" phase) — retry
583
+ } catch { }
584
+ await Bun.sleep(300);
585
+ }
586
+ }
478
587
  const url = setupMode ? `http://localhost:${browserPort}/setup` : `http://localhost:${browserPort}`;
479
588
 
480
589
  console.log(`
@@ -707,6 +816,11 @@ export async function reload(): Promise<void> {
707
816
  return;
708
817
  }
709
818
 
819
+ if (process.platform === "win32") {
820
+ console.log("⚠️ Recarga en caliente no disponible en Windows. Reinicia el gateway para aplicar cambios.");
821
+ return;
822
+ }
823
+
710
824
  const pidFile = await getPidFile();
711
825
  const pid = parseInt(readFileSync(pidFile, "utf-8").trim(), 10);
712
826
 
@@ -1,8 +1,9 @@
1
1
  import * as fs from "fs";
2
2
  import * as path from "path";
3
+ import { homedir } from "os";
3
4
  import { spawn } from "child_process";
4
5
 
5
- const LOG_DIR = path.join(process.env.HOME || "", ".hive", "logs");
6
+ const LOG_DIR = path.join(homedir(), ".hive", "logs");
6
7
  const LOG_FILE = path.join(LOG_DIR, "gateway.log");
7
8
 
8
9
  export async function logs(flags: string[]): Promise<void> {
@@ -50,7 +50,7 @@ function reloadEnvToProcess(hiveDir: string): void {
50
50
  }
51
51
  }
52
52
 
53
- const VERSION = "0.0.38";
53
+ const VERSION = "0.0.40";
54
54
 
55
55
  const DEFAULT_MODELS: Record<string, string> = {
56
56
  anthropic: "claude-sonnet-4-6",
@@ -62,6 +62,7 @@ const DEFAULT_MODELS: Record<string, string> = {
62
62
  openrouter: "meta-llama/llama-3.3-70b-instruct",
63
63
  ollama: "llama3.3:8b",
64
64
  nvidia: "meta/llama-3.3-70b-instruct",
65
+ hiveagents: "Qwen3.6-35B-A3B-UD-Q4_K_M.gguf",
65
66
  };
66
67
 
67
68
  const PROVIDER_BASE_URLS: Record<string, string> = {
@@ -74,6 +75,7 @@ const PROVIDER_BASE_URLS: Record<string, string> = {
74
75
  openrouter: "https://openrouter.ai/api",
75
76
  ollama: "http://localhost:11434",
76
77
  nvidia: "https://integrate.api.nvidia.com/v1",
78
+ hiveagents: "https://llm.hiveagents.io/v1",
77
79
  };
78
80
 
79
81
  const API_KEY_PLACEHOLDERS: Record<string, string> = {
@@ -86,6 +88,7 @@ const API_KEY_PLACEHOLDERS: Record<string, string> = {
86
88
  openrouter: "sk-or-...",
87
89
  ollama: "",
88
90
  nvidia: "nvapi-...",
91
+ hiveagents: "Bearer token...",
89
92
  };
90
93
 
91
94
  const API_KEY_LINKS: Record<string, string> = {
@@ -98,6 +101,7 @@ const API_KEY_LINKS: Record<string, string> = {
98
101
  openrouter: "https://openrouter.ai/keys",
99
102
  ollama: "",
100
103
  nvidia: "https://build.nvidia.com/",
104
+ hiveagents: "",
101
105
  };
102
106
 
103
107
  const AVAILABLE_MODELS: Record<string, Array<{ value: string; label: string; hint?: string }>> = {
@@ -154,6 +158,17 @@ const AVAILABLE_MODELS: Record<string, Array<{ value: string; label: string; hin
154
158
  { value: "google/gemma-4-31b-it", label: "Gemma 4 31B", hint: "Multimodal — 256K contexto" },
155
159
  { value: "moonshotai/kimi-k2-thinking", label: "Kimi K2 Thinking", hint: "Razonamiento profundo — 256K" },
156
160
  ],
161
+ hiveagents: [
162
+ { value: "Qwen3.6-35B-A3B-UD-Q4_K_M.gguf", label: "Qwen3.6 35B MoE Q4 (Recomendado)", hint: "MoE 22.7GB — 62.8 t/s, el más rápido" },
163
+ { value: "Qwen3.6-35B-A3B-UD-Q6_K.gguf", label: "Qwen3.6 35B MoE Q6", hint: "MoE 30GB — 57.7 t/s" },
164
+ { value: "Qwen3-Coder-Next-UD-Q4_K_M.gguf", label: "Qwen3 Coder Next MoE Q4", hint: "MoE 49.3GB — 50.9 t/s, ocupa toda la VRAM" },
165
+ { value: "gemma-4-26B-A4B-UD-Q4_K_M.gguf", label: "Gemma 4 26B MoE Q4", hint: "MoE 16.9GB — 51.5 t/s" },
166
+ { value: "gemma-4-26B-A4B-UD-Q6_K_XL.gguf", label: "Gemma 4 26B MoE Q6", hint: "MoE 23.3GB — 47.8 t/s" },
167
+ { value: "gemma-4-12b-it-UD-Q4_K_XL.gguf", label: "Gemma 4 12B Dense Q4", hint: "Dense 7.4GB — 27.7 t/s" },
168
+ { value: "Qwopus3.6-27B-v2-MTP-Q6_K.gguf", label: "Qwopus 27B Dense+MTP Q6", hint: "Dense+MTP 22.4GB — 17.9 t/s" },
169
+ { value: "Qwen3.6-27B-UD-Q6_K_XL.gguf", label: "Qwen3.6 27B Dense+MTP Q6", hint: "Dense+MTP 26GB — 16 t/s" },
170
+ { value: "gemma-4-31B-it-UD-Q6_K_XL.gguf", label: "Gemma 4 31B Dense Q6", hint: "Dense 27.5GB — 7.6 t/s, mayor calidad" },
171
+ ],
157
172
  };
158
173
 
159
174
  const BUNDLED_SKILLS = [
@@ -390,6 +405,15 @@ async function testLLMConnection(provider: string, apiKey: string, model: string
390
405
  return response.ok;
391
406
  }
392
407
 
408
+ if (provider === "hiveagents") {
409
+ try {
410
+ const response = await fetch("https://llm.hiveagents.io/health");
411
+ return response.ok;
412
+ } catch {
413
+ return false;
414
+ }
415
+ }
416
+
393
417
  return false;
394
418
  } catch {
395
419
  return false;
@@ -542,6 +566,7 @@ async function runUpdateWizard(existing: ExistingConfig): Promise<void> {
542
566
  { value: "nvidia", label: "NVIDIA NIM", hint: "Modelos gratuitos" },
543
567
  { value: "openrouter", label: "OpenRouter", hint: "Multi-modelo" },
544
568
  { value: "ollama", label: "Ollama (local)", hint: "Sin costo" },
569
+ { value: "hiveagents", label: "HiveAgents LLM", hint: "Qwen3.6 / Gemma4 vía Cloudflare" },
545
570
  ],
546
571
  }) as string;
547
572
 
@@ -1057,6 +1082,7 @@ async function runFullWizard(): Promise<void> {
1057
1082
  { value: "ollama", label: "Ollama (Local)", hint: "Gratis, corre localmente" },
1058
1083
  { value: "nvidia", label: "NVIDIA NIM", hint: "Modelos gratuitos en build.nvidia.com" },
1059
1084
  { value: "openrouter", label: "OpenRouter", hint: "Múltiples proveedores" },
1085
+ { value: "hiveagents", label: "HiveAgents LLM", hint: "Local — Qwen3.6 / Gemma4 vía Cloudflare" },
1060
1086
  ],
1061
1087
  initialValue: state.provider,
1062
1088
  });
@@ -1,7 +1,8 @@
1
1
  import * as fs from "fs";
2
2
  import * as path from "path";
3
+ import { homedir } from "os";
3
4
 
4
- const HIVE_DIR = path.join(process.env.HOME || "", ".hive");
5
+ const HIVE_DIR = path.join(homedir(), ".hive");
5
6
  const SESSIONS_DIR = path.join(HIVE_DIR, "sessions");
6
7
 
7
8
  export async function sessions(subcommand: string | undefined, args: string[]): Promise<void> {
@@ -1,8 +1,9 @@
1
1
  import * as p from "@clack/prompts";
2
2
  import * as fs from "fs";
3
3
  import * as path from "path";
4
+ import { homedir } from "os";
4
5
 
5
- const SKILLS_DIR = path.join(process.env.HOME || "", ".hive", "skills");
6
+ const SKILLS_DIR = path.join(homedir(), ".hive", "skills");
6
7
  const BUNDLED_SKILLS: Array<{ slug: string; name: string; description: string }> = [
7
8
  { slug: "web-search", name: "Web Search", description: "Search the web using multiple search engines" },
8
9
  { slug: "code-exec", name: "Code Execution", description: "Execute code snippets safely" },