@johpaz/hive-agents 0.0.35 → 0.0.37

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (441) hide show
  1. package/README.md +64 -39
  2. package/dist/hive.js +3231 -3189
  3. package/dist/tool-worker.js +218406 -0
  4. package/dist/ui/assets/{AgentCreateForm-B4eK7efF.js → AgentCreateForm-tJZv9FZC.js} +1 -1
  5. package/dist/ui/assets/{AgentDetailPage-BD2uoJWk.js → AgentDetailPage-Du-mRcAX.js} +1 -1
  6. package/dist/ui/assets/AgentNewPage-DIFYd_Ys.js +1 -0
  7. package/dist/ui/assets/{AgentsPage-4JUZXvkA.js → AgentsPage-YvSgWRiw.js} +6 -6
  8. package/dist/ui/assets/CanvasPage-DtMwGvxf.js +33 -0
  9. package/dist/ui/assets/{ChannelsPage-BUn7-nhV.js → ChannelsPage-BdBXWHjj.js} +1 -1
  10. package/dist/ui/assets/DashboardPage-ghl1ZguH.js +6 -0
  11. package/dist/ui/assets/{LoginPage-C8j_urUD.js → LoginPage-CAmSI9Vy.js} +1 -1
  12. package/dist/ui/assets/LogsPage-DAPBHkwK.js +1 -0
  13. package/dist/ui/assets/MeetingPage-WjjGOqqU.js +1 -0
  14. package/dist/ui/assets/{NotFound-Drh-sJPN.js → NotFound-BMeQSGcG.js} +1 -1
  15. package/dist/ui/assets/ProvidersPage-Ct6HsAi1.js +1 -0
  16. package/dist/ui/assets/{RecoverPage-DNb1Pr8h.js → RecoverPage-DpW3l-yv.js} +1 -1
  17. package/dist/ui/assets/SettingsPage-DBJ7_E6C.js +9 -0
  18. package/dist/ui/assets/SetupPage-DKmLVUaj.js +1 -0
  19. package/dist/ui/assets/{WebChatPage-R-YOwA4F.js → WebChatPage-CVRcKept.js} +2 -2
  20. package/dist/ui/assets/accordion-C5d5Rm5z.js +1 -0
  21. package/dist/ui/assets/{alert-U8FsgWi7.js → alert-C-NE-P3s.js} +1 -1
  22. package/dist/ui/assets/{alert-dialog-CRdMkkmk.js → alert-dialog-C5mzbHdP.js} +1 -1
  23. package/dist/ui/assets/{badge-Cli1jnH5.js → badge-ChpACfWO.js} +1 -1
  24. package/dist/ui/assets/chevron-up-BYhk0K2J.js +1 -0
  25. package/dist/ui/assets/{dialog-DQ3s-LuO.js → dialog-QnZ0ad8O.js} +1 -1
  26. package/dist/ui/assets/dropdown-menu-BK-CO3Od.js +1 -0
  27. package/dist/ui/assets/{es-DcMjrpbA.js → es-NQNoaWDx.js} +1 -1
  28. package/dist/ui/assets/index-B2fCYtTS.css +2 -0
  29. package/dist/ui/assets/index-DMCjjdqf.js +116 -0
  30. package/dist/ui/assets/{label-0BvGVXvZ.js → label-D2H1IR_J.js} +1 -1
  31. package/dist/ui/assets/progress-BherYzY6.js +1 -0
  32. package/dist/ui/assets/scroll-area-DkeyX32e.js +1 -0
  33. package/dist/ui/assets/{slider-D47dOrRa.js → slider-CsiUDxc3.js} +1 -1
  34. package/dist/ui/assets/switch-BDwN8RYV.js +1 -0
  35. package/dist/ui/assets/{table-DhowbNxQ.js → table-CSc8ubon.js} +1 -1
  36. package/dist/ui/assets/terminal-DN38Q456.js +1 -0
  37. package/dist/ui/assets/useProviders-C6_QHsEi.js +1 -0
  38. package/dist/ui/assets/{vendor-radix-JY4ncZrD.js → vendor-radix-cw1bQaVC.js} +4 -4
  39. package/dist/ui/assets/{vendor-react-CscwQerf.js → vendor-react-D4s9E-zj.js} +1 -1
  40. package/dist/ui/dist/assets/AgentCreateForm-tJZv9FZC.js +1 -0
  41. package/dist/ui/dist/assets/AgentDetailPage-Du-mRcAX.js +1 -0
  42. package/dist/ui/dist/assets/AgentNewPage-DIFYd_Ys.js +1 -0
  43. package/dist/ui/dist/assets/AgentsPage-YvSgWRiw.js +10 -0
  44. package/dist/ui/dist/assets/CanvasPage-DtMwGvxf.js +33 -0
  45. package/dist/ui/dist/assets/ChannelsPage-BdBXWHjj.js +8 -0
  46. package/dist/ui/dist/assets/DashboardPage-ghl1ZguH.js +6 -0
  47. package/dist/ui/dist/assets/LoginPage-CAmSI9Vy.js +1 -0
  48. package/dist/ui/dist/assets/LogsPage-DAPBHkwK.js +1 -0
  49. package/dist/ui/dist/assets/MeetingPage-WjjGOqqU.js +1 -0
  50. package/dist/ui/dist/assets/NotFound-BMeQSGcG.js +1 -0
  51. package/dist/ui/dist/assets/ProvidersPage-Ct6HsAi1.js +1 -0
  52. package/dist/ui/dist/assets/RecoverPage-DpW3l-yv.js +1 -0
  53. package/dist/ui/dist/assets/SettingsPage-DBJ7_E6C.js +9 -0
  54. package/dist/ui/dist/assets/SetupPage-DKmLVUaj.js +1 -0
  55. package/dist/ui/dist/assets/WebChatPage-CVRcKept.js +16 -0
  56. package/dist/ui/dist/assets/accordion-C5d5Rm5z.js +1 -0
  57. package/dist/ui/dist/assets/activity-c3pNngT_.js +1 -0
  58. package/dist/ui/dist/assets/alert-C-NE-P3s.js +1 -0
  59. package/dist/ui/dist/assets/alert-dialog-C5mzbHdP.js +1 -0
  60. package/dist/ui/dist/assets/arrow-left-CBcbX5EZ.js +1 -0
  61. package/dist/ui/dist/assets/badge-ChpACfWO.js +1 -0
  62. package/dist/ui/dist/assets/calendar-B-KZ9RQO.js +1 -0
  63. package/dist/ui/dist/assets/card-CNf6BS2e.js +1 -0
  64. package/dist/ui/dist/assets/chevron-left-D4U-5A27.js +1 -0
  65. package/dist/ui/dist/assets/chevron-right-CR4Skrf3.js +1 -0
  66. package/dist/ui/dist/assets/chevron-up-BYhk0K2J.js +1 -0
  67. package/dist/ui/dist/assets/circle-alert-CyHDwUj8.js +1 -0
  68. package/dist/ui/dist/assets/circle-check-Bb54Ebmu.js +1 -0
  69. package/dist/ui/dist/assets/cpu-Cdgc_B1K.js +1 -0
  70. package/dist/ui/dist/assets/dialog-QnZ0ad8O.js +1 -0
  71. package/dist/ui/dist/assets/download-C3ifGMjJ.js +1 -0
  72. package/dist/ui/dist/assets/dropdown-menu-BK-CO3Od.js +1 -0
  73. package/dist/ui/dist/assets/es-NQNoaWDx.js +1 -0
  74. package/dist/ui/dist/assets/external-link-BvxYeTP1.js +1 -0
  75. package/dist/ui/dist/assets/eye-DqNTU_GD.js +1 -0
  76. package/dist/ui/dist/assets/file-text-BT_9S9SM.js +1 -0
  77. package/dist/ui/dist/assets/folder-open-BhH8y9ac.js +1 -0
  78. package/dist/ui/dist/assets/format-GVHeOyWI.js +1 -0
  79. package/dist/ui/dist/assets/gateway-url-COCbW0IR.js +1 -0
  80. package/dist/ui/dist/assets/gauge-D_TMa4i9.js +1 -0
  81. package/dist/ui/dist/assets/globe-DeCQTCDJ.js +1 -0
  82. package/dist/ui/dist/assets/hexagon-DsGOUl-H.js +1 -0
  83. package/dist/ui/dist/assets/history-BSG-Ypqf.js +1 -0
  84. package/dist/ui/dist/assets/index-B2fCYtTS.css +2 -0
  85. package/dist/ui/dist/assets/index-DMCjjdqf.js +116 -0
  86. package/dist/ui/dist/assets/info-NwLoa2Mj.js +1 -0
  87. package/dist/ui/dist/assets/key-3EP0dhkT.js +1 -0
  88. package/dist/ui/dist/assets/label-D2H1IR_J.js +1 -0
  89. package/dist/ui/dist/assets/loader-circle-CZNax6kS.js +1 -0
  90. package/dist/ui/dist/assets/lock-Ei1_J-Nq.js +1 -0
  91. package/dist/ui/dist/assets/pause-BUqah9Bi.js +1 -0
  92. package/dist/ui/dist/assets/play-NcZ4swwL.js +1 -0
  93. package/dist/ui/dist/assets/plus-CX1xyhp5.js +1 -0
  94. package/dist/ui/dist/assets/progress-BherYzY6.js +1 -0
  95. package/dist/ui/dist/assets/refresh-cw-DaYdjQFk.js +1 -0
  96. package/dist/ui/dist/assets/rolldown-runtime-S-ySWqyJ.js +1 -0
  97. package/dist/ui/dist/assets/save-CUdYyHNy.js +1 -0
  98. package/dist/ui/dist/assets/scroll-area-DkeyX32e.js +1 -0
  99. package/dist/ui/dist/assets/send-B0H5SEIE.js +1 -0
  100. package/dist/ui/dist/assets/settings-Ds4SqD8s.js +1 -0
  101. package/dist/ui/dist/assets/slider-CsiUDxc3.js +14 -0
  102. package/dist/ui/dist/assets/sparkles-yUEb-7oH.js +1 -0
  103. package/dist/ui/dist/assets/square-BD81nFtN.js +1 -0
  104. package/dist/ui/dist/assets/switch-BDwN8RYV.js +1 -0
  105. package/dist/ui/dist/assets/table-CSc8ubon.js +1 -0
  106. package/dist/ui/dist/assets/terminal-DN38Q456.js +1 -0
  107. package/dist/ui/dist/assets/textarea-CXgXWKrT.js +1 -0
  108. package/dist/ui/dist/assets/trash-2-CNjMkoq6.js +1 -0
  109. package/dist/ui/dist/assets/triangle-alert-C9Y8Ub4X.js +1 -0
  110. package/dist/ui/dist/assets/useProviders-C6_QHsEi.js +1 -0
  111. package/dist/ui/dist/assets/utils-3pnRFmFe.js +1 -0
  112. package/dist/ui/dist/assets/vendor-charts-Bu2lyBKP.js +65 -0
  113. package/dist/ui/dist/assets/vendor-query-DsWPbQdG.js +1 -0
  114. package/dist/ui/dist/assets/vendor-radix-cw1bQaVC.js +63 -0
  115. package/dist/ui/dist/assets/vendor-react-D4s9E-zj.js +1 -0
  116. package/dist/ui/dist/assets/vendor-router-C9pIYwbJ.js +3 -0
  117. package/dist/ui/dist/assets/volume-2-CeSXNDv4.js +1 -0
  118. package/dist/ui/dist/assets/zap-hlXjpSeA.js +1 -0
  119. package/dist/ui/dist/favicon.ico +0 -0
  120. package/dist/ui/dist/index.html +40 -0
  121. package/dist/ui/dist/placeholder.svg +1 -0
  122. package/dist/ui/index.html +6 -6
  123. package/package.json +138 -13
  124. package/packages/cli/src/adapters/binary.ts +461 -0
  125. package/packages/cli/src/adapters/bun-global.ts +378 -0
  126. package/packages/cli/src/adapters/config.ts +314 -0
  127. package/packages/cli/src/adapters/docker.ts +308 -0
  128. package/packages/cli/src/adapters/factory.ts +168 -0
  129. package/packages/cli/src/adapters/index.ts +80 -0
  130. package/packages/cli/src/adapters/types.ts +218 -0
  131. package/packages/cli/src/commands/agent-run.ts +168 -0
  132. package/packages/cli/src/commands/agents.ts +398 -0
  133. package/packages/cli/src/commands/chat.ts +142 -0
  134. package/packages/cli/src/commands/config.ts +49 -0
  135. package/packages/cli/src/commands/cron.ts +487 -0
  136. package/packages/cli/src/commands/dev.ts +58 -0
  137. package/packages/cli/src/commands/doctor.ts +320 -0
  138. package/packages/cli/src/commands/gateway.ts +719 -0
  139. package/packages/cli/src/commands/logs.ts +57 -0
  140. package/packages/cli/src/commands/mcp.ts +175 -0
  141. package/packages/cli/src/commands/message.ts +77 -0
  142. package/packages/cli/src/commands/migrate.ts +90 -0
  143. package/packages/cli/src/commands/onboard.ts +1656 -0
  144. package/packages/cli/src/commands/security.ts +144 -0
  145. package/packages/cli/src/commands/service.ts +50 -0
  146. package/packages/cli/src/commands/sessions.ts +116 -0
  147. package/packages/cli/src/commands/skills.ts +215 -0
  148. package/packages/cli/src/commands/update.ts +203 -0
  149. package/packages/cli/src/index.ts +210 -0
  150. package/packages/cli/src/ui-bundle.generated.ts +3 -0
  151. package/packages/cli/src/utils/token.ts +6 -0
  152. package/packages/core/src/agent/agent-loop.ts +691 -0
  153. package/packages/core/src/agent/compaction.ts +240 -0
  154. package/packages/core/src/agent/context-compiler.ts +467 -0
  155. package/packages/core/src/agent/context-guard.ts +91 -0
  156. package/packages/core/src/agent/conversation-store.ts +244 -0
  157. package/packages/core/src/agent/curator.ts +158 -0
  158. package/packages/core/src/agent/hooks.ts +166 -0
  159. package/packages/core/src/agent/llm-client.ts +167 -0
  160. package/packages/core/src/agent/llm-providers/anthropic.ts +212 -0
  161. package/packages/core/src/agent/llm-providers/deepseek.ts +8 -0
  162. package/packages/core/src/agent/llm-providers/gemini.ts +215 -0
  163. package/packages/core/src/agent/llm-providers/groq.ts +5 -0
  164. package/packages/core/src/agent/llm-providers/interface.ts +195 -0
  165. package/packages/core/src/agent/llm-providers/kimi.ts +8 -0
  166. package/packages/core/src/agent/llm-providers/local-llama.ts +37 -0
  167. package/packages/core/src/agent/llm-providers/mistral.ts +5 -0
  168. package/packages/core/src/agent/llm-providers/nvidia.ts +5 -0
  169. package/packages/core/src/agent/llm-providers/ollama.ts +175 -0
  170. package/packages/core/src/agent/llm-providers/openai-compat-base.ts +379 -0
  171. package/packages/core/src/agent/llm-providers/openai.ts +5 -0
  172. package/packages/core/src/agent/llm-providers/openrouter.ts +5 -0
  173. package/packages/core/src/agent/llm-providers/qwen.ts +5 -0
  174. package/packages/core/src/agent/native-tools.ts +31 -0
  175. package/packages/core/src/agent/playbook-selector.ts +147 -0
  176. package/packages/core/src/agent/prompt-builder.ts +169 -0
  177. package/packages/core/src/agent/providers/index.ts +204 -0
  178. package/packages/core/src/agent/providers.ts +1 -0
  179. package/packages/core/src/agent/reflector.ts +200 -0
  180. package/packages/core/src/agent/service.ts +267 -0
  181. package/packages/core/src/agent/skill-selector.ts +479 -0
  182. package/packages/core/src/agent/stuck-loop.ts +133 -0
  183. package/packages/core/src/agent/tool-selector.ts +569 -0
  184. package/packages/core/src/agent/tracer.ts +100 -0
  185. package/packages/core/src/auth/auth.ts +108 -0
  186. package/packages/core/src/auth/index.ts +1 -0
  187. package/packages/core/src/canvas/a2ui-tools.ts +255 -0
  188. package/packages/core/src/canvas/canvas-manager.ts +390 -0
  189. package/packages/core/src/canvas/canvas-tools.ts +448 -0
  190. package/packages/core/src/canvas/emitter.ts +149 -0
  191. package/packages/core/src/canvas/index.ts +3 -0
  192. package/packages/core/src/channels/base.ts +154 -0
  193. package/packages/core/src/channels/discord.ts +273 -0
  194. package/packages/core/src/channels/index.ts +7 -0
  195. package/packages/core/src/channels/manager.ts +450 -0
  196. package/packages/core/src/channels/slack.ts +323 -0
  197. package/packages/core/src/channels/telegram.ts +612 -0
  198. package/packages/core/src/channels/webchat.ts +139 -0
  199. package/packages/core/src/channels/whatsapp.ts +548 -0
  200. package/packages/core/src/config/index.ts +12 -0
  201. package/packages/core/src/config/loader.ts +569 -0
  202. package/packages/core/src/events/agent-bus.ts +460 -0
  203. package/packages/core/src/events/event-bus.ts +169 -0
  204. package/packages/core/src/gateway/channel-notify.ts +64 -0
  205. package/packages/core/src/gateway/helpers/cors.ts +32 -0
  206. package/packages/core/src/gateway/helpers/index.ts +4 -0
  207. package/packages/core/src/gateway/helpers/narration.ts +57 -0
  208. package/packages/core/src/gateway/helpers/path.ts +13 -0
  209. package/packages/core/src/gateway/helpers/redact.ts +61 -0
  210. package/packages/core/src/gateway/index.ts +5 -0
  211. package/packages/core/src/gateway/initializer.ts +363 -0
  212. package/packages/core/src/gateway/lane-queue.ts +169 -0
  213. package/packages/core/src/gateway/llm-local/client.ts +94 -0
  214. package/packages/core/src/gateway/llm-local/detector.ts +321 -0
  215. package/packages/core/src/gateway/llm-local/downloader.ts +216 -0
  216. package/packages/core/src/gateway/llm-local/index.ts +34 -0
  217. package/packages/core/src/gateway/llm-local/manager.ts +186 -0
  218. package/packages/core/src/gateway/llm-local/models.ts +149 -0
  219. package/packages/core/src/gateway/llm-local/server.ts +179 -0
  220. package/packages/core/src/gateway/resolver.ts +108 -0
  221. package/packages/core/src/gateway/router.ts +124 -0
  222. package/packages/core/src/gateway/routes/agents.ts +210 -0
  223. package/packages/core/src/gateway/routes/auth.ts +244 -0
  224. package/packages/core/src/gateway/routes/channels.ts +484 -0
  225. package/packages/core/src/gateway/routes/chat.ts +241 -0
  226. package/packages/core/src/gateway/routes/config.ts +12 -0
  227. package/packages/core/src/gateway/routes/cron-api.ts +544 -0
  228. package/packages/core/src/gateway/routes/ethics.ts +46 -0
  229. package/packages/core/src/gateway/routes/llm-local.ts +271 -0
  230. package/packages/core/src/gateway/routes/mcp.ts +319 -0
  231. package/packages/core/src/gateway/routes/meeting.ts +232 -0
  232. package/packages/core/src/gateway/routes/models.ts +163 -0
  233. package/packages/core/src/gateway/routes/multimodal.ts +93 -0
  234. package/packages/core/src/gateway/routes/providers.ts +220 -0
  235. package/packages/core/src/gateway/routes/setup.ts +441 -0
  236. package/packages/core/src/gateway/routes/skills.ts +115 -0
  237. package/packages/core/src/gateway/routes/system.ts +469 -0
  238. package/packages/core/src/gateway/routes/tasks.ts +44 -0
  239. package/packages/core/src/gateway/routes/tools.ts +59 -0
  240. package/packages/core/src/gateway/routes/tts-local.ts +388 -0
  241. package/packages/core/src/gateway/routes/users.ts +122 -0
  242. package/packages/core/src/gateway/routes/voice.ts +189 -0
  243. package/packages/core/src/gateway/routes/workspace.ts +281 -0
  244. package/packages/core/src/gateway/server.ts +2744 -0
  245. package/packages/core/src/gateway/session.ts +95 -0
  246. package/packages/core/src/gateway/slash-commands.ts +207 -0
  247. package/packages/core/src/gateway/tts/README.md +94 -0
  248. package/packages/core/src/gateway/tts/package.json +25 -0
  249. package/packages/core/src/gateway/tts/src/client.ts +59 -0
  250. package/packages/core/src/gateway/tts/src/detect.ts +42 -0
  251. package/packages/core/src/gateway/tts/src/index.ts +15 -0
  252. package/packages/core/src/gateway/tts/src/install.ts +129 -0
  253. package/packages/core/src/gateway/tts/src/models.ts +50 -0
  254. package/packages/core/src/gateway/tts/src/server.ts +252 -0
  255. package/packages/core/src/gateway/tts/voices/.gitkeep +0 -0
  256. package/packages/core/src/heartbeat/index.ts +157 -0
  257. package/packages/core/src/index.ts +56 -0
  258. package/packages/core/src/mcp/hot-reload.ts +148 -0
  259. package/packages/core/src/mcp/singleton.ts +21 -0
  260. package/packages/core/src/mcp/tool-sync.ts +176 -0
  261. package/packages/core/src/multimodal/index.ts +2 -0
  262. package/packages/core/src/multimodal/types.ts +28 -0
  263. package/packages/core/src/multimodal/vision-service.ts +283 -0
  264. package/packages/core/src/plugins/api.ts +128 -0
  265. package/packages/core/src/plugins/index.ts +2 -0
  266. package/packages/core/src/plugins/loader.ts +365 -0
  267. package/packages/core/src/resilience/circuit-breaker.ts +225 -0
  268. package/packages/core/src/scheduler/CronScheduler.ts +699 -0
  269. package/packages/core/src/scheduler/dag/AgentExecutor.ts +53 -0
  270. package/packages/core/src/scheduler/dag/DAGScheduler.ts +250 -0
  271. package/packages/core/src/scheduler/dag/EventBridge.ts +122 -0
  272. package/packages/core/src/scheduler/dag/TaskGraph.ts +192 -0
  273. package/packages/core/src/scheduler/dag/TaskNode.ts +97 -0
  274. package/packages/core/src/scheduler/dag/TaskResult.ts +22 -0
  275. package/packages/core/src/scheduler/dag/errors.ts +37 -0
  276. package/packages/core/src/scheduler/dag/index.ts +26 -0
  277. package/packages/core/src/scheduler/dag/presets/ResearchPreset.ts +97 -0
  278. package/packages/core/src/scheduler/dag/strategies/ParallelStrategy.ts +21 -0
  279. package/packages/core/src/scheduler/dag/strategies/PriorityStrategy.ts +46 -0
  280. package/packages/core/src/scheduler/index.ts +22 -0
  281. package/packages/core/src/scheduler/integration.ts +237 -0
  282. package/packages/core/src/scheduler/types.ts +164 -0
  283. package/packages/core/src/security/google-chat.ts +269 -0
  284. package/packages/core/src/security/index.ts +192 -0
  285. package/packages/core/src/security/pairing.ts +250 -0
  286. package/packages/core/src/security/rate-limit.ts +270 -0
  287. package/packages/core/src/security/signal.ts +321 -0
  288. package/packages/core/src/state/store.ts +312 -0
  289. package/packages/core/src/storage/crypto.ts +197 -0
  290. package/packages/core/src/storage/migrate.ts +147 -0
  291. package/packages/core/src/storage/onboarding.ts +1506 -0
  292. package/packages/core/src/storage/schema.ts +666 -0
  293. package/packages/core/src/storage/seed.ts +628 -0
  294. package/packages/core/src/storage/sqlite.ts +407 -0
  295. package/packages/core/src/storage/usage.ts +374 -0
  296. package/packages/core/src/tool-runtime/index.ts +502 -0
  297. package/packages/core/src/tool-runtime/tool-worker.ts +125 -0
  298. package/packages/core/src/tools/agents/get-available-models.ts +118 -0
  299. package/packages/core/src/tools/agents/index.ts +610 -0
  300. package/packages/core/src/tools/canvas/index.ts +420 -0
  301. package/packages/core/src/tools/cli/index.ts +142 -0
  302. package/packages/core/src/tools/core/index.ts +478 -0
  303. package/packages/core/src/tools/cron/index.ts +635 -0
  304. package/packages/core/src/tools/filesystem/fs-delete.ts +78 -0
  305. package/packages/core/src/tools/filesystem/fs-edit.ts +106 -0
  306. package/packages/core/src/tools/filesystem/fs-exists.ts +63 -0
  307. package/packages/core/src/tools/filesystem/fs-glob.ts +108 -0
  308. package/packages/core/src/tools/filesystem/fs-list.ts +129 -0
  309. package/packages/core/src/tools/filesystem/fs-read.ts +72 -0
  310. package/packages/core/src/tools/filesystem/fs-write.ts +67 -0
  311. package/packages/core/src/tools/filesystem/index.ts +34 -0
  312. package/packages/core/src/tools/filesystem/workspace-guard.ts +62 -0
  313. package/packages/core/src/tools/index.ts +197 -0
  314. package/packages/core/src/tools/meeting/index.ts +363 -0
  315. package/packages/core/src/tools/office/index.ts +47 -0
  316. package/packages/core/src/tools/office/office-escribir-docx.ts +192 -0
  317. package/packages/core/src/tools/office/office-escribir-pdf.ts +172 -0
  318. package/packages/core/src/tools/office/office-escribir-pptx.ts +174 -0
  319. package/packages/core/src/tools/office/office-escribir-xlsx.ts +116 -0
  320. package/packages/core/src/tools/office/office-leer-docx.ts +93 -0
  321. package/packages/core/src/tools/office/office-leer-pdf.ts +114 -0
  322. package/packages/core/src/tools/office/office-leer-pptx.ts +136 -0
  323. package/packages/core/src/tools/office/office-leer-xlsx.ts +124 -0
  324. package/packages/core/src/tools/types.ts +39 -0
  325. package/packages/core/src/tools/voice/index.ts +104 -0
  326. package/packages/core/src/tools/web/browser-click.ts +78 -0
  327. package/packages/core/src/tools/web/browser-extract.ts +139 -0
  328. package/packages/core/src/tools/web/browser-navigate.ts +106 -0
  329. package/packages/core/src/tools/web/browser-screenshot.ts +87 -0
  330. package/packages/core/src/tools/web/browser-script.ts +88 -0
  331. package/packages/core/src/tools/web/browser-service.ts +554 -0
  332. package/packages/core/src/tools/web/browser-type.ts +101 -0
  333. package/packages/core/src/tools/web/browser-wait.ts +136 -0
  334. package/packages/core/src/tools/web/index.ts +41 -0
  335. package/packages/core/src/tools/web/web-fetch.ts +78 -0
  336. package/packages/core/src/tools/web/web-search.ts +123 -0
  337. package/packages/core/src/utils/benchmark.ts +80 -0
  338. package/packages/core/src/utils/crypto.ts +73 -0
  339. package/packages/core/src/utils/date.ts +42 -0
  340. package/packages/core/src/utils/index.ts +5 -0
  341. package/packages/core/src/utils/logger.ts +389 -0
  342. package/packages/core/src/utils/retry.ts +70 -0
  343. package/packages/core/src/utils/toon.ts +253 -0
  344. package/packages/core/src/voice/index.ts +643 -0
  345. package/packages/mcp/src/config.ts +13 -0
  346. package/packages/mcp/src/index.ts +1 -0
  347. package/packages/mcp/src/logger.ts +47 -0
  348. package/packages/mcp/src/manager.ts +439 -0
  349. package/packages/mcp/src/transports/index.ts +67 -0
  350. package/packages/mcp/src/transports/sse.ts +238 -0
  351. package/packages/mcp/src/transports/websocket.ts +159 -0
  352. package/packages/skills/src/bundled/agents/agent_spawner/SKILL.md +167 -0
  353. package/packages/skills/src/bundled/agents/code_delegator/SKILL.md +156 -0
  354. package/packages/skills/src/bundled/agents/memory_manager/SKILL.md +143 -0
  355. package/packages/skills/src/bundled/agents/research_and_remember/SKILL.md +139 -0
  356. package/packages/skills/src/bundled/agents/task_orchestrator/SKILL.md +198 -0
  357. package/packages/skills/src/bundled/canvas/a2ui_dashboard/SKILL.md +176 -0
  358. package/packages/skills/src/bundled/canvas/a2ui_form/SKILL.md +202 -0
  359. package/packages/skills/src/bundled/canvas/a2ui_interactive/SKILL.md +206 -0
  360. package/packages/skills/src/bundled/canvas/canvas_dashboard/SKILL.md +146 -0
  361. package/packages/skills/src/bundled/canvas/canvas_interact/SKILL.md +148 -0
  362. package/packages/skills/src/bundled/canvas/canvas_report/SKILL.md +146 -0
  363. package/packages/skills/src/bundled/cli/cli_pipeline/SKILL.md +136 -0
  364. package/packages/skills/src/bundled/cli/cli_safe_exec/SKILL.md +125 -0
  365. package/packages/skills/src/bundled/cron_manager/SKILL.md +188 -0
  366. package/packages/skills/src/bundled/cron_reminder/SKILL.md +112 -0
  367. package/packages/skills/src/bundled/filesystem/file_manager/SKILL.md +118 -0
  368. package/packages/skills/src/bundled/filesystem/file_read_and_summarize/SKILL.md +108 -0
  369. package/packages/skills/src/bundled/filesystem/file_writer/SKILL.md +135 -0
  370. package/packages/skills/src/bundled/meeting/meeting_transcription/SKILL.md +213 -0
  371. package/packages/skills/src/bundled/office/office_document_manager/SKILL.md +262 -0
  372. package/packages/skills/src/bundled/search_knowledge/busqueda_fts5/SKILL.md +74 -0
  373. package/packages/skills/src/bundled/voice/voice_assistant/SKILL.md +174 -0
  374. package/packages/skills/src/bundled/voice/voice_input/SKILL.md +146 -0
  375. package/packages/skills/src/bundled/voice/voice_output/SKILL.md +151 -0
  376. package/packages/skills/src/bundled/web/browser_automate/SKILL.md +120 -0
  377. package/packages/skills/src/bundled/web/browser_scrape/SKILL.md +109 -0
  378. package/packages/skills/src/bundled/web/web_monitor/SKILL.md +127 -0
  379. package/packages/skills/src/bundled/web/web_research/SKILL.md +119 -0
  380. package/packages/skills/src/bundled-data.generated.ts +1964 -0
  381. package/packages/skills/src/index.ts +1 -0
  382. package/packages/skills/src/loader.ts +388 -0
  383. package/dist/ui/assets/AgentNewPage-GB-tVN50.js +0 -1
  384. package/dist/ui/assets/BridgePage-DDcDILKu.js +0 -1
  385. package/dist/ui/assets/CanvasPage-oOk2sGOD.js +0 -33
  386. package/dist/ui/assets/DashboardPage-DV_2qWYJ.js +0 -6
  387. package/dist/ui/assets/LogsPage-DayYjh01.js +0 -1
  388. package/dist/ui/assets/MeetingPage-C01uPuqj.js +0 -1
  389. package/dist/ui/assets/ProjectsPage-B8_am_Ib.js +0 -1
  390. package/dist/ui/assets/ProvidersPage-DBzi66e4.js +0 -1
  391. package/dist/ui/assets/SettingsPage-CFA_Tknl.js +0 -9
  392. package/dist/ui/assets/SetupPage-BrUWbhvT.js +0 -1
  393. package/dist/ui/assets/accordion-DdAEfIXR.js +0 -1
  394. package/dist/ui/assets/chevron-down-DIosfU_U.js +0 -1
  395. package/dist/ui/assets/chevron-up-CI-W21Fy.js +0 -1
  396. package/dist/ui/assets/circle-S0-ouLz-.js +0 -1
  397. package/dist/ui/assets/circle-minus-CE0iJrl8.js +0 -1
  398. package/dist/ui/assets/circle-x-jUJ5zZvQ.js +0 -1
  399. package/dist/ui/assets/dropdown-menu-C2CXM1VE.js +0 -1
  400. package/dist/ui/assets/index-BN0875JH.css +0 -2
  401. package/dist/ui/assets/index-CH6sBa3Q.js +0 -116
  402. package/dist/ui/assets/pencil-5VdSj-h5.js +0 -1
  403. package/dist/ui/assets/progress-JN30I5fF.js +0 -1
  404. package/dist/ui/assets/scroll-area-BQQPitM8.js +0 -1
  405. package/dist/ui/assets/search-ChPgnVKj.js +0 -1
  406. package/dist/ui/assets/switch-C7W2-KEx.js +0 -1
  407. package/dist/ui/assets/terminal-C-R5Fckz.js +0 -1
  408. package/dist/ui/assets/useProviders-TBnWn-Hq.js +0 -1
  409. /package/dist/ui/assets/{card-DFKnZ6ky.js → card-CNf6BS2e.js} +0 -0
  410. /package/dist/ui/assets/{circle-alert-KuAm2FWh.js → circle-alert-CyHDwUj8.js} +0 -0
  411. /package/dist/ui/assets/{circle-check-6Ard1-2z.js → circle-check-Bb54Ebmu.js} +0 -0
  412. /package/dist/ui/assets/{cpu-KDy6-FAI.js → cpu-Cdgc_B1K.js} +0 -0
  413. /package/dist/ui/assets/{download-Cjbk4Rek.js → download-C3ifGMjJ.js} +0 -0
  414. /package/dist/ui/assets/{external-link-HtrFM63g.js → external-link-BvxYeTP1.js} +0 -0
  415. /package/dist/ui/assets/{eye-D1dB40_o.js → eye-DqNTU_GD.js} +0 -0
  416. /package/dist/ui/assets/{file-text-CE58EfH0.js → file-text-BT_9S9SM.js} +0 -0
  417. /package/dist/ui/assets/{folder-open-DIPKeiI_.js → folder-open-BhH8y9ac.js} +0 -0
  418. /package/dist/ui/assets/{format-BwdV8bB5.js → format-GVHeOyWI.js} +0 -0
  419. /package/dist/ui/assets/{gateway-url-D5uj6Nxg.js → gateway-url-COCbW0IR.js} +0 -0
  420. /package/dist/ui/assets/{gauge-DmQmJHEg.js → gauge-D_TMa4i9.js} +0 -0
  421. /package/dist/ui/assets/{globe-_hUGxQF4.js → globe-DeCQTCDJ.js} +0 -0
  422. /package/dist/ui/assets/{hexagon-BaNGQlQj.js → hexagon-DsGOUl-H.js} +0 -0
  423. /package/dist/ui/assets/{history-BfZVGlZa.js → history-BSG-Ypqf.js} +0 -0
  424. /package/dist/ui/assets/{info-CBZ5-AlC.js → info-NwLoa2Mj.js} +0 -0
  425. /package/dist/ui/assets/{key-Bv5DdTPh.js → key-3EP0dhkT.js} +0 -0
  426. /package/dist/ui/assets/{loader-circle-C4hhXLgp.js → loader-circle-CZNax6kS.js} +0 -0
  427. /package/dist/ui/assets/{lock-CkZYexqw.js → lock-Ei1_J-Nq.js} +0 -0
  428. /package/dist/ui/assets/{pause-Bpy1_s7y.js → pause-BUqah9Bi.js} +0 -0
  429. /package/dist/ui/assets/{play-Cj4osqJZ.js → play-NcZ4swwL.js} +0 -0
  430. /package/dist/ui/assets/{plus-BQhgZN3A.js → plus-CX1xyhp5.js} +0 -0
  431. /package/dist/ui/assets/{refresh-cw-BfREHVQM.js → refresh-cw-DaYdjQFk.js} +0 -0
  432. /package/dist/ui/assets/{save-FFTD4dMp.js → save-CUdYyHNy.js} +0 -0
  433. /package/dist/ui/assets/{settings-BdHKUL92.js → settings-Ds4SqD8s.js} +0 -0
  434. /package/dist/ui/assets/{sparkles-r4uJbJAl.js → sparkles-yUEb-7oH.js} +0 -0
  435. /package/dist/ui/assets/{square-G7Hyufqm.js → square-BD81nFtN.js} +0 -0
  436. /package/dist/ui/assets/{textarea-5kyuD04X.js → textarea-CXgXWKrT.js} +0 -0
  437. /package/dist/ui/assets/{trash-2-DXVBRWfh.js → trash-2-CNjMkoq6.js} +0 -0
  438. /package/dist/ui/assets/{triangle-alert-Bu5seg9O.js → triangle-alert-C9Y8Ub4X.js} +0 -0
  439. /package/dist/ui/assets/{vendor-router-CCECILJ0.js → vendor-router-C9pIYwbJ.js} +0 -0
  440. /package/dist/ui/assets/{volume-2-s9DuS696.js → volume-2-CeSXNDv4.js} +0 -0
  441. /package/dist/ui/assets/{zap-BPHZzXKV.js → zap-hlXjpSeA.js} +0 -0
@@ -0,0 +1,176 @@
1
+ ---
2
+ name: a2ui_dashboard
3
+ description: "Create real-time interactive dashboards using A2UI v0.9 protocol with dynamic data binding and live updates"
4
+ version: 1.0.0
5
+ author: Hive Team
6
+ icon: "📊"
7
+ category: canvas
8
+ permissions:
9
+ - canvas_write
10
+ dependencies: []
11
+ tools: [a2ui_create_surface, a2ui_update_components, a2ui_update_data_model, a2ui_delete_surface]
12
+
13
+ # Structured skill fields
14
+ triggers:
15
+ - "dashboard A2UI"
16
+ - "panel de control A2UI"
17
+ - "A2UI dashboard"
18
+ - "mostrar métricas A2UI"
19
+ - "A2UI metrics"
20
+ - "dashboard interactivo A2UI"
21
+ - "interactive dashboard"
22
+ - "A2UI dashboard en tiempo real"
23
+ - "real-time dashboard A2UI"
24
+ - "mostrar datos A2UI"
25
+ - "visualizar datos con A2UI"
26
+
27
+ preferred_agents: []
28
+
29
+ steps:
30
+ - step: 1
31
+ action: a2ui_create_surface
32
+ instruction: "Create an A2UI surface for the dashboard. Set theme with primaryColor matching project branding."
33
+ params:
34
+ surfaceId: "Descriptive ID (e.g. 'project_dashboard', 'metrics_dashboard')"
35
+ catalogId: "https://a2ui.org/specification/v0_9/basic_catalog.json"
36
+ theme: "{ primaryColor: '#10B981', agentDisplayName: 'Dashboard' }"
37
+ output: surface_created
38
+
39
+ - step: 2
40
+ action: a2ui_update_components
41
+ instruction: "Build dashboard layout using Row, Column, Card, and Text components. Use weight for proportional sizing."
42
+ params:
43
+ surfaceId: "Same surfaceId from step 1"
44
+ components: "Array of A2UI component definitions for dashboard layout"
45
+ output: dashboard_layout
46
+
47
+ - step: 3
48
+ action: a2ui_update_data_model
49
+ instruction: "Populate dashboard with initial data using JSON Pointer paths. All dynamic values should use path bindings."
50
+ params:
51
+ surfaceId: "Same surfaceId"
52
+ path: "/"
53
+ value: "Full data model object with all metric values"
54
+ output: data_populated
55
+
56
+ - step: 4
57
+ action: a2ui_update_data_model
58
+ instruction: "Update specific data model paths to refresh dashboard metrics in real-time."
59
+ params:
60
+ surfaceId: "Same surfaceId"
61
+ path: "/metrics/completionRate"
62
+ value: "Updated value"
63
+ output: metrics_updated
64
+
65
+ - step: 5
66
+ action: a2ui_delete_surface
67
+ instruction: "Delete the dashboard surface when no longer needed."
68
+ params:
69
+ surfaceId: "Same surfaceId"
70
+ output: surface_deleted
71
+
72
+ rules:
73
+ - "Always call a2ui_create_surface BEFORE a2ui_update_components"
74
+ - "Components MUST include a root component with id='root'"
75
+ - "Use Row with weight for side-by-side metrics (e.g. weight: 1 vs weight: 3)"
76
+ - "Use Card to group related metrics together"
77
+ - "Use Text with usageHint: 'h2' for section titles, 'h1' for dashboard title"
78
+ - "Use Text with usageHint: 'caption' for labels"
79
+ - "Use data binding { path: '/metrics/name' } for all dynamic values"
80
+ - "Update metrics with a2ui_update_data_model using specific JSON Pointer paths"
81
+ - "Use a2ui_update_data_model with path: '/' to replace entire data model if needed"
82
+ - "Delete surfaces with a2ui_delete_surface when dashboard is no longer needed"
83
+ - "For static dashboards prefer canvas_render with chart type; use A2UI for interactive/live dashboards"
84
+
85
+ output_format:
86
+ structure: a2ui_dashboard
87
+ sections:
88
+ - "surface_creation"
89
+ - "dashboard_layout"
90
+ - "data_model"
91
+ - "live_updates"
92
+ - "cleanup"
93
+ max_length: "Structured JSON components"
94
+
95
+ examples:
96
+ - user_input: "mostrá el dashboard del proyecto"
97
+ expected_behavior: "a2ui_create_surface(surfaceId:'project_dash', theme:{primaryColor:'#10B981'}) → a2ui_update_components with Row[Column[Card[metrics]],Column[tasks]] → a2ui_update_data_model(path:'/', value:{metrics:{...}})"
98
+
99
+ - user_input: "actualizá las métricas del dashboard"
100
+ expected_behavior: "a2ui_update_data_model(surfaceId:'project_dash', path:'/metrics/completionRate', value:75)"
101
+
102
+ - user_input: "show a real-time dashboard with server metrics"
103
+ expected_behavior: "a2ui_create_surface → a2ui_update_components with Cards for each metric → a2ui_update_data_model → periodic updates with a2ui_update_data_model"
104
+ ---
105
+
106
+ # A2UI Dashboard Skill
107
+
108
+ ## Cuándo se Activa
109
+
110
+ Para crear dashboards interactivos en tiempo real usando A2UI v0.9. Usar cuando se necesita:
111
+ - Métricas que se actualizan dinámicamente
112
+ - Dashboards con data binding
113
+ - Paneles con Cards, Rows, Columns
114
+ - Visualización de datos que cambia en tiempo real
115
+
116
+ ## Herramientas Disponibles
117
+
118
+ | Tool | Qué hace | Cuándo usarla |
119
+ |------|----------|---------------|
120
+ | `a2ui_create_surface` | Crea la superficie A2UI | Siempre primero |
121
+ | `a2ui_update_components` | Envía componentes | Para layout del dashboard |
122
+ | `a2ui_update_data_model` | Actualiza datos | Para métricas dinámicas |
123
+ | `a2ui_delete_surface` | Elimina la superficie | Al cerrar dashboard |
124
+
125
+ ## Flujo Obligatorio
126
+
127
+ ```
128
+ 1. a2ui_create_surface(surfaceId, catalogId, theme)
129
+ 2. a2ui_update_components(surfaceId, components[])
130
+ 3. a2ui_update_data_model(surfaceId, path, value) // datos iniciales
131
+ 4. [actualizar métricas con a2ui_update_data_model según necesidad]
132
+ 5. a2ui_delete_surface(surfaceId) // al terminar
133
+ ```
134
+
135
+ ## Patrón de Dashboard Típico
136
+
137
+ ```json
138
+ [
139
+ {"id": "root", "component": "Column", "children": ["title", "metrics_row", "tasks_list"]},
140
+ {"id": "title", "component": "Text", "text": "Dashboard de Proyecto", "variant": "h1"},
141
+
142
+ {"id": "metrics_row", "component": "Row", "children": ["card1", "card2", "card3"]},
143
+ {"id": "card1", "component": "Card", "child": "card1_content", "weight": 1},
144
+ {"id": "card1_content", "component": "Column", "children": ["card1_label", "card1_value"]},
145
+ {"id": "card1_label", "component": "Text", "text": "Completado", "variant": "caption"},
146
+ {"id": "card1_value", "component": "Text", "text": {"path": "/metrics/completionRate"}, "variant": "h2"},
147
+
148
+ {"id": "tasks_list", "component": "List", "children": {"path": "/tasks", "componentId": "task_template"}},
149
+ {"id": "task_template", "component": "Card", "child": "task_content"},
150
+ {"id": "task_content", "component": "Column", "children": ["task_name", "task_status"]},
151
+ {"id": "task_name", "component": "Text", "text": {"path": "/name"}},
152
+ {"id": "task_status", "component": "Text", "text": {"path": "/status"}, "variant": "caption"}
153
+ ]
154
+ ```
155
+
156
+ ## Actualización en Tiempo Real
157
+
158
+ Para actualizar métricas específicas sin reenviar componentes:
159
+ ```json
160
+ a2ui_update_data_model(surfaceId: "dash", path: "/metrics/completionRate", value: 85)
161
+ a2ui_update_data_model(surfaceId: "dash", path: "/metrics/totalTasks", value: 24)
162
+ ```
163
+
164
+ Para reemplazar todo el data model:
165
+ ```json
166
+ a2ui_update_data_model(surfaceId: "dash", path: "/", value: {metrics: {completionRate: 90, totalTasks: 25}, tasks: [...]})
167
+ ```
168
+
169
+ ## Mejores Prácticas
170
+
171
+ - Usar `weight` en Row/Column para proporciones (weight:1 vs weight:3 = 25% vs 75%)
172
+ - Agrupar métricas en Cards para separación visual
173
+ - Usar `usageHint: "caption"` para labels, `"h1"/"h2"` para valores
174
+ - Bind todos los valores dinámicos con `{ path: "/..." }`
175
+ - Actualizar métricas con `a2ui_update_data_model` path específico
176
+ - Eliminar surfaces al terminar para evitar memory leaks
@@ -0,0 +1,202 @@
1
+ ---
2
+ name: a2ui_form
3
+ description: "Create rich interactive forms using A2UI v0.9 protocol with validation, data binding, and multi-step flows"
4
+ version: 1.0.0
5
+ author: Hive Team
6
+ icon: "📝"
7
+ category: canvas
8
+ permissions:
9
+ - canvas_write
10
+ dependencies: []
11
+ tools: [a2ui_create_surface, a2ui_update_components, a2ui_update_data_model, a2ui_delete_surface]
12
+
13
+ # Structured skill fields
14
+ triggers:
15
+ - "crear formulario A2UI"
16
+ - "create A2UI form"
17
+ - "formulario interactivo A2UI"
18
+ - "A2UI form"
19
+ - "pedir datos con A2UI"
20
+ - "collect data A2UI"
21
+ - "formulario con validación"
22
+ - "form with validation"
23
+ - "formulario multi-paso"
24
+ - "multi-step form A2UI"
25
+ - "form dinámico A2UI"
26
+ - "dynamic form A2UI"
27
+
28
+ preferred_agents: []
29
+
30
+ steps:
31
+ - step: 1
32
+ action: a2ui_create_surface
33
+ instruction: "Create an A2UI surface with a unique surfaceId and catalog. Set theme with primaryColor and agentDisplayName."
34
+ params:
35
+ surfaceId: "Unique identifier (e.g. 'contact_form', 'signup_form')"
36
+ catalogId: "https://a2ui.org/specification/v0_9/basic_catalog.json"
37
+ theme: "{ primaryColor: '#3B82F6', agentDisplayName: 'Asistente' }"
38
+ output: surface_created
39
+
40
+ - step: 2
41
+ action: a2ui_update_components
42
+ instruction: "Send the form layout as a flat list of A2UI components. Must include a 'root' component. Use Column/Row for layout, TextField for inputs, Button for submit."
43
+ params:
44
+ surfaceId: "Same surfaceId from step 1"
45
+ components: "Array of A2UI component definitions"
46
+ output: components_sent
47
+
48
+ - step: 3
49
+ action: a2ui_update_data_model
50
+ instruction: "Populate initial form values using JSON Pointer paths (e.g. '/form/name'). Sets default values and enables two-way binding."
51
+ params:
52
+ surfaceId: "Same surfaceId"
53
+ path: "/form"
54
+ value: "{ name: '', email: '' }"
55
+ output: data_populated
56
+
57
+ - step: 4
58
+ action: a2ui_delete_surface
59
+ instruction: "Delete the A2UI surface when the form is completed or no longer needed."
60
+ params:
61
+ surfaceId: "Same surfaceId"
62
+ output: surface_deleted
63
+
64
+ rules:
65
+ - "Always call a2ui_create_surface BEFORE a2ui_update_components"
66
+ - "Components MUST include a root component with id='root'"
67
+ - "Use data binding with { path: '/form/field' } for TextField values to enable two-way binding"
68
+ - "Add checks (validation) to TextField: [{ call: 'required', args: { value: { path: '/form/email' } }, message: 'Email is required' }]"
69
+ - "Button actions use event format: { event: { name: 'submit_form', context: { email: { path: '/form/email' } } } }"
70
+ - "Use Column for vertical layouts, Row for horizontal layouts"
71
+ - "Set weight on Row/Column children for proportional sizing (e.g. weight: 1 vs weight: 3)"
72
+ - "Delete surfaces with a2ui_delete_surface when no longer needed to prevent memory leaks"
73
+ - "Prefer A2UI forms over canvas_ask for complex forms with validation"
74
+
75
+ output_format:
76
+ structure: a2ui_form
77
+ sections:
78
+ - "surface_creation"
79
+ - "component_layout"
80
+ - "data_model"
81
+ - "cleanup"
82
+ max_length: "Structured JSON components"
83
+
84
+ examples:
85
+ - user_input: "creá un formulario de contacto"
86
+ expected_behavior: "a2ui_create_surface(surfaceId:'contact_form', theme:{primaryColor:'#3B82F6',agentDisplayName:'Asistente'}) → a2ui_update_components(surfaceId:'contact_form', components:[root,Column,hdr,name_fld,email_fld,msg_fld,submit_btn]) → a2ui_update_data_model(surfaceId:'contact_form', path:'/form', value:{name:'',email:'',message:''})"
87
+
88
+ - user_input: "I need a signup form with email validation"
89
+ expected_behavior: "a2ui_create_surface → a2ui_update_components with TextField({value:{path:'/form/email'}, checks:[{call:'required',...},{call:'email',...}]}) → a2ui_update_data_model"
90
+
91
+ - user_input: "creá un formulario multi-paso"
92
+ expected_behavior: "a2ui_create_surface → a2ui_update_components with Tabs+Column per step → a2ui_update_data_model for all fields"
93
+ ---
94
+
95
+ # A2UI Form Skill
96
+
97
+ ## Cuándo se Activa
98
+
99
+ Para crear formularios interactivos ricos usando el protocolo A2UI v0.9. Usar cuando se necesita:
100
+ - Validación de campos (required, email, regex)
101
+ - Data binding dinámico
102
+ - Formularios multi-paso
103
+ - Choice pickers, sliders, checkboxes
104
+ - Formularios con acciones personalizadas
105
+
106
+ ## Herramientas Disponibles
107
+
108
+ | Tool | Qué hace | Cuándo usarla |
109
+ |------|----------|---------------|
110
+ | `a2ui_create_surface` | Crea la superficie A2UI | Siempre primero |
111
+ | `a2ui_update_components` | Envía componentes | Después de crear surface |
112
+ | `a2ui_update_data_model` | Actualiza datos | Para valores iniciales o dinámicos |
113
+ | `a2ui_delete_surface` | Elimina la superficie | Al terminar |
114
+
115
+ ## Flujo Obligatorio
116
+
117
+ ```
118
+ 1. a2ui_create_surface(surfaceId, catalogId, theme)
119
+ 2. a2ui_update_components(surfaceId, components[])
120
+ 3. a2ui_update_data_model(surfaceId, path, value) // opcional, para datos iniciales
121
+ 4. [esperar acción del usuario]
122
+ 5. a2ui_delete_surface(surfaceId) // al terminar
123
+ ```
124
+
125
+ ## Componentes Disponibles
126
+
127
+ | Componente | Descripción | Props clave |
128
+ |------------|-------------|-------------|
129
+ | `Column` | Layout vertical | `children`, `distribution`, `alignment` |
130
+ | `Row` | Layout horizontal | `children`, `distribution`, `alignment` |
131
+ | `Text` | Texto | `text`, `usageHint` (h1-h5, body, caption, code) |
132
+ | `Button` | Botón | `child`, `variant`, `action` |
133
+ | `TextField` | Campo de texto | `label`, `value`, `variant` (shortText/longText/number/obscured), `validationRegexp`, `checks`, `action` |
134
+ | `CheckBox` | Checkbox | `label`, `value` |
135
+ | `ChoicePicker` | Selector múltiple | `options`, `value` (DynamicStringList), `variant` (mutuallyExclusive/multipleSelection), `displayStyle`, `filterable`, `action` |
136
+ | `Slider` | Slider numérico | `value`, `minValue`, `maxValue` |
137
+ | `DateTimeInput` | Fecha/hora | `value`, `enableDate`, `enableTime` |
138
+ | `Card` | Tarjeta | `child` |
139
+ | `Divider` | Separador | `axis` |
140
+ | `Image` | Imagen | `url`, `fit` |
141
+ | `Tabs` | Pestañas | `tabItems` |
142
+
143
+ ## Data Binding
144
+
145
+ - Literal: `"texto directo"` o número
146
+ - Path: `{ "path": "/form/name" }` — se resuelve contra el data model
147
+ - Function call: `{ "call": "formatDate", "args": {...} }`
148
+
149
+ ## Cuándo disparan acciones los inputs
150
+
151
+ | Componente | Cuándo dispara | Formato de action |
152
+ |------------|---------------|-------------------|
153
+ | `Button` | Al hacer click | `{name: "...", context: {...}}` o `{event: {name: "...", context: {...}}}` |
154
+ | `TextField` | Al perder foco (blur) o presionar Enter (en shortText) | `{name: "...", context: {...}}` |
155
+ | `ChoicePicker` | Inmediatamente al seleccionar/deseleccionar | `{name: "...", context: {...}}` |
156
+ | `Slider` | Al soltar el slider (onValueCommit) | `{name: "...", context: {...}}` |
157
+ | `CheckBox` | Al cambiar estado | — (solo two-way binding) |
158
+ | `DateTimeInput` | Al cambiar valor | — (solo two-way binding) |
159
+
160
+ **Nota**: Tanto `{name: "...", context: {...}}` (directo) como `{event: {name: "...", context: {...}}}` (con wrapper) son formatos válidos.
161
+
162
+ **Nota**: Para ChoicePicker usa siempre `selections: {path: "..."}` (no `value`) para two-way binding.
163
+
164
+ ## Validación (checks)
165
+
166
+ ```json
167
+ "checks": [
168
+ { "call": "required", "args": { "value": { "path": "/form/email" } }, "message": "Email is required" },
169
+ { "call": "email", "args": { "value": { "path": "/form/email" } }, "message": "Invalid email" },
170
+ { "call": "regex", "args": { "value": { "path": "/form/phone" }, "pattern": "^\\d{10}$" }, "message": "10 digits required" }
171
+ ]
172
+ ```
173
+
174
+ ## Ejemplo: Formulario de Contacto
175
+
176
+ ```json
177
+ // 1. Create surface
178
+ a2ui_create_surface(surfaceId: "contact_form", catalogId: "https://a2ui.org/specification/v0_9/basic_catalog.json", theme: {primaryColor: "#3B82F6", agentDisplayName: "Asistente"})
179
+
180
+ // 2. Send components
181
+ a2ui_update_components(surfaceId: "contact_form", components: [
182
+ {"id": "root", "component": "Column", "children": ["header","name_field","email_field","msg_field","submit_btn"]},
183
+ {id: "header", component: "Text", text: "Contacto", variant: "h2"},
184
+ {id: "name_field", component: "TextField", label: "Nombre", value: {path: "/form/name"}, variant: "shortText"},
185
+ {id: "email_field", component: "TextField", label: "Email", value: {path: "/form/email"}, variant: "shortText", validationRegexp: "^[^@]+@[^@]+\\.[^@]+$", checks: [{call: "required", args: {value: {path: "/form/email"}}, message: "Email obligatorio"}, {call: "email", args: {value: {path: "/form/email"}}, message: "Email inválido"}]},
186
+ {id: "msg_field", component: "TextField", label: "Mensaje", value: {path: "/form/message"}, variant: "longText"},
187
+ {id: "submit_label", component: "Text", text: "Enviar"},
188
+ {id: "submit_btn", component: "Button", child: "submit_label", variant: "primary", action: {event: {name: "submit_contact", context: {name: {path: "/form/name"}, email: {path: "/form/email"}, message: {path: "/form/message"}}}}
189
+ ])
190
+
191
+ // 3. Initialize data model
192
+ a2ui_update_data_model(surfaceId: "contact_form", path: "/form", value: {name: "", email: "", message: ""})
193
+ ```
194
+
195
+ ## Mejores Prácticas
196
+
197
+ - Siempre incluir un componente `root` con id="root"
198
+ - Usar `{ path: "/..." }` para data binding en TextField values
199
+ - Agregar `checks` para validación de campos obligatorios
200
+ - Usar `variant: "primary"` para botones principales
201
+ - Eliminar surfaces con `a2ui_delete_surface` al terminar
202
+ - Preferir A2UI forms sobre `canvas_ask` para formularios complejos con validación
@@ -0,0 +1,206 @@
1
+ ---
2
+ name: a2ui_interactive
3
+ description: "Create multi-step interactive workflows using A2UI v0.9 protocol with tabs, modals, choice pickers, and dynamic updates based on user actions"
4
+ version: 1.0.0
5
+ author: Hive Team
6
+ icon: "🔄"
7
+ category: canvas
8
+ permissions:
9
+ - canvas_write
10
+ dependencies: []
11
+ tools: [a2ui_create_surface, a2ui_update_components, a2ui_update_data_model, a2ui_delete_surface]
12
+
13
+ # Structured skill fields
14
+ triggers:
15
+ - "interfaz interactiva A2UI"
16
+ - "A2UI interactive UI"
17
+ - "flujo A2UI"
18
+ - "A2UI workflow"
19
+ - "asistente A2UI"
20
+ - "A2UI assistant"
21
+ - "wizard A2UI"
22
+ - "flujo multi-paso A2UI"
23
+ - "multi-step flow A2UI"
24
+ - "workflow interactivo"
25
+ - "interactive workflow"
26
+ - "asistente paso a paso"
27
+ - "step-by-step assistant"
28
+ - "A2UI con tabs y modales"
29
+
30
+ preferred_agents: []
31
+
32
+ steps:
33
+ - step: 1
34
+ action: a2ui_create_surface
35
+ instruction: "Create an A2UI surface for the interactive workflow. Set theme with agent display name."
36
+ params:
37
+ surfaceId: "Descriptive ID (e.g. 'onboarding_flow', 'booking_assistant')"
38
+ catalogId: "https://a2ui.org/specification/v0_9/basic_catalog.json"
39
+ theme: "{ primaryColor: '#8B5CF6', agentDisplayName: 'Asistente' }"
40
+ output: surface_created
41
+
42
+ - step: 2
43
+ action: a2ui_update_components
44
+ instruction: "Build the initial workflow layout. Use Tabs for multi-step flows, Modal for confirmations, ChoicePicker for selections."
45
+ params:
46
+ surfaceId: "Same surfaceId from step 1"
47
+ components: "Array of A2UI component definitions for workflow steps"
48
+ output: workflow_layout
49
+
50
+ - step: 3
51
+ action: a2ui_update_data_model
52
+ instruction: "Initialize workflow state data. Include all fields needed across steps."
53
+ params:
54
+ surfaceId: "Same surfaceId"
55
+ path: "/"
56
+ value: "Initial workflow state object"
57
+ output: state_initialized
58
+
59
+ - step: 4
60
+ action: a2ui_update_components
61
+ instruction: "Update components based on user actions. Show/hide steps, change options, add validation feedback."
62
+ params:
63
+ surfaceId: "Same surfaceId"
64
+ components: "Updated component definitions reflecting state changes"
65
+ output: workflow_updated
66
+
67
+ - step: 5
68
+ action: a2ui_delete_surface
69
+ instruction: "Delete the workflow surface when the flow is completed or cancelled."
70
+ params:
71
+ surfaceId: "Same surfaceId"
72
+ output: surface_deleted
73
+
74
+ rules:
75
+ - "Always call a2ui_create_surface BEFORE a2ui_update_components"
76
+ - "Components MUST include a root component with id='root'"
77
+ - "Use Tabs for multi-step workflows with tabItems: [{title, child}]"
78
+ - "Use Modal for confirmation dialogs: {entryPointChild, contentChild}"
79
+ - "Use ChoicePicker for selections: variant='mutuallyExclusive' for single, omit for multiple"
80
+ - "Use Button actions with event format: {event: {name: 'action_name', context: {key: {path: '/data/key'}}}}"
81
+ - "Update workflow state with a2ui_update_data_model after each user action"
82
+ - "Use a2ui_update_components to change the UI structure between steps"
83
+ - "Show progress indicators with Text components showing current step"
84
+ - "Validate inputs with checks on TextField: [{call: 'required', args: {value: {path: '...'}}, message: 'Required'}]"
85
+ - "Delete surfaces with a2ui_delete_surface when workflow is completed"
86
+ - "For simple confirmations prefer canvas_confirm; use A2UI for multi-step workflows"
87
+
88
+ output_format:
89
+ structure: a2ui_interactive
90
+ sections:
91
+ - "surface_creation"
92
+ - "workflow_layout"
93
+ - "state_initialization"
94
+ - "dynamic_updates"
95
+ - "cleanup"
96
+ max_length: "Structured JSON components"
97
+
98
+ examples:
99
+ - user_input: "creá un asistente de reserva"
100
+ expected_behavior: "a2ui_create_surface(surfaceId:'booking', theme:{primaryColor:'#8B5CF6'}) → a2ui_update_components with Tabs[step1:service, step2:datetime, step3:confirm] → a2ui_update_data_model(path:'/', value:{service:'', date:'', time:''})"
101
+
102
+ - user_input: "I need a multi-step onboarding flow"
103
+ expected_behavior: "a2ui_create_surface → a2ui_update_components with Column[step indicator, step content, nav buttons] → a2ui_update_data_model with empty state → on action: a2ui_update_components for next step"
104
+
105
+ - user_input: "creá un wizard con selección de opciones"
106
+ expected_behavior: "a2ui_create_surface → a2ui_update_components with ChoicePicker for options, Button for navigation → a2ui_update_data_model with initial state"
107
+ ---
108
+
109
+ # A2UI Interactive Skill
110
+
111
+ ## Cuándo se Activa
112
+
113
+ Para crear flujos interactivos multi-paso usando A2UI v0.9. Usar cuando se necesita:
114
+ - Wizards paso a paso
115
+ - Flujos de onboarding
116
+ - Asistentes de reserva/configuración
117
+ - Formularios con selections dinámicas
118
+ - Interacciones con modales de confirmación
119
+ - UIs que cambian según las acciones del usuario
120
+
121
+ ## Herramientes Disponibles
122
+
123
+ | Tool | Qué hace | Cuándo usarla |
124
+ |------|----------|---------------|
125
+ | `a2ui_create_surface` | Crea la superficie A2UI | Siempre primero |
126
+ | `a2ui_update_components` | Envía/actualiza componentes | Para layout y cambios de UI |
127
+ | `a2ui_update_data_model` | Actualiza datos | Para estado del workflow |
128
+ | `a2ui_delete_surface` | Elimina la superficie | Al terminar flujo |
129
+
130
+ ## Flujo Obligatorio
131
+
132
+ ```
133
+ 1. a2ui_create_surface(surfaceId, catalogId, theme)
134
+ 2. a2ui_update_components(surfaceId, components[])
135
+ 3. a2ui_update_data_model(surfaceId, path, value) // estado inicial
136
+ 4. [recibir acción del usuario]
137
+ 5. a2ui_update_data_model(...) // actualizar estado con respuesta
138
+ 6. a2ui_update_components(...) // cambiar UI al siguiente paso
139
+ 7. ... repetir 4-6 según necesidad ...
140
+ 8. a2ui_delete_surface(surfaceId) // al terminar
141
+ ```
142
+
143
+ ## Patrones de Flujo Interactivo
144
+
145
+ ### Wizard con Tabs (multi-paso)
146
+
147
+ ```json
148
+ [
149
+ {id: "root", component: "Column", children: ["step_indicator", "tabs"]},
150
+ {id: "step_indicator", component: "Text", text: {path: "/stepLabel"}, variant: "caption"},
151
+ {id: "tabs", component: "Tabs", tabs: [
152
+ {title: "Servicio", child: "step1"},
153
+ {title: "Fecha", child: "step2"},
154
+ {title: "Confirmar", child: "step3"}
155
+ ]},
156
+ {id: "step1", component: "Column", children: ["svc_label", "svc_picker"]},
157
+ {id: "svc_label", component: "Text", text: "Seleccioná un servicio", variant: "h3"},
158
+ {id: "svc_picker", component: "ChoicePicker", variant: "mutuallyExclusive", options: [...], value: {path: "/data/service"}},
159
+ // ... más pasos
160
+ ]
161
+ ```
162
+
163
+ ### Confirmación con Modal
164
+
165
+ ```json
166
+ [
167
+ {id: "confirm_modal", component: "Modal", trigger: "confirm_btn", content: "confirm_dialog"},
168
+ {id: "confirm_btn", component: "Button", child: "confirm_btn_text", action: {}},
169
+ {id: "confirm_btn_text", component: "Text", text: "Confirmar Reserva"},
170
+ {id: "confirm_dialog", component: "Column", children: ["confirm_msg", "confirm_yes", "confirm_no"]},
171
+ {id: "confirm_msg", component: "Text", text: "¿Confirmás tu reserva?"},
172
+ {id: "confirm_yes", component: "Button", child: "yes_text", variant: "primary", action: {event: {name: "confirm_booking", context: {service: {path: "/data/service"}}}}},
173
+ {id: "yes_text", component: "Text", text: "Sí, confirmar"},
174
+ {id: "confirm_no", component: "Button", child: "no_text", variant: "borderless", action: {event: {name: "cancel"}}}},
175
+ {id: "no_text", component: "Text", text: "Cancelar"}
176
+ ]
177
+ ```
178
+
179
+ ### Selección con ChoicePicker
180
+
181
+ ```json
182
+ [
183
+ {id: "service_picker", component: "ChoicePicker",
184
+ variant: "mutuallyExclusive",
185
+ options: [
186
+ {label: "Consulta General", value: "general"},
187
+ {label: "Especializada", value: "specialist"},
188
+ {label: "Urgencia", value: "urgent"}
189
+ ],
190
+ value: {path: "/data/serviceType"},
191
+ action: {event: {name: "service_selected", context: {service: {path: "/data/serviceType"}}}}
192
+ }
193
+ ]
194
+ ```
195
+
196
+ ## Mejores Prácticas
197
+
198
+ - Usar Tabs para wizards multi-paso
199
+ - Usar Modal para confirmaciones antes de acciones críticas
200
+ - Usar ChoicePicker con `variant: "mutuallyExclusive"` para selección única
201
+ - Mostrar indicador de progreso (paso X de Y)
202
+ - Actualizar data model después de cada acción del usuario
203
+ - Usar `a2ui_update_components` para cambiar la UI entre pasos
204
+ - Agregar validación con `checks` en TextField
205
+ - Mantener el estado del flujo en el data model (`/data/step`, `/data/serviceType`, etc.)
206
+ - Eliminar surfaces con `a2ui_delete_surface` al completar o cancelar