@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,1964 @@
1
+ // AUTO-GENERATED by packages/skills/scripts/generate-bundle.ts
2
+ // Do NOT edit manually — run `bun packages/skills/scripts/generate-bundle.ts` to regenerate
3
+
4
+ export interface BundledSkillEntry {
5
+ name: string;
6
+ description: string;
7
+ category: string;
8
+ version: string;
9
+ tools: string[];
10
+ triggers: string[];
11
+ body: string;
12
+ }
13
+
14
+ export const BUNDLED_SKILLS_DATA: BundledSkillEntry[] = [
15
+ {
16
+ name: "voice_assistant",
17
+ description: `Full voice-to-voice interaction: transcribe user speech, process request, and respond with synthesized speech`,
18
+ category: "voice",
19
+ version: "1.0.0",
20
+ tools: ["voice_transcribe","voice_speak"],
21
+ triggers: ["modo voz","voice mode","asistente de voz","voice assistant","hablá conmigo","talk to me","interacción por voz","voice interaction","respuesta hablada","spoken response","comando de voz","voice command","diálogo por voz","voice dialogue"],
22
+ body: `
23
+ # Voice Assistant Skill
24
+
25
+ ## Cuándo se Activa
26
+
27
+ Esta skill se activa para interacción completa voz a voz: el usuario habla, el asistente procesa y responde con voz.
28
+
29
+ ## Herramientas Disponibles
30
+
31
+ | Tool | Qué hace | Cuándo usarla |
32
+ |------|----------|---------------|
33
+ | \`voice_transcribe\` | Audio → texto | Input del usuario |
34
+ | \`voice_speak\` | Texto → audio | Respuesta del asistente |
35
+
36
+ ## Workflow
37
+
38
+ ### Voice-to-Voice
39
+ \`\`\`javascript
40
+ // 1. Usuario habla
41
+ const userAudio = receiveAudio()
42
+
43
+ // 2. Transcribir
44
+ const userText = voice_transcribe({
45
+ audio: userAudio,
46
+ language: "auto"
47
+ })
48
+ // → "¿Cuál es el clima hoy?"
49
+
50
+ // 3. Procesar request
51
+ // - Entender intención
52
+ // - Ejecutar acción (ej. consultar API clima)
53
+ // - Generar respuesta
54
+ const responseText = "Hoy hay 25 grados y soleado en Buenos Aires"
55
+
56
+ // 4. Sintetizar respuesta
57
+ const responseAudio = voice_speak({
58
+ text: responseText,
59
+ voice_id: "eleven_flash_v2_5",
60
+ language: "es"
61
+ })
62
+
63
+ // 5. Enviar audio
64
+ sendAudio(responseAudio)
65
+ \`\`\`
66
+
67
+ ## Casos de Uso
68
+
69
+ | Caso | Flujo |
70
+ |------|-------|
71
+ | Pregunta simple | Transcribe → responde → sintetiza |
72
+ | Comando | Transcribe → ejecuta → confirma por voz |
73
+ | Diálogo | Mantener contexto entre exchanges |
74
+ | Wake word | Escuchar "hey bee" → activar → procesar |
75
+
76
+ ## Configuración
77
+
78
+ ### Wake Word
79
+ \`\`\`json
80
+ {
81
+ "voice_wake_word": "hey bee",
82
+ "voice_wake_enabled": true
83
+ }
84
+ \`\`\`
85
+
86
+ ### Canal Voice
87
+ \`\`\`json
88
+ {
89
+ "voice_enabled": true,
90
+ "tts_enabled": true,
91
+ "stt_provider": "groq-whisper",
92
+ "tts_provider": "elevenlabs",
93
+ "tts_voice_id": "eleven_flash_v2_5"
94
+ }
95
+ \`\`\`
96
+
97
+ ## Mejores Prácticas
98
+
99
+ - Respuestas cortas y naturales (<60s)
100
+ - Mantener contexto conversacional
101
+ - Indicadores de procesamiento
102
+ - Fallback a texto si falla voz
103
+
104
+ ## Errores a Evitar
105
+
106
+ - ❌ Respuestas muy largas para audio
107
+ - ❌ Perder contexto entre exchanges
108
+ - ❌ No indicar que está procesando
109
+ - ❌ No tener fallback si falla TTS/STT
110
+ `,
111
+ },
112
+ {
113
+ name: "voice_input",
114
+ description: `Transcribe audio input to text using STT (Speech-to-Text) providers like Groq Whisper or OpenAI Whisper`,
115
+ category: "voice",
116
+ version: "1.0.0",
117
+ tools: ["voice_transcribe"],
118
+ triggers: ["transcribí este audio","transcribe audio","convertí voz a texto","convert voice to text","qué dice el audio","what does audio say","escuchá esto","listen to this","audio a texto","audio to text","reconocimiento de voz","speech recognition","nota de voz","voice note"],
119
+ body: `
120
+ # Voice Input Skill
121
+
122
+ ## Cuándo se Activa
123
+
124
+ Esta skill se activa cuando el usuario envía audio y necesita transcripción a texto: notas de voz, grabaciones, comandos de voz.
125
+
126
+ ## Herramientas Disponibles
127
+
128
+ | Tool | Qué hace | Cuándo usarla |
129
+ |------|----------|---------------|
130
+ | \`voice_transcribe\` | Convierte audio → texto | Transcripción de cualquier audio |
131
+
132
+ ## Workflow
133
+
134
+ ### Transcripción
135
+ \`\`\`javascript
136
+ // 1. Recibir audio
137
+ // - File upload
138
+ // - Voice message (Telegram, WhatsApp)
139
+ // - Stream en vivo
140
+
141
+ // 2. Transcribir
142
+ const result = voice_transcribe({
143
+ audio: audioBuffer,
144
+ language: "es" // o "auto" para detectar
145
+ })
146
+
147
+ // 3. Formatear
148
+ // - Agregar puntuación
149
+ // - Capitalizar
150
+ // - Marcar speakers si hay múltiples
151
+
152
+ // 4. Entregar resultado
153
+ \`\`\`
154
+
155
+ ## Proveedores STT Soportados
156
+
157
+ | Provider | Modelos | Idiomas |
158
+ |----------|---------|---------|
159
+ | Groq | whisper-large-v3, turbo | Multi |
160
+ | OpenAI | whisper-1 | Multi |
161
+
162
+ ## Configuración por Canal
163
+
164
+ Cada canal puede configurar su proveedor STT preferido:
165
+ - \`stt_provider\`: "groq-whisper" | "openai-whisper"
166
+
167
+ ## Mejores Prácticas
168
+
169
+ - Detectar idioma automáticamente
170
+ - Agregar puntuación para legibilidad
171
+ - Marcar segmentos inaudibles
172
+ - Preservar idioma original
173
+
174
+ ## Errores a Evitar
175
+
176
+ - ❌ Traducir sin pedir (mantener idioma)
177
+ - ❌ Omitir puntuación
178
+ - ❌ No indicar baja confianza
179
+ - ❌ Ignorar ruido de fondo que afecta calidad
180
+ `,
181
+ },
182
+ {
183
+ name: "voice_output",
184
+ description: `Convert text to synthesized speech using TTS (Text-to-Speech) providers like ElevenLabs, OpenAI TTS, or Gemini TTS`,
185
+ category: "voice",
186
+ version: "1.0.0",
187
+ tools: ["voice_speak"],
188
+ triggers: ["leé esto en voz alta","read this aloud","convertí a voz","convert to speech","hablá este texto","speak this text","texto a voz","text to speech","generá audio","generate audio","síntesis de voz","voice synthesis","escuchá la respuesta","listen to response"],
189
+ body: `
190
+ # Voice Output Skill
191
+
192
+ ## Cuándo se Activa
193
+
194
+ Esta skill se activa cuando el usuario necesita convertir texto a voz: leer respuestas, generar audio, síntesis de voz.
195
+
196
+ ## Herramientas Disponibles
197
+
198
+ | Tool | Qué hace | Cuándo usarla |
199
+ |------|----------|---------------|
200
+ | \`voice_speak\` | Convierte texto → audio | Síntesis de voz |
201
+
202
+ ## Workflow
203
+
204
+ ### Text-to-Speech
205
+ \`\`\`javascript
206
+ // 1. Recibir texto
207
+ const text = "Hola, ¿cómo estás?"
208
+
209
+ // 2. Preprocesar
210
+ // - Expandir números: "5" → "cinco"
211
+ // - Expandir fechas: "01/01" → "primero de enero"
212
+ // - Expandir abbreviaturas: "Dr." → "Doctor"
213
+
214
+ // 3. Sintetizar
215
+ const audio = voice_speak({
216
+ text: optimizedText,
217
+ voice_id: "eleven_flash_v2_5", // o configured voice
218
+ language: "es"
219
+ })
220
+
221
+ // 4. Entregar audio
222
+ // - Enviar como archivo
223
+ // - Streaming si el canal lo soporta
224
+ \`\`\`
225
+
226
+ ## Proveedores TTS Soportados
227
+
228
+ | Provider | Modelos | Voces |
229
+ |----------|---------|-------|
230
+ | ElevenLabs | Flash V2.5, Turbo V2.5, Multilingual V2, V3 | 1000+ |
231
+ | OpenAI | tts-1, tts-1-hd, gpt-4o-mini-tts | 6+ |
232
+ | Gemini | 2.5 Flash TTS, 2.5 Pro TTS | Multi |
233
+ | Qwen | Qwen TTS Flash, Instruct | Multi |
234
+
235
+ ## Configuración por Canal
236
+
237
+ Cada canal configura su proveedor TTS:
238
+ - \`tts_provider\`: "elevenlabs" | "openai-tts" | "gemini-tts"
239
+ - \`tts_voice_id\`: ID específico de voz (ej. ElevenLabs voice ID)
240
+
241
+ ## Mejores Prácticas
242
+
243
+ - Preprocesar texto para naturalidad
244
+ - Usar voz configurada por usuario
245
+ - Cachear respuestas frecuentes
246
+ - Split de textos largos
247
+
248
+ ## Errores a Evitar
249
+
250
+ - ❌ Enviar texto crudo sin preprocesar
251
+ - ❌ Ignorar preferencia de voz
252
+ - ❌ No manejar límites de longitud
253
+ - ❌ No cachear (costo API)
254
+ `,
255
+ },
256
+ {
257
+ name: "cli_safe_exec",
258
+ description: `Execute shell commands safely with error handling, timeouts, and output validation`,
259
+ category: "cli",
260
+ version: "1.0.0",
261
+ tools: ["exec","terminal"],
262
+ triggers: ["ejecutá este comando","run this command","corré el comando","execute command","terminal","bash","shell","npm","yarn","bun","git","docker","comando de sistema","system command"],
263
+ body: `
264
+ # CLI Safe Exec Skill
265
+
266
+ ## Cuándo se Activa
267
+
268
+ Para ejecutar comandos de shell de forma segura con manejo de errores y timeouts.
269
+
270
+ ## Herramientas Disponibles
271
+
272
+ | Tool | Qué hace | Cuándo usarla |
273
+ |------|----------|---------------|
274
+ | \`exec\` | Ejecuta con validación y timeout | Comandos simples (<30s) |
275
+ | \`terminal\` | Ejecuta con entorno completo | Comandos complejos, Git, npm |
276
+
277
+ ## ⚠️ ADVERTENCIA CRÍTICA
278
+
279
+ **NUNCA usar para tareas programadas** — usar \`cron.create\` en su lugar.
280
+
281
+ ## Workflow
282
+
283
+ 1. **Validar** → Comando es seguro, no destructivo
284
+ 2. **Ejecutar** → \`exec\` o \`terminal\` con timeout apropiado
285
+ 3. **Parsear** → Check exitCode, stdout, stderr
286
+ 4. **Manejar error** → Si falló, analizar y sugerir fixes
287
+
288
+ ## Timeouts Apropiados
289
+
290
+ | Tipo | Timeout |
291
+ |------|---------|
292
+ | Listar archivos | 10s |
293
+ | Git operations | 30s |
294
+ | npm install | 120s |
295
+ | npm run build | 120s |
296
+ | npm test | 180s |
297
+ | Docker builds | 300s |
298
+
299
+ ## Errores a Evitar
300
+
301
+ - ❌ Usar para cron (usar cron.create)
302
+ - ❌ Sin timeout apropiado
303
+ - ❌ Ignorar exitCode
304
+ - ❌ Comandos destructivos sin confirmar
305
+ `,
306
+ },
307
+ {
308
+ name: "cli_pipeline",
309
+ description: `Execute shell commands and pipe output to files for logging and further processing`,
310
+ category: "cli",
311
+ version: "1.0.0",
312
+ tools: ["exec","terminal","project_write"],
313
+ triggers: ["guardá el output","save output","pipeline","pipe to file","redireccioná el output","redirect output","log del comando","command log","ejecutá y guardá","run and save","resultado en archivo","result to file"],
314
+ body: `
315
+ # CLI Pipeline Skill
316
+
317
+ ## Cuándo se Activa
318
+
319
+ Para ejecutar comandos y guardar el output en archivos para logging o procesamiento posterior.
320
+
321
+ ## Herramientas Disponibles
322
+
323
+ | Tool | Qué hace | Cuándo usarla |
324
+ |------|----------|---------------|
325
+ | \`exec\` | Ejecuta comando | Comandos simples |
326
+ | \`terminal\` | Ejecuta con entorno | Comandos complejos |
327
+ | \`project_write\` | Escribe archivo | Guardar output |
328
+
329
+ ## Workflow
330
+
331
+ 1. **Validar comando** → Seguro para ejecución
332
+ 2. **Ejecutar** → Capturar stdout + stderr
333
+ 3. **Formatear** → Agregar timestamp, comando, metadata
334
+ 4. **Escribir** → \`project_write({ path, content })\`
335
+
336
+ ## Formato de Log
337
+
338
+ \`\`\`markdown
339
+ # Command Log
340
+
341
+ **Command**: npm install
342
+ **Timestamp**: 2025-03-09 14:30:00
343
+ **Exit Code**: 0
344
+ **Execution Time**: 45.2s
345
+
346
+ ---
347
+
348
+ ## Output
349
+
350
+ [stdout content...]
351
+ [stderr if any...]
352
+ \`\`\`
353
+
354
+ ## Mejores Prácticas
355
+
356
+ - Filenames con timestamp para tracking
357
+ - Incluir metadata completa (exitCode, tiempo)
358
+ - Capturar stdout y stderr
359
+ - Para outputs grandes, escribir incrementalmente
360
+
361
+ ## Errores a Evitar
362
+
363
+ - ❌ No incluir metadata en log
364
+ - ❌ Filenames genéricos sin timestamp
365
+ - ❌ No capturar stderr
366
+ `,
367
+ },
368
+ {
369
+ name: "cron_reminder",
370
+ description: `Schedule a reminder for yourself at a specific time. Creates a one_shot cron job that sends a notification message via your preferred channel.`,
371
+ category: "cron",
372
+ version: "2.0.0",
373
+ tools: ["cron.create","notify"],
374
+ triggers: ["recordame","remind me","recordatorio","reminder","alerta","alert","avísame","notify me","programá","schedule","para mañana","for tomorrow","en 30 minutos","in 30 minutes"],
375
+ body: `
376
+ # Cron Reminder Skill
377
+
378
+ ## Cuándo se Activa
379
+
380
+ Para crear recordatorios de una sola ejecución (one_shot): "recuerdame a las 3pm", "avísame en 30 minutos", etc.
381
+
382
+ ## Herramientas
383
+
384
+ | Tool | Qué hace |
385
+ |------|----------|
386
+ | \`cron.create\` | Crear recordatorio one_shot |
387
+ | \`notify\` | Enviar notificación directa |
388
+
389
+ ## Cómo Funciona
390
+
391
+ 1. **Preguntar** → ¿De qué te aviso? ¿A qué hora? ¿Por qué canal?
392
+ 2. **Crear** → \`cron.create\` con \`task_type: 'one_shot'\` y \`fire_at\` en formato ISO
393
+ 3. **Confirmar** → Mostrar hora programada
394
+
395
+ ## Parámetros
396
+
397
+ | Campo | Descripción |
398
+ |-------|-------------|
399
+ | \`task\` | **REQUERIDO** - Mensaje del recordatorio |
400
+ | \`task_type\` | Siempre \`'one_shot'\` |
401
+ | \`fire_at\` | Fecha/hora ISO (ej: \`'2026-04-20T15:00:00'\`) |
402
+ | \`channel\` | Canal (telegram, discord, whatsapp, webchat) |
403
+
404
+ ## Errores Comunes
405
+
406
+ - ❌ Olvidar el campo \`task\` — obligatorio para que el agente sepa qué enviar
407
+ - ❌ Usar expresiones cron para recordatorios (usar \`fire_at\` en vez de \`cron_expression\`)
408
+ - ❌ Poner \`fire_at\` en el pasado`,
409
+ },
410
+ {
411
+ name: "meeting_transcription",
412
+ description: `Transcribir reuniones en tiempo real y generar informes gerenciales con decisiones, action items y próximos pasos`,
413
+ category: "meeting",
414
+ version: "1.0.0",
415
+ tools: ["meeting_start","meeting_add_segment","meeting_stop","meeting_report","office_escribir_docx","notify","report_progress"],
416
+ triggers: ["transcribir reunión","iniciar transcripción","meeting transcription","grabar reunión","iniciar reunión","start meeting","detener reunión","stop meeting","reporte de reunión","generar reporte reunión","informe de reunión","acta de reunión","transcripción de reunión","meeting report"],
417
+ body: `
418
+ # Meeting Transcription Skill
419
+
420
+ ## Cuándo se Activa
421
+
422
+ Esta skill se activa para gestión completa del ciclo de vida de una reunión: inicio, transcripción en tiempo real, detención y generación de informe gerencial.
423
+
424
+ ## Herramientas Disponibles
425
+
426
+ | Tool | Qué hace | Cuándo usarla |
427
+ |------|----------|---------------|
428
+ | \`meeting_start\` | Crea una sesión en DB → devuelve session_id | Al iniciar la reunión |
429
+ | \`meeting_add_segment\` | Transcribe un chunk de audio y lo persiste | Por cada audio recibido |
430
+ | \`meeting_stop\` | Marca la sesión como detenida | Cuando termina la reunión |
431
+ | \`meeting_report\` | Lee todos los segmentos y arma el transcript | Para generar el reporte |
432
+ | \`office_escribir_docx\` | Guarda el reporte como archivo Word | Al finalizar el análisis |
433
+ | \`notify\` | Envía mensajes en tiempo real al canal | Para mostrar transcripciones y el reporte |
434
+ | \`report_progress\` | Muestra progreso en barra | Durante transcripción larga |
435
+
436
+ ## Workflow Completo
437
+
438
+ \`\`\`
439
+ Usuario: "transcribir reunión"
440
+ → Agente pregunta título
441
+ → meeting_start(title) → session_id: "abc123"
442
+ → Agente: "✅ Sesión abc123 iniciada. Habla cuando quieras."
443
+
444
+ [Usuario graba audio en la UI]
445
+ → meeting_add_segment(session_id, audio_base64)
446
+ → notify: "[Speaker]: Texto transcrito..."
447
+
448
+ Usuario: "detener reunión"
449
+ → meeting_stop(session_id)
450
+ → Agente: "⏹️ 47 segmentos transcritos. ¿Genero el reporte?"
451
+
452
+ Usuario: "sí"
453
+ → meeting_report(session_id) → transcript completo
454
+ → LLM analiza → secciones estructuradas
455
+ → office_escribir_docx → informe_reunion_abc123.docx
456
+ → notify: [Markdown del informe completo]
457
+ → Agente: "✅ DOCX guardado en workspace."
458
+ \`\`\`
459
+
460
+ ## Formato del Informe Gerencial
461
+
462
+ El informe generado incluye:
463
+
464
+ 1. **Resumen Ejecutivo** — Captura la esencia en 3-5 oraciones
465
+ 2. **Participantes** — Detectados automáticamente del transcript
466
+ 3. **Decisiones Tomadas** — Lista numerada de cada decisión
467
+ 4. **Action Items** — Tabla con Tarea / Responsable / Fecha
468
+ 5. **Próximos Pasos** — Acciones inmediatas
469
+ 6. **Temas de Seguimiento** — Pendientes para futuras reuniones
470
+
471
+ ## Consideraciones
472
+
473
+ - El informe se entrega en dos formatos: **Markdown en chat** + **DOCX descargable**
474
+ - El idioma del informe es siempre **español**
475
+ - La latencia de transcripción es ~4s por chunk de 3s de audio (normal para Whisper)
476
+ - El session_id debe conservarse durante toda la reunión
477
+ `,
478
+ },
479
+ {
480
+ name: "web_monitor",
481
+ description: `Monitor changes in web sources and track updates over time with persistent memory`,
482
+ category: "web",
483
+ version: "1.0.0",
484
+ tools: ["web_search","web_fetch","memory_write","memory_read"],
485
+ triggers: ["monitoreá","monitor","seguí los cambios","track changes","avisame si cambia","notify if changes","actualización de","update on","novedades de","news about","cambios en","changes in"],
486
+ body: `
487
+ # Web Monitor Skill
488
+
489
+ ## Cuándo se Activa
490
+
491
+ Esta skill se activa cuando el usuario necesita:
492
+ - Monitorear cambios en una URL específica
493
+ - Recibir notificaciones de actualizaciones
494
+ - Seguir novedades sobre un tema
495
+ - Trackear evolución de contenido
496
+
497
+ ## Herramientas Disponibles
498
+
499
+ | Tool | Qué hace | Cuándo usarla |
500
+ |------|----------|---------------|
501
+ | \`web_fetch\` | Descarga contenido de URL | Obtener contenido actual |
502
+ | \`web_search\` | Busca novedades | Monitoreo por tema (no URL fija) |
503
+ | \`memory_write\` | Guarda baseline | Almacenar contenido para comparación |
504
+ | \`memory_read\` | Recupera baseline anterior | Comparar con contenido actual |
505
+
506
+ ## Workflow
507
+
508
+ 1. **Primera ejecución**: \`web_fetch\` → \`memory_write\` (baseline)
509
+ 2. **Chequeos siguientes**: \`memory_read\` → \`web_fetch\` → comparar → \`notify\` si cambia
510
+ 3. **Actualizar baseline**: \`memory_write\` con nuevo contenido
511
+
512
+ ## Mejores Prácticas
513
+
514
+ - Ignorar cambios menores (timestamps, ads, contenido dinámico irrelevante)
515
+ - Notificar solo cambios significativos
516
+ - Para monitoreo periódico, combinar con \`cron.create\`
517
+
518
+ ## Errores a Evitar
519
+
520
+ - ❌ No almacenar baseline inicial
521
+ - ❌ Notificar por cambios triviales
522
+ - ❌ No actualizar timestamp de baseline
523
+ `,
524
+ },
525
+ {
526
+ name: "web_research",
527
+ description: `Search and synthesize information from multiple web sources into structured reports`,
528
+ category: "web",
529
+ version: "1.0.0",
530
+ tools: ["web_search","web_fetch"],
531
+ triggers: ["investigá sobre","research","buscá información de","find information about","qué es","what is","explicame","explain","últimos avances","latest advances","tendencias de","trends in","información actualizada","current information"],
532
+ body: `
533
+ # Web Research Skill
534
+
535
+ ## Cuándo se Activa
536
+
537
+ Esta skill se activa cuando el usuario necesita información actualizada de internet, verificar datos, o investigar temas específicos.
538
+
539
+ ## Herramientas Disponibles
540
+
541
+ | Tool | Qué hace | Cuándo usarla |
542
+ |------|----------|---------------|
543
+ | \`web_search\` | Busca en internet, devuelve títulos, URLs, snippets | Búsqueda inicial, encontrar fuentes |
544
+ | \`web_fetch\` | Descarga contenido completo de URL (HTML→Markdown) | Profundizar en resultados específicos |
545
+
546
+ ## Workflow
547
+
548
+ 1. **Búsqueda inicial** → \`web_search({ query, numResults: 8 })\`
549
+ 2. **Fetch contenido** → \`web_fetch({ urls: top 2-3 })\`
550
+ 3. **Búsqueda complementaria** → Segundo search si hay gaps
551
+ 4. **Síntesis** → summary + key points + sources
552
+
553
+ ## Mejores Prácticas
554
+
555
+ - Queries específicos (máx 6 palabras)
556
+ - Mínimo 2-3 fuentes independientes
557
+ - Priorizar contenido reciente (<1 año)
558
+ - Citas con URLs completas
559
+
560
+ ## Errores a Evitar
561
+
562
+ - ❌ Inventar datos no encontrados
563
+ - ❌ Concluir con una sola búsqueda
564
+ - ❌ No verificar fecha de fuentes
565
+ - ❌ Copiar contenido literal (usar paráfrasis)
566
+ `,
567
+ },
568
+ {
569
+ name: "browser_automate",
570
+ description: `Automate web workflows with navigation, clicks, form filling, and visual verification`,
571
+ category: "web",
572
+ version: "1.0.0",
573
+ tools: ["browser_navigate","browser_click","browser_type","browser_screenshot"],
574
+ triggers: ["automatizá el navegador","automate browser","completá el formulario","fill form","hacé clic en","click on","iniciá sesión","login","registrate","sign up","interactuá con la web","interact with website","flujo web","web workflow"],
575
+ body: `
576
+ # Browser Automate Skill
577
+
578
+ ## Cuándo se Activa
579
+
580
+ Esta skill se activa para automatizar flujos de interacción con aplicaciones web: logins, formularios, navegación programática.
581
+
582
+ ## Herramientas Disponibles
583
+
584
+ | Tool | Qué hace | Cuándo usarla |
585
+ |------|----------|---------------|
586
+ | \`browser_navigate\` | Navega a URL | Inicio de flujo |
587
+ | \`browser_click\` | Click en elementos | Botones, enlaces, triggers |
588
+ | \`browser_type\` | Escribe en inputs | Formularios, búsquedas |
589
+ | \`browser_screenshot\` | Captura estado | Verificación visual |
590
+
591
+ ## Workflow Típico
592
+
593
+ 1. **Navegar** → URL inicial
594
+ 2. **Interactuar** → click/type según flujo
595
+ 3. **Verificar** → screenshot después de acciones críticas
596
+ 4. **Repetir** → para flujos multi-paso
597
+
598
+ ## Mejores Prácticas
599
+
600
+ - Selectores estables (IDs > classes > XPath)
601
+ - Esperar carga después de navegación
602
+ - Verificar estado visual con screenshots
603
+ - Manejar errores de elementos no encontrados
604
+
605
+ ## Errores a Evitar
606
+
607
+ - ❌ Selectores frágiles que cambian
608
+ - ❌ No esperar carga de página
609
+ - ❌ Ignorar errores de elementos
610
+ - ❌ No verificar estado después de acciones
611
+ `,
612
+ },
613
+ {
614
+ name: "browser_scrape",
615
+ description: `Navigate to web pages and capture rendered content including screenshots for dynamic sites`,
616
+ category: "web",
617
+ version: "1.0.0",
618
+ tools: ["browser_navigate","browser_screenshot","web_fetch"],
619
+ triggers: ["capturá el contenido","scrape content","obtené la página renderizada","get rendered page","sitios dinámicos","dynamic sites","web con javascript","javascript websites","tomá screenshot y contenido","screenshot and content"],
620
+ body: `
621
+ # Browser Scrape Skill
622
+
623
+ ## Cuándo se Activa
624
+
625
+ Esta skill se activa para sitios web dinámicos que requieren JavaScript rendering, donde el contenido no está disponible en HTML estático.
626
+
627
+ ## Herramientas Disponibles
628
+
629
+ | Tool | Qué hace | Cuándo usarla |
630
+ |------|----------|---------------|
631
+ | \`browser_navigate\` | Navega y renderiza página completa | Sitios con JavaScript/SPA |
632
+ | \`browser_screenshot\` | Captura estado visual | Evidencia de contenido renderizado |
633
+ | \`web_fetch\` | Extrae texto como markdown | Contenido textual de página renderizada |
634
+
635
+ ## Workflow
636
+
637
+ 1. **Navegar** → \`browser_navigate({ url })\` + esperar renderizado JS
638
+ 2. **Capturar visual** → \`browser_screenshot()\`
639
+ 3. **Extraer texto** → \`web_fetch()\`
640
+ 4. **Combinar** → screenshot + texto para scrape completo
641
+
642
+ ## Mejores Prácticas
643
+
644
+ - Esperar renderizado completo de JavaScript
645
+ - Para infinite scroll: hacer scroll y múltiples screenshots
646
+ - Capturar antes y después de interacciones si es dinámico
647
+
648
+ ## Errores a Evitar
649
+
650
+ - ❌ No esperar renderizado JavaScript
651
+ - ❌ Solo capturar HTML estático para sitios SPA
652
+ - ❌ Ignorar términos de servicio del sitio
653
+ `,
654
+ },
655
+ {
656
+ name: "a2ui_interactive",
657
+ description: `Create multi-step interactive workflows using A2UI v0.9 protocol with tabs, modals, choice pickers, and dynamic updates based on user actions`,
658
+ category: "canvas",
659
+ version: "1.0.0",
660
+ tools: ["a2ui_create_surface","a2ui_update_components","a2ui_update_data_model","a2ui_delete_surface"],
661
+ triggers: ["interfaz interactiva A2UI","A2UI interactive UI","flujo A2UI","A2UI workflow","asistente A2UI","A2UI assistant","wizard A2UI","flujo multi-paso A2UI","multi-step flow A2UI","workflow interactivo","interactive workflow","asistente paso a paso","step-by-step assistant","A2UI con tabs y modales"],
662
+ body: `
663
+ # A2UI Interactive Skill
664
+
665
+ ## Cuándo se Activa
666
+
667
+ Para crear flujos interactivos multi-paso usando A2UI v0.9. Usar cuando se necesita:
668
+ - Wizards paso a paso
669
+ - Flujos de onboarding
670
+ - Asistentes de reserva/configuración
671
+ - Formularios con selections dinámicas
672
+ - Interacciones con modales de confirmación
673
+ - UIs que cambian según las acciones del usuario
674
+
675
+ ## Herramientes Disponibles
676
+
677
+ | Tool | Qué hace | Cuándo usarla |
678
+ |------|----------|---------------|
679
+ | \`a2ui_create_surface\` | Crea la superficie A2UI | Siempre primero |
680
+ | \`a2ui_update_components\` | Envía/actualiza componentes | Para layout y cambios de UI |
681
+ | \`a2ui_update_data_model\` | Actualiza datos | Para estado del workflow |
682
+ | \`a2ui_delete_surface\` | Elimina la superficie | Al terminar flujo |
683
+
684
+ ## Flujo Obligatorio
685
+
686
+ \`\`\`
687
+ 1. a2ui_create_surface(surfaceId, catalogId, theme)
688
+ 2. a2ui_update_components(surfaceId, components[])
689
+ 3. a2ui_update_data_model(surfaceId, path, value) // estado inicial
690
+ 4. [recibir acción del usuario]
691
+ 5. a2ui_update_data_model(...) // actualizar estado con respuesta
692
+ 6. a2ui_update_components(...) // cambiar UI al siguiente paso
693
+ 7. ... repetir 4-6 según necesidad ...
694
+ 8. a2ui_delete_surface(surfaceId) // al terminar
695
+ \`\`\`
696
+
697
+ ## Patrones de Flujo Interactivo
698
+
699
+ ### Wizard con Tabs (multi-paso)
700
+
701
+ \`\`\`json
702
+ [
703
+ {id: "root", component: "Column", children: ["step_indicator", "tabs"]},
704
+ {id: "step_indicator", component: "Text", text: {path: "/stepLabel"}, variant: "caption"},
705
+ {id: "tabs", component: "Tabs", tabs: [
706
+ {title: "Servicio", child: "step1"},
707
+ {title: "Fecha", child: "step2"},
708
+ {title: "Confirmar", child: "step3"}
709
+ ]},
710
+ {id: "step1", component: "Column", children: ["svc_label", "svc_picker"]},
711
+ {id: "svc_label", component: "Text", text: "Seleccioná un servicio", variant: "h3"},
712
+ {id: "svc_picker", component: "ChoicePicker", variant: "mutuallyExclusive", options: [...], value: {path: "/data/service"}},
713
+ // ... más pasos
714
+ ]
715
+ \`\`\`
716
+
717
+ ### Confirmación con Modal
718
+
719
+ \`\`\`json
720
+ [
721
+ {id: "confirm_modal", component: "Modal", trigger: "confirm_btn", content: "confirm_dialog"},
722
+ {id: "confirm_btn", component: "Button", child: "confirm_btn_text", action: {}},
723
+ {id: "confirm_btn_text", component: "Text", text: "Confirmar Reserva"},
724
+ {id: "confirm_dialog", component: "Column", children: ["confirm_msg", "confirm_yes", "confirm_no"]},
725
+ {id: "confirm_msg", component: "Text", text: "¿Confirmás tu reserva?"},
726
+ {id: "confirm_yes", component: "Button", child: "yes_text", variant: "primary", action: {event: {name: "confirm_booking", context: {service: {path: "/data/service"}}}}},
727
+ {id: "yes_text", component: "Text", text: "Sí, confirmar"},
728
+ {id: "confirm_no", component: "Button", child: "no_text", variant: "borderless", action: {event: {name: "cancel"}}}},
729
+ {id: "no_text", component: "Text", text: "Cancelar"}
730
+ ]
731
+ \`\`\`
732
+
733
+ ### Selección con ChoicePicker
734
+
735
+ \`\`\`json
736
+ [
737
+ {id: "service_picker", component: "ChoicePicker",
738
+ variant: "mutuallyExclusive",
739
+ options: [
740
+ {label: "Consulta General", value: "general"},
741
+ {label: "Especializada", value: "specialist"},
742
+ {label: "Urgencia", value: "urgent"}
743
+ ],
744
+ value: {path: "/data/serviceType"},
745
+ action: {event: {name: "service_selected", context: {service: {path: "/data/serviceType"}}}}
746
+ }
747
+ ]
748
+ \`\`\`
749
+
750
+ ## Mejores Prácticas
751
+
752
+ - Usar Tabs para wizards multi-paso
753
+ - Usar Modal para confirmaciones antes de acciones críticas
754
+ - Usar ChoicePicker con \`variant: "mutuallyExclusive"\` para selección única
755
+ - Mostrar indicador de progreso (paso X de Y)
756
+ - Actualizar data model después de cada acción del usuario
757
+ - Usar \`a2ui_update_components\` para cambiar la UI entre pasos
758
+ - Agregar validación con \`checks\` en TextField
759
+ - Mantener el estado del flujo en el data model (\`/data/step\`, \`/data/serviceType\`, etc.)
760
+ - Eliminar surfaces con \`a2ui_delete_surface\` al completar o cancelar`,
761
+ },
762
+ {
763
+ name: "a2ui_form",
764
+ description: `Create rich interactive forms using A2UI v0.9 protocol with validation, data binding, and multi-step flows`,
765
+ category: "canvas",
766
+ version: "1.0.0",
767
+ tools: ["a2ui_create_surface","a2ui_update_components","a2ui_update_data_model","a2ui_delete_surface"],
768
+ triggers: ["crear formulario A2UI","create A2UI form","formulario interactivo A2UI","A2UI form","pedir datos con A2UI","collect data A2UI","formulario con validación","form with validation","formulario multi-paso","multi-step form A2UI","form dinámico A2UI","dynamic form A2UI"],
769
+ body: `
770
+ # A2UI Form Skill
771
+
772
+ ## Cuándo se Activa
773
+
774
+ Para crear formularios interactivos ricos usando el protocolo A2UI v0.9. Usar cuando se necesita:
775
+ - Validación de campos (required, email, regex)
776
+ - Data binding dinámico
777
+ - Formularios multi-paso
778
+ - Choice pickers, sliders, checkboxes
779
+ - Formularios con acciones personalizadas
780
+
781
+ ## Herramientas Disponibles
782
+
783
+ | Tool | Qué hace | Cuándo usarla |
784
+ |------|----------|---------------|
785
+ | \`a2ui_create_surface\` | Crea la superficie A2UI | Siempre primero |
786
+ | \`a2ui_update_components\` | Envía componentes | Después de crear surface |
787
+ | \`a2ui_update_data_model\` | Actualiza datos | Para valores iniciales o dinámicos |
788
+ | \`a2ui_delete_surface\` | Elimina la superficie | Al terminar |
789
+
790
+ ## Flujo Obligatorio
791
+
792
+ \`\`\`
793
+ 1. a2ui_create_surface(surfaceId, catalogId, theme)
794
+ 2. a2ui_update_components(surfaceId, components[])
795
+ 3. a2ui_update_data_model(surfaceId, path, value) // opcional, para datos iniciales
796
+ 4. [esperar acción del usuario]
797
+ 5. a2ui_delete_surface(surfaceId) // al terminar
798
+ \`\`\`
799
+
800
+ ## Componentes Disponibles
801
+
802
+ | Componente | Descripción | Props clave |
803
+ |------------|-------------|-------------|
804
+ | \`Column\` | Layout vertical | \`children\`, \`distribution\`, \`alignment\` |
805
+ | \`Row\` | Layout horizontal | \`children\`, \`distribution\`, \`alignment\` |
806
+ | \`Text\` | Texto | \`text\`, \`usageHint\` (h1-h5, body, caption, code) |
807
+ | \`Button\` | Botón | \`child\`, \`variant\`, \`action\` |
808
+ | \`TextField\` | Campo de texto | \`label\`, \`value\`, \`variant\` (shortText/longText/number/obscured), \`validationRegexp\`, \`checks\`, \`action\` |
809
+ | \`CheckBox\` | Checkbox | \`label\`, \`value\` |
810
+ | \`ChoicePicker\` | Selector múltiple | \`options\`, \`value\` (DynamicStringList), \`variant\` (mutuallyExclusive/multipleSelection), \`displayStyle\`, \`filterable\`, \`action\` |
811
+ | \`Slider\` | Slider numérico | \`value\`, \`minValue\`, \`maxValue\` |
812
+ | \`DateTimeInput\` | Fecha/hora | \`value\`, \`enableDate\`, \`enableTime\` |
813
+ | \`Card\` | Tarjeta | \`child\` |
814
+ | \`Divider\` | Separador | \`axis\` |
815
+ | \`Image\` | Imagen | \`url\`, \`fit\` |
816
+ | \`Tabs\` | Pestañas | \`tabItems\` |
817
+
818
+ ## Data Binding
819
+
820
+ - Literal: \`"texto directo"\` o número
821
+ - Path: \`{ "path": "/form/name" }\` — se resuelve contra el data model
822
+ - Function call: \`{ "call": "formatDate", "args": {...} }\`
823
+
824
+ ## Cuándo disparan acciones los inputs
825
+
826
+ | Componente | Cuándo dispara | Formato de action |
827
+ |------------|---------------|-------------------|
828
+ | \`Button\` | Al hacer click | \`{name: "...", context: {...}}\` o \`{event: {name: "...", context: {...}}}\` |
829
+ | \`TextField\` | Al perder foco (blur) o presionar Enter (en shortText) | \`{name: "...", context: {...}}\` |
830
+ | \`ChoicePicker\` | Inmediatamente al seleccionar/deseleccionar | \`{name: "...", context: {...}}\` |
831
+ | \`Slider\` | Al soltar el slider (onValueCommit) | \`{name: "...", context: {...}}\` |
832
+ | \`CheckBox\` | Al cambiar estado | — (solo two-way binding) |
833
+ | \`DateTimeInput\` | Al cambiar valor | — (solo two-way binding) |
834
+
835
+ **Nota**: Tanto \`{name: "...", context: {...}}\` (directo) como \`{event: {name: "...", context: {...}}}\` (con wrapper) son formatos válidos.
836
+
837
+ **Nota**: Para ChoicePicker usa siempre \`selections: {path: "..."}\` (no \`value\`) para two-way binding.
838
+
839
+ ## Validación (checks)
840
+
841
+ \`\`\`json
842
+ "checks": [
843
+ { "call": "required", "args": { "value": { "path": "/form/email" } }, "message": "Email is required" },
844
+ { "call": "email", "args": { "value": { "path": "/form/email" } }, "message": "Invalid email" },
845
+ { "call": "regex", "args": { "value": { "path": "/form/phone" }, "pattern": "^\\\\d{10}$" }, "message": "10 digits required" }
846
+ ]
847
+ \`\`\`
848
+
849
+ ## Ejemplo: Formulario de Contacto
850
+
851
+ \`\`\`json
852
+ // 1. Create surface
853
+ a2ui_create_surface(surfaceId: "contact_form", catalogId: "https://a2ui.org/specification/v0_9/basic_catalog.json", theme: {primaryColor: "#3B82F6", agentDisplayName: "Asistente"})
854
+
855
+ // 2. Send components
856
+ a2ui_update_components(surfaceId: "contact_form", components: [
857
+ {"id": "root", "component": "Column", "children": ["header","name_field","email_field","msg_field","submit_btn"]},
858
+ {id: "header", component: "Text", text: "Contacto", variant: "h2"},
859
+ {id: "name_field", component: "TextField", label: "Nombre", value: {path: "/form/name"}, variant: "shortText"},
860
+ {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"}]},
861
+ {id: "msg_field", component: "TextField", label: "Mensaje", value: {path: "/form/message"}, variant: "longText"},
862
+ {id: "submit_label", component: "Text", text: "Enviar"},
863
+ {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"}}}}
864
+ ])
865
+
866
+ // 3. Initialize data model
867
+ a2ui_update_data_model(surfaceId: "contact_form", path: "/form", value: {name: "", email: "", message: ""})
868
+ \`\`\`
869
+
870
+ ## Mejores Prácticas
871
+
872
+ - Siempre incluir un componente \`root\` con id="root"
873
+ - Usar \`{ path: "/..." }\` para data binding en TextField values
874
+ - Agregar \`checks\` para validación de campos obligatorios
875
+ - Usar \`variant: "primary"\` para botones principales
876
+ - Eliminar surfaces con \`a2ui_delete_surface\` al terminar
877
+ - Preferir A2UI forms sobre \`canvas_ask\` para formularios complejos con validación`,
878
+ },
879
+ {
880
+ name: "canvas_interact",
881
+ description: `Collect user input and confirmations through interactive forms and dialogs`,
882
+ category: "canvas",
883
+ version: "1.0.0",
884
+ tools: ["canvas_ask","canvas_confirm"],
885
+ triggers: ["preguntame","ask me","formulario","form","confirmame","confirm","necesito ingresar datos","need to enter data","dialogo","dialog","input del usuario","user input","seleccionar opcion","select option"],
886
+ body: `
887
+ # Canvas Interact Skill
888
+
889
+ ## Cuándo se Activa
890
+
891
+ Para recoger input del usuario mediante formularios interactivos o confirmaciones.
892
+
893
+ ## Herramientas Disponibles
894
+
895
+ | Tool | Qué hace | Cuándo usarla |
896
+ |------|----------|---------------|
897
+ | \`canvas_ask\` | Muestra formulario | Input multi-campo |
898
+ | \`canvas_confirm\` | Diálogo confirmación | Yes/No decisions |
899
+
900
+ ## Workflow
901
+
902
+ ### Confirmación Simple
903
+ \`\`\`javascript
904
+ canvas_confirm({
905
+ message: "¿Eliminar archivo?",
906
+ confirmLabel: "Sí, eliminar",
907
+ cancelLabel: "Cancelar"
908
+ })
909
+ \`\`\`
910
+
911
+ ### Formulario Complejo
912
+ \`\`\`javascript
913
+ canvas_ask({
914
+ title: "User Registration",
915
+ fields: [
916
+ { name: "email", label: "Email", type: "email", required: true },
917
+ { name: "password", label: "Password", type: "password", required: true },
918
+ {
919
+ name: "role",
920
+ label: "Role",
921
+ type: "select",
922
+ options: [
923
+ { label: "Admin", value: "admin" },
924
+ { label: "User", value: "user" }
925
+ ]
926
+ }
927
+ ]
928
+ })
929
+ \`\`\`
930
+
931
+ ## Tipos de Campo
932
+
933
+ | Type | Uso |
934
+ |------|-----|
935
+ | \`text\` | Texto libre |
936
+ | \`email\` | Email con validación |
937
+ | \`password\` | Contraseña (oculto) |
938
+ | \`number\` | Números |
939
+ | \`select\` | Dropdown con opciones |
940
+ | \`checkbox\` | Booleano |
941
+ | \`textarea\` | Texto multilínea |
942
+
943
+ ## Mejores Prácticas
944
+
945
+ - Labels claros y descriptivos
946
+ - Placeholders con ejemplos
947
+ - Marcar required explícitamente
948
+ - Validar tipos (email, number)
949
+ - Manejar cancel gracefully
950
+
951
+ ## Errores a Evitar
952
+
953
+ - ❌ Labels vagos sin contexto
954
+ - ❌ No marcar required fields
955
+ - ❌ Sin validación de tipo
956
+ - ❌ No manejar cancel
957
+ `,
958
+ },
959
+ {
960
+ name: "canvas_report",
961
+ description: `Display structured results to users using cards, lists, and progress indicators`,
962
+ category: "canvas",
963
+ version: "1.0.0",
964
+ tools: ["canvas_show_card","canvas_show_list","canvas_show_progress"],
965
+ triggers: ["mostrame en el canvas","show on canvas","mostrá los resultados","show results","tarjeta informativa","info card","lista los resultados","list results","barra de progreso","progress bar","dashboard","estado visual","visual status"],
966
+ body: `
967
+ # Canvas Report Skill
968
+
969
+ ## Cuándo se Activa
970
+
971
+ Para mostrar resultados estructurados visualmente en el canvas del usuario.
972
+
973
+ ## Herramientas Disponibles
974
+
975
+ | Tool | Qué hace | Cuándo usarla |
976
+ |------|----------|---------------|
977
+ | \`canvas_show_card\` | Muestra información estructurada | Resultados con items etiquetados |
978
+ | \`canvas_show_list\` | Lista clave-valor | Configuraciones, datos simples |
979
+ | \`canvas_show_progress\` | Barras de progreso | Estado de tasks múltiples |
980
+
981
+ ## Workflow
982
+
983
+ 1. **Determinar formato** → Card vs List vs Progress
984
+ 2. **Renderizar** → \`canvas_show_*\` apropiado
985
+ 3. **Clear** → Si cambio de contexto significativo
986
+
987
+ ## Formatos
988
+
989
+ ### Card
990
+ \`\`\`javascript
991
+ canvas_show_card({
992
+ title: "Research Results",
993
+ items: [
994
+ { label: "Trends Found", value: "7" },
995
+ { label: "Sources", value: "5 URLs" },
996
+ { label: "Time", value: "2.5 min" }
997
+ ]
998
+ })
999
+
1000
+ // Full-width card (ocupa todo el ancho del canvas):
1001
+ canvas_show_card({
1002
+ title: "Full Report",
1003
+ span: "full",
1004
+ items: [...]
1005
+ })
1006
+ \`\`\`
1007
+
1008
+ ### List
1009
+ \`\`\`javascript
1010
+ canvas_show_list({
1011
+ items: {
1012
+ "Language": "Spanish",
1013
+ "Timezone": "UTC-3",
1014
+ "Channel": "Telegram"
1015
+ }
1016
+ })
1017
+ \`\`\`
1018
+
1019
+ ### Progress
1020
+ \`\`\`javascript
1021
+ canvas_show_progress({
1022
+ bars: [
1023
+ { label: "Research", value: 100 },
1024
+ { label: "Content", value: 60 },
1025
+ { label: "Email", value: 0 }
1026
+ ]
1027
+ })
1028
+ \`\`\`
1029
+
1030
+ ## Errores a Evitar
1031
+
1032
+ - ❌ Cards con demasiados items (>7)
1033
+ - ❌ Labels vagos sin contexto
1034
+ - ❌ No clear entre contextos diferentes
1035
+ `,
1036
+ },
1037
+ {
1038
+ name: "canvas_dashboard",
1039
+ description: `Real-time visual dashboard for monitoring task status, progress, and system state`,
1040
+ category: "canvas",
1041
+ version: "1.0.0",
1042
+ tools: ["canvas_render","canvas_show_progress","canvas_clear"],
1043
+ triggers: ["mostrá el dashboard","show dashboard","estado en tiempo real","real-time status","monitoreo visual","visual monitoring","panel de control","control panel","limpiá el canvas","clear canvas","actualizá el dashboard","update dashboard"],
1044
+ body: `
1045
+ # Canvas Dashboard Skill
1046
+
1047
+ ## Cuándo se Activa
1048
+
1049
+ Para mostrar dashboards visuales de monitoreo en tiempo real de tareas, proyectos, o estado del sistema.
1050
+
1051
+ ## Herramientas Disponibles
1052
+
1053
+ | Tool | Qué hace | Cuándo usarla |
1054
+ |------|----------|---------------|
1055
+ | \`canvas_render\` | Renderiza componentes | Layout del dashboard |
1056
+ | \`canvas_show_progress\` | Barras de progreso | Estado de tasks |
1057
+ | \`canvas_clear\` | Limpia canvas | Antes de nuevo dashboard |
1058
+
1059
+ ## Workflow
1060
+
1061
+ 1. **Clear** → \`canvas_clear()\` — limpiar previo
1062
+ 2. **Render layout** → \`canvas_render({ sections })\`
1063
+ 3. **Update progress** → \`canvas_show_progress()\` en tiempo real
1064
+ 4. **Refresh** → \`canvas_render({ updates })\` para cambios
1065
+
1066
+ ## Estructura de Dashboard
1067
+
1068
+ \`\`\`javascript
1069
+ canvas_render({
1070
+ component: {
1071
+ id: "dashboard-main",
1072
+ type: "markdown",
1073
+ props: { content: "## Dashboard\\n..." },
1074
+ span: "full" // ← ancho completo del canvas
1075
+ }
1076
+ })
1077
+
1078
+ // O con tarjetas individuales:
1079
+ canvas_show_card({ title: "Métricas", span: "full", items: [...] })
1080
+ canvas_show_progress({ tasks: [...], span: "full" })
1081
+ \`\`\`
1082
+
1083
+ ## Color Coding
1084
+
1085
+ | Color | Estado |
1086
+ |-------|--------|
1087
+ | 🟢 Verde | Complete |
1088
+ | 🔵 Azul | In Progress |
1089
+ | 🔴 Rojo | Error/Blocked |
1090
+ | 🟡 Amarillo | Pending |
1091
+
1092
+ ## Mejores Prácticas
1093
+
1094
+ - Clear antes de renderizar nuevo dashboard
1095
+ - Layout consistente (header, progress, status, metrics)
1096
+ - Update en tiempo real con progreso
1097
+ - Solo información crítica (no sobrecargar)
1098
+
1099
+ ## Errores a Evitar
1100
+
1101
+ - ❌ No clear entre dashboards (clutter)
1102
+ - ❌ Demasiada información (sobrecarga visual)
1103
+ - ❌ No actualizar en tiempo real
1104
+ - ❌ Sin color coding para estados
1105
+ `,
1106
+ },
1107
+ {
1108
+ name: "a2ui_dashboard",
1109
+ description: `Create real-time interactive dashboards using A2UI v0.9 protocol with dynamic data binding and live updates`,
1110
+ category: "canvas",
1111
+ version: "1.0.0",
1112
+ tools: ["a2ui_create_surface","a2ui_update_components","a2ui_update_data_model","a2ui_delete_surface"],
1113
+ triggers: ["dashboard A2UI","panel de control A2UI","A2UI dashboard","mostrar métricas A2UI","A2UI metrics","dashboard interactivo A2UI","interactive dashboard","A2UI dashboard en tiempo real","real-time dashboard A2UI","mostrar datos A2UI","visualizar datos con A2UI"],
1114
+ body: `
1115
+ # A2UI Dashboard Skill
1116
+
1117
+ ## Cuándo se Activa
1118
+
1119
+ Para crear dashboards interactivos en tiempo real usando A2UI v0.9. Usar cuando se necesita:
1120
+ - Métricas que se actualizan dinámicamente
1121
+ - Dashboards con data binding
1122
+ - Paneles con Cards, Rows, Columns
1123
+ - Visualización de datos que cambia en tiempo real
1124
+
1125
+ ## Herramientas Disponibles
1126
+
1127
+ | Tool | Qué hace | Cuándo usarla |
1128
+ |------|----------|---------------|
1129
+ | \`a2ui_create_surface\` | Crea la superficie A2UI | Siempre primero |
1130
+ | \`a2ui_update_components\` | Envía componentes | Para layout del dashboard |
1131
+ | \`a2ui_update_data_model\` | Actualiza datos | Para métricas dinámicas |
1132
+ | \`a2ui_delete_surface\` | Elimina la superficie | Al cerrar dashboard |
1133
+
1134
+ ## Flujo Obligatorio
1135
+
1136
+ \`\`\`
1137
+ 1. a2ui_create_surface(surfaceId, catalogId, theme)
1138
+ 2. a2ui_update_components(surfaceId, components[])
1139
+ 3. a2ui_update_data_model(surfaceId, path, value) // datos iniciales
1140
+ 4. [actualizar métricas con a2ui_update_data_model según necesidad]
1141
+ 5. a2ui_delete_surface(surfaceId) // al terminar
1142
+ \`\`\`
1143
+
1144
+ ## Patrón de Dashboard Típico
1145
+
1146
+ \`\`\`json
1147
+ [
1148
+ {"id": "root", "component": "Column", "children": ["title", "metrics_row", "tasks_list"]},
1149
+ {"id": "title", "component": "Text", "text": "Dashboard de Proyecto", "variant": "h1"},
1150
+
1151
+ {"id": "metrics_row", "component": "Row", "children": ["card1", "card2", "card3"]},
1152
+ {"id": "card1", "component": "Card", "child": "card1_content", "weight": 1},
1153
+ {"id": "card1_content", "component": "Column", "children": ["card1_label", "card1_value"]},
1154
+ {"id": "card1_label", "component": "Text", "text": "Completado", "variant": "caption"},
1155
+ {"id": "card1_value", "component": "Text", "text": {"path": "/metrics/completionRate"}, "variant": "h2"},
1156
+
1157
+ {"id": "tasks_list", "component": "List", "children": {"path": "/tasks", "componentId": "task_template"}},
1158
+ {"id": "task_template", "component": "Card", "child": "task_content"},
1159
+ {"id": "task_content", "component": "Column", "children": ["task_name", "task_status"]},
1160
+ {"id": "task_name", "component": "Text", "text": {"path": "/name"}},
1161
+ {"id": "task_status", "component": "Text", "text": {"path": "/status"}, "variant": "caption"}
1162
+ ]
1163
+ \`\`\`
1164
+
1165
+ ## Actualización en Tiempo Real
1166
+
1167
+ Para actualizar métricas específicas sin reenviar componentes:
1168
+ \`\`\`json
1169
+ a2ui_update_data_model(surfaceId: "dash", path: "/metrics/completionRate", value: 85)
1170
+ a2ui_update_data_model(surfaceId: "dash", path: "/metrics/totalTasks", value: 24)
1171
+ \`\`\`
1172
+
1173
+ Para reemplazar todo el data model:
1174
+ \`\`\`json
1175
+ a2ui_update_data_model(surfaceId: "dash", path: "/", value: {metrics: {completionRate: 90, totalTasks: 25}, tasks: [...]})
1176
+ \`\`\`
1177
+
1178
+ ## Mejores Prácticas
1179
+
1180
+ - Usar \`weight\` en Row/Column para proporciones (weight:1 vs weight:3 = 25% vs 75%)
1181
+ - Agrupar métricas en Cards para separación visual
1182
+ - Usar \`usageHint: "caption"\` para labels, \`"h1"/"h2"\` para valores
1183
+ - Bind todos los valores dinámicos con \`{ path: "/..." }\`
1184
+ - Actualizar métricas con \`a2ui_update_data_model\` path específico
1185
+ - Eliminar surfaces al terminar para evitar memory leaks`,
1186
+ },
1187
+ {
1188
+ name: "task_orchestrator",
1189
+ description: `Orchestrate tasks across multiple workers with delegation, status tracking, and bus communication`,
1190
+ category: "agents",
1191
+ version: "1.1.0",
1192
+ tools: ["get_available_models","task_delegate","task_status","agent_find","agent_create","bus_publish","bus_read"],
1193
+ triggers: ["delegá esta tarea","delegate task","orquestá los workers","orchestrate workers","coordiná el equipo","coordinate team","estado de las tareas","task status","comunicá los workers","communicate workers","mensaje al bus","bus message","tarea en paralelo","parallel tasks"],
1194
+ body: `
1195
+ # Task Orchestrator Skill
1196
+
1197
+ ## Cuándo se Activa
1198
+
1199
+ Para coordinar múltiples workers, delegar tareas, monitorear progreso, y facilitar comunicación worker-to-worker.
1200
+
1201
+ ## Herramientas Disponibles
1202
+
1203
+ | Tool | Qué hace | Cuándo usarla |
1204
+ |------|----------|---------------|
1205
+ | \`get_available_models\` | Consulta providers y modelos activos | Al crear workers — seleccionar modelo óptimo |
1206
+ | \`agent_find\` | Busca workers disponibles | Antes de delegar |
1207
+ | \`agent_create\` | Crea nuevo worker | Si no hay uno adecuado |
1208
+ | \`task_delegate\` | Asigna y EJECUTA tarea | Delegar con ejecución inmediata |
1209
+ | \`task_status\` | Verifica estado de tareas | Monitorear progreso |
1210
+ | \`bus_publish\` | Publica mensaje | Coordinación worker-to-worker |
1211
+ | \`bus_read\` | Lee mensajes del bus | Ver solicitudes de workers |
1212
+
1213
+ ## Workflow
1214
+
1215
+ ### Delegación
1216
+ 1. **Consultar modelos** → \`get_available_models({ capabilities })\` — si necesita crear workers
1217
+ 2. **Buscar worker** → \`agent_find({ search })\`
1218
+ 3. **Si no existe** → \`agent_create({...})\` — con providerId y modelId OBLIGATORIOS
1219
+ 4. **Delegar** → \`task_delegate({ worker_id, task_description, task_id?, project_id? })\` — **BLOQUEANTE**
1220
+ 5. **Resultado retornado** → Worker ejecuta inmediatamente y devuelve resultado
1221
+
1222
+ ### Create Agent Config (providerId y modelId son OBLIGATORIOS)
1223
+ \`\`\`javascript
1224
+ // 1. Consultar modelos disponibles
1225
+ get_available_models({ capabilities: "analysis" })
1226
+ // → [{ providerId: "anthropic", modelId: "claude-sonnet-4-6", contextWindow: 200000 }, ...]
1227
+
1228
+ // 2. Crear worker con modelo óptimo
1229
+ agent_create({
1230
+ name: "data_analyst",
1231
+ description: "Especialista en análisis de datos y visualización",
1232
+ system_prompt: "Sos analista de datos experto...",
1233
+ tools_json: ["web_search", "web_fetch", "save_note"],
1234
+ providerId: "anthropic", // OBLIGATORIO
1235
+ modelId: "claude-sonnet-4-6", // OBLIGATORIO
1236
+ tone: "analytical"
1237
+ })
1238
+ \`\`\`
1239
+
1240
+ ### Monitoreo
1241
+ 1. **Check estado** → \`task_status({ task_ids })\`
1242
+ 2. **Publicar coordinación** → \`bus_publish()\` si needed
1243
+ 3. **Leer bus** → \`bus_read()\` para respuestas
1244
+
1245
+ ## Agent Bus Communication
1246
+
1247
+ \`\`\`javascript
1248
+ // Worker notifica completado:
1249
+ bus_publish({
1250
+ event_type: "task_complete",
1251
+ to_worker_id: "next_worker",
1252
+ content: "Research done. Found 7 trends. Ready for content generation."
1253
+ })
1254
+
1255
+ // Worker solicita contexto:
1256
+ bus_read() → [{ from: "writer", content: "Need research results" }]
1257
+ \`\`\`
1258
+
1259
+ ## Mejores Prácticas
1260
+
1261
+ - \`task_delegate\` es bloqueante — el resultado llega en el retorno de la tool
1262
+ - Consultar modelos disponibles antes de crear workers (\`get_available_models\`)
1263
+ - Asignar workers por especialidad (\`agent_find\`)
1264
+ - Usar \`bus_publish\` / \`bus_read\` para coordinación entre workers
1265
+ - Pasar \`task_id\` y \`project_id\` a \`task_delegate\` para auto-tracking de progreso
1266
+ - Seleccionar modelo según capacidad: coding → modelos grandes, chat → modelos rápidos
1267
+
1268
+ ## Errores a Evitar
1269
+
1270
+ - ❌ Usar \`delegate_task\` (no existe) — usar \`task_delegate\`
1271
+ - ❌ Usar \`find_agent\` (no existe) — usar \`agent_find\`
1272
+ - ❌ Usar \`publish_to_bus\` / \`get_bus_messages\` (no existen) — usar \`bus_publish\` / \`bus_read\`
1273
+ - ❌ Usar \`get_task_status\` (no existe) — usar \`task_status\`
1274
+ - ❌ No consultar modelos disponibles antes de crear workers
1275
+ - ❌ No monitorear estado de tasks
1276
+ - ❌ No coordinar workers cuando hay dependencias
1277
+ `,
1278
+ },
1279
+ {
1280
+ name: "memory_manager",
1281
+ description: `Complete management of persistent memory including write, read, search, list, and delete operations`,
1282
+ category: "agents",
1283
+ version: "1.0.0",
1284
+ tools: ["memory_write","memory_read","memory_list","memory_search","memory_delete"],
1285
+ triggers: ["guardá en memoria","save to memory","recordá esto","remember this","leé la memoria","read memory","qué hay en memoria","what's in memory","buscá en memoria","search memory","lista las memorias","list memories","eliminá de memoria","delete from memory","preferencias","preferences","datos persistentes","persistent data"],
1286
+ body: `
1287
+ # Memory Manager Skill
1288
+
1289
+ ## Cuándo se Activa
1290
+
1291
+ Para guardar, recuperar, buscar, listar o eliminar información persistente entre sesiones.
1292
+
1293
+ ## Herramientas Disponibles
1294
+
1295
+ | Tool | Qué hace | Cuándo usarla |
1296
+ |------|----------|---------------|
1297
+ | \`memory_write\` | Almacena con título único | Guardar preferencias, datos |
1298
+ | \`memory_read\` | Recupera por título exacto | Cuando conocés el título |
1299
+ | \`memory_list\` | Lista todos los títulos | Explorar qué hay guardado |
1300
+ | \`memory_search\` | Busca por keywords | Cuando no recordás título exacto |
1301
+ | \`memory_delete\` | Elimina entrada | Limpiar datos obsoletos |
1302
+
1303
+ ## Workflow
1304
+
1305
+ ### Write
1306
+ \`\`\`javascript
1307
+ memory_write({
1308
+ title: "Preferencias de Desarrollo",
1309
+ content: "TypeScript, VS Code, Prettier single quotes"
1310
+ })
1311
+ \`\`\`
1312
+
1313
+ ### Read/Search
1314
+ \`\`\`javascript
1315
+ memory_read({ title: "Preferencias" }) // Título exacto
1316
+ memory_search({ query: "preferencias" }) // Fuzzy match
1317
+ \`\`\`
1318
+
1319
+ ### List
1320
+ \`\`\`javascript
1321
+ memory_list({}) // Todos los títulos
1322
+ \`\`\`
1323
+
1324
+ ### Delete
1325
+ \`\`\`javascript
1326
+ memory_delete({ title: "Datos Temporales" })
1327
+ \`\`\`
1328
+
1329
+ ## Mejores Prácticas
1330
+
1331
+ - Títulos descriptivos y únicos
1332
+ - Agrupar datos relacionados en misma entrada
1333
+ - Confirmar antes de sobrescribir
1334
+ - No guardar datos sensibles
1335
+
1336
+ ## Errores a Evitar
1337
+
1338
+ - ❌ Datos sensibles (passwords, API keys)
1339
+ - ❌ Títulos genéricos ("Config", "Datos")
1340
+ - ❌ Sobrescribir sin confirmar
1341
+ - ❌ Entradas gigantes (split por tema)
1342
+ `,
1343
+ },
1344
+ {
1345
+ name: "agent_spawner",
1346
+ description: `Create and manage specialized worker agents with optimal tool assignments and lifecycle control`,
1347
+ category: "agents",
1348
+ version: "1.1.0",
1349
+ tools: ["get_available_models","find_agent","create_agent","archive_agent"],
1350
+ triggers: ["creá un agente","create agent","creá un worker","create worker","nuevo agente","new agent","agente especializado","specialized agent","buscá un agente","find agent","archivá agente","archive agent","worker inactivo","inactive worker"],
1351
+ body: `
1352
+ # Agent Spawner Skill
1353
+
1354
+ ## Cuándo se Activa
1355
+
1356
+ Para crear nuevos workers especializados o gestionar el ciclo de vida de agents existentes.
1357
+
1358
+ ## Herramientas Disponibles
1359
+
1360
+ | Tool | Qué hace | Cuándo usarla |
1361
+ |------|----------|---------------|
1362
+ | \`get_available_models\` | Consulta providers y modelos activos de la BD | **ANTES de crear** — seleccionar modelo óptimo |
1363
+ | \`find_agent\` | Busca agents existentes | **PRIMERO** — antes de crear |
1364
+ | \`create_agent\` | Crea nuevo worker | Si no existe apto |
1365
+ | \`archive_agent\` | Archiva worker | Limpieza, inactivos |
1366
+
1367
+ ## Workflow
1368
+
1369
+ ### Crear Agent
1370
+ 1. **Buscar** → \`find_agent({ search })\` — ¿existe?
1371
+ 2. **Si existe** → Reutilizar
1372
+ 3. **Si no existe** → \`get_available_models({ capabilities })\` — seleccionar modelo óptimo
1373
+ 4. **Crear** → \`create_agent({...})\` con providerId y modelId seleccionados
1374
+
1375
+ ### Create Agent Config
1376
+ \`\`\`javascript
1377
+ // 1. Consultar modelos disponibles para coding
1378
+ get_available_models({ capabilities: "coding" })
1379
+ // → [{ providerId: "openai", modelId: "gpt-4o", contextWindow: 128000 }, ...]
1380
+
1381
+ // 2. Crear agente con modelo óptimo (providerId y modelId son OBLIGATORIOS)
1382
+ create_agent({
1383
+ name: "ai_coder",
1384
+ description: "Especialista en código y refactorización",
1385
+ system_prompt: \`
1386
+ Sos desarrollador experto. Tu rol:
1387
+ 1. Escribir código limpio y testeable
1388
+ 2. Refactorizar código existente
1389
+ 3. Revisar PRs y sugerir mejoras
1390
+ \`,
1391
+ tools_json: ["fs_read", "fs_write", "fs_edit", "cli_exec"],
1392
+ providerId: "openai", // OBLIGATORIO - seleccionado de get_available_models
1393
+ modelId: "gpt-4o", // OBLIGATORIO - seleccionado de get_available_models
1394
+ tone: "professional",
1395
+ max_iterations: 15
1396
+ })
1397
+ \`\`\`
1398
+
1399
+ ## Mejores Prácticas
1400
+
1401
+ - **Buscar primero**: Nunca duplicar workers
1402
+ - **Consultar modelos**: Usar \`get_available_models\` ANTES de crear para seleccionar provider/model óptimo
1403
+ - **System prompt específico**: Enfocado en especialidad
1404
+ - **Mínimo privilegio**: Solo tools necesarias
1405
+ - **Nombres descriptivos**: Que indiquen propósito
1406
+ - **Modelo adecuado**: Seleccionar según capacidad requerida (coding, chat, analysis, vision)
1407
+
1408
+ ## Errores a Evitar
1409
+
1410
+ - ❌ Crear sin buscar primero
1411
+ - ❌ Crear sin consultar modelos disponibles (\`get_available_models\`)
1412
+ - ❌ Usar modelo inadecuado para la tarea (ej: modelo pequeño para coding complejo)
1413
+ - ❌ Tools en exceso ("por las dudas")
1414
+ - ❌ System prompt genérico
1415
+ - ❌ Nombres vagos ("worker1", "agent1")
1416
+ `,
1417
+ },
1418
+ {
1419
+ name: "code_delegator",
1420
+ description: `Delegate coding tasks to CLI subagents (Qwen, Claude, Gemini, OpenCode) via Code Bridge and monitor execution`,
1421
+ category: "agents",
1422
+ version: "1.0.0",
1423
+ tools: ["task_delegate_code","task_status","codebridge_launch","codebridge_status"],
1424
+ triggers: ["delegá el código","delegate code","que lo haga un subagente","let subagent do it","programá esto","code this","implementá con CLI","implement with CLI","usá Qwen","use Qwen","usá Claude Code","use Claude Code","subagente de código","coding subagent"],
1425
+ body: `
1426
+ # Code Delegator Skill
1427
+
1428
+ ## Cuándo se Activa
1429
+
1430
+ Esta skill se activa cuando el usuario necesita delegar tareas de programación a subagentes CLI especializados (Qwen CLI, Claude Code, Gemini CLI, OpenCode).
1431
+
1432
+ ## Herramientas Disponibles
1433
+
1434
+ | Tool | Qué hace | Cuándo usarla |
1435
+ |------|----------|---------------|
1436
+ | \`task_delegate_code\` | Delega tarea de código simple | Tasks pequeños/medianos |
1437
+ | \`codebridge_launch\` | Lanza subagente CLI externo | Tasks complejos que requieren CLI completo |
1438
+ | \`codebridge_status\` | Verifica estado de ejecución | Monitoreo de progreso |
1439
+ | \`task_status\` | Obtiene estado de tarea delegada | Verificación final |
1440
+
1441
+ ## Workflow
1442
+
1443
+ ### Delegación Simple
1444
+ \`\`\`javascript
1445
+ task_delegate_code({
1446
+ description: "Implementar función de autenticación",
1447
+ acceptance_criteria: "Funciona con JWT, maneja errores"
1448
+ })
1449
+ \`\`\`
1450
+
1451
+ ### Delegación Completa (CLI Subagent)
1452
+ \`\`\`javascript
1453
+ // 1. Lanzar subagente
1454
+ const { process_id } = codebridge_launch({
1455
+ agent: "qwen", // o "claude", "gemini", "opencode"
1456
+ prompt: \`
1457
+ Implementar endpoint REST para usuarios:
1458
+ - GET /users - listar usuarios
1459
+ - POST /users - crear usuario
1460
+ - Validación con Zod
1461
+ - Tests con Jest
1462
+ \`
1463
+ })
1464
+
1465
+ // 2. Monitorear
1466
+ const status = codebridge_status({ process_id })
1467
+
1468
+ // 3. Verificar resultado
1469
+ const result = task_status({ task_id })
1470
+ \`\`\`
1471
+
1472
+ ## Subagentes Disponibles
1473
+
1474
+ | Agente | Comando | Especialidad |
1475
+ |--------|---------|--------------|
1476
+ | Qwen CLI | \`qwen\` | Código general, rápido |
1477
+ | Claude Code | \`claude\` | Código complejo, refactor |
1478
+ | Gemini CLI | \`gemini\` | Código + documentación |
1479
+ | OpenCode | \`opencode\` | Open source, multi-lenguaje |
1480
+
1481
+ ## Mejores Prácticas
1482
+
1483
+ - Prompts claros con requisitos específicos
1484
+ - Criterios de aceptación explícitos
1485
+ - Monitoreo periódico (30-60s para tasks largos)
1486
+ - Verificación de output antes de cerrar
1487
+
1488
+ ## Errores a Evitar
1489
+
1490
+ - ❌ Prompts vagos sin criterios claros
1491
+ - ❌ No monitorear ejecución larga
1492
+ - ❌ Ignorar errores del subagente
1493
+ - ❌ No verificar que el código cumple requisitos
1494
+ `,
1495
+ },
1496
+ {
1497
+ name: "research_and_remember",
1498
+ description: `Research information from web sources and save findings to persistent memory`,
1499
+ category: "agents",
1500
+ version: "1.0.0",
1501
+ tools: ["web_search","web_fetch","memory_write"],
1502
+ triggers: ["investigá y guardá","research and save","buscá y recordá","find and remember","aprendé sobre","learn about","estudiá esto","study this","documentate y guardá","research and store"],
1503
+ body: `
1504
+ # Research and Remember Skill
1505
+
1506
+ ## Cuándo se Activa
1507
+
1508
+ Para investigar temas en la web y guardar el conocimiento sintetizado en memoria persistente.
1509
+
1510
+ ## Herramientas Disponibles
1511
+
1512
+ | Tool | Qué hace | Cuándo usarla |
1513
+ |------|----------|---------------|
1514
+ | \`web_search\` | Busca en internet | Encontrar fuentes |
1515
+ | \`web_fetch\` | Descarga contenido | Obtener detalles |
1516
+ | \`memory_write\` | Guarda conocimiento | Almacenar para futuro |
1517
+
1518
+ ## Workflow
1519
+
1520
+ 1. **Buscar** → \`web_search({ query, numResults: 8 })\`
1521
+ 2. **Fetch** → \`web_fetch({ urls: top 2-3 })\`
1522
+ 3. **Sintetizar** → Compilar hallazgos con estructura clara
1523
+ 4. **Guardar** → \`memory_write({ title, content })\`
1524
+
1525
+ ## Estructura de Conocimiento
1526
+
1527
+ \`\`\`markdown
1528
+ # {Topic}
1529
+
1530
+ ## Summary
1531
+ 2-3 oración resumen
1532
+
1533
+ ## Key Findings
1534
+ - Punto clave 1
1535
+ - Punto clave 2
1536
+ - ...
1537
+
1538
+ ## Sources
1539
+ - [Source 1](url)
1540
+ - [Source 2](url)
1541
+ \`\`\`
1542
+
1543
+ ## Mejores Prácticas
1544
+
1545
+ - Mínimo 2 searches para cobertura completa
1546
+ - Cruzar información entre fuentes múltiples
1547
+ - Incluir URLs para verificación
1548
+ - Estructura clara con headings
1549
+ - Flaggear información incierta
1550
+
1551
+ ## Errores a Evitar
1552
+
1553
+ - ❌ Una sola búsqueda (insuficiente)
1554
+ - ❌ Sin fuentes (no verificable)
1555
+ - ❌ Títulos vagos para memoria
1556
+ - ❌ No flaggear información conflictiva
1557
+ `,
1558
+ },
1559
+ {
1560
+ name: "office_document_manager",
1561
+ description: `Leer, crear y manipular archivos Office (PDF, Word, Excel, PowerPoint) desde el workspace`,
1562
+ category: "office",
1563
+ version: "1.0.0",
1564
+ tools: ["office_leer_pdf","office_escribir_pdf","office_leer_docx","office_escribir_docx","office_leer_xlsx","office_escribir_xlsx","office_leer_pptx","office_escribir_pptx"],
1565
+ triggers: ["leer pdf","abrir pdf","extraer texto de pdf","pdf a texto","crear pdf","generar pdf","exportar a pdf","leer word","abrir docx","extraer texto de word","crear word","generar docx","documento word","leer excel","abrir xlsx","datos de excel","crear excel","generar xlsx","exportar a excel","leer powerpoint","abrir pptx","presentacion","diapositivas","crear presentacion","generar pptx","read pdf","open pdf","create pdf","read excel","create excel","read word","create word","read powerpoint","create presentation"],
1566
+ body: `
1567
+ # Office Document Manager Skill
1568
+
1569
+ ## Cuándo se Activa
1570
+
1571
+ Esta skill se activa cuando el usuario necesita:
1572
+ - **Leer** archivos PDF, Word (.docx), Excel (.xlsx) o PowerPoint (.pptx)
1573
+ - **Generar** nuevos archivos en cualquiera de esos formatos
1574
+ - **Convertir** contenido entre formatos (ej: texto → PDF, JSON → Excel)
1575
+ - **Extraer** datos estructurados de documentos (tablas de Excel, slides de presentación)
1576
+
1577
+ ## Herramientas Disponibles
1578
+
1579
+ | Tool | Qué hace | Cuándo usarla |
1580
+ |------|----------|---------------|
1581
+ | \`office_leer_pdf\` | Extrae texto + metadata de PDF | Leer informes, contratos, libros en PDF |
1582
+ | \`office_escribir_pdf\` | Genera PDF desde texto | Crear reportes, resúmenes, documentación |
1583
+ | \`office_leer_docx\` | Extrae texto y tablas de Word | Leer documentos, contratos, informes Word |
1584
+ | \`office_escribir_docx\` | Genera Word con estructura | Crear documentos formales con títulos/tablas |
1585
+ | \`office_leer_xlsx\` | Lee hojas de Excel como JSON | Procesar datos, tablas, inventarios |
1586
+ | \`office_escribir_xlsx\` | Genera Excel desde JSON | Exportar datos, crear reportes tabulares |
1587
+ | \`office_leer_pptx\` | Extrae texto de cada slide | Resumir presentaciones, extraer contenido |
1588
+ | \`office_escribir_pptx\` | Genera presentación PowerPoint | Crear slides desde datos o resúmenes |
1589
+
1590
+ ## Workflow por Caso de Uso
1591
+
1592
+ ### Leer y resumir un documento
1593
+ 1. \`office_leer_pdf/docx/xlsx/pptx\` → extraer contenido
1594
+ 2. Procesar y resumir el texto
1595
+ 3. \`notify\` → enviar resumen al usuario
1596
+
1597
+ ### Transformar datos a Excel
1598
+ 1. Obtener datos (de memoria, herramienta o cálculo)
1599
+ 2. Estructurar en \`hojas\` con \`datos\` como array de objetos
1600
+ 3. \`office_escribir_xlsx\` → generar archivo
1601
+ 4. Confirmar ruta al usuario
1602
+
1603
+ ### Crear un informe PDF
1604
+ 1. Compilar el contenido del informe como texto
1605
+ 2. \`office_escribir_pdf\` → generar con título y márgenes
1606
+ 3. Confirmar que el archivo quedó en la ruta esperada
1607
+
1608
+ ### Generar una presentación
1609
+ 1. Definir estructura: título + array de slides (título + puntos)
1610
+ 2. \`office_escribir_pptx\` → generar .pptx
1611
+ 3. Opcional: incluir notas del presentador en cada slide
1612
+
1613
+ ## Parámetros Clave
1614
+
1615
+ ### \`parrafos\` para DOCX
1616
+ \`\`\`json
1617
+ [
1618
+ { "texto": "Capítulo 1", "tipo": "titulo1" },
1619
+ { "texto": "Subtítulo", "tipo": "titulo2" },
1620
+ { "texto": "Contenido normal", "tipo": "parrafo" },
1621
+ { "texto": "Ítem de lista", "tipo": "lista" },
1622
+ { "texto": "Texto importante", "tipo": "parrafo", "negrita": true }
1623
+ ]
1624
+ \`\`\`
1625
+
1626
+ ### \`hojas\` para XLSX
1627
+ \`\`\`json
1628
+ [
1629
+ {
1630
+ "nombre": "Ventas",
1631
+ "datos": [
1632
+ { "Mes": "Enero", "Total": 5000 },
1633
+ { "Mes": "Febrero", "Total": 6200 }
1634
+ ]
1635
+ }
1636
+ ]
1637
+ \`\`\`
1638
+
1639
+ ### \`diapositivas\` para PPTX
1640
+ \`\`\`json
1641
+ [
1642
+ {
1643
+ "titulo": "¿Qué es Machine Learning?",
1644
+ "puntos": ["Subcampo de IA", "Aprende de datos", "Hace predicciones"],
1645
+ "notas": "Mencionar el enfoque supervisado y no supervisado"
1646
+ }
1647
+ ]
1648
+ \`\`\`
1649
+
1650
+ ## Errores a Evitar
1651
+
1652
+ - ❌ Intentar leer un archivo que no existe (verifica con \`fs_exists\` primero)
1653
+ - ❌ Sobrescribir sin confirmar cuando el archivo destino ya existe
1654
+ - ❌ Usar \`contenido\` y \`puntos\` a la vez en PPTX — \`puntos\` tiene prioridad
1655
+ - ❌ Pasar un array de arrays como \`datos\` de XLSX cuando se esperan objetos con claves
1656
+ - ❌ Intentar leer PDF de más de 100 páginas sin especificar rango (usar \`pagina_inicio\`/\`pagina_fin\`)
1657
+ `,
1658
+ },
1659
+ {
1660
+ name: "busqueda_fts5",
1661
+ description: `Core discovery skill - find any capability with a single keyword`,
1662
+ category: "core",
1663
+ version: "1.2.0",
1664
+ tools: ["search_knowledge"],
1665
+ triggers: ["cómo busco herramientas","cómo encuentro skills","how to find tools","search knowledge","discovery","buscar en la base","encontrar herramientas"],
1666
+ body: `
1667
+ # busqueda_fts5 — Sistema de Discovery
1668
+
1669
+ Arrancás con solo 4 herramientas. Todo lo demás se descubre con **search_knowledge**.
1670
+
1671
+ ## Regla de oro: UNA PALABRA, busca TODO
1672
+
1673
+ \`\`\`
1674
+ search_knowledge(query="email")
1675
+ \`\`\`
1676
+
1677
+ Eso solo — sin type, sin frases largas — devuelve tools, skills, MCP y playbook relacionados con "email".
1678
+
1679
+ **NO hagas esto:** \`search_knowledge(type="tools", query="enviar correo electrónico")\` — AND entre palabras no encuentra nada.
1680
+
1681
+ **SÍ hagas esto:** \`search_knowledge(query="email")\` — encuentra todo lo relacionado.
1682
+
1683
+ ## Cuándo especificar type
1684
+
1685
+ Solo si querés filtrar resultados que ya son muchos:
1686
+
1687
+ \`\`\`
1688
+ search_knowledge(query="email", type="mcp") → solo herramientas externas de email
1689
+ search_knowledge(query="email", type="tools") → solo herramientas nativas de email
1690
+ \`\`\`
1691
+
1692
+ Por defecto type="all" — no hace falta especificarlo.
1693
+
1694
+ ## Regla de prioridad
1695
+
1696
+ **Preferí herramientas nativas sobre MCP** cuando ambas sirven.
1697
+ - Nativas: más rápidas, sin red, siempre disponibles
1698
+ - MCP: cuando no hay equivalente nativo
1699
+
1700
+ ## Flujo de uso
1701
+
1702
+ 1. Identificá la palabra clave de lo que necesitás
1703
+ 2. \`search_knowledge(query="<palabra>")\` → resultados de todos los tipos
1704
+ 3. Las tools encontradas se inyectan automáticamente en tu contexto
1705
+ 4. Usás las tools en el siguiente paso
1706
+
1707
+ ---
1708
+
1709
+ ## Ejemplos
1710
+
1711
+ \`\`\`
1712
+ search_knowledge(query="pdf") → tools para leer/escribir PDFs
1713
+ search_knowledge(query="browser") → tools de navegación web
1714
+ search_knowledge(query="github") → tools MCP de GitHub si están configuradas
1715
+ search_knowledge(query="calendar") → tools de Google Calendar
1716
+ search_knowledge(query="canvas") → skills de visualización
1717
+ search_knowledge(query="slack") → tools de Slack si están configuradas
1718
+ \`\`\`
1719
+ `,
1720
+ },
1721
+ {
1722
+ name: "file_writer",
1723
+ description: `Create, modify, and delete files with safe edit operations and confirmation for large changes`,
1724
+ category: "filesystem",
1725
+ version: "1.0.0",
1726
+ tools: ["project_read","project_write","project_edit","project_exists"],
1727
+ triggers: ["creá un archivo","create a file","escribí en","write to","editá este archivo","edit this file","modificá","modify","eliminá el archivo","delete file","guardá esto","save this","actualizá el archivo","update file"],
1728
+ body: `
1729
+ # File Writer Skill
1730
+
1731
+ ## Cuándo se Activa
1732
+
1733
+ Esta skill se activa cuando el usuario necesita:
1734
+ - Crear nuevos archivos
1735
+ - Modificar contenido existente
1736
+ - Eliminar archivos
1737
+ - Guardar cambios
1738
+
1739
+ ## Herramientas Disponibles
1740
+
1741
+ | Tool | Qué hace | Cuándo usarla |
1742
+ |------|----------|---------------|
1743
+ | \`project_read\` | Lee archivo existente | Antes de editar para entender estructura |
1744
+ | \`project_write\` | Crea o sobreescribe archivo | Archivos nuevos o reescritura completa |
1745
+ | \`project_edit\` | Edita secciones específicas | Cambios puntuales (find/replace) |
1746
+ | \`project_exists\` | Verifica existencia | Para decidir crear vs editar |
1747
+
1748
+ ## Workflow
1749
+
1750
+ ### Crear Archivo Nuevo
1751
+ 1. \`project_exists({ path })\` → verificar no existe
1752
+ 2. \`project_write({ path, content })\` → crear
1753
+
1754
+ ### Editar Archivo Existente
1755
+ 1. \`project_exists({ path })\` → verificar existe
1756
+ 2. \`project_read({ path })\` → entender estructura
1757
+ 3. \`project_edit({ path, old_string, new_string })\` → modificar
1758
+ 4. \`canvas_confirm()\` si cambios >50 líneas
1759
+
1760
+ ### Eliminar Archivo
1761
+ 1. \`project_exists({ path })\` → verificar existe
1762
+ 2. \`canvas_confirm({ message: '¿Eliminar archivo?' })\` → confirmar
1763
+ 3. Operación de delete
1764
+
1765
+ ## Mejores Prácticas
1766
+
1767
+ - **Leer antes de editar**: Nunca modificar sin entender estructura
1768
+ - **Edit vs Write**: Usar edit para cambios pequeños, write para nuevos archivos
1769
+ - **Confirmar cambios grandes**: >50 líneas requiere confirmación explícita
1770
+ - **Paths seguros**: Trabajar dentro del workspace por defecto
1771
+
1772
+ ## Errores a Evitar
1773
+
1774
+ - ❌ Editar sin leer primero
1775
+ - ❌ Sobreescribir sin confirmar si es cambio grande
1776
+ - ❌ Eliminar sin confirmación explícita
1777
+ - ❌ Usar write cuando edit es suficiente
1778
+ `,
1779
+ },
1780
+ {
1781
+ name: "file_read_and_summarize",
1782
+ description: `Read and understand file content with automatic summarization for large files`,
1783
+ category: "filesystem",
1784
+ version: "1.0.0",
1785
+ tools: ["project_read"],
1786
+ triggers: ["leé este archivo","read this file","mostrame el contenido","show content","qué dice este archivo","resumí este archivo","summarize this file","entendé este código","understand this code"],
1787
+ body: `
1788
+ # File Read and Summarize Skill
1789
+
1790
+ ## Cuándo se Activa
1791
+
1792
+ Esta skill se activa cuando el usuario necesita leer y entender el contenido de un archivo, especialmente cuando:
1793
+ - El archivo es grande y necesita resumen
1794
+ - Se requiere comprensión del contenido (no solo lectura)
1795
+ - El usuario pide "qué dice", "resumí", "entendé"
1796
+
1797
+ ## Herramientas Disponibles
1798
+
1799
+ | Tool | Qué hace | Cuándo usarla |
1800
+ |------|----------|---------------|
1801
+ | \`project_read\` | Lee contenido de archivo del workspace | Lectura de cualquier archivo |
1802
+
1803
+ ## Workflow
1804
+
1805
+ 1. **Verificar existencia** → \`project_exists({ path })\`
1806
+ 2. **Leer contenido** → \`project_read({ path, offset, limit })\`
1807
+ 3. **Sintetizar** → Resumir si es grande, extraer puntos clave
1808
+
1809
+ ## Mejores Prácticas
1810
+
1811
+ - Para archivos >1000 líneas, usar \`offset\` y \`limit\`
1812
+ - Identificar tipo de archivo por extensión y adaptar formato de resumen
1813
+ - Para código: identificar funciones, clases, exports principales
1814
+ - Para config: explicar settings clave en lenguaje simple
1815
+ - Para texto: extraer ideas principales
1816
+
1817
+ ## Errores a Evitar
1818
+
1819
+ - ❌ Leer sin verificar existencia
1820
+ - ❌ Retornar archivo completo sin resumir si es muy grande
1821
+ - ❌ No identificar tipo de archivo para adaptar resumen
1822
+ `,
1823
+ },
1824
+ {
1825
+ name: "file_manager",
1826
+ description: `Explore project structure and locate files using glob patterns and directory listing`,
1827
+ category: "filesystem",
1828
+ version: "1.0.0",
1829
+ tools: ["fs_list","fs_glob","fs_exists"],
1830
+ triggers: ["lista los archivos","list files","buscá archivos","find files","explorá el proyecto","explore project","qué archivos hay","what files exist","buscá por patrón","search by pattern","existe este archivo","file exists","dónde está","where is"],
1831
+ body: `
1832
+ # File Manager Skill
1833
+
1834
+ ## Cuándo se Activa
1835
+
1836
+ Esta skill se activa cuando el usuario necesita:
1837
+ - Explorar la estructura del proyecto
1838
+ - Buscar archivos por extensión o patrón
1839
+ - Verificar si existe un archivo o directorio
1840
+ - Encontrar la ubicación de un archivo
1841
+
1842
+ ## Herramientas Disponibles
1843
+
1844
+ | Tool | Qué hace | Cuándo usarla |
1845
+ |------|----------|---------------|
1846
+ | \`fs_list\` | Lista directorios y archivos | Exploración inicial |
1847
+ | \`fs_glob\` | Busca archivos por patrón wildcard | Búsqueda por extensión/patrón |
1848
+ | \`fs_exists\` | Verifica existencia | Pre-check antes de operaciones |
1849
+
1850
+ ## Workflow
1851
+
1852
+ 1. **Explorar** → \`fs_list({ path })\` para estructura general
1853
+ 2. **Buscar por patrón** → \`fs_glob({ pattern })\` para tipos específicos
1854
+ 3. **Verificar** → \`fs_exists({ path })\` para confirmación
1855
+
1856
+ ## Patrones Glob Comunes
1857
+
1858
+ | Patrón | Encuentra |
1859
+ |--------|-----------|
1860
+ | \`**/*.ts\` | Todos los TypeScript |
1861
+ | \`**/*.test.ts\` | Solo tests |
1862
+ | \`**/*.md\` | Documentación |
1863
+ | \`**/package.json\` | Todos los package.json |
1864
+ | \`src/**/*.tsx\` | React components en src |
1865
+
1866
+ ## Errores a Evitar
1867
+
1868
+ - ❌ No verificar existencia antes de leer/editar
1869
+ - ❌ Usar fs_list cuando se conoce el patrón (usar glob)
1870
+ - ❌ Patrones muy amplios sin filtrado
1871
+ `,
1872
+ },
1873
+ {
1874
+ name: "cron_manager",
1875
+ description: `Complete management of cron jobs with cron expressions. Create, list, update, pause, resume, delete, trigger, and view history. Use for reminders, automated reports, periodic checks.`,
1876
+ category: "cron",
1877
+ version: "2.0.0",
1878
+ tools: ["cron.create","cron.list","cron.update","cron.delete","cron.pause","cron.resume","cron.trigger","cron.history"],
1879
+ triggers: ["programá una tarea","schedule task","creá un cron","create cron","editá el cron","edit cron","eliminá el cron","remove cron","lista las tareas","list cron jobs","modificá el cron","modify cron","tarea recurrente","recurring task","todos los días","daily","cada semana","weekly"],
1880
+ body: `
1881
+ # Cron Manager Skill
1882
+
1883
+ ## Cuándo se Activa
1884
+
1885
+ Para gestionar tareas programadas (cron jobs): crear, listar, actualizar, pausar, reanudar, eliminar, ejecutar y ver historial.
1886
+
1887
+ ## Herramientas Disponibles
1888
+
1889
+ | Tool | Qué hace | Cuándo usarla |
1890
+ |------|----------|---------------|
1891
+ | \`cron.create\` | Crear cron job | Nueva tarea |
1892
+ | \`cron.list\` | Listar todos | Ver existentes |
1893
+ | \`cron.update\` | Actualizar existente | Cambiar horario/instrucción |
1894
+ | \`cron.pause\` | Pausar temporalmente | Sin eliminar |
1895
+ | \`cron.resume\` | Reanudar pausado | Continuar ejecución |
1896
+ | \`cron.delete\` | Eliminar permanentemente | Cancelar para siempre |
1897
+ | \`cron.trigger\` | Ejecutar ahora | Forzar ejecución |
1898
+ | \`cron.history\` | Ver historial | Ver logs de ejecuciones |
1899
+
1900
+ ## Campos Principales
1901
+
1902
+ | Campo | Tipo | Descripción |
1903
+ |-------|------|-------------|
1904
+ | \`name\` | string | Identificador corto (e.g., 'daily-report') |
1905
+ | \`task\` | string | **REQUERIDO** - Instrucciones para el agente al ejecutarse |
1906
+ | \`task_type\` | string | 'recurring' (repite) o 'one_shot' (una vez) |
1907
+ | \`cron_expression\` | string | Expresión cron (solo para recurring) |
1908
+ | \`fire_at\` | string | Datetime ISO (solo para one_shot) |
1909
+ | \`channel\` | string | Canal de notificación |
1910
+ | \`start_at\` | string | Inicio de ventana opcional (Croner startAt) |
1911
+ | \`stop_at\` | string | Fin de ventana opcional (Croner stopAt) |
1912
+ | \`dom_and_dow\` | number | 0=OR (default), 1=AND (día mes + día semana) |
1913
+
1914
+ ## Cron Expression Format
1915
+
1916
+ \`\`\`
1917
+ * * * * *
1918
+ │ │ │ │ │
1919
+ │ │ │ │ └── Día semana (0-6, 0=Domingo)
1920
+ │ │ │ └──── Mes (1-12)
1921
+ │ │ └────── Día del mes (1-31)
1922
+ │ └──────── Hora (0-23)
1923
+ └────────── Minuto (0-59)
1924
+ \`\`\`
1925
+
1926
+ ## Ejemplos Comunes
1927
+
1928
+ | Expresión | Significado |
1929
+ |-----------|-------------|
1930
+ | \`0 9 * * *\` | Diario 9:00 AM |
1931
+ | \`0 7 * * 1-5\` | Lun-Vie 7:00 AM |
1932
+ | \`0 */2 * * *\` | Cada 2 horas |
1933
+ | \`0 0 * * 0\` | Domingos medianoche |
1934
+ | \`0 0 1 * *\` | Día 1 de cada mes |
1935
+
1936
+ ## Cómo Usar start_at / stop_at
1937
+
1938
+ - \`start_at\`: La tarea no ejecuta antes de esta fecha
1939
+ - \`stop_at\`: La tarea no ejecuta después de esta fecha
1940
+ - Formato ISO: \`'2026-04-01T00:00:00'\`
1941
+
1942
+ ## Cómo Usar dom_and_dow
1943
+
1944
+ - \`0\` (default): Se ejecuta si es el día del mes O el día de semana
1945
+ - \`1\`: Se ejecuta solo si es EL MISMO día del mes Y el día de semana
1946
+
1947
+ Ejemplo: \`0 9 15 * *\` con dom_and_dow=1 significa "los 15 de cada mes QUE SEA domingo"
1948
+
1949
+ ## Workflow para Crear
1950
+
1951
+ 1. **Preguntar** → ¿one_shot o recurring?
1952
+ 2. **Obtener** → Hora y canal de notificación
1953
+ 3. **Crear** → \`cron.create\` con campo \`task\` obligatorio
1954
+ 4. **Confirmar** → \`cron.list\` mostrar next runs
1955
+
1956
+ ## Errores a Evitar
1957
+
1958
+ - ❌ Olvidar el campo \`task\` — es obligatorio
1959
+ - ❌ Usar exec para tareas programadas
1960
+ - ❌ No preguntar si es one_shot o recurring
1961
+ - ❌ No mostrar próximos horarios al crear
1962
+ - ❌ Llamar \`cron.update\` sin \`task_id\` — siempre hacer \`cron.list\` primero`,
1963
+ },
1964
+ ];