zilmate 1.7.8 → 1.8.0
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/.agents/skills/agent-browser/SKILL.md +55 -0
- package/.agents/skills/agentmail/SKILL.md +282 -0
- package/.agents/skills/agentmail/references/webhooks.md +220 -0
- package/.agents/skills/agentmail/references/websockets.md +263 -0
- package/.agents/skills/ai-elements/SKILL.md +160 -0
- package/.agents/skills/ai-elements/references/agent.md +134 -0
- package/.agents/skills/ai-elements/references/artifact.md +84 -0
- package/.agents/skills/ai-elements/references/attachments.md +190 -0
- package/.agents/skills/ai-elements/references/audio-player.md +134 -0
- package/.agents/skills/ai-elements/references/canvas.md +34 -0
- package/.agents/skills/ai-elements/references/chain-of-thought.md +81 -0
- package/.agents/skills/ai-elements/references/checkpoint.md +183 -0
- package/.agents/skills/ai-elements/references/code-block.md +170 -0
- package/.agents/skills/ai-elements/references/commit.md +177 -0
- package/.agents/skills/ai-elements/references/confirmation.md +262 -0
- package/.agents/skills/ai-elements/references/connection.md +34 -0
- package/.agents/skills/ai-elements/references/context.md +126 -0
- package/.agents/skills/ai-elements/references/controls.md +32 -0
- package/.agents/skills/ai-elements/references/conversation.md +224 -0
- package/.agents/skills/ai-elements/references/edge.md +52 -0
- package/.agents/skills/ai-elements/references/environment-variables.md +102 -0
- package/.agents/skills/ai-elements/references/file-tree.md +72 -0
- package/.agents/skills/ai-elements/references/image.md +146 -0
- package/.agents/skills/ai-elements/references/inline-citation.md +299 -0
- package/.agents/skills/ai-elements/references/jsx-preview.md +104 -0
- package/.agents/skills/ai-elements/references/message.md +237 -0
- package/.agents/skills/ai-elements/references/mic-selector.md +189 -0
- package/.agents/skills/ai-elements/references/model-selector.md +112 -0
- package/.agents/skills/ai-elements/references/node.md +73 -0
- package/.agents/skills/ai-elements/references/open-in-chat.md +67 -0
- package/.agents/skills/ai-elements/references/package-info.md +95 -0
- package/.agents/skills/ai-elements/references/panel.md +33 -0
- package/.agents/skills/ai-elements/references/persona.md +166 -0
- package/.agents/skills/ai-elements/references/plan.md +79 -0
- package/.agents/skills/ai-elements/references/prompt-input.md +579 -0
- package/.agents/skills/ai-elements/references/queue.md +172 -0
- package/.agents/skills/ai-elements/references/reasoning.md +238 -0
- package/.agents/skills/ai-elements/references/sandbox.md +129 -0
- package/.agents/skills/ai-elements/references/schema-display.md +102 -0
- package/.agents/skills/ai-elements/references/shimmer.md +48 -0
- package/.agents/skills/ai-elements/references/snippet.md +64 -0
- package/.agents/skills/ai-elements/references/sources.md +209 -0
- package/.agents/skills/ai-elements/references/speech-input.md +163 -0
- package/.agents/skills/ai-elements/references/stack-trace.md +224 -0
- package/.agents/skills/ai-elements/references/suggestion.md +124 -0
- package/.agents/skills/ai-elements/references/task.md +222 -0
- package/.agents/skills/ai-elements/references/terminal.md +103 -0
- package/.agents/skills/ai-elements/references/test-results.md +157 -0
- package/.agents/skills/ai-elements/references/tool.md +285 -0
- package/.agents/skills/ai-elements/references/toolbar.md +32 -0
- package/.agents/skills/ai-elements/references/transcription.md +120 -0
- package/.agents/skills/ai-elements/references/voice-selector.md +241 -0
- package/.agents/skills/ai-elements/references/web-preview.md +200 -0
- package/.agents/skills/ai-elements/scripts/agent.tsx +61 -0
- package/.agents/skills/ai-elements/scripts/artifact.tsx +127 -0
- package/.agents/skills/ai-elements/scripts/attachments-inline.tsx +128 -0
- package/.agents/skills/ai-elements/scripts/attachments-list.tsx +95 -0
- package/.agents/skills/ai-elements/scripts/attachments.tsx +85 -0
- package/.agents/skills/ai-elements/scripts/audio-player-remote.tsx +35 -0
- package/.agents/skills/ai-elements/scripts/audio-player.tsx +68 -0
- package/.agents/skills/ai-elements/scripts/chain-of-thought.tsx +82 -0
- package/.agents/skills/ai-elements/scripts/checkpoint.tsx +110 -0
- package/.agents/skills/ai-elements/scripts/code-block-dark.tsx +46 -0
- package/.agents/skills/ai-elements/scripts/code-block.tsx +120 -0
- package/.agents/skills/ai-elements/scripts/commit.tsx +94 -0
- package/.agents/skills/ai-elements/scripts/confirmation-accepted.tsx +40 -0
- package/.agents/skills/ai-elements/scripts/confirmation-rejected.tsx +40 -0
- package/.agents/skills/ai-elements/scripts/confirmation-request.tsx +54 -0
- package/.agents/skills/ai-elements/scripts/confirmation.tsx +55 -0
- package/.agents/skills/ai-elements/scripts/context.tsx +45 -0
- package/.agents/skills/ai-elements/scripts/conversation.tsx +177 -0
- package/.agents/skills/ai-elements/scripts/environment-variables.tsx +62 -0
- package/.agents/skills/ai-elements/scripts/file-tree-basic.tsx +18 -0
- package/.agents/skills/ai-elements/scripts/file-tree-expanded.tsx +21 -0
- package/.agents/skills/ai-elements/scripts/file-tree-selection.tsx +24 -0
- package/.agents/skills/ai-elements/scripts/file-tree.tsx +42 -0
- package/.agents/skills/ai-elements/scripts/image.tsx +20 -0
- package/.agents/skills/ai-elements/scripts/inline-citation.tsx +97 -0
- package/.agents/skills/ai-elements/scripts/jsx-preview.tsx +104 -0
- package/.agents/skills/ai-elements/scripts/message.tsx +365 -0
- package/.agents/skills/ai-elements/scripts/mic-selector.tsx +49 -0
- package/.agents/skills/ai-elements/scripts/model-selector.tsx +365 -0
- package/.agents/skills/ai-elements/scripts/open-in-chat.tsx +33 -0
- package/.agents/skills/ai-elements/scripts/package-info.tsx +51 -0
- package/.agents/skills/ai-elements/scripts/persona-command.tsx +110 -0
- package/.agents/skills/ai-elements/scripts/persona-glint.tsx +110 -0
- package/.agents/skills/ai-elements/scripts/persona-halo.tsx +110 -0
- package/.agents/skills/ai-elements/scripts/persona-mana.tsx +110 -0
- package/.agents/skills/ai-elements/scripts/persona-obsidian.tsx +110 -0
- package/.agents/skills/ai-elements/scripts/persona-opal.tsx +110 -0
- package/.agents/skills/ai-elements/scripts/plan.tsx +65 -0
- package/.agents/skills/ai-elements/scripts/prompt-input-cursor.tsx +502 -0
- package/.agents/skills/ai-elements/scripts/prompt-input-tooltip.tsx +44 -0
- package/.agents/skills/ai-elements/scripts/prompt-input.tsx +267 -0
- package/.agents/skills/ai-elements/scripts/queue-prompt-input.tsx +394 -0
- package/.agents/skills/ai-elements/scripts/queue.tsx +295 -0
- package/.agents/skills/ai-elements/scripts/reasoning.tsx +71 -0
- package/.agents/skills/ai-elements/scripts/sandbox.tsx +178 -0
- package/.agents/skills/ai-elements/scripts/schema-display-basic.tsx +9 -0
- package/.agents/skills/ai-elements/scripts/schema-display-body.tsx +20 -0
- package/.agents/skills/ai-elements/scripts/schema-display-nested.tsx +23 -0
- package/.agents/skills/ai-elements/scripts/schema-display-params.tsx +16 -0
- package/.agents/skills/ai-elements/scripts/schema-display.tsx +110 -0
- package/.agents/skills/ai-elements/scripts/shimmer-duration.tsx +31 -0
- package/.agents/skills/ai-elements/scripts/shimmer-elements.tsx +43 -0
- package/.agents/skills/ai-elements/scripts/shimmer.tsx +17 -0
- package/.agents/skills/ai-elements/scripts/snippet-plain.tsx +19 -0
- package/.agents/skills/ai-elements/scripts/snippet.tsx +25 -0
- package/.agents/skills/ai-elements/scripts/sources-custom.tsx +39 -0
- package/.agents/skills/ai-elements/scripts/sources.tsx +32 -0
- package/.agents/skills/ai-elements/scripts/speech-input.tsx +84 -0
- package/.agents/skills/ai-elements/scripts/stack-trace-collapsed.tsx +39 -0
- package/.agents/skills/ai-elements/scripts/stack-trace-no-internal.tsx +41 -0
- package/.agents/skills/ai-elements/scripts/stack-trace.tsx +58 -0
- package/.agents/skills/ai-elements/scripts/suggestion-input.tsx +144 -0
- package/.agents/skills/ai-elements/scripts/suggestion.tsx +32 -0
- package/.agents/skills/ai-elements/scripts/task.tsx +59 -0
- package/.agents/skills/ai-elements/scripts/terminal-basic.tsx +7 -0
- package/.agents/skills/ai-elements/scripts/terminal-clear.tsx +19 -0
- package/.agents/skills/ai-elements/scripts/terminal-streaming.tsx +38 -0
- package/.agents/skills/ai-elements/scripts/terminal.tsx +82 -0
- package/.agents/skills/ai-elements/scripts/test-results-basic.tsx +27 -0
- package/.agents/skills/ai-elements/scripts/test-results-errors.tsx +51 -0
- package/.agents/skills/ai-elements/scripts/test-results-suites.tsx +40 -0
- package/.agents/skills/ai-elements/scripts/test-results.tsx +102 -0
- package/.agents/skills/ai-elements/scripts/tool-input-available.tsx +31 -0
- package/.agents/skills/ai-elements/scripts/tool-input-streaming.tsx +30 -0
- package/.agents/skills/ai-elements/scripts/tool-output-available.tsx +80 -0
- package/.agents/skills/ai-elements/scripts/tool-output-error.tsx +44 -0
- package/.agents/skills/ai-elements/scripts/tool.tsx +222 -0
- package/.agents/skills/ai-elements/scripts/transcription.tsx +290 -0
- package/.agents/skills/ai-elements/scripts/voice-selector.tsx +245 -0
- package/.agents/skills/ai-elements/scripts/web-preview.tsx +115 -0
- package/.agents/skills/ai-sdk/SKILL.md +78 -0
- package/.agents/skills/ai-sdk/references/ai-gateway.md +66 -0
- package/.agents/skills/ai-sdk/references/common-errors.md +443 -0
- package/.agents/skills/ai-sdk/references/devtools.md +52 -0
- package/.agents/skills/ai-sdk/references/type-safe-agents.md +204 -0
- package/.agents/skills/chat-sdk/SKILL.md +240 -0
- package/.agents/skills/composio/AGENTS.md +404 -0
- package/.agents/skills/composio/SKILL.md +55 -0
- package/.agents/skills/composio/rules/_template.md +38 -0
- package/.agents/skills/composio/rules/app-auth-configs.md +224 -0
- package/.agents/skills/composio/rules/app-auth-popup-ui.md +143 -0
- package/.agents/skills/composio/rules/app-connected-accounts.md +240 -0
- package/.agents/skills/composio/rules/app-custom-tools.md +220 -0
- package/.agents/skills/composio/rules/app-execute-tools.md +202 -0
- package/.agents/skills/composio/rules/app-fetch-tools.md +292 -0
- package/.agents/skills/composio/rules/app-modifiers.md +148 -0
- package/.agents/skills/composio/rules/app-tool-versions.md +343 -0
- package/.agents/skills/composio/rules/app-toolkits.md +184 -0
- package/.agents/skills/composio/rules/app-user-context.md +222 -0
- package/.agents/skills/composio/rules/building-with-composio.md +134 -0
- package/.agents/skills/composio/rules/composio-cli.md +223 -0
- package/.agents/skills/composio/rules/setup-api-keys.md +230 -0
- package/.agents/skills/composio/rules/tr-auth-auto.md +110 -0
- package/.agents/skills/composio/rules/tr-auth-connections.md +167 -0
- package/.agents/skills/composio/rules/tr-auth-manual.md +161 -0
- package/.agents/skills/composio/rules/tr-building-chat-ui.md +348 -0
- package/.agents/skills/composio/rules/tr-framework-ai-sdk.md +240 -0
- package/.agents/skills/composio/rules/tr-framework-integration.md +818 -0
- package/.agents/skills/composio/rules/tr-framework-mastra.md +185 -0
- package/.agents/skills/composio/rules/tr-mcp-vs-native.md +248 -0
- package/.agents/skills/composio/rules/tr-session-basic.md +82 -0
- package/.agents/skills/composio/rules/tr-session-config.md +172 -0
- package/.agents/skills/composio/rules/tr-session-lifecycle.md +385 -0
- package/.agents/skills/composio/rules/tr-toolkit-query.md +135 -0
- package/.agents/skills/composio/rules/tr-userid-best-practices.md +476 -0
- package/.agents/skills/composio/rules/triggers-create.md +246 -0
- package/.agents/skills/composio/rules/triggers-manage.md +275 -0
- package/.agents/skills/composio/rules/triggers-subscribe.md +173 -0
- package/.agents/skills/composio/rules/triggers-webhook.md +227 -0
- package/.agents/skills/create-auth-skill/SKILL.md +321 -0
- package/.agents/skills/design-md/README.md +34 -0
- package/.agents/skills/design-md/SKILL.md +172 -0
- package/.agents/skills/design-md/examples/DESIGN.md +154 -0
- package/.agents/skills/expo-tailwind-setup/SKILL.md +480 -0
- package/.agents/skills/expo-tailwind-setup/agents/openai.yaml +4 -0
- package/.agents/skills/find-skills/SKILL.md +142 -0
- package/.agents/skills/firecrawl/SKILL.md +321 -0
- package/.agents/skills/firecrawl/rules/install.md +85 -0
- package/.agents/skills/firecrawl/rules/security.md +26 -0
- package/.agents/skills/frontend-design/LICENSE.txt +177 -0
- package/.agents/skills/frontend-design/SKILL.md +55 -0
- package/.agents/skills/linkup-search/SKILL.md +298 -0
- package/.agents/skills/mcp-builder/LICENSE.txt +202 -0
- package/.agents/skills/mcp-builder/SKILL.md +236 -0
- package/.agents/skills/mcp-builder/reference/evaluation.md +602 -0
- package/.agents/skills/mcp-builder/reference/mcp_best_practices.md +249 -0
- package/.agents/skills/mcp-builder/reference/node_mcp_server.md +970 -0
- package/.agents/skills/mcp-builder/reference/python_mcp_server.md +719 -0
- package/.agents/skills/mcp-builder/scripts/connections.py +151 -0
- package/.agents/skills/mcp-builder/scripts/evaluation.py +373 -0
- package/.agents/skills/mcp-builder/scripts/example_evaluation.xml +22 -0
- package/.agents/skills/mcp-builder/scripts/requirements.txt +2 -0
- package/.agents/skills/mobile-android-design/SKILL.md +101 -0
- package/.agents/skills/mobile-android-design/references/android-navigation.md +698 -0
- package/.agents/skills/mobile-android-design/references/compose-components.md +796 -0
- package/.agents/skills/mobile-android-design/references/details.md +337 -0
- package/.agents/skills/mobile-android-design/references/material3-theming.md +604 -0
- package/.agents/skills/mobile-ios-design/SKILL.md +259 -0
- package/.agents/skills/mobile-ios-design/references/hig-patterns.md +529 -0
- package/.agents/skills/mobile-ios-design/references/ios-navigation.md +556 -0
- package/.agents/skills/mobile-ios-design/references/swiftui-components.md +575 -0
- package/.agents/skills/neon-drizzle/SKILL.md +81 -0
- package/.agents/skills/neon-drizzle/guides/existing-project.md +398 -0
- package/.agents/skills/neon-drizzle/guides/new-project.md +312 -0
- package/.agents/skills/neon-drizzle/guides/schema-only.md +415 -0
- package/.agents/skills/neon-drizzle/guides/troubleshooting.md +539 -0
- package/.agents/skills/neon-drizzle/references/adapters.md +478 -0
- package/.agents/skills/neon-drizzle/references/migrations.md +652 -0
- package/.agents/skills/neon-drizzle/references/query-patterns.md +761 -0
- package/.agents/skills/neon-drizzle/scripts/generate-schema.ts +77 -0
- package/.agents/skills/neon-drizzle/scripts/run-migration.ts +133 -0
- package/.agents/skills/neon-drizzle/templates/db-http.ts +6 -0
- package/.agents/skills/neon-drizzle/templates/db-websocket.ts +24 -0
- package/.agents/skills/neon-drizzle/templates/drizzle-config.ts +96 -0
- package/.agents/skills/neon-drizzle/templates/schema-example.ts +231 -0
- package/.agents/skills/neon-postgres/SKILL.md +376 -0
- package/.agents/skills/next-best-practices/SKILL.md +152 -0
- package/.agents/skills/next-best-practices/async-patterns.md +87 -0
- package/.agents/skills/next-best-practices/bundling.md +180 -0
- package/.agents/skills/next-best-practices/data-patterns.md +297 -0
- package/.agents/skills/next-best-practices/debug-tricks.md +105 -0
- package/.agents/skills/next-best-practices/directives.md +73 -0
- package/.agents/skills/next-best-practices/error-handling.md +227 -0
- package/.agents/skills/next-best-practices/file-conventions.md +140 -0
- package/.agents/skills/next-best-practices/font.md +245 -0
- package/.agents/skills/next-best-practices/functions.md +108 -0
- package/.agents/skills/next-best-practices/hydration-error.md +91 -0
- package/.agents/skills/next-best-practices/image.md +173 -0
- package/.agents/skills/next-best-practices/metadata.md +301 -0
- package/.agents/skills/next-best-practices/parallel-routes.md +287 -0
- package/.agents/skills/next-best-practices/route-handlers.md +146 -0
- package/.agents/skills/next-best-practices/rsc-boundaries.md +159 -0
- package/.agents/skills/next-best-practices/runtime-selection.md +39 -0
- package/.agents/skills/next-best-practices/scripts.md +141 -0
- package/.agents/skills/next-best-practices/self-hosting.md +371 -0
- package/.agents/skills/next-best-practices/suspense-boundaries.md +67 -0
- package/.agents/skills/playwright-best-practices/SKILL.md +303 -0
- package/.agents/skills/playwright-cli/SKILL.md +404 -0
- package/.agents/skills/playwright-cli/references/element-attributes.md +23 -0
- package/.agents/skills/playwright-cli/references/playwright-tests.md +39 -0
- package/.agents/skills/playwright-cli/references/request-mocking.md +87 -0
- package/.agents/skills/playwright-cli/references/running-code.md +241 -0
- package/.agents/skills/playwright-cli/references/session-management.md +225 -0
- package/.agents/skills/playwright-cli/references/spec-driven-testing.md +305 -0
- package/.agents/skills/playwright-cli/references/storage-state.md +275 -0
- package/.agents/skills/playwright-cli/references/test-generation.md +134 -0
- package/.agents/skills/playwright-cli/references/tracing.md +139 -0
- package/.agents/skills/playwright-cli/references/video-recording.md +143 -0
- package/.agents/skills/prisma-client-api/SKILL.md +216 -0
- package/.agents/skills/prisma-client-api/references/client-methods.md +223 -0
- package/.agents/skills/prisma-client-api/references/constructor.md +208 -0
- package/.agents/skills/prisma-client-api/references/filters.md +256 -0
- package/.agents/skills/prisma-client-api/references/model-queries.md +281 -0
- package/.agents/skills/prisma-client-api/references/query-options.md +276 -0
- package/.agents/skills/prisma-client-api/references/raw-queries.md +194 -0
- package/.agents/skills/prisma-client-api/references/relations.md +308 -0
- package/.agents/skills/prisma-client-api/references/transactions.md +184 -0
- package/.agents/skills/prisma-database-setup/SKILL.md +192 -0
- package/.agents/skills/prisma-database-setup/references/cockroachdb.md +89 -0
- package/.agents/skills/prisma-database-setup/references/mongodb.md +90 -0
- package/.agents/skills/prisma-database-setup/references/mysql.md +126 -0
- package/.agents/skills/prisma-database-setup/references/postgresql.md +92 -0
- package/.agents/skills/prisma-database-setup/references/prisma-client-setup.md +47 -0
- package/.agents/skills/prisma-database-setup/references/prisma-postgres.md +130 -0
- package/.agents/skills/prisma-database-setup/references/sqlite.md +106 -0
- package/.agents/skills/prisma-database-setup/references/sqlserver.md +94 -0
- package/.agents/skills/prisma-postgres/SKILL.md +127 -0
- package/.agents/skills/prisma-postgres/references/console-and-connections.md +67 -0
- package/.agents/skills/prisma-postgres/references/create-db-cli.md +136 -0
- package/.agents/skills/prisma-postgres/references/management-api-sdk.md +56 -0
- package/.agents/skills/prisma-postgres/references/management-api.md +61 -0
- package/.agents/skills/remotion-best-practices/SKILL.md +340 -0
- package/.agents/skills/remotion-best-practices/rules/3d.md +86 -0
- package/.agents/skills/remotion-best-practices/rules/assets/charts-bar-chart.tsx +173 -0
- package/.agents/skills/remotion-best-practices/rules/assets/text-animations-typewriter.tsx +100 -0
- package/.agents/skills/remotion-best-practices/rules/assets/text-animations-word-highlight.tsx +103 -0
- package/.agents/skills/remotion-best-practices/rules/audio-visualization.md +198 -0
- package/.agents/skills/remotion-best-practices/rules/audio.md +169 -0
- package/.agents/skills/remotion-best-practices/rules/calculate-metadata.md +134 -0
- package/.agents/skills/remotion-best-practices/rules/compositions.md +133 -0
- package/.agents/skills/remotion-best-practices/rules/display-captions.md +184 -0
- package/.agents/skills/remotion-best-practices/rules/ffmpeg.md +34 -0
- package/.agents/skills/remotion-best-practices/rules/get-audio-duration.md +58 -0
- package/.agents/skills/remotion-best-practices/rules/get-video-dimensions.md +68 -0
- package/.agents/skills/remotion-best-practices/rules/get-video-duration.md +60 -0
- package/.agents/skills/remotion-best-practices/rules/gifs.md +141 -0
- package/.agents/skills/remotion-best-practices/rules/google-fonts.md +72 -0
- package/.agents/skills/remotion-best-practices/rules/html-in-canvas.md +122 -0
- package/.agents/skills/remotion-best-practices/rules/images.md +71 -0
- package/.agents/skills/remotion-best-practices/rules/import-srt-captions.md +69 -0
- package/.agents/skills/remotion-best-practices/rules/light-leaks.md +73 -0
- package/.agents/skills/remotion-best-practices/rules/local-fonts.md +65 -0
- package/.agents/skills/remotion-best-practices/rules/lottie.md +70 -0
- package/.agents/skills/remotion-best-practices/rules/maplibre.md +458 -0
- package/.agents/skills/remotion-best-practices/rules/measuring-dom-nodes.md +34 -0
- package/.agents/skills/remotion-best-practices/rules/measuring-text.md +140 -0
- package/.agents/skills/remotion-best-practices/rules/parameters.md +109 -0
- package/.agents/skills/remotion-best-practices/rules/sequencing.md +144 -0
- package/.agents/skills/remotion-best-practices/rules/sfx.md +30 -0
- package/.agents/skills/remotion-best-practices/rules/silence-detection.md +71 -0
- package/.agents/skills/remotion-best-practices/rules/subtitles.md +36 -0
- package/.agents/skills/remotion-best-practices/rules/tailwind.md +11 -0
- package/.agents/skills/remotion-best-practices/rules/text-animations.md +20 -0
- package/.agents/skills/remotion-best-practices/rules/timing.md +136 -0
- package/.agents/skills/remotion-best-practices/rules/transcribe-captions.md +70 -0
- package/.agents/skills/remotion-best-practices/rules/transitions.md +197 -0
- package/.agents/skills/remotion-best-practices/rules/transparent-videos.md +106 -0
- package/.agents/skills/remotion-best-practices/rules/trimming.md +51 -0
- package/.agents/skills/remotion-best-practices/rules/videos.md +171 -0
- package/.agents/skills/remotion-best-practices/rules/voiceover.md +99 -0
- package/.agents/skills/remotion-render/SKILL.md +212 -0
- package/.agents/skills/skill-creator/LICENSE.txt +202 -0
- package/.agents/skills/skill-creator/SKILL.md +485 -0
- package/.agents/skills/skill-creator/agents/analyzer.md +274 -0
- package/.agents/skills/skill-creator/agents/comparator.md +202 -0
- package/.agents/skills/skill-creator/agents/grader.md +223 -0
- package/.agents/skills/skill-creator/assets/eval_review.html +146 -0
- package/.agents/skills/skill-creator/eval-viewer/generate_review.py +471 -0
- package/.agents/skills/skill-creator/eval-viewer/viewer.html +1325 -0
- package/.agents/skills/skill-creator/references/schemas.md +430 -0
- package/.agents/skills/skill-creator/scripts/__init__.py +0 -0
- package/.agents/skills/skill-creator/scripts/aggregate_benchmark.py +401 -0
- package/.agents/skills/skill-creator/scripts/generate_report.py +326 -0
- package/.agents/skills/skill-creator/scripts/improve_description.py +247 -0
- package/.agents/skills/skill-creator/scripts/package_skill.py +136 -0
- package/.agents/skills/skill-creator/scripts/quick_validate.py +103 -0
- package/.agents/skills/skill-creator/scripts/run_eval.py +310 -0
- package/.agents/skills/skill-creator/scripts/run_loop.py +328 -0
- package/.agents/skills/skill-creator/scripts/utils.py +47 -0
- package/.agents/skills/stripe-best-practices/SKILL.md +54 -0
- package/.agents/skills/stripe-best-practices/references/billing.md +58 -0
- package/.agents/skills/stripe-best-practices/references/connect.md +173 -0
- package/.agents/skills/stripe-best-practices/references/payments.md +79 -0
- package/.agents/skills/stripe-best-practices/references/security.md +109 -0
- package/.agents/skills/stripe-best-practices/references/tax.md +37 -0
- package/.agents/skills/stripe-best-practices/references/treasury.md +16 -0
- package/.agents/skills/stripe-projects/SKILL.md +132 -0
- package/.agents/skills/supabase/CHANGELOG.md +35 -0
- package/.agents/skills/supabase/SKILL.md +135 -0
- package/.agents/skills/supabase/assets/feedback-issue-template.md +17 -0
- package/.agents/skills/supabase/references/skill-feedback.md +17 -0
- package/.agents/skills/supabase-postgres-best-practices/CHANGELOG.md +29 -0
- package/.agents/skills/supabase-postgres-best-practices/SKILL.md +64 -0
- package/.agents/skills/supabase-postgres-best-practices/references/_contributing.md +170 -0
- package/.agents/skills/supabase-postgres-best-practices/references/_sections.md +39 -0
- package/.agents/skills/supabase-postgres-best-practices/references/_template.md +34 -0
- package/.agents/skills/supabase-postgres-best-practices/references/advanced-full-text-search.md +55 -0
- package/.agents/skills/supabase-postgres-best-practices/references/advanced-jsonb-indexing.md +49 -0
- package/.agents/skills/supabase-postgres-best-practices/references/conn-idle-timeout.md +46 -0
- package/.agents/skills/supabase-postgres-best-practices/references/conn-limits.md +44 -0
- package/.agents/skills/supabase-postgres-best-practices/references/conn-pooling.md +41 -0
- package/.agents/skills/supabase-postgres-best-practices/references/conn-prepared-statements.md +46 -0
- package/.agents/skills/supabase-postgres-best-practices/references/data-batch-inserts.md +54 -0
- package/.agents/skills/supabase-postgres-best-practices/references/data-n-plus-one.md +53 -0
- package/.agents/skills/supabase-postgres-best-practices/references/data-pagination.md +50 -0
- package/.agents/skills/supabase-postgres-best-practices/references/data-upsert.md +50 -0
- package/.agents/skills/supabase-postgres-best-practices/references/lock-advisory.md +56 -0
- package/.agents/skills/supabase-postgres-best-practices/references/lock-deadlock-prevention.md +68 -0
- package/.agents/skills/supabase-postgres-best-practices/references/lock-short-transactions.md +50 -0
- package/.agents/skills/supabase-postgres-best-practices/references/lock-skip-locked.md +54 -0
- package/.agents/skills/supabase-postgres-best-practices/references/monitor-explain-analyze.md +45 -0
- package/.agents/skills/supabase-postgres-best-practices/references/monitor-pg-stat-statements.md +55 -0
- package/.agents/skills/supabase-postgres-best-practices/references/monitor-vacuum-analyze.md +55 -0
- package/.agents/skills/supabase-postgres-best-practices/references/query-composite-indexes.md +44 -0
- package/.agents/skills/supabase-postgres-best-practices/references/query-covering-indexes.md +40 -0
- package/.agents/skills/supabase-postgres-best-practices/references/query-index-types.md +48 -0
- package/.agents/skills/supabase-postgres-best-practices/references/query-missing-indexes.md +43 -0
- package/.agents/skills/supabase-postgres-best-practices/references/query-partial-indexes.md +45 -0
- package/.agents/skills/supabase-postgres-best-practices/references/schema-constraints.md +80 -0
- package/.agents/skills/supabase-postgres-best-practices/references/schema-data-types.md +46 -0
- package/.agents/skills/supabase-postgres-best-practices/references/schema-foreign-key-indexes.md +59 -0
- package/.agents/skills/supabase-postgres-best-practices/references/schema-lowercase-identifiers.md +55 -0
- package/.agents/skills/supabase-postgres-best-practices/references/schema-partitioning.md +55 -0
- package/.agents/skills/supabase-postgres-best-practices/references/schema-primary-keys.md +61 -0
- package/.agents/skills/supabase-postgres-best-practices/references/security-privileges.md +54 -0
- package/.agents/skills/supabase-postgres-best-practices/references/security-rls-basics.md +50 -0
- package/.agents/skills/supabase-postgres-best-practices/references/security-rls-performance.md +63 -0
- package/.agents/skills/supermemory/LICENSE +201 -0
- package/.agents/skills/supermemory/README.md +221 -0
- package/.agents/skills/supermemory/SKILL.md +172 -0
- package/.agents/skills/supermemory/references/api-reference.md +591 -0
- package/.agents/skills/supermemory/references/architecture.md +557 -0
- package/.agents/skills/supermemory/references/quickstart.md +293 -0
- package/.agents/skills/supermemory/references/sdk-guide.md +655 -0
- package/.agents/skills/supermemory/references/use-cases.md +1033 -0
- package/.agents/skills/supermemory-cli/SKILL.md +490 -0
- package/.agents/skills/tdd/SKILL.md +108 -0
- package/.agents/skills/tdd/mocking.md +59 -0
- package/.agents/skills/tdd/refactoring.md +10 -0
- package/.agents/skills/tdd/tests.md +61 -0
- package/.agents/skills/ui-ux-pro-max/SKILL.md +661 -0
- package/.agents/skills/ui-ux-pro-max/data +1 -0
- package/.agents/skills/ui-ux-pro-max/scripts +1 -0
- package/.agents/skills/vercel-react-native-skills/AGENTS.md +2897 -0
- package/.agents/skills/vercel-react-native-skills/README.md +165 -0
- package/.agents/skills/vercel-react-native-skills/SKILL.md +121 -0
- package/.agents/skills/vercel-react-native-skills/metadata.json +16 -0
- package/.agents/skills/vercel-react-native-skills/rules/_sections.md +86 -0
- package/.agents/skills/vercel-react-native-skills/rules/_template.md +28 -0
- package/.agents/skills/vercel-react-native-skills/rules/animation-derived-value.md +53 -0
- package/.agents/skills/vercel-react-native-skills/rules/animation-gesture-detector-press.md +95 -0
- package/.agents/skills/vercel-react-native-skills/rules/animation-gpu-properties.md +65 -0
- package/.agents/skills/vercel-react-native-skills/rules/design-system-compound-components.md +66 -0
- package/.agents/skills/vercel-react-native-skills/rules/fonts-config-plugin.md +71 -0
- package/.agents/skills/vercel-react-native-skills/rules/imports-design-system-folder.md +68 -0
- package/.agents/skills/vercel-react-native-skills/rules/js-hoist-intl.md +61 -0
- package/.agents/skills/vercel-react-native-skills/rules/list-performance-callbacks.md +44 -0
- package/.agents/skills/vercel-react-native-skills/rules/list-performance-function-references.md +132 -0
- package/.agents/skills/vercel-react-native-skills/rules/list-performance-images.md +53 -0
- package/.agents/skills/vercel-react-native-skills/rules/list-performance-inline-objects.md +97 -0
- package/.agents/skills/vercel-react-native-skills/rules/list-performance-item-expensive.md +94 -0
- package/.agents/skills/vercel-react-native-skills/rules/list-performance-item-memo.md +82 -0
- package/.agents/skills/vercel-react-native-skills/rules/list-performance-item-types.md +104 -0
- package/.agents/skills/vercel-react-native-skills/rules/list-performance-virtualize.md +67 -0
- package/.agents/skills/vercel-react-native-skills/rules/monorepo-native-deps-in-app.md +46 -0
- package/.agents/skills/vercel-react-native-skills/rules/monorepo-single-dependency-versions.md +63 -0
- package/.agents/skills/vercel-react-native-skills/rules/navigation-native-navigators.md +188 -0
- package/.agents/skills/vercel-react-native-skills/rules/react-compiler-destructure-functions.md +50 -0
- package/.agents/skills/vercel-react-native-skills/rules/react-compiler-reanimated-shared-values.md +48 -0
- package/.agents/skills/vercel-react-native-skills/rules/react-state-dispatcher.md +91 -0
- package/.agents/skills/vercel-react-native-skills/rules/react-state-fallback.md +56 -0
- package/.agents/skills/vercel-react-native-skills/rules/react-state-minimize.md +65 -0
- package/.agents/skills/vercel-react-native-skills/rules/rendering-no-falsy-and.md +74 -0
- package/.agents/skills/vercel-react-native-skills/rules/rendering-text-in-text-component.md +36 -0
- package/.agents/skills/vercel-react-native-skills/rules/scroll-position-no-state.md +82 -0
- package/.agents/skills/vercel-react-native-skills/rules/state-ground-truth.md +80 -0
- package/.agents/skills/vercel-react-native-skills/rules/ui-expo-image.md +66 -0
- package/.agents/skills/vercel-react-native-skills/rules/ui-image-gallery.md +104 -0
- package/.agents/skills/vercel-react-native-skills/rules/ui-measure-views.md +78 -0
- package/.agents/skills/vercel-react-native-skills/rules/ui-menus.md +174 -0
- package/.agents/skills/vercel-react-native-skills/rules/ui-native-modals.md +77 -0
- package/.agents/skills/vercel-react-native-skills/rules/ui-pressable.md +61 -0
- package/.agents/skills/vercel-react-native-skills/rules/ui-safe-area-scroll.md +65 -0
- package/.agents/skills/vercel-react-native-skills/rules/ui-scrollview-content-inset.md +45 -0
- package/.agents/skills/vercel-react-native-skills/rules/ui-styling.md +87 -0
- package/.agents/skills/web-design-guidelines/SKILL.md +39 -0
- package/dist/index.js +1 -1
- package/package.json +2 -1
|
@@ -0,0 +1,275 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Manage Trigger Lifecycle (Enable, Disable, Update)
|
|
3
|
+
impact: HIGH
|
|
4
|
+
description: Control trigger states, update configurations, and manage trigger instances
|
|
5
|
+
tags: [triggers, lifecycle, enable, disable, update, management]
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Manage Trigger Lifecycle
|
|
9
|
+
|
|
10
|
+
Control trigger states and configurations without recreating triggers.
|
|
11
|
+
|
|
12
|
+
## Enable/Disable Triggers
|
|
13
|
+
|
|
14
|
+
```typescript
|
|
15
|
+
// Disable trigger (stop receiving events)
|
|
16
|
+
await composio.triggers.disable('trigger_id_123');
|
|
17
|
+
|
|
18
|
+
// Enable trigger (resume receiving events)
|
|
19
|
+
await composio.triggers.enable('trigger_id_123');
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
**Use cases:**
|
|
23
|
+
- **Disable:** Pause events temporarily, user disconnects account, billing issues
|
|
24
|
+
- **Enable:** Resume after resolving issues, user reconnects account
|
|
25
|
+
|
|
26
|
+
## Update Trigger Configuration
|
|
27
|
+
|
|
28
|
+
```typescript
|
|
29
|
+
// Update trigger config
|
|
30
|
+
await composio.triggers.update('trigger_id_123', {
|
|
31
|
+
triggerConfig: {
|
|
32
|
+
labelIds: 'SENT', // Changed from 'INBOX'
|
|
33
|
+
interval: 120 // Changed from 60
|
|
34
|
+
}
|
|
35
|
+
});
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
**Updateable fields:**
|
|
39
|
+
- `triggerConfig` - Trigger-specific configuration
|
|
40
|
+
- Cannot change trigger slug or connected account
|
|
41
|
+
|
|
42
|
+
## Delete Triggers
|
|
43
|
+
|
|
44
|
+
```typescript
|
|
45
|
+
await composio.triggers.delete('trigger_id_123');
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
**Warning:** Permanent deletion. Creates new trigger if needed later.
|
|
49
|
+
|
|
50
|
+
## List Active Triggers
|
|
51
|
+
|
|
52
|
+
```typescript
|
|
53
|
+
// All active triggers
|
|
54
|
+
const triggers = await composio.triggers.getActiveTriggers();
|
|
55
|
+
|
|
56
|
+
// By trigger slug
|
|
57
|
+
const gmailTriggers = await composio.triggers.getActiveTriggers({
|
|
58
|
+
triggerSlugs: ['GMAIL_NEW_GMAIL_MESSAGE']
|
|
59
|
+
});
|
|
60
|
+
|
|
61
|
+
// By user
|
|
62
|
+
const userTriggers = await composio.triggers.getActiveTriggers({
|
|
63
|
+
userIds: ['user_123']
|
|
64
|
+
});
|
|
65
|
+
|
|
66
|
+
// By connected account
|
|
67
|
+
const accountTriggers = await composio.triggers.getActiveTriggers({
|
|
68
|
+
connectedAccountIds: ['conn_abc123']
|
|
69
|
+
});
|
|
70
|
+
|
|
71
|
+
// By status
|
|
72
|
+
const enabled = await composio.triggers.getActiveTriggers({
|
|
73
|
+
status: 'enabled'
|
|
74
|
+
});
|
|
75
|
+
const disabled = await composio.triggers.getActiveTriggers({
|
|
76
|
+
status: 'disabled'
|
|
77
|
+
});
|
|
78
|
+
|
|
79
|
+
// Combine filters
|
|
80
|
+
const filtered = await composio.triggers.getActiveTriggers({
|
|
81
|
+
triggerSlugs: ['SLACK_NEW_MESSAGE'],
|
|
82
|
+
userIds: ['user_123'],
|
|
83
|
+
status: 'enabled'
|
|
84
|
+
});
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
**Response includes:**
|
|
88
|
+
- `triggerId` - Unique ID
|
|
89
|
+
- `triggerSlug` - Trigger type
|
|
90
|
+
- `userId` - User ID
|
|
91
|
+
- `connectedAccountId` - Account ID
|
|
92
|
+
- `status` - 'enabled' or 'disabled'
|
|
93
|
+
- `config` - Current configuration
|
|
94
|
+
- `createdAt`, `updatedAt` - Timestamps
|
|
95
|
+
|
|
96
|
+
## Get Trigger Details
|
|
97
|
+
|
|
98
|
+
```typescript
|
|
99
|
+
// Get specific trigger
|
|
100
|
+
const trigger = await composio.triggers.getTriggerById('trigger_id_123');
|
|
101
|
+
|
|
102
|
+
console.log(trigger.status); // 'enabled'
|
|
103
|
+
console.log(trigger.triggerSlug); // 'GMAIL_NEW_GMAIL_MESSAGE'
|
|
104
|
+
console.log(trigger.config.triggerConfig); // { labelIds: 'INBOX', ... }
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
## Common Patterns
|
|
108
|
+
|
|
109
|
+
### Pause User's Triggers
|
|
110
|
+
|
|
111
|
+
```typescript
|
|
112
|
+
async function pauseUserTriggers(userId: string) {
|
|
113
|
+
const triggers = await composio.triggers.getActiveTriggers({
|
|
114
|
+
userIds: [userId],
|
|
115
|
+
status: 'enabled'
|
|
116
|
+
});
|
|
117
|
+
|
|
118
|
+
for (const trigger of triggers.items) {
|
|
119
|
+
await composio.triggers.disable(trigger.triggerId);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
### Resume User's Triggers
|
|
125
|
+
|
|
126
|
+
```typescript
|
|
127
|
+
async function resumeUserTriggers(userId: string) {
|
|
128
|
+
const triggers = await composio.triggers.getActiveTriggers({
|
|
129
|
+
userIds: [userId],
|
|
130
|
+
status: 'disabled'
|
|
131
|
+
});
|
|
132
|
+
|
|
133
|
+
for (const trigger of triggers.items) {
|
|
134
|
+
await composio.triggers.enable(trigger.triggerId);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
### Clean Up Disconnected Account Triggers
|
|
140
|
+
|
|
141
|
+
```typescript
|
|
142
|
+
async function cleanupTriggers(connectedAccountId: string) {
|
|
143
|
+
const triggers = await composio.triggers.getActiveTriggers({
|
|
144
|
+
connectedAccountIds: [connectedAccountId]
|
|
145
|
+
});
|
|
146
|
+
|
|
147
|
+
for (const trigger of triggers.items) {
|
|
148
|
+
await composio.triggers.delete(trigger.triggerId);
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
### Update All User Gmail Triggers
|
|
154
|
+
|
|
155
|
+
```typescript
|
|
156
|
+
async function updateGmailInterval(userId: string, newInterval: number) {
|
|
157
|
+
const triggers = await composio.triggers.getActiveTriggers({
|
|
158
|
+
userIds: [userId],
|
|
159
|
+
triggerSlugs: ['GMAIL_NEW_GMAIL_MESSAGE']
|
|
160
|
+
});
|
|
161
|
+
|
|
162
|
+
for (const trigger of triggers.items) {
|
|
163
|
+
await composio.triggers.update(trigger.triggerId, {
|
|
164
|
+
triggerConfig: {
|
|
165
|
+
...trigger.config.triggerConfig,
|
|
166
|
+
interval: newInterval
|
|
167
|
+
}
|
|
168
|
+
});
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
### Check Trigger Status
|
|
174
|
+
|
|
175
|
+
```typescript
|
|
176
|
+
async function isTriggerActive(triggerId: string): Promise<boolean> {
|
|
177
|
+
try {
|
|
178
|
+
const trigger = await composio.triggers.getTriggerById(triggerId);
|
|
179
|
+
return trigger.status === 'enabled';
|
|
180
|
+
} catch (error) {
|
|
181
|
+
return false; // Trigger doesn't exist
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
### Get Trigger Count by User
|
|
187
|
+
|
|
188
|
+
```typescript
|
|
189
|
+
async function getUserTriggerCount(userId: string) {
|
|
190
|
+
const triggers = await composio.triggers.getActiveTriggers({
|
|
191
|
+
userIds: [userId]
|
|
192
|
+
});
|
|
193
|
+
|
|
194
|
+
return {
|
|
195
|
+
total: triggers.items.length,
|
|
196
|
+
enabled: triggers.items.filter(t => t.status === 'enabled').length,
|
|
197
|
+
disabled: triggers.items.filter(t => t.status === 'disabled').length
|
|
198
|
+
};
|
|
199
|
+
}
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
## Lifecycle Management
|
|
203
|
+
|
|
204
|
+
### Account Disconnection
|
|
205
|
+
|
|
206
|
+
```typescript
|
|
207
|
+
// When user disconnects an account
|
|
208
|
+
async function handleAccountDisconnect(accountId: string) {
|
|
209
|
+
// Option 1: Disable triggers (can resume later)
|
|
210
|
+
const triggers = await composio.triggers.getActiveTriggers({
|
|
211
|
+
connectedAccountIds: [accountId]
|
|
212
|
+
});
|
|
213
|
+
for (const trigger of triggers.items) {
|
|
214
|
+
await composio.triggers.disable(trigger.triggerId);
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
// Option 2: Delete triggers (permanent)
|
|
218
|
+
for (const trigger of triggers.items) {
|
|
219
|
+
await composio.triggers.delete(trigger.triggerId);
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
```
|
|
223
|
+
|
|
224
|
+
### Account Reconnection
|
|
225
|
+
|
|
226
|
+
```typescript
|
|
227
|
+
// When user reconnects
|
|
228
|
+
async function handleAccountReconnect(accountId: string) {
|
|
229
|
+
const triggers = await composio.triggers.getActiveTriggers({
|
|
230
|
+
connectedAccountIds: [accountId],
|
|
231
|
+
status: 'disabled'
|
|
232
|
+
});
|
|
233
|
+
|
|
234
|
+
for (const trigger of triggers.items) {
|
|
235
|
+
await composio.triggers.enable(trigger.triggerId);
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
```
|
|
239
|
+
|
|
240
|
+
### Subscription Management
|
|
241
|
+
|
|
242
|
+
```typescript
|
|
243
|
+
// Downgrade: disable non-essential triggers
|
|
244
|
+
async function handleDowngrade(userId: string) {
|
|
245
|
+
const triggers = await composio.triggers.getActiveTriggers({
|
|
246
|
+
userIds: [userId],
|
|
247
|
+
triggerSlugs: ['NON_ESSENTIAL_TRIGGER']
|
|
248
|
+
});
|
|
249
|
+
|
|
250
|
+
for (const trigger of triggers.items) {
|
|
251
|
+
await composio.triggers.disable(trigger.triggerId);
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
// Upgrade: enable all triggers
|
|
256
|
+
async function handleUpgrade(userId: string) {
|
|
257
|
+
const triggers = await composio.triggers.getActiveTriggers({
|
|
258
|
+
userIds: [userId],
|
|
259
|
+
status: 'disabled'
|
|
260
|
+
});
|
|
261
|
+
|
|
262
|
+
for (const trigger of triggers.items) {
|
|
263
|
+
await composio.triggers.enable(trigger.triggerId);
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
```
|
|
267
|
+
|
|
268
|
+
## Key Points
|
|
269
|
+
|
|
270
|
+
- **Disable vs Delete** - Disable pauses events, delete is permanent
|
|
271
|
+
- **Update config** - Change trigger settings without recreating
|
|
272
|
+
- **Filter getActiveTriggers** - Use multiple filters to narrow results
|
|
273
|
+
- **Batch operations** - Loop through triggers for bulk enable/disable
|
|
274
|
+
- **Handle disconnects** - Disable or delete triggers when accounts disconnect
|
|
275
|
+
- **Status check** - Always verify trigger status before operations
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Subscribe to Trigger Events
|
|
3
|
+
impact: MEDIUM
|
|
4
|
+
description: Listen to real-time trigger events during development using subscribe()
|
|
5
|
+
tags: [triggers, events, subscribe, development, real-time]
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Subscribe to Trigger Events
|
|
9
|
+
|
|
10
|
+
Use `subscribe()` to listen to trigger events in **development only**. For production, use webhooks via `listenToTriggers()`.
|
|
11
|
+
|
|
12
|
+
## Development vs Production
|
|
13
|
+
|
|
14
|
+
**Development (subscribe):**
|
|
15
|
+
- Real-time event listening in CLI/local development
|
|
16
|
+
- Simple callback function
|
|
17
|
+
- No webhook URLs needed
|
|
18
|
+
- **Do NOT use in production**
|
|
19
|
+
|
|
20
|
+
**Production (webhooks):**
|
|
21
|
+
- Scalable webhook delivery
|
|
22
|
+
- Reliable event processing
|
|
23
|
+
- Use `listenToTriggers()` with Express/HTTP server
|
|
24
|
+
- See triggers-webhook.md
|
|
25
|
+
|
|
26
|
+
## Basic Subscribe
|
|
27
|
+
|
|
28
|
+
```typescript
|
|
29
|
+
import { Composio } from '@composio/core';
|
|
30
|
+
|
|
31
|
+
const composio = new Composio({ apiKey: process.env.COMPOSIO_API_KEY });
|
|
32
|
+
|
|
33
|
+
// Subscribe to trigger events
|
|
34
|
+
const unsubscribe = await composio.triggers.subscribe((event) => {
|
|
35
|
+
console.log('Trigger received:', event.triggerSlug);
|
|
36
|
+
console.log('Payload:', event.payload);
|
|
37
|
+
console.log('User:', event.userId);
|
|
38
|
+
console.log('Account:', event.connectedAccountId);
|
|
39
|
+
});
|
|
40
|
+
|
|
41
|
+
// Keep process alive
|
|
42
|
+
console.log('Listening for events... Press Ctrl+C to stop');
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
## Subscribe with Filters
|
|
46
|
+
|
|
47
|
+
```typescript
|
|
48
|
+
// Filter by trigger slug
|
|
49
|
+
await composio.triggers.subscribe(
|
|
50
|
+
(event) => {
|
|
51
|
+
console.log('Gmail message:', event.payload);
|
|
52
|
+
},
|
|
53
|
+
{ triggerSlugs: ['GMAIL_NEW_GMAIL_MESSAGE'] }
|
|
54
|
+
);
|
|
55
|
+
|
|
56
|
+
// Filter by user ID
|
|
57
|
+
await composio.triggers.subscribe(
|
|
58
|
+
(event) => {
|
|
59
|
+
console.log('Event for user_123:', event.payload);
|
|
60
|
+
},
|
|
61
|
+
{ userIds: ['user_123'] }
|
|
62
|
+
);
|
|
63
|
+
|
|
64
|
+
// Filter by connected account
|
|
65
|
+
await composio.triggers.subscribe(
|
|
66
|
+
(event) => {
|
|
67
|
+
console.log('Event from specific account:', event.payload);
|
|
68
|
+
},
|
|
69
|
+
{ connectedAccountIds: ['conn_abc123'] }
|
|
70
|
+
);
|
|
71
|
+
|
|
72
|
+
// Combine filters
|
|
73
|
+
await composio.triggers.subscribe(
|
|
74
|
+
(event) => {
|
|
75
|
+
console.log('Filtered event:', event.payload);
|
|
76
|
+
},
|
|
77
|
+
{
|
|
78
|
+
triggerSlugs: ['SLACK_NEW_MESSAGE'],
|
|
79
|
+
userIds: ['user_123'],
|
|
80
|
+
connectedAccountIds: ['conn_def456']
|
|
81
|
+
}
|
|
82
|
+
);
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
## Event Payload Structure
|
|
86
|
+
|
|
87
|
+
```typescript
|
|
88
|
+
interface TriggerEvent {
|
|
89
|
+
triggerSlug: string; // 'GMAIL_NEW_GMAIL_MESSAGE'
|
|
90
|
+
userId: string; // 'user_123'
|
|
91
|
+
connectedAccountId: string; // 'conn_abc123'
|
|
92
|
+
payload: {
|
|
93
|
+
// Trigger-specific data
|
|
94
|
+
// Example for Gmail:
|
|
95
|
+
// { id: 'msg_123', subject: 'Hello', from: 'user@example.com' }
|
|
96
|
+
};
|
|
97
|
+
metadata: {
|
|
98
|
+
triggerId: string;
|
|
99
|
+
timestamp: string;
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
## Unsubscribe
|
|
105
|
+
|
|
106
|
+
```typescript
|
|
107
|
+
const unsubscribe = await composio.triggers.subscribe((event) => {
|
|
108
|
+
console.log('Event:', event);
|
|
109
|
+
});
|
|
110
|
+
|
|
111
|
+
// Stop listening
|
|
112
|
+
await unsubscribe();
|
|
113
|
+
console.log('Unsubscribed from all triggers');
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
## Development Pattern
|
|
117
|
+
|
|
118
|
+
```typescript
|
|
119
|
+
async function devMode() {
|
|
120
|
+
console.log('Starting development mode...');
|
|
121
|
+
|
|
122
|
+
// Subscribe to events
|
|
123
|
+
const unsubscribe = await composio.triggers.subscribe((event) => {
|
|
124
|
+
console.log(`\n[${event.triggerSlug}]`);
|
|
125
|
+
console.log('User:', event.userId);
|
|
126
|
+
console.log('Payload:', JSON.stringify(event.payload, null, 2));
|
|
127
|
+
});
|
|
128
|
+
|
|
129
|
+
// Handle shutdown
|
|
130
|
+
process.on('SIGINT', async () => {
|
|
131
|
+
console.log('\nShutting down...');
|
|
132
|
+
await unsubscribe();
|
|
133
|
+
process.exit(0);
|
|
134
|
+
});
|
|
135
|
+
|
|
136
|
+
console.log('Listening for events. Press Ctrl+C to stop.');
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
devMode();
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
## Migration to Production
|
|
143
|
+
|
|
144
|
+
Development (subscribe):
|
|
145
|
+
```typescript
|
|
146
|
+
// Development only
|
|
147
|
+
await composio.triggers.subscribe((event) => {
|
|
148
|
+
console.log(event);
|
|
149
|
+
});
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
Production (webhooks):
|
|
153
|
+
```typescript
|
|
154
|
+
// Production ready
|
|
155
|
+
import express from 'express';
|
|
156
|
+
|
|
157
|
+
const app = express();
|
|
158
|
+
const composio = new Composio({ apiKey: process.env.COMPOSIO_API_KEY });
|
|
159
|
+
|
|
160
|
+
await composio.triggers.listenToTriggers(app, (event) => {
|
|
161
|
+
console.log('Webhook received:', event);
|
|
162
|
+
});
|
|
163
|
+
|
|
164
|
+
app.listen(3000);
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
## Key Points
|
|
168
|
+
|
|
169
|
+
- **Development only** - Never use subscribe() in production
|
|
170
|
+
- **Use webhooks for production** - More reliable and scalable
|
|
171
|
+
- **Filter events** - Reduce noise with triggerSlugs, userIds, connectedAccountIds
|
|
172
|
+
- **Cleanup** - Always call unsubscribe() when done
|
|
173
|
+
- **Long-running process** - Keep Node.js process alive to receive events
|
|
@@ -0,0 +1,227 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Verify Webhooks for Production (Recommended)
|
|
3
|
+
impact: CRITICAL
|
|
4
|
+
description: Use webhook verification for reliable, scalable event delivery in production
|
|
5
|
+
tags: [triggers, webhooks, production, security, verification, hmac]
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Webhook Verification for Production
|
|
9
|
+
|
|
10
|
+
Webhooks are the **production-ready** way to receive trigger events. Provides reliable delivery, automatic retries, and works with serverless.
|
|
11
|
+
|
|
12
|
+
## Setup with listenToTriggers()
|
|
13
|
+
|
|
14
|
+
```typescript
|
|
15
|
+
import express from 'express';
|
|
16
|
+
import { Composio } from '@composio/core';
|
|
17
|
+
|
|
18
|
+
const app = express();
|
|
19
|
+
const composio = new Composio({ apiKey: process.env.COMPOSIO_API_KEY });
|
|
20
|
+
|
|
21
|
+
// Automatic webhook verification and handling
|
|
22
|
+
await composio.triggers.listenToTriggers(app, async (event) => {
|
|
23
|
+
console.log('Webhook:', event.triggerSlug);
|
|
24
|
+
console.log('User:', event.userId);
|
|
25
|
+
console.log('Payload:', event.payload);
|
|
26
|
+
|
|
27
|
+
await handleEvent(event);
|
|
28
|
+
});
|
|
29
|
+
|
|
30
|
+
app.listen(3000);
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
**What it does:**
|
|
34
|
+
- Creates `/composio/triggers` endpoint
|
|
35
|
+
- Verifies webhook signatures automatically
|
|
36
|
+
- Parses and validates payloads
|
|
37
|
+
- Calls callback with verified events
|
|
38
|
+
|
|
39
|
+
## Manual Verification
|
|
40
|
+
|
|
41
|
+
For custom endpoints:
|
|
42
|
+
|
|
43
|
+
```typescript
|
|
44
|
+
import { verifyWebhookSignature } from '@composio/core';
|
|
45
|
+
|
|
46
|
+
app.post('/custom/webhook', express.raw({ type: 'application/json' }), (req, res) => {
|
|
47
|
+
const signature = req.headers['x-composio-signature'];
|
|
48
|
+
const payload = req.body;
|
|
49
|
+
|
|
50
|
+
const isValid = verifyWebhookSignature(
|
|
51
|
+
payload,
|
|
52
|
+
signature,
|
|
53
|
+
process.env.COMPOSIO_WEBHOOK_SECRET
|
|
54
|
+
);
|
|
55
|
+
|
|
56
|
+
if (!isValid) {
|
|
57
|
+
return res.status(401).json({ error: 'Invalid signature' });
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
const event = JSON.parse(payload);
|
|
61
|
+
handleEvent(event);
|
|
62
|
+
res.json({ success: true });
|
|
63
|
+
});
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
## Event Structure
|
|
67
|
+
|
|
68
|
+
```typescript
|
|
69
|
+
interface WebhookEvent {
|
|
70
|
+
triggerSlug: string;
|
|
71
|
+
userId: string;
|
|
72
|
+
connectedAccountId: string;
|
|
73
|
+
payload: object;
|
|
74
|
+
metadata: {
|
|
75
|
+
triggerId: string;
|
|
76
|
+
timestamp: string;
|
|
77
|
+
webhookId: string;
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
## Processing Patterns
|
|
83
|
+
|
|
84
|
+
### Route by Trigger Type
|
|
85
|
+
|
|
86
|
+
```typescript
|
|
87
|
+
async function handleEvent(event: WebhookEvent) {
|
|
88
|
+
switch (event.triggerSlug) {
|
|
89
|
+
case 'GMAIL_NEW_GMAIL_MESSAGE':
|
|
90
|
+
await handleGmail(event.userId, event.payload);
|
|
91
|
+
break;
|
|
92
|
+
case 'GITHUB_COMMIT_EVENT':
|
|
93
|
+
await handleGithub(event.userId, event.payload);
|
|
94
|
+
break;
|
|
95
|
+
case 'SLACK_NEW_MESSAGE':
|
|
96
|
+
await handleSlack(event.userId, event.payload);
|
|
97
|
+
break;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
### With Error Handling
|
|
103
|
+
|
|
104
|
+
```typescript
|
|
105
|
+
await composio.triggers.listenToTriggers(app, async (event) => {
|
|
106
|
+
try {
|
|
107
|
+
await processEvent(event);
|
|
108
|
+
} catch (error) {
|
|
109
|
+
console.error('Error:', error);
|
|
110
|
+
// Don't throw - acknowledge webhook received
|
|
111
|
+
}
|
|
112
|
+
});
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
### With Idempotency
|
|
116
|
+
|
|
117
|
+
```typescript
|
|
118
|
+
await composio.triggers.listenToTriggers(app, async (event) => {
|
|
119
|
+
const webhookId = event.metadata.webhookId;
|
|
120
|
+
|
|
121
|
+
// Check if already processed
|
|
122
|
+
if (await isProcessed(webhookId)) {
|
|
123
|
+
console.log('Duplicate webhook, skipping');
|
|
124
|
+
return;
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
// Mark as processed
|
|
128
|
+
await markProcessed(webhookId);
|
|
129
|
+
|
|
130
|
+
// Process event
|
|
131
|
+
await handleEvent(event);
|
|
132
|
+
});
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
## Configuration
|
|
136
|
+
|
|
137
|
+
Set webhook URL in Composio dashboard:
|
|
138
|
+
|
|
139
|
+
1. Go to [platform.composio.dev](https://platform.composio.dev)
|
|
140
|
+
2. **Settings** > **Webhooks**
|
|
141
|
+
3. Set URL: `https://your-app.com/composio/triggers`
|
|
142
|
+
|
|
143
|
+
**Requirements:**
|
|
144
|
+
- HTTPS URL (publicly accessible)
|
|
145
|
+
- Respond with 200 OK within 30 seconds
|
|
146
|
+
- Handle concurrent requests
|
|
147
|
+
|
|
148
|
+
## Testing Locally
|
|
149
|
+
|
|
150
|
+
Use ngrok:
|
|
151
|
+
|
|
152
|
+
```bash
|
|
153
|
+
ngrok http 3000
|
|
154
|
+
# Use https://abc123.ngrok.io/composio/triggers in dashboard
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
## Security
|
|
158
|
+
|
|
159
|
+
- **Always verify signatures** - Use `listenToTriggers()` or manual verification
|
|
160
|
+
- **HTTPS only** - Never HTTP in production
|
|
161
|
+
- **Keep secrets secure** - Environment variables only
|
|
162
|
+
- **Validate payloads** - Check required fields
|
|
163
|
+
- **Handle errors gracefully** - Log, don't throw
|
|
164
|
+
- **Implement idempotency** - Use webhookId to deduplicate
|
|
165
|
+
|
|
166
|
+
## Common Issues
|
|
167
|
+
|
|
168
|
+
**401 Unauthorized:**
|
|
169
|
+
- Invalid signature - check webhook secret
|
|
170
|
+
- Wrong secret - verify environment variable
|
|
171
|
+
|
|
172
|
+
**Timeout:**
|
|
173
|
+
- Processing > 30 seconds - move to background queue
|
|
174
|
+
- Return 200 OK immediately
|
|
175
|
+
|
|
176
|
+
**Duplicates:**
|
|
177
|
+
- Webhooks may deliver multiple times
|
|
178
|
+
- Use webhookId for idempotency
|
|
179
|
+
|
|
180
|
+
## Complete Example
|
|
181
|
+
|
|
182
|
+
```typescript
|
|
183
|
+
import express from 'express';
|
|
184
|
+
import { Composio } from '@composio/core';
|
|
185
|
+
|
|
186
|
+
const app = express();
|
|
187
|
+
const composio = new Composio({ apiKey: process.env.COMPOSIO_API_KEY });
|
|
188
|
+
|
|
189
|
+
await composio.triggers.listenToTriggers(app, async (event) => {
|
|
190
|
+
try {
|
|
191
|
+
// Idempotency check
|
|
192
|
+
if (await isProcessed(event.metadata.webhookId)) {
|
|
193
|
+
return;
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
// Process
|
|
197
|
+
switch (event.triggerSlug) {
|
|
198
|
+
case 'GMAIL_NEW_GMAIL_MESSAGE':
|
|
199
|
+
await sendNotification(event.userId, {
|
|
200
|
+
title: 'New Email',
|
|
201
|
+
body: event.payload.subject
|
|
202
|
+
});
|
|
203
|
+
break;
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
// Mark processed
|
|
207
|
+
await markProcessed(event.metadata.webhookId);
|
|
208
|
+
} catch (error) {
|
|
209
|
+
console.error('Error:', error);
|
|
210
|
+
}
|
|
211
|
+
});
|
|
212
|
+
|
|
213
|
+
app.get('/health', (req, res) => res.json({ status: 'ok' }));
|
|
214
|
+
|
|
215
|
+
app.listen(3000, () => {
|
|
216
|
+
console.log('Webhook server running on port 3000');
|
|
217
|
+
});
|
|
218
|
+
```
|
|
219
|
+
|
|
220
|
+
## Key Points
|
|
221
|
+
|
|
222
|
+
- **Production standard** - Use webhooks, not subscribe()
|
|
223
|
+
- **listenToTriggers()** - Handles verification automatically
|
|
224
|
+
- **HTTPS required** - Security requirement
|
|
225
|
+
- **Quick response** - Return 200 OK within 30s
|
|
226
|
+
- **Idempotency** - Handle duplicates with webhookId
|
|
227
|
+
- **Error handling** - Log but don't throw
|