@johpaz/hive-agents 0.0.34 → 0.0.36

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 (466) hide show
  1. package/README.md +64 -39
  2. package/dist/hive.js +4539 -4586
  3. package/dist/ui/assets/AgentCreateForm-tJZv9FZC.js +1 -0
  4. package/dist/ui/assets/AgentDetailPage-Du-mRcAX.js +1 -0
  5. package/dist/ui/assets/AgentNewPage-DIFYd_Ys.js +1 -0
  6. package/dist/ui/assets/{AgentsPage-DhCjvDNa.js → AgentsPage-YvSgWRiw.js} +7 -7
  7. package/dist/ui/assets/CanvasPage-DtMwGvxf.js +33 -0
  8. package/dist/ui/assets/ChannelsPage-BdBXWHjj.js +8 -0
  9. package/dist/ui/assets/DashboardPage-ghl1ZguH.js +6 -0
  10. package/dist/ui/assets/{LoginPage-B30OrEBy.js → LoginPage-CAmSI9Vy.js} +1 -1
  11. package/dist/ui/assets/LogsPage-DAPBHkwK.js +1 -0
  12. package/dist/ui/assets/MeetingPage-WjjGOqqU.js +1 -0
  13. package/dist/ui/assets/{NotFound-HD1Yp9yK.js → NotFound-BMeQSGcG.js} +1 -1
  14. package/dist/ui/assets/ProvidersPage-Ct6HsAi1.js +1 -0
  15. package/dist/ui/assets/{RecoverPage-CLF6buGP.js → RecoverPage-DpW3l-yv.js} +1 -1
  16. package/dist/ui/assets/SettingsPage-DBJ7_E6C.js +9 -0
  17. package/dist/ui/assets/SetupPage-DKmLVUaj.js +1 -0
  18. package/dist/ui/assets/{WebChatPage-Um3VANzn.js → WebChatPage-CVRcKept.js} +2 -2
  19. package/dist/ui/assets/accordion-C5d5Rm5z.js +1 -0
  20. package/dist/ui/assets/{activity-SfJ6UDF2.js → activity-c3pNngT_.js} +1 -1
  21. package/dist/ui/assets/alert-C-NE-P3s.js +1 -0
  22. package/dist/ui/assets/{alert-dialog-M893TdvF.js → alert-dialog-C5mzbHdP.js} +1 -1
  23. package/dist/ui/assets/arrow-left-CBcbX5EZ.js +1 -0
  24. package/dist/ui/assets/badge-ChpACfWO.js +1 -0
  25. package/dist/ui/assets/{calendar-CMMeWsP-.js → calendar-B-KZ9RQO.js} +1 -1
  26. package/dist/ui/assets/{card-C7P3W6_y.js → card-CNf6BS2e.js} +1 -1
  27. package/dist/ui/assets/chevron-left-D4U-5A27.js +1 -0
  28. package/dist/ui/assets/chevron-right-CR4Skrf3.js +1 -0
  29. package/dist/ui/assets/chevron-up-BYhk0K2J.js +1 -0
  30. package/dist/ui/assets/{circle-alert-7koABcbO.js → circle-alert-CyHDwUj8.js} +1 -1
  31. package/dist/ui/assets/circle-check-Bb54Ebmu.js +1 -0
  32. package/dist/ui/assets/{cpu-mBJgRJzM.js → cpu-Cdgc_B1K.js} +1 -1
  33. package/dist/ui/assets/dialog-QnZ0ad8O.js +1 -0
  34. package/dist/ui/assets/{download-oaofq4K1.js → download-C3ifGMjJ.js} +1 -1
  35. package/dist/ui/assets/dropdown-menu-BK-CO3Od.js +1 -0
  36. package/dist/ui/assets/{es-eUrU2hyB.js → es-NQNoaWDx.js} +1 -1
  37. package/dist/ui/assets/{external-link-SkkF2Z7B.js → external-link-BvxYeTP1.js} +1 -1
  38. package/dist/ui/assets/{eye-B8lq7sWG.js → eye-DqNTU_GD.js} +1 -1
  39. package/dist/ui/assets/{file-text-0oYol8Bb.js → file-text-BT_9S9SM.js} +1 -1
  40. package/dist/ui/assets/{folder-open-DVYu2lgk.js → folder-open-BhH8y9ac.js} +1 -1
  41. package/dist/ui/assets/gauge-D_TMa4i9.js +1 -0
  42. package/dist/ui/assets/{globe-BVPd5DRa.js → globe-DeCQTCDJ.js} +1 -1
  43. package/dist/ui/assets/{hexagon-BIAFUAlQ.js → hexagon-DsGOUl-H.js} +1 -1
  44. package/dist/ui/assets/{history-BUAnaMQo.js → history-BSG-Ypqf.js} +1 -1
  45. package/dist/ui/assets/index-B2fCYtTS.css +2 -0
  46. package/dist/ui/assets/index-DMCjjdqf.js +116 -0
  47. package/dist/ui/assets/{info-DWioleen.js → info-NwLoa2Mj.js} +1 -1
  48. package/dist/ui/assets/{key-BCGwSKKc.js → key-3EP0dhkT.js} +1 -1
  49. package/dist/ui/assets/label-D2H1IR_J.js +1 -0
  50. package/dist/ui/assets/loader-circle-CZNax6kS.js +1 -0
  51. package/dist/ui/assets/{lock-D7PCO7GC.js → lock-Ei1_J-Nq.js} +1 -1
  52. package/dist/ui/assets/{pause-CI1JFH6r.js → pause-BUqah9Bi.js} +1 -1
  53. package/dist/ui/assets/play-NcZ4swwL.js +1 -0
  54. package/dist/ui/assets/plus-CX1xyhp5.js +1 -0
  55. package/dist/ui/assets/progress-BherYzY6.js +1 -0
  56. package/dist/ui/assets/{refresh-cw-BLmKlO4J.js → refresh-cw-DaYdjQFk.js} +1 -1
  57. package/dist/ui/assets/{save-M1nv6H3P.js → save-CUdYyHNy.js} +1 -1
  58. package/dist/ui/assets/scroll-area-DkeyX32e.js +1 -0
  59. package/dist/ui/assets/{send-ijRfR0gp.js → send-B0H5SEIE.js} +1 -1
  60. package/dist/ui/assets/{settings-BvXhlJCF.js → settings-Ds4SqD8s.js} +1 -1
  61. package/dist/ui/assets/{slider-DrDFLwXh.js → slider-CsiUDxc3.js} +1 -1
  62. package/dist/ui/assets/{sparkles-C4MACMbE.js → sparkles-yUEb-7oH.js} +1 -1
  63. package/dist/ui/assets/{square-D_-gRT1l.js → square-BD81nFtN.js} +1 -1
  64. package/dist/ui/assets/switch-BDwN8RYV.js +1 -0
  65. package/dist/ui/assets/{table-DWEJJiuF.js → table-CSc8ubon.js} +1 -1
  66. package/dist/ui/assets/terminal-DN38Q456.js +1 -0
  67. package/dist/ui/assets/{textarea-CwPvQVAG.js → textarea-CXgXWKrT.js} +1 -1
  68. package/dist/ui/assets/{trash-2-Blkv31Dz.js → trash-2-CNjMkoq6.js} +1 -1
  69. package/dist/ui/assets/{triangle-alert-BKgbd30k.js → triangle-alert-C9Y8Ub4X.js} +1 -1
  70. package/dist/ui/assets/useProviders-C6_QHsEi.js +1 -0
  71. package/dist/ui/assets/{vendor-radix-JY4ncZrD.js → vendor-radix-cw1bQaVC.js} +4 -4
  72. package/dist/ui/assets/{vendor-react-CscwQerf.js → vendor-react-D4s9E-zj.js} +1 -1
  73. package/dist/ui/assets/{volume-2-BiUgObeI.js → volume-2-CeSXNDv4.js} +1 -1
  74. package/dist/ui/assets/{zap-CpyuQJEC.js → zap-hlXjpSeA.js} +1 -1
  75. package/dist/ui/dist/assets/AgentCreateForm-tJZv9FZC.js +1 -0
  76. package/dist/ui/dist/assets/AgentDetailPage-Du-mRcAX.js +1 -0
  77. package/dist/ui/dist/assets/AgentNewPage-DIFYd_Ys.js +1 -0
  78. package/dist/ui/dist/assets/AgentsPage-YvSgWRiw.js +10 -0
  79. package/dist/ui/dist/assets/CanvasPage-DtMwGvxf.js +33 -0
  80. package/dist/ui/dist/assets/ChannelsPage-BdBXWHjj.js +8 -0
  81. package/dist/ui/dist/assets/DashboardPage-ghl1ZguH.js +6 -0
  82. package/dist/ui/dist/assets/LoginPage-CAmSI9Vy.js +1 -0
  83. package/dist/ui/dist/assets/LogsPage-DAPBHkwK.js +1 -0
  84. package/dist/ui/dist/assets/MeetingPage-WjjGOqqU.js +1 -0
  85. package/dist/ui/dist/assets/NotFound-BMeQSGcG.js +1 -0
  86. package/dist/ui/dist/assets/ProvidersPage-Ct6HsAi1.js +1 -0
  87. package/dist/ui/dist/assets/RecoverPage-DpW3l-yv.js +1 -0
  88. package/dist/ui/dist/assets/SettingsPage-DBJ7_E6C.js +9 -0
  89. package/dist/ui/dist/assets/SetupPage-DKmLVUaj.js +1 -0
  90. package/dist/ui/dist/assets/WebChatPage-CVRcKept.js +16 -0
  91. package/dist/ui/dist/assets/accordion-C5d5Rm5z.js +1 -0
  92. package/dist/ui/dist/assets/activity-c3pNngT_.js +1 -0
  93. package/dist/ui/dist/assets/alert-C-NE-P3s.js +1 -0
  94. package/dist/ui/dist/assets/alert-dialog-C5mzbHdP.js +1 -0
  95. package/dist/ui/dist/assets/arrow-left-CBcbX5EZ.js +1 -0
  96. package/dist/ui/dist/assets/badge-ChpACfWO.js +1 -0
  97. package/dist/ui/dist/assets/calendar-B-KZ9RQO.js +1 -0
  98. package/dist/ui/dist/assets/card-CNf6BS2e.js +1 -0
  99. package/dist/ui/dist/assets/chevron-left-D4U-5A27.js +1 -0
  100. package/dist/ui/dist/assets/chevron-right-CR4Skrf3.js +1 -0
  101. package/dist/ui/dist/assets/chevron-up-BYhk0K2J.js +1 -0
  102. package/dist/ui/dist/assets/circle-alert-CyHDwUj8.js +1 -0
  103. package/dist/ui/dist/assets/circle-check-Bb54Ebmu.js +1 -0
  104. package/dist/ui/dist/assets/cpu-Cdgc_B1K.js +1 -0
  105. package/dist/ui/dist/assets/dialog-QnZ0ad8O.js +1 -0
  106. package/dist/ui/dist/assets/download-C3ifGMjJ.js +1 -0
  107. package/dist/ui/dist/assets/dropdown-menu-BK-CO3Od.js +1 -0
  108. package/dist/ui/dist/assets/es-NQNoaWDx.js +1 -0
  109. package/dist/ui/dist/assets/external-link-BvxYeTP1.js +1 -0
  110. package/dist/ui/dist/assets/eye-DqNTU_GD.js +1 -0
  111. package/dist/ui/dist/assets/file-text-BT_9S9SM.js +1 -0
  112. package/dist/ui/dist/assets/folder-open-BhH8y9ac.js +1 -0
  113. package/dist/ui/dist/assets/format-GVHeOyWI.js +1 -0
  114. package/dist/ui/dist/assets/gateway-url-COCbW0IR.js +1 -0
  115. package/dist/ui/dist/assets/gauge-D_TMa4i9.js +1 -0
  116. package/dist/ui/dist/assets/globe-DeCQTCDJ.js +1 -0
  117. package/dist/ui/dist/assets/hexagon-DsGOUl-H.js +1 -0
  118. package/dist/ui/dist/assets/history-BSG-Ypqf.js +1 -0
  119. package/dist/ui/dist/assets/index-B2fCYtTS.css +2 -0
  120. package/dist/ui/dist/assets/index-DMCjjdqf.js +116 -0
  121. package/dist/ui/dist/assets/info-NwLoa2Mj.js +1 -0
  122. package/dist/ui/dist/assets/key-3EP0dhkT.js +1 -0
  123. package/dist/ui/dist/assets/label-D2H1IR_J.js +1 -0
  124. package/dist/ui/dist/assets/loader-circle-CZNax6kS.js +1 -0
  125. package/dist/ui/dist/assets/lock-Ei1_J-Nq.js +1 -0
  126. package/dist/ui/dist/assets/pause-BUqah9Bi.js +1 -0
  127. package/dist/ui/dist/assets/play-NcZ4swwL.js +1 -0
  128. package/dist/ui/dist/assets/plus-CX1xyhp5.js +1 -0
  129. package/dist/ui/dist/assets/progress-BherYzY6.js +1 -0
  130. package/dist/ui/dist/assets/refresh-cw-DaYdjQFk.js +1 -0
  131. package/dist/ui/dist/assets/rolldown-runtime-S-ySWqyJ.js +1 -0
  132. package/dist/ui/dist/assets/save-CUdYyHNy.js +1 -0
  133. package/dist/ui/dist/assets/scroll-area-DkeyX32e.js +1 -0
  134. package/dist/ui/dist/assets/send-B0H5SEIE.js +1 -0
  135. package/dist/ui/dist/assets/settings-Ds4SqD8s.js +1 -0
  136. package/dist/ui/dist/assets/slider-CsiUDxc3.js +14 -0
  137. package/dist/ui/dist/assets/sparkles-yUEb-7oH.js +1 -0
  138. package/dist/ui/dist/assets/square-BD81nFtN.js +1 -0
  139. package/dist/ui/dist/assets/switch-BDwN8RYV.js +1 -0
  140. package/dist/ui/dist/assets/table-CSc8ubon.js +1 -0
  141. package/dist/ui/dist/assets/terminal-DN38Q456.js +1 -0
  142. package/dist/ui/dist/assets/textarea-CXgXWKrT.js +1 -0
  143. package/dist/ui/dist/assets/trash-2-CNjMkoq6.js +1 -0
  144. package/dist/ui/dist/assets/triangle-alert-C9Y8Ub4X.js +1 -0
  145. package/dist/ui/dist/assets/useProviders-C6_QHsEi.js +1 -0
  146. package/dist/ui/dist/assets/utils-3pnRFmFe.js +1 -0
  147. package/dist/ui/dist/assets/vendor-charts-Bu2lyBKP.js +65 -0
  148. package/dist/ui/dist/assets/vendor-query-DsWPbQdG.js +1 -0
  149. package/dist/ui/dist/assets/vendor-radix-cw1bQaVC.js +63 -0
  150. package/dist/ui/dist/assets/vendor-react-D4s9E-zj.js +1 -0
  151. package/dist/ui/dist/assets/vendor-router-C9pIYwbJ.js +3 -0
  152. package/dist/ui/dist/assets/volume-2-CeSXNDv4.js +1 -0
  153. package/dist/ui/dist/assets/zap-hlXjpSeA.js +1 -0
  154. package/dist/ui/dist/favicon.ico +0 -0
  155. package/dist/ui/dist/index.html +40 -0
  156. package/dist/ui/dist/placeholder.svg +1 -0
  157. package/dist/ui/index.html +7 -11
  158. package/package.json +137 -15
  159. package/packages/cli/src/adapters/binary.ts +461 -0
  160. package/packages/cli/src/adapters/bun-global.ts +378 -0
  161. package/packages/cli/src/adapters/config.ts +314 -0
  162. package/packages/cli/src/adapters/docker.ts +308 -0
  163. package/packages/cli/src/adapters/factory.ts +168 -0
  164. package/packages/cli/src/adapters/index.ts +80 -0
  165. package/packages/cli/src/adapters/types.ts +218 -0
  166. package/packages/cli/src/commands/agent-run.ts +168 -0
  167. package/packages/cli/src/commands/agents.ts +398 -0
  168. package/packages/cli/src/commands/chat.ts +142 -0
  169. package/packages/cli/src/commands/config.ts +49 -0
  170. package/packages/cli/src/commands/cron.ts +487 -0
  171. package/packages/cli/src/commands/dev.ts +58 -0
  172. package/packages/cli/src/commands/doctor.ts +320 -0
  173. package/packages/cli/src/commands/gateway.ts +719 -0
  174. package/packages/cli/src/commands/logs.ts +57 -0
  175. package/packages/cli/src/commands/mcp.ts +175 -0
  176. package/packages/cli/src/commands/message.ts +77 -0
  177. package/packages/cli/src/commands/migrate.ts +90 -0
  178. package/packages/cli/src/commands/onboard.ts +1656 -0
  179. package/packages/cli/src/commands/security.ts +144 -0
  180. package/packages/cli/src/commands/service.ts +50 -0
  181. package/packages/cli/src/commands/sessions.ts +116 -0
  182. package/packages/cli/src/commands/skills.ts +215 -0
  183. package/packages/cli/src/commands/update.ts +203 -0
  184. package/packages/cli/src/index.ts +210 -0
  185. package/packages/cli/src/ui-bundle.generated.ts +3 -0
  186. package/packages/cli/src/utils/token.ts +6 -0
  187. package/packages/core/src/agent/agent-loop.ts +691 -0
  188. package/packages/core/src/agent/compaction.ts +240 -0
  189. package/packages/core/src/agent/context-compiler.ts +467 -0
  190. package/packages/core/src/agent/context-guard.ts +91 -0
  191. package/packages/core/src/agent/conversation-store.ts +244 -0
  192. package/packages/core/src/agent/curator.ts +158 -0
  193. package/packages/core/src/agent/hooks.ts +166 -0
  194. package/packages/core/src/agent/llm-client.ts +167 -0
  195. package/packages/core/src/agent/llm-providers/anthropic.ts +212 -0
  196. package/packages/core/src/agent/llm-providers/deepseek.ts +8 -0
  197. package/packages/core/src/agent/llm-providers/gemini.ts +215 -0
  198. package/packages/core/src/agent/llm-providers/groq.ts +5 -0
  199. package/packages/core/src/agent/llm-providers/interface.ts +195 -0
  200. package/packages/core/src/agent/llm-providers/kimi.ts +8 -0
  201. package/packages/core/src/agent/llm-providers/local-llama.ts +37 -0
  202. package/packages/core/src/agent/llm-providers/mistral.ts +5 -0
  203. package/packages/core/src/agent/llm-providers/nvidia.ts +5 -0
  204. package/packages/core/src/agent/llm-providers/ollama.ts +175 -0
  205. package/packages/core/src/agent/llm-providers/openai-compat-base.ts +379 -0
  206. package/packages/core/src/agent/llm-providers/openai.ts +5 -0
  207. package/packages/core/src/agent/llm-providers/openrouter.ts +5 -0
  208. package/packages/core/src/agent/llm-providers/qwen.ts +5 -0
  209. package/packages/core/src/agent/native-tools.ts +31 -0
  210. package/packages/core/src/agent/playbook-selector.ts +147 -0
  211. package/packages/core/src/agent/prompt-builder.ts +169 -0
  212. package/packages/core/src/agent/providers/index.ts +204 -0
  213. package/packages/core/src/agent/providers.ts +1 -0
  214. package/packages/core/src/agent/reflector.ts +200 -0
  215. package/packages/core/src/agent/service.ts +267 -0
  216. package/packages/core/src/agent/skill-selector.ts +479 -0
  217. package/packages/core/src/agent/stuck-loop.ts +133 -0
  218. package/packages/core/src/agent/tool-selector.ts +569 -0
  219. package/packages/core/src/agent/tracer.ts +100 -0
  220. package/packages/core/src/auth/auth.ts +108 -0
  221. package/packages/core/src/auth/index.ts +1 -0
  222. package/packages/core/src/canvas/a2ui-tools.ts +255 -0
  223. package/packages/core/src/canvas/canvas-manager.ts +390 -0
  224. package/packages/core/src/canvas/canvas-tools.ts +448 -0
  225. package/packages/core/src/canvas/emitter.ts +149 -0
  226. package/packages/core/src/canvas/index.ts +3 -0
  227. package/packages/core/src/channels/base.ts +154 -0
  228. package/packages/core/src/channels/discord.ts +273 -0
  229. package/packages/core/src/channels/index.ts +7 -0
  230. package/packages/core/src/channels/manager.ts +450 -0
  231. package/packages/core/src/channels/slack.ts +323 -0
  232. package/packages/core/src/channels/telegram.ts +612 -0
  233. package/packages/core/src/channels/webchat.ts +139 -0
  234. package/packages/core/src/channels/whatsapp.ts +548 -0
  235. package/packages/core/src/config/index.ts +12 -0
  236. package/packages/core/src/config/loader.ts +569 -0
  237. package/packages/core/src/events/agent-bus.ts +460 -0
  238. package/packages/core/src/events/event-bus.ts +169 -0
  239. package/packages/core/src/gateway/channel-notify.ts +64 -0
  240. package/packages/core/src/gateway/helpers/cors.ts +32 -0
  241. package/packages/core/src/gateway/helpers/index.ts +4 -0
  242. package/packages/core/src/gateway/helpers/narration.ts +57 -0
  243. package/packages/core/src/gateway/helpers/path.ts +13 -0
  244. package/packages/core/src/gateway/helpers/redact.ts +61 -0
  245. package/packages/core/src/gateway/index.ts +5 -0
  246. package/packages/core/src/gateway/initializer.ts +363 -0
  247. package/packages/core/src/gateway/lane-queue.ts +169 -0
  248. package/packages/core/src/gateway/llm-local/client.ts +94 -0
  249. package/packages/core/src/gateway/llm-local/detector.ts +321 -0
  250. package/packages/core/src/gateway/llm-local/downloader.ts +216 -0
  251. package/packages/core/src/gateway/llm-local/index.ts +34 -0
  252. package/packages/core/src/gateway/llm-local/manager.ts +186 -0
  253. package/packages/core/src/gateway/llm-local/models.ts +149 -0
  254. package/packages/core/src/gateway/llm-local/server.ts +179 -0
  255. package/packages/core/src/gateway/resolver.ts +108 -0
  256. package/packages/core/src/gateway/router.ts +124 -0
  257. package/packages/core/src/gateway/routes/agents.ts +210 -0
  258. package/packages/core/src/gateway/routes/auth.ts +244 -0
  259. package/packages/core/src/gateway/routes/channels.ts +484 -0
  260. package/packages/core/src/gateway/routes/chat.ts +241 -0
  261. package/packages/core/src/gateway/routes/config.ts +12 -0
  262. package/packages/core/src/gateway/routes/cron-api.ts +544 -0
  263. package/packages/core/src/gateway/routes/ethics.ts +46 -0
  264. package/packages/core/src/gateway/routes/llm-local.ts +271 -0
  265. package/packages/core/src/gateway/routes/mcp.ts +319 -0
  266. package/packages/core/src/gateway/routes/meeting.ts +232 -0
  267. package/packages/core/src/gateway/routes/models.ts +163 -0
  268. package/packages/core/src/gateway/routes/multimodal.ts +93 -0
  269. package/packages/core/src/gateway/routes/providers.ts +220 -0
  270. package/packages/core/src/gateway/routes/setup.ts +441 -0
  271. package/packages/core/src/gateway/routes/skills.ts +115 -0
  272. package/packages/core/src/gateway/routes/system.ts +469 -0
  273. package/packages/core/src/gateway/routes/tasks.ts +44 -0
  274. package/packages/core/src/gateway/routes/tools.ts +59 -0
  275. package/packages/core/src/gateway/routes/tts-local.ts +388 -0
  276. package/packages/core/src/gateway/routes/users.ts +122 -0
  277. package/packages/core/src/gateway/routes/voice.ts +189 -0
  278. package/packages/core/src/gateway/routes/workspace.ts +281 -0
  279. package/packages/core/src/gateway/server.ts +2744 -0
  280. package/packages/core/src/gateway/session.ts +95 -0
  281. package/packages/core/src/gateway/slash-commands.ts +207 -0
  282. package/packages/core/src/gateway/tts/README.md +94 -0
  283. package/packages/core/src/gateway/tts/package.json +25 -0
  284. package/packages/core/src/gateway/tts/src/client.ts +59 -0
  285. package/packages/core/src/gateway/tts/src/detect.ts +42 -0
  286. package/packages/core/src/gateway/tts/src/index.ts +15 -0
  287. package/packages/core/src/gateway/tts/src/install.ts +129 -0
  288. package/packages/core/src/gateway/tts/src/models.ts +50 -0
  289. package/packages/core/src/gateway/tts/src/server.ts +252 -0
  290. package/packages/core/src/gateway/tts/voices/.gitkeep +0 -0
  291. package/packages/core/src/heartbeat/index.ts +157 -0
  292. package/packages/core/src/index.ts +56 -0
  293. package/packages/core/src/mcp/hot-reload.ts +148 -0
  294. package/packages/core/src/mcp/singleton.ts +21 -0
  295. package/packages/core/src/mcp/tool-sync.ts +176 -0
  296. package/packages/core/src/multimodal/index.ts +2 -0
  297. package/packages/core/src/multimodal/types.ts +28 -0
  298. package/packages/core/src/multimodal/vision-service.ts +283 -0
  299. package/packages/core/src/plugins/api.ts +128 -0
  300. package/packages/core/src/plugins/index.ts +2 -0
  301. package/packages/core/src/plugins/loader.ts +365 -0
  302. package/packages/core/src/resilience/circuit-breaker.ts +225 -0
  303. package/packages/core/src/scheduler/CronScheduler.ts +699 -0
  304. package/packages/core/src/scheduler/dag/AgentExecutor.ts +53 -0
  305. package/packages/core/src/scheduler/dag/DAGScheduler.ts +250 -0
  306. package/packages/core/src/scheduler/dag/EventBridge.ts +122 -0
  307. package/packages/core/src/scheduler/dag/TaskGraph.ts +192 -0
  308. package/packages/core/src/scheduler/dag/TaskNode.ts +97 -0
  309. package/packages/core/src/scheduler/dag/TaskResult.ts +22 -0
  310. package/packages/core/src/scheduler/dag/errors.ts +37 -0
  311. package/packages/core/src/scheduler/dag/index.ts +26 -0
  312. package/packages/core/src/scheduler/dag/presets/ResearchPreset.ts +97 -0
  313. package/packages/core/src/scheduler/dag/strategies/ParallelStrategy.ts +21 -0
  314. package/packages/core/src/scheduler/dag/strategies/PriorityStrategy.ts +46 -0
  315. package/packages/core/src/scheduler/index.ts +22 -0
  316. package/packages/core/src/scheduler/integration.ts +237 -0
  317. package/packages/core/src/scheduler/types.ts +164 -0
  318. package/packages/core/src/security/google-chat.ts +269 -0
  319. package/packages/core/src/security/index.ts +192 -0
  320. package/packages/core/src/security/pairing.ts +250 -0
  321. package/packages/core/src/security/rate-limit.ts +270 -0
  322. package/packages/core/src/security/signal.ts +321 -0
  323. package/packages/core/src/state/store.ts +312 -0
  324. package/packages/core/src/storage/crypto.ts +197 -0
  325. package/packages/core/src/storage/migrate.ts +147 -0
  326. package/packages/core/src/storage/onboarding.ts +1506 -0
  327. package/packages/core/src/storage/schema.ts +666 -0
  328. package/packages/core/src/storage/seed.ts +628 -0
  329. package/packages/core/src/storage/sqlite.ts +407 -0
  330. package/packages/core/src/storage/usage.ts +374 -0
  331. package/packages/core/src/tool-runtime/index.ts +476 -0
  332. package/packages/core/src/tool-runtime/tool-worker.ts +125 -0
  333. package/packages/core/src/tools/agents/get-available-models.ts +118 -0
  334. package/packages/core/src/tools/agents/index.ts +610 -0
  335. package/packages/core/src/tools/canvas/index.ts +420 -0
  336. package/packages/core/src/tools/cli/index.ts +142 -0
  337. package/packages/core/src/tools/core/index.ts +478 -0
  338. package/packages/core/src/tools/cron/index.ts +635 -0
  339. package/packages/core/src/tools/filesystem/fs-delete.ts +78 -0
  340. package/packages/core/src/tools/filesystem/fs-edit.ts +106 -0
  341. package/packages/core/src/tools/filesystem/fs-exists.ts +63 -0
  342. package/packages/core/src/tools/filesystem/fs-glob.ts +108 -0
  343. package/packages/core/src/tools/filesystem/fs-list.ts +129 -0
  344. package/packages/core/src/tools/filesystem/fs-read.ts +72 -0
  345. package/packages/core/src/tools/filesystem/fs-write.ts +67 -0
  346. package/packages/core/src/tools/filesystem/index.ts +34 -0
  347. package/packages/core/src/tools/filesystem/workspace-guard.ts +62 -0
  348. package/packages/core/src/tools/index.ts +197 -0
  349. package/packages/core/src/tools/meeting/index.ts +363 -0
  350. package/packages/core/src/tools/office/index.ts +47 -0
  351. package/packages/core/src/tools/office/office-escribir-docx.ts +192 -0
  352. package/packages/core/src/tools/office/office-escribir-pdf.ts +172 -0
  353. package/packages/core/src/tools/office/office-escribir-pptx.ts +174 -0
  354. package/packages/core/src/tools/office/office-escribir-xlsx.ts +116 -0
  355. package/packages/core/src/tools/office/office-leer-docx.ts +93 -0
  356. package/packages/core/src/tools/office/office-leer-pdf.ts +114 -0
  357. package/packages/core/src/tools/office/office-leer-pptx.ts +136 -0
  358. package/packages/core/src/tools/office/office-leer-xlsx.ts +124 -0
  359. package/packages/core/src/tools/types.ts +39 -0
  360. package/packages/core/src/tools/voice/index.ts +104 -0
  361. package/packages/core/src/tools/web/browser-click.ts +78 -0
  362. package/packages/core/src/tools/web/browser-extract.ts +139 -0
  363. package/packages/core/src/tools/web/browser-navigate.ts +106 -0
  364. package/packages/core/src/tools/web/browser-screenshot.ts +87 -0
  365. package/packages/core/src/tools/web/browser-script.ts +88 -0
  366. package/packages/core/src/tools/web/browser-service.ts +554 -0
  367. package/packages/core/src/tools/web/browser-type.ts +101 -0
  368. package/packages/core/src/tools/web/browser-wait.ts +136 -0
  369. package/packages/core/src/tools/web/index.ts +41 -0
  370. package/packages/core/src/tools/web/web-fetch.ts +78 -0
  371. package/packages/core/src/tools/web/web-search.ts +123 -0
  372. package/packages/core/src/utils/benchmark.ts +80 -0
  373. package/packages/core/src/utils/crypto.ts +73 -0
  374. package/packages/core/src/utils/date.ts +42 -0
  375. package/packages/core/src/utils/index.ts +5 -0
  376. package/packages/core/src/utils/logger.ts +389 -0
  377. package/packages/core/src/utils/retry.ts +70 -0
  378. package/packages/core/src/utils/toon.ts +253 -0
  379. package/packages/core/src/voice/index.ts +643 -0
  380. package/packages/mcp/src/config.ts +13 -0
  381. package/packages/mcp/src/index.ts +1 -0
  382. package/packages/mcp/src/logger.ts +47 -0
  383. package/packages/mcp/src/manager.ts +439 -0
  384. package/packages/mcp/src/transports/index.ts +67 -0
  385. package/packages/mcp/src/transports/sse.ts +238 -0
  386. package/packages/mcp/src/transports/websocket.ts +159 -0
  387. package/packages/skills/src/bundled/agents/agent_spawner/SKILL.md +167 -0
  388. package/packages/skills/src/bundled/agents/code_delegator/SKILL.md +156 -0
  389. package/packages/skills/src/bundled/agents/memory_manager/SKILL.md +143 -0
  390. package/packages/skills/src/bundled/agents/research_and_remember/SKILL.md +139 -0
  391. package/packages/skills/src/bundled/agents/task_orchestrator/SKILL.md +198 -0
  392. package/packages/skills/src/bundled/canvas/a2ui_dashboard/SKILL.md +176 -0
  393. package/packages/skills/src/bundled/canvas/a2ui_form/SKILL.md +202 -0
  394. package/packages/skills/src/bundled/canvas/a2ui_interactive/SKILL.md +206 -0
  395. package/packages/skills/src/bundled/canvas/canvas_dashboard/SKILL.md +146 -0
  396. package/packages/skills/src/bundled/canvas/canvas_interact/SKILL.md +148 -0
  397. package/packages/skills/src/bundled/canvas/canvas_report/SKILL.md +146 -0
  398. package/packages/skills/src/bundled/cli/cli_pipeline/SKILL.md +136 -0
  399. package/packages/skills/src/bundled/cli/cli_safe_exec/SKILL.md +125 -0
  400. package/packages/skills/src/bundled/cron_manager/SKILL.md +188 -0
  401. package/packages/skills/src/bundled/cron_reminder/SKILL.md +112 -0
  402. package/packages/skills/src/bundled/filesystem/file_manager/SKILL.md +118 -0
  403. package/packages/skills/src/bundled/filesystem/file_read_and_summarize/SKILL.md +108 -0
  404. package/packages/skills/src/bundled/filesystem/file_writer/SKILL.md +135 -0
  405. package/packages/skills/src/bundled/meeting/meeting_transcription/SKILL.md +213 -0
  406. package/packages/skills/src/bundled/office/office_document_manager/SKILL.md +262 -0
  407. package/packages/skills/src/bundled/search_knowledge/busqueda_fts5/SKILL.md +74 -0
  408. package/packages/skills/src/bundled/voice/voice_assistant/SKILL.md +174 -0
  409. package/packages/skills/src/bundled/voice/voice_input/SKILL.md +146 -0
  410. package/packages/skills/src/bundled/voice/voice_output/SKILL.md +151 -0
  411. package/packages/skills/src/bundled/web/browser_automate/SKILL.md +120 -0
  412. package/packages/skills/src/bundled/web/browser_scrape/SKILL.md +109 -0
  413. package/packages/skills/src/bundled/web/web_monitor/SKILL.md +127 -0
  414. package/packages/skills/src/bundled/web/web_research/SKILL.md +119 -0
  415. package/packages/skills/src/bundled-data.generated.ts +1964 -0
  416. package/packages/skills/src/index.ts +1 -0
  417. package/packages/skills/src/loader.ts +388 -0
  418. package/dist/ui/assets/AgentCreateForm-DS6yXjGV.js +0 -1
  419. package/dist/ui/assets/AgentDetailPage-Ud552U7_.js +0 -1
  420. package/dist/ui/assets/AgentNewPage-DWWs1P7s.js +0 -1
  421. package/dist/ui/assets/BridgePage-BD93aBKM.js +0 -1
  422. package/dist/ui/assets/CanvasPage-CM35yj0Q.js +0 -33
  423. package/dist/ui/assets/ChannelsPage-CtsWtJdc.js +0 -8
  424. package/dist/ui/assets/DashboardPage-BpiwR5Jg.js +0 -6
  425. package/dist/ui/assets/LogsPage-DqUsG3MW.js +0 -1
  426. package/dist/ui/assets/MeetingPage-C5B8-IzE.js +0 -1
  427. package/dist/ui/assets/ProjectsPage-zic2sjUf.js +0 -1
  428. package/dist/ui/assets/ProvidersPage-BxyIGKzh.js +0 -1
  429. package/dist/ui/assets/SettingsPage-CNFm3nun.js +0 -9
  430. package/dist/ui/assets/SetupPage-RBcjQtv7.js +0 -1
  431. package/dist/ui/assets/accordion-BEVqJf2A.js +0 -1
  432. package/dist/ui/assets/alert-BeGcM0nb.js +0 -1
  433. package/dist/ui/assets/api-q5Ax-vD2.js +0 -63
  434. package/dist/ui/assets/arrow-left-B_jlw8X_.js +0 -1
  435. package/dist/ui/assets/badge-pNhtItyt.js +0 -1
  436. package/dist/ui/assets/chevron-down-B16UVNlu.js +0 -1
  437. package/dist/ui/assets/chevron-left-_8ly7Fz0.js +0 -1
  438. package/dist/ui/assets/chevron-right-yzZLjezG.js +0 -1
  439. package/dist/ui/assets/chevron-up-CxKDQEE5.js +0 -1
  440. package/dist/ui/assets/circle-CFKiO9Ds.js +0 -1
  441. package/dist/ui/assets/circle-check-E2u7ZS2r.js +0 -1
  442. package/dist/ui/assets/circle-minus-1-TZF2pu.js +0 -1
  443. package/dist/ui/assets/circle-x-Cm3Sr-xb.js +0 -1
  444. package/dist/ui/assets/dialog-BaJbZsQF.js +0 -1
  445. package/dist/ui/assets/dist-DB-fE0Co.js +0 -1
  446. package/dist/ui/assets/dropdown-menu-DJoOchfz.js +0 -1
  447. package/dist/ui/assets/gauge-BTpFKuAj.js +0 -1
  448. package/dist/ui/assets/index-BN0875JH.css +0 -2
  449. package/dist/ui/assets/index-D4pdc0Uw.js +0 -54
  450. package/dist/ui/assets/label-C6tqnnKd.js +0 -1
  451. package/dist/ui/assets/loader-circle-CK3qRV3f.js +0 -1
  452. package/dist/ui/assets/pencil-BF2_XX-i.js +0 -1
  453. package/dist/ui/assets/play-DidATMfT.js +0 -1
  454. package/dist/ui/assets/plus-DXm1XDhQ.js +0 -1
  455. package/dist/ui/assets/progress-B1HC9cB_.js +0 -1
  456. package/dist/ui/assets/scroll-area-DKNpYkRA.js +0 -1
  457. package/dist/ui/assets/search-Co6mulZS.js +0 -1
  458. package/dist/ui/assets/switch-7AuR7x2g.js +0 -1
  459. package/dist/ui/assets/terminal-CjZu0OZ0.js +0 -1
  460. package/dist/ui/assets/useProviders-Bxsnav4y.js +0 -1
  461. package/dist/ui/assets/useWebSocketStore-ZCW_Nt1w.js +0 -1
  462. package/dist/ui/assets/x-5cXW_1ZS.js +0 -1
  463. /package/dist/ui/assets/{format-C0EOLKvf.js → format-GVHeOyWI.js} +0 -0
  464. /package/dist/ui/assets/{gateway-url-OqLaEDK-.js → gateway-url-COCbW0IR.js} +0 -0
  465. /package/dist/ui/assets/{utils-_qMjiZaF.js → utils-3pnRFmFe.js} +0 -0
  466. /package/dist/ui/assets/{vendor-router-DhLEd920.js → vendor-router-C9pIYwbJ.js} +0 -0
@@ -0,0 +1,238 @@
1
+ import type { Transport } from "@modelcontextprotocol/sdk/shared/transport.js";
2
+ import { logger } from "../logger";
3
+
4
+ export interface SSETransportConfig {
5
+ url: string; // URL base
6
+ headers?: Record<string, string>;
7
+ }
8
+
9
+ export class SSETransport implements Transport {
10
+ private baseUrl: string;
11
+ private messagesUrl: string | null = null; // Endpoint recibido del servidor
12
+
13
+ private headers: Record<string, string>;
14
+ private abortController: AbortController | null = null;
15
+ private cookies: string[] = [];
16
+ private startResolve: (() => void) | null = null;
17
+ private startReject: ((err: Error) => void) | null = null;
18
+ sessionId?: string;
19
+
20
+ onmessage: ((message: unknown) => void) | undefined;
21
+ onerror: ((error: Error) => void) | undefined;
22
+ onclose: (() => void) | undefined;
23
+
24
+ constructor(config: SSETransportConfig) {
25
+ this.baseUrl = config.url;
26
+ this.headers = config.headers ?? {};
27
+ }
28
+
29
+ async start(): Promise<void> {
30
+ this.abortController = new AbortController();
31
+
32
+ return new Promise(async (resolve, reject) => {
33
+ // Timeout fallback: if no endpoint received in 5s, continue anyway
34
+ const timeout = setTimeout(() => {
35
+ this.startResolve = null;
36
+ this.startReject = null;
37
+ resolve();
38
+ }, 5000);
39
+
40
+ this.startResolve = () => {
41
+ clearTimeout(timeout);
42
+ this.startResolve = null;
43
+ this.startReject = null;
44
+ resolve();
45
+ };
46
+
47
+ this.startReject = (err) => {
48
+ clearTimeout(timeout);
49
+ this.startResolve = null;
50
+ this.startReject = null;
51
+ reject(err);
52
+ };
53
+
54
+ try {
55
+ logger.debug(`[SSE] Connecting to: ${this.baseUrl}`);
56
+ const response = await fetch(this.baseUrl, {
57
+ method: "GET",
58
+ headers: {
59
+ "Accept": "application/json, text/event-stream",
60
+ "Cache-Control": "no-cache",
61
+ ...this.headers,
62
+ },
63
+ signal: this.abortController!.signal,
64
+ });
65
+
66
+ if (response.status === 405 || response.status === 400) {
67
+ logger.debug(`[SSE] GET not allowed (${response.status}), falling back to Streamable HTTP pattern for ${this.baseUrl}`);
68
+ this.startResolve();
69
+ return;
70
+ }
71
+
72
+ if (!response.ok) {
73
+ this.startReject(new Error(`MCP SSE connection failed: ${response.status} ${response.statusText}`));
74
+ return;
75
+ }
76
+
77
+ this.readSessionId(response);
78
+
79
+ if (response.body) {
80
+ this.startReading(response.body);
81
+ } else {
82
+ this.startResolve();
83
+ }
84
+ } catch (error: any) {
85
+ if (error.name !== "AbortError") {
86
+ this.startReject(error);
87
+ }
88
+ }
89
+ });
90
+ }
91
+
92
+ private readSessionId(response: Response) {
93
+ const sessionId = response.headers.get("x-session-id") ??
94
+ response.headers.get("mcp-session-id");
95
+ if (sessionId) {
96
+ this.sessionId = sessionId;
97
+ }
98
+
99
+ // Track cookies for session affinity (important for n8n/proxies)
100
+ const setCookie = response.headers.get("set-cookie");
101
+ if (setCookie) {
102
+ // Simple cookie extraction: just keep the keys and values
103
+ const newCookies = setCookie.split(',').map(c => c.split(';')[0].trim());
104
+ this.cookies = [...new Set([...this.cookies, ...newCookies])];
105
+ }
106
+ }
107
+
108
+ private startReading(stream: ReadableStream<Uint8Array>) {
109
+ const reader = stream.getReader();
110
+ const decoder = new TextDecoder();
111
+ let buffer = "";
112
+
113
+ this.processStream(reader, decoder, buffer).catch((error) => {
114
+ if (this.onerror && error.name !== "AbortError") {
115
+ this.onerror(error instanceof Error ? error : new Error(String(error)));
116
+ }
117
+ });
118
+ }
119
+
120
+ private async processStream(
121
+ reader: ReadableStreamDefaultReader<Uint8Array>,
122
+ decoder: TextDecoder,
123
+ buffer: string
124
+ ): Promise<void> {
125
+ try {
126
+ let eventType = "message";
127
+ let eventData = "";
128
+
129
+ while (true) {
130
+ const { done, value } = await reader.read();
131
+
132
+ if (done) {
133
+ return;
134
+ }
135
+
136
+ buffer += decoder.decode(value, { stream: true });
137
+
138
+ const lines = buffer.split("\n");
139
+ buffer = lines.pop() ?? "";
140
+
141
+ for (const line of lines) {
142
+ if (line.startsWith("event: ")) {
143
+ eventType = line.slice(7).trim();
144
+ } else if (line.startsWith("data: ")) {
145
+ const data = line.slice(6);
146
+ if (data.trim() === "[DONE]") {
147
+ this.onclose?.();
148
+ return;
149
+ }
150
+ eventData += data + "\n";
151
+ } else if (line === "") {
152
+ if (eventData) {
153
+ eventData = eventData.trim();
154
+ if (eventType === "endpoint") {
155
+ try {
156
+ this.messagesUrl = new URL(eventData, this.baseUrl).href;
157
+ logger.debug(`[SSE] Messages endpoint received: ${this.messagesUrl}`);
158
+ this.startResolve?.();
159
+ } catch (e) {
160
+ logger.warn(`[SSE] Failed to parse endpoint: ${eventData}`);
161
+ }
162
+ } else if (eventType === "message" || eventType === "") {
163
+ try {
164
+ const parsed = JSON.parse(eventData);
165
+ this.onmessage?.(parsed);
166
+ } catch {
167
+ // Ignorar heartbeats o no-JSON
168
+ }
169
+ }
170
+ eventData = "";
171
+ }
172
+ eventType = "message";
173
+ }
174
+ }
175
+ }
176
+ } catch (error: any) {
177
+ if (error.name !== "AbortError") {
178
+ this.onerror?.(error instanceof Error ? error : new Error(String(error)));
179
+ }
180
+ }
181
+ }
182
+
183
+ async close(): Promise<void> {
184
+ this.abortController?.abort();
185
+ this.abortController = null;
186
+ this.sessionId = undefined;
187
+ this.onclose?.();
188
+ }
189
+
190
+ async send(message: unknown): Promise<void> {
191
+ if (!this.abortController) {
192
+ throw new Error("SSE transport not started — llama start() primero");
193
+ }
194
+
195
+ const targetUrl = this.messagesUrl || this.baseUrl;
196
+
197
+ const response = await fetch(targetUrl, {
198
+ method: "POST",
199
+ headers: {
200
+ "Content-Type": "application/json",
201
+ "Accept": "application/json, text/event-stream",
202
+ ...this.headers,
203
+ // Streamable HTTP spec requires session ID as header, not query param
204
+ ...(this.sessionId ? { "mcp-session-id": this.sessionId } : {}),
205
+ ...(this.cookies.length > 0 ? { "Cookie": this.cookies.join('; ') } : {}),
206
+ },
207
+ body: JSON.stringify(message),
208
+ signal: this.abortController.signal,
209
+ });
210
+
211
+ this.readSessionId(response);
212
+
213
+ if (!response.ok) {
214
+ const body = await response.text().catch(() => "");
215
+ throw new Error(`MCP message failed (${response.status}): ${body || response.statusText}`);
216
+ }
217
+
218
+ const contentType = response.headers.get("content-type") ?? "";
219
+
220
+ if (contentType.includes("text/event-stream") && response.body) {
221
+ this.startReading(response.body);
222
+ }
223
+ else if (contentType.includes("application/json")) {
224
+ const text = await response.text();
225
+ if (text.trim()) {
226
+ try {
227
+ this.onmessage?.(JSON.parse(text));
228
+ } catch {
229
+ // ignored
230
+ }
231
+ }
232
+ }
233
+ }
234
+ }
235
+
236
+ export function createSSETransport(config: SSETransportConfig): Transport {
237
+ return new SSETransport(config) as unknown as Transport;
238
+ }
@@ -0,0 +1,159 @@
1
+ import type { Transport } from "@modelcontextprotocol/sdk/shared/transport.js";
2
+
3
+ export interface WebSocketTransportConfig {
4
+ url: string;
5
+ headers?: Record<string, string>;
6
+ reconnect?: boolean; // reconectar automáticamente si se cae (default: true)
7
+ reconnectDelay?: number; // ms entre intentos de reconexión (default: 3000)
8
+ reconnectMaxAttempts?: number; // máximo de intentos (default: 10)
9
+ }
10
+
11
+ export class WebSocketTransport implements Transport {
12
+ private url: string;
13
+ private ws: WebSocket | null = null;
14
+ private headers?: Record<string, string>;
15
+ private intentionallyClosed = false; // distingue close() manual de caída
16
+ private reconnectAttempts = 0;
17
+ private reconnectDelay: number;
18
+ private reconnectMaxAttempts: number;
19
+ private shouldReconnect: boolean;
20
+
21
+ onmessage: ((message: unknown) => void) | undefined;
22
+ onerror: ((error: Error) => void) | undefined;
23
+ onclose: (() => void) | undefined;
24
+
25
+ constructor(config: WebSocketTransportConfig) {
26
+ this.url = config.url;
27
+ this.headers = config.headers;
28
+ this.shouldReconnect = config.reconnect ?? true;
29
+ this.reconnectDelay = config.reconnectDelay ?? 3000;
30
+ this.reconnectMaxAttempts = config.reconnectMaxAttempts ?? 10;
31
+ }
32
+
33
+ async start(): Promise<void> {
34
+ this.intentionallyClosed = false;
35
+ this.reconnectAttempts = 0;
36
+ return this.connect();
37
+ }
38
+
39
+ private connect(): Promise<void> {
40
+ return new Promise((resolve, reject) => {
41
+
42
+ // CORRECCIÓN 1 — headers en Bun WebSocket
43
+ // Bun acepta las opciones como segundo argumento cuando no hay subprotocols,
44
+ // o como objeto con `headers` dentro de un array de subprotocols vacío.
45
+ // La forma más segura y compatible:
46
+ const ws = this.headers && Object.keys(this.headers).length > 0
47
+ ? new WebSocket(this.url, {
48
+ // @ts-expect-error — Bun extiende la API estándar de WebSocket
49
+ headers: this.headers,
50
+ })
51
+ : new WebSocket(this.url);
52
+
53
+ this.ws = ws;
54
+ let resolved = false;
55
+
56
+ ws.onopen = () => {
57
+ resolved = true;
58
+ this.reconnectAttempts = 0; // reset contador al conectar exitosamente
59
+ resolve();
60
+ };
61
+
62
+ ws.onmessage = (event: MessageEvent) => {
63
+ try {
64
+ const data = JSON.parse(event.data as string);
65
+ this.onmessage?.(data);
66
+ } catch {
67
+ // Ignorar mensajes no-JSON (ping/pong, heartbeats)
68
+ }
69
+ };
70
+
71
+ // CORRECCIÓN 2 — separar el error de conexión del error post-conexión
72
+ ws.onerror = (event: Event) => {
73
+ const error =
74
+ (event as ErrorEvent).error ??
75
+ new Error(`WebSocket error en ${this.url}`);
76
+
77
+ if (!resolved) {
78
+ // Error durante la conexión inicial → rechazar la promesa
79
+ reject(error);
80
+ } else {
81
+ // Error después de conectar → notificar sin rechazar
82
+ this.onerror?.(error instanceof Error ? error : new Error(String(error)));
83
+ }
84
+ };
85
+
86
+ // CORRECCIÓN 3 — reconexión automática en cierre inesperado
87
+ ws.onclose = (event: CloseEvent) => {
88
+ this.ws = null;
89
+
90
+ if (this.intentionallyClosed) {
91
+ // Cierre manual con close() — notificar y no reconectar
92
+ this.onclose?.();
93
+ return;
94
+ }
95
+
96
+ if (!resolved) {
97
+ // Cierre antes de que se abriera → rechazar la promesa
98
+ reject(new Error(
99
+ `WebSocket cerrado antes de conectar — code: ${event.code}, reason: ${event.reason}`
100
+ ));
101
+ return;
102
+ }
103
+
104
+ // Cierre inesperado después de conectar
105
+ if (
106
+ this.shouldReconnect &&
107
+ this.reconnectAttempts < this.reconnectMaxAttempts
108
+ ) {
109
+ this.reconnectAttempts++;
110
+ const delay = this.reconnectDelay * this.reconnectAttempts; // backoff lineal
111
+
112
+ setTimeout(async () => {
113
+ try {
114
+ await this.connect();
115
+ } catch (err) {
116
+ this.onerror?.(err instanceof Error ? err : new Error(String(err)));
117
+ this.onclose?.();
118
+ }
119
+ }, delay);
120
+ } else {
121
+ // Sin más intentos → notificar cierre definitivo
122
+ this.onerror?.(new Error(
123
+ `WebSocket desconectado después de ${this.reconnectAttempts} intentos — ${this.url}`
124
+ ));
125
+ this.onclose?.();
126
+ }
127
+ };
128
+ });
129
+ }
130
+
131
+ async close(): Promise<void> {
132
+ this.intentionallyClosed = true; // marcar como cierre intencional
133
+ if (this.ws) {
134
+ // Código 1000 = cierre normal
135
+ this.ws.close(1000, "Client closed connection");
136
+ this.ws = null;
137
+ }
138
+ }
139
+
140
+ async send(message: unknown): Promise<void> {
141
+ if (!this.ws || this.ws.readyState !== WebSocket.OPEN) {
142
+ throw new Error(
143
+ `WebSocket no está conectado — readyState: ${this.ws?.readyState ?? "null"}`
144
+ );
145
+ }
146
+ this.ws.send(JSON.stringify(message));
147
+ }
148
+
149
+ // Útil para health checks desde el MCP client
150
+ get isConnected(): boolean {
151
+ return this.ws !== null && this.ws.readyState === WebSocket.OPEN;
152
+ }
153
+ }
154
+
155
+ export function createWebSocketTransport(
156
+ config: WebSocketTransportConfig
157
+ ): Transport {
158
+ return new WebSocketTransport(config) as unknown as Transport;
159
+ }
@@ -0,0 +1,167 @@
1
+ ---
2
+ name: agent_spawner
3
+ description: "Create and manage specialized worker agents with optimal tool assignments and lifecycle control"
4
+ version: 1.1.0
5
+ author: Hive Team
6
+ icon: "🤖"
7
+ category: agents
8
+ permissions:
9
+ - agent_manage
10
+ dependencies: []
11
+ tools: [get_available_models, find_agent, create_agent, archive_agent]
12
+
13
+ # Structured skill fields
14
+ triggers:
15
+ - "creá un agente"
16
+ - "create agent"
17
+ - "creá un worker"
18
+ - "create worker"
19
+ - "nuevo agente"
20
+ - "new agent"
21
+ - "agente especializado"
22
+ - "specialized agent"
23
+ - "buscá un agente"
24
+ - "find agent"
25
+ - "archivá agente"
26
+ - "archive agent"
27
+ - "worker inactivo"
28
+ - "inactive worker"
29
+
30
+ preferred_agents: []
31
+
32
+ steps:
33
+ - step: 1
34
+ action: find_agent
35
+ instruction: "Search for existing agents before creating new one"
36
+ params:
37
+ search: "agent name or specialty"
38
+ status: "idle"
39
+ output: existing_agents
40
+
41
+ - step: 2
42
+ action: decision_reuse_or_create
43
+ instruction: "If suitable agent exists, reuse it. Otherwise, proceed to create"
44
+ output: decision
45
+
46
+ - step: 3
47
+ action: get_available_models
48
+ instruction: "Query available providers and models from database to select optimal model for the agent"
49
+ params:
50
+ capabilities: "required capability (coding, chat, analysis, vision)"
51
+ modelType: "llm (default)"
52
+ output: available_models
53
+
54
+ - step: 4
55
+ action: create_agent
56
+ instruction: "Create new worker with focused system_prompt, minimal tools, and optimal provider/model"
57
+ params:
58
+ name: "specialty_name"
59
+ description: "Clear specialty description"
60
+ system_prompt: "Focused instructions for role"
61
+ tools_json: ["minimal", "required", "tools"]
62
+ providerId: "selected from get_available_models"
63
+ modelId: "selected from get_available_models"
64
+ output: new_agent_id
65
+
66
+ - step: 5
67
+ action: archive_agent (if needed)
68
+ instruction: "Archive workers that are no longer needed or inactive >14 days"
69
+ params:
70
+ agent_id: "agent to archive"
71
+ reason: "no longer needed"
72
+ output: archived
73
+
74
+ rules:
75
+ - "ALWAYS use find_agent BEFORE create_agent — never duplicate workers"
76
+ - "ALWAYS use get_available_models BEFORE create_agent — providerId y modelId son OBLIGATORIOS"
77
+ - "Workers have role='worker', coordinator has role='coordinator'"
78
+ - "Assign MINIMUM required tools (principle of least privilege)"
79
+ - "system_prompt must be specific and focused on specialty"
80
+ - "Use descriptive names that indicate agent's purpose"
81
+ - "Archive agents inactive >14 days (Curator does this automatically)"
82
+
83
+ output_format:
84
+ structure: markdown
85
+ sections:
86
+ - "action_taken"
87
+ - "agent_name"
88
+ - "specialty"
89
+ - "tools_assigned"
90
+ - "status"
91
+ max_length: "Agent creation/management summary"
92
+
93
+ examples:
94
+ - user_input: "creá un agente para investigación web"
95
+ expected_behavior: "find_agent('researcher') → if not exists, create_agent({ name: 'ai_researcher', tools: ['web_search', 'web_fetch'] })"
96
+
97
+ - user_input: "hay un worker para escribir contenido"
98
+ expected_behavior: "find_agent({ search: 'writer' }) → return existing writer agents"
99
+
100
+ - user_input: "archivá los agentes inactivos"
101
+ expected_behavior: "find_agent({ status: 'idle' }) → archive_agent for those inactive >14 days"
102
+ ---
103
+
104
+ # Agent Spawner Skill
105
+
106
+ ## Cuándo se Activa
107
+
108
+ Para crear nuevos workers especializados o gestionar el ciclo de vida de agents existentes.
109
+
110
+ ## Herramientas Disponibles
111
+
112
+ | Tool | Qué hace | Cuándo usarla |
113
+ |------|----------|---------------|
114
+ | `get_available_models` | Consulta providers y modelos activos de la BD | **ANTES de crear** — seleccionar modelo óptimo |
115
+ | `find_agent` | Busca agents existentes | **PRIMERO** — antes de crear |
116
+ | `create_agent` | Crea nuevo worker | Si no existe apto |
117
+ | `archive_agent` | Archiva worker | Limpieza, inactivos |
118
+
119
+ ## Workflow
120
+
121
+ ### Crear Agent
122
+ 1. **Buscar** → `find_agent({ search })` — ¿existe?
123
+ 2. **Si existe** → Reutilizar
124
+ 3. **Si no existe** → `get_available_models({ capabilities })` — seleccionar modelo óptimo
125
+ 4. **Crear** → `create_agent({...})` con providerId y modelId seleccionados
126
+
127
+ ### Create Agent Config
128
+ ```javascript
129
+ // 1. Consultar modelos disponibles para coding
130
+ get_available_models({ capabilities: "coding" })
131
+ // → [{ providerId: "openai", modelId: "gpt-4o", contextWindow: 128000 }, ...]
132
+
133
+ // 2. Crear agente con modelo óptimo (providerId y modelId son OBLIGATORIOS)
134
+ create_agent({
135
+ name: "ai_coder",
136
+ description: "Especialista en código y refactorización",
137
+ system_prompt: `
138
+ Sos desarrollador experto. Tu rol:
139
+ 1. Escribir código limpio y testeable
140
+ 2. Refactorizar código existente
141
+ 3. Revisar PRs y sugerir mejoras
142
+ `,
143
+ tools_json: ["fs_read", "fs_write", "fs_edit", "cli_exec"],
144
+ providerId: "openai", // OBLIGATORIO - seleccionado de get_available_models
145
+ modelId: "gpt-4o", // OBLIGATORIO - seleccionado de get_available_models
146
+ tone: "professional",
147
+ max_iterations: 15
148
+ })
149
+ ```
150
+
151
+ ## Mejores Prácticas
152
+
153
+ - **Buscar primero**: Nunca duplicar workers
154
+ - **Consultar modelos**: Usar `get_available_models` ANTES de crear para seleccionar provider/model óptimo
155
+ - **System prompt específico**: Enfocado en especialidad
156
+ - **Mínimo privilegio**: Solo tools necesarias
157
+ - **Nombres descriptivos**: Que indiquen propósito
158
+ - **Modelo adecuado**: Seleccionar según capacidad requerida (coding, chat, analysis, vision)
159
+
160
+ ## Errores a Evitar
161
+
162
+ - ❌ Crear sin buscar primero
163
+ - ❌ Crear sin consultar modelos disponibles (`get_available_models`)
164
+ - ❌ Usar modelo inadecuado para la tarea (ej: modelo pequeño para coding complejo)
165
+ - ❌ Tools en exceso ("por las dudas")
166
+ - ❌ System prompt genérico
167
+ - ❌ Nombres vagos ("worker1", "agent1")