@johpaz/hive-agents 0.0.38 → 0.0.40
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 +31 -71
- package/dist/hive.js +4318 -2898
- package/dist/tool-worker.js +2691 -1969
- package/dist/ui/assets/AgentCreateForm-b7xHyfNc.js +1 -0
- package/dist/ui/assets/AgentDetailPage-VHy3M7mI.js +1 -0
- package/dist/ui/assets/AgentNewPage-BnWImQMx.js +1 -0
- package/dist/ui/{dist/assets/AgentsPage-DGNLDXjR.js → assets/AgentsPage-WFy5abqx.js} +5 -5
- package/dist/ui/assets/ApiClientPage-BV7zLIL7.js +3 -0
- package/dist/ui/assets/{CanvasPage-CnMO1FN8.js → CanvasPage-B9zuIrTm.js} +7 -7
- package/dist/ui/assets/ChannelsPage-DiN3NvIM.js +8 -0
- package/dist/ui/{dist/assets/DashboardPage-VyXXp3U1.js → assets/DashboardPage-CHjARjVK.js} +2 -2
- package/dist/ui/assets/{LoginPage-DPj2s2Qq.js → LoginPage-Dwd_XxoU.js} +1 -1
- package/dist/ui/assets/LogsPage-DW8Nnqe6.js +1 -0
- package/dist/ui/assets/MeetingPage-D3bkiKYt.js +1 -0
- package/dist/ui/assets/{NotFound-BMeQSGcG.js → NotFound-BIUDlIXU.js} +1 -1
- package/dist/ui/assets/ProvidersPage-UqsDAxPQ.js +1 -0
- package/dist/ui/{dist/assets/RecoverPage-B-hDZUM2.js → assets/RecoverPage-8hTjr_JU.js} +1 -1
- package/dist/ui/assets/SettingsPage-DNa0jOkA.js +9 -0
- package/dist/ui/assets/SetupPage-Bdm2irQG.js +1 -0
- package/dist/ui/assets/WebChatPage-DElJg6P2.js +16 -0
- package/dist/ui/assets/accordion-CnLzKNHK.js +1 -0
- package/dist/ui/{dist/assets/alert-Bq6awLlW.js → assets/alert-DylmSCDJ.js} +1 -1
- package/dist/ui/{dist/assets/alert-dialog-DQvltYmf.js → assets/alert-dialog-DNNWN_SI.js} +1 -1
- package/dist/ui/assets/{badge-DXUDdTed.js → badge-ChENFgkC.js} +1 -1
- package/dist/ui/assets/bell-8BqRYmzf.js +1 -0
- package/dist/ui/assets/chevron-down-DIosfU_U.js +1 -0
- package/dist/ui/assets/chevron-up-CI-W21Fy.js +1 -0
- package/dist/ui/assets/circle-x-DjLkFDO8.js +1 -0
- package/dist/ui/assets/copy-Bu5d7C-0.js +1 -0
- package/dist/ui/{dist/assets/dialog-bI9jImCS.js → assets/dialog-BJ-npIv8.js} +1 -1
- package/dist/ui/{dist/assets/dropdown-menu-BK-CO3Od.js → assets/dropdown-menu-DDiaHg5y.js} +1 -1
- package/dist/ui/assets/{es-Cg8zdT52.js → es-ecSKCyB6.js} +1 -1
- package/dist/ui/assets/index-CawKP29y.js +116 -0
- package/dist/ui/assets/index-DIcsEkyd.css +2 -0
- package/dist/ui/{dist/assets/label-CrH0Jj3v.js → assets/label-Bi6udtSd.js} +1 -1
- package/dist/ui/assets/progress-D5c-Eilm.js +1 -0
- package/dist/ui/assets/scroll-area-CihOx0cb.js +1 -0
- package/dist/ui/assets/search-DzDptO9s.js +1 -0
- package/dist/ui/assets/select-BQCOjM2j.js +1 -0
- package/dist/ui/assets/send-BPk9XbIq.js +1 -0
- package/dist/ui/assets/shield-CxhcUT39.js +1 -0
- package/dist/ui/assets/{slider-CsiUDxc3.js → slider-bcUiUfx0.js} +1 -1
- package/dist/ui/assets/switch-BR30E4ej.js +1 -0
- package/dist/ui/assets/table-B3aGEaVp.js +1 -0
- package/dist/ui/assets/tabs-LQidMKRS.js +1 -0
- package/dist/ui/assets/textarea-B6Z1Zc6W.js +1 -0
- package/dist/ui/assets/useProviders-Dlizq_8q.js +1 -0
- package/dist/ui/{dist/assets/vendor-radix-cw1bQaVC.js → assets/vendor-radix-D6rA7xKY.js} +4 -4
- package/dist/ui/assets/{vendor-react-D4s9E-zj.js → vendor-react-BU5iQU4f.js} +1 -1
- package/dist/ui/dist/assets/AgentCreateForm-b7xHyfNc.js +1 -0
- package/dist/ui/dist/assets/AgentDetailPage-VHy3M7mI.js +1 -0
- package/dist/ui/dist/assets/AgentNewPage-BnWImQMx.js +1 -0
- package/dist/ui/{assets/AgentsPage-DGNLDXjR.js → dist/assets/AgentsPage-WFy5abqx.js} +5 -5
- package/dist/ui/dist/assets/ApiClientPage-BV7zLIL7.js +3 -0
- package/dist/ui/dist/assets/{CanvasPage-CnMO1FN8.js → CanvasPage-B9zuIrTm.js} +7 -7
- package/dist/ui/dist/assets/ChannelsPage-DiN3NvIM.js +8 -0
- package/dist/ui/{assets/DashboardPage-VyXXp3U1.js → dist/assets/DashboardPage-CHjARjVK.js} +2 -2
- package/dist/ui/dist/assets/{LoginPage-DPj2s2Qq.js → LoginPage-Dwd_XxoU.js} +1 -1
- package/dist/ui/dist/assets/LogsPage-DW8Nnqe6.js +1 -0
- package/dist/ui/dist/assets/MeetingPage-D3bkiKYt.js +1 -0
- package/dist/ui/dist/assets/{NotFound-BMeQSGcG.js → NotFound-BIUDlIXU.js} +1 -1
- package/dist/ui/dist/assets/ProvidersPage-UqsDAxPQ.js +1 -0
- package/dist/ui/{assets/RecoverPage-B-hDZUM2.js → dist/assets/RecoverPage-8hTjr_JU.js} +1 -1
- package/dist/ui/dist/assets/SettingsPage-DNa0jOkA.js +9 -0
- package/dist/ui/dist/assets/SetupPage-Bdm2irQG.js +1 -0
- package/dist/ui/dist/assets/WebChatPage-DElJg6P2.js +16 -0
- package/dist/ui/dist/assets/accordion-CnLzKNHK.js +1 -0
- package/dist/ui/{assets/alert-Bq6awLlW.js → dist/assets/alert-DylmSCDJ.js} +1 -1
- package/dist/ui/{assets/alert-dialog-DQvltYmf.js → dist/assets/alert-dialog-DNNWN_SI.js} +1 -1
- package/dist/ui/dist/assets/{badge-DXUDdTed.js → badge-ChENFgkC.js} +1 -1
- package/dist/ui/dist/assets/bell-8BqRYmzf.js +1 -0
- package/dist/ui/dist/assets/chevron-down-DIosfU_U.js +1 -0
- package/dist/ui/dist/assets/chevron-up-CI-W21Fy.js +1 -0
- package/dist/ui/dist/assets/circle-x-DjLkFDO8.js +1 -0
- package/dist/ui/dist/assets/copy-Bu5d7C-0.js +1 -0
- package/dist/ui/{assets/dialog-bI9jImCS.js → dist/assets/dialog-BJ-npIv8.js} +1 -1
- package/dist/ui/{assets/dropdown-menu-BK-CO3Od.js → dist/assets/dropdown-menu-DDiaHg5y.js} +1 -1
- package/dist/ui/dist/assets/{es-Cg8zdT52.js → es-ecSKCyB6.js} +1 -1
- package/dist/ui/dist/assets/index-CawKP29y.js +116 -0
- package/dist/ui/dist/assets/index-DIcsEkyd.css +2 -0
- package/dist/ui/{assets/label-CrH0Jj3v.js → dist/assets/label-Bi6udtSd.js} +1 -1
- package/dist/ui/dist/assets/progress-D5c-Eilm.js +1 -0
- package/dist/ui/dist/assets/scroll-area-CihOx0cb.js +1 -0
- package/dist/ui/dist/assets/search-DzDptO9s.js +1 -0
- package/dist/ui/dist/assets/select-BQCOjM2j.js +1 -0
- package/dist/ui/dist/assets/send-BPk9XbIq.js +1 -0
- package/dist/ui/dist/assets/shield-CxhcUT39.js +1 -0
- package/dist/ui/dist/assets/{slider-CsiUDxc3.js → slider-bcUiUfx0.js} +1 -1
- package/dist/ui/dist/assets/switch-BR30E4ej.js +1 -0
- package/dist/ui/dist/assets/table-B3aGEaVp.js +1 -0
- package/dist/ui/dist/assets/tabs-LQidMKRS.js +1 -0
- package/dist/ui/dist/assets/textarea-B6Z1Zc6W.js +1 -0
- package/dist/ui/dist/assets/useProviders-Dlizq_8q.js +1 -0
- package/dist/ui/{assets/vendor-radix-cw1bQaVC.js → dist/assets/vendor-radix-D6rA7xKY.js} +4 -4
- package/dist/ui/dist/assets/{vendor-react-D4s9E-zj.js → vendor-react-BU5iQU4f.js} +1 -1
- package/dist/ui/dist/index.html +6 -6
- package/dist/ui/index.html +6 -6
- package/package.json +1 -1
- package/packages/cli/src/adapters/binary.ts +8 -4
- package/packages/cli/src/adapters/bun-global.ts +5 -1
- package/packages/cli/src/adapters/config.ts +4 -3
- package/packages/cli/src/adapters/docker.ts +2 -1
- package/packages/cli/src/commands/gateway.ts +123 -9
- package/packages/cli/src/commands/logs.ts +2 -1
- package/packages/cli/src/commands/onboard.ts +27 -1
- package/packages/cli/src/commands/sessions.ts +2 -1
- package/packages/cli/src/commands/skills.ts +2 -1
- package/packages/core/src/agent/agent-loop.ts +104 -2
- package/packages/core/src/agent/context-compiler.ts +6 -0
- package/packages/core/src/agent/llm-client.ts +6 -0
- package/packages/core/src/agent/llm-providers/anthropic.ts +23 -8
- package/packages/core/src/agent/llm-providers/hiveagents.ts +248 -0
- package/packages/core/src/agent/llm-providers/interface.ts +7 -1
- package/packages/core/src/agent/llm-providers/minimax.ts +13 -0
- package/packages/core/src/agent/llm-providers/openai-compat-base.ts +49 -25
- package/packages/core/src/agent/llm-providers/opencode-go.ts +9 -0
- package/packages/core/src/agent/providers/index.ts +3 -2
- package/packages/core/src/agent/stuck-loop.ts +90 -14
- package/packages/core/src/channels/base.ts +7 -1
- package/packages/core/src/channels/whatsapp.ts +13 -1
- package/packages/core/src/config/loader.ts +8 -8
- package/packages/core/src/gateway/helpers/path.ts +2 -1
- package/packages/core/src/gateway/initializer.ts +4 -4
- package/packages/core/src/gateway/llm-local/downloader.ts +130 -11
- package/packages/core/src/gateway/llm-local/index.ts +2 -0
- package/packages/core/src/gateway/llm-local/models.ts +4 -3
- package/packages/core/src/gateway/router.ts +7 -5
- package/packages/core/src/gateway/routes/http-client.ts +16 -0
- package/packages/core/src/gateway/routes/llm-local.ts +51 -5
- package/packages/core/src/gateway/routes/providers.ts +99 -2
- package/packages/core/src/gateway/server.ts +131 -57
- package/packages/core/src/gateway/slash-commands.ts +7 -1
- package/packages/core/src/gateway/tts/src/install.ts +17 -9
- package/packages/core/src/storage/crypto.ts +152 -20
- package/packages/core/src/storage/migrate.ts +51 -18
- package/packages/core/src/storage/onboarding.ts +28 -0
- package/packages/core/src/storage/seed.ts +52 -2
- package/packages/core/src/tool-runtime/index.ts +22 -1
- package/packages/core/src/tools/api/api-request.ts +174 -0
- package/packages/core/src/tools/api/index.ts +16 -0
- package/packages/core/src/tools/index.ts +12 -0
- package/packages/core/src/tools/web/browser-click.ts +2 -2
- package/packages/core/src/tools/web/browser-extract.ts +22 -6
- package/packages/core/src/tools/web/browser-navigate.ts +34 -18
- package/packages/core/src/tools/web/browser-screenshot.ts +40 -8
- package/packages/core/src/tools/web/browser-script.ts +2 -2
- package/packages/core/src/tools/web/browser-service.ts +295 -341
- package/packages/core/src/tools/web/browser-type.ts +5 -10
- package/packages/core/src/tools/web/browser-wait.ts +2 -2
- package/packages/core/src/tools/web/index.ts +1 -1
- package/packages/core/src/utils/logger.ts +2 -1
- package/packages/mcp/src/manager.ts +2 -1
- package/packages/skills/src/bundled/api/api_client/SKILL.md +132 -0
- package/packages/skills/src/bundled-data.generated.ts +1191 -1134
- package/packages/skills/src/loader.ts +2 -1
- package/dist/ui/assets/AgentCreateForm-0oFbN3gj.js +0 -1
- package/dist/ui/assets/AgentDetailPage-BJ4L2fNJ.js +0 -1
- package/dist/ui/assets/AgentNewPage-B3n0LUck.js +0 -1
- package/dist/ui/assets/ChannelsPage-fbF8K4MR.js +0 -8
- package/dist/ui/assets/LogsPage-B2lY9maY.js +0 -1
- package/dist/ui/assets/MeetingPage-2ky_hKiG.js +0 -1
- package/dist/ui/assets/ProvidersPage-CEyUM2tD.js +0 -1
- package/dist/ui/assets/SettingsPage-eO0i3g8p.js +0 -9
- package/dist/ui/assets/SetupPage-ByYqTELb.js +0 -1
- package/dist/ui/assets/WebChatPage-BuGT2AL0.js +0 -16
- package/dist/ui/assets/accordion-C5d5Rm5z.js +0 -1
- package/dist/ui/assets/chevron-up-BYhk0K2J.js +0 -1
- package/dist/ui/assets/globe-DeCQTCDJ.js +0 -1
- package/dist/ui/assets/index-B2fCYtTS.css +0 -2
- package/dist/ui/assets/index-CQ7fn00w.js +0 -116
- package/dist/ui/assets/progress-BherYzY6.js +0 -1
- package/dist/ui/assets/scroll-area-DkeyX32e.js +0 -1
- package/dist/ui/assets/send-B0H5SEIE.js +0 -1
- package/dist/ui/assets/switch-BDwN8RYV.js +0 -1
- package/dist/ui/assets/table-CSc8ubon.js +0 -1
- package/dist/ui/assets/textarea-CXgXWKrT.js +0 -1
- package/dist/ui/assets/useProviders-CnlC_qCS.js +0 -1
- package/dist/ui/dist/assets/AgentCreateForm-0oFbN3gj.js +0 -1
- package/dist/ui/dist/assets/AgentDetailPage-BJ4L2fNJ.js +0 -1
- package/dist/ui/dist/assets/AgentNewPage-B3n0LUck.js +0 -1
- package/dist/ui/dist/assets/ChannelsPage-fbF8K4MR.js +0 -8
- package/dist/ui/dist/assets/LogsPage-B2lY9maY.js +0 -1
- package/dist/ui/dist/assets/MeetingPage-2ky_hKiG.js +0 -1
- package/dist/ui/dist/assets/ProvidersPage-CEyUM2tD.js +0 -1
- package/dist/ui/dist/assets/SettingsPage-eO0i3g8p.js +0 -9
- package/dist/ui/dist/assets/SetupPage-ByYqTELb.js +0 -1
- package/dist/ui/dist/assets/WebChatPage-BuGT2AL0.js +0 -16
- package/dist/ui/dist/assets/accordion-C5d5Rm5z.js +0 -1
- package/dist/ui/dist/assets/chevron-up-BYhk0K2J.js +0 -1
- package/dist/ui/dist/assets/globe-DeCQTCDJ.js +0 -1
- package/dist/ui/dist/assets/index-B2fCYtTS.css +0 -2
- package/dist/ui/dist/assets/index-CQ7fn00w.js +0 -116
- package/dist/ui/dist/assets/progress-BherYzY6.js +0 -1
- package/dist/ui/dist/assets/scroll-area-DkeyX32e.js +0 -1
- package/dist/ui/dist/assets/send-B0H5SEIE.js +0 -1
- package/dist/ui/dist/assets/switch-BDwN8RYV.js +0 -1
- package/dist/ui/dist/assets/table-CSc8ubon.js +0 -1
- package/dist/ui/dist/assets/textarea-CXgXWKrT.js +0 -1
- package/dist/ui/dist/assets/useProviders-CnlC_qCS.js +0 -1
- /package/dist/ui/assets/{card-CNf6BS2e.js → card-DFKnZ6ky.js} +0 -0
- /package/dist/ui/assets/{circle-alert-CyHDwUj8.js → circle-alert-KuAm2FWh.js} +0 -0
- /package/dist/ui/assets/{circle-check-Bb54Ebmu.js → circle-check-6Ard1-2z.js} +0 -0
- /package/dist/ui/assets/{cpu-Cdgc_B1K.js → cpu-KDy6-FAI.js} +0 -0
- /package/dist/ui/assets/{download-C3ifGMjJ.js → download-Cjbk4Rek.js} +0 -0
- /package/dist/ui/assets/{external-link-BvxYeTP1.js → external-link-6sTlRDUR.js} +0 -0
- /package/dist/ui/assets/{eye-DqNTU_GD.js → eye-Df8o0tkC.js} +0 -0
- /package/dist/ui/assets/{file-text-BT_9S9SM.js → file-text-lnxnjBp0.js} +0 -0
- /package/dist/ui/assets/{folder-open-BhH8y9ac.js → folder-open-DJBLDFjv.js} +0 -0
- /package/dist/ui/assets/{format-GVHeOyWI.js → format-BwdV8bB5.js} +0 -0
- /package/dist/ui/assets/{gateway-url-COCbW0IR.js → gateway-url-DwzPmoc8.js} +0 -0
- /package/dist/ui/assets/{gauge-D_TMa4i9.js → gauge-B8Tj43rC.js} +0 -0
- /package/dist/ui/assets/{hexagon-DsGOUl-H.js → hexagon-6L79pgVK.js} +0 -0
- /package/dist/ui/assets/{history-BSG-Ypqf.js → history-CAF_R34_.js} +0 -0
- /package/dist/ui/assets/{info-NwLoa2Mj.js → info-WjromB4Y.js} +0 -0
- /package/dist/ui/assets/{key-3EP0dhkT.js → key-DyKOoQh5.js} +0 -0
- /package/dist/ui/assets/{loader-circle-CZNax6kS.js → loader-circle-BmBOgYze.js} +0 -0
- /package/dist/ui/assets/{lock-Ei1_J-Nq.js → lock-BS6OLXPv.js} +0 -0
- /package/dist/ui/assets/{pause-BUqah9Bi.js → pause-VqeUmp2Z.js} +0 -0
- /package/dist/ui/assets/{play-NcZ4swwL.js → play-zJpWuhrr.js} +0 -0
- /package/dist/ui/assets/{plus-CX1xyhp5.js → plus-BZQX26Dr.js} +0 -0
- /package/dist/ui/assets/{refresh-cw-DaYdjQFk.js → refresh-cw-CCzDCAuz.js} +0 -0
- /package/dist/ui/assets/{save-CUdYyHNy.js → save-hUmZhceG.js} +0 -0
- /package/dist/ui/assets/{settings-Ds4SqD8s.js → settings-BGfrZ_zM.js} +0 -0
- /package/dist/ui/assets/{sparkles-yUEb-7oH.js → sparkles-BhwlS1pc.js} +0 -0
- /package/dist/ui/assets/{square-BD81nFtN.js → square-DMNWw4Hi.js} +0 -0
- /package/dist/ui/assets/{terminal-DN38Q456.js → terminal--7G943As.js} +0 -0
- /package/dist/ui/assets/{trash-2-CNjMkoq6.js → trash-2-xD2o4SgX.js} +0 -0
- /package/dist/ui/assets/{triangle-alert-C9Y8Ub4X.js → triangle-alert-pVIJGjga.js} +0 -0
- /package/dist/ui/assets/{vendor-router-C9pIYwbJ.js → vendor-router-gqiZ7xhx.js} +0 -0
- /package/dist/ui/assets/{volume-2-CeSXNDv4.js → volume-2-BekVQl6P.js} +0 -0
- /package/dist/ui/assets/{zap-hlXjpSeA.js → zap-B4RaNNO5.js} +0 -0
- /package/dist/ui/dist/assets/{card-CNf6BS2e.js → card-DFKnZ6ky.js} +0 -0
- /package/dist/ui/dist/assets/{circle-alert-CyHDwUj8.js → circle-alert-KuAm2FWh.js} +0 -0
- /package/dist/ui/dist/assets/{circle-check-Bb54Ebmu.js → circle-check-6Ard1-2z.js} +0 -0
- /package/dist/ui/dist/assets/{cpu-Cdgc_B1K.js → cpu-KDy6-FAI.js} +0 -0
- /package/dist/ui/dist/assets/{download-C3ifGMjJ.js → download-Cjbk4Rek.js} +0 -0
- /package/dist/ui/dist/assets/{external-link-BvxYeTP1.js → external-link-6sTlRDUR.js} +0 -0
- /package/dist/ui/dist/assets/{eye-DqNTU_GD.js → eye-Df8o0tkC.js} +0 -0
- /package/dist/ui/dist/assets/{file-text-BT_9S9SM.js → file-text-lnxnjBp0.js} +0 -0
- /package/dist/ui/dist/assets/{folder-open-BhH8y9ac.js → folder-open-DJBLDFjv.js} +0 -0
- /package/dist/ui/dist/assets/{format-GVHeOyWI.js → format-BwdV8bB5.js} +0 -0
- /package/dist/ui/dist/assets/{gateway-url-COCbW0IR.js → gateway-url-DwzPmoc8.js} +0 -0
- /package/dist/ui/dist/assets/{gauge-D_TMa4i9.js → gauge-B8Tj43rC.js} +0 -0
- /package/dist/ui/dist/assets/{hexagon-DsGOUl-H.js → hexagon-6L79pgVK.js} +0 -0
- /package/dist/ui/dist/assets/{history-BSG-Ypqf.js → history-CAF_R34_.js} +0 -0
- /package/dist/ui/dist/assets/{info-NwLoa2Mj.js → info-WjromB4Y.js} +0 -0
- /package/dist/ui/dist/assets/{key-3EP0dhkT.js → key-DyKOoQh5.js} +0 -0
- /package/dist/ui/dist/assets/{loader-circle-CZNax6kS.js → loader-circle-BmBOgYze.js} +0 -0
- /package/dist/ui/dist/assets/{lock-Ei1_J-Nq.js → lock-BS6OLXPv.js} +0 -0
- /package/dist/ui/dist/assets/{pause-BUqah9Bi.js → pause-VqeUmp2Z.js} +0 -0
- /package/dist/ui/dist/assets/{play-NcZ4swwL.js → play-zJpWuhrr.js} +0 -0
- /package/dist/ui/dist/assets/{plus-CX1xyhp5.js → plus-BZQX26Dr.js} +0 -0
- /package/dist/ui/dist/assets/{refresh-cw-DaYdjQFk.js → refresh-cw-CCzDCAuz.js} +0 -0
- /package/dist/ui/dist/assets/{save-CUdYyHNy.js → save-hUmZhceG.js} +0 -0
- /package/dist/ui/dist/assets/{settings-Ds4SqD8s.js → settings-BGfrZ_zM.js} +0 -0
- /package/dist/ui/dist/assets/{sparkles-yUEb-7oH.js → sparkles-BhwlS1pc.js} +0 -0
- /package/dist/ui/dist/assets/{square-BD81nFtN.js → square-DMNWw4Hi.js} +0 -0
- /package/dist/ui/dist/assets/{terminal-DN38Q456.js → terminal--7G943As.js} +0 -0
- /package/dist/ui/dist/assets/{trash-2-CNjMkoq6.js → trash-2-xD2o4SgX.js} +0 -0
- /package/dist/ui/dist/assets/{triangle-alert-C9Y8Ub4X.js → triangle-alert-pVIJGjga.js} +0 -0
- /package/dist/ui/dist/assets/{vendor-router-C9pIYwbJ.js → vendor-router-gqiZ7xhx.js} +0 -0
- /package/dist/ui/dist/assets/{volume-2-CeSXNDv4.js → volume-2-BekVQl6P.js} +0 -0
- /package/dist/ui/dist/assets/{zap-hlXjpSeA.js → zap-B4RaNNO5.js} +0 -0
|
@@ -13,663 +13,773 @@ export interface BundledSkillEntry {
|
|
|
13
13
|
|
|
14
14
|
export const BUNDLED_SKILLS_DATA: BundledSkillEntry[] = [
|
|
15
15
|
{
|
|
16
|
-
name: "
|
|
17
|
-
description: `
|
|
18
|
-
category: "
|
|
19
|
-
version: "
|
|
20
|
-
tools: ["
|
|
21
|
-
triggers: ["
|
|
16
|
+
name: "cron_manager",
|
|
17
|
+
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.`,
|
|
18
|
+
category: "cron",
|
|
19
|
+
version: "2.0.0",
|
|
20
|
+
tools: ["cron.create","cron.list","cron.update","cron.delete","cron.pause","cron.resume","cron.trigger","cron.history"],
|
|
21
|
+
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"],
|
|
22
22
|
body: `
|
|
23
|
-
#
|
|
23
|
+
# Cron Manager Skill
|
|
24
24
|
|
|
25
25
|
## Cuándo se Activa
|
|
26
26
|
|
|
27
|
-
|
|
27
|
+
Para gestionar tareas programadas (cron jobs): crear, listar, actualizar, pausar, reanudar, eliminar, ejecutar y ver historial.
|
|
28
28
|
|
|
29
29
|
## Herramientas Disponibles
|
|
30
30
|
|
|
31
31
|
| Tool | Qué hace | Cuándo usarla |
|
|
32
32
|
|------|----------|---------------|
|
|
33
|
-
| \`
|
|
34
|
-
| \`
|
|
33
|
+
| \`cron.create\` | Crear cron job | Nueva tarea |
|
|
34
|
+
| \`cron.list\` | Listar todos | Ver existentes |
|
|
35
|
+
| \`cron.update\` | Actualizar existente | Cambiar horario/instrucción |
|
|
36
|
+
| \`cron.pause\` | Pausar temporalmente | Sin eliminar |
|
|
37
|
+
| \`cron.resume\` | Reanudar pausado | Continuar ejecución |
|
|
38
|
+
| \`cron.delete\` | Eliminar permanentemente | Cancelar para siempre |
|
|
39
|
+
| \`cron.trigger\` | Ejecutar ahora | Forzar ejecución |
|
|
40
|
+
| \`cron.history\` | Ver historial | Ver logs de ejecuciones |
|
|
35
41
|
|
|
36
|
-
##
|
|
42
|
+
## Campos Principales
|
|
37
43
|
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
44
|
+
| Campo | Tipo | Descripción |
|
|
45
|
+
|-------|------|-------------|
|
|
46
|
+
| \`name\` | string | Identificador corto (e.g., 'daily-report') |
|
|
47
|
+
| \`task\` | string | **REQUERIDO** - Instrucciones para el agente al ejecutarse |
|
|
48
|
+
| \`task_type\` | string | 'recurring' (repite) o 'one_shot' (una vez) |
|
|
49
|
+
| \`cron_expression\` | string | Expresión cron (solo para recurring) |
|
|
50
|
+
| \`fire_at\` | string | Datetime ISO (solo para one_shot) |
|
|
51
|
+
| \`channel\` | string | Canal de notificación |
|
|
52
|
+
| \`start_at\` | string | Inicio de ventana opcional (Croner startAt) |
|
|
53
|
+
| \`stop_at\` | string | Fin de ventana opcional (Croner stopAt) |
|
|
54
|
+
| \`dom_and_dow\` | number | 0=OR (default), 1=AND (día mes + día semana) |
|
|
42
55
|
|
|
43
|
-
|
|
44
|
-
const userText = voice_transcribe({
|
|
45
|
-
audio: userAudio,
|
|
46
|
-
language: "auto"
|
|
47
|
-
})
|
|
48
|
-
// → "¿Cuál es el clima hoy?"
|
|
56
|
+
## Cron Expression Format
|
|
49
57
|
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
58
|
+
\`\`\`
|
|
59
|
+
* * * * *
|
|
60
|
+
│ │ │ │ │
|
|
61
|
+
│ │ │ │ └── Día semana (0-6, 0=Domingo)
|
|
62
|
+
│ │ │ └──── Mes (1-12)
|
|
63
|
+
│ │ └────── Día del mes (1-31)
|
|
64
|
+
│ └──────── Hora (0-23)
|
|
65
|
+
└────────── Minuto (0-59)
|
|
66
|
+
\`\`\`
|
|
55
67
|
|
|
56
|
-
|
|
57
|
-
const responseAudio = voice_speak({
|
|
58
|
-
text: responseText,
|
|
59
|
-
voice_id: "eleven_flash_v2_5",
|
|
60
|
-
language: "es"
|
|
61
|
-
})
|
|
68
|
+
## Ejemplos Comunes
|
|
62
69
|
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
70
|
+
| Expresión | Significado |
|
|
71
|
+
|-----------|-------------|
|
|
72
|
+
| \`0 9 * * *\` | Diario 9:00 AM |
|
|
73
|
+
| \`0 7 * * 1-5\` | Lun-Vie 7:00 AM |
|
|
74
|
+
| \`0 */2 * * *\` | Cada 2 horas |
|
|
75
|
+
| \`0 0 * * 0\` | Domingos medianoche |
|
|
76
|
+
| \`0 0 1 * *\` | Día 1 de cada mes |
|
|
66
77
|
|
|
67
|
-
##
|
|
78
|
+
## Cómo Usar start_at / stop_at
|
|
68
79
|
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
| Comando | Transcribe → ejecuta → confirma por voz |
|
|
73
|
-
| Diálogo | Mantener contexto entre exchanges |
|
|
74
|
-
| Wake word | Escuchar "hey bee" → activar → procesar |
|
|
80
|
+
- \`start_at\`: La tarea no ejecuta antes de esta fecha
|
|
81
|
+
- \`stop_at\`: La tarea no ejecuta después de esta fecha
|
|
82
|
+
- Formato ISO: \`'2026-04-01T00:00:00'\`
|
|
75
83
|
|
|
76
|
-
##
|
|
84
|
+
## Cómo Usar dom_and_dow
|
|
77
85
|
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
{
|
|
81
|
-
"voice_wake_word": "hey bee",
|
|
82
|
-
"voice_wake_enabled": true
|
|
83
|
-
}
|
|
84
|
-
\`\`\`
|
|
86
|
+
- \`0\` (default): Se ejecuta si es el día del mes O el día de semana
|
|
87
|
+
- \`1\`: Se ejecuta solo si es EL MISMO día del mes Y el día de semana
|
|
85
88
|
|
|
86
|
-
|
|
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
|
-
\`\`\`
|
|
89
|
+
Ejemplo: \`0 9 15 * *\` con dom_and_dow=1 significa "los 15 de cada mes QUE SEA domingo"
|
|
96
90
|
|
|
97
|
-
##
|
|
91
|
+
## Workflow para Crear
|
|
98
92
|
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
93
|
+
1. **Preguntar** → ¿one_shot o recurring?
|
|
94
|
+
2. **Obtener** → Hora y canal de notificación
|
|
95
|
+
3. **Crear** → \`cron.create\` con campo \`task\` obligatorio
|
|
96
|
+
4. **Confirmar** → \`cron.list\` mostrar next runs
|
|
103
97
|
|
|
104
98
|
## Errores a Evitar
|
|
105
99
|
|
|
106
|
-
- ❌
|
|
107
|
-
- ❌
|
|
108
|
-
- ❌ No
|
|
109
|
-
- ❌ No
|
|
110
|
-
`,
|
|
100
|
+
- ❌ Olvidar el campo \`task\` — es obligatorio
|
|
101
|
+
- ❌ Usar exec para tareas programadas
|
|
102
|
+
- ❌ No preguntar si es one_shot o recurring
|
|
103
|
+
- ❌ No mostrar próximos horarios al crear
|
|
104
|
+
- ❌ Llamar \`cron.update\` sin \`task_id\` — siempre hacer \`cron.list\` primero`,
|
|
111
105
|
},
|
|
112
106
|
{
|
|
113
|
-
name: "
|
|
114
|
-
description: `
|
|
115
|
-
category: "
|
|
107
|
+
name: "browser_automate",
|
|
108
|
+
description: `Automate web workflows with navigation, clicks, form filling, and visual verification`,
|
|
109
|
+
category: "web",
|
|
116
110
|
version: "1.0.0",
|
|
117
|
-
tools: ["
|
|
118
|
-
triggers: ["
|
|
111
|
+
tools: ["browser_navigate","browser_click","browser_type","browser_screenshot"],
|
|
112
|
+
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"],
|
|
119
113
|
body: `
|
|
120
|
-
#
|
|
114
|
+
# Browser Automate Skill
|
|
121
115
|
|
|
122
116
|
## Cuándo se Activa
|
|
123
117
|
|
|
124
|
-
Esta skill se activa
|
|
118
|
+
Esta skill se activa para automatizar flujos de interacción con aplicaciones web: logins, formularios, navegación programática.
|
|
125
119
|
|
|
126
120
|
## Herramientas Disponibles
|
|
127
121
|
|
|
128
122
|
| Tool | Qué hace | Cuándo usarla |
|
|
129
123
|
|------|----------|---------------|
|
|
130
|
-
| \`
|
|
131
|
-
|
|
132
|
-
|
|
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 |
|
|
124
|
+
| \`browser_navigate\` | Navega a URL | Inicio de flujo |
|
|
125
|
+
| \`browser_click\` | Click en elementos | Botones, enlaces, triggers |
|
|
126
|
+
| \`browser_type\` | Escribe en inputs | Formularios, búsquedas |
|
|
127
|
+
| \`browser_screenshot\` | Captura estado | Verificación visual |
|
|
161
128
|
|
|
162
|
-
##
|
|
129
|
+
## Workflow Típico
|
|
163
130
|
|
|
164
|
-
|
|
165
|
-
|
|
131
|
+
1. **Navegar** → URL inicial
|
|
132
|
+
2. **Interactuar** → click/type según flujo
|
|
133
|
+
3. **Verificar** → screenshot después de acciones críticas
|
|
134
|
+
4. **Repetir** → para flujos multi-paso
|
|
166
135
|
|
|
167
136
|
## Mejores Prácticas
|
|
168
137
|
|
|
169
|
-
-
|
|
170
|
-
-
|
|
171
|
-
-
|
|
172
|
-
-
|
|
138
|
+
- Selectores estables (IDs > classes > XPath)
|
|
139
|
+
- Esperar carga después de navegación
|
|
140
|
+
- Verificar estado visual con screenshots
|
|
141
|
+
- Manejar errores de elementos no encontrados
|
|
173
142
|
|
|
174
143
|
## Errores a Evitar
|
|
175
144
|
|
|
176
|
-
- ❌
|
|
177
|
-
- ❌
|
|
178
|
-
- ❌
|
|
179
|
-
- ❌
|
|
145
|
+
- ❌ Selectores frágiles que cambian
|
|
146
|
+
- ❌ No esperar carga de página
|
|
147
|
+
- ❌ Ignorar errores de elementos
|
|
148
|
+
- ❌ No verificar estado después de acciones
|
|
180
149
|
`,
|
|
181
150
|
},
|
|
182
151
|
{
|
|
183
|
-
name: "
|
|
184
|
-
description: `
|
|
185
|
-
category: "
|
|
152
|
+
name: "web_research",
|
|
153
|
+
description: `Search and synthesize information from multiple web sources into structured reports`,
|
|
154
|
+
category: "web",
|
|
186
155
|
version: "1.0.0",
|
|
187
|
-
tools: ["
|
|
188
|
-
triggers: ["
|
|
156
|
+
tools: ["web_search","web_fetch"],
|
|
157
|
+
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"],
|
|
189
158
|
body: `
|
|
190
|
-
#
|
|
159
|
+
# Web Research Skill
|
|
191
160
|
|
|
192
161
|
## Cuándo se Activa
|
|
193
162
|
|
|
194
|
-
Esta skill se activa cuando el usuario necesita
|
|
163
|
+
Esta skill se activa cuando el usuario necesita información actualizada de internet, verificar datos, o investigar temas específicos.
|
|
195
164
|
|
|
196
165
|
## Herramientas Disponibles
|
|
197
166
|
|
|
198
167
|
| Tool | Qué hace | Cuándo usarla |
|
|
199
168
|
|------|----------|---------------|
|
|
200
|
-
| \`
|
|
169
|
+
| \`web_search\` | Busca en internet, devuelve títulos, URLs, snippets | Búsqueda inicial, encontrar fuentes |
|
|
170
|
+
| \`web_fetch\` | Descarga contenido completo de URL (HTML→Markdown) | Profundizar en resultados específicos |
|
|
201
171
|
|
|
202
172
|
## Workflow
|
|
203
173
|
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
// 2. Preprocesar
|
|
210
|
-
// - Expandir números: "5" → "cinco"
|
|
211
|
-
// - Expandir fechas: "01/01" → "primero de enero"
|
|
212
|
-
// - Expandir abbreviaturas: "Dr." → "Doctor"
|
|
174
|
+
1. **Búsqueda inicial** → \`web_search({ query, numResults: 8 })\`
|
|
175
|
+
2. **Fetch contenido** → \`web_fetch({ urls: top 2-3 })\`
|
|
176
|
+
3. **Búsqueda complementaria** → Segundo search si hay gaps
|
|
177
|
+
4. **Síntesis** → summary + key points + sources
|
|
213
178
|
|
|
214
|
-
|
|
215
|
-
const audio = voice_speak({
|
|
216
|
-
text: optimizedText,
|
|
217
|
-
voice_id: "eleven_flash_v2_5", // o configured voice
|
|
218
|
-
language: "es"
|
|
219
|
-
})
|
|
179
|
+
## Mejores Prácticas
|
|
220
180
|
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
181
|
+
- Queries específicos (máx 6 palabras)
|
|
182
|
+
- Mínimo 2-3 fuentes independientes
|
|
183
|
+
- Priorizar contenido reciente (<1 año)
|
|
184
|
+
- Citas con URLs completas
|
|
225
185
|
|
|
226
|
-
##
|
|
186
|
+
## Errores a Evitar
|
|
227
187
|
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
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)
|
|
188
|
+
- ❌ Inventar datos no encontrados
|
|
189
|
+
- ❌ Concluir con una sola búsqueda
|
|
190
|
+
- ❌ No verificar fecha de fuentes
|
|
191
|
+
- ❌ Copiar contenido literal (usar paráfrasis)
|
|
254
192
|
`,
|
|
255
193
|
},
|
|
256
194
|
{
|
|
257
|
-
name: "
|
|
258
|
-
description: `
|
|
259
|
-
category: "
|
|
195
|
+
name: "web_monitor",
|
|
196
|
+
description: `Monitor changes in web sources and track updates over time with persistent memory`,
|
|
197
|
+
category: "web",
|
|
260
198
|
version: "1.0.0",
|
|
261
|
-
tools: ["
|
|
262
|
-
triggers: ["
|
|
199
|
+
tools: ["web_search","web_fetch","memory_write","memory_read"],
|
|
200
|
+
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"],
|
|
263
201
|
body: `
|
|
264
|
-
#
|
|
202
|
+
# Web Monitor Skill
|
|
265
203
|
|
|
266
204
|
## Cuándo se Activa
|
|
267
205
|
|
|
268
|
-
|
|
206
|
+
Esta skill se activa cuando el usuario necesita:
|
|
207
|
+
- Monitorear cambios en una URL específica
|
|
208
|
+
- Recibir notificaciones de actualizaciones
|
|
209
|
+
- Seguir novedades sobre un tema
|
|
210
|
+
- Trackear evolución de contenido
|
|
269
211
|
|
|
270
212
|
## Herramientas Disponibles
|
|
271
213
|
|
|
272
214
|
| Tool | Qué hace | Cuándo usarla |
|
|
273
215
|
|------|----------|---------------|
|
|
274
|
-
| \`
|
|
275
|
-
| \`
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
**NUNCA usar para tareas programadas** — usar \`cron.create\` en su lugar.
|
|
216
|
+
| \`web_fetch\` | Descarga contenido de URL | Obtener contenido actual |
|
|
217
|
+
| \`web_search\` | Busca novedades | Monitoreo por tema (no URL fija) |
|
|
218
|
+
| \`memory_write\` | Guarda baseline | Almacenar contenido para comparación |
|
|
219
|
+
| \`memory_read\` | Recupera baseline anterior | Comparar con contenido actual |
|
|
280
220
|
|
|
281
221
|
## Workflow
|
|
282
222
|
|
|
283
|
-
1. **
|
|
284
|
-
2. **
|
|
285
|
-
3. **
|
|
286
|
-
4. **Manejar error** → Si falló, analizar y sugerir fixes
|
|
223
|
+
1. **Primera ejecución**: \`web_fetch\` → \`memory_write\` (baseline)
|
|
224
|
+
2. **Chequeos siguientes**: \`memory_read\` → \`web_fetch\` → comparar → \`notify\` si cambia
|
|
225
|
+
3. **Actualizar baseline**: \`memory_write\` con nuevo contenido
|
|
287
226
|
|
|
288
|
-
##
|
|
227
|
+
## Mejores Prácticas
|
|
289
228
|
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
| Git operations | 30s |
|
|
294
|
-
| npm install | 120s |
|
|
295
|
-
| npm run build | 120s |
|
|
296
|
-
| npm test | 180s |
|
|
297
|
-
| Docker builds | 300s |
|
|
229
|
+
- Ignorar cambios menores (timestamps, ads, contenido dinámico irrelevante)
|
|
230
|
+
- Notificar solo cambios significativos
|
|
231
|
+
- Para monitoreo periódico, combinar con \`cron.create\`
|
|
298
232
|
|
|
299
233
|
## Errores a Evitar
|
|
300
234
|
|
|
301
|
-
- ❌
|
|
302
|
-
- ❌
|
|
303
|
-
- ❌
|
|
304
|
-
- ❌ Comandos destructivos sin confirmar
|
|
235
|
+
- ❌ No almacenar baseline inicial
|
|
236
|
+
- ❌ Notificar por cambios triviales
|
|
237
|
+
- ❌ No actualizar timestamp de baseline
|
|
305
238
|
`,
|
|
306
239
|
},
|
|
307
240
|
{
|
|
308
|
-
name: "
|
|
309
|
-
description: `
|
|
310
|
-
category: "
|
|
241
|
+
name: "browser_scrape",
|
|
242
|
+
description: `Navigate to web pages and capture rendered content including screenshots for dynamic sites`,
|
|
243
|
+
category: "web",
|
|
311
244
|
version: "1.0.0",
|
|
312
|
-
tools: ["
|
|
313
|
-
triggers: ["
|
|
245
|
+
tools: ["browser_navigate","browser_screenshot","web_fetch"],
|
|
246
|
+
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"],
|
|
314
247
|
body: `
|
|
315
|
-
#
|
|
248
|
+
# Browser Scrape Skill
|
|
316
249
|
|
|
317
250
|
## Cuándo se Activa
|
|
318
251
|
|
|
319
|
-
|
|
252
|
+
Esta skill se activa para sitios web dinámicos que requieren JavaScript rendering, donde el contenido no está disponible en HTML estático.
|
|
320
253
|
|
|
321
254
|
## Herramientas Disponibles
|
|
322
255
|
|
|
323
256
|
| Tool | Qué hace | Cuándo usarla |
|
|
324
257
|
|------|----------|---------------|
|
|
325
|
-
| \`
|
|
326
|
-
| \`
|
|
327
|
-
| \`
|
|
258
|
+
| \`browser_navigate\` | Navega y renderiza página completa | Sitios con JavaScript/SPA |
|
|
259
|
+
| \`browser_screenshot\` | Captura estado visual | Evidencia de contenido renderizado |
|
|
260
|
+
| \`web_fetch\` | Extrae texto como markdown | Contenido textual de página renderizada |
|
|
328
261
|
|
|
329
262
|
## Workflow
|
|
330
263
|
|
|
331
|
-
1. **
|
|
332
|
-
2. **
|
|
333
|
-
3. **
|
|
334
|
-
4. **
|
|
264
|
+
1. **Navegar** → \`browser_navigate({ url })\` + esperar renderizado JS
|
|
265
|
+
2. **Capturar visual** → \`browser_screenshot()\`
|
|
266
|
+
3. **Extraer texto** → \`web_fetch()\`
|
|
267
|
+
4. **Combinar** → screenshot + texto para scrape completo
|
|
335
268
|
|
|
336
|
-
##
|
|
269
|
+
## Mejores Prácticas
|
|
337
270
|
|
|
338
|
-
|
|
339
|
-
|
|
271
|
+
- Esperar renderizado completo de JavaScript
|
|
272
|
+
- Para infinite scroll: hacer scroll y múltiples screenshots
|
|
273
|
+
- Capturar antes y después de interacciones si es dinámico
|
|
340
274
|
|
|
341
|
-
|
|
342
|
-
**Timestamp**: 2025-03-09 14:30:00
|
|
343
|
-
**Exit Code**: 0
|
|
344
|
-
**Execution Time**: 45.2s
|
|
275
|
+
## Errores a Evitar
|
|
345
276
|
|
|
346
|
-
|
|
277
|
+
- ❌ No esperar renderizado JavaScript
|
|
278
|
+
- ❌ Solo capturar HTML estático para sitios SPA
|
|
279
|
+
- ❌ Ignorar términos de servicio del sitio
|
|
280
|
+
`,
|
|
281
|
+
},
|
|
282
|
+
{
|
|
283
|
+
name: "busqueda_fts5",
|
|
284
|
+
description: `Core discovery skill - find any capability with a single keyword`,
|
|
285
|
+
category: "core",
|
|
286
|
+
version: "1.2.0",
|
|
287
|
+
tools: ["search_knowledge"],
|
|
288
|
+
triggers: ["cómo busco herramientas","cómo encuentro skills","how to find tools","search knowledge","discovery","buscar en la base","encontrar herramientas"],
|
|
289
|
+
body: `
|
|
290
|
+
# busqueda_fts5 — Sistema de Discovery
|
|
347
291
|
|
|
348
|
-
|
|
292
|
+
Arrancás con solo 4 herramientas. Todo lo demás se descubre con **search_knowledge**.
|
|
293
|
+
|
|
294
|
+
## Regla de oro: UNA PALABRA, busca TODO
|
|
349
295
|
|
|
350
|
-
|
|
351
|
-
|
|
296
|
+
\`\`\`
|
|
297
|
+
search_knowledge(query="email")
|
|
352
298
|
\`\`\`
|
|
353
299
|
|
|
354
|
-
|
|
300
|
+
Eso solo — sin type, sin frases largas — devuelve tools, skills, MCP y playbook relacionados con "email".
|
|
355
301
|
|
|
356
|
-
|
|
357
|
-
- Incluir metadata completa (exitCode, tiempo)
|
|
358
|
-
- Capturar stdout y stderr
|
|
359
|
-
- Para outputs grandes, escribir incrementalmente
|
|
302
|
+
**NO hagas esto:** \`search_knowledge(type="tools", query="enviar correo electrónico")\` — AND entre palabras no encuentra nada.
|
|
360
303
|
|
|
361
|
-
|
|
304
|
+
**SÍ hagas esto:** \`search_knowledge(query="email")\` — encuentra todo lo relacionado.
|
|
362
305
|
|
|
363
|
-
|
|
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
|
|
306
|
+
## Cuándo especificar type
|
|
377
307
|
|
|
378
|
-
|
|
308
|
+
Solo si querés filtrar resultados que ya son muchos:
|
|
379
309
|
|
|
380
|
-
|
|
310
|
+
\`\`\`
|
|
311
|
+
search_knowledge(query="email", type="mcp") → solo herramientas externas de email
|
|
312
|
+
search_knowledge(query="email", type="tools") → solo herramientas nativas de email
|
|
313
|
+
\`\`\`
|
|
381
314
|
|
|
382
|
-
|
|
315
|
+
Por defecto type="all" — no hace falta especificarlo.
|
|
383
316
|
|
|
384
|
-
|
|
385
|
-
|------|----------|
|
|
386
|
-
| \`cron.create\` | Crear recordatorio one_shot |
|
|
387
|
-
| \`notify\` | Enviar notificación directa |
|
|
317
|
+
## Regla de prioridad
|
|
388
318
|
|
|
389
|
-
|
|
319
|
+
**Preferí herramientas nativas sobre MCP** cuando ambas sirven.
|
|
320
|
+
- Nativas: más rápidas, sin red, siempre disponibles
|
|
321
|
+
- MCP: cuando no hay equivalente nativo
|
|
390
322
|
|
|
391
|
-
|
|
392
|
-
2. **Crear** → \`cron.create\` con \`task_type: 'one_shot'\` y \`fire_at\` en formato ISO
|
|
393
|
-
3. **Confirmar** → Mostrar hora programada
|
|
323
|
+
## Flujo de uso
|
|
394
324
|
|
|
395
|
-
|
|
325
|
+
1. Identificá la palabra clave de lo que necesitás
|
|
326
|
+
2. \`search_knowledge(query="<palabra>")\` → resultados de todos los tipos
|
|
327
|
+
3. Las tools encontradas se inyectan automáticamente en tu contexto
|
|
328
|
+
4. Usás las tools en el siguiente paso
|
|
396
329
|
|
|
397
|
-
|
|
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) |
|
|
330
|
+
---
|
|
403
331
|
|
|
404
|
-
##
|
|
332
|
+
## Ejemplos
|
|
405
333
|
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
334
|
+
\`\`\`
|
|
335
|
+
search_knowledge(query="pdf") → tools para leer/escribir PDFs
|
|
336
|
+
search_knowledge(query="browser") → tools de navegación web
|
|
337
|
+
search_knowledge(query="github") → tools MCP de GitHub si están configuradas
|
|
338
|
+
search_knowledge(query="calendar") → tools de Google Calendar
|
|
339
|
+
search_knowledge(query="canvas") → skills de visualización
|
|
340
|
+
search_knowledge(query="slack") → tools de Slack si están configuradas
|
|
341
|
+
\`\`\`
|
|
342
|
+
`,
|
|
409
343
|
},
|
|
410
344
|
{
|
|
411
|
-
name: "
|
|
412
|
-
description: `
|
|
413
|
-
category: "
|
|
345
|
+
name: "api_client",
|
|
346
|
+
description: `Make HTTP requests to REST APIs using curl-like methods (GET, POST, PUT, DELETE, PATCH, HEAD, OPTIONS)`,
|
|
347
|
+
category: "api",
|
|
414
348
|
version: "1.0.0",
|
|
415
|
-
tools: ["
|
|
416
|
-
triggers: ["
|
|
349
|
+
tools: ["api_request"],
|
|
350
|
+
triggers: ["llama a la api","llama al api","consume la api","haz una petición","haz un request","envía un post","envía un put","envía un delete","curl","api request","rest api","endpoint","webhook","integrar con api","conectar con api","obtener datos de api","enviar datos a api"],
|
|
417
351
|
body: `
|
|
418
|
-
#
|
|
352
|
+
# API Client Skill
|
|
419
353
|
|
|
420
354
|
## Cuándo se Activa
|
|
421
355
|
|
|
422
|
-
Esta skill se activa
|
|
356
|
+
Esta skill se activa cuando el usuario necesita interactuar con una API REST: consultar datos, crear recursos, actualizar, eliminar, o cualquier operación HTTP.
|
|
423
357
|
|
|
424
358
|
## Herramientas Disponibles
|
|
425
359
|
|
|
426
360
|
| Tool | Qué hace | Cuándo usarla |
|
|
427
361
|
|------|----------|---------------|
|
|
428
|
-
| \`
|
|
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 |
|
|
362
|
+
| \`api_request\` | Realiza peticiones HTTP completas (GET, POST, PUT, DELETE, PATCH, HEAD, OPTIONS) con headers, body, query params y timeout | Siempre que necesites llamar un endpoint REST, webhook, o servicio externo |
|
|
435
363
|
|
|
436
|
-
##
|
|
364
|
+
## Parámetros de api_request
|
|
437
365
|
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
366
|
+
- \`method\` (requerido): GET, POST, PUT, DELETE, PATCH, HEAD, OPTIONS
|
|
367
|
+
- \`url\` (requerido): URL completa del endpoint
|
|
368
|
+
- \`headers\` (opcional): objeto con headers HTTP. Ej: \`{ "Authorization": "Bearer TOKEN", "Content-Type": "application/json" }\`
|
|
369
|
+
- \`body\` (opcional): cuerpo de la petición como string. Para JSON, enviar JSON.stringify(objeto)
|
|
370
|
+
- \`query_params\` (opcional): parámetros de query que se codificarán automáticamente en la URL
|
|
371
|
+
- \`timeout_ms\` (opcional): timeout en ms. Default: 30000. Máx: 120000
|
|
443
372
|
|
|
444
|
-
|
|
445
|
-
→ meeting_add_segment(session_id, audio_base64)
|
|
446
|
-
→ notify: "[Speaker]: Texto transcrito..."
|
|
373
|
+
## Diferencia con web_fetch
|
|
447
374
|
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
→ Agente: "⏹️ 47 segmentos transcritos. ¿Genero el reporte?"
|
|
375
|
+
- \`web_fetch\`: solo GET, sin headers custom, ideal para scraping de páginas web
|
|
376
|
+
- \`api_request\`: cualquier método HTTP, headers custom, body, query params — ideal para APIs REST
|
|
451
377
|
|
|
452
|
-
|
|
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
|
-
\`\`\`
|
|
378
|
+
## Workflow
|
|
459
379
|
|
|
460
|
-
|
|
380
|
+
1. **Identificar endpoint y método** → Determinar URL, método, headers necesarios
|
|
381
|
+
2. **Construir request** → \`api_request({ method, url, headers, body })\`
|
|
382
|
+
3. **Validar respuesta** → Si 2xx: extraer datos. Si error: analizar y sugerir fix
|
|
383
|
+
4. **Presentar resultados** → JSON parseado en formato legible, no crudo a menos que se pida
|
|
461
384
|
|
|
462
|
-
|
|
385
|
+
## Mejores Prácticas
|
|
463
386
|
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
6. **Temas de Seguimiento** — Pendientes para futuras reuniones
|
|
387
|
+
- Siempre enviar \`Content-Type: application/json\` cuando el body es JSON
|
|
388
|
+
- Usar \`query_params\` en lugar de append manual a la URL
|
|
389
|
+
- No exponer tokens/secrets en la respuesta final al usuario
|
|
390
|
+
- Si la API requiere auth, pedirla al usuario o usar variables de entorno
|
|
391
|
+
- Para errores 4xx, revisar: auth, formato del body, campos requeridos, rate limits
|
|
470
392
|
|
|
471
|
-
##
|
|
393
|
+
## Errores a Evitar
|
|
472
394
|
|
|
473
|
-
-
|
|
474
|
-
-
|
|
475
|
-
-
|
|
476
|
-
-
|
|
395
|
+
- ❌ Usar web_fetch para POST/PUT/DELETE con headers
|
|
396
|
+
- ❌ Enviar objetos directamente en body (debe ser string)
|
|
397
|
+
- ❌ Olvidar Content-Type al enviar JSON
|
|
398
|
+
- ❌ Exponer API keys en la respuesta visible
|
|
477
399
|
`,
|
|
478
400
|
},
|
|
479
401
|
{
|
|
480
|
-
name: "
|
|
481
|
-
description: `
|
|
482
|
-
category: "
|
|
402
|
+
name: "file_manager",
|
|
403
|
+
description: `Explore project structure and locate files using glob patterns and directory listing`,
|
|
404
|
+
category: "filesystem",
|
|
483
405
|
version: "1.0.0",
|
|
484
|
-
tools: ["
|
|
485
|
-
triggers: ["
|
|
406
|
+
tools: ["fs_list","fs_glob","fs_exists"],
|
|
407
|
+
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"],
|
|
486
408
|
body: `
|
|
487
|
-
#
|
|
409
|
+
# File Manager Skill
|
|
488
410
|
|
|
489
411
|
## Cuándo se Activa
|
|
490
412
|
|
|
491
413
|
Esta skill se activa cuando el usuario necesita:
|
|
492
|
-
-
|
|
493
|
-
-
|
|
494
|
-
-
|
|
495
|
-
-
|
|
414
|
+
- Explorar la estructura del proyecto
|
|
415
|
+
- Buscar archivos por extensión o patrón
|
|
416
|
+
- Verificar si existe un archivo o directorio
|
|
417
|
+
- Encontrar la ubicación de un archivo
|
|
496
418
|
|
|
497
419
|
## Herramientas Disponibles
|
|
498
420
|
|
|
499
421
|
| Tool | Qué hace | Cuándo usarla |
|
|
500
422
|
|------|----------|---------------|
|
|
501
|
-
| \`
|
|
502
|
-
| \`
|
|
503
|
-
| \`
|
|
504
|
-
| \`memory_read\` | Recupera baseline anterior | Comparar con contenido actual |
|
|
423
|
+
| \`fs_list\` | Lista directorios y archivos | Exploración inicial |
|
|
424
|
+
| \`fs_glob\` | Busca archivos por patrón wildcard | Búsqueda por extensión/patrón |
|
|
425
|
+
| \`fs_exists\` | Verifica existencia | Pre-check antes de operaciones |
|
|
505
426
|
|
|
506
427
|
## Workflow
|
|
507
428
|
|
|
508
|
-
1. **
|
|
509
|
-
2. **
|
|
510
|
-
3. **
|
|
429
|
+
1. **Explorar** → \`fs_list({ path })\` para estructura general
|
|
430
|
+
2. **Buscar por patrón** → \`fs_glob({ pattern })\` para tipos específicos
|
|
431
|
+
3. **Verificar** → \`fs_exists({ path })\` para confirmación
|
|
511
432
|
|
|
512
|
-
##
|
|
433
|
+
## Patrones Glob Comunes
|
|
513
434
|
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
435
|
+
| Patrón | Encuentra |
|
|
436
|
+
|--------|-----------|
|
|
437
|
+
| \`**/*.ts\` | Todos los TypeScript |
|
|
438
|
+
| \`**/*.test.ts\` | Solo tests |
|
|
439
|
+
| \`**/*.md\` | Documentación |
|
|
440
|
+
| \`**/package.json\` | Todos los package.json |
|
|
441
|
+
| \`src/**/*.tsx\` | React components en src |
|
|
517
442
|
|
|
518
443
|
## Errores a Evitar
|
|
519
444
|
|
|
520
|
-
- ❌ No
|
|
521
|
-
- ❌
|
|
522
|
-
- ❌
|
|
445
|
+
- ❌ No verificar existencia antes de leer/editar
|
|
446
|
+
- ❌ Usar fs_list cuando se conoce el patrón (usar glob)
|
|
447
|
+
- ❌ Patrones muy amplios sin filtrado
|
|
523
448
|
`,
|
|
524
449
|
},
|
|
525
450
|
{
|
|
526
|
-
name: "
|
|
527
|
-
description: `
|
|
528
|
-
category: "
|
|
451
|
+
name: "file_writer",
|
|
452
|
+
description: `Create, modify, and delete files with safe edit operations and confirmation for large changes`,
|
|
453
|
+
category: "filesystem",
|
|
529
454
|
version: "1.0.0",
|
|
530
|
-
tools: ["
|
|
531
|
-
triggers: ["
|
|
455
|
+
tools: ["project_read","project_write","project_edit","project_exists"],
|
|
456
|
+
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"],
|
|
532
457
|
body: `
|
|
533
|
-
#
|
|
458
|
+
# File Writer Skill
|
|
534
459
|
|
|
535
460
|
## Cuándo se Activa
|
|
536
461
|
|
|
537
|
-
Esta skill se activa cuando el usuario necesita
|
|
462
|
+
Esta skill se activa cuando el usuario necesita:
|
|
463
|
+
- Crear nuevos archivos
|
|
464
|
+
- Modificar contenido existente
|
|
465
|
+
- Eliminar archivos
|
|
466
|
+
- Guardar cambios
|
|
538
467
|
|
|
539
468
|
## Herramientas Disponibles
|
|
540
469
|
|
|
541
470
|
| Tool | Qué hace | Cuándo usarla |
|
|
542
471
|
|------|----------|---------------|
|
|
543
|
-
| \`
|
|
544
|
-
| \`
|
|
472
|
+
| \`project_read\` | Lee archivo existente | Antes de editar para entender estructura |
|
|
473
|
+
| \`project_write\` | Crea o sobreescribe archivo | Archivos nuevos o reescritura completa |
|
|
474
|
+
| \`project_edit\` | Edita secciones específicas | Cambios puntuales (find/replace) |
|
|
475
|
+
| \`project_exists\` | Verifica existencia | Para decidir crear vs editar |
|
|
545
476
|
|
|
546
477
|
## Workflow
|
|
547
478
|
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
479
|
+
### Crear Archivo Nuevo
|
|
480
|
+
1. \`project_exists({ path })\` → verificar no existe
|
|
481
|
+
2. \`project_write({ path, content })\` → crear
|
|
482
|
+
|
|
483
|
+
### Editar Archivo Existente
|
|
484
|
+
1. \`project_exists({ path })\` → verificar existe
|
|
485
|
+
2. \`project_read({ path })\` → entender estructura
|
|
486
|
+
3. \`project_edit({ path, old_string, new_string })\` → modificar
|
|
487
|
+
4. \`canvas_confirm()\` si cambios >50 líneas
|
|
488
|
+
|
|
489
|
+
### Eliminar Archivo
|
|
490
|
+
1. \`project_exists({ path })\` → verificar existe
|
|
491
|
+
2. \`canvas_confirm({ message: '¿Eliminar archivo?' })\` → confirmar
|
|
492
|
+
3. Operación de delete
|
|
552
493
|
|
|
553
494
|
## Mejores Prácticas
|
|
554
495
|
|
|
555
|
-
-
|
|
556
|
-
-
|
|
557
|
-
-
|
|
558
|
-
-
|
|
496
|
+
- **Leer antes de editar**: Nunca modificar sin entender estructura
|
|
497
|
+
- **Edit vs Write**: Usar edit para cambios pequeños, write para nuevos archivos
|
|
498
|
+
- **Confirmar cambios grandes**: >50 líneas requiere confirmación explícita
|
|
499
|
+
- **Paths seguros**: Trabajar dentro del workspace por defecto
|
|
559
500
|
|
|
560
501
|
## Errores a Evitar
|
|
561
502
|
|
|
562
|
-
- ❌
|
|
563
|
-
- ❌
|
|
564
|
-
- ❌
|
|
565
|
-
- ❌
|
|
503
|
+
- ❌ Editar sin leer primero
|
|
504
|
+
- ❌ Sobreescribir sin confirmar si es cambio grande
|
|
505
|
+
- ❌ Eliminar sin confirmación explícita
|
|
506
|
+
- ❌ Usar write cuando edit es suficiente
|
|
566
507
|
`,
|
|
567
508
|
},
|
|
568
509
|
{
|
|
569
|
-
name: "
|
|
570
|
-
description: `
|
|
571
|
-
category: "
|
|
510
|
+
name: "file_read_and_summarize",
|
|
511
|
+
description: `Read and understand file content with automatic summarization for large files`,
|
|
512
|
+
category: "filesystem",
|
|
572
513
|
version: "1.0.0",
|
|
573
|
-
tools: ["
|
|
574
|
-
triggers: ["
|
|
514
|
+
tools: ["project_read"],
|
|
515
|
+
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"],
|
|
575
516
|
body: `
|
|
576
|
-
#
|
|
517
|
+
# File Read and Summarize Skill
|
|
577
518
|
|
|
578
519
|
## Cuándo se Activa
|
|
579
520
|
|
|
580
|
-
Esta skill se activa
|
|
521
|
+
Esta skill se activa cuando el usuario necesita leer y entender el contenido de un archivo, especialmente cuando:
|
|
522
|
+
- El archivo es grande y necesita resumen
|
|
523
|
+
- Se requiere comprensión del contenido (no solo lectura)
|
|
524
|
+
- El usuario pide "qué dice", "resumí", "entendé"
|
|
581
525
|
|
|
582
526
|
## Herramientas Disponibles
|
|
583
527
|
|
|
584
528
|
| Tool | Qué hace | Cuándo usarla |
|
|
585
529
|
|------|----------|---------------|
|
|
586
|
-
| \`
|
|
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 |
|
|
530
|
+
| \`project_read\` | Lee contenido de archivo del workspace | Lectura de cualquier archivo |
|
|
590
531
|
|
|
591
|
-
## Workflow
|
|
532
|
+
## Workflow
|
|
592
533
|
|
|
593
|
-
1. **
|
|
594
|
-
2. **
|
|
595
|
-
3. **
|
|
596
|
-
4. **Repetir** → para flujos multi-paso
|
|
534
|
+
1. **Verificar existencia** → \`project_exists({ path })\`
|
|
535
|
+
2. **Leer contenido** → \`project_read({ path, offset, limit })\`
|
|
536
|
+
3. **Sintetizar** → Resumir si es grande, extraer puntos clave
|
|
597
537
|
|
|
598
538
|
## Mejores Prácticas
|
|
599
539
|
|
|
600
|
-
-
|
|
601
|
-
-
|
|
602
|
-
-
|
|
603
|
-
-
|
|
540
|
+
- Para archivos >1000 líneas, usar \`offset\` y \`limit\`
|
|
541
|
+
- Identificar tipo de archivo por extensión y adaptar formato de resumen
|
|
542
|
+
- Para código: identificar funciones, clases, exports principales
|
|
543
|
+
- Para config: explicar settings clave en lenguaje simple
|
|
544
|
+
- Para texto: extraer ideas principales
|
|
604
545
|
|
|
605
546
|
## Errores a Evitar
|
|
606
547
|
|
|
607
|
-
- ❌
|
|
608
|
-
- ❌
|
|
609
|
-
- ❌
|
|
610
|
-
- ❌ No verificar estado después de acciones
|
|
548
|
+
- ❌ Leer sin verificar existencia
|
|
549
|
+
- ❌ Retornar archivo completo sin resumir si es muy grande
|
|
550
|
+
- ❌ No identificar tipo de archivo para adaptar resumen
|
|
611
551
|
`,
|
|
612
552
|
},
|
|
613
553
|
{
|
|
614
|
-
name: "
|
|
615
|
-
description: `
|
|
616
|
-
category: "
|
|
554
|
+
name: "office_document_manager",
|
|
555
|
+
description: `Leer, crear y manipular archivos Office (PDF, Word, Excel, PowerPoint) desde el workspace`,
|
|
556
|
+
category: "office",
|
|
617
557
|
version: "1.0.0",
|
|
618
|
-
tools: ["
|
|
619
|
-
triggers: ["
|
|
558
|
+
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"],
|
|
559
|
+
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"],
|
|
620
560
|
body: `
|
|
621
|
-
#
|
|
561
|
+
# Office Document Manager Skill
|
|
622
562
|
|
|
623
563
|
## Cuándo se Activa
|
|
624
564
|
|
|
625
|
-
Esta skill se activa
|
|
565
|
+
Esta skill se activa cuando el usuario necesita:
|
|
566
|
+
- **Leer** archivos PDF, Word (.docx), Excel (.xlsx) o PowerPoint (.pptx)
|
|
567
|
+
- **Generar** nuevos archivos en cualquiera de esos formatos
|
|
568
|
+
- **Convertir** contenido entre formatos (ej: texto → PDF, JSON → Excel)
|
|
569
|
+
- **Extraer** datos estructurados de documentos (tablas de Excel, slides de presentación)
|
|
626
570
|
|
|
627
571
|
## Herramientas Disponibles
|
|
628
572
|
|
|
629
573
|
| Tool | Qué hace | Cuándo usarla |
|
|
630
574
|
|------|----------|---------------|
|
|
631
|
-
| \`
|
|
632
|
-
| \`
|
|
633
|
-
| \`
|
|
575
|
+
| \`office_leer_pdf\` | Extrae texto + metadata de PDF | Leer informes, contratos, libros en PDF |
|
|
576
|
+
| \`office_escribir_pdf\` | Genera PDF desde texto | Crear reportes, resúmenes, documentación |
|
|
577
|
+
| \`office_leer_docx\` | Extrae texto y tablas de Word | Leer documentos, contratos, informes Word |
|
|
578
|
+
| \`office_escribir_docx\` | Genera Word con estructura | Crear documentos formales con títulos/tablas |
|
|
579
|
+
| \`office_leer_xlsx\` | Lee hojas de Excel como JSON | Procesar datos, tablas, inventarios |
|
|
580
|
+
| \`office_escribir_xlsx\` | Genera Excel desde JSON | Exportar datos, crear reportes tabulares |
|
|
581
|
+
| \`office_leer_pptx\` | Extrae texto de cada slide | Resumir presentaciones, extraer contenido |
|
|
582
|
+
| \`office_escribir_pptx\` | Genera presentación PowerPoint | Crear slides desde datos o resúmenes |
|
|
634
583
|
|
|
635
|
-
## Workflow
|
|
584
|
+
## Workflow por Caso de Uso
|
|
636
585
|
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
586
|
+
### Leer y resumir un documento
|
|
587
|
+
1. \`office_leer_pdf/docx/xlsx/pptx\` → extraer contenido
|
|
588
|
+
2. Procesar y resumir el texto
|
|
589
|
+
3. \`notify\` → enviar resumen al usuario
|
|
641
590
|
|
|
642
|
-
|
|
591
|
+
### Transformar datos a Excel
|
|
592
|
+
1. Obtener datos (de memoria, herramienta o cálculo)
|
|
593
|
+
2. Estructurar en \`hojas\` con \`datos\` como array de objetos
|
|
594
|
+
3. \`office_escribir_xlsx\` → generar archivo
|
|
595
|
+
4. Confirmar ruta al usuario
|
|
643
596
|
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
597
|
+
### Crear un informe PDF
|
|
598
|
+
1. Compilar el contenido del informe como texto
|
|
599
|
+
2. \`office_escribir_pdf\` → generar con título y márgenes
|
|
600
|
+
3. Confirmar que el archivo quedó en la ruta esperada
|
|
647
601
|
|
|
648
|
-
|
|
602
|
+
### Generar una presentación
|
|
603
|
+
1. Definir estructura: título + array de slides (título + puntos)
|
|
604
|
+
2. \`office_escribir_pptx\` → generar .pptx
|
|
605
|
+
3. Opcional: incluir notas del presentador en cada slide
|
|
649
606
|
|
|
650
|
-
|
|
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
|
|
607
|
+
## Parámetros Clave
|
|
664
608
|
|
|
665
|
-
|
|
609
|
+
### \`parrafos\` para DOCX
|
|
610
|
+
\`\`\`json
|
|
611
|
+
[
|
|
612
|
+
{ "texto": "Capítulo 1", "tipo": "titulo1" },
|
|
613
|
+
{ "texto": "Subtítulo", "tipo": "titulo2" },
|
|
614
|
+
{ "texto": "Contenido normal", "tipo": "parrafo" },
|
|
615
|
+
{ "texto": "Ítem de lista", "tipo": "lista" },
|
|
616
|
+
{ "texto": "Texto importante", "tipo": "parrafo", "negrita": true }
|
|
617
|
+
]
|
|
618
|
+
\`\`\`
|
|
666
619
|
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
|
|
620
|
+
### \`hojas\` para XLSX
|
|
621
|
+
\`\`\`json
|
|
622
|
+
[
|
|
623
|
+
{
|
|
624
|
+
"nombre": "Ventas",
|
|
625
|
+
"datos": [
|
|
626
|
+
{ "Mes": "Enero", "Total": 5000 },
|
|
627
|
+
{ "Mes": "Febrero", "Total": 6200 }
|
|
628
|
+
]
|
|
629
|
+
}
|
|
630
|
+
]
|
|
631
|
+
\`\`\`
|
|
632
|
+
|
|
633
|
+
### \`diapositivas\` para PPTX
|
|
634
|
+
\`\`\`json
|
|
635
|
+
[
|
|
636
|
+
{
|
|
637
|
+
"titulo": "¿Qué es Machine Learning?",
|
|
638
|
+
"puntos": ["Subcampo de IA", "Aprende de datos", "Hace predicciones"],
|
|
639
|
+
"notas": "Mencionar el enfoque supervisado y no supervisado"
|
|
640
|
+
}
|
|
641
|
+
]
|
|
642
|
+
\`\`\`
|
|
643
|
+
|
|
644
|
+
## Errores a Evitar
|
|
645
|
+
|
|
646
|
+
- ❌ Intentar leer un archivo que no existe (verifica con \`fs_exists\` primero)
|
|
647
|
+
- ❌ Sobrescribir sin confirmar cuando el archivo destino ya existe
|
|
648
|
+
- ❌ Usar \`contenido\` y \`puntos\` a la vez en PPTX — \`puntos\` tiene prioridad
|
|
649
|
+
- ❌ Pasar un array de arrays como \`datos\` de XLSX cuando se esperan objetos con claves
|
|
650
|
+
- ❌ Intentar leer PDF de más de 100 páginas sin especificar rango (usar \`pagina_inicio\`/\`pagina_fin\`)
|
|
651
|
+
`,
|
|
652
|
+
},
|
|
653
|
+
{
|
|
654
|
+
name: "cron_reminder",
|
|
655
|
+
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.`,
|
|
656
|
+
category: "cron",
|
|
657
|
+
version: "2.0.0",
|
|
658
|
+
tools: ["cron.create","notify"],
|
|
659
|
+
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"],
|
|
660
|
+
body: `
|
|
661
|
+
# Cron Reminder Skill
|
|
662
|
+
|
|
663
|
+
## Cuándo se Activa
|
|
664
|
+
|
|
665
|
+
Para crear recordatorios de una sola ejecución (one_shot): "recuerdame a las 3pm", "avísame en 30 minutos", etc.
|
|
666
|
+
|
|
667
|
+
## Herramientas
|
|
668
|
+
|
|
669
|
+
| Tool | Qué hace |
|
|
670
|
+
|------|----------|
|
|
671
|
+
| \`cron.create\` | Crear recordatorio one_shot |
|
|
672
|
+
| \`notify\` | Enviar notificación directa |
|
|
673
|
+
|
|
674
|
+
## Cómo Funciona
|
|
675
|
+
|
|
676
|
+
1. **Preguntar** → ¿De qué te aviso? ¿A qué hora? ¿Por qué canal?
|
|
677
|
+
2. **Crear** → \`cron.create\` con \`task_type: 'one_shot'\` y \`fire_at\` en formato ISO
|
|
678
|
+
3. **Confirmar** → Mostrar hora programada
|
|
679
|
+
|
|
680
|
+
## Parámetros
|
|
681
|
+
|
|
682
|
+
| Campo | Descripción |
|
|
683
|
+
|-------|-------------|
|
|
684
|
+
| \`task\` | **REQUERIDO** - Mensaje del recordatorio |
|
|
685
|
+
| \`task_type\` | Siempre \`'one_shot'\` |
|
|
686
|
+
| \`fire_at\` | Fecha/hora ISO (ej: \`'2026-04-20T15:00:00'\`) |
|
|
687
|
+
| \`channel\` | Canal (telegram, discord, whatsapp, webchat) |
|
|
688
|
+
|
|
689
|
+
## Errores Comunes
|
|
690
|
+
|
|
691
|
+
- ❌ Olvidar el campo \`task\` — obligatorio para que el agente sepa qué enviar
|
|
692
|
+
- ❌ Usar expresiones cron para recordatorios (usar \`fire_at\` en vez de \`cron_expression\`)
|
|
693
|
+
- ❌ Poner \`fire_at\` en el pasado`,
|
|
694
|
+
},
|
|
695
|
+
{
|
|
696
|
+
name: "canvas_dashboard",
|
|
697
|
+
description: `Real-time visual dashboard for monitoring task status, progress, and system state`,
|
|
698
|
+
category: "canvas",
|
|
699
|
+
version: "1.0.0",
|
|
700
|
+
tools: ["canvas_render","canvas_show_progress","canvas_clear"],
|
|
701
|
+
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"],
|
|
702
|
+
body: `
|
|
703
|
+
# Canvas Dashboard Skill
|
|
704
|
+
|
|
705
|
+
## Cuándo se Activa
|
|
706
|
+
|
|
707
|
+
Para mostrar dashboards visuales de monitoreo en tiempo real de tareas, proyectos, o estado del sistema.
|
|
708
|
+
|
|
709
|
+
## Herramientas Disponibles
|
|
710
|
+
|
|
711
|
+
| Tool | Qué hace | Cuándo usarla |
|
|
712
|
+
|------|----------|---------------|
|
|
713
|
+
| \`canvas_render\` | Renderiza componentes | Layout del dashboard |
|
|
714
|
+
| \`canvas_show_progress\` | Barras de progreso | Estado de tasks |
|
|
715
|
+
| \`canvas_clear\` | Limpia canvas | Antes de nuevo dashboard |
|
|
716
|
+
|
|
717
|
+
## Workflow
|
|
718
|
+
|
|
719
|
+
1. **Clear** → \`canvas_clear()\` — limpiar previo
|
|
720
|
+
2. **Render layout** → \`canvas_render({ sections })\`
|
|
721
|
+
3. **Update progress** → \`canvas_show_progress()\` en tiempo real
|
|
722
|
+
4. **Refresh** → \`canvas_render({ updates })\` para cambios
|
|
723
|
+
|
|
724
|
+
## Estructura de Dashboard
|
|
725
|
+
|
|
726
|
+
\`\`\`javascript
|
|
727
|
+
canvas_render({
|
|
728
|
+
component: {
|
|
729
|
+
id: "dashboard-main",
|
|
730
|
+
type: "markdown",
|
|
731
|
+
props: { content: "## Dashboard\\n..." },
|
|
732
|
+
span: "full" // ← ancho completo del canvas
|
|
733
|
+
}
|
|
734
|
+
})
|
|
735
|
+
|
|
736
|
+
// O con tarjetas individuales:
|
|
737
|
+
canvas_show_card({ title: "Métricas", span: "full", items: [...] })
|
|
738
|
+
canvas_show_progress({ tasks: [...], span: "full" })
|
|
739
|
+
\`\`\`
|
|
740
|
+
|
|
741
|
+
## Color Coding
|
|
742
|
+
|
|
743
|
+
| Color | Estado |
|
|
744
|
+
|-------|--------|
|
|
745
|
+
| 🟢 Verde | Complete |
|
|
746
|
+
| 🔵 Azul | In Progress |
|
|
747
|
+
| 🔴 Rojo | Error/Blocked |
|
|
748
|
+
| 🟡 Amarillo | Pending |
|
|
749
|
+
|
|
750
|
+
## Mejores Prácticas
|
|
751
|
+
|
|
752
|
+
- Clear antes de renderizar nuevo dashboard
|
|
753
|
+
- Layout consistente (header, progress, status, metrics)
|
|
754
|
+
- Update en tiempo real con progreso
|
|
755
|
+
- Solo información crítica (no sobrecargar)
|
|
756
|
+
|
|
757
|
+
## Errores a Evitar
|
|
758
|
+
|
|
759
|
+
- ❌ No clear entre dashboards (clutter)
|
|
760
|
+
- ❌ Demasiada información (sobrecarga visual)
|
|
761
|
+
- ❌ No actualizar en tiempo real
|
|
762
|
+
- ❌ Sin color coding para estados
|
|
763
|
+
`,
|
|
764
|
+
},
|
|
765
|
+
{
|
|
766
|
+
name: "a2ui_interactive",
|
|
767
|
+
description: `Create multi-step interactive workflows using A2UI v0.9 protocol with tabs, modals, choice pickers, and dynamic updates based on user actions`,
|
|
768
|
+
category: "canvas",
|
|
769
|
+
version: "1.0.0",
|
|
770
|
+
tools: ["a2ui_create_surface","a2ui_update_components","a2ui_update_data_model","a2ui_delete_surface"],
|
|
771
|
+
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"],
|
|
772
|
+
body: `
|
|
773
|
+
# A2UI Interactive Skill
|
|
774
|
+
|
|
775
|
+
## Cuándo se Activa
|
|
776
|
+
|
|
777
|
+
Para crear flujos interactivos multi-paso usando A2UI v0.9. Usar cuando se necesita:
|
|
778
|
+
- Wizards paso a paso
|
|
779
|
+
- Flujos de onboarding
|
|
780
|
+
- Asistentes de reserva/configuración
|
|
781
|
+
- Formularios con selections dinámicas
|
|
782
|
+
- Interacciones con modales de confirmación
|
|
673
783
|
- UIs que cambian según las acciones del usuario
|
|
674
784
|
|
|
675
785
|
## Herramientes Disponibles
|
|
@@ -760,193 +870,76 @@ Para crear flujos interactivos multi-paso usando A2UI v0.9. Usar cuando se neces
|
|
|
760
870
|
- Eliminar surfaces con \`a2ui_delete_surface\` al completar o cancelar`,
|
|
761
871
|
},
|
|
762
872
|
{
|
|
763
|
-
name: "
|
|
764
|
-
description: `
|
|
873
|
+
name: "canvas_interact",
|
|
874
|
+
description: `Collect user input and confirmations through interactive forms and dialogs`,
|
|
765
875
|
category: "canvas",
|
|
766
876
|
version: "1.0.0",
|
|
767
|
-
tools: ["
|
|
768
|
-
triggers: ["
|
|
877
|
+
tools: ["canvas_ask","canvas_confirm"],
|
|
878
|
+
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"],
|
|
769
879
|
body: `
|
|
770
|
-
#
|
|
880
|
+
# Canvas Interact Skill
|
|
771
881
|
|
|
772
882
|
## Cuándo se Activa
|
|
773
883
|
|
|
774
|
-
Para
|
|
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
|
|
884
|
+
Para recoger input del usuario mediante formularios interactivos o confirmaciones.
|
|
780
885
|
|
|
781
886
|
## Herramientas Disponibles
|
|
782
887
|
|
|
783
888
|
| Tool | Qué hace | Cuándo usarla |
|
|
784
889
|
|------|----------|---------------|
|
|
785
|
-
| \`
|
|
786
|
-
| \`
|
|
787
|
-
| \`a2ui_update_data_model\` | Actualiza datos | Para valores iniciales o dinámicos |
|
|
788
|
-
| \`a2ui_delete_surface\` | Elimina la superficie | Al terminar |
|
|
890
|
+
| \`canvas_ask\` | Muestra formulario | Input multi-campo |
|
|
891
|
+
| \`canvas_confirm\` | Diálogo confirmación | Yes/No decisions |
|
|
789
892
|
|
|
790
|
-
##
|
|
893
|
+
## Workflow
|
|
791
894
|
|
|
895
|
+
### Confirmación Simple
|
|
896
|
+
\`\`\`javascript
|
|
897
|
+
canvas_confirm({
|
|
898
|
+
message: "¿Eliminar archivo?",
|
|
899
|
+
confirmLabel: "Sí, eliminar",
|
|
900
|
+
cancelLabel: "Cancelar"
|
|
901
|
+
})
|
|
792
902
|
\`\`\`
|
|
793
|
-
|
|
794
|
-
|
|
795
|
-
|
|
796
|
-
|
|
797
|
-
|
|
903
|
+
|
|
904
|
+
### Formulario Complejo
|
|
905
|
+
\`\`\`javascript
|
|
906
|
+
canvas_ask({
|
|
907
|
+
title: "User Registration",
|
|
908
|
+
fields: [
|
|
909
|
+
{ name: "email", label: "Email", type: "email", required: true },
|
|
910
|
+
{ name: "password", label: "Password", type: "password", required: true },
|
|
911
|
+
{
|
|
912
|
+
name: "role",
|
|
913
|
+
label: "Role",
|
|
914
|
+
type: "select",
|
|
915
|
+
options: [
|
|
916
|
+
{ label: "Admin", value: "admin" },
|
|
917
|
+
{ label: "User", value: "user" }
|
|
918
|
+
]
|
|
919
|
+
}
|
|
920
|
+
]
|
|
921
|
+
})
|
|
798
922
|
\`\`\`
|
|
799
923
|
|
|
800
|
-
##
|
|
924
|
+
## Tipos de Campo
|
|
801
925
|
|
|
802
|
-
|
|
|
803
|
-
|
|
804
|
-
| \`
|
|
805
|
-
| \`
|
|
806
|
-
| \`
|
|
807
|
-
| \`
|
|
808
|
-
| \`
|
|
809
|
-
| \`
|
|
810
|
-
| \`
|
|
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\` |
|
|
926
|
+
| Type | Uso |
|
|
927
|
+
|------|-----|
|
|
928
|
+
| \`text\` | Texto libre |
|
|
929
|
+
| \`email\` | Email con validación |
|
|
930
|
+
| \`password\` | Contraseña (oculto) |
|
|
931
|
+
| \`number\` | Números |
|
|
932
|
+
| \`select\` | Dropdown con opciones |
|
|
933
|
+
| \`checkbox\` | Booleano |
|
|
934
|
+
| \`textarea\` | Texto multilínea |
|
|
817
935
|
|
|
818
|
-
##
|
|
936
|
+
## Mejores Prácticas
|
|
819
937
|
|
|
820
|
-
-
|
|
821
|
-
-
|
|
822
|
-
-
|
|
823
|
-
|
|
824
|
-
|
|
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
|
|
938
|
+
- Labels claros y descriptivos
|
|
939
|
+
- Placeholders con ejemplos
|
|
940
|
+
- Marcar required explícitamente
|
|
941
|
+
- Validar tipos (email, number)
|
|
942
|
+
- Manejar cancel gracefully
|
|
950
943
|
|
|
951
944
|
## Errores a Evitar
|
|
952
945
|
|
|
@@ -1035,96 +1028,143 @@ canvas_show_progress({
|
|
|
1035
1028
|
`,
|
|
1036
1029
|
},
|
|
1037
1030
|
{
|
|
1038
|
-
name: "
|
|
1039
|
-
description: `
|
|
1031
|
+
name: "a2ui_form",
|
|
1032
|
+
description: `Create rich interactive forms using A2UI v0.9 protocol with validation, data binding, and multi-step flows`,
|
|
1040
1033
|
category: "canvas",
|
|
1041
1034
|
version: "1.0.0",
|
|
1042
|
-
tools: ["
|
|
1043
|
-
triggers: ["
|
|
1035
|
+
tools: ["a2ui_create_surface","a2ui_update_components","a2ui_update_data_model","a2ui_delete_surface"],
|
|
1036
|
+
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"],
|
|
1044
1037
|
body: `
|
|
1045
|
-
#
|
|
1038
|
+
# A2UI Form Skill
|
|
1046
1039
|
|
|
1047
1040
|
## Cuándo se Activa
|
|
1048
1041
|
|
|
1049
|
-
Para
|
|
1042
|
+
Para crear formularios interactivos ricos usando el protocolo A2UI v0.9. Usar cuando se necesita:
|
|
1043
|
+
- Validación de campos (required, email, regex)
|
|
1044
|
+
- Data binding dinámico
|
|
1045
|
+
- Formularios multi-paso
|
|
1046
|
+
- Choice pickers, sliders, checkboxes
|
|
1047
|
+
- Formularios con acciones personalizadas
|
|
1050
1048
|
|
|
1051
1049
|
## Herramientas Disponibles
|
|
1052
1050
|
|
|
1053
1051
|
| Tool | Qué hace | Cuándo usarla |
|
|
1054
1052
|
|------|----------|---------------|
|
|
1055
|
-
| \`
|
|
1056
|
-
| \`
|
|
1057
|
-
| \`
|
|
1053
|
+
| \`a2ui_create_surface\` | Crea la superficie A2UI | Siempre primero |
|
|
1054
|
+
| \`a2ui_update_components\` | Envía componentes | Después de crear surface |
|
|
1055
|
+
| \`a2ui_update_data_model\` | Actualiza datos | Para valores iniciales o dinámicos |
|
|
1056
|
+
| \`a2ui_delete_surface\` | Elimina la superficie | Al terminar |
|
|
1058
1057
|
|
|
1059
|
-
##
|
|
1058
|
+
## Flujo Obligatorio
|
|
1060
1059
|
|
|
1061
|
-
|
|
1062
|
-
|
|
1063
|
-
|
|
1064
|
-
|
|
1060
|
+
\`\`\`
|
|
1061
|
+
1. a2ui_create_surface(surfaceId, catalogId, theme)
|
|
1062
|
+
2. a2ui_update_components(surfaceId, components[])
|
|
1063
|
+
3. a2ui_update_data_model(surfaceId, path, value) // opcional, para datos iniciales
|
|
1064
|
+
4. [esperar acción del usuario]
|
|
1065
|
+
5. a2ui_delete_surface(surfaceId) // al terminar
|
|
1066
|
+
\`\`\`
|
|
1065
1067
|
|
|
1066
|
-
##
|
|
1068
|
+
## Componentes Disponibles
|
|
1067
1069
|
|
|
1068
|
-
|
|
1069
|
-
|
|
1070
|
-
|
|
1071
|
-
|
|
1072
|
-
|
|
1073
|
-
|
|
1074
|
-
|
|
1075
|
-
|
|
1076
|
-
|
|
1070
|
+
| Componente | Descripción | Props clave |
|
|
1071
|
+
|------------|-------------|-------------|
|
|
1072
|
+
| \`Column\` | Layout vertical | \`children\`, \`distribution\`, \`alignment\` |
|
|
1073
|
+
| \`Row\` | Layout horizontal | \`children\`, \`distribution\`, \`alignment\` |
|
|
1074
|
+
| \`Text\` | Texto | \`text\`, \`usageHint\` (h1-h5, body, caption, code) |
|
|
1075
|
+
| \`Button\` | Botón | \`child\`, \`variant\`, \`action\` |
|
|
1076
|
+
| \`TextField\` | Campo de texto | \`label\`, \`value\`, \`variant\` (shortText/longText/number/obscured), \`validationRegexp\`, \`checks\`, \`action\` |
|
|
1077
|
+
| \`CheckBox\` | Checkbox | \`label\`, \`value\` |
|
|
1078
|
+
| \`ChoicePicker\` | Selector múltiple | \`options\`, \`value\` (DynamicStringList), \`variant\` (mutuallyExclusive/multipleSelection), \`displayStyle\`, \`filterable\`, \`action\` |
|
|
1079
|
+
| \`Slider\` | Slider numérico | \`value\`, \`minValue\`, \`maxValue\` |
|
|
1080
|
+
| \`DateTimeInput\` | Fecha/hora | \`value\`, \`enableDate\`, \`enableTime\` |
|
|
1081
|
+
| \`Card\` | Tarjeta | \`child\` |
|
|
1082
|
+
| \`Divider\` | Separador | \`axis\` |
|
|
1083
|
+
| \`Image\` | Imagen | \`url\`, \`fit\` |
|
|
1084
|
+
| \`Tabs\` | Pestañas | \`tabItems\` |
|
|
1077
1085
|
|
|
1078
|
-
|
|
1079
|
-
canvas_show_card({ title: "Métricas", span: "full", items: [...] })
|
|
1080
|
-
canvas_show_progress({ tasks: [...], span: "full" })
|
|
1081
|
-
\`\`\`
|
|
1086
|
+
## Data Binding
|
|
1082
1087
|
|
|
1083
|
-
|
|
1088
|
+
- Literal: \`"texto directo"\` o número
|
|
1089
|
+
- Path: \`{ "path": "/form/name" }\` — se resuelve contra el data model
|
|
1090
|
+
- Function call: \`{ "call": "formatDate", "args": {...} }\`
|
|
1084
1091
|
|
|
1085
|
-
|
|
1086
|
-
|-------|--------|
|
|
1087
|
-
| 🟢 Verde | Complete |
|
|
1088
|
-
| 🔵 Azul | In Progress |
|
|
1089
|
-
| 🔴 Rojo | Error/Blocked |
|
|
1090
|
-
| 🟡 Amarillo | Pending |
|
|
1092
|
+
## Cuándo disparan acciones los inputs
|
|
1091
1093
|
|
|
1092
|
-
|
|
1094
|
+
| Componente | Cuándo dispara | Formato de action |
|
|
1095
|
+
|------------|---------------|-------------------|
|
|
1096
|
+
| \`Button\` | Al hacer click | \`{name: "...", context: {...}}\` o \`{event: {name: "...", context: {...}}}\` |
|
|
1097
|
+
| \`TextField\` | Al perder foco (blur) o presionar Enter (en shortText) | \`{name: "...", context: {...}}\` |
|
|
1098
|
+
| \`ChoicePicker\` | Inmediatamente al seleccionar/deseleccionar | \`{name: "...", context: {...}}\` |
|
|
1099
|
+
| \`Slider\` | Al soltar el slider (onValueCommit) | \`{name: "...", context: {...}}\` |
|
|
1100
|
+
| \`CheckBox\` | Al cambiar estado | — (solo two-way binding) |
|
|
1101
|
+
| \`DateTimeInput\` | Al cambiar valor | — (solo two-way binding) |
|
|
1093
1102
|
|
|
1094
|
-
|
|
1095
|
-
- Layout consistente (header, progress, status, metrics)
|
|
1096
|
-
- Update en tiempo real con progreso
|
|
1097
|
-
- Solo información crítica (no sobrecargar)
|
|
1103
|
+
**Nota**: Tanto \`{name: "...", context: {...}}\` (directo) como \`{event: {name: "...", context: {...}}}\` (con wrapper) son formatos válidos.
|
|
1098
1104
|
|
|
1099
|
-
|
|
1105
|
+
**Nota**: Para ChoicePicker usa siempre \`selections: {path: "..."}\` (no \`value\`) para two-way binding.
|
|
1100
1106
|
|
|
1101
|
-
|
|
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
|
|
1107
|
+
## Validación (checks)
|
|
1116
1108
|
|
|
1117
|
-
|
|
1109
|
+
\`\`\`json
|
|
1110
|
+
"checks": [
|
|
1111
|
+
{ "call": "required", "args": { "value": { "path": "/form/email" } }, "message": "Email is required" },
|
|
1112
|
+
{ "call": "email", "args": { "value": { "path": "/form/email" } }, "message": "Invalid email" },
|
|
1113
|
+
{ "call": "regex", "args": { "value": { "path": "/form/phone" }, "pattern": "^\\\\d{10}$" }, "message": "10 digits required" }
|
|
1114
|
+
]
|
|
1115
|
+
\`\`\`
|
|
1118
1116
|
|
|
1119
|
-
|
|
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
|
|
1117
|
+
## Ejemplo: Formulario de Contacto
|
|
1124
1118
|
|
|
1125
|
-
|
|
1119
|
+
\`\`\`json
|
|
1120
|
+
// 1. Create surface
|
|
1121
|
+
a2ui_create_surface(surfaceId: "contact_form", catalogId: "https://a2ui.org/specification/v0_9/basic_catalog.json", theme: {primaryColor: "#3B82F6", agentDisplayName: "Asistente"})
|
|
1126
1122
|
|
|
1127
|
-
|
|
1123
|
+
// 2. Send components
|
|
1124
|
+
a2ui_update_components(surfaceId: "contact_form", components: [
|
|
1125
|
+
{"id": "root", "component": "Column", "children": ["header","name_field","email_field","msg_field","submit_btn"]},
|
|
1126
|
+
{id: "header", component: "Text", text: "Contacto", variant: "h2"},
|
|
1127
|
+
{id: "name_field", component: "TextField", label: "Nombre", value: {path: "/form/name"}, variant: "shortText"},
|
|
1128
|
+
{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"}]},
|
|
1129
|
+
{id: "msg_field", component: "TextField", label: "Mensaje", value: {path: "/form/message"}, variant: "longText"},
|
|
1130
|
+
{id: "submit_label", component: "Text", text: "Enviar"},
|
|
1131
|
+
{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"}}}}
|
|
1132
|
+
])
|
|
1133
|
+
|
|
1134
|
+
// 3. Initialize data model
|
|
1135
|
+
a2ui_update_data_model(surfaceId: "contact_form", path: "/form", value: {name: "", email: "", message: ""})
|
|
1136
|
+
\`\`\`
|
|
1137
|
+
|
|
1138
|
+
## Mejores Prácticas
|
|
1139
|
+
|
|
1140
|
+
- Siempre incluir un componente \`root\` con id="root"
|
|
1141
|
+
- Usar \`{ path: "/..." }\` para data binding en TextField values
|
|
1142
|
+
- Agregar \`checks\` para validación de campos obligatorios
|
|
1143
|
+
- Usar \`variant: "primary"\` para botones principales
|
|
1144
|
+
- Eliminar surfaces con \`a2ui_delete_surface\` al terminar
|
|
1145
|
+
- Preferir A2UI forms sobre \`canvas_ask\` para formularios complejos con validación`,
|
|
1146
|
+
},
|
|
1147
|
+
{
|
|
1148
|
+
name: "a2ui_dashboard",
|
|
1149
|
+
description: `Create real-time interactive dashboards using A2UI v0.9 protocol with dynamic data binding and live updates`,
|
|
1150
|
+
category: "canvas",
|
|
1151
|
+
version: "1.0.0",
|
|
1152
|
+
tools: ["a2ui_create_surface","a2ui_update_components","a2ui_update_data_model","a2ui_delete_surface"],
|
|
1153
|
+
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"],
|
|
1154
|
+
body: `
|
|
1155
|
+
# A2UI Dashboard Skill
|
|
1156
|
+
|
|
1157
|
+
## Cuándo se Activa
|
|
1158
|
+
|
|
1159
|
+
Para crear dashboards interactivos en tiempo real usando A2UI v0.9. Usar cuando se necesita:
|
|
1160
|
+
- Métricas que se actualizan dinámicamente
|
|
1161
|
+
- Dashboards con data binding
|
|
1162
|
+
- Paneles con Cards, Rows, Columns
|
|
1163
|
+
- Visualización de datos que cambia en tiempo real
|
|
1164
|
+
|
|
1165
|
+
## Herramientas Disponibles
|
|
1166
|
+
|
|
1167
|
+
| Tool | Qué hace | Cuándo usarla |
|
|
1128
1168
|
|------|----------|---------------|
|
|
1129
1169
|
| \`a2ui_create_surface\` | Crea la superficie A2UI | Siempre primero |
|
|
1130
1170
|
| \`a2ui_update_components\` | Envía componentes | Para layout del dashboard |
|
|
@@ -1185,234 +1225,307 @@ a2ui_update_data_model(surfaceId: "dash", path: "/", value: {metrics: {completio
|
|
|
1185
1225
|
- Eliminar surfaces al terminar para evitar memory leaks`,
|
|
1186
1226
|
},
|
|
1187
1227
|
{
|
|
1188
|
-
name: "
|
|
1189
|
-
description: `
|
|
1190
|
-
category: "
|
|
1191
|
-
version: "1.
|
|
1192
|
-
tools: ["
|
|
1193
|
-
triggers: ["
|
|
1228
|
+
name: "voice_input",
|
|
1229
|
+
description: `Transcribe audio input to text using STT (Speech-to-Text) providers like Groq Whisper or OpenAI Whisper`,
|
|
1230
|
+
category: "voice",
|
|
1231
|
+
version: "1.0.0",
|
|
1232
|
+
tools: ["voice_transcribe"],
|
|
1233
|
+
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"],
|
|
1194
1234
|
body: `
|
|
1195
|
-
#
|
|
1235
|
+
# Voice Input Skill
|
|
1196
1236
|
|
|
1197
1237
|
## Cuándo se Activa
|
|
1198
1238
|
|
|
1199
|
-
|
|
1239
|
+
Esta skill se activa cuando el usuario envía audio y necesita transcripción a texto: notas de voz, grabaciones, comandos de voz.
|
|
1200
1240
|
|
|
1201
1241
|
## Herramientas Disponibles
|
|
1202
1242
|
|
|
1203
1243
|
| Tool | Qué hace | Cuándo usarla |
|
|
1204
1244
|
|------|----------|---------------|
|
|
1205
|
-
| \`
|
|
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 |
|
|
1245
|
+
| \`voice_transcribe\` | Convierte audio → texto | Transcripción de cualquier audio |
|
|
1212
1246
|
|
|
1213
1247
|
## Workflow
|
|
1214
1248
|
|
|
1215
|
-
###
|
|
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)
|
|
1249
|
+
### Transcripción
|
|
1223
1250
|
\`\`\`javascript
|
|
1224
|
-
// 1.
|
|
1225
|
-
|
|
1226
|
-
//
|
|
1251
|
+
// 1. Recibir audio
|
|
1252
|
+
// - File upload
|
|
1253
|
+
// - Voice message (Telegram, WhatsApp)
|
|
1254
|
+
// - Stream en vivo
|
|
1227
1255
|
|
|
1228
|
-
// 2.
|
|
1229
|
-
|
|
1230
|
-
|
|
1231
|
-
|
|
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"
|
|
1256
|
+
// 2. Transcribir
|
|
1257
|
+
const result = voice_transcribe({
|
|
1258
|
+
audio: audioBuffer,
|
|
1259
|
+
language: "es" // o "auto" para detectar
|
|
1237
1260
|
})
|
|
1261
|
+
|
|
1262
|
+
// 3. Formatear
|
|
1263
|
+
// - Agregar puntuación
|
|
1264
|
+
// - Capitalizar
|
|
1265
|
+
// - Marcar speakers si hay múltiples
|
|
1266
|
+
|
|
1267
|
+
// 4. Entregar resultado
|
|
1238
1268
|
\`\`\`
|
|
1239
1269
|
|
|
1240
|
-
|
|
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
|
|
1270
|
+
## Proveedores STT Soportados
|
|
1244
1271
|
|
|
1245
|
-
|
|
1272
|
+
| Provider | Modelos | Idiomas |
|
|
1273
|
+
|----------|---------|---------|
|
|
1274
|
+
| Groq | whisper-large-v3, turbo | Multi |
|
|
1275
|
+
| OpenAI | whisper-1 | Multi |
|
|
1246
1276
|
|
|
1247
|
-
|
|
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
|
-
})
|
|
1277
|
+
## Configuración por Canal
|
|
1254
1278
|
|
|
1255
|
-
|
|
1256
|
-
|
|
1257
|
-
\`\`\`
|
|
1279
|
+
Cada canal puede configurar su proveedor STT preferido:
|
|
1280
|
+
- \`stt_provider\`: "groq-whisper" | "openai-whisper"
|
|
1258
1281
|
|
|
1259
1282
|
## Mejores Prácticas
|
|
1260
1283
|
|
|
1261
|
-
-
|
|
1262
|
-
-
|
|
1263
|
-
-
|
|
1264
|
-
-
|
|
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
|
|
1284
|
+
- Detectar idioma automáticamente
|
|
1285
|
+
- Agregar puntuación para legibilidad
|
|
1286
|
+
- Marcar segmentos inaudibles
|
|
1287
|
+
- Preservar idioma original
|
|
1267
1288
|
|
|
1268
1289
|
## Errores a Evitar
|
|
1269
1290
|
|
|
1270
|
-
- ❌
|
|
1271
|
-
- ❌
|
|
1272
|
-
- ❌
|
|
1273
|
-
- ❌
|
|
1274
|
-
- ❌ No consultar modelos disponibles antes de crear workers
|
|
1275
|
-
- ❌ No monitorear estado de tasks
|
|
1276
|
-
- ❌ No coordinar workers cuando hay dependencias
|
|
1291
|
+
- ❌ Traducir sin pedir (mantener idioma)
|
|
1292
|
+
- ❌ Omitir puntuación
|
|
1293
|
+
- ❌ No indicar baja confianza
|
|
1294
|
+
- ❌ Ignorar ruido de fondo que afecta calidad
|
|
1277
1295
|
`,
|
|
1278
1296
|
},
|
|
1279
1297
|
{
|
|
1280
|
-
name: "
|
|
1281
|
-
description: `
|
|
1282
|
-
category: "
|
|
1298
|
+
name: "voice_assistant",
|
|
1299
|
+
description: `Full voice-to-voice interaction: transcribe user speech, process request, and respond with synthesized speech`,
|
|
1300
|
+
category: "voice",
|
|
1283
1301
|
version: "1.0.0",
|
|
1284
|
-
tools: ["
|
|
1285
|
-
triggers: ["
|
|
1302
|
+
tools: ["voice_transcribe","voice_speak"],
|
|
1303
|
+
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"],
|
|
1286
1304
|
body: `
|
|
1287
|
-
#
|
|
1305
|
+
# Voice Assistant Skill
|
|
1288
1306
|
|
|
1289
1307
|
## Cuándo se Activa
|
|
1290
1308
|
|
|
1291
|
-
|
|
1309
|
+
Esta skill se activa para interacción completa voz a voz: el usuario habla, el asistente procesa y responde con voz.
|
|
1292
1310
|
|
|
1293
1311
|
## Herramientas Disponibles
|
|
1294
1312
|
|
|
1295
1313
|
| Tool | Qué hace | Cuándo usarla |
|
|
1296
1314
|
|------|----------|---------------|
|
|
1297
|
-
| \`
|
|
1298
|
-
| \`
|
|
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 |
|
|
1315
|
+
| \`voice_transcribe\` | Audio → texto | Input del usuario |
|
|
1316
|
+
| \`voice_speak\` | Texto → audio | Respuesta del asistente |
|
|
1302
1317
|
|
|
1303
1318
|
## Workflow
|
|
1304
1319
|
|
|
1305
|
-
###
|
|
1320
|
+
### Voice-to-Voice
|
|
1306
1321
|
\`\`\`javascript
|
|
1307
|
-
|
|
1308
|
-
|
|
1309
|
-
|
|
1322
|
+
// 1. Usuario habla
|
|
1323
|
+
const userAudio = receiveAudio()
|
|
1324
|
+
|
|
1325
|
+
// 2. Transcribir
|
|
1326
|
+
const userText = voice_transcribe({
|
|
1327
|
+
audio: userAudio,
|
|
1328
|
+
language: "auto"
|
|
1310
1329
|
})
|
|
1311
|
-
|
|
1330
|
+
// → "¿Cuál es el clima hoy?"
|
|
1312
1331
|
|
|
1313
|
-
|
|
1314
|
-
|
|
1315
|
-
|
|
1316
|
-
|
|
1332
|
+
// 3. Procesar request
|
|
1333
|
+
// - Entender intención
|
|
1334
|
+
// - Ejecutar acción (ej. consultar API clima)
|
|
1335
|
+
// - Generar respuesta
|
|
1336
|
+
const responseText = "Hoy hay 25 grados y soleado en Buenos Aires"
|
|
1337
|
+
|
|
1338
|
+
// 4. Sintetizar respuesta
|
|
1339
|
+
const responseAudio = voice_speak({
|
|
1340
|
+
text: responseText,
|
|
1341
|
+
voice_id: "eleven_flash_v2_5",
|
|
1342
|
+
language: "es"
|
|
1343
|
+
})
|
|
1344
|
+
|
|
1345
|
+
// 5. Enviar audio
|
|
1346
|
+
sendAudio(responseAudio)
|
|
1317
1347
|
\`\`\`
|
|
1318
1348
|
|
|
1319
|
-
|
|
1320
|
-
|
|
1321
|
-
|
|
1349
|
+
## Casos de Uso
|
|
1350
|
+
|
|
1351
|
+
| Caso | Flujo |
|
|
1352
|
+
|------|-------|
|
|
1353
|
+
| Pregunta simple | Transcribe → responde → sintetiza |
|
|
1354
|
+
| Comando | Transcribe → ejecuta → confirma por voz |
|
|
1355
|
+
| Diálogo | Mantener contexto entre exchanges |
|
|
1356
|
+
| Wake word | Escuchar "hey bee" → activar → procesar |
|
|
1357
|
+
|
|
1358
|
+
## Configuración
|
|
1359
|
+
|
|
1360
|
+
### Wake Word
|
|
1361
|
+
\`\`\`json
|
|
1362
|
+
{
|
|
1363
|
+
"voice_wake_word": "hey bee",
|
|
1364
|
+
"voice_wake_enabled": true
|
|
1365
|
+
}
|
|
1322
1366
|
\`\`\`
|
|
1323
1367
|
|
|
1324
|
-
###
|
|
1325
|
-
\`\`\`
|
|
1326
|
-
|
|
1368
|
+
### Canal Voice
|
|
1369
|
+
\`\`\`json
|
|
1370
|
+
{
|
|
1371
|
+
"voice_enabled": true,
|
|
1372
|
+
"tts_enabled": true,
|
|
1373
|
+
"stt_provider": "groq-whisper",
|
|
1374
|
+
"tts_provider": "elevenlabs",
|
|
1375
|
+
"tts_voice_id": "eleven_flash_v2_5"
|
|
1376
|
+
}
|
|
1327
1377
|
\`\`\`
|
|
1328
1378
|
|
|
1329
1379
|
## Mejores Prácticas
|
|
1330
1380
|
|
|
1331
|
-
-
|
|
1332
|
-
-
|
|
1333
|
-
-
|
|
1334
|
-
-
|
|
1381
|
+
- Respuestas cortas y naturales (<60s)
|
|
1382
|
+
- Mantener contexto conversacional
|
|
1383
|
+
- Indicadores de procesamiento
|
|
1384
|
+
- Fallback a texto si falla voz
|
|
1335
1385
|
|
|
1336
1386
|
## Errores a Evitar
|
|
1337
1387
|
|
|
1338
|
-
- ❌
|
|
1339
|
-
- ❌
|
|
1340
|
-
- ❌
|
|
1341
|
-
- ❌
|
|
1388
|
+
- ❌ Respuestas muy largas para audio
|
|
1389
|
+
- ❌ Perder contexto entre exchanges
|
|
1390
|
+
- ❌ No indicar que está procesando
|
|
1391
|
+
- ❌ No tener fallback si falla TTS/STT
|
|
1342
1392
|
`,
|
|
1343
1393
|
},
|
|
1344
1394
|
{
|
|
1345
|
-
name: "
|
|
1346
|
-
description: `
|
|
1347
|
-
category: "
|
|
1348
|
-
version: "1.
|
|
1349
|
-
tools: ["
|
|
1350
|
-
triggers: ["
|
|
1395
|
+
name: "voice_output",
|
|
1396
|
+
description: `Convert text to synthesized speech using TTS (Text-to-Speech) providers like ElevenLabs, OpenAI TTS, or Gemini TTS`,
|
|
1397
|
+
category: "voice",
|
|
1398
|
+
version: "1.0.0",
|
|
1399
|
+
tools: ["voice_speak"],
|
|
1400
|
+
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"],
|
|
1351
1401
|
body: `
|
|
1352
|
-
#
|
|
1402
|
+
# Voice Output Skill
|
|
1353
1403
|
|
|
1354
1404
|
## Cuándo se Activa
|
|
1355
1405
|
|
|
1356
|
-
|
|
1406
|
+
Esta skill se activa cuando el usuario necesita convertir texto a voz: leer respuestas, generar audio, síntesis de voz.
|
|
1357
1407
|
|
|
1358
1408
|
## Herramientas Disponibles
|
|
1359
1409
|
|
|
1360
1410
|
| Tool | Qué hace | Cuándo usarla |
|
|
1361
1411
|
|------|----------|---------------|
|
|
1362
|
-
| \`
|
|
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 |
|
|
1412
|
+
| \`voice_speak\` | Convierte texto → audio | Síntesis de voz |
|
|
1366
1413
|
|
|
1367
1414
|
## Workflow
|
|
1368
1415
|
|
|
1369
|
-
###
|
|
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
|
|
1416
|
+
### Text-to-Speech
|
|
1376
1417
|
\`\`\`javascript
|
|
1377
|
-
// 1.
|
|
1378
|
-
|
|
1379
|
-
// → [{ providerId: "openai", modelId: "gpt-4o", contextWindow: 128000 }, ...]
|
|
1418
|
+
// 1. Recibir texto
|
|
1419
|
+
const text = "Hola, ¿cómo estás?"
|
|
1380
1420
|
|
|
1381
|
-
// 2.
|
|
1382
|
-
|
|
1383
|
-
|
|
1384
|
-
|
|
1385
|
-
|
|
1386
|
-
|
|
1387
|
-
|
|
1388
|
-
|
|
1389
|
-
|
|
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
|
|
1421
|
+
// 2. Preprocesar
|
|
1422
|
+
// - Expandir números: "5" → "cinco"
|
|
1423
|
+
// - Expandir fechas: "01/01" → "primero de enero"
|
|
1424
|
+
// - Expandir abbreviaturas: "Dr." → "Doctor"
|
|
1425
|
+
|
|
1426
|
+
// 3. Sintetizar
|
|
1427
|
+
const audio = voice_speak({
|
|
1428
|
+
text: optimizedText,
|
|
1429
|
+
voice_id: "eleven_flash_v2_5", // o configured voice
|
|
1430
|
+
language: "es"
|
|
1396
1431
|
})
|
|
1432
|
+
|
|
1433
|
+
// 4. Entregar audio
|
|
1434
|
+
// - Enviar como archivo
|
|
1435
|
+
// - Streaming si el canal lo soporta
|
|
1397
1436
|
\`\`\`
|
|
1398
1437
|
|
|
1438
|
+
## Proveedores TTS Soportados
|
|
1439
|
+
|
|
1440
|
+
| Provider | Modelos | Voces |
|
|
1441
|
+
|----------|---------|-------|
|
|
1442
|
+
| ElevenLabs | Flash V2.5, Turbo V2.5, Multilingual V2, V3 | 1000+ |
|
|
1443
|
+
| OpenAI | tts-1, tts-1-hd, gpt-4o-mini-tts | 6+ |
|
|
1444
|
+
| Gemini | 2.5 Flash TTS, 2.5 Pro TTS | Multi |
|
|
1445
|
+
| Qwen | Qwen TTS Flash, Instruct | Multi |
|
|
1446
|
+
|
|
1447
|
+
## Configuración por Canal
|
|
1448
|
+
|
|
1449
|
+
Cada canal configura su proveedor TTS:
|
|
1450
|
+
- \`tts_provider\`: "elevenlabs" | "openai-tts" | "gemini-tts"
|
|
1451
|
+
- \`tts_voice_id\`: ID específico de voz (ej. ElevenLabs voice ID)
|
|
1452
|
+
|
|
1399
1453
|
## Mejores Prácticas
|
|
1400
1454
|
|
|
1401
|
-
-
|
|
1402
|
-
-
|
|
1403
|
-
-
|
|
1404
|
-
-
|
|
1405
|
-
- **Nombres descriptivos**: Que indiquen propósito
|
|
1406
|
-
- **Modelo adecuado**: Seleccionar según capacidad requerida (coding, chat, analysis, vision)
|
|
1455
|
+
- Preprocesar texto para naturalidad
|
|
1456
|
+
- Usar voz configurada por usuario
|
|
1457
|
+
- Cachear respuestas frecuentes
|
|
1458
|
+
- Split de textos largos
|
|
1407
1459
|
|
|
1408
1460
|
## Errores a Evitar
|
|
1409
1461
|
|
|
1410
|
-
- ❌
|
|
1411
|
-
- ❌
|
|
1412
|
-
- ❌
|
|
1413
|
-
- ❌
|
|
1414
|
-
|
|
1415
|
-
|
|
1462
|
+
- ❌ Enviar texto crudo sin preprocesar
|
|
1463
|
+
- ❌ Ignorar preferencia de voz
|
|
1464
|
+
- ❌ No manejar límites de longitud
|
|
1465
|
+
- ❌ No cachear (costo API)
|
|
1466
|
+
`,
|
|
1467
|
+
},
|
|
1468
|
+
{
|
|
1469
|
+
name: "research_and_remember",
|
|
1470
|
+
description: `Research information from web sources and save findings to persistent memory`,
|
|
1471
|
+
category: "agents",
|
|
1472
|
+
version: "1.0.0",
|
|
1473
|
+
tools: ["web_search","web_fetch","memory_write"],
|
|
1474
|
+
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"],
|
|
1475
|
+
body: `
|
|
1476
|
+
# Research and Remember Skill
|
|
1477
|
+
|
|
1478
|
+
## Cuándo se Activa
|
|
1479
|
+
|
|
1480
|
+
Para investigar temas en la web y guardar el conocimiento sintetizado en memoria persistente.
|
|
1481
|
+
|
|
1482
|
+
## Herramientas Disponibles
|
|
1483
|
+
|
|
1484
|
+
| Tool | Qué hace | Cuándo usarla |
|
|
1485
|
+
|------|----------|---------------|
|
|
1486
|
+
| \`web_search\` | Busca en internet | Encontrar fuentes |
|
|
1487
|
+
| \`web_fetch\` | Descarga contenido | Obtener detalles |
|
|
1488
|
+
| \`memory_write\` | Guarda conocimiento | Almacenar para futuro |
|
|
1489
|
+
|
|
1490
|
+
## Workflow
|
|
1491
|
+
|
|
1492
|
+
1. **Buscar** → \`web_search({ query, numResults: 8 })\`
|
|
1493
|
+
2. **Fetch** → \`web_fetch({ urls: top 2-3 })\`
|
|
1494
|
+
3. **Sintetizar** → Compilar hallazgos con estructura clara
|
|
1495
|
+
4. **Guardar** → \`memory_write({ title, content })\`
|
|
1496
|
+
|
|
1497
|
+
## Estructura de Conocimiento
|
|
1498
|
+
|
|
1499
|
+
\`\`\`markdown
|
|
1500
|
+
# {Topic}
|
|
1501
|
+
|
|
1502
|
+
## Summary
|
|
1503
|
+
2-3 oración resumen
|
|
1504
|
+
|
|
1505
|
+
## Key Findings
|
|
1506
|
+
- Punto clave 1
|
|
1507
|
+
- Punto clave 2
|
|
1508
|
+
- ...
|
|
1509
|
+
|
|
1510
|
+
## Sources
|
|
1511
|
+
- [Source 1](url)
|
|
1512
|
+
- [Source 2](url)
|
|
1513
|
+
\`\`\`
|
|
1514
|
+
|
|
1515
|
+
## Mejores Prácticas
|
|
1516
|
+
|
|
1517
|
+
- Mínimo 2 searches para cobertura completa
|
|
1518
|
+
- Cruzar información entre fuentes múltiples
|
|
1519
|
+
- Incluir URLs para verificación
|
|
1520
|
+
- Estructura clara con headings
|
|
1521
|
+
- Flaggear información incierta
|
|
1522
|
+
|
|
1523
|
+
## Errores a Evitar
|
|
1524
|
+
|
|
1525
|
+
- ❌ Una sola búsqueda (insuficiente)
|
|
1526
|
+
- ❌ Sin fuentes (no verificable)
|
|
1527
|
+
- ❌ Títulos vagos para memoria
|
|
1528
|
+
- ❌ No flaggear información conflictiva
|
|
1416
1529
|
`,
|
|
1417
1530
|
},
|
|
1418
1531
|
{
|
|
@@ -1494,471 +1607,415 @@ const result = task_status({ task_id })
|
|
|
1494
1607
|
`,
|
|
1495
1608
|
},
|
|
1496
1609
|
{
|
|
1497
|
-
name: "
|
|
1498
|
-
description: `
|
|
1610
|
+
name: "agent_spawner",
|
|
1611
|
+
description: `Create and manage specialized worker agents with optimal tool assignments and lifecycle control`,
|
|
1499
1612
|
category: "agents",
|
|
1500
|
-
version: "1.
|
|
1501
|
-
tools: ["
|
|
1502
|
-
triggers: ["
|
|
1613
|
+
version: "1.1.0",
|
|
1614
|
+
tools: ["get_available_models","find_agent","create_agent","archive_agent"],
|
|
1615
|
+
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"],
|
|
1503
1616
|
body: `
|
|
1504
|
-
#
|
|
1617
|
+
# Agent Spawner Skill
|
|
1505
1618
|
|
|
1506
1619
|
## Cuándo se Activa
|
|
1507
1620
|
|
|
1508
|
-
Para
|
|
1621
|
+
Para crear nuevos workers especializados o gestionar el ciclo de vida de agents existentes.
|
|
1509
1622
|
|
|
1510
1623
|
## Herramientas Disponibles
|
|
1511
1624
|
|
|
1512
1625
|
| Tool | Qué hace | Cuándo usarla |
|
|
1513
1626
|
|------|----------|---------------|
|
|
1514
|
-
| \`
|
|
1515
|
-
| \`
|
|
1516
|
-
| \`
|
|
1627
|
+
| \`get_available_models\` | Consulta providers y modelos activos de la BD | **ANTES de crear** — seleccionar modelo óptimo |
|
|
1628
|
+
| \`find_agent\` | Busca agents existentes | **PRIMERO** — antes de crear |
|
|
1629
|
+
| \`create_agent\` | Crea nuevo worker | Si no existe apto |
|
|
1630
|
+
| \`archive_agent\` | Archiva worker | Limpieza, inactivos |
|
|
1517
1631
|
|
|
1518
1632
|
## Workflow
|
|
1519
1633
|
|
|
1520
|
-
|
|
1521
|
-
|
|
1522
|
-
|
|
1523
|
-
|
|
1524
|
-
|
|
1525
|
-
## Estructura de Conocimiento
|
|
1526
|
-
|
|
1527
|
-
\`\`\`markdown
|
|
1528
|
-
# {Topic}
|
|
1529
|
-
|
|
1530
|
-
## Summary
|
|
1531
|
-
2-3 oración resumen
|
|
1634
|
+
### Crear Agent
|
|
1635
|
+
1. **Buscar** → \`find_agent({ search })\` — ¿existe?
|
|
1636
|
+
2. **Si existe** → Reutilizar
|
|
1637
|
+
3. **Si no existe** → \`get_available_models({ capabilities })\` — seleccionar modelo óptimo
|
|
1638
|
+
4. **Crear** → \`create_agent({...})\` con providerId y modelId seleccionados
|
|
1532
1639
|
|
|
1533
|
-
|
|
1534
|
-
|
|
1535
|
-
|
|
1536
|
-
|
|
1640
|
+
### Create Agent Config
|
|
1641
|
+
\`\`\`javascript
|
|
1642
|
+
// 1. Consultar modelos disponibles para coding
|
|
1643
|
+
get_available_models({ capabilities: "coding" })
|
|
1644
|
+
// → [{ providerId: "openai", modelId: "gpt-4o", contextWindow: 128000 }, ...]
|
|
1537
1645
|
|
|
1538
|
-
|
|
1539
|
-
|
|
1540
|
-
|
|
1646
|
+
// 2. Crear agente con modelo óptimo (providerId y modelId son OBLIGATORIOS)
|
|
1647
|
+
create_agent({
|
|
1648
|
+
name: "ai_coder",
|
|
1649
|
+
description: "Especialista en código y refactorización",
|
|
1650
|
+
system_prompt: \`
|
|
1651
|
+
Sos desarrollador experto. Tu rol:
|
|
1652
|
+
1. Escribir código limpio y testeable
|
|
1653
|
+
2. Refactorizar código existente
|
|
1654
|
+
3. Revisar PRs y sugerir mejoras
|
|
1655
|
+
\`,
|
|
1656
|
+
tools_json: ["fs_read", "fs_write", "fs_edit", "cli_exec"],
|
|
1657
|
+
providerId: "openai", // OBLIGATORIO - seleccionado de get_available_models
|
|
1658
|
+
modelId: "gpt-4o", // OBLIGATORIO - seleccionado de get_available_models
|
|
1659
|
+
tone: "professional",
|
|
1660
|
+
max_iterations: 15
|
|
1661
|
+
})
|
|
1541
1662
|
\`\`\`
|
|
1542
1663
|
|
|
1543
1664
|
## Mejores Prácticas
|
|
1544
1665
|
|
|
1545
|
-
-
|
|
1546
|
-
-
|
|
1547
|
-
-
|
|
1548
|
-
-
|
|
1549
|
-
-
|
|
1666
|
+
- **Buscar primero**: Nunca duplicar workers
|
|
1667
|
+
- **Consultar modelos**: Usar \`get_available_models\` ANTES de crear para seleccionar provider/model óptimo
|
|
1668
|
+
- **System prompt específico**: Enfocado en especialidad
|
|
1669
|
+
- **Mínimo privilegio**: Solo tools necesarias
|
|
1670
|
+
- **Nombres descriptivos**: Que indiquen propósito
|
|
1671
|
+
- **Modelo adecuado**: Seleccionar según capacidad requerida (coding, chat, analysis, vision)
|
|
1550
1672
|
|
|
1551
1673
|
## Errores a Evitar
|
|
1552
1674
|
|
|
1553
|
-
- ❌
|
|
1554
|
-
- ❌
|
|
1555
|
-
- ❌
|
|
1556
|
-
- ❌
|
|
1675
|
+
- ❌ Crear sin buscar primero
|
|
1676
|
+
- ❌ Crear sin consultar modelos disponibles (\`get_available_models\`)
|
|
1677
|
+
- ❌ Usar modelo inadecuado para la tarea (ej: modelo pequeño para coding complejo)
|
|
1678
|
+
- ❌ Tools en exceso ("por las dudas")
|
|
1679
|
+
- ❌ System prompt genérico
|
|
1680
|
+
- ❌ Nombres vagos ("worker1", "agent1")
|
|
1557
1681
|
`,
|
|
1558
1682
|
},
|
|
1559
1683
|
{
|
|
1560
|
-
name: "
|
|
1561
|
-
description: `
|
|
1562
|
-
category: "
|
|
1563
|
-
version: "1.
|
|
1564
|
-
tools: ["
|
|
1565
|
-
triggers: ["
|
|
1684
|
+
name: "task_orchestrator",
|
|
1685
|
+
description: `Orchestrate tasks across multiple workers with delegation, status tracking, and bus communication`,
|
|
1686
|
+
category: "agents",
|
|
1687
|
+
version: "1.1.0",
|
|
1688
|
+
tools: ["get_available_models","task_delegate","task_status","agent_find","agent_create","bus_publish","bus_read"],
|
|
1689
|
+
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"],
|
|
1566
1690
|
body: `
|
|
1567
|
-
#
|
|
1691
|
+
# Task Orchestrator Skill
|
|
1568
1692
|
|
|
1569
1693
|
## Cuándo se Activa
|
|
1570
1694
|
|
|
1571
|
-
|
|
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)
|
|
1695
|
+
Para coordinar múltiples workers, delegar tareas, monitorear progreso, y facilitar comunicación worker-to-worker.
|
|
1576
1696
|
|
|
1577
1697
|
## Herramientas Disponibles
|
|
1578
1698
|
|
|
1579
1699
|
| Tool | Qué hace | Cuándo usarla |
|
|
1580
1700
|
|------|----------|---------------|
|
|
1581
|
-
| \`
|
|
1582
|
-
| \`
|
|
1583
|
-
| \`
|
|
1584
|
-
| \`
|
|
1585
|
-
| \`
|
|
1586
|
-
| \`
|
|
1587
|
-
| \`
|
|
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
|
|
1701
|
+
| \`get_available_models\` | Consulta providers y modelos activos | Al crear workers — seleccionar modelo óptimo |
|
|
1702
|
+
| \`agent_find\` | Busca workers disponibles | Antes de delegar |
|
|
1703
|
+
| \`agent_create\` | Crea nuevo worker | Si no hay uno adecuado |
|
|
1704
|
+
| \`task_delegate\` | Asigna y EJECUTA tarea | Delegar con ejecución inmediata |
|
|
1705
|
+
| \`task_status\` | Verifica estado de tareas | Monitorear progreso |
|
|
1706
|
+
| \`bus_publish\` | Publica mensaje | Coordinación worker-to-worker |
|
|
1707
|
+
| \`bus_read\` | Lee mensajes del bus | Ver solicitudes de workers |
|
|
1651
1708
|
|
|
1652
|
-
|
|
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
|
|
1709
|
+
## Workflow
|
|
1668
1710
|
|
|
1669
|
-
|
|
1711
|
+
### Delegación
|
|
1712
|
+
1. **Consultar modelos** → \`get_available_models({ capabilities })\` — si necesita crear workers
|
|
1713
|
+
2. **Buscar worker** → \`agent_find({ search })\`
|
|
1714
|
+
3. **Si no existe** → \`agent_create({...})\` — con providerId y modelId OBLIGATORIOS
|
|
1715
|
+
4. **Delegar** → \`task_delegate({ worker_id, task_description, task_id?, project_id? })\` — **BLOQUEANTE**
|
|
1716
|
+
5. **Resultado retornado** → Worker ejecuta inmediatamente y devuelve resultado
|
|
1670
1717
|
|
|
1671
|
-
|
|
1718
|
+
### Create Agent Config (providerId y modelId son OBLIGATORIOS)
|
|
1719
|
+
\`\`\`javascript
|
|
1720
|
+
// 1. Consultar modelos disponibles
|
|
1721
|
+
get_available_models({ capabilities: "analysis" })
|
|
1722
|
+
// → [{ providerId: "anthropic", modelId: "claude-sonnet-4-6", contextWindow: 200000 }, ...]
|
|
1672
1723
|
|
|
1724
|
+
// 2. Crear worker con modelo óptimo
|
|
1725
|
+
agent_create({
|
|
1726
|
+
name: "data_analyst",
|
|
1727
|
+
description: "Especialista en análisis de datos y visualización",
|
|
1728
|
+
system_prompt: "Sos analista de datos experto...",
|
|
1729
|
+
tools_json: ["web_search", "web_fetch", "save_note"],
|
|
1730
|
+
providerId: "anthropic", // OBLIGATORIO
|
|
1731
|
+
modelId: "claude-sonnet-4-6", // OBLIGATORIO
|
|
1732
|
+
tone: "analytical"
|
|
1733
|
+
})
|
|
1673
1734
|
\`\`\`
|
|
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
1735
|
|
|
1681
|
-
|
|
1736
|
+
### Monitoreo
|
|
1737
|
+
1. **Check estado** → \`task_status({ task_ids })\`
|
|
1738
|
+
2. **Publicar coordinación** → \`bus_publish()\` si needed
|
|
1739
|
+
3. **Leer bus** → \`bus_read()\` para respuestas
|
|
1682
1740
|
|
|
1683
|
-
##
|
|
1741
|
+
## Agent Bus Communication
|
|
1684
1742
|
|
|
1685
|
-
|
|
1743
|
+
\`\`\`javascript
|
|
1744
|
+
// Worker notifica completado:
|
|
1745
|
+
bus_publish({
|
|
1746
|
+
event_type: "task_complete",
|
|
1747
|
+
to_worker_id: "next_worker",
|
|
1748
|
+
content: "Research done. Found 7 trends. Ready for content generation."
|
|
1749
|
+
})
|
|
1686
1750
|
|
|
1751
|
+
// Worker solicita contexto:
|
|
1752
|
+
bus_read() → [{ from: "writer", content: "Need research results" }]
|
|
1687
1753
|
\`\`\`
|
|
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
1754
|
|
|
1694
|
-
##
|
|
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
|
|
1755
|
+
## Mejores Prácticas
|
|
1706
1756
|
|
|
1707
|
-
|
|
1757
|
+
- \`task_delegate\` es bloqueante — el resultado llega en el retorno de la tool
|
|
1758
|
+
- Consultar modelos disponibles antes de crear workers (\`get_available_models\`)
|
|
1759
|
+
- Asignar workers por especialidad (\`agent_find\`)
|
|
1760
|
+
- Usar \`bus_publish\` / \`bus_read\` para coordinación entre workers
|
|
1761
|
+
- Pasar \`task_id\` y \`project_id\` a \`task_delegate\` para auto-tracking de progreso
|
|
1762
|
+
- Seleccionar modelo según capacidad: coding → modelos grandes, chat → modelos rápidos
|
|
1708
1763
|
|
|
1709
|
-
##
|
|
1764
|
+
## Errores a Evitar
|
|
1710
1765
|
|
|
1711
|
-
|
|
1712
|
-
|
|
1713
|
-
|
|
1714
|
-
|
|
1715
|
-
|
|
1716
|
-
|
|
1717
|
-
|
|
1718
|
-
\`\`\`
|
|
1766
|
+
- ❌ Usar \`delegate_task\` (no existe) — usar \`task_delegate\`
|
|
1767
|
+
- ❌ Usar \`find_agent\` (no existe) — usar \`agent_find\`
|
|
1768
|
+
- ❌ Usar \`publish_to_bus\` / \`get_bus_messages\` (no existen) — usar \`bus_publish\` / \`bus_read\`
|
|
1769
|
+
- ❌ Usar \`get_task_status\` (no existe) — usar \`task_status\`
|
|
1770
|
+
- ❌ No consultar modelos disponibles antes de crear workers
|
|
1771
|
+
- ❌ No monitorear estado de tasks
|
|
1772
|
+
- ❌ No coordinar workers cuando hay dependencias
|
|
1719
1773
|
`,
|
|
1720
1774
|
},
|
|
1721
1775
|
{
|
|
1722
|
-
name: "
|
|
1723
|
-
description: `
|
|
1724
|
-
category: "
|
|
1776
|
+
name: "memory_manager",
|
|
1777
|
+
description: `Complete management of persistent memory including write, read, search, list, and delete operations`,
|
|
1778
|
+
category: "agents",
|
|
1725
1779
|
version: "1.0.0",
|
|
1726
|
-
tools: ["
|
|
1727
|
-
triggers: ["
|
|
1780
|
+
tools: ["memory_write","memory_read","memory_list","memory_search","memory_delete"],
|
|
1781
|
+
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"],
|
|
1728
1782
|
body: `
|
|
1729
|
-
#
|
|
1783
|
+
# Memory Manager Skill
|
|
1730
1784
|
|
|
1731
1785
|
## Cuándo se Activa
|
|
1732
1786
|
|
|
1733
|
-
|
|
1734
|
-
- Crear nuevos archivos
|
|
1735
|
-
- Modificar contenido existente
|
|
1736
|
-
- Eliminar archivos
|
|
1737
|
-
- Guardar cambios
|
|
1787
|
+
Para guardar, recuperar, buscar, listar o eliminar información persistente entre sesiones.
|
|
1738
1788
|
|
|
1739
1789
|
## Herramientas Disponibles
|
|
1740
1790
|
|
|
1741
1791
|
| Tool | Qué hace | Cuándo usarla |
|
|
1742
1792
|
|------|----------|---------------|
|
|
1743
|
-
| \`
|
|
1744
|
-
| \`
|
|
1745
|
-
| \`
|
|
1746
|
-
| \`
|
|
1793
|
+
| \`memory_write\` | Almacena con título único | Guardar preferencias, datos |
|
|
1794
|
+
| \`memory_read\` | Recupera por título exacto | Cuando conocés el título |
|
|
1795
|
+
| \`memory_list\` | Lista todos los títulos | Explorar qué hay guardado |
|
|
1796
|
+
| \`memory_search\` | Busca por keywords | Cuando no recordás título exacto |
|
|
1797
|
+
| \`memory_delete\` | Elimina entrada | Limpiar datos obsoletos |
|
|
1747
1798
|
|
|
1748
1799
|
## Workflow
|
|
1749
1800
|
|
|
1750
|
-
###
|
|
1751
|
-
|
|
1752
|
-
|
|
1801
|
+
### Write
|
|
1802
|
+
\`\`\`javascript
|
|
1803
|
+
memory_write({
|
|
1804
|
+
title: "Preferencias de Desarrollo",
|
|
1805
|
+
content: "TypeScript, VS Code, Prettier single quotes"
|
|
1806
|
+
})
|
|
1807
|
+
\`\`\`
|
|
1753
1808
|
|
|
1754
|
-
###
|
|
1755
|
-
|
|
1756
|
-
|
|
1757
|
-
|
|
1758
|
-
|
|
1809
|
+
### Read/Search
|
|
1810
|
+
\`\`\`javascript
|
|
1811
|
+
memory_read({ title: "Preferencias" }) // Título exacto
|
|
1812
|
+
memory_search({ query: "preferencias" }) // Fuzzy match
|
|
1813
|
+
\`\`\`
|
|
1759
1814
|
|
|
1760
|
-
###
|
|
1761
|
-
|
|
1762
|
-
|
|
1763
|
-
|
|
1815
|
+
### List
|
|
1816
|
+
\`\`\`javascript
|
|
1817
|
+
memory_list({}) // Todos los títulos
|
|
1818
|
+
\`\`\`
|
|
1819
|
+
|
|
1820
|
+
### Delete
|
|
1821
|
+
\`\`\`javascript
|
|
1822
|
+
memory_delete({ title: "Datos Temporales" })
|
|
1823
|
+
\`\`\`
|
|
1764
1824
|
|
|
1765
1825
|
## Mejores Prácticas
|
|
1766
1826
|
|
|
1767
|
-
-
|
|
1768
|
-
-
|
|
1769
|
-
-
|
|
1770
|
-
-
|
|
1827
|
+
- Títulos descriptivos y únicos
|
|
1828
|
+
- Agrupar datos relacionados en misma entrada
|
|
1829
|
+
- Confirmar antes de sobrescribir
|
|
1830
|
+
- No guardar datos sensibles
|
|
1771
1831
|
|
|
1772
1832
|
## Errores a Evitar
|
|
1773
1833
|
|
|
1774
|
-
- ❌
|
|
1775
|
-
- ❌
|
|
1776
|
-
- ❌
|
|
1777
|
-
- ❌
|
|
1834
|
+
- ❌ Datos sensibles (passwords, API keys)
|
|
1835
|
+
- ❌ Títulos genéricos ("Config", "Datos")
|
|
1836
|
+
- ❌ Sobrescribir sin confirmar
|
|
1837
|
+
- ❌ Entradas gigantes (split por tema)
|
|
1778
1838
|
`,
|
|
1779
1839
|
},
|
|
1780
1840
|
{
|
|
1781
|
-
name: "
|
|
1782
|
-
description: `
|
|
1783
|
-
category: "
|
|
1841
|
+
name: "meeting_transcription",
|
|
1842
|
+
description: `Transcribir reuniones en tiempo real y generar informes gerenciales con decisiones, action items y próximos pasos`,
|
|
1843
|
+
category: "meeting",
|
|
1784
1844
|
version: "1.0.0",
|
|
1785
|
-
tools: ["
|
|
1786
|
-
triggers: ["
|
|
1845
|
+
tools: ["meeting_start","meeting_add_segment","meeting_stop","meeting_report","office_escribir_docx","notify","report_progress"],
|
|
1846
|
+
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"],
|
|
1787
1847
|
body: `
|
|
1788
|
-
#
|
|
1848
|
+
# Meeting Transcription Skill
|
|
1789
1849
|
|
|
1790
1850
|
## Cuándo se Activa
|
|
1791
1851
|
|
|
1792
|
-
Esta skill se activa
|
|
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é"
|
|
1852
|
+
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.
|
|
1796
1853
|
|
|
1797
1854
|
## Herramientas Disponibles
|
|
1798
1855
|
|
|
1799
1856
|
| Tool | Qué hace | Cuándo usarla |
|
|
1800
1857
|
|------|----------|---------------|
|
|
1801
|
-
| \`
|
|
1858
|
+
| \`meeting_start\` | Crea una sesión en DB → devuelve session_id | Al iniciar la reunión |
|
|
1859
|
+
| \`meeting_add_segment\` | Transcribe un chunk de audio y lo persiste | Por cada audio recibido |
|
|
1860
|
+
| \`meeting_stop\` | Marca la sesión como detenida | Cuando termina la reunión |
|
|
1861
|
+
| \`meeting_report\` | Lee todos los segmentos y arma el transcript | Para generar el reporte |
|
|
1862
|
+
| \`office_escribir_docx\` | Guarda el reporte como archivo Word | Al finalizar el análisis |
|
|
1863
|
+
| \`notify\` | Envía mensajes en tiempo real al canal | Para mostrar transcripciones y el reporte |
|
|
1864
|
+
| \`report_progress\` | Muestra progreso en barra | Durante transcripción larga |
|
|
1802
1865
|
|
|
1803
|
-
## Workflow
|
|
1866
|
+
## Workflow Completo
|
|
1804
1867
|
|
|
1805
|
-
|
|
1806
|
-
|
|
1807
|
-
|
|
1868
|
+
\`\`\`
|
|
1869
|
+
Usuario: "transcribir reunión"
|
|
1870
|
+
→ Agente pregunta título
|
|
1871
|
+
→ meeting_start(title) → session_id: "abc123"
|
|
1872
|
+
→ Agente: "✅ Sesión abc123 iniciada. Habla cuando quieras."
|
|
1808
1873
|
|
|
1809
|
-
|
|
1874
|
+
[Usuario graba audio en la UI]
|
|
1875
|
+
→ meeting_add_segment(session_id, audio_base64)
|
|
1876
|
+
→ notify: "[Speaker]: Texto transcrito..."
|
|
1810
1877
|
|
|
1811
|
-
|
|
1812
|
-
|
|
1813
|
-
|
|
1814
|
-
- Para config: explicar settings clave en lenguaje simple
|
|
1815
|
-
- Para texto: extraer ideas principales
|
|
1878
|
+
Usuario: "detener reunión"
|
|
1879
|
+
→ meeting_stop(session_id)
|
|
1880
|
+
→ Agente: "⏹️ 47 segmentos transcritos. ¿Genero el reporte?"
|
|
1816
1881
|
|
|
1817
|
-
|
|
1882
|
+
Usuario: "sí"
|
|
1883
|
+
→ meeting_report(session_id) → transcript completo
|
|
1884
|
+
→ LLM analiza → secciones estructuradas
|
|
1885
|
+
→ office_escribir_docx → informe_reunion_abc123.docx
|
|
1886
|
+
→ notify: [Markdown del informe completo]
|
|
1887
|
+
→ Agente: "✅ DOCX guardado en workspace."
|
|
1888
|
+
\`\`\`
|
|
1818
1889
|
|
|
1819
|
-
|
|
1820
|
-
|
|
1821
|
-
|
|
1890
|
+
## Formato del Informe Gerencial
|
|
1891
|
+
|
|
1892
|
+
El informe generado incluye:
|
|
1893
|
+
|
|
1894
|
+
1. **Resumen Ejecutivo** — Captura la esencia en 3-5 oraciones
|
|
1895
|
+
2. **Participantes** — Detectados automáticamente del transcript
|
|
1896
|
+
3. **Decisiones Tomadas** — Lista numerada de cada decisión
|
|
1897
|
+
4. **Action Items** — Tabla con Tarea / Responsable / Fecha
|
|
1898
|
+
5. **Próximos Pasos** — Acciones inmediatas
|
|
1899
|
+
6. **Temas de Seguimiento** — Pendientes para futuras reuniones
|
|
1900
|
+
|
|
1901
|
+
## Consideraciones
|
|
1902
|
+
|
|
1903
|
+
- El informe se entrega en dos formatos: **Markdown en chat** + **DOCX descargable**
|
|
1904
|
+
- El idioma del informe es siempre **español**
|
|
1905
|
+
- La latencia de transcripción es ~4s por chunk de 3s de audio (normal para Whisper)
|
|
1906
|
+
- El session_id debe conservarse durante toda la reunión
|
|
1822
1907
|
`,
|
|
1823
1908
|
},
|
|
1824
1909
|
{
|
|
1825
|
-
name: "
|
|
1826
|
-
description: `
|
|
1827
|
-
category: "
|
|
1910
|
+
name: "cli_safe_exec",
|
|
1911
|
+
description: `Execute shell commands safely with error handling, timeouts, and output validation`,
|
|
1912
|
+
category: "cli",
|
|
1828
1913
|
version: "1.0.0",
|
|
1829
|
-
tools: ["
|
|
1830
|
-
triggers: ["
|
|
1914
|
+
tools: ["exec","terminal"],
|
|
1915
|
+
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"],
|
|
1831
1916
|
body: `
|
|
1832
|
-
#
|
|
1917
|
+
# CLI Safe Exec Skill
|
|
1833
1918
|
|
|
1834
1919
|
## Cuándo se Activa
|
|
1835
1920
|
|
|
1836
|
-
|
|
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
|
|
1921
|
+
Para ejecutar comandos de shell de forma segura con manejo de errores y timeouts.
|
|
1841
1922
|
|
|
1842
1923
|
## Herramientas Disponibles
|
|
1843
1924
|
|
|
1844
1925
|
| Tool | Qué hace | Cuándo usarla |
|
|
1845
1926
|
|------|----------|---------------|
|
|
1846
|
-
| \`
|
|
1847
|
-
| \`
|
|
1848
|
-
|
|
1927
|
+
| \`exec\` | Ejecuta con validación y timeout | Comandos simples (<30s) |
|
|
1928
|
+
| \`terminal\` | Ejecuta con entorno completo | Comandos complejos, Git, npm |
|
|
1929
|
+
|
|
1930
|
+
## ⚠️ ADVERTENCIA CRÍTICA
|
|
1931
|
+
|
|
1932
|
+
**NUNCA usar para tareas programadas** — usar \`cron.create\` en su lugar.
|
|
1849
1933
|
|
|
1850
1934
|
## Workflow
|
|
1851
1935
|
|
|
1852
|
-
1. **
|
|
1853
|
-
2. **
|
|
1854
|
-
3. **
|
|
1936
|
+
1. **Validar** → Comando es seguro, no destructivo
|
|
1937
|
+
2. **Ejecutar** → \`exec\` o \`terminal\` con timeout apropiado
|
|
1938
|
+
3. **Parsear** → Check exitCode, stdout, stderr
|
|
1939
|
+
4. **Manejar error** → Si falló, analizar y sugerir fixes
|
|
1855
1940
|
|
|
1856
|
-
##
|
|
1941
|
+
## Timeouts Apropiados
|
|
1857
1942
|
|
|
1858
|
-
|
|
|
1859
|
-
|
|
1860
|
-
|
|
|
1861
|
-
|
|
|
1862
|
-
|
|
|
1863
|
-
|
|
|
1864
|
-
|
|
|
1943
|
+
| Tipo | Timeout |
|
|
1944
|
+
|------|---------|
|
|
1945
|
+
| Listar archivos | 10s |
|
|
1946
|
+
| Git operations | 30s |
|
|
1947
|
+
| npm install | 120s |
|
|
1948
|
+
| npm run build | 120s |
|
|
1949
|
+
| npm test | 180s |
|
|
1950
|
+
| Docker builds | 300s |
|
|
1865
1951
|
|
|
1866
1952
|
## Errores a Evitar
|
|
1867
1953
|
|
|
1868
|
-
- ❌
|
|
1869
|
-
- ❌
|
|
1870
|
-
- ❌
|
|
1954
|
+
- ❌ Usar para cron (usar cron.create)
|
|
1955
|
+
- ❌ Sin timeout apropiado
|
|
1956
|
+
- ❌ Ignorar exitCode
|
|
1957
|
+
- ❌ Comandos destructivos sin confirmar
|
|
1871
1958
|
`,
|
|
1872
1959
|
},
|
|
1873
1960
|
{
|
|
1874
|
-
name: "
|
|
1875
|
-
description: `
|
|
1876
|
-
category: "
|
|
1877
|
-
version: "
|
|
1878
|
-
tools: ["
|
|
1879
|
-
triggers: ["
|
|
1961
|
+
name: "cli_pipeline",
|
|
1962
|
+
description: `Execute shell commands and pipe output to files for logging and further processing`,
|
|
1963
|
+
category: "cli",
|
|
1964
|
+
version: "1.0.0",
|
|
1965
|
+
tools: ["exec","terminal","project_write"],
|
|
1966
|
+
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"],
|
|
1880
1967
|
body: `
|
|
1881
|
-
#
|
|
1968
|
+
# CLI Pipeline Skill
|
|
1882
1969
|
|
|
1883
1970
|
## Cuándo se Activa
|
|
1884
1971
|
|
|
1885
|
-
Para
|
|
1972
|
+
Para ejecutar comandos y guardar el output en archivos para logging o procesamiento posterior.
|
|
1886
1973
|
|
|
1887
1974
|
## Herramientas Disponibles
|
|
1888
1975
|
|
|
1889
1976
|
| Tool | Qué hace | Cuándo usarla |
|
|
1890
1977
|
|------|----------|---------------|
|
|
1891
|
-
| \`
|
|
1892
|
-
| \`
|
|
1893
|
-
| \`
|
|
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
|
|
1978
|
+
| \`exec\` | Ejecuta comando | Comandos simples |
|
|
1979
|
+
| \`terminal\` | Ejecuta con entorno | Comandos complejos |
|
|
1980
|
+
| \`project_write\` | Escribe archivo | Guardar output |
|
|
1915
1981
|
|
|
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
|
-
\`\`\`
|
|
1982
|
+
## Workflow
|
|
1925
1983
|
|
|
1926
|
-
|
|
1984
|
+
1. **Validar comando** → Seguro para ejecución
|
|
1985
|
+
2. **Ejecutar** → Capturar stdout + stderr
|
|
1986
|
+
3. **Formatear** → Agregar timestamp, comando, metadata
|
|
1987
|
+
4. **Escribir** → \`project_write({ path, content })\`
|
|
1927
1988
|
|
|
1928
|
-
|
|
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 |
|
|
1989
|
+
## Formato de Log
|
|
1935
1990
|
|
|
1936
|
-
|
|
1991
|
+
\`\`\`markdown
|
|
1992
|
+
# Command Log
|
|
1937
1993
|
|
|
1938
|
-
|
|
1939
|
-
-
|
|
1940
|
-
|
|
1994
|
+
**Command**: npm install
|
|
1995
|
+
**Timestamp**: 2025-03-09 14:30:00
|
|
1996
|
+
**Exit Code**: 0
|
|
1997
|
+
**Execution Time**: 45.2s
|
|
1941
1998
|
|
|
1942
|
-
|
|
1999
|
+
---
|
|
1943
2000
|
|
|
1944
|
-
|
|
1945
|
-
- \`1\`: Se ejecuta solo si es EL MISMO día del mes Y el día de semana
|
|
2001
|
+
## Output
|
|
1946
2002
|
|
|
1947
|
-
|
|
2003
|
+
[stdout content...]
|
|
2004
|
+
[stderr if any...]
|
|
2005
|
+
\`\`\`
|
|
1948
2006
|
|
|
1949
|
-
##
|
|
2007
|
+
## Mejores Prácticas
|
|
1950
2008
|
|
|
1951
|
-
|
|
1952
|
-
|
|
1953
|
-
|
|
1954
|
-
|
|
2009
|
+
- Filenames con timestamp para tracking
|
|
2010
|
+
- Incluir metadata completa (exitCode, tiempo)
|
|
2011
|
+
- Capturar stdout y stderr
|
|
2012
|
+
- Para outputs grandes, escribir incrementalmente
|
|
1955
2013
|
|
|
1956
2014
|
## Errores a Evitar
|
|
1957
2015
|
|
|
1958
|
-
- ❌
|
|
1959
|
-
- ❌
|
|
1960
|
-
- ❌ No
|
|
1961
|
-
|
|
1962
|
-
- ❌ Llamar \`cron.update\` sin \`task_id\` — siempre hacer \`cron.list\` primero`,
|
|
2016
|
+
- ❌ No incluir metadata en log
|
|
2017
|
+
- ❌ Filenames genéricos sin timestamp
|
|
2018
|
+
- ❌ No capturar stderr
|
|
2019
|
+
`,
|
|
1963
2020
|
},
|
|
1964
2021
|
];
|