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,476 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Choose User IDs Carefully for Security and Isolation
|
|
3
|
+
impact: CRITICAL
|
|
4
|
+
description: Use proper user IDs to ensure data isolation, security, and correct session management
|
|
5
|
+
tags: [tool-router, user-id, security, authentication, multi-tenant]
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Choose User IDs Carefully for Security and Isolation
|
|
9
|
+
|
|
10
|
+
User IDs are the **foundation of Composio's data isolation**. They determine which user's connections, data, and permissions are used for tool execution. Choose them carefully to ensure security and proper data isolation.
|
|
11
|
+
|
|
12
|
+
## ❌ Incorrect
|
|
13
|
+
|
|
14
|
+
```typescript
|
|
15
|
+
// DON'T: Use 'default' in production multi-user apps
|
|
16
|
+
async function handleUserRequest(req: Request) {
|
|
17
|
+
const session = await composio.create('default', {
|
|
18
|
+
toolkits: ['gmail', 'slack']
|
|
19
|
+
});
|
|
20
|
+
|
|
21
|
+
// ❌ All users share the same session
|
|
22
|
+
// ❌ No data isolation
|
|
23
|
+
// ❌ Security nightmare
|
|
24
|
+
// ❌ User A can access User B's emails!
|
|
25
|
+
}
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
```python
|
|
29
|
+
# DON'T: Use 'default' in production multi-user apps
|
|
30
|
+
async def handle_user_request(req):
|
|
31
|
+
session = composio.create(
|
|
32
|
+
user_id="default",
|
|
33
|
+
toolkits=["gmail", "slack"]
|
|
34
|
+
)
|
|
35
|
+
|
|
36
|
+
# ❌ All users share the same session
|
|
37
|
+
# ❌ No data isolation
|
|
38
|
+
# ❌ Security nightmare
|
|
39
|
+
# ❌ User A can access User B's emails!
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
```typescript
|
|
43
|
+
// DON'T: Use email addresses as user IDs
|
|
44
|
+
async function handleUserRequest(req: Request) {
|
|
45
|
+
const session = await composio.create(req.user.email, {
|
|
46
|
+
toolkits: ['github']
|
|
47
|
+
});
|
|
48
|
+
|
|
49
|
+
// ❌ Emails can change
|
|
50
|
+
// ❌ Breaks session continuity
|
|
51
|
+
// ❌ Historical data loss
|
|
52
|
+
}
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
## ✅ Correct - Use Database User IDs
|
|
56
|
+
|
|
57
|
+
```typescript
|
|
58
|
+
// DO: Use your database user ID (UUID, primary key, etc.)
|
|
59
|
+
import { Composio } from '@composio/core';
|
|
60
|
+
import { VercelProvider } from '@composio/vercel';
|
|
61
|
+
|
|
62
|
+
const composio = new Composio({
|
|
63
|
+
provider: new VercelProvider()
|
|
64
|
+
});
|
|
65
|
+
|
|
66
|
+
async function handleUserRequest(req: Request) {
|
|
67
|
+
// Get user ID from your auth system
|
|
68
|
+
const userId = req.user.id; // e.g., "550e8400-e29b-41d4-a716-446655440000"
|
|
69
|
+
|
|
70
|
+
// Create isolated session for this user
|
|
71
|
+
const session = await composio.create(userId, {
|
|
72
|
+
toolkits: ['gmail', 'slack']
|
|
73
|
+
});
|
|
74
|
+
|
|
75
|
+
const tools = await session.tools();
|
|
76
|
+
|
|
77
|
+
// ✅ Each user gets their own session
|
|
78
|
+
// ✅ Complete data isolation
|
|
79
|
+
// ✅ User A cannot access User B's data
|
|
80
|
+
// ✅ Connections tied to correct user
|
|
81
|
+
return await agent.run(req.message, tools);
|
|
82
|
+
}
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
```python
|
|
86
|
+
# DO: Use your database user ID (UUID, primary key, etc.)
|
|
87
|
+
from composio import Composio
|
|
88
|
+
from composio_openai import OpenAIProvider
|
|
89
|
+
|
|
90
|
+
composio = Composio(provider=OpenAIProvider())
|
|
91
|
+
|
|
92
|
+
async def handle_user_request(req):
|
|
93
|
+
# Get user ID from your auth system
|
|
94
|
+
user_id = req.user.id # e.g., "550e8400-e29b-41d4-a716-446655440000"
|
|
95
|
+
|
|
96
|
+
# Create isolated session for this user
|
|
97
|
+
session = composio.create(
|
|
98
|
+
user_id=user_id,
|
|
99
|
+
toolkits=["gmail", "slack"]
|
|
100
|
+
)
|
|
101
|
+
|
|
102
|
+
tools = session.tools()
|
|
103
|
+
|
|
104
|
+
# ✅ Each user gets their own session
|
|
105
|
+
# ✅ Complete data isolation
|
|
106
|
+
# ✅ User A cannot access User B's data
|
|
107
|
+
# ✅ Connections tied to correct user
|
|
108
|
+
return await agent.run(req.message, tools)
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
## ✅ Correct - Use Auth Provider IDs
|
|
112
|
+
|
|
113
|
+
```typescript
|
|
114
|
+
// DO: Use IDs from your auth provider
|
|
115
|
+
import { Composio } from '@composio/core';
|
|
116
|
+
import { VercelProvider } from '@composio/vercel';
|
|
117
|
+
|
|
118
|
+
const composio = new Composio({
|
|
119
|
+
provider: new VercelProvider()
|
|
120
|
+
});
|
|
121
|
+
|
|
122
|
+
async function handleClerkUser(userId: string) {
|
|
123
|
+
// Using Clerk user ID
|
|
124
|
+
// e.g., "user_2abc123def456"
|
|
125
|
+
const session = await composio.create(userId, {
|
|
126
|
+
toolkits: ['github']
|
|
127
|
+
});
|
|
128
|
+
|
|
129
|
+
return session;
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
async function handleAuth0User(userId: string) {
|
|
133
|
+
// Using Auth0 user ID
|
|
134
|
+
// e.g., "auth0|507f1f77bcf86cd799439011"
|
|
135
|
+
const session = await composio.create(userId, {
|
|
136
|
+
toolkits: ['gmail']
|
|
137
|
+
});
|
|
138
|
+
|
|
139
|
+
return session;
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
async function handleSupabaseUser(userId: string) {
|
|
143
|
+
// Using Supabase user UUID
|
|
144
|
+
// e.g., "d7f8b0c1-1234-5678-9abc-def012345678"
|
|
145
|
+
const session = await composio.create(userId, {
|
|
146
|
+
toolkits: ['slack']
|
|
147
|
+
});
|
|
148
|
+
|
|
149
|
+
return session;
|
|
150
|
+
}
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
```python
|
|
154
|
+
# DO: Use IDs from your auth provider
|
|
155
|
+
from composio import Composio
|
|
156
|
+
from composio_openai import OpenAIProvider
|
|
157
|
+
|
|
158
|
+
composio = Composio(provider=OpenAIProvider())
|
|
159
|
+
|
|
160
|
+
async def handle_clerk_user(user_id: str):
|
|
161
|
+
# Using Clerk user ID
|
|
162
|
+
# e.g., "user_2abc123def456"
|
|
163
|
+
session = composio.create(
|
|
164
|
+
user_id=user_id,
|
|
165
|
+
toolkits=["github"]
|
|
166
|
+
)
|
|
167
|
+
return session
|
|
168
|
+
|
|
169
|
+
async def handle_auth0_user(user_id: str):
|
|
170
|
+
# Using Auth0 user ID
|
|
171
|
+
# e.g., "auth0|507f1f77bcf86cd799439011"
|
|
172
|
+
session = composio.create(
|
|
173
|
+
user_id=user_id,
|
|
174
|
+
toolkits=["gmail"]
|
|
175
|
+
)
|
|
176
|
+
return session
|
|
177
|
+
|
|
178
|
+
async def handle_supabase_user(user_id: str):
|
|
179
|
+
# Using Supabase user UUID
|
|
180
|
+
# e.g., "d7f8b0c1-1234-5678-9abc-def012345678"
|
|
181
|
+
session = composio.create(
|
|
182
|
+
user_id=user_id,
|
|
183
|
+
toolkits=["slack"]
|
|
184
|
+
)
|
|
185
|
+
return session
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
## ✅ Correct - Organization-Level Applications
|
|
189
|
+
|
|
190
|
+
```typescript
|
|
191
|
+
// DO: Use organization ID for org-level apps
|
|
192
|
+
import { Composio } from '@composio/core';
|
|
193
|
+
import { VercelProvider } from '@composio/vercel';
|
|
194
|
+
|
|
195
|
+
const composio = new Composio({
|
|
196
|
+
provider: new VercelProvider()
|
|
197
|
+
});
|
|
198
|
+
|
|
199
|
+
// When apps are connected at organization level (not individual users)
|
|
200
|
+
async function handleOrgLevelApp(req: Request) {
|
|
201
|
+
// Use organization ID, NOT individual user ID
|
|
202
|
+
const organizationId = req.user.organizationId;
|
|
203
|
+
|
|
204
|
+
const session = await composio.create(organizationId, {
|
|
205
|
+
toolkits: ['slack', 'github'], // Org-wide tools
|
|
206
|
+
manageConnections: true
|
|
207
|
+
});
|
|
208
|
+
|
|
209
|
+
// All users in the organization share these connections
|
|
210
|
+
// Perfect for team collaboration tools
|
|
211
|
+
const tools = await session.tools();
|
|
212
|
+
return await agent.run(req.message, tools);
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
// Example: Slack workspace integration
|
|
216
|
+
async function createWorkspaceSession(workspaceId: string) {
|
|
217
|
+
// Workspace ID as user ID
|
|
218
|
+
const session = await composio.create(`workspace_${workspaceId}`, {
|
|
219
|
+
toolkits: ['slack', 'notion', 'linear']
|
|
220
|
+
});
|
|
221
|
+
|
|
222
|
+
return session;
|
|
223
|
+
}
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
```python
|
|
227
|
+
# DO: Use organization ID for org-level apps
|
|
228
|
+
from composio import Composio
|
|
229
|
+
from composio_openai import OpenAIProvider
|
|
230
|
+
|
|
231
|
+
composio = Composio(provider=OpenAIProvider())
|
|
232
|
+
|
|
233
|
+
# When apps are connected at organization level (not individual users)
|
|
234
|
+
async def handle_org_level_app(req):
|
|
235
|
+
# Use organization ID, NOT individual user ID
|
|
236
|
+
organization_id = req.user.organization_id
|
|
237
|
+
|
|
238
|
+
session = composio.create(
|
|
239
|
+
user_id=organization_id,
|
|
240
|
+
toolkits=["slack", "github"], # Org-wide tools
|
|
241
|
+
manage_connections=True
|
|
242
|
+
)
|
|
243
|
+
|
|
244
|
+
# All users in the organization share these connections
|
|
245
|
+
# Perfect for team collaboration tools
|
|
246
|
+
tools = session.tools()
|
|
247
|
+
return await agent.run(req.message, tools)
|
|
248
|
+
|
|
249
|
+
# Example: Slack workspace integration
|
|
250
|
+
async def create_workspace_session(workspace_id: str):
|
|
251
|
+
# Workspace ID as user ID
|
|
252
|
+
session = composio.create(
|
|
253
|
+
user_id=f"workspace_{workspace_id}",
|
|
254
|
+
toolkits=["slack", "notion", "linear"]
|
|
255
|
+
)
|
|
256
|
+
return session
|
|
257
|
+
```
|
|
258
|
+
|
|
259
|
+
## When to Use 'default'
|
|
260
|
+
|
|
261
|
+
The `'default'` user ID should **ONLY** be used in these scenarios:
|
|
262
|
+
|
|
263
|
+
### ✅ Development and Testing
|
|
264
|
+
```typescript
|
|
265
|
+
// Testing locally
|
|
266
|
+
const session = await composio.create('default', {
|
|
267
|
+
toolkits: ['gmail']
|
|
268
|
+
});
|
|
269
|
+
```
|
|
270
|
+
|
|
271
|
+
### ✅ Single-User Applications
|
|
272
|
+
```typescript
|
|
273
|
+
// Personal automation script
|
|
274
|
+
// Only YOU use this app
|
|
275
|
+
const session = await composio.create('default', {
|
|
276
|
+
toolkits: ['github', 'notion']
|
|
277
|
+
});
|
|
278
|
+
```
|
|
279
|
+
|
|
280
|
+
### ✅ Demos and Prototypes
|
|
281
|
+
```typescript
|
|
282
|
+
// Quick demo for investors
|
|
283
|
+
const session = await composio.create('default', {
|
|
284
|
+
toolkits: ['hackernews']
|
|
285
|
+
});
|
|
286
|
+
```
|
|
287
|
+
|
|
288
|
+
### ❌ NEVER in Production Multi-User Apps
|
|
289
|
+
```typescript
|
|
290
|
+
// Production API serving multiple users
|
|
291
|
+
// ❌ DON'T DO THIS
|
|
292
|
+
const session = await composio.create('default', {
|
|
293
|
+
toolkits: ['gmail']
|
|
294
|
+
});
|
|
295
|
+
```
|
|
296
|
+
|
|
297
|
+
## User ID Best Practices
|
|
298
|
+
|
|
299
|
+
### 1. **Use Stable, Immutable Identifiers**
|
|
300
|
+
|
|
301
|
+
✅ **Good:**
|
|
302
|
+
- Database primary keys (UUIDs)
|
|
303
|
+
- Auth provider user IDs
|
|
304
|
+
- Immutable user identifiers
|
|
305
|
+
|
|
306
|
+
❌ **Bad:**
|
|
307
|
+
- Email addresses (can change)
|
|
308
|
+
- Usernames (can be modified)
|
|
309
|
+
- Phone numbers (can change)
|
|
310
|
+
|
|
311
|
+
```typescript
|
|
312
|
+
// ✅ Good: Stable UUID
|
|
313
|
+
const userId = user.id; // "550e8400-e29b-41d4-a716-446655440000"
|
|
314
|
+
|
|
315
|
+
// ❌ Bad: Email (mutable)
|
|
316
|
+
const userId = user.email; // "john@example.com" -> changes to "john@newdomain.com"
|
|
317
|
+
|
|
318
|
+
// ❌ Bad: Username (mutable)
|
|
319
|
+
const userId = user.username; // "john_doe" -> changes to "john_smith"
|
|
320
|
+
```
|
|
321
|
+
|
|
322
|
+
### 2. **Ensure Uniqueness**
|
|
323
|
+
|
|
324
|
+
```typescript
|
|
325
|
+
// ✅ Good: Guaranteed unique
|
|
326
|
+
const userId = database.users.findById(id).id;
|
|
327
|
+
|
|
328
|
+
// ✅ Good: Auth provider guarantees uniqueness
|
|
329
|
+
const userId = auth0.user.sub; // "auth0|507f1f77bcf86cd799439011"
|
|
330
|
+
|
|
331
|
+
// ❌ Bad: Not guaranteed unique
|
|
332
|
+
const userId = user.firstName; // Multiple "John"s exist
|
|
333
|
+
```
|
|
334
|
+
|
|
335
|
+
### 3. **Match Your Authentication System**
|
|
336
|
+
|
|
337
|
+
```typescript
|
|
338
|
+
// Express.js with Passport
|
|
339
|
+
app.post('/api/agent', authenticateUser, async (req, res) => {
|
|
340
|
+
const userId = req.user.id; // From Passport
|
|
341
|
+
const session = await composio.create(userId, config);
|
|
342
|
+
});
|
|
343
|
+
|
|
344
|
+
// Next.js with Clerk
|
|
345
|
+
export async function POST(req: NextRequest) {
|
|
346
|
+
const { userId } = auth(); // From Clerk
|
|
347
|
+
const session = await composio.create(userId!, config);
|
|
348
|
+
}
|
|
349
|
+
|
|
350
|
+
// FastAPI with Auth0
|
|
351
|
+
@app.post("/api/agent")
|
|
352
|
+
async def agent_endpoint(user: User = Depends(get_current_user)):
|
|
353
|
+
user_id = user.id # From Auth0
|
|
354
|
+
session = composio.create(user_id=user_id, **config)
|
|
355
|
+
```
|
|
356
|
+
|
|
357
|
+
### 4. **Namespace for Multi-Tenancy**
|
|
358
|
+
|
|
359
|
+
```typescript
|
|
360
|
+
// When you have multiple applications/workspaces per user
|
|
361
|
+
const userId = `app_${appId}_user_${user.id}`;
|
|
362
|
+
// e.g., "app_saas123_user_550e8400"
|
|
363
|
+
|
|
364
|
+
const session = await composio.create(userId, {
|
|
365
|
+
toolkits: ['gmail']
|
|
366
|
+
});
|
|
367
|
+
|
|
368
|
+
// Each app instance gets isolated connections
|
|
369
|
+
```
|
|
370
|
+
|
|
371
|
+
### 5. **Be Consistent Across Your Application**
|
|
372
|
+
|
|
373
|
+
```typescript
|
|
374
|
+
// ✅ Good: Same user ID everywhere
|
|
375
|
+
async function handleRequest(req: Request) {
|
|
376
|
+
const userId = req.user.id;
|
|
377
|
+
|
|
378
|
+
// Use same ID for sessions
|
|
379
|
+
const session = await composio.create(userId, config);
|
|
380
|
+
|
|
381
|
+
// Use same ID for direct tool execution
|
|
382
|
+
await composio.tools.execute('GMAIL_SEND_EMAIL', {
|
|
383
|
+
userId: userId,
|
|
384
|
+
arguments: { to: 'user@example.com', subject: 'Test' }
|
|
385
|
+
});
|
|
386
|
+
|
|
387
|
+
// Use same ID for connected accounts
|
|
388
|
+
await composio.connectedAccounts.get(userId, 'gmail');
|
|
389
|
+
}
|
|
390
|
+
```
|
|
391
|
+
|
|
392
|
+
## Security Implications
|
|
393
|
+
|
|
394
|
+
### ⚠️ User ID Leakage
|
|
395
|
+
```typescript
|
|
396
|
+
// ❌ DON'T: Expose user IDs to client
|
|
397
|
+
app.get('/api/session', (req, res) => {
|
|
398
|
+
res.json({
|
|
399
|
+
sessionId: session.sessionId,
|
|
400
|
+
userId: req.user.id // ❌ Sensitive information
|
|
401
|
+
});
|
|
402
|
+
});
|
|
403
|
+
|
|
404
|
+
// ✅ DO: Keep user IDs server-side only
|
|
405
|
+
app.get('/api/session', (req, res) => {
|
|
406
|
+
res.json({
|
|
407
|
+
sessionId: session.sessionId
|
|
408
|
+
// Don't send userId to client
|
|
409
|
+
});
|
|
410
|
+
});
|
|
411
|
+
```
|
|
412
|
+
|
|
413
|
+
### ⚠️ User ID Validation
|
|
414
|
+
```typescript
|
|
415
|
+
// ✅ Always validate user IDs match authenticated user
|
|
416
|
+
app.post('/api/agent/:userId', authenticateUser, async (req, res) => {
|
|
417
|
+
const requestedUserId = req.params.userId;
|
|
418
|
+
const authenticatedUserId = req.user.id;
|
|
419
|
+
|
|
420
|
+
// Validate user can only access their own data
|
|
421
|
+
if (requestedUserId !== authenticatedUserId) {
|
|
422
|
+
return res.status(403).json({ error: 'Forbidden' });
|
|
423
|
+
}
|
|
424
|
+
|
|
425
|
+
const session = await composio.create(authenticatedUserId, config);
|
|
426
|
+
});
|
|
427
|
+
```
|
|
428
|
+
|
|
429
|
+
## Common Patterns
|
|
430
|
+
|
|
431
|
+
### Pattern 1: User-Level Isolation (Most Common)
|
|
432
|
+
```typescript
|
|
433
|
+
// Each user has their own connections
|
|
434
|
+
// Use user ID from your database/auth system
|
|
435
|
+
const session = await composio.create(req.user.id, {
|
|
436
|
+
toolkits: ['gmail', 'github']
|
|
437
|
+
});
|
|
438
|
+
```
|
|
439
|
+
|
|
440
|
+
### Pattern 2: Organization-Level Sharing
|
|
441
|
+
```typescript
|
|
442
|
+
// All org members share connections
|
|
443
|
+
// Use organization ID
|
|
444
|
+
const session = await composio.create(req.user.organizationId, {
|
|
445
|
+
toolkits: ['slack', 'notion']
|
|
446
|
+
});
|
|
447
|
+
```
|
|
448
|
+
|
|
449
|
+
### Pattern 3: Hybrid (User + Org)
|
|
450
|
+
```typescript
|
|
451
|
+
// Personal tools use user ID
|
|
452
|
+
const personalSession = await composio.create(req.user.id, {
|
|
453
|
+
toolkits: ['gmail'] // Personal Gmail
|
|
454
|
+
});
|
|
455
|
+
|
|
456
|
+
// Team tools use org ID
|
|
457
|
+
const teamSession = await composio.create(req.user.organizationId, {
|
|
458
|
+
toolkits: ['slack', 'jira'] // Team Slack/Jira
|
|
459
|
+
});
|
|
460
|
+
```
|
|
461
|
+
|
|
462
|
+
## Key Principles
|
|
463
|
+
|
|
464
|
+
1. **Never use 'default' in production multi-user apps**
|
|
465
|
+
2. **Use stable, immutable identifiers** (UUIDs, not emails)
|
|
466
|
+
3. **Match your authentication system's user IDs**
|
|
467
|
+
4. **Validate user IDs server-side** for security
|
|
468
|
+
5. **Be consistent** across sessions and direct tool usage
|
|
469
|
+
6. **Use org IDs** for organization-level applications
|
|
470
|
+
7. **Namespace when needed** for multi-tenancy
|
|
471
|
+
|
|
472
|
+
## Reference
|
|
473
|
+
|
|
474
|
+
- [Composio Sessions](https://docs.composio.dev/sdk/typescript/api/tool-router#creating-sessions)
|
|
475
|
+
- [User ID Security](https://docs.composio.dev/sdk/typescript/core-concepts#user-ids)
|
|
476
|
+
- [Connected Accounts](https://docs.composio.dev/sdk/typescript/api/connected-accounts)
|
|
@@ -0,0 +1,246 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Create Triggers for Real-Time Events
|
|
3
|
+
impact: HIGH
|
|
4
|
+
description: Set up trigger instances to receive real-time events from connected accounts
|
|
5
|
+
tags: [triggers, events, webhooks, real-time, notifications]
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Create Triggers for Real-Time Events
|
|
9
|
+
|
|
10
|
+
Triggers receive real-time events from connected accounts (Gmail, GitHub, Slack, etc.). Create trigger instances to subscribe to specific events.
|
|
11
|
+
|
|
12
|
+
> **⚠️ IMPORTANT:** Do NOT make up or guess trigger names. Always verify trigger slugs before using them:
|
|
13
|
+
> - Use `composio manage triggers list` to discover and `composio manage triggers info "TRIGGER_NAME"` to see configuration schema (CLI)
|
|
14
|
+
> - Use `composio.triggers.list()` to discover available triggers programmatically (SDK)
|
|
15
|
+
>
|
|
16
|
+
> See [Composio CLI Reference](./composio-cli.md) for discovery commands.
|
|
17
|
+
|
|
18
|
+
## Basic Usage
|
|
19
|
+
|
|
20
|
+
```typescript
|
|
21
|
+
import { Composio } from '@composio/core';
|
|
22
|
+
|
|
23
|
+
const composio = new Composio({ apiKey: process.env.COMPOSIO_API_KEY });
|
|
24
|
+
|
|
25
|
+
// Create trigger for specific connected account
|
|
26
|
+
const trigger = await composio.triggers.create(
|
|
27
|
+
'user_123',
|
|
28
|
+
'GMAIL_NEW_GMAIL_MESSAGE',
|
|
29
|
+
{
|
|
30
|
+
connectedAccountId: 'conn_abc123',
|
|
31
|
+
triggerConfig: {
|
|
32
|
+
labelIds: 'INBOX',
|
|
33
|
+
userId: 'me',
|
|
34
|
+
interval: 60
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
);
|
|
38
|
+
|
|
39
|
+
console.log('Trigger ID:', trigger.triggerId);
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
## SDK Auto-Discovery
|
|
43
|
+
|
|
44
|
+
Omit `connectedAccountId` to let SDK find the account automatically:
|
|
45
|
+
|
|
46
|
+
```typescript
|
|
47
|
+
// SDK finds user's Gmail connection
|
|
48
|
+
const trigger = await composio.triggers.create(
|
|
49
|
+
'user_123',
|
|
50
|
+
'GMAIL_NEW_GMAIL_MESSAGE',
|
|
51
|
+
{
|
|
52
|
+
triggerConfig: { labelIds: 'INBOX', interval: 60 }
|
|
53
|
+
}
|
|
54
|
+
);
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
## Automatic Reuse
|
|
58
|
+
|
|
59
|
+
Triggers with identical configuration are automatically reused:
|
|
60
|
+
|
|
61
|
+
```typescript
|
|
62
|
+
// First call creates trigger
|
|
63
|
+
const trigger1 = await composio.triggers.create(
|
|
64
|
+
'user_123',
|
|
65
|
+
'GMAIL_NEW_GMAIL_MESSAGE',
|
|
66
|
+
{ triggerConfig: { labelIds: 'INBOX' } }
|
|
67
|
+
);
|
|
68
|
+
|
|
69
|
+
// Second call returns same trigger (no duplicate)
|
|
70
|
+
const trigger2 = await composio.triggers.create(
|
|
71
|
+
'user_123',
|
|
72
|
+
'GMAIL_NEW_GMAIL_MESSAGE',
|
|
73
|
+
{ triggerConfig: { labelIds: 'INBOX' } }
|
|
74
|
+
);
|
|
75
|
+
|
|
76
|
+
console.log(trigger1.triggerId === trigger2.triggerId); // true
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
## Version Pinning
|
|
80
|
+
|
|
81
|
+
Pin trigger versions in production to prevent breaking changes:
|
|
82
|
+
|
|
83
|
+
```typescript
|
|
84
|
+
const composio = new Composio({
|
|
85
|
+
apiKey: process.env.COMPOSIO_API_KEY,
|
|
86
|
+
triggerVersions: {
|
|
87
|
+
'GMAIL_NEW_GMAIL_MESSAGE': '12082025_00',
|
|
88
|
+
'GITHUB_COMMIT_EVENT': '12082025_00'
|
|
89
|
+
}
|
|
90
|
+
});
|
|
91
|
+
|
|
92
|
+
// Uses pinned version
|
|
93
|
+
const trigger = await composio.triggers.create(
|
|
94
|
+
'user_123',
|
|
95
|
+
'GMAIL_NEW_GMAIL_MESSAGE',
|
|
96
|
+
{ triggerConfig: { labelIds: 'INBOX' } }
|
|
97
|
+
);
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
**Why pin versions:**
|
|
101
|
+
- Prevents config schema changes
|
|
102
|
+
- Ensures production stability
|
|
103
|
+
- Updates on your schedule
|
|
104
|
+
|
|
105
|
+
## Trigger Configuration Examples
|
|
106
|
+
|
|
107
|
+
```typescript
|
|
108
|
+
// Gmail - New messages in specific label
|
|
109
|
+
await composio.triggers.create('user_123', 'GMAIL_NEW_GMAIL_MESSAGE', {
|
|
110
|
+
triggerConfig: {
|
|
111
|
+
labelIds: 'INBOX',
|
|
112
|
+
userId: 'me',
|
|
113
|
+
interval: 60
|
|
114
|
+
}
|
|
115
|
+
});
|
|
116
|
+
|
|
117
|
+
// GitHub - New commits
|
|
118
|
+
await composio.triggers.create('user_123', 'GITHUB_COMMIT_EVENT', {
|
|
119
|
+
triggerConfig: {
|
|
120
|
+
owner: 'composio',
|
|
121
|
+
repo: 'sdk',
|
|
122
|
+
branch: 'main'
|
|
123
|
+
}
|
|
124
|
+
});
|
|
125
|
+
|
|
126
|
+
// Slack - New messages in channel
|
|
127
|
+
await composio.triggers.create('user_123', 'SLACK_NEW_MESSAGE', {
|
|
128
|
+
triggerConfig: {
|
|
129
|
+
channelId: 'C123456',
|
|
130
|
+
botUserId: 'U123456'
|
|
131
|
+
}
|
|
132
|
+
});
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
## Error Handling
|
|
136
|
+
|
|
137
|
+
```typescript
|
|
138
|
+
try {
|
|
139
|
+
const trigger = await composio.triggers.create(
|
|
140
|
+
'user_123',
|
|
141
|
+
'GMAIL_NEW_GMAIL_MESSAGE',
|
|
142
|
+
{ triggerConfig: { labelIds: 'INBOX' } }
|
|
143
|
+
);
|
|
144
|
+
} catch (error) {
|
|
145
|
+
if (error.name === 'ComposioConnectedAccountNotFoundError') {
|
|
146
|
+
// User hasn't connected Gmail yet
|
|
147
|
+
console.log('Please connect your Gmail account');
|
|
148
|
+
} else if (error.name === 'ValidationError') {
|
|
149
|
+
// Invalid trigger config
|
|
150
|
+
console.error('Invalid configuration:', error.message);
|
|
151
|
+
} else {
|
|
152
|
+
throw error;
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
## Discover Available Triggers
|
|
158
|
+
|
|
159
|
+
```typescript
|
|
160
|
+
// Get all triggers
|
|
161
|
+
const triggers = await composio.triggers.list();
|
|
162
|
+
|
|
163
|
+
// Search by keyword
|
|
164
|
+
const emailTriggers = await composio.triggers.list({ search: 'email' });
|
|
165
|
+
|
|
166
|
+
// Filter by toolkit
|
|
167
|
+
const slackTriggers = await composio.triggers.list({ toolkit: 'slack' });
|
|
168
|
+
|
|
169
|
+
// Get trigger details
|
|
170
|
+
const trigger = await composio.triggers.getTrigger('GMAIL_NEW_GMAIL_MESSAGE');
|
|
171
|
+
console.log(trigger.config); // Shows required config fields
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
## List Active Triggers
|
|
175
|
+
|
|
176
|
+
```typescript
|
|
177
|
+
// All active triggers
|
|
178
|
+
const active = await composio.triggers.getActiveTriggers();
|
|
179
|
+
|
|
180
|
+
// By trigger slug
|
|
181
|
+
const gmailTriggers = await composio.triggers.getActiveTriggers({
|
|
182
|
+
triggerSlugs: ['GMAIL_NEW_GMAIL_MESSAGE']
|
|
183
|
+
});
|
|
184
|
+
|
|
185
|
+
// By connected account
|
|
186
|
+
const accountTriggers = await composio.triggers.getActiveTriggers({
|
|
187
|
+
connectedAccountIds: ['conn_abc123']
|
|
188
|
+
});
|
|
189
|
+
|
|
190
|
+
// Combine filters
|
|
191
|
+
const userSlackTriggers = await composio.triggers.getActiveTriggers({
|
|
192
|
+
triggerSlugs: ['SLACK_NEW_MESSAGE'],
|
|
193
|
+
connectedAccountIds: ['conn_def456']
|
|
194
|
+
});
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
## Common Patterns
|
|
198
|
+
|
|
199
|
+
### Check Before Creating
|
|
200
|
+
|
|
201
|
+
```typescript
|
|
202
|
+
async function ensureTrigger(userId: string, triggerSlug: string, config: any) {
|
|
203
|
+
// Check if trigger exists
|
|
204
|
+
const existing = await composio.triggers.getActiveTriggers({
|
|
205
|
+
triggerSlugs: [triggerSlug]
|
|
206
|
+
});
|
|
207
|
+
|
|
208
|
+
if (existing.items.length > 0) {
|
|
209
|
+
return existing.items[0];
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
// Create if doesn't exist
|
|
213
|
+
return await composio.triggers.create(userId, triggerSlug, {
|
|
214
|
+
triggerConfig: config
|
|
215
|
+
});
|
|
216
|
+
}
|
|
217
|
+
```
|
|
218
|
+
|
|
219
|
+
### Onboarding Flow
|
|
220
|
+
|
|
221
|
+
```typescript
|
|
222
|
+
async function setupUserTriggers(userId: string) {
|
|
223
|
+
// Check connected accounts
|
|
224
|
+
const accounts = await composio.connectedAccounts.list({
|
|
225
|
+
userIds: [userId]
|
|
226
|
+
});
|
|
227
|
+
|
|
228
|
+
// Create triggers for each service
|
|
229
|
+
for (const account of accounts.items) {
|
|
230
|
+
if (account.toolkit.slug === 'gmail') {
|
|
231
|
+
await composio.triggers.create(userId, 'GMAIL_NEW_GMAIL_MESSAGE', {
|
|
232
|
+
connectedAccountId: account.id,
|
|
233
|
+
triggerConfig: { labelIds: 'INBOX' }
|
|
234
|
+
});
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
```
|
|
239
|
+
|
|
240
|
+
## Key Points
|
|
241
|
+
|
|
242
|
+
- **Use proper user IDs** - Never use 'default' in production
|
|
243
|
+
- **Requires connected account** - User must authenticate first
|
|
244
|
+
- **Automatic reuse** - Identical configs share same trigger instance
|
|
245
|
+
- **Pin versions** - Prevents breaking changes in production
|
|
246
|
+
- **Error handling** - Handle missing connections gracefully
|