@johpaz/hive-agents 0.0.35 → 0.0.37

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 (441) hide show
  1. package/README.md +64 -39
  2. package/dist/hive.js +3231 -3189
  3. package/dist/tool-worker.js +218406 -0
  4. package/dist/ui/assets/{AgentCreateForm-B4eK7efF.js → AgentCreateForm-tJZv9FZC.js} +1 -1
  5. package/dist/ui/assets/{AgentDetailPage-BD2uoJWk.js → AgentDetailPage-Du-mRcAX.js} +1 -1
  6. package/dist/ui/assets/AgentNewPage-DIFYd_Ys.js +1 -0
  7. package/dist/ui/assets/{AgentsPage-4JUZXvkA.js → AgentsPage-YvSgWRiw.js} +6 -6
  8. package/dist/ui/assets/CanvasPage-DtMwGvxf.js +33 -0
  9. package/dist/ui/assets/{ChannelsPage-BUn7-nhV.js → ChannelsPage-BdBXWHjj.js} +1 -1
  10. package/dist/ui/assets/DashboardPage-ghl1ZguH.js +6 -0
  11. package/dist/ui/assets/{LoginPage-C8j_urUD.js → LoginPage-CAmSI9Vy.js} +1 -1
  12. package/dist/ui/assets/LogsPage-DAPBHkwK.js +1 -0
  13. package/dist/ui/assets/MeetingPage-WjjGOqqU.js +1 -0
  14. package/dist/ui/assets/{NotFound-Drh-sJPN.js → NotFound-BMeQSGcG.js} +1 -1
  15. package/dist/ui/assets/ProvidersPage-Ct6HsAi1.js +1 -0
  16. package/dist/ui/assets/{RecoverPage-DNb1Pr8h.js → RecoverPage-DpW3l-yv.js} +1 -1
  17. package/dist/ui/assets/SettingsPage-DBJ7_E6C.js +9 -0
  18. package/dist/ui/assets/SetupPage-DKmLVUaj.js +1 -0
  19. package/dist/ui/assets/{WebChatPage-R-YOwA4F.js → WebChatPage-CVRcKept.js} +2 -2
  20. package/dist/ui/assets/accordion-C5d5Rm5z.js +1 -0
  21. package/dist/ui/assets/{alert-U8FsgWi7.js → alert-C-NE-P3s.js} +1 -1
  22. package/dist/ui/assets/{alert-dialog-CRdMkkmk.js → alert-dialog-C5mzbHdP.js} +1 -1
  23. package/dist/ui/assets/{badge-Cli1jnH5.js → badge-ChpACfWO.js} +1 -1
  24. package/dist/ui/assets/chevron-up-BYhk0K2J.js +1 -0
  25. package/dist/ui/assets/{dialog-DQ3s-LuO.js → dialog-QnZ0ad8O.js} +1 -1
  26. package/dist/ui/assets/dropdown-menu-BK-CO3Od.js +1 -0
  27. package/dist/ui/assets/{es-DcMjrpbA.js → es-NQNoaWDx.js} +1 -1
  28. package/dist/ui/assets/index-B2fCYtTS.css +2 -0
  29. package/dist/ui/assets/index-DMCjjdqf.js +116 -0
  30. package/dist/ui/assets/{label-0BvGVXvZ.js → label-D2H1IR_J.js} +1 -1
  31. package/dist/ui/assets/progress-BherYzY6.js +1 -0
  32. package/dist/ui/assets/scroll-area-DkeyX32e.js +1 -0
  33. package/dist/ui/assets/{slider-D47dOrRa.js → slider-CsiUDxc3.js} +1 -1
  34. package/dist/ui/assets/switch-BDwN8RYV.js +1 -0
  35. package/dist/ui/assets/{table-DhowbNxQ.js → table-CSc8ubon.js} +1 -1
  36. package/dist/ui/assets/terminal-DN38Q456.js +1 -0
  37. package/dist/ui/assets/useProviders-C6_QHsEi.js +1 -0
  38. package/dist/ui/assets/{vendor-radix-JY4ncZrD.js → vendor-radix-cw1bQaVC.js} +4 -4
  39. package/dist/ui/assets/{vendor-react-CscwQerf.js → vendor-react-D4s9E-zj.js} +1 -1
  40. package/dist/ui/dist/assets/AgentCreateForm-tJZv9FZC.js +1 -0
  41. package/dist/ui/dist/assets/AgentDetailPage-Du-mRcAX.js +1 -0
  42. package/dist/ui/dist/assets/AgentNewPage-DIFYd_Ys.js +1 -0
  43. package/dist/ui/dist/assets/AgentsPage-YvSgWRiw.js +10 -0
  44. package/dist/ui/dist/assets/CanvasPage-DtMwGvxf.js +33 -0
  45. package/dist/ui/dist/assets/ChannelsPage-BdBXWHjj.js +8 -0
  46. package/dist/ui/dist/assets/DashboardPage-ghl1ZguH.js +6 -0
  47. package/dist/ui/dist/assets/LoginPage-CAmSI9Vy.js +1 -0
  48. package/dist/ui/dist/assets/LogsPage-DAPBHkwK.js +1 -0
  49. package/dist/ui/dist/assets/MeetingPage-WjjGOqqU.js +1 -0
  50. package/dist/ui/dist/assets/NotFound-BMeQSGcG.js +1 -0
  51. package/dist/ui/dist/assets/ProvidersPage-Ct6HsAi1.js +1 -0
  52. package/dist/ui/dist/assets/RecoverPage-DpW3l-yv.js +1 -0
  53. package/dist/ui/dist/assets/SettingsPage-DBJ7_E6C.js +9 -0
  54. package/dist/ui/dist/assets/SetupPage-DKmLVUaj.js +1 -0
  55. package/dist/ui/dist/assets/WebChatPage-CVRcKept.js +16 -0
  56. package/dist/ui/dist/assets/accordion-C5d5Rm5z.js +1 -0
  57. package/dist/ui/dist/assets/activity-c3pNngT_.js +1 -0
  58. package/dist/ui/dist/assets/alert-C-NE-P3s.js +1 -0
  59. package/dist/ui/dist/assets/alert-dialog-C5mzbHdP.js +1 -0
  60. package/dist/ui/dist/assets/arrow-left-CBcbX5EZ.js +1 -0
  61. package/dist/ui/dist/assets/badge-ChpACfWO.js +1 -0
  62. package/dist/ui/dist/assets/calendar-B-KZ9RQO.js +1 -0
  63. package/dist/ui/dist/assets/card-CNf6BS2e.js +1 -0
  64. package/dist/ui/dist/assets/chevron-left-D4U-5A27.js +1 -0
  65. package/dist/ui/dist/assets/chevron-right-CR4Skrf3.js +1 -0
  66. package/dist/ui/dist/assets/chevron-up-BYhk0K2J.js +1 -0
  67. package/dist/ui/dist/assets/circle-alert-CyHDwUj8.js +1 -0
  68. package/dist/ui/dist/assets/circle-check-Bb54Ebmu.js +1 -0
  69. package/dist/ui/dist/assets/cpu-Cdgc_B1K.js +1 -0
  70. package/dist/ui/dist/assets/dialog-QnZ0ad8O.js +1 -0
  71. package/dist/ui/dist/assets/download-C3ifGMjJ.js +1 -0
  72. package/dist/ui/dist/assets/dropdown-menu-BK-CO3Od.js +1 -0
  73. package/dist/ui/dist/assets/es-NQNoaWDx.js +1 -0
  74. package/dist/ui/dist/assets/external-link-BvxYeTP1.js +1 -0
  75. package/dist/ui/dist/assets/eye-DqNTU_GD.js +1 -0
  76. package/dist/ui/dist/assets/file-text-BT_9S9SM.js +1 -0
  77. package/dist/ui/dist/assets/folder-open-BhH8y9ac.js +1 -0
  78. package/dist/ui/dist/assets/format-GVHeOyWI.js +1 -0
  79. package/dist/ui/dist/assets/gateway-url-COCbW0IR.js +1 -0
  80. package/dist/ui/dist/assets/gauge-D_TMa4i9.js +1 -0
  81. package/dist/ui/dist/assets/globe-DeCQTCDJ.js +1 -0
  82. package/dist/ui/dist/assets/hexagon-DsGOUl-H.js +1 -0
  83. package/dist/ui/dist/assets/history-BSG-Ypqf.js +1 -0
  84. package/dist/ui/dist/assets/index-B2fCYtTS.css +2 -0
  85. package/dist/ui/dist/assets/index-DMCjjdqf.js +116 -0
  86. package/dist/ui/dist/assets/info-NwLoa2Mj.js +1 -0
  87. package/dist/ui/dist/assets/key-3EP0dhkT.js +1 -0
  88. package/dist/ui/dist/assets/label-D2H1IR_J.js +1 -0
  89. package/dist/ui/dist/assets/loader-circle-CZNax6kS.js +1 -0
  90. package/dist/ui/dist/assets/lock-Ei1_J-Nq.js +1 -0
  91. package/dist/ui/dist/assets/pause-BUqah9Bi.js +1 -0
  92. package/dist/ui/dist/assets/play-NcZ4swwL.js +1 -0
  93. package/dist/ui/dist/assets/plus-CX1xyhp5.js +1 -0
  94. package/dist/ui/dist/assets/progress-BherYzY6.js +1 -0
  95. package/dist/ui/dist/assets/refresh-cw-DaYdjQFk.js +1 -0
  96. package/dist/ui/dist/assets/rolldown-runtime-S-ySWqyJ.js +1 -0
  97. package/dist/ui/dist/assets/save-CUdYyHNy.js +1 -0
  98. package/dist/ui/dist/assets/scroll-area-DkeyX32e.js +1 -0
  99. package/dist/ui/dist/assets/send-B0H5SEIE.js +1 -0
  100. package/dist/ui/dist/assets/settings-Ds4SqD8s.js +1 -0
  101. package/dist/ui/dist/assets/slider-CsiUDxc3.js +14 -0
  102. package/dist/ui/dist/assets/sparkles-yUEb-7oH.js +1 -0
  103. package/dist/ui/dist/assets/square-BD81nFtN.js +1 -0
  104. package/dist/ui/dist/assets/switch-BDwN8RYV.js +1 -0
  105. package/dist/ui/dist/assets/table-CSc8ubon.js +1 -0
  106. package/dist/ui/dist/assets/terminal-DN38Q456.js +1 -0
  107. package/dist/ui/dist/assets/textarea-CXgXWKrT.js +1 -0
  108. package/dist/ui/dist/assets/trash-2-CNjMkoq6.js +1 -0
  109. package/dist/ui/dist/assets/triangle-alert-C9Y8Ub4X.js +1 -0
  110. package/dist/ui/dist/assets/useProviders-C6_QHsEi.js +1 -0
  111. package/dist/ui/dist/assets/utils-3pnRFmFe.js +1 -0
  112. package/dist/ui/dist/assets/vendor-charts-Bu2lyBKP.js +65 -0
  113. package/dist/ui/dist/assets/vendor-query-DsWPbQdG.js +1 -0
  114. package/dist/ui/dist/assets/vendor-radix-cw1bQaVC.js +63 -0
  115. package/dist/ui/dist/assets/vendor-react-D4s9E-zj.js +1 -0
  116. package/dist/ui/dist/assets/vendor-router-C9pIYwbJ.js +3 -0
  117. package/dist/ui/dist/assets/volume-2-CeSXNDv4.js +1 -0
  118. package/dist/ui/dist/assets/zap-hlXjpSeA.js +1 -0
  119. package/dist/ui/dist/favicon.ico +0 -0
  120. package/dist/ui/dist/index.html +40 -0
  121. package/dist/ui/dist/placeholder.svg +1 -0
  122. package/dist/ui/index.html +6 -6
  123. package/package.json +138 -13
  124. package/packages/cli/src/adapters/binary.ts +461 -0
  125. package/packages/cli/src/adapters/bun-global.ts +378 -0
  126. package/packages/cli/src/adapters/config.ts +314 -0
  127. package/packages/cli/src/adapters/docker.ts +308 -0
  128. package/packages/cli/src/adapters/factory.ts +168 -0
  129. package/packages/cli/src/adapters/index.ts +80 -0
  130. package/packages/cli/src/adapters/types.ts +218 -0
  131. package/packages/cli/src/commands/agent-run.ts +168 -0
  132. package/packages/cli/src/commands/agents.ts +398 -0
  133. package/packages/cli/src/commands/chat.ts +142 -0
  134. package/packages/cli/src/commands/config.ts +49 -0
  135. package/packages/cli/src/commands/cron.ts +487 -0
  136. package/packages/cli/src/commands/dev.ts +58 -0
  137. package/packages/cli/src/commands/doctor.ts +320 -0
  138. package/packages/cli/src/commands/gateway.ts +719 -0
  139. package/packages/cli/src/commands/logs.ts +57 -0
  140. package/packages/cli/src/commands/mcp.ts +175 -0
  141. package/packages/cli/src/commands/message.ts +77 -0
  142. package/packages/cli/src/commands/migrate.ts +90 -0
  143. package/packages/cli/src/commands/onboard.ts +1656 -0
  144. package/packages/cli/src/commands/security.ts +144 -0
  145. package/packages/cli/src/commands/service.ts +50 -0
  146. package/packages/cli/src/commands/sessions.ts +116 -0
  147. package/packages/cli/src/commands/skills.ts +215 -0
  148. package/packages/cli/src/commands/update.ts +203 -0
  149. package/packages/cli/src/index.ts +210 -0
  150. package/packages/cli/src/ui-bundle.generated.ts +3 -0
  151. package/packages/cli/src/utils/token.ts +6 -0
  152. package/packages/core/src/agent/agent-loop.ts +691 -0
  153. package/packages/core/src/agent/compaction.ts +240 -0
  154. package/packages/core/src/agent/context-compiler.ts +467 -0
  155. package/packages/core/src/agent/context-guard.ts +91 -0
  156. package/packages/core/src/agent/conversation-store.ts +244 -0
  157. package/packages/core/src/agent/curator.ts +158 -0
  158. package/packages/core/src/agent/hooks.ts +166 -0
  159. package/packages/core/src/agent/llm-client.ts +167 -0
  160. package/packages/core/src/agent/llm-providers/anthropic.ts +212 -0
  161. package/packages/core/src/agent/llm-providers/deepseek.ts +8 -0
  162. package/packages/core/src/agent/llm-providers/gemini.ts +215 -0
  163. package/packages/core/src/agent/llm-providers/groq.ts +5 -0
  164. package/packages/core/src/agent/llm-providers/interface.ts +195 -0
  165. package/packages/core/src/agent/llm-providers/kimi.ts +8 -0
  166. package/packages/core/src/agent/llm-providers/local-llama.ts +37 -0
  167. package/packages/core/src/agent/llm-providers/mistral.ts +5 -0
  168. package/packages/core/src/agent/llm-providers/nvidia.ts +5 -0
  169. package/packages/core/src/agent/llm-providers/ollama.ts +175 -0
  170. package/packages/core/src/agent/llm-providers/openai-compat-base.ts +379 -0
  171. package/packages/core/src/agent/llm-providers/openai.ts +5 -0
  172. package/packages/core/src/agent/llm-providers/openrouter.ts +5 -0
  173. package/packages/core/src/agent/llm-providers/qwen.ts +5 -0
  174. package/packages/core/src/agent/native-tools.ts +31 -0
  175. package/packages/core/src/agent/playbook-selector.ts +147 -0
  176. package/packages/core/src/agent/prompt-builder.ts +169 -0
  177. package/packages/core/src/agent/providers/index.ts +204 -0
  178. package/packages/core/src/agent/providers.ts +1 -0
  179. package/packages/core/src/agent/reflector.ts +200 -0
  180. package/packages/core/src/agent/service.ts +267 -0
  181. package/packages/core/src/agent/skill-selector.ts +479 -0
  182. package/packages/core/src/agent/stuck-loop.ts +133 -0
  183. package/packages/core/src/agent/tool-selector.ts +569 -0
  184. package/packages/core/src/agent/tracer.ts +100 -0
  185. package/packages/core/src/auth/auth.ts +108 -0
  186. package/packages/core/src/auth/index.ts +1 -0
  187. package/packages/core/src/canvas/a2ui-tools.ts +255 -0
  188. package/packages/core/src/canvas/canvas-manager.ts +390 -0
  189. package/packages/core/src/canvas/canvas-tools.ts +448 -0
  190. package/packages/core/src/canvas/emitter.ts +149 -0
  191. package/packages/core/src/canvas/index.ts +3 -0
  192. package/packages/core/src/channels/base.ts +154 -0
  193. package/packages/core/src/channels/discord.ts +273 -0
  194. package/packages/core/src/channels/index.ts +7 -0
  195. package/packages/core/src/channels/manager.ts +450 -0
  196. package/packages/core/src/channels/slack.ts +323 -0
  197. package/packages/core/src/channels/telegram.ts +612 -0
  198. package/packages/core/src/channels/webchat.ts +139 -0
  199. package/packages/core/src/channels/whatsapp.ts +548 -0
  200. package/packages/core/src/config/index.ts +12 -0
  201. package/packages/core/src/config/loader.ts +569 -0
  202. package/packages/core/src/events/agent-bus.ts +460 -0
  203. package/packages/core/src/events/event-bus.ts +169 -0
  204. package/packages/core/src/gateway/channel-notify.ts +64 -0
  205. package/packages/core/src/gateway/helpers/cors.ts +32 -0
  206. package/packages/core/src/gateway/helpers/index.ts +4 -0
  207. package/packages/core/src/gateway/helpers/narration.ts +57 -0
  208. package/packages/core/src/gateway/helpers/path.ts +13 -0
  209. package/packages/core/src/gateway/helpers/redact.ts +61 -0
  210. package/packages/core/src/gateway/index.ts +5 -0
  211. package/packages/core/src/gateway/initializer.ts +363 -0
  212. package/packages/core/src/gateway/lane-queue.ts +169 -0
  213. package/packages/core/src/gateway/llm-local/client.ts +94 -0
  214. package/packages/core/src/gateway/llm-local/detector.ts +321 -0
  215. package/packages/core/src/gateway/llm-local/downloader.ts +216 -0
  216. package/packages/core/src/gateway/llm-local/index.ts +34 -0
  217. package/packages/core/src/gateway/llm-local/manager.ts +186 -0
  218. package/packages/core/src/gateway/llm-local/models.ts +149 -0
  219. package/packages/core/src/gateway/llm-local/server.ts +179 -0
  220. package/packages/core/src/gateway/resolver.ts +108 -0
  221. package/packages/core/src/gateway/router.ts +124 -0
  222. package/packages/core/src/gateway/routes/agents.ts +210 -0
  223. package/packages/core/src/gateway/routes/auth.ts +244 -0
  224. package/packages/core/src/gateway/routes/channels.ts +484 -0
  225. package/packages/core/src/gateway/routes/chat.ts +241 -0
  226. package/packages/core/src/gateway/routes/config.ts +12 -0
  227. package/packages/core/src/gateway/routes/cron-api.ts +544 -0
  228. package/packages/core/src/gateway/routes/ethics.ts +46 -0
  229. package/packages/core/src/gateway/routes/llm-local.ts +271 -0
  230. package/packages/core/src/gateway/routes/mcp.ts +319 -0
  231. package/packages/core/src/gateway/routes/meeting.ts +232 -0
  232. package/packages/core/src/gateway/routes/models.ts +163 -0
  233. package/packages/core/src/gateway/routes/multimodal.ts +93 -0
  234. package/packages/core/src/gateway/routes/providers.ts +220 -0
  235. package/packages/core/src/gateway/routes/setup.ts +441 -0
  236. package/packages/core/src/gateway/routes/skills.ts +115 -0
  237. package/packages/core/src/gateway/routes/system.ts +469 -0
  238. package/packages/core/src/gateway/routes/tasks.ts +44 -0
  239. package/packages/core/src/gateway/routes/tools.ts +59 -0
  240. package/packages/core/src/gateway/routes/tts-local.ts +388 -0
  241. package/packages/core/src/gateway/routes/users.ts +122 -0
  242. package/packages/core/src/gateway/routes/voice.ts +189 -0
  243. package/packages/core/src/gateway/routes/workspace.ts +281 -0
  244. package/packages/core/src/gateway/server.ts +2744 -0
  245. package/packages/core/src/gateway/session.ts +95 -0
  246. package/packages/core/src/gateway/slash-commands.ts +207 -0
  247. package/packages/core/src/gateway/tts/README.md +94 -0
  248. package/packages/core/src/gateway/tts/package.json +25 -0
  249. package/packages/core/src/gateway/tts/src/client.ts +59 -0
  250. package/packages/core/src/gateway/tts/src/detect.ts +42 -0
  251. package/packages/core/src/gateway/tts/src/index.ts +15 -0
  252. package/packages/core/src/gateway/tts/src/install.ts +129 -0
  253. package/packages/core/src/gateway/tts/src/models.ts +50 -0
  254. package/packages/core/src/gateway/tts/src/server.ts +252 -0
  255. package/packages/core/src/gateway/tts/voices/.gitkeep +0 -0
  256. package/packages/core/src/heartbeat/index.ts +157 -0
  257. package/packages/core/src/index.ts +56 -0
  258. package/packages/core/src/mcp/hot-reload.ts +148 -0
  259. package/packages/core/src/mcp/singleton.ts +21 -0
  260. package/packages/core/src/mcp/tool-sync.ts +176 -0
  261. package/packages/core/src/multimodal/index.ts +2 -0
  262. package/packages/core/src/multimodal/types.ts +28 -0
  263. package/packages/core/src/multimodal/vision-service.ts +283 -0
  264. package/packages/core/src/plugins/api.ts +128 -0
  265. package/packages/core/src/plugins/index.ts +2 -0
  266. package/packages/core/src/plugins/loader.ts +365 -0
  267. package/packages/core/src/resilience/circuit-breaker.ts +225 -0
  268. package/packages/core/src/scheduler/CronScheduler.ts +699 -0
  269. package/packages/core/src/scheduler/dag/AgentExecutor.ts +53 -0
  270. package/packages/core/src/scheduler/dag/DAGScheduler.ts +250 -0
  271. package/packages/core/src/scheduler/dag/EventBridge.ts +122 -0
  272. package/packages/core/src/scheduler/dag/TaskGraph.ts +192 -0
  273. package/packages/core/src/scheduler/dag/TaskNode.ts +97 -0
  274. package/packages/core/src/scheduler/dag/TaskResult.ts +22 -0
  275. package/packages/core/src/scheduler/dag/errors.ts +37 -0
  276. package/packages/core/src/scheduler/dag/index.ts +26 -0
  277. package/packages/core/src/scheduler/dag/presets/ResearchPreset.ts +97 -0
  278. package/packages/core/src/scheduler/dag/strategies/ParallelStrategy.ts +21 -0
  279. package/packages/core/src/scheduler/dag/strategies/PriorityStrategy.ts +46 -0
  280. package/packages/core/src/scheduler/index.ts +22 -0
  281. package/packages/core/src/scheduler/integration.ts +237 -0
  282. package/packages/core/src/scheduler/types.ts +164 -0
  283. package/packages/core/src/security/google-chat.ts +269 -0
  284. package/packages/core/src/security/index.ts +192 -0
  285. package/packages/core/src/security/pairing.ts +250 -0
  286. package/packages/core/src/security/rate-limit.ts +270 -0
  287. package/packages/core/src/security/signal.ts +321 -0
  288. package/packages/core/src/state/store.ts +312 -0
  289. package/packages/core/src/storage/crypto.ts +197 -0
  290. package/packages/core/src/storage/migrate.ts +147 -0
  291. package/packages/core/src/storage/onboarding.ts +1506 -0
  292. package/packages/core/src/storage/schema.ts +666 -0
  293. package/packages/core/src/storage/seed.ts +628 -0
  294. package/packages/core/src/storage/sqlite.ts +407 -0
  295. package/packages/core/src/storage/usage.ts +374 -0
  296. package/packages/core/src/tool-runtime/index.ts +502 -0
  297. package/packages/core/src/tool-runtime/tool-worker.ts +125 -0
  298. package/packages/core/src/tools/agents/get-available-models.ts +118 -0
  299. package/packages/core/src/tools/agents/index.ts +610 -0
  300. package/packages/core/src/tools/canvas/index.ts +420 -0
  301. package/packages/core/src/tools/cli/index.ts +142 -0
  302. package/packages/core/src/tools/core/index.ts +478 -0
  303. package/packages/core/src/tools/cron/index.ts +635 -0
  304. package/packages/core/src/tools/filesystem/fs-delete.ts +78 -0
  305. package/packages/core/src/tools/filesystem/fs-edit.ts +106 -0
  306. package/packages/core/src/tools/filesystem/fs-exists.ts +63 -0
  307. package/packages/core/src/tools/filesystem/fs-glob.ts +108 -0
  308. package/packages/core/src/tools/filesystem/fs-list.ts +129 -0
  309. package/packages/core/src/tools/filesystem/fs-read.ts +72 -0
  310. package/packages/core/src/tools/filesystem/fs-write.ts +67 -0
  311. package/packages/core/src/tools/filesystem/index.ts +34 -0
  312. package/packages/core/src/tools/filesystem/workspace-guard.ts +62 -0
  313. package/packages/core/src/tools/index.ts +197 -0
  314. package/packages/core/src/tools/meeting/index.ts +363 -0
  315. package/packages/core/src/tools/office/index.ts +47 -0
  316. package/packages/core/src/tools/office/office-escribir-docx.ts +192 -0
  317. package/packages/core/src/tools/office/office-escribir-pdf.ts +172 -0
  318. package/packages/core/src/tools/office/office-escribir-pptx.ts +174 -0
  319. package/packages/core/src/tools/office/office-escribir-xlsx.ts +116 -0
  320. package/packages/core/src/tools/office/office-leer-docx.ts +93 -0
  321. package/packages/core/src/tools/office/office-leer-pdf.ts +114 -0
  322. package/packages/core/src/tools/office/office-leer-pptx.ts +136 -0
  323. package/packages/core/src/tools/office/office-leer-xlsx.ts +124 -0
  324. package/packages/core/src/tools/types.ts +39 -0
  325. package/packages/core/src/tools/voice/index.ts +104 -0
  326. package/packages/core/src/tools/web/browser-click.ts +78 -0
  327. package/packages/core/src/tools/web/browser-extract.ts +139 -0
  328. package/packages/core/src/tools/web/browser-navigate.ts +106 -0
  329. package/packages/core/src/tools/web/browser-screenshot.ts +87 -0
  330. package/packages/core/src/tools/web/browser-script.ts +88 -0
  331. package/packages/core/src/tools/web/browser-service.ts +554 -0
  332. package/packages/core/src/tools/web/browser-type.ts +101 -0
  333. package/packages/core/src/tools/web/browser-wait.ts +136 -0
  334. package/packages/core/src/tools/web/index.ts +41 -0
  335. package/packages/core/src/tools/web/web-fetch.ts +78 -0
  336. package/packages/core/src/tools/web/web-search.ts +123 -0
  337. package/packages/core/src/utils/benchmark.ts +80 -0
  338. package/packages/core/src/utils/crypto.ts +73 -0
  339. package/packages/core/src/utils/date.ts +42 -0
  340. package/packages/core/src/utils/index.ts +5 -0
  341. package/packages/core/src/utils/logger.ts +389 -0
  342. package/packages/core/src/utils/retry.ts +70 -0
  343. package/packages/core/src/utils/toon.ts +253 -0
  344. package/packages/core/src/voice/index.ts +643 -0
  345. package/packages/mcp/src/config.ts +13 -0
  346. package/packages/mcp/src/index.ts +1 -0
  347. package/packages/mcp/src/logger.ts +47 -0
  348. package/packages/mcp/src/manager.ts +439 -0
  349. package/packages/mcp/src/transports/index.ts +67 -0
  350. package/packages/mcp/src/transports/sse.ts +238 -0
  351. package/packages/mcp/src/transports/websocket.ts +159 -0
  352. package/packages/skills/src/bundled/agents/agent_spawner/SKILL.md +167 -0
  353. package/packages/skills/src/bundled/agents/code_delegator/SKILL.md +156 -0
  354. package/packages/skills/src/bundled/agents/memory_manager/SKILL.md +143 -0
  355. package/packages/skills/src/bundled/agents/research_and_remember/SKILL.md +139 -0
  356. package/packages/skills/src/bundled/agents/task_orchestrator/SKILL.md +198 -0
  357. package/packages/skills/src/bundled/canvas/a2ui_dashboard/SKILL.md +176 -0
  358. package/packages/skills/src/bundled/canvas/a2ui_form/SKILL.md +202 -0
  359. package/packages/skills/src/bundled/canvas/a2ui_interactive/SKILL.md +206 -0
  360. package/packages/skills/src/bundled/canvas/canvas_dashboard/SKILL.md +146 -0
  361. package/packages/skills/src/bundled/canvas/canvas_interact/SKILL.md +148 -0
  362. package/packages/skills/src/bundled/canvas/canvas_report/SKILL.md +146 -0
  363. package/packages/skills/src/bundled/cli/cli_pipeline/SKILL.md +136 -0
  364. package/packages/skills/src/bundled/cli/cli_safe_exec/SKILL.md +125 -0
  365. package/packages/skills/src/bundled/cron_manager/SKILL.md +188 -0
  366. package/packages/skills/src/bundled/cron_reminder/SKILL.md +112 -0
  367. package/packages/skills/src/bundled/filesystem/file_manager/SKILL.md +118 -0
  368. package/packages/skills/src/bundled/filesystem/file_read_and_summarize/SKILL.md +108 -0
  369. package/packages/skills/src/bundled/filesystem/file_writer/SKILL.md +135 -0
  370. package/packages/skills/src/bundled/meeting/meeting_transcription/SKILL.md +213 -0
  371. package/packages/skills/src/bundled/office/office_document_manager/SKILL.md +262 -0
  372. package/packages/skills/src/bundled/search_knowledge/busqueda_fts5/SKILL.md +74 -0
  373. package/packages/skills/src/bundled/voice/voice_assistant/SKILL.md +174 -0
  374. package/packages/skills/src/bundled/voice/voice_input/SKILL.md +146 -0
  375. package/packages/skills/src/bundled/voice/voice_output/SKILL.md +151 -0
  376. package/packages/skills/src/bundled/web/browser_automate/SKILL.md +120 -0
  377. package/packages/skills/src/bundled/web/browser_scrape/SKILL.md +109 -0
  378. package/packages/skills/src/bundled/web/web_monitor/SKILL.md +127 -0
  379. package/packages/skills/src/bundled/web/web_research/SKILL.md +119 -0
  380. package/packages/skills/src/bundled-data.generated.ts +1964 -0
  381. package/packages/skills/src/index.ts +1 -0
  382. package/packages/skills/src/loader.ts +388 -0
  383. package/dist/ui/assets/AgentNewPage-GB-tVN50.js +0 -1
  384. package/dist/ui/assets/BridgePage-DDcDILKu.js +0 -1
  385. package/dist/ui/assets/CanvasPage-oOk2sGOD.js +0 -33
  386. package/dist/ui/assets/DashboardPage-DV_2qWYJ.js +0 -6
  387. package/dist/ui/assets/LogsPage-DayYjh01.js +0 -1
  388. package/dist/ui/assets/MeetingPage-C01uPuqj.js +0 -1
  389. package/dist/ui/assets/ProjectsPage-B8_am_Ib.js +0 -1
  390. package/dist/ui/assets/ProvidersPage-DBzi66e4.js +0 -1
  391. package/dist/ui/assets/SettingsPage-CFA_Tknl.js +0 -9
  392. package/dist/ui/assets/SetupPage-BrUWbhvT.js +0 -1
  393. package/dist/ui/assets/accordion-DdAEfIXR.js +0 -1
  394. package/dist/ui/assets/chevron-down-DIosfU_U.js +0 -1
  395. package/dist/ui/assets/chevron-up-CI-W21Fy.js +0 -1
  396. package/dist/ui/assets/circle-S0-ouLz-.js +0 -1
  397. package/dist/ui/assets/circle-minus-CE0iJrl8.js +0 -1
  398. package/dist/ui/assets/circle-x-jUJ5zZvQ.js +0 -1
  399. package/dist/ui/assets/dropdown-menu-C2CXM1VE.js +0 -1
  400. package/dist/ui/assets/index-BN0875JH.css +0 -2
  401. package/dist/ui/assets/index-CH6sBa3Q.js +0 -116
  402. package/dist/ui/assets/pencil-5VdSj-h5.js +0 -1
  403. package/dist/ui/assets/progress-JN30I5fF.js +0 -1
  404. package/dist/ui/assets/scroll-area-BQQPitM8.js +0 -1
  405. package/dist/ui/assets/search-ChPgnVKj.js +0 -1
  406. package/dist/ui/assets/switch-C7W2-KEx.js +0 -1
  407. package/dist/ui/assets/terminal-C-R5Fckz.js +0 -1
  408. package/dist/ui/assets/useProviders-TBnWn-Hq.js +0 -1
  409. /package/dist/ui/assets/{card-DFKnZ6ky.js → card-CNf6BS2e.js} +0 -0
  410. /package/dist/ui/assets/{circle-alert-KuAm2FWh.js → circle-alert-CyHDwUj8.js} +0 -0
  411. /package/dist/ui/assets/{circle-check-6Ard1-2z.js → circle-check-Bb54Ebmu.js} +0 -0
  412. /package/dist/ui/assets/{cpu-KDy6-FAI.js → cpu-Cdgc_B1K.js} +0 -0
  413. /package/dist/ui/assets/{download-Cjbk4Rek.js → download-C3ifGMjJ.js} +0 -0
  414. /package/dist/ui/assets/{external-link-HtrFM63g.js → external-link-BvxYeTP1.js} +0 -0
  415. /package/dist/ui/assets/{eye-D1dB40_o.js → eye-DqNTU_GD.js} +0 -0
  416. /package/dist/ui/assets/{file-text-CE58EfH0.js → file-text-BT_9S9SM.js} +0 -0
  417. /package/dist/ui/assets/{folder-open-DIPKeiI_.js → folder-open-BhH8y9ac.js} +0 -0
  418. /package/dist/ui/assets/{format-BwdV8bB5.js → format-GVHeOyWI.js} +0 -0
  419. /package/dist/ui/assets/{gateway-url-D5uj6Nxg.js → gateway-url-COCbW0IR.js} +0 -0
  420. /package/dist/ui/assets/{gauge-DmQmJHEg.js → gauge-D_TMa4i9.js} +0 -0
  421. /package/dist/ui/assets/{globe-_hUGxQF4.js → globe-DeCQTCDJ.js} +0 -0
  422. /package/dist/ui/assets/{hexagon-BaNGQlQj.js → hexagon-DsGOUl-H.js} +0 -0
  423. /package/dist/ui/assets/{history-BfZVGlZa.js → history-BSG-Ypqf.js} +0 -0
  424. /package/dist/ui/assets/{info-CBZ5-AlC.js → info-NwLoa2Mj.js} +0 -0
  425. /package/dist/ui/assets/{key-Bv5DdTPh.js → key-3EP0dhkT.js} +0 -0
  426. /package/dist/ui/assets/{loader-circle-C4hhXLgp.js → loader-circle-CZNax6kS.js} +0 -0
  427. /package/dist/ui/assets/{lock-CkZYexqw.js → lock-Ei1_J-Nq.js} +0 -0
  428. /package/dist/ui/assets/{pause-Bpy1_s7y.js → pause-BUqah9Bi.js} +0 -0
  429. /package/dist/ui/assets/{play-Cj4osqJZ.js → play-NcZ4swwL.js} +0 -0
  430. /package/dist/ui/assets/{plus-BQhgZN3A.js → plus-CX1xyhp5.js} +0 -0
  431. /package/dist/ui/assets/{refresh-cw-BfREHVQM.js → refresh-cw-DaYdjQFk.js} +0 -0
  432. /package/dist/ui/assets/{save-FFTD4dMp.js → save-CUdYyHNy.js} +0 -0
  433. /package/dist/ui/assets/{settings-BdHKUL92.js → settings-Ds4SqD8s.js} +0 -0
  434. /package/dist/ui/assets/{sparkles-r4uJbJAl.js → sparkles-yUEb-7oH.js} +0 -0
  435. /package/dist/ui/assets/{square-G7Hyufqm.js → square-BD81nFtN.js} +0 -0
  436. /package/dist/ui/assets/{textarea-5kyuD04X.js → textarea-CXgXWKrT.js} +0 -0
  437. /package/dist/ui/assets/{trash-2-DXVBRWfh.js → trash-2-CNjMkoq6.js} +0 -0
  438. /package/dist/ui/assets/{triangle-alert-Bu5seg9O.js → triangle-alert-C9Y8Ub4X.js} +0 -0
  439. /package/dist/ui/assets/{vendor-router-CCECILJ0.js → vendor-router-C9pIYwbJ.js} +0 -0
  440. /package/dist/ui/assets/{volume-2-s9DuS696.js → volume-2-CeSXNDv4.js} +0 -0
  441. /package/dist/ui/assets/{zap-BPHZzXKV.js → zap-hlXjpSeA.js} +0 -0
@@ -0,0 +1,308 @@
1
+ /**
2
+ * Docker Compose Adapter
3
+ *
4
+ * Handles Hive installation via Docker Compose (standard configuration).
5
+ * Uses docker-compose.yml with named volumes and host.docker.internal.
6
+ */
7
+
8
+ import { spawn, execSync } from "node:child_process";
9
+ import * as path from "node:path";
10
+ import { existsSync } from "node:fs";
11
+ import type {
12
+ InstallationAdapter,
13
+ InstallationConfig,
14
+ GatewayConfig,
15
+ ValidationResult,
16
+ } from "./types";
17
+ import {
18
+ getHiveDir,
19
+ getDefaultPaths,
20
+ loadEnvFile,
21
+ mergeEnv,
22
+ expandPath,
23
+ waitForHttpPort,
24
+ } from "./config";
25
+ import { PORTS } from "./types";
26
+
27
+ type SpawnedProcess = {
28
+ on(event: "close", listener: (code: number | null) => void): void;
29
+ on(event: "error", listener: (error: Error) => void): void;
30
+ };
31
+
32
+ /**
33
+ * Docker Compose installation adapter
34
+ */
35
+ export class DockerAdapter implements InstallationAdapter {
36
+ readonly type = "docker" as const;
37
+ readonly name = "Docker Compose";
38
+
39
+ private hiveDir: string;
40
+ private composeFile: string;
41
+ private envFile: string;
42
+
43
+ constructor(options?: { hiveDir?: string; composeFile?: string }) {
44
+ this.hiveDir = options?.hiveDir || getHiveDir();
45
+ this.composeFile = options?.composeFile || this.findComposeFile();
46
+ this.envFile = path.join(path.dirname(this.composeFile), ".env");
47
+ }
48
+
49
+ /**
50
+ * Find the docker-compose.yml file
51
+ */
52
+ private findComposeFile(): string {
53
+ // Only check standard installation locations — NOT process.cwd().
54
+ // Searching cwd causes false positives when running from the dev/source directory.
55
+ const standardPaths = [
56
+ "/opt/hive/docker-compose.yml",
57
+ "/usr/local/share/hive/docker-compose.yml",
58
+ path.join(process.env.HOME || "", ".hive", "docker-compose.yml"),
59
+ ];
60
+
61
+ for (const composePath of standardPaths) {
62
+ if (existsSync(composePath)) {
63
+ return composePath;
64
+ }
65
+ }
66
+
67
+ // Default to a path that won't exist → detect() will return false gracefully
68
+ return "/opt/hive/docker-compose.yml";
69
+ }
70
+
71
+ /**
72
+ * Check if Docker is available and this installation method is active
73
+ */
74
+ async detect(): Promise<boolean> {
75
+ try {
76
+ // Check if Docker is installed
77
+ execSync("docker --version", { stdio: "ignore" });
78
+
79
+ // Check if docker-compose is available
80
+ execSync("docker compose version", { stdio: "ignore" });
81
+
82
+ // Check if compose file exists
83
+ if (!existsSync(this.composeFile)) {
84
+ return false;
85
+ }
86
+
87
+ // Verify the compose file actually defines a "hive" service.
88
+ // Use "config --services" instead of "ps" so it works even when containers are stopped.
89
+ try {
90
+ const out = execSync(
91
+ `docker compose -f "${this.composeFile}" config --services`,
92
+ { encoding: "utf-8", stdio: ["ignore", "pipe", "ignore"] }
93
+ );
94
+ return out.trim().split("\n").map(s => s.trim()).includes("hive");
95
+ } catch {
96
+ return false;
97
+ }
98
+ } catch {
99
+ return false;
100
+ }
101
+ }
102
+
103
+ /**
104
+ * Get Docker-specific installation configuration
105
+ */
106
+ async getConfig(): Promise<InstallationConfig> {
107
+ const env = await this.getEnvironment();
108
+ const paths = getDefaultPaths(this.hiveDir);
109
+
110
+ // In Docker mode, UI is served from /app/ui inside container
111
+ // but we access it via the exposed port
112
+ paths.uiDir = null;
113
+
114
+ const port = parseInt(env.HIVE_PORT || "18790", 10) || PORTS.GATEWAY;
115
+ const publicUrl = env.HIVE_PUBLIC_URL || undefined;
116
+
117
+ return {
118
+ type: this.type,
119
+ gateway: {
120
+ host: env.HIVE_HOST || "0.0.0.0",
121
+ port,
122
+ wsPort: port,
123
+ publicUrl,
124
+ openBrowser: !env.NO_BROWSER,
125
+ daemon: false,
126
+ },
127
+ paths,
128
+ env,
129
+ isDev: false,
130
+ hasEmbeddedUI: false,
131
+ };
132
+ }
133
+
134
+ /**
135
+ * Start Hive using Docker Compose
136
+ */
137
+ async start(config: GatewayConfig): Promise<void> {
138
+ return new Promise((resolve, reject) => {
139
+ const child = spawn("docker", ["compose", "-f", this.composeFile, "up", "-d"], {
140
+ stdio: "inherit",
141
+ detached: false,
142
+ });
143
+
144
+ const childProcess = child as unknown as SpawnedProcess;
145
+ childProcess.on("close", (code) => {
146
+ if (code === 0) {
147
+ resolve();
148
+ } else {
149
+ reject(new Error(`Docker compose exited with code ${code}`));
150
+ }
151
+ });
152
+
153
+ childProcess.on("error", (error) => {
154
+ reject(error);
155
+ });
156
+ });
157
+ }
158
+
159
+ /**
160
+ * Stop Hive Docker container
161
+ */
162
+ async stop(): Promise<void> {
163
+ return new Promise((resolve, reject) => {
164
+ const child = spawn("docker", ["compose", "-f", this.composeFile, "down"], {
165
+ stdio: "inherit",
166
+ detached: false,
167
+ });
168
+
169
+ const childProcess = child as unknown as SpawnedProcess;
170
+ childProcess.on("close", (code) => {
171
+ if (code === 0) {
172
+ resolve();
173
+ } else {
174
+ reject(new Error(`Docker compose down exited with code ${code}`));
175
+ }
176
+ });
177
+
178
+ childProcess.on("error", (error) => {
179
+ reject(error);
180
+ });
181
+ });
182
+ }
183
+
184
+ /**
185
+ * Check if Docker container is running
186
+ */
187
+ async isRunning(): Promise<boolean> {
188
+ try {
189
+ const output = execSync("docker compose ps --format json", {
190
+ encoding: "utf-8",
191
+ stdio: ["ignore", "pipe", "ignore"],
192
+ });
193
+
194
+ const services = JSON.parse(output.trim());
195
+ if (Array.isArray(services)) {
196
+ const hive = services.find((s: any) => s.service === "hive");
197
+ return hive && hive.state === "running";
198
+ }
199
+
200
+ return false;
201
+ } catch {
202
+ return false;
203
+ }
204
+ }
205
+
206
+ /**
207
+ * Get Docker container PID (not directly accessible, returns null)
208
+ */
209
+ async getPid(): Promise<number | null> {
210
+ try {
211
+ const output = execSync("docker inspect --format '{{.State.Pid}}' $(docker compose ps -q hive)", {
212
+ encoding: "utf-8",
213
+ stdio: ["ignore", "pipe", "ignore"],
214
+ });
215
+
216
+ const pid = parseInt(output.trim(), 10);
217
+ if (!isNaN(pid) && pid > 0) {
218
+ return pid;
219
+ }
220
+
221
+ return null;
222
+ } catch {
223
+ return null;
224
+ }
225
+ }
226
+
227
+ /**
228
+ * Get Docker-specific environment variables
229
+ */
230
+ async getEnvironment(): Promise<Record<string, string>> {
231
+ const fileEnv = loadEnvFile(this.envFile);
232
+
233
+ const defaults = {
234
+ HIVE_HOST: "0.0.0.0",
235
+ HIVE_PORT: String(PORTS.GATEWAY),
236
+ OLLAMA_HOST: "http://host.docker.internal:11434",
237
+ NO_BROWSER: "1",
238
+ HIVE_PUBLIC_URL: "",
239
+ };
240
+
241
+ return mergeEnv(defaults, fileEnv, process.env);
242
+ }
243
+
244
+ /**
245
+ * Validate Docker installation
246
+ */
247
+ async validate(): Promise<ValidationResult> {
248
+ const errors: string[] = [];
249
+ const warnings: string[] = [];
250
+ const info: string[] = [];
251
+
252
+ // Check Docker installation
253
+ try {
254
+ const version = execSync("docker --version", { encoding: "utf-8" }).trim();
255
+ info.push(`Docker: ${version}`);
256
+ } catch {
257
+ errors.push("Docker is not installed or not in PATH");
258
+ }
259
+
260
+ // Check docker-compose
261
+ try {
262
+ const version = execSync("docker compose version", { encoding: "utf-8" }).trim();
263
+ info.push(`Docker Compose: ${version}`);
264
+ } catch {
265
+ errors.push("Docker Compose is not installed");
266
+ }
267
+
268
+ // Check compose file
269
+ if (!existsSync(this.composeFile)) {
270
+ errors.push(`docker-compose.yml not found at ${this.composeFile}`);
271
+ } else {
272
+ info.push(`Compose file: ${this.composeFile}`);
273
+ }
274
+
275
+ // Check if Docker daemon is running
276
+ try {
277
+ execSync("docker info", { stdio: "ignore" });
278
+ info.push("Docker daemon is running");
279
+ } catch {
280
+ errors.push("Docker daemon is not running");
281
+ }
282
+
283
+ // Check container health if running
284
+ const running = await this.isRunning();
285
+ if (running) {
286
+ info.push("Hive container is running");
287
+
288
+ // Check health endpoint
289
+ const config = await this.getConfig();
290
+ const healthy = await waitForHttpPort(config.gateway.port, "/health", 5000);
291
+
292
+ if (healthy) {
293
+ info.push("Hive health check passed");
294
+ } else {
295
+ warnings.push("Hive container is running but health check failed");
296
+ }
297
+ } else {
298
+ warnings.push("Hive container is not running");
299
+ }
300
+
301
+ return {
302
+ valid: errors.length === 0,
303
+ errors,
304
+ warnings,
305
+ info,
306
+ };
307
+ }
308
+ }
@@ -0,0 +1,168 @@
1
+ /**
2
+ * Installation Adapter Factory
3
+ *
4
+ * Provides automatic detection and instantiation of the appropriate
5
+ * installation adapter based on the current environment.
6
+ */
7
+
8
+ import type { InstallationAdapter, InstallationType, AdapterOptions } from "./types";
9
+ import { DockerAdapter } from "./docker";
10
+ import { BunGlobalAdapter } from "./bun-global";
11
+ import { BinaryAdapter } from "./binary";
12
+
13
+ /**
14
+ * Priority order for adapter detection
15
+ * Lower number = higher priority
16
+ */
17
+ const DETECTION_PRIORITY: InstallationType[] = [
18
+ "docker", // Standard Docker
19
+ "binary", // Compiled binary
20
+ "bun-global", // Global npm installation
21
+ ];
22
+
23
+ /**
24
+ * Create adapter instances for all available types
25
+ */
26
+ function createAllAdapters(options?: { hiveDir?: string }): Record<InstallationType, InstallationAdapter> {
27
+ return {
28
+ "docker": new DockerAdapter({ hiveDir: options?.hiveDir }),
29
+ "bun-global": new BunGlobalAdapter({ hiveDir: options?.hiveDir }),
30
+ "binary": new BinaryAdapter({ hiveDir: options?.hiveDir }),
31
+ };
32
+ }
33
+
34
+ /**
35
+ * Detect and return the appropriate installation adapter
36
+ *
37
+ * Detection strategy:
38
+ * 1. If forceType is specified, use that adapter
39
+ * 2. Check for Hostinguer configuration (most specific)
40
+ * 3. Check for standard Docker installation
41
+ * 4. Check for compiled binary
42
+ * 5. Check for global Bun installation
43
+ * 6. Default to BinaryAdapter (embedded UI fallback)
44
+ */
45
+ export async function detectAdapter(options?: AdapterOptions): Promise<InstallationAdapter> {
46
+ const hiveDir = options?.hiveDir;
47
+ const verbose = options?.verbose ?? false;
48
+
49
+ // Force specific adapter type
50
+ if (options?.forceType) {
51
+ const adapters = createAllAdapters({ hiveDir });
52
+ const adapter = adapters[options.forceType];
53
+
54
+ if (verbose) {
55
+ console.log(`Using forced adapter: ${adapter.name} (${options.forceType})`);
56
+ }
57
+
58
+ return adapter;
59
+ }
60
+
61
+ // Try detection in priority order
62
+ const adapters = createAllAdapters({ hiveDir });
63
+
64
+ for (const type of DETECTION_PRIORITY) {
65
+ const adapter = adapters[type];
66
+
67
+ try {
68
+ const isDetected = await adapter.detect();
69
+
70
+ if (isDetected) {
71
+ if (verbose) {
72
+ console.log(`Detected installation: ${adapter.name} (${type})`);
73
+ }
74
+ return adapter;
75
+ }
76
+ } catch (error) {
77
+ if (verbose) {
78
+ console.warn(`Error detecting ${type}:`, (error as Error).message);
79
+ }
80
+ // Continue to next adapter
81
+ }
82
+ }
83
+
84
+ // Fallback: return BinaryAdapter as default
85
+ // This handles cases where we're running from source or embedded
86
+ if (verbose) {
87
+ console.log("No specific installation detected, using BinaryAdapter (fallback)");
88
+ }
89
+
90
+ return adapters.binary;
91
+ }
92
+
93
+ /**
94
+ * Detect all available installation methods
95
+ * Returns an array of adapters that detected successfully
96
+ */
97
+ export async function detectAllAdapters(options?: { hiveDir?: string }): Promise<InstallationAdapter[]> {
98
+ const adapters = createAllAdapters({ hiveDir: options?.hiveDir });
99
+ const available: InstallationAdapter[] = [];
100
+
101
+ for (const type of DETECTION_PRIORITY) {
102
+ const adapter = adapters[type];
103
+
104
+ try {
105
+ if (await adapter.detect()) {
106
+ available.push(adapter);
107
+ }
108
+ } catch {
109
+ // Adapter detection failed, skip
110
+ }
111
+ }
112
+
113
+ return available;
114
+ }
115
+
116
+ /**
117
+ * Get the primary installation type
118
+ */
119
+ export async function getInstallationType(options?: { hiveDir?: string }): Promise<InstallationType> {
120
+ const adapter = await detectAdapter({ hiveDir: options?.hiveDir });
121
+ return adapter.type;
122
+ }
123
+
124
+ /**
125
+ * Check if a specific installation type is available
126
+ */
127
+ export async function isInstallationTypeAvailable(
128
+ type: InstallationType,
129
+ options?: { hiveDir?: string }
130
+ ): Promise<boolean> {
131
+ const adapters = createAllAdapters({ hiveDir: options?.hiveDir });
132
+ const adapter = adapters[type];
133
+
134
+ try {
135
+ return await adapter.detect();
136
+ } catch {
137
+ return false;
138
+ }
139
+ }
140
+
141
+ /**
142
+ * Get adapter by type
143
+ */
144
+ export function getAdapterByType(
145
+ type: InstallationType,
146
+ options?: { hiveDir?: string }
147
+ ): InstallationAdapter {
148
+ const adapters = createAllAdapters({ hiveDir: options?.hiveDir });
149
+ return adapters[type];
150
+ }
151
+
152
+ /**
153
+ * Installation type display names
154
+ */
155
+ export const INSTALLATION_TYPE_NAMES: Record<InstallationType, string> = {
156
+ "docker": "Docker Compose",
157
+ "bun-global": "Bun Global (npm-style)",
158
+ "binary": "Standalone Binary",
159
+ };
160
+
161
+ /**
162
+ * Installation type descriptions
163
+ */
164
+ export const INSTALLATION_TYPE_DESCRIPTIONS: Record<InstallationType, string> = {
165
+ "docker": "Standard Docker Compose installation with named volumes",
166
+ "bun-global": "Global installation via `bun install -g @johpaz/hive-agents`",
167
+ "binary": "Standalone compiled binary with embedded UI (or Docker container)",
168
+ };
@@ -0,0 +1,80 @@
1
+ /**
2
+ * Installation Adapters
3
+ *
4
+ * Unified interface for different Hive installation methods.
5
+ * Each adapter handles the specifics of its installation type,
6
+ * providing a consistent API for gateway management.
7
+ *
8
+ * @example
9
+ * ```typescript
10
+ * import { detectAdapter } from "@johpaz/hive-agents-cli/adapters";
11
+ *
12
+ * const adapter = await detectAdapter();
13
+ * console.log(`Detected: ${adapter.name}`);
14
+ *
15
+ * const config = await adapter.getConfig();
16
+ * console.log(`Gateway port: ${config.gateway.port}`);
17
+ *
18
+ * const validation = await adapter.validate();
19
+ * if (!validation.valid) {
20
+ * console.error("Validation errors:", validation.errors);
21
+ * }
22
+ * ```
23
+ *
24
+ * @packageDocumentation
25
+ */
26
+
27
+ // Types and interfaces
28
+ export type {
29
+ InstallationType,
30
+ InstallationAdapter,
31
+ InstallationConfig,
32
+ InstallationPaths,
33
+ GatewayConfig,
34
+ ValidationResult,
35
+ AdapterOptions,
36
+ } from "./types";
37
+
38
+ // Constants and schemas
39
+ export {
40
+ DEFAULT_GATEWAY_CONFIG,
41
+ PORTS,
42
+ gatewayConfigSchema,
43
+ installationPathsSchema,
44
+ installationConfigSchema,
45
+ } from "./types";
46
+
47
+ // Configuration utilities
48
+ export {
49
+ getHiveDir,
50
+ getDefaultPaths,
51
+ loadEnvFile,
52
+ mergeEnv,
53
+ validateGatewayConfig,
54
+ validateInstallationConfig,
55
+ findFreePort,
56
+ isPortAvailable,
57
+ waitForPort,
58
+ waitForHttpPort,
59
+ expandPath,
60
+ getDistDir,
61
+ isDevMode,
62
+ isChildProcess,
63
+ getPlatformInfo,
64
+ } from "./config";
65
+
66
+ // Adapters
67
+ export { DockerAdapter } from "./docker";
68
+ export { BunGlobalAdapter } from "./bun-global";
69
+ export { BinaryAdapter } from "./binary";
70
+
71
+ // Factory and detection
72
+ export {
73
+ detectAdapter,
74
+ detectAllAdapters,
75
+ getInstallationType,
76
+ isInstallationTypeAvailable,
77
+ getAdapterByType,
78
+ INSTALLATION_TYPE_NAMES,
79
+ INSTALLATION_TYPE_DESCRIPTIONS,
80
+ } from "./factory";