@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,97 @@
1
+ /**
2
+ * DAGScheduler — TaskNode
3
+ *
4
+ * Represents a single node in the task graph. Tracks its own state,
5
+ * retry count, timing, and the results of its dependencies.
6
+ */
7
+
8
+ export type NodeStatus = "PENDING" | "READY" | "RUNNING" | "COMPLETED" | "FAILED"
9
+
10
+ export interface TaskNodeConfig {
11
+ /** Unique ID within this graph (can match SQLite task.id) */
12
+ id: string
13
+ /** agents.id of the worker agent to execute */
14
+ agentId: string
15
+ /** Human-readable name for logging */
16
+ name: string
17
+ /** Task description passed to the worker */
18
+ taskDescription: string
19
+ /** IDs of other TaskNodes that must complete first */
20
+ deps: string[]
21
+ /** Timeout in ms before the task is cancelled. Default: 120_000 */
22
+ timeout?: number
23
+ /** How many times to retry on failure. Default: 1 */
24
+ maxRetries?: number
25
+ /** Priority hint for PriorityStrategy. Higher = runs first. Default: 0 */
26
+ priority?: number
27
+ /** Optional arbitrary metadata forwarded to the worker */
28
+ metadata?: Record<string, unknown>
29
+ }
30
+
31
+ export class TaskNode {
32
+ readonly id: string
33
+ readonly agentId: string
34
+ readonly name: string
35
+ readonly taskDescription: string
36
+ readonly deps: string[]
37
+ readonly timeout: number
38
+ readonly maxRetries: number
39
+ readonly priority: number
40
+ readonly metadata: Record<string, unknown>
41
+
42
+ status: NodeStatus = "PENDING"
43
+ retryCount = 0
44
+ startedAt?: number
45
+ completedAt?: number
46
+ result?: string
47
+ error?: string
48
+
49
+ constructor(config: TaskNodeConfig) {
50
+ this.id = config.id
51
+ this.agentId = config.agentId
52
+ this.name = config.name
53
+ this.taskDescription = config.taskDescription
54
+ this.deps = config.deps
55
+ this.timeout = config.timeout ?? 120_000
56
+ this.maxRetries = config.maxRetries ?? 1
57
+ this.priority = config.priority ?? 0
58
+ this.metadata = config.metadata ?? {}
59
+ }
60
+
61
+ /** Returns true if all dependency IDs are in the completed set */
62
+ canStart(completedIds: Set<string>): boolean {
63
+ return this.deps.every(dep => completedIds.has(dep))
64
+ }
65
+
66
+ markReady(): void {
67
+ this.status = "READY"
68
+ }
69
+
70
+ markRunning(): void {
71
+ this.status = "RUNNING"
72
+ this.startedAt = Date.now()
73
+ }
74
+
75
+ markCompleted(result: string): void {
76
+ this.status = "COMPLETED"
77
+ this.completedAt = Date.now()
78
+ this.result = result
79
+ }
80
+
81
+ markFailed(error: string): void {
82
+ this.status = "FAILED"
83
+ this.completedAt = Date.now()
84
+ this.error = error
85
+ }
86
+
87
+ canRetry(): boolean {
88
+ return this.retryCount < this.maxRetries
89
+ }
90
+
91
+ /** Elapsed time in seconds since start, or total duration if done */
92
+ elapsedSeconds(): number {
93
+ if (!this.startedAt) return 0
94
+ const end = this.completedAt ?? Date.now()
95
+ return Math.round((end - this.startedAt) / 1000)
96
+ }
97
+ }
@@ -0,0 +1,22 @@
1
+ /**
2
+ * DAGScheduler — Result types
3
+ */
4
+
5
+ export interface NodeSummary {
6
+ id: string
7
+ name: string
8
+ status: "COMPLETED" | "FAILED"
9
+ durationMs: number
10
+ result?: string
11
+ error?: string
12
+ retries: number
13
+ }
14
+
15
+ export interface DAGResult {
16
+ swarmId: string
17
+ totalDurationMs: number
18
+ completed: NodeSummary[]
19
+ failed: NodeSummary[]
20
+ /** true if all nodes completed successfully */
21
+ success: boolean
22
+ }
@@ -0,0 +1,37 @@
1
+ /**
2
+ * DAGScheduler — Custom errors
3
+ */
4
+
5
+ export class CyclicDependencyError extends Error {
6
+ readonly cycle: string[]
7
+
8
+ constructor(cycle: string[]) {
9
+ super(`Cyclic dependency detected: ${cycle.join(" → ")}`)
10
+ this.name = "CyclicDependencyError"
11
+ this.cycle = cycle
12
+ }
13
+ }
14
+
15
+ export class TaskTimeoutError extends Error {
16
+ readonly nodeId: string
17
+ readonly timeoutMs: number
18
+
19
+ constructor(nodeId: string, timeoutMs: number) {
20
+ super(`Task "${nodeId}" timed out after ${timeoutMs}ms`)
21
+ this.name = "TaskTimeoutError"
22
+ this.nodeId = nodeId
23
+ this.timeoutMs = timeoutMs
24
+ }
25
+ }
26
+
27
+ export class TaskFailureError extends Error {
28
+ readonly nodeId: string
29
+ readonly cause: Error
30
+
31
+ constructor(nodeId: string, cause: Error) {
32
+ super(`Task "${nodeId}" failed: ${cause.message}`)
33
+ this.name = "TaskFailureError"
34
+ this.nodeId = nodeId
35
+ this.cause = cause
36
+ }
37
+ }
@@ -0,0 +1,26 @@
1
+ /**
2
+ * DAGScheduler — Public API
3
+ *
4
+ * Usage:
5
+ * import { DAGScheduler, TaskGraph, ParallelStrategy } from "./dag"
6
+ */
7
+
8
+ export { DAGScheduler } from "./DAGScheduler"
9
+ export type { DAGSchedulerOptions } from "./DAGScheduler"
10
+
11
+ export { TaskGraph } from "./TaskGraph"
12
+ export { TaskNode } from "./TaskNode"
13
+ export type { TaskNodeConfig, NodeStatus } from "./TaskNode"
14
+ export type { DAGResult, NodeSummary } from "./TaskResult"
15
+
16
+ export { AgentExecutor } from "./AgentExecutor"
17
+ export { EventBridge } from "./EventBridge"
18
+
19
+ export { CyclicDependencyError, TaskTimeoutError, TaskFailureError } from "./errors"
20
+
21
+ export { ParallelStrategy } from "./strategies/ParallelStrategy"
22
+ export type { ExecutionStrategy } from "./strategies/ParallelStrategy"
23
+ export { PriorityStrategy } from "./strategies/PriorityStrategy"
24
+
25
+ export { createResearchGraph } from "./presets/ResearchPreset"
26
+ export type { ResearchAgentIds } from "./presets/ResearchPreset"
@@ -0,0 +1,97 @@
1
+ /**
2
+ * ResearchPreset — Pre-configured DAG for general research swarms
3
+ *
4
+ * Dependency graph:
5
+ * ResearchAgent ─┐
6
+ * StrategyAgent ├── SynthesisAgent (all three run in parallel)
7
+ * DesignAgent ─┘
8
+ *
9
+ * All three parallel agents are fully independent. SynthesisAgent
10
+ * waits for all three and combines their outputs into a final deliverable.
11
+ *
12
+ * Usage:
13
+ * const graph = createResearchGraph(
14
+ * { research: "agent-uuid-1", strategy: "agent-uuid-2",
15
+ * design: "agent-uuid-3", synthesis: "agent-uuid-4" },
16
+ * "Design a distributed caching strategy for the platform"
17
+ * )
18
+ * await scheduler.execute(graph, { projectId, coordinatorId })
19
+ */
20
+
21
+ import { TaskGraph } from "../TaskGraph"
22
+ import type { TaskNodeConfig } from "../TaskNode"
23
+
24
+ export interface ResearchAgentIds {
25
+ research: string
26
+ strategy: string
27
+ design: string
28
+ synthesis: string
29
+ }
30
+
31
+ export function createResearchGraph(
32
+ agentIds: ResearchAgentIds,
33
+ topic: string,
34
+ options: {
35
+ researchTimeout?: number
36
+ strategyTimeout?: number
37
+ designTimeout?: number
38
+ synthesisTimeout?: number
39
+ } = {}
40
+ ): TaskGraph {
41
+ const nodes: TaskNodeConfig[] = [
42
+ {
43
+ id: "research",
44
+ agentId: agentIds.research,
45
+ name: "ResearchAgent",
46
+ taskDescription:
47
+ `Research the following topic using available knowledge bases and sources: "${topic}".` +
48
+ ` Output: { findings: string[], sources: string[], keyInsights: string[] }.`,
49
+ deps: [],
50
+ timeout: options.researchTimeout ?? 120_000,
51
+ maxRetries: 1,
52
+ priority: 8,
53
+ },
54
+ {
55
+ id: "strategy",
56
+ agentId: agentIds.strategy,
57
+ name: "StrategyAgent",
58
+ taskDescription:
59
+ `Design a strategic framework or approach for: "${topic}".` +
60
+ ` Work independently — you will NOT have the research findings yet.` +
61
+ ` Output: { approach: string, phases: string[], risks: string[], successMetrics: string[] }.`,
62
+ deps: [],
63
+ timeout: options.strategyTimeout ?? 90_000,
64
+ maxRetries: 1,
65
+ priority: 8,
66
+ },
67
+ {
68
+ id: "design",
69
+ agentId: agentIds.design,
70
+ name: "DesignAgent",
71
+ taskDescription:
72
+ `Design the structure or architecture for: "${topic}".` +
73
+ ` Work independently — focus on structure, not content.` +
74
+ ` Output: { structure: string, components: string[], diagram: string (ASCII or Mermaid) }.`,
75
+ deps: [],
76
+ timeout: options.designTimeout ?? 90_000,
77
+ maxRetries: 1,
78
+ priority: 8,
79
+ },
80
+ {
81
+ id: "synthesis",
82
+ agentId: agentIds.synthesis,
83
+ name: "SynthesisAgent",
84
+ taskDescription:
85
+ `Synthesize the research findings, strategic framework, and design structure into a cohesive deliverable.` +
86
+ ` The dependency context contains all three agents' outputs.` +
87
+ ` Topic: "${topic}".` +
88
+ ` Output a comprehensive, well-structured document that combines all inputs coherently.`,
89
+ deps: ["research", "strategy", "design"],
90
+ timeout: options.synthesisTimeout ?? 150_000,
91
+ maxRetries: 2,
92
+ priority: 0,
93
+ },
94
+ ]
95
+
96
+ return new TaskGraph(nodes)
97
+ }
@@ -0,0 +1,21 @@
1
+ /**
2
+ * ParallelStrategy — executes DAG nodes in parallel as slots become available
3
+ *
4
+ * Picks nodes from the READY queue in FIFO order.
5
+ * Nodes are launched immediately when a worker slot is available,
6
+ * otherwise they wait in the queue.
7
+ */
8
+
9
+ import { TaskNode } from "../TaskNode"
10
+
11
+ export interface ExecutionStrategy {
12
+ pick(queue: TaskNode[]): TaskNode | undefined
13
+ /** Called once at graph start to allow strategy-level initialization */
14
+ initialize?(nodes: Map<string, TaskNode>): void
15
+ }
16
+
17
+ export class ParallelStrategy implements ExecutionStrategy {
18
+ pick(queue: TaskNode[]): TaskNode | undefined {
19
+ return queue.shift()
20
+ }
21
+ }
@@ -0,0 +1,46 @@
1
+ /**
2
+ * PriorityStrategy — for research swarms
3
+ *
4
+ * Boosts the priority of nodes on the critical path so they run first
5
+ * when slots are limited. Within same effective priority, FIFO order applies.
6
+ */
7
+
8
+ import { TaskNode } from "../TaskNode"
9
+ import { TaskGraph } from "../TaskGraph"
10
+ import type { ExecutionStrategy } from "./ParallelStrategy"
11
+
12
+ export class PriorityStrategy implements ExecutionStrategy {
13
+ private criticalPathSet = new Set<string>()
14
+ private readonly CRITICAL_BOOST = 1000
15
+
16
+ initialize(nodes: Map<string, TaskNode>): void {
17
+ // Build a temporary graph for critical path calculation
18
+ const configs = [...nodes.values()].map(n => ({
19
+ id: n.id,
20
+ agentId: n.agentId,
21
+ name: n.name,
22
+ taskDescription: n.taskDescription,
23
+ deps: n.deps,
24
+ timeout: n.timeout,
25
+ maxRetries: n.maxRetries,
26
+ priority: n.priority,
27
+ }))
28
+ const graph = new TaskGraph(configs)
29
+ for (const id of graph.getCriticalPath()) {
30
+ this.criticalPathSet.add(id)
31
+ }
32
+ }
33
+
34
+ pick(queue: TaskNode[]): TaskNode | undefined {
35
+ if (queue.length === 0) return undefined
36
+
37
+ // Sort: critical path nodes first, then by node.priority desc, then FIFO (stable)
38
+ queue.sort((a, b) => {
39
+ const aBoost = this.criticalPathSet.has(a.id) ? this.CRITICAL_BOOST : 0
40
+ const bBoost = this.criticalPathSet.has(b.id) ? this.CRITICAL_BOOST : 0
41
+ return (b.priority + bBoost) - (a.priority + aBoost)
42
+ })
43
+
44
+ return queue.shift()
45
+ }
46
+ }
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Hive Scheduler Module
3
+ *
4
+ * Croner-based scheduling system for Hive.
5
+ * Supports recurring and one-shot cron jobs with SQLite persistence.
6
+ */
7
+
8
+ export { CronScheduler } from "./CronScheduler";
9
+ export { executeScheduledTask, createTaskHandler, notifyTaskCompletion, setSchedulerForCleanup } from "./integration";
10
+ export type {
11
+ CronJob,
12
+ TaskRun,
13
+ CreateCronJobInput,
14
+ UpdateCronJobInput,
15
+ CronJobStatus,
16
+ CronJobExecutionHandler,
17
+ CronJobExecutionResult,
18
+ TaskType,
19
+ TaskStatus,
20
+ TaskRunStatus,
21
+ CronerOptions,
22
+ } from "./types";
@@ -0,0 +1,237 @@
1
+ /**
2
+ * Hive Scheduler - Pipeline Integration
3
+ *
4
+ * Integrates cron jobs with the Hive agent pipeline.
5
+ * Converts cron jobs into system messages that flow through the agent system.
6
+ */
7
+
8
+ import type { CronJob, CronJobExecutionResult } from "./types";
9
+ import { logger } from "../utils/logger";
10
+ import { getDb } from "../storage/sqlite";
11
+ import { buildAgentLoop } from "../agent/agent-loop";
12
+ import { resolveAgentId } from "../storage/onboarding";
13
+ import { sendToUserChannel } from "../gateway/channel-notify";
14
+ import { addMessage } from "../agent/conversation-store";
15
+ import { resolveBestChannel } from "../tools/cron/index";
16
+
17
+ const log = logger.child("SchedulerIntegration");
18
+
19
+ let _scheduler: { runCleanup(): void } | null = null;
20
+
21
+ export function setSchedulerForCleanup(scheduler: { runCleanup(): void }): void {
22
+ _scheduler = scheduler;
23
+ }
24
+
25
+ /**
26
+ * Execute a cron job through the agent pipeline
27
+ *
28
+ * This handler:
29
+ * 1. Parses the job payload
30
+ * 2. Builds a system message with metadata including the `task` field as instruction
31
+ * 3. Routes to the target agent (or Coordinator if none specified)
32
+ * 4. Executes the tool if tool_name is specified
33
+ * 5. Returns the agent response
34
+ */
35
+ export async function executeScheduledTask(job: CronJob): Promise<CronJobExecutionResult> {
36
+ log.info(`[execute] Processing job "${job.name}" (${job.id})`);
37
+
38
+ try {
39
+ let payload: Record<string, unknown>;
40
+ try {
41
+ payload = JSON.parse(job.payload);
42
+ } catch (err) {
43
+ log.error(`[execute] Invalid payload JSON for job "${job.id}": ${(err as Error).message}`);
44
+ return { success: false, error: "Invalid payload JSON" };
45
+ }
46
+
47
+ const prompt = (payload.prompt || payload.message) as string | undefined;
48
+ if (!prompt && !payload._internal && !job.task) {
49
+ log.error(`[execute] Job "${job.id}" has no prompt, message, or task instruction`);
50
+ return { success: false, error: "Missing prompt, message, or task instruction" };
51
+ }
52
+
53
+ if (payload._internal === true && (payload as any).action === "cleanup") {
54
+ if (_scheduler) {
55
+ _scheduler.runCleanup();
56
+ } else {
57
+ log.warn("[execute] Cleanup job fired but scheduler instance not available");
58
+ }
59
+ log.info("[execute] Cleanup job executed");
60
+ return { success: true, response: "Cleanup completed" };
61
+ }
62
+
63
+ // Build message metadata
64
+ const metadata = {
65
+ source: "scheduler" as const,
66
+ task_id: job.id,
67
+ task_name: job.name,
68
+ channel: job.channel,
69
+ scheduled: true,
70
+ tool_name: job.tool_name || undefined,
71
+ };
72
+
73
+ let targetAgentId: string | null = job.agent_id || null;
74
+
75
+ if (!targetAgentId) {
76
+ targetAgentId = resolveAgentId(null);
77
+ log.debug(`[execute] No agent specified, routing to Coordinator: ${targetAgentId}`);
78
+ }
79
+
80
+ const db = getDb();
81
+ const user = db.query("SELECT id, timezone, language FROM users LIMIT 1").get() as {
82
+ id: string;
83
+ timezone: string;
84
+ language: string | null;
85
+ } | undefined;
86
+
87
+ const userTimezone = user?.timezone || "UTC";
88
+ const userLanguage = user?.language || "en";
89
+
90
+ const now = new Date();
91
+ const dateOptions: Intl.DateTimeFormatOptions = {
92
+ timeZone: userTimezone,
93
+ year: "numeric",
94
+ month: "long",
95
+ day: "numeric",
96
+ weekday: "long",
97
+ };
98
+ const timeOptions: Intl.DateTimeFormatOptions = {
99
+ timeZone: userTimezone,
100
+ hour: "2-digit",
101
+ minute: "2-digit",
102
+ second: "2-digit",
103
+ hour12: false,
104
+ };
105
+
106
+ const fecha_usuario = new Intl.DateTimeFormat(userLanguage === "es" ? "es-ES" : "en-US", dateOptions).format(now);
107
+ const hora_usuario = new Intl.DateTimeFormat(userLanguage === "es" ? "es-ES" : "en-US", timeOptions).format(now);
108
+
109
+ // Build the full prompt with the `task` field as the primary instruction
110
+ const contextPrompt = `[SCHEDULED TASK]
111
+ Name: ${job.name}
112
+ Instruction: ${job.task}
113
+ Type: ${job.task_type}
114
+ Triggered at: ${hora_usuario} on ${fecha_usuario} (${userTimezone})
115
+
116
+ ${prompt || `Execute tool: ${job.tool_name}`}`;
117
+
118
+ log.debug(`[execute] Sending to agent ${targetAgentId}: "${contextPrompt.slice(0, 100)}..."`);
119
+
120
+ try {
121
+ const agentLoop = buildAgentLoop({ mcpManager: undefined });
122
+
123
+ const sessionId = `sched_${job.id}_${Date.now()}`;
124
+
125
+ const agentChannel = (job.channel && job.channel !== "system")
126
+ ? job.channel
127
+ : resolveBestChannel(user?.id || "");
128
+
129
+ const messages = [{ role: "user", content: contextPrompt }];
130
+ const stream = agentLoop.stream({ messages }, {
131
+ configurable: {
132
+ thread_id: sessionId,
133
+ agent_id: targetAgentId || undefined,
134
+ channel: agentChannel,
135
+ user_id: user?.id || "",
136
+ system_prompt: undefined,
137
+ raw_user_message: contextPrompt,
138
+ },
139
+ });
140
+
141
+ let response = "";
142
+ let hasError = false;
143
+
144
+ for await (const chunk of stream) {
145
+ if (chunk.agent?.messages) {
146
+ const lastMsg = chunk.agent.messages[chunk.agent.messages.length - 1];
147
+ if (lastMsg?.content) {
148
+ response += lastMsg.content;
149
+ }
150
+ }
151
+ if (chunk.tools?.messages) {
152
+ for (const msg of chunk.tools.messages) {
153
+ if (msg.content?.error) {
154
+ hasError = true;
155
+ response += ` [Tool error: ${JSON.stringify(msg.content)}]`;
156
+ }
157
+ }
158
+ }
159
+ }
160
+
161
+ if (hasError && !response) {
162
+ throw new Error("Agent execution returned errors");
163
+ }
164
+
165
+ log.info(`[execute] Agent response received for job "${job.name}"`);
166
+
167
+ return {
168
+ success: true,
169
+ response: response || "Task executed successfully",
170
+ };
171
+ } catch (agentErr) {
172
+ log.error(`[execute] Agent execution failed: ${(agentErr as Error).message}`);
173
+ return {
174
+ success: false,
175
+ error: `Agent execution failed: ${(agentErr as Error).message}`,
176
+ };
177
+ }
178
+ } catch (err) {
179
+ log.error(`[execute] Job execution failed: ${(err as Error).message}`);
180
+ return {
181
+ success: false,
182
+ error: (err as Error).message,
183
+ };
184
+ }
185
+ }
186
+
187
+ /**
188
+ * Send notification to user's channel after job execution
189
+ */
190
+ export async function notifyTaskCompletion(
191
+ taskId: string,
192
+ taskName: string,
193
+ success: boolean,
194
+ response?: string,
195
+ error?: string
196
+ ): Promise<void> {
197
+ const db = getDb();
198
+
199
+ const task = db.query(
200
+ "SELECT channel, agent_id FROM cron_jobs WHERE id = ?"
201
+ ).get(taskId) as { channel: string; agent_id: string | null } | undefined;
202
+
203
+ if (!task) {
204
+ log.warn(`[notify] Job "${taskId}" not found`);
205
+ return;
206
+ }
207
+
208
+ const userRow = db.query("SELECT id FROM users LIMIT 1").get() as { id: string } | undefined;
209
+ const userId = userRow?.id || "";
210
+
211
+ const explicitChannel = task.channel && task.channel !== "system" ? task.channel : undefined;
212
+ const notifyChannel = resolveBestChannel(userId, explicitChannel) || "webchat";
213
+ log.info(`[notifyTaskCompletion] task.channel=${task.channel} explicit=${explicitChannel} resolved=${notifyChannel}`);
214
+
215
+ const status = success ? "✅" : "❌";
216
+ const message = success
217
+ ? `${status} Scheduled task "${taskName}" completed\n${response || ""}`
218
+ : `${status} Scheduled task "${taskName}" failed\n${error || ""}`;
219
+
220
+ log.info(`[notify] Sending notification to ${notifyChannel}: "${message.slice(0, 50)}..."`);
221
+
222
+ try {
223
+ addMessage(userId, "assistant", message, { channel: notifyChannel });
224
+ } catch (e) {
225
+ log.warn(`[notify] Failed to persist notification to DB: ${(e as Error).message}`);
226
+ }
227
+
228
+ await sendToUserChannel(notifyChannel, userId, message);
229
+ log.info(`[notify] Notification sent to ${notifyChannel}`);
230
+ }
231
+
232
+ /**
233
+ * Create the job execution handler for CronScheduler
234
+ */
235
+ export function createTaskHandler() {
236
+ return executeScheduledTask;
237
+ }