@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.
- package/README.md +64 -39
- package/dist/hive.js +3231 -3189
- package/dist/tool-worker.js +218406 -0
- package/dist/ui/assets/{AgentCreateForm-B4eK7efF.js → AgentCreateForm-tJZv9FZC.js} +1 -1
- package/dist/ui/assets/{AgentDetailPage-BD2uoJWk.js → AgentDetailPage-Du-mRcAX.js} +1 -1
- package/dist/ui/assets/AgentNewPage-DIFYd_Ys.js +1 -0
- package/dist/ui/assets/{AgentsPage-4JUZXvkA.js → AgentsPage-YvSgWRiw.js} +6 -6
- package/dist/ui/assets/CanvasPage-DtMwGvxf.js +33 -0
- package/dist/ui/assets/{ChannelsPage-BUn7-nhV.js → ChannelsPage-BdBXWHjj.js} +1 -1
- package/dist/ui/assets/DashboardPage-ghl1ZguH.js +6 -0
- package/dist/ui/assets/{LoginPage-C8j_urUD.js → LoginPage-CAmSI9Vy.js} +1 -1
- package/dist/ui/assets/LogsPage-DAPBHkwK.js +1 -0
- package/dist/ui/assets/MeetingPage-WjjGOqqU.js +1 -0
- package/dist/ui/assets/{NotFound-Drh-sJPN.js → NotFound-BMeQSGcG.js} +1 -1
- package/dist/ui/assets/ProvidersPage-Ct6HsAi1.js +1 -0
- package/dist/ui/assets/{RecoverPage-DNb1Pr8h.js → RecoverPage-DpW3l-yv.js} +1 -1
- package/dist/ui/assets/SettingsPage-DBJ7_E6C.js +9 -0
- package/dist/ui/assets/SetupPage-DKmLVUaj.js +1 -0
- package/dist/ui/assets/{WebChatPage-R-YOwA4F.js → WebChatPage-CVRcKept.js} +2 -2
- package/dist/ui/assets/accordion-C5d5Rm5z.js +1 -0
- package/dist/ui/assets/{alert-U8FsgWi7.js → alert-C-NE-P3s.js} +1 -1
- package/dist/ui/assets/{alert-dialog-CRdMkkmk.js → alert-dialog-C5mzbHdP.js} +1 -1
- package/dist/ui/assets/{badge-Cli1jnH5.js → badge-ChpACfWO.js} +1 -1
- package/dist/ui/assets/chevron-up-BYhk0K2J.js +1 -0
- package/dist/ui/assets/{dialog-DQ3s-LuO.js → dialog-QnZ0ad8O.js} +1 -1
- package/dist/ui/assets/dropdown-menu-BK-CO3Od.js +1 -0
- package/dist/ui/assets/{es-DcMjrpbA.js → es-NQNoaWDx.js} +1 -1
- package/dist/ui/assets/index-B2fCYtTS.css +2 -0
- package/dist/ui/assets/index-DMCjjdqf.js +116 -0
- package/dist/ui/assets/{label-0BvGVXvZ.js → label-D2H1IR_J.js} +1 -1
- package/dist/ui/assets/progress-BherYzY6.js +1 -0
- package/dist/ui/assets/scroll-area-DkeyX32e.js +1 -0
- package/dist/ui/assets/{slider-D47dOrRa.js → slider-CsiUDxc3.js} +1 -1
- package/dist/ui/assets/switch-BDwN8RYV.js +1 -0
- package/dist/ui/assets/{table-DhowbNxQ.js → table-CSc8ubon.js} +1 -1
- package/dist/ui/assets/terminal-DN38Q456.js +1 -0
- package/dist/ui/assets/useProviders-C6_QHsEi.js +1 -0
- package/dist/ui/assets/{vendor-radix-JY4ncZrD.js → vendor-radix-cw1bQaVC.js} +4 -4
- package/dist/ui/assets/{vendor-react-CscwQerf.js → vendor-react-D4s9E-zj.js} +1 -1
- package/dist/ui/dist/assets/AgentCreateForm-tJZv9FZC.js +1 -0
- package/dist/ui/dist/assets/AgentDetailPage-Du-mRcAX.js +1 -0
- package/dist/ui/dist/assets/AgentNewPage-DIFYd_Ys.js +1 -0
- package/dist/ui/dist/assets/AgentsPage-YvSgWRiw.js +10 -0
- package/dist/ui/dist/assets/CanvasPage-DtMwGvxf.js +33 -0
- package/dist/ui/dist/assets/ChannelsPage-BdBXWHjj.js +8 -0
- package/dist/ui/dist/assets/DashboardPage-ghl1ZguH.js +6 -0
- package/dist/ui/dist/assets/LoginPage-CAmSI9Vy.js +1 -0
- package/dist/ui/dist/assets/LogsPage-DAPBHkwK.js +1 -0
- package/dist/ui/dist/assets/MeetingPage-WjjGOqqU.js +1 -0
- package/dist/ui/dist/assets/NotFound-BMeQSGcG.js +1 -0
- package/dist/ui/dist/assets/ProvidersPage-Ct6HsAi1.js +1 -0
- package/dist/ui/dist/assets/RecoverPage-DpW3l-yv.js +1 -0
- package/dist/ui/dist/assets/SettingsPage-DBJ7_E6C.js +9 -0
- package/dist/ui/dist/assets/SetupPage-DKmLVUaj.js +1 -0
- package/dist/ui/dist/assets/WebChatPage-CVRcKept.js +16 -0
- package/dist/ui/dist/assets/accordion-C5d5Rm5z.js +1 -0
- package/dist/ui/dist/assets/activity-c3pNngT_.js +1 -0
- package/dist/ui/dist/assets/alert-C-NE-P3s.js +1 -0
- package/dist/ui/dist/assets/alert-dialog-C5mzbHdP.js +1 -0
- package/dist/ui/dist/assets/arrow-left-CBcbX5EZ.js +1 -0
- package/dist/ui/dist/assets/badge-ChpACfWO.js +1 -0
- package/dist/ui/dist/assets/calendar-B-KZ9RQO.js +1 -0
- package/dist/ui/dist/assets/card-CNf6BS2e.js +1 -0
- package/dist/ui/dist/assets/chevron-left-D4U-5A27.js +1 -0
- package/dist/ui/dist/assets/chevron-right-CR4Skrf3.js +1 -0
- package/dist/ui/dist/assets/chevron-up-BYhk0K2J.js +1 -0
- package/dist/ui/dist/assets/circle-alert-CyHDwUj8.js +1 -0
- package/dist/ui/dist/assets/circle-check-Bb54Ebmu.js +1 -0
- package/dist/ui/dist/assets/cpu-Cdgc_B1K.js +1 -0
- package/dist/ui/dist/assets/dialog-QnZ0ad8O.js +1 -0
- package/dist/ui/dist/assets/download-C3ifGMjJ.js +1 -0
- package/dist/ui/dist/assets/dropdown-menu-BK-CO3Od.js +1 -0
- package/dist/ui/dist/assets/es-NQNoaWDx.js +1 -0
- package/dist/ui/dist/assets/external-link-BvxYeTP1.js +1 -0
- package/dist/ui/dist/assets/eye-DqNTU_GD.js +1 -0
- package/dist/ui/dist/assets/file-text-BT_9S9SM.js +1 -0
- package/dist/ui/dist/assets/folder-open-BhH8y9ac.js +1 -0
- package/dist/ui/dist/assets/format-GVHeOyWI.js +1 -0
- package/dist/ui/dist/assets/gateway-url-COCbW0IR.js +1 -0
- package/dist/ui/dist/assets/gauge-D_TMa4i9.js +1 -0
- package/dist/ui/dist/assets/globe-DeCQTCDJ.js +1 -0
- package/dist/ui/dist/assets/hexagon-DsGOUl-H.js +1 -0
- package/dist/ui/dist/assets/history-BSG-Ypqf.js +1 -0
- package/dist/ui/dist/assets/index-B2fCYtTS.css +2 -0
- package/dist/ui/dist/assets/index-DMCjjdqf.js +116 -0
- package/dist/ui/dist/assets/info-NwLoa2Mj.js +1 -0
- package/dist/ui/dist/assets/key-3EP0dhkT.js +1 -0
- package/dist/ui/dist/assets/label-D2H1IR_J.js +1 -0
- package/dist/ui/dist/assets/loader-circle-CZNax6kS.js +1 -0
- package/dist/ui/dist/assets/lock-Ei1_J-Nq.js +1 -0
- package/dist/ui/dist/assets/pause-BUqah9Bi.js +1 -0
- package/dist/ui/dist/assets/play-NcZ4swwL.js +1 -0
- package/dist/ui/dist/assets/plus-CX1xyhp5.js +1 -0
- package/dist/ui/dist/assets/progress-BherYzY6.js +1 -0
- package/dist/ui/dist/assets/refresh-cw-DaYdjQFk.js +1 -0
- package/dist/ui/dist/assets/rolldown-runtime-S-ySWqyJ.js +1 -0
- package/dist/ui/dist/assets/save-CUdYyHNy.js +1 -0
- package/dist/ui/dist/assets/scroll-area-DkeyX32e.js +1 -0
- package/dist/ui/dist/assets/send-B0H5SEIE.js +1 -0
- package/dist/ui/dist/assets/settings-Ds4SqD8s.js +1 -0
- package/dist/ui/dist/assets/slider-CsiUDxc3.js +14 -0
- package/dist/ui/dist/assets/sparkles-yUEb-7oH.js +1 -0
- package/dist/ui/dist/assets/square-BD81nFtN.js +1 -0
- package/dist/ui/dist/assets/switch-BDwN8RYV.js +1 -0
- package/dist/ui/dist/assets/table-CSc8ubon.js +1 -0
- package/dist/ui/dist/assets/terminal-DN38Q456.js +1 -0
- package/dist/ui/dist/assets/textarea-CXgXWKrT.js +1 -0
- package/dist/ui/dist/assets/trash-2-CNjMkoq6.js +1 -0
- package/dist/ui/dist/assets/triangle-alert-C9Y8Ub4X.js +1 -0
- package/dist/ui/dist/assets/useProviders-C6_QHsEi.js +1 -0
- package/dist/ui/dist/assets/utils-3pnRFmFe.js +1 -0
- package/dist/ui/dist/assets/vendor-charts-Bu2lyBKP.js +65 -0
- package/dist/ui/dist/assets/vendor-query-DsWPbQdG.js +1 -0
- package/dist/ui/dist/assets/vendor-radix-cw1bQaVC.js +63 -0
- package/dist/ui/dist/assets/vendor-react-D4s9E-zj.js +1 -0
- package/dist/ui/dist/assets/vendor-router-C9pIYwbJ.js +3 -0
- package/dist/ui/dist/assets/volume-2-CeSXNDv4.js +1 -0
- package/dist/ui/dist/assets/zap-hlXjpSeA.js +1 -0
- package/dist/ui/dist/favicon.ico +0 -0
- package/dist/ui/dist/index.html +40 -0
- package/dist/ui/dist/placeholder.svg +1 -0
- package/dist/ui/index.html +6 -6
- package/package.json +138 -13
- package/packages/cli/src/adapters/binary.ts +461 -0
- package/packages/cli/src/adapters/bun-global.ts +378 -0
- package/packages/cli/src/adapters/config.ts +314 -0
- package/packages/cli/src/adapters/docker.ts +308 -0
- package/packages/cli/src/adapters/factory.ts +168 -0
- package/packages/cli/src/adapters/index.ts +80 -0
- package/packages/cli/src/adapters/types.ts +218 -0
- package/packages/cli/src/commands/agent-run.ts +168 -0
- package/packages/cli/src/commands/agents.ts +398 -0
- package/packages/cli/src/commands/chat.ts +142 -0
- package/packages/cli/src/commands/config.ts +49 -0
- package/packages/cli/src/commands/cron.ts +487 -0
- package/packages/cli/src/commands/dev.ts +58 -0
- package/packages/cli/src/commands/doctor.ts +320 -0
- package/packages/cli/src/commands/gateway.ts +719 -0
- package/packages/cli/src/commands/logs.ts +57 -0
- package/packages/cli/src/commands/mcp.ts +175 -0
- package/packages/cli/src/commands/message.ts +77 -0
- package/packages/cli/src/commands/migrate.ts +90 -0
- package/packages/cli/src/commands/onboard.ts +1656 -0
- package/packages/cli/src/commands/security.ts +144 -0
- package/packages/cli/src/commands/service.ts +50 -0
- package/packages/cli/src/commands/sessions.ts +116 -0
- package/packages/cli/src/commands/skills.ts +215 -0
- package/packages/cli/src/commands/update.ts +203 -0
- package/packages/cli/src/index.ts +210 -0
- package/packages/cli/src/ui-bundle.generated.ts +3 -0
- package/packages/cli/src/utils/token.ts +6 -0
- package/packages/core/src/agent/agent-loop.ts +691 -0
- package/packages/core/src/agent/compaction.ts +240 -0
- package/packages/core/src/agent/context-compiler.ts +467 -0
- package/packages/core/src/agent/context-guard.ts +91 -0
- package/packages/core/src/agent/conversation-store.ts +244 -0
- package/packages/core/src/agent/curator.ts +158 -0
- package/packages/core/src/agent/hooks.ts +166 -0
- package/packages/core/src/agent/llm-client.ts +167 -0
- package/packages/core/src/agent/llm-providers/anthropic.ts +212 -0
- package/packages/core/src/agent/llm-providers/deepseek.ts +8 -0
- package/packages/core/src/agent/llm-providers/gemini.ts +215 -0
- package/packages/core/src/agent/llm-providers/groq.ts +5 -0
- package/packages/core/src/agent/llm-providers/interface.ts +195 -0
- package/packages/core/src/agent/llm-providers/kimi.ts +8 -0
- package/packages/core/src/agent/llm-providers/local-llama.ts +37 -0
- package/packages/core/src/agent/llm-providers/mistral.ts +5 -0
- package/packages/core/src/agent/llm-providers/nvidia.ts +5 -0
- package/packages/core/src/agent/llm-providers/ollama.ts +175 -0
- package/packages/core/src/agent/llm-providers/openai-compat-base.ts +379 -0
- package/packages/core/src/agent/llm-providers/openai.ts +5 -0
- package/packages/core/src/agent/llm-providers/openrouter.ts +5 -0
- package/packages/core/src/agent/llm-providers/qwen.ts +5 -0
- package/packages/core/src/agent/native-tools.ts +31 -0
- package/packages/core/src/agent/playbook-selector.ts +147 -0
- package/packages/core/src/agent/prompt-builder.ts +169 -0
- package/packages/core/src/agent/providers/index.ts +204 -0
- package/packages/core/src/agent/providers.ts +1 -0
- package/packages/core/src/agent/reflector.ts +200 -0
- package/packages/core/src/agent/service.ts +267 -0
- package/packages/core/src/agent/skill-selector.ts +479 -0
- package/packages/core/src/agent/stuck-loop.ts +133 -0
- package/packages/core/src/agent/tool-selector.ts +569 -0
- package/packages/core/src/agent/tracer.ts +100 -0
- package/packages/core/src/auth/auth.ts +108 -0
- package/packages/core/src/auth/index.ts +1 -0
- package/packages/core/src/canvas/a2ui-tools.ts +255 -0
- package/packages/core/src/canvas/canvas-manager.ts +390 -0
- package/packages/core/src/canvas/canvas-tools.ts +448 -0
- package/packages/core/src/canvas/emitter.ts +149 -0
- package/packages/core/src/canvas/index.ts +3 -0
- package/packages/core/src/channels/base.ts +154 -0
- package/packages/core/src/channels/discord.ts +273 -0
- package/packages/core/src/channels/index.ts +7 -0
- package/packages/core/src/channels/manager.ts +450 -0
- package/packages/core/src/channels/slack.ts +323 -0
- package/packages/core/src/channels/telegram.ts +612 -0
- package/packages/core/src/channels/webchat.ts +139 -0
- package/packages/core/src/channels/whatsapp.ts +548 -0
- package/packages/core/src/config/index.ts +12 -0
- package/packages/core/src/config/loader.ts +569 -0
- package/packages/core/src/events/agent-bus.ts +460 -0
- package/packages/core/src/events/event-bus.ts +169 -0
- package/packages/core/src/gateway/channel-notify.ts +64 -0
- package/packages/core/src/gateway/helpers/cors.ts +32 -0
- package/packages/core/src/gateway/helpers/index.ts +4 -0
- package/packages/core/src/gateway/helpers/narration.ts +57 -0
- package/packages/core/src/gateway/helpers/path.ts +13 -0
- package/packages/core/src/gateway/helpers/redact.ts +61 -0
- package/packages/core/src/gateway/index.ts +5 -0
- package/packages/core/src/gateway/initializer.ts +363 -0
- package/packages/core/src/gateway/lane-queue.ts +169 -0
- package/packages/core/src/gateway/llm-local/client.ts +94 -0
- package/packages/core/src/gateway/llm-local/detector.ts +321 -0
- package/packages/core/src/gateway/llm-local/downloader.ts +216 -0
- package/packages/core/src/gateway/llm-local/index.ts +34 -0
- package/packages/core/src/gateway/llm-local/manager.ts +186 -0
- package/packages/core/src/gateway/llm-local/models.ts +149 -0
- package/packages/core/src/gateway/llm-local/server.ts +179 -0
- package/packages/core/src/gateway/resolver.ts +108 -0
- package/packages/core/src/gateway/router.ts +124 -0
- package/packages/core/src/gateway/routes/agents.ts +210 -0
- package/packages/core/src/gateway/routes/auth.ts +244 -0
- package/packages/core/src/gateway/routes/channels.ts +484 -0
- package/packages/core/src/gateway/routes/chat.ts +241 -0
- package/packages/core/src/gateway/routes/config.ts +12 -0
- package/packages/core/src/gateway/routes/cron-api.ts +544 -0
- package/packages/core/src/gateway/routes/ethics.ts +46 -0
- package/packages/core/src/gateway/routes/llm-local.ts +271 -0
- package/packages/core/src/gateway/routes/mcp.ts +319 -0
- package/packages/core/src/gateway/routes/meeting.ts +232 -0
- package/packages/core/src/gateway/routes/models.ts +163 -0
- package/packages/core/src/gateway/routes/multimodal.ts +93 -0
- package/packages/core/src/gateway/routes/providers.ts +220 -0
- package/packages/core/src/gateway/routes/setup.ts +441 -0
- package/packages/core/src/gateway/routes/skills.ts +115 -0
- package/packages/core/src/gateway/routes/system.ts +469 -0
- package/packages/core/src/gateway/routes/tasks.ts +44 -0
- package/packages/core/src/gateway/routes/tools.ts +59 -0
- package/packages/core/src/gateway/routes/tts-local.ts +388 -0
- package/packages/core/src/gateway/routes/users.ts +122 -0
- package/packages/core/src/gateway/routes/voice.ts +189 -0
- package/packages/core/src/gateway/routes/workspace.ts +281 -0
- package/packages/core/src/gateway/server.ts +2744 -0
- package/packages/core/src/gateway/session.ts +95 -0
- package/packages/core/src/gateway/slash-commands.ts +207 -0
- package/packages/core/src/gateway/tts/README.md +94 -0
- package/packages/core/src/gateway/tts/package.json +25 -0
- package/packages/core/src/gateway/tts/src/client.ts +59 -0
- package/packages/core/src/gateway/tts/src/detect.ts +42 -0
- package/packages/core/src/gateway/tts/src/index.ts +15 -0
- package/packages/core/src/gateway/tts/src/install.ts +129 -0
- package/packages/core/src/gateway/tts/src/models.ts +50 -0
- package/packages/core/src/gateway/tts/src/server.ts +252 -0
- package/packages/core/src/gateway/tts/voices/.gitkeep +0 -0
- package/packages/core/src/heartbeat/index.ts +157 -0
- package/packages/core/src/index.ts +56 -0
- package/packages/core/src/mcp/hot-reload.ts +148 -0
- package/packages/core/src/mcp/singleton.ts +21 -0
- package/packages/core/src/mcp/tool-sync.ts +176 -0
- package/packages/core/src/multimodal/index.ts +2 -0
- package/packages/core/src/multimodal/types.ts +28 -0
- package/packages/core/src/multimodal/vision-service.ts +283 -0
- package/packages/core/src/plugins/api.ts +128 -0
- package/packages/core/src/plugins/index.ts +2 -0
- package/packages/core/src/plugins/loader.ts +365 -0
- package/packages/core/src/resilience/circuit-breaker.ts +225 -0
- package/packages/core/src/scheduler/CronScheduler.ts +699 -0
- package/packages/core/src/scheduler/dag/AgentExecutor.ts +53 -0
- package/packages/core/src/scheduler/dag/DAGScheduler.ts +250 -0
- package/packages/core/src/scheduler/dag/EventBridge.ts +122 -0
- package/packages/core/src/scheduler/dag/TaskGraph.ts +192 -0
- package/packages/core/src/scheduler/dag/TaskNode.ts +97 -0
- package/packages/core/src/scheduler/dag/TaskResult.ts +22 -0
- package/packages/core/src/scheduler/dag/errors.ts +37 -0
- package/packages/core/src/scheduler/dag/index.ts +26 -0
- package/packages/core/src/scheduler/dag/presets/ResearchPreset.ts +97 -0
- package/packages/core/src/scheduler/dag/strategies/ParallelStrategy.ts +21 -0
- package/packages/core/src/scheduler/dag/strategies/PriorityStrategy.ts +46 -0
- package/packages/core/src/scheduler/index.ts +22 -0
- package/packages/core/src/scheduler/integration.ts +237 -0
- package/packages/core/src/scheduler/types.ts +164 -0
- package/packages/core/src/security/google-chat.ts +269 -0
- package/packages/core/src/security/index.ts +192 -0
- package/packages/core/src/security/pairing.ts +250 -0
- package/packages/core/src/security/rate-limit.ts +270 -0
- package/packages/core/src/security/signal.ts +321 -0
- package/packages/core/src/state/store.ts +312 -0
- package/packages/core/src/storage/crypto.ts +197 -0
- package/packages/core/src/storage/migrate.ts +147 -0
- package/packages/core/src/storage/onboarding.ts +1506 -0
- package/packages/core/src/storage/schema.ts +666 -0
- package/packages/core/src/storage/seed.ts +628 -0
- package/packages/core/src/storage/sqlite.ts +407 -0
- package/packages/core/src/storage/usage.ts +374 -0
- package/packages/core/src/tool-runtime/index.ts +502 -0
- package/packages/core/src/tool-runtime/tool-worker.ts +125 -0
- package/packages/core/src/tools/agents/get-available-models.ts +118 -0
- package/packages/core/src/tools/agents/index.ts +610 -0
- package/packages/core/src/tools/canvas/index.ts +420 -0
- package/packages/core/src/tools/cli/index.ts +142 -0
- package/packages/core/src/tools/core/index.ts +478 -0
- package/packages/core/src/tools/cron/index.ts +635 -0
- package/packages/core/src/tools/filesystem/fs-delete.ts +78 -0
- package/packages/core/src/tools/filesystem/fs-edit.ts +106 -0
- package/packages/core/src/tools/filesystem/fs-exists.ts +63 -0
- package/packages/core/src/tools/filesystem/fs-glob.ts +108 -0
- package/packages/core/src/tools/filesystem/fs-list.ts +129 -0
- package/packages/core/src/tools/filesystem/fs-read.ts +72 -0
- package/packages/core/src/tools/filesystem/fs-write.ts +67 -0
- package/packages/core/src/tools/filesystem/index.ts +34 -0
- package/packages/core/src/tools/filesystem/workspace-guard.ts +62 -0
- package/packages/core/src/tools/index.ts +197 -0
- package/packages/core/src/tools/meeting/index.ts +363 -0
- package/packages/core/src/tools/office/index.ts +47 -0
- package/packages/core/src/tools/office/office-escribir-docx.ts +192 -0
- package/packages/core/src/tools/office/office-escribir-pdf.ts +172 -0
- package/packages/core/src/tools/office/office-escribir-pptx.ts +174 -0
- package/packages/core/src/tools/office/office-escribir-xlsx.ts +116 -0
- package/packages/core/src/tools/office/office-leer-docx.ts +93 -0
- package/packages/core/src/tools/office/office-leer-pdf.ts +114 -0
- package/packages/core/src/tools/office/office-leer-pptx.ts +136 -0
- package/packages/core/src/tools/office/office-leer-xlsx.ts +124 -0
- package/packages/core/src/tools/types.ts +39 -0
- package/packages/core/src/tools/voice/index.ts +104 -0
- package/packages/core/src/tools/web/browser-click.ts +78 -0
- package/packages/core/src/tools/web/browser-extract.ts +139 -0
- package/packages/core/src/tools/web/browser-navigate.ts +106 -0
- package/packages/core/src/tools/web/browser-screenshot.ts +87 -0
- package/packages/core/src/tools/web/browser-script.ts +88 -0
- package/packages/core/src/tools/web/browser-service.ts +554 -0
- package/packages/core/src/tools/web/browser-type.ts +101 -0
- package/packages/core/src/tools/web/browser-wait.ts +136 -0
- package/packages/core/src/tools/web/index.ts +41 -0
- package/packages/core/src/tools/web/web-fetch.ts +78 -0
- package/packages/core/src/tools/web/web-search.ts +123 -0
- package/packages/core/src/utils/benchmark.ts +80 -0
- package/packages/core/src/utils/crypto.ts +73 -0
- package/packages/core/src/utils/date.ts +42 -0
- package/packages/core/src/utils/index.ts +5 -0
- package/packages/core/src/utils/logger.ts +389 -0
- package/packages/core/src/utils/retry.ts +70 -0
- package/packages/core/src/utils/toon.ts +253 -0
- package/packages/core/src/voice/index.ts +643 -0
- package/packages/mcp/src/config.ts +13 -0
- package/packages/mcp/src/index.ts +1 -0
- package/packages/mcp/src/logger.ts +47 -0
- package/packages/mcp/src/manager.ts +439 -0
- package/packages/mcp/src/transports/index.ts +67 -0
- package/packages/mcp/src/transports/sse.ts +238 -0
- package/packages/mcp/src/transports/websocket.ts +159 -0
- package/packages/skills/src/bundled/agents/agent_spawner/SKILL.md +167 -0
- package/packages/skills/src/bundled/agents/code_delegator/SKILL.md +156 -0
- package/packages/skills/src/bundled/agents/memory_manager/SKILL.md +143 -0
- package/packages/skills/src/bundled/agents/research_and_remember/SKILL.md +139 -0
- package/packages/skills/src/bundled/agents/task_orchestrator/SKILL.md +198 -0
- package/packages/skills/src/bundled/canvas/a2ui_dashboard/SKILL.md +176 -0
- package/packages/skills/src/bundled/canvas/a2ui_form/SKILL.md +202 -0
- package/packages/skills/src/bundled/canvas/a2ui_interactive/SKILL.md +206 -0
- package/packages/skills/src/bundled/canvas/canvas_dashboard/SKILL.md +146 -0
- package/packages/skills/src/bundled/canvas/canvas_interact/SKILL.md +148 -0
- package/packages/skills/src/bundled/canvas/canvas_report/SKILL.md +146 -0
- package/packages/skills/src/bundled/cli/cli_pipeline/SKILL.md +136 -0
- package/packages/skills/src/bundled/cli/cli_safe_exec/SKILL.md +125 -0
- package/packages/skills/src/bundled/cron_manager/SKILL.md +188 -0
- package/packages/skills/src/bundled/cron_reminder/SKILL.md +112 -0
- package/packages/skills/src/bundled/filesystem/file_manager/SKILL.md +118 -0
- package/packages/skills/src/bundled/filesystem/file_read_and_summarize/SKILL.md +108 -0
- package/packages/skills/src/bundled/filesystem/file_writer/SKILL.md +135 -0
- package/packages/skills/src/bundled/meeting/meeting_transcription/SKILL.md +213 -0
- package/packages/skills/src/bundled/office/office_document_manager/SKILL.md +262 -0
- package/packages/skills/src/bundled/search_knowledge/busqueda_fts5/SKILL.md +74 -0
- package/packages/skills/src/bundled/voice/voice_assistant/SKILL.md +174 -0
- package/packages/skills/src/bundled/voice/voice_input/SKILL.md +146 -0
- package/packages/skills/src/bundled/voice/voice_output/SKILL.md +151 -0
- package/packages/skills/src/bundled/web/browser_automate/SKILL.md +120 -0
- package/packages/skills/src/bundled/web/browser_scrape/SKILL.md +109 -0
- package/packages/skills/src/bundled/web/web_monitor/SKILL.md +127 -0
- package/packages/skills/src/bundled/web/web_research/SKILL.md +119 -0
- package/packages/skills/src/bundled-data.generated.ts +1964 -0
- package/packages/skills/src/index.ts +1 -0
- package/packages/skills/src/loader.ts +388 -0
- package/dist/ui/assets/AgentNewPage-GB-tVN50.js +0 -1
- package/dist/ui/assets/BridgePage-DDcDILKu.js +0 -1
- package/dist/ui/assets/CanvasPage-oOk2sGOD.js +0 -33
- package/dist/ui/assets/DashboardPage-DV_2qWYJ.js +0 -6
- package/dist/ui/assets/LogsPage-DayYjh01.js +0 -1
- package/dist/ui/assets/MeetingPage-C01uPuqj.js +0 -1
- package/dist/ui/assets/ProjectsPage-B8_am_Ib.js +0 -1
- package/dist/ui/assets/ProvidersPage-DBzi66e4.js +0 -1
- package/dist/ui/assets/SettingsPage-CFA_Tknl.js +0 -9
- package/dist/ui/assets/SetupPage-BrUWbhvT.js +0 -1
- package/dist/ui/assets/accordion-DdAEfIXR.js +0 -1
- package/dist/ui/assets/chevron-down-DIosfU_U.js +0 -1
- package/dist/ui/assets/chevron-up-CI-W21Fy.js +0 -1
- package/dist/ui/assets/circle-S0-ouLz-.js +0 -1
- package/dist/ui/assets/circle-minus-CE0iJrl8.js +0 -1
- package/dist/ui/assets/circle-x-jUJ5zZvQ.js +0 -1
- package/dist/ui/assets/dropdown-menu-C2CXM1VE.js +0 -1
- package/dist/ui/assets/index-BN0875JH.css +0 -2
- package/dist/ui/assets/index-CH6sBa3Q.js +0 -116
- package/dist/ui/assets/pencil-5VdSj-h5.js +0 -1
- package/dist/ui/assets/progress-JN30I5fF.js +0 -1
- package/dist/ui/assets/scroll-area-BQQPitM8.js +0 -1
- package/dist/ui/assets/search-ChPgnVKj.js +0 -1
- package/dist/ui/assets/switch-C7W2-KEx.js +0 -1
- package/dist/ui/assets/terminal-C-R5Fckz.js +0 -1
- package/dist/ui/assets/useProviders-TBnWn-Hq.js +0 -1
- /package/dist/ui/assets/{card-DFKnZ6ky.js → card-CNf6BS2e.js} +0 -0
- /package/dist/ui/assets/{circle-alert-KuAm2FWh.js → circle-alert-CyHDwUj8.js} +0 -0
- /package/dist/ui/assets/{circle-check-6Ard1-2z.js → circle-check-Bb54Ebmu.js} +0 -0
- /package/dist/ui/assets/{cpu-KDy6-FAI.js → cpu-Cdgc_B1K.js} +0 -0
- /package/dist/ui/assets/{download-Cjbk4Rek.js → download-C3ifGMjJ.js} +0 -0
- /package/dist/ui/assets/{external-link-HtrFM63g.js → external-link-BvxYeTP1.js} +0 -0
- /package/dist/ui/assets/{eye-D1dB40_o.js → eye-DqNTU_GD.js} +0 -0
- /package/dist/ui/assets/{file-text-CE58EfH0.js → file-text-BT_9S9SM.js} +0 -0
- /package/dist/ui/assets/{folder-open-DIPKeiI_.js → folder-open-BhH8y9ac.js} +0 -0
- /package/dist/ui/assets/{format-BwdV8bB5.js → format-GVHeOyWI.js} +0 -0
- /package/dist/ui/assets/{gateway-url-D5uj6Nxg.js → gateway-url-COCbW0IR.js} +0 -0
- /package/dist/ui/assets/{gauge-DmQmJHEg.js → gauge-D_TMa4i9.js} +0 -0
- /package/dist/ui/assets/{globe-_hUGxQF4.js → globe-DeCQTCDJ.js} +0 -0
- /package/dist/ui/assets/{hexagon-BaNGQlQj.js → hexagon-DsGOUl-H.js} +0 -0
- /package/dist/ui/assets/{history-BfZVGlZa.js → history-BSG-Ypqf.js} +0 -0
- /package/dist/ui/assets/{info-CBZ5-AlC.js → info-NwLoa2Mj.js} +0 -0
- /package/dist/ui/assets/{key-Bv5DdTPh.js → key-3EP0dhkT.js} +0 -0
- /package/dist/ui/assets/{loader-circle-C4hhXLgp.js → loader-circle-CZNax6kS.js} +0 -0
- /package/dist/ui/assets/{lock-CkZYexqw.js → lock-Ei1_J-Nq.js} +0 -0
- /package/dist/ui/assets/{pause-Bpy1_s7y.js → pause-BUqah9Bi.js} +0 -0
- /package/dist/ui/assets/{play-Cj4osqJZ.js → play-NcZ4swwL.js} +0 -0
- /package/dist/ui/assets/{plus-BQhgZN3A.js → plus-CX1xyhp5.js} +0 -0
- /package/dist/ui/assets/{refresh-cw-BfREHVQM.js → refresh-cw-DaYdjQFk.js} +0 -0
- /package/dist/ui/assets/{save-FFTD4dMp.js → save-CUdYyHNy.js} +0 -0
- /package/dist/ui/assets/{settings-BdHKUL92.js → settings-Ds4SqD8s.js} +0 -0
- /package/dist/ui/assets/{sparkles-r4uJbJAl.js → sparkles-yUEb-7oH.js} +0 -0
- /package/dist/ui/assets/{square-G7Hyufqm.js → square-BD81nFtN.js} +0 -0
- /package/dist/ui/assets/{textarea-5kyuD04X.js → textarea-CXgXWKrT.js} +0 -0
- /package/dist/ui/assets/{trash-2-DXVBRWfh.js → trash-2-CNjMkoq6.js} +0 -0
- /package/dist/ui/assets/{triangle-alert-Bu5seg9O.js → triangle-alert-C9Y8Ub4X.js} +0 -0
- /package/dist/ui/assets/{vendor-router-CCECILJ0.js → vendor-router-C9pIYwbJ.js} +0 -0
- /package/dist/ui/assets/{volume-2-s9DuS696.js → volume-2-CeSXNDv4.js} +0 -0
- /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
|
+
];
|