@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,176 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: a2ui_dashboard
|
|
3
|
+
description: "Create real-time interactive dashboards using A2UI v0.9 protocol with dynamic data binding and live updates"
|
|
4
|
+
version: 1.0.0
|
|
5
|
+
author: Hive Team
|
|
6
|
+
icon: "📊"
|
|
7
|
+
category: canvas
|
|
8
|
+
permissions:
|
|
9
|
+
- canvas_write
|
|
10
|
+
dependencies: []
|
|
11
|
+
tools: [a2ui_create_surface, a2ui_update_components, a2ui_update_data_model, a2ui_delete_surface]
|
|
12
|
+
|
|
13
|
+
# Structured skill fields
|
|
14
|
+
triggers:
|
|
15
|
+
- "dashboard A2UI"
|
|
16
|
+
- "panel de control A2UI"
|
|
17
|
+
- "A2UI dashboard"
|
|
18
|
+
- "mostrar métricas A2UI"
|
|
19
|
+
- "A2UI metrics"
|
|
20
|
+
- "dashboard interactivo A2UI"
|
|
21
|
+
- "interactive dashboard"
|
|
22
|
+
- "A2UI dashboard en tiempo real"
|
|
23
|
+
- "real-time dashboard A2UI"
|
|
24
|
+
- "mostrar datos A2UI"
|
|
25
|
+
- "visualizar datos con A2UI"
|
|
26
|
+
|
|
27
|
+
preferred_agents: []
|
|
28
|
+
|
|
29
|
+
steps:
|
|
30
|
+
- step: 1
|
|
31
|
+
action: a2ui_create_surface
|
|
32
|
+
instruction: "Create an A2UI surface for the dashboard. Set theme with primaryColor matching project branding."
|
|
33
|
+
params:
|
|
34
|
+
surfaceId: "Descriptive ID (e.g. 'project_dashboard', 'metrics_dashboard')"
|
|
35
|
+
catalogId: "https://a2ui.org/specification/v0_9/basic_catalog.json"
|
|
36
|
+
theme: "{ primaryColor: '#10B981', agentDisplayName: 'Dashboard' }"
|
|
37
|
+
output: surface_created
|
|
38
|
+
|
|
39
|
+
- step: 2
|
|
40
|
+
action: a2ui_update_components
|
|
41
|
+
instruction: "Build dashboard layout using Row, Column, Card, and Text components. Use weight for proportional sizing."
|
|
42
|
+
params:
|
|
43
|
+
surfaceId: "Same surfaceId from step 1"
|
|
44
|
+
components: "Array of A2UI component definitions for dashboard layout"
|
|
45
|
+
output: dashboard_layout
|
|
46
|
+
|
|
47
|
+
- step: 3
|
|
48
|
+
action: a2ui_update_data_model
|
|
49
|
+
instruction: "Populate dashboard with initial data using JSON Pointer paths. All dynamic values should use path bindings."
|
|
50
|
+
params:
|
|
51
|
+
surfaceId: "Same surfaceId"
|
|
52
|
+
path: "/"
|
|
53
|
+
value: "Full data model object with all metric values"
|
|
54
|
+
output: data_populated
|
|
55
|
+
|
|
56
|
+
- step: 4
|
|
57
|
+
action: a2ui_update_data_model
|
|
58
|
+
instruction: "Update specific data model paths to refresh dashboard metrics in real-time."
|
|
59
|
+
params:
|
|
60
|
+
surfaceId: "Same surfaceId"
|
|
61
|
+
path: "/metrics/completionRate"
|
|
62
|
+
value: "Updated value"
|
|
63
|
+
output: metrics_updated
|
|
64
|
+
|
|
65
|
+
- step: 5
|
|
66
|
+
action: a2ui_delete_surface
|
|
67
|
+
instruction: "Delete the dashboard surface when no longer needed."
|
|
68
|
+
params:
|
|
69
|
+
surfaceId: "Same surfaceId"
|
|
70
|
+
output: surface_deleted
|
|
71
|
+
|
|
72
|
+
rules:
|
|
73
|
+
- "Always call a2ui_create_surface BEFORE a2ui_update_components"
|
|
74
|
+
- "Components MUST include a root component with id='root'"
|
|
75
|
+
- "Use Row with weight for side-by-side metrics (e.g. weight: 1 vs weight: 3)"
|
|
76
|
+
- "Use Card to group related metrics together"
|
|
77
|
+
- "Use Text with usageHint: 'h2' for section titles, 'h1' for dashboard title"
|
|
78
|
+
- "Use Text with usageHint: 'caption' for labels"
|
|
79
|
+
- "Use data binding { path: '/metrics/name' } for all dynamic values"
|
|
80
|
+
- "Update metrics with a2ui_update_data_model using specific JSON Pointer paths"
|
|
81
|
+
- "Use a2ui_update_data_model with path: '/' to replace entire data model if needed"
|
|
82
|
+
- "Delete surfaces with a2ui_delete_surface when dashboard is no longer needed"
|
|
83
|
+
- "For static dashboards prefer canvas_render with chart type; use A2UI for interactive/live dashboards"
|
|
84
|
+
|
|
85
|
+
output_format:
|
|
86
|
+
structure: a2ui_dashboard
|
|
87
|
+
sections:
|
|
88
|
+
- "surface_creation"
|
|
89
|
+
- "dashboard_layout"
|
|
90
|
+
- "data_model"
|
|
91
|
+
- "live_updates"
|
|
92
|
+
- "cleanup"
|
|
93
|
+
max_length: "Structured JSON components"
|
|
94
|
+
|
|
95
|
+
examples:
|
|
96
|
+
- user_input: "mostrá el dashboard del proyecto"
|
|
97
|
+
expected_behavior: "a2ui_create_surface(surfaceId:'project_dash', theme:{primaryColor:'#10B981'}) → a2ui_update_components with Row[Column[Card[metrics]],Column[tasks]] → a2ui_update_data_model(path:'/', value:{metrics:{...}})"
|
|
98
|
+
|
|
99
|
+
- user_input: "actualizá las métricas del dashboard"
|
|
100
|
+
expected_behavior: "a2ui_update_data_model(surfaceId:'project_dash', path:'/metrics/completionRate', value:75)"
|
|
101
|
+
|
|
102
|
+
- user_input: "show a real-time dashboard with server metrics"
|
|
103
|
+
expected_behavior: "a2ui_create_surface → a2ui_update_components with Cards for each metric → a2ui_update_data_model → periodic updates with a2ui_update_data_model"
|
|
104
|
+
---
|
|
105
|
+
|
|
106
|
+
# A2UI Dashboard Skill
|
|
107
|
+
|
|
108
|
+
## Cuándo se Activa
|
|
109
|
+
|
|
110
|
+
Para crear dashboards interactivos en tiempo real usando A2UI v0.9. Usar cuando se necesita:
|
|
111
|
+
- Métricas que se actualizan dinámicamente
|
|
112
|
+
- Dashboards con data binding
|
|
113
|
+
- Paneles con Cards, Rows, Columns
|
|
114
|
+
- Visualización de datos que cambia en tiempo real
|
|
115
|
+
|
|
116
|
+
## Herramientas Disponibles
|
|
117
|
+
|
|
118
|
+
| Tool | Qué hace | Cuándo usarla |
|
|
119
|
+
|------|----------|---------------|
|
|
120
|
+
| `a2ui_create_surface` | Crea la superficie A2UI | Siempre primero |
|
|
121
|
+
| `a2ui_update_components` | Envía componentes | Para layout del dashboard |
|
|
122
|
+
| `a2ui_update_data_model` | Actualiza datos | Para métricas dinámicas |
|
|
123
|
+
| `a2ui_delete_surface` | Elimina la superficie | Al cerrar dashboard |
|
|
124
|
+
|
|
125
|
+
## Flujo Obligatorio
|
|
126
|
+
|
|
127
|
+
```
|
|
128
|
+
1. a2ui_create_surface(surfaceId, catalogId, theme)
|
|
129
|
+
2. a2ui_update_components(surfaceId, components[])
|
|
130
|
+
3. a2ui_update_data_model(surfaceId, path, value) // datos iniciales
|
|
131
|
+
4. [actualizar métricas con a2ui_update_data_model según necesidad]
|
|
132
|
+
5. a2ui_delete_surface(surfaceId) // al terminar
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
## Patrón de Dashboard Típico
|
|
136
|
+
|
|
137
|
+
```json
|
|
138
|
+
[
|
|
139
|
+
{"id": "root", "component": "Column", "children": ["title", "metrics_row", "tasks_list"]},
|
|
140
|
+
{"id": "title", "component": "Text", "text": "Dashboard de Proyecto", "variant": "h1"},
|
|
141
|
+
|
|
142
|
+
{"id": "metrics_row", "component": "Row", "children": ["card1", "card2", "card3"]},
|
|
143
|
+
{"id": "card1", "component": "Card", "child": "card1_content", "weight": 1},
|
|
144
|
+
{"id": "card1_content", "component": "Column", "children": ["card1_label", "card1_value"]},
|
|
145
|
+
{"id": "card1_label", "component": "Text", "text": "Completado", "variant": "caption"},
|
|
146
|
+
{"id": "card1_value", "component": "Text", "text": {"path": "/metrics/completionRate"}, "variant": "h2"},
|
|
147
|
+
|
|
148
|
+
{"id": "tasks_list", "component": "List", "children": {"path": "/tasks", "componentId": "task_template"}},
|
|
149
|
+
{"id": "task_template", "component": "Card", "child": "task_content"},
|
|
150
|
+
{"id": "task_content", "component": "Column", "children": ["task_name", "task_status"]},
|
|
151
|
+
{"id": "task_name", "component": "Text", "text": {"path": "/name"}},
|
|
152
|
+
{"id": "task_status", "component": "Text", "text": {"path": "/status"}, "variant": "caption"}
|
|
153
|
+
]
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
## Actualización en Tiempo Real
|
|
157
|
+
|
|
158
|
+
Para actualizar métricas específicas sin reenviar componentes:
|
|
159
|
+
```json
|
|
160
|
+
a2ui_update_data_model(surfaceId: "dash", path: "/metrics/completionRate", value: 85)
|
|
161
|
+
a2ui_update_data_model(surfaceId: "dash", path: "/metrics/totalTasks", value: 24)
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
Para reemplazar todo el data model:
|
|
165
|
+
```json
|
|
166
|
+
a2ui_update_data_model(surfaceId: "dash", path: "/", value: {metrics: {completionRate: 90, totalTasks: 25}, tasks: [...]})
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
## Mejores Prácticas
|
|
170
|
+
|
|
171
|
+
- Usar `weight` en Row/Column para proporciones (weight:1 vs weight:3 = 25% vs 75%)
|
|
172
|
+
- Agrupar métricas en Cards para separación visual
|
|
173
|
+
- Usar `usageHint: "caption"` para labels, `"h1"/"h2"` para valores
|
|
174
|
+
- Bind todos los valores dinámicos con `{ path: "/..." }`
|
|
175
|
+
- Actualizar métricas con `a2ui_update_data_model` path específico
|
|
176
|
+
- Eliminar surfaces al terminar para evitar memory leaks
|
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: a2ui_form
|
|
3
|
+
description: "Create rich interactive forms using A2UI v0.9 protocol with validation, data binding, and multi-step flows"
|
|
4
|
+
version: 1.0.0
|
|
5
|
+
author: Hive Team
|
|
6
|
+
icon: "📝"
|
|
7
|
+
category: canvas
|
|
8
|
+
permissions:
|
|
9
|
+
- canvas_write
|
|
10
|
+
dependencies: []
|
|
11
|
+
tools: [a2ui_create_surface, a2ui_update_components, a2ui_update_data_model, a2ui_delete_surface]
|
|
12
|
+
|
|
13
|
+
# Structured skill fields
|
|
14
|
+
triggers:
|
|
15
|
+
- "crear formulario A2UI"
|
|
16
|
+
- "create A2UI form"
|
|
17
|
+
- "formulario interactivo A2UI"
|
|
18
|
+
- "A2UI form"
|
|
19
|
+
- "pedir datos con A2UI"
|
|
20
|
+
- "collect data A2UI"
|
|
21
|
+
- "formulario con validación"
|
|
22
|
+
- "form with validation"
|
|
23
|
+
- "formulario multi-paso"
|
|
24
|
+
- "multi-step form A2UI"
|
|
25
|
+
- "form dinámico A2UI"
|
|
26
|
+
- "dynamic form A2UI"
|
|
27
|
+
|
|
28
|
+
preferred_agents: []
|
|
29
|
+
|
|
30
|
+
steps:
|
|
31
|
+
- step: 1
|
|
32
|
+
action: a2ui_create_surface
|
|
33
|
+
instruction: "Create an A2UI surface with a unique surfaceId and catalog. Set theme with primaryColor and agentDisplayName."
|
|
34
|
+
params:
|
|
35
|
+
surfaceId: "Unique identifier (e.g. 'contact_form', 'signup_form')"
|
|
36
|
+
catalogId: "https://a2ui.org/specification/v0_9/basic_catalog.json"
|
|
37
|
+
theme: "{ primaryColor: '#3B82F6', agentDisplayName: 'Asistente' }"
|
|
38
|
+
output: surface_created
|
|
39
|
+
|
|
40
|
+
- step: 2
|
|
41
|
+
action: a2ui_update_components
|
|
42
|
+
instruction: "Send the form layout as a flat list of A2UI components. Must include a 'root' component. Use Column/Row for layout, TextField for inputs, Button for submit."
|
|
43
|
+
params:
|
|
44
|
+
surfaceId: "Same surfaceId from step 1"
|
|
45
|
+
components: "Array of A2UI component definitions"
|
|
46
|
+
output: components_sent
|
|
47
|
+
|
|
48
|
+
- step: 3
|
|
49
|
+
action: a2ui_update_data_model
|
|
50
|
+
instruction: "Populate initial form values using JSON Pointer paths (e.g. '/form/name'). Sets default values and enables two-way binding."
|
|
51
|
+
params:
|
|
52
|
+
surfaceId: "Same surfaceId"
|
|
53
|
+
path: "/form"
|
|
54
|
+
value: "{ name: '', email: '' }"
|
|
55
|
+
output: data_populated
|
|
56
|
+
|
|
57
|
+
- step: 4
|
|
58
|
+
action: a2ui_delete_surface
|
|
59
|
+
instruction: "Delete the A2UI surface when the form is completed or no longer needed."
|
|
60
|
+
params:
|
|
61
|
+
surfaceId: "Same surfaceId"
|
|
62
|
+
output: surface_deleted
|
|
63
|
+
|
|
64
|
+
rules:
|
|
65
|
+
- "Always call a2ui_create_surface BEFORE a2ui_update_components"
|
|
66
|
+
- "Components MUST include a root component with id='root'"
|
|
67
|
+
- "Use data binding with { path: '/form/field' } for TextField values to enable two-way binding"
|
|
68
|
+
- "Add checks (validation) to TextField: [{ call: 'required', args: { value: { path: '/form/email' } }, message: 'Email is required' }]"
|
|
69
|
+
- "Button actions use event format: { event: { name: 'submit_form', context: { email: { path: '/form/email' } } } }"
|
|
70
|
+
- "Use Column for vertical layouts, Row for horizontal layouts"
|
|
71
|
+
- "Set weight on Row/Column children for proportional sizing (e.g. weight: 1 vs weight: 3)"
|
|
72
|
+
- "Delete surfaces with a2ui_delete_surface when no longer needed to prevent memory leaks"
|
|
73
|
+
- "Prefer A2UI forms over canvas_ask for complex forms with validation"
|
|
74
|
+
|
|
75
|
+
output_format:
|
|
76
|
+
structure: a2ui_form
|
|
77
|
+
sections:
|
|
78
|
+
- "surface_creation"
|
|
79
|
+
- "component_layout"
|
|
80
|
+
- "data_model"
|
|
81
|
+
- "cleanup"
|
|
82
|
+
max_length: "Structured JSON components"
|
|
83
|
+
|
|
84
|
+
examples:
|
|
85
|
+
- user_input: "creá un formulario de contacto"
|
|
86
|
+
expected_behavior: "a2ui_create_surface(surfaceId:'contact_form', theme:{primaryColor:'#3B82F6',agentDisplayName:'Asistente'}) → a2ui_update_components(surfaceId:'contact_form', components:[root,Column,hdr,name_fld,email_fld,msg_fld,submit_btn]) → a2ui_update_data_model(surfaceId:'contact_form', path:'/form', value:{name:'',email:'',message:''})"
|
|
87
|
+
|
|
88
|
+
- user_input: "I need a signup form with email validation"
|
|
89
|
+
expected_behavior: "a2ui_create_surface → a2ui_update_components with TextField({value:{path:'/form/email'}, checks:[{call:'required',...},{call:'email',...}]}) → a2ui_update_data_model"
|
|
90
|
+
|
|
91
|
+
- user_input: "creá un formulario multi-paso"
|
|
92
|
+
expected_behavior: "a2ui_create_surface → a2ui_update_components with Tabs+Column per step → a2ui_update_data_model for all fields"
|
|
93
|
+
---
|
|
94
|
+
|
|
95
|
+
# A2UI Form Skill
|
|
96
|
+
|
|
97
|
+
## Cuándo se Activa
|
|
98
|
+
|
|
99
|
+
Para crear formularios interactivos ricos usando el protocolo A2UI v0.9. Usar cuando se necesita:
|
|
100
|
+
- Validación de campos (required, email, regex)
|
|
101
|
+
- Data binding dinámico
|
|
102
|
+
- Formularios multi-paso
|
|
103
|
+
- Choice pickers, sliders, checkboxes
|
|
104
|
+
- Formularios con acciones personalizadas
|
|
105
|
+
|
|
106
|
+
## Herramientas Disponibles
|
|
107
|
+
|
|
108
|
+
| Tool | Qué hace | Cuándo usarla |
|
|
109
|
+
|------|----------|---------------|
|
|
110
|
+
| `a2ui_create_surface` | Crea la superficie A2UI | Siempre primero |
|
|
111
|
+
| `a2ui_update_components` | Envía componentes | Después de crear surface |
|
|
112
|
+
| `a2ui_update_data_model` | Actualiza datos | Para valores iniciales o dinámicos |
|
|
113
|
+
| `a2ui_delete_surface` | Elimina la superficie | Al terminar |
|
|
114
|
+
|
|
115
|
+
## Flujo Obligatorio
|
|
116
|
+
|
|
117
|
+
```
|
|
118
|
+
1. a2ui_create_surface(surfaceId, catalogId, theme)
|
|
119
|
+
2. a2ui_update_components(surfaceId, components[])
|
|
120
|
+
3. a2ui_update_data_model(surfaceId, path, value) // opcional, para datos iniciales
|
|
121
|
+
4. [esperar acción del usuario]
|
|
122
|
+
5. a2ui_delete_surface(surfaceId) // al terminar
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
## Componentes Disponibles
|
|
126
|
+
|
|
127
|
+
| Componente | Descripción | Props clave |
|
|
128
|
+
|------------|-------------|-------------|
|
|
129
|
+
| `Column` | Layout vertical | `children`, `distribution`, `alignment` |
|
|
130
|
+
| `Row` | Layout horizontal | `children`, `distribution`, `alignment` |
|
|
131
|
+
| `Text` | Texto | `text`, `usageHint` (h1-h5, body, caption, code) |
|
|
132
|
+
| `Button` | Botón | `child`, `variant`, `action` |
|
|
133
|
+
| `TextField` | Campo de texto | `label`, `value`, `variant` (shortText/longText/number/obscured), `validationRegexp`, `checks`, `action` |
|
|
134
|
+
| `CheckBox` | Checkbox | `label`, `value` |
|
|
135
|
+
| `ChoicePicker` | Selector múltiple | `options`, `value` (DynamicStringList), `variant` (mutuallyExclusive/multipleSelection), `displayStyle`, `filterable`, `action` |
|
|
136
|
+
| `Slider` | Slider numérico | `value`, `minValue`, `maxValue` |
|
|
137
|
+
| `DateTimeInput` | Fecha/hora | `value`, `enableDate`, `enableTime` |
|
|
138
|
+
| `Card` | Tarjeta | `child` |
|
|
139
|
+
| `Divider` | Separador | `axis` |
|
|
140
|
+
| `Image` | Imagen | `url`, `fit` |
|
|
141
|
+
| `Tabs` | Pestañas | `tabItems` |
|
|
142
|
+
|
|
143
|
+
## Data Binding
|
|
144
|
+
|
|
145
|
+
- Literal: `"texto directo"` o número
|
|
146
|
+
- Path: `{ "path": "/form/name" }` — se resuelve contra el data model
|
|
147
|
+
- Function call: `{ "call": "formatDate", "args": {...} }`
|
|
148
|
+
|
|
149
|
+
## Cuándo disparan acciones los inputs
|
|
150
|
+
|
|
151
|
+
| Componente | Cuándo dispara | Formato de action |
|
|
152
|
+
|------------|---------------|-------------------|
|
|
153
|
+
| `Button` | Al hacer click | `{name: "...", context: {...}}` o `{event: {name: "...", context: {...}}}` |
|
|
154
|
+
| `TextField` | Al perder foco (blur) o presionar Enter (en shortText) | `{name: "...", context: {...}}` |
|
|
155
|
+
| `ChoicePicker` | Inmediatamente al seleccionar/deseleccionar | `{name: "...", context: {...}}` |
|
|
156
|
+
| `Slider` | Al soltar el slider (onValueCommit) | `{name: "...", context: {...}}` |
|
|
157
|
+
| `CheckBox` | Al cambiar estado | — (solo two-way binding) |
|
|
158
|
+
| `DateTimeInput` | Al cambiar valor | — (solo two-way binding) |
|
|
159
|
+
|
|
160
|
+
**Nota**: Tanto `{name: "...", context: {...}}` (directo) como `{event: {name: "...", context: {...}}}` (con wrapper) son formatos válidos.
|
|
161
|
+
|
|
162
|
+
**Nota**: Para ChoicePicker usa siempre `selections: {path: "..."}` (no `value`) para two-way binding.
|
|
163
|
+
|
|
164
|
+
## Validación (checks)
|
|
165
|
+
|
|
166
|
+
```json
|
|
167
|
+
"checks": [
|
|
168
|
+
{ "call": "required", "args": { "value": { "path": "/form/email" } }, "message": "Email is required" },
|
|
169
|
+
{ "call": "email", "args": { "value": { "path": "/form/email" } }, "message": "Invalid email" },
|
|
170
|
+
{ "call": "regex", "args": { "value": { "path": "/form/phone" }, "pattern": "^\\d{10}$" }, "message": "10 digits required" }
|
|
171
|
+
]
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
## Ejemplo: Formulario de Contacto
|
|
175
|
+
|
|
176
|
+
```json
|
|
177
|
+
// 1. Create surface
|
|
178
|
+
a2ui_create_surface(surfaceId: "contact_form", catalogId: "https://a2ui.org/specification/v0_9/basic_catalog.json", theme: {primaryColor: "#3B82F6", agentDisplayName: "Asistente"})
|
|
179
|
+
|
|
180
|
+
// 2. Send components
|
|
181
|
+
a2ui_update_components(surfaceId: "contact_form", components: [
|
|
182
|
+
{"id": "root", "component": "Column", "children": ["header","name_field","email_field","msg_field","submit_btn"]},
|
|
183
|
+
{id: "header", component: "Text", text: "Contacto", variant: "h2"},
|
|
184
|
+
{id: "name_field", component: "TextField", label: "Nombre", value: {path: "/form/name"}, variant: "shortText"},
|
|
185
|
+
{id: "email_field", component: "TextField", label: "Email", value: {path: "/form/email"}, variant: "shortText", validationRegexp: "^[^@]+@[^@]+\\.[^@]+$", checks: [{call: "required", args: {value: {path: "/form/email"}}, message: "Email obligatorio"}, {call: "email", args: {value: {path: "/form/email"}}, message: "Email inválido"}]},
|
|
186
|
+
{id: "msg_field", component: "TextField", label: "Mensaje", value: {path: "/form/message"}, variant: "longText"},
|
|
187
|
+
{id: "submit_label", component: "Text", text: "Enviar"},
|
|
188
|
+
{id: "submit_btn", component: "Button", child: "submit_label", variant: "primary", action: {event: {name: "submit_contact", context: {name: {path: "/form/name"}, email: {path: "/form/email"}, message: {path: "/form/message"}}}}
|
|
189
|
+
])
|
|
190
|
+
|
|
191
|
+
// 3. Initialize data model
|
|
192
|
+
a2ui_update_data_model(surfaceId: "contact_form", path: "/form", value: {name: "", email: "", message: ""})
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
## Mejores Prácticas
|
|
196
|
+
|
|
197
|
+
- Siempre incluir un componente `root` con id="root"
|
|
198
|
+
- Usar `{ path: "/..." }` para data binding en TextField values
|
|
199
|
+
- Agregar `checks` para validación de campos obligatorios
|
|
200
|
+
- Usar `variant: "primary"` para botones principales
|
|
201
|
+
- Eliminar surfaces con `a2ui_delete_surface` al terminar
|
|
202
|
+
- Preferir A2UI forms sobre `canvas_ask` para formularios complejos con validación
|
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: a2ui_interactive
|
|
3
|
+
description: "Create multi-step interactive workflows using A2UI v0.9 protocol with tabs, modals, choice pickers, and dynamic updates based on user actions"
|
|
4
|
+
version: 1.0.0
|
|
5
|
+
author: Hive Team
|
|
6
|
+
icon: "🔄"
|
|
7
|
+
category: canvas
|
|
8
|
+
permissions:
|
|
9
|
+
- canvas_write
|
|
10
|
+
dependencies: []
|
|
11
|
+
tools: [a2ui_create_surface, a2ui_update_components, a2ui_update_data_model, a2ui_delete_surface]
|
|
12
|
+
|
|
13
|
+
# Structured skill fields
|
|
14
|
+
triggers:
|
|
15
|
+
- "interfaz interactiva A2UI"
|
|
16
|
+
- "A2UI interactive UI"
|
|
17
|
+
- "flujo A2UI"
|
|
18
|
+
- "A2UI workflow"
|
|
19
|
+
- "asistente A2UI"
|
|
20
|
+
- "A2UI assistant"
|
|
21
|
+
- "wizard A2UI"
|
|
22
|
+
- "flujo multi-paso A2UI"
|
|
23
|
+
- "multi-step flow A2UI"
|
|
24
|
+
- "workflow interactivo"
|
|
25
|
+
- "interactive workflow"
|
|
26
|
+
- "asistente paso a paso"
|
|
27
|
+
- "step-by-step assistant"
|
|
28
|
+
- "A2UI con tabs y modales"
|
|
29
|
+
|
|
30
|
+
preferred_agents: []
|
|
31
|
+
|
|
32
|
+
steps:
|
|
33
|
+
- step: 1
|
|
34
|
+
action: a2ui_create_surface
|
|
35
|
+
instruction: "Create an A2UI surface for the interactive workflow. Set theme with agent display name."
|
|
36
|
+
params:
|
|
37
|
+
surfaceId: "Descriptive ID (e.g. 'onboarding_flow', 'booking_assistant')"
|
|
38
|
+
catalogId: "https://a2ui.org/specification/v0_9/basic_catalog.json"
|
|
39
|
+
theme: "{ primaryColor: '#8B5CF6', agentDisplayName: 'Asistente' }"
|
|
40
|
+
output: surface_created
|
|
41
|
+
|
|
42
|
+
- step: 2
|
|
43
|
+
action: a2ui_update_components
|
|
44
|
+
instruction: "Build the initial workflow layout. Use Tabs for multi-step flows, Modal for confirmations, ChoicePicker for selections."
|
|
45
|
+
params:
|
|
46
|
+
surfaceId: "Same surfaceId from step 1"
|
|
47
|
+
components: "Array of A2UI component definitions for workflow steps"
|
|
48
|
+
output: workflow_layout
|
|
49
|
+
|
|
50
|
+
- step: 3
|
|
51
|
+
action: a2ui_update_data_model
|
|
52
|
+
instruction: "Initialize workflow state data. Include all fields needed across steps."
|
|
53
|
+
params:
|
|
54
|
+
surfaceId: "Same surfaceId"
|
|
55
|
+
path: "/"
|
|
56
|
+
value: "Initial workflow state object"
|
|
57
|
+
output: state_initialized
|
|
58
|
+
|
|
59
|
+
- step: 4
|
|
60
|
+
action: a2ui_update_components
|
|
61
|
+
instruction: "Update components based on user actions. Show/hide steps, change options, add validation feedback."
|
|
62
|
+
params:
|
|
63
|
+
surfaceId: "Same surfaceId"
|
|
64
|
+
components: "Updated component definitions reflecting state changes"
|
|
65
|
+
output: workflow_updated
|
|
66
|
+
|
|
67
|
+
- step: 5
|
|
68
|
+
action: a2ui_delete_surface
|
|
69
|
+
instruction: "Delete the workflow surface when the flow is completed or cancelled."
|
|
70
|
+
params:
|
|
71
|
+
surfaceId: "Same surfaceId"
|
|
72
|
+
output: surface_deleted
|
|
73
|
+
|
|
74
|
+
rules:
|
|
75
|
+
- "Always call a2ui_create_surface BEFORE a2ui_update_components"
|
|
76
|
+
- "Components MUST include a root component with id='root'"
|
|
77
|
+
- "Use Tabs for multi-step workflows with tabItems: [{title, child}]"
|
|
78
|
+
- "Use Modal for confirmation dialogs: {entryPointChild, contentChild}"
|
|
79
|
+
- "Use ChoicePicker for selections: variant='mutuallyExclusive' for single, omit for multiple"
|
|
80
|
+
- "Use Button actions with event format: {event: {name: 'action_name', context: {key: {path: '/data/key'}}}}"
|
|
81
|
+
- "Update workflow state with a2ui_update_data_model after each user action"
|
|
82
|
+
- "Use a2ui_update_components to change the UI structure between steps"
|
|
83
|
+
- "Show progress indicators with Text components showing current step"
|
|
84
|
+
- "Validate inputs with checks on TextField: [{call: 'required', args: {value: {path: '...'}}, message: 'Required'}]"
|
|
85
|
+
- "Delete surfaces with a2ui_delete_surface when workflow is completed"
|
|
86
|
+
- "For simple confirmations prefer canvas_confirm; use A2UI for multi-step workflows"
|
|
87
|
+
|
|
88
|
+
output_format:
|
|
89
|
+
structure: a2ui_interactive
|
|
90
|
+
sections:
|
|
91
|
+
- "surface_creation"
|
|
92
|
+
- "workflow_layout"
|
|
93
|
+
- "state_initialization"
|
|
94
|
+
- "dynamic_updates"
|
|
95
|
+
- "cleanup"
|
|
96
|
+
max_length: "Structured JSON components"
|
|
97
|
+
|
|
98
|
+
examples:
|
|
99
|
+
- user_input: "creá un asistente de reserva"
|
|
100
|
+
expected_behavior: "a2ui_create_surface(surfaceId:'booking', theme:{primaryColor:'#8B5CF6'}) → a2ui_update_components with Tabs[step1:service, step2:datetime, step3:confirm] → a2ui_update_data_model(path:'/', value:{service:'', date:'', time:''})"
|
|
101
|
+
|
|
102
|
+
- user_input: "I need a multi-step onboarding flow"
|
|
103
|
+
expected_behavior: "a2ui_create_surface → a2ui_update_components with Column[step indicator, step content, nav buttons] → a2ui_update_data_model with empty state → on action: a2ui_update_components for next step"
|
|
104
|
+
|
|
105
|
+
- user_input: "creá un wizard con selección de opciones"
|
|
106
|
+
expected_behavior: "a2ui_create_surface → a2ui_update_components with ChoicePicker for options, Button for navigation → a2ui_update_data_model with initial state"
|
|
107
|
+
---
|
|
108
|
+
|
|
109
|
+
# A2UI Interactive Skill
|
|
110
|
+
|
|
111
|
+
## Cuándo se Activa
|
|
112
|
+
|
|
113
|
+
Para crear flujos interactivos multi-paso usando A2UI v0.9. Usar cuando se necesita:
|
|
114
|
+
- Wizards paso a paso
|
|
115
|
+
- Flujos de onboarding
|
|
116
|
+
- Asistentes de reserva/configuración
|
|
117
|
+
- Formularios con selections dinámicas
|
|
118
|
+
- Interacciones con modales de confirmación
|
|
119
|
+
- UIs que cambian según las acciones del usuario
|
|
120
|
+
|
|
121
|
+
## Herramientes Disponibles
|
|
122
|
+
|
|
123
|
+
| Tool | Qué hace | Cuándo usarla |
|
|
124
|
+
|------|----------|---------------|
|
|
125
|
+
| `a2ui_create_surface` | Crea la superficie A2UI | Siempre primero |
|
|
126
|
+
| `a2ui_update_components` | Envía/actualiza componentes | Para layout y cambios de UI |
|
|
127
|
+
| `a2ui_update_data_model` | Actualiza datos | Para estado del workflow |
|
|
128
|
+
| `a2ui_delete_surface` | Elimina la superficie | Al terminar flujo |
|
|
129
|
+
|
|
130
|
+
## Flujo Obligatorio
|
|
131
|
+
|
|
132
|
+
```
|
|
133
|
+
1. a2ui_create_surface(surfaceId, catalogId, theme)
|
|
134
|
+
2. a2ui_update_components(surfaceId, components[])
|
|
135
|
+
3. a2ui_update_data_model(surfaceId, path, value) // estado inicial
|
|
136
|
+
4. [recibir acción del usuario]
|
|
137
|
+
5. a2ui_update_data_model(...) // actualizar estado con respuesta
|
|
138
|
+
6. a2ui_update_components(...) // cambiar UI al siguiente paso
|
|
139
|
+
7. ... repetir 4-6 según necesidad ...
|
|
140
|
+
8. a2ui_delete_surface(surfaceId) // al terminar
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
## Patrones de Flujo Interactivo
|
|
144
|
+
|
|
145
|
+
### Wizard con Tabs (multi-paso)
|
|
146
|
+
|
|
147
|
+
```json
|
|
148
|
+
[
|
|
149
|
+
{id: "root", component: "Column", children: ["step_indicator", "tabs"]},
|
|
150
|
+
{id: "step_indicator", component: "Text", text: {path: "/stepLabel"}, variant: "caption"},
|
|
151
|
+
{id: "tabs", component: "Tabs", tabs: [
|
|
152
|
+
{title: "Servicio", child: "step1"},
|
|
153
|
+
{title: "Fecha", child: "step2"},
|
|
154
|
+
{title: "Confirmar", child: "step3"}
|
|
155
|
+
]},
|
|
156
|
+
{id: "step1", component: "Column", children: ["svc_label", "svc_picker"]},
|
|
157
|
+
{id: "svc_label", component: "Text", text: "Seleccioná un servicio", variant: "h3"},
|
|
158
|
+
{id: "svc_picker", component: "ChoicePicker", variant: "mutuallyExclusive", options: [...], value: {path: "/data/service"}},
|
|
159
|
+
// ... más pasos
|
|
160
|
+
]
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
### Confirmación con Modal
|
|
164
|
+
|
|
165
|
+
```json
|
|
166
|
+
[
|
|
167
|
+
{id: "confirm_modal", component: "Modal", trigger: "confirm_btn", content: "confirm_dialog"},
|
|
168
|
+
{id: "confirm_btn", component: "Button", child: "confirm_btn_text", action: {}},
|
|
169
|
+
{id: "confirm_btn_text", component: "Text", text: "Confirmar Reserva"},
|
|
170
|
+
{id: "confirm_dialog", component: "Column", children: ["confirm_msg", "confirm_yes", "confirm_no"]},
|
|
171
|
+
{id: "confirm_msg", component: "Text", text: "¿Confirmás tu reserva?"},
|
|
172
|
+
{id: "confirm_yes", component: "Button", child: "yes_text", variant: "primary", action: {event: {name: "confirm_booking", context: {service: {path: "/data/service"}}}}},
|
|
173
|
+
{id: "yes_text", component: "Text", text: "Sí, confirmar"},
|
|
174
|
+
{id: "confirm_no", component: "Button", child: "no_text", variant: "borderless", action: {event: {name: "cancel"}}}},
|
|
175
|
+
{id: "no_text", component: "Text", text: "Cancelar"}
|
|
176
|
+
]
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
### Selección con ChoicePicker
|
|
180
|
+
|
|
181
|
+
```json
|
|
182
|
+
[
|
|
183
|
+
{id: "service_picker", component: "ChoicePicker",
|
|
184
|
+
variant: "mutuallyExclusive",
|
|
185
|
+
options: [
|
|
186
|
+
{label: "Consulta General", value: "general"},
|
|
187
|
+
{label: "Especializada", value: "specialist"},
|
|
188
|
+
{label: "Urgencia", value: "urgent"}
|
|
189
|
+
],
|
|
190
|
+
value: {path: "/data/serviceType"},
|
|
191
|
+
action: {event: {name: "service_selected", context: {service: {path: "/data/serviceType"}}}}
|
|
192
|
+
}
|
|
193
|
+
]
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
## Mejores Prácticas
|
|
197
|
+
|
|
198
|
+
- Usar Tabs para wizards multi-paso
|
|
199
|
+
- Usar Modal para confirmaciones antes de acciones críticas
|
|
200
|
+
- Usar ChoicePicker con `variant: "mutuallyExclusive"` para selección única
|
|
201
|
+
- Mostrar indicador de progreso (paso X de Y)
|
|
202
|
+
- Actualizar data model después de cada acción del usuario
|
|
203
|
+
- Usar `a2ui_update_components` para cambiar la UI entre pasos
|
|
204
|
+
- Agregar validación con `checks` en TextField
|
|
205
|
+
- Mantener el estado del flujo en el data model (`/data/step`, `/data/serviceType`, etc.)
|
|
206
|
+
- Eliminar surfaces con `a2ui_delete_surface` al completar o cancelar
|