zilmate 1.7.8 → 1.8.1
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/cli/update.d.ts.map +1 -1
- package/dist/cli/update.js +19 -4
- package/dist/cli/update.js.map +1 -1
- package/dist/index.js +1 -1
- package/dist/tools/daytona-browser.tool.js +1 -1
- package/dist/tools/daytona-browser.tool.js.map +1 -1
- package/package.json +3 -2
|
@@ -0,0 +1,348 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Building Chat UIs with Tool Router
|
|
3
|
+
impact: HIGH
|
|
4
|
+
description: Best practices for building chat applications with toolkit selection, connection management, and session handling
|
|
5
|
+
tags: [tool-router, chat-ui, vercel-ai-sdk, toolkit-selection, authentication, session]
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Building Chat UIs with Tool Router
|
|
9
|
+
|
|
10
|
+
Build chat applications with Tool Router using **Vercel AI SDK**, create **sessions per message** with dynamic configuration, and provide **toolkit selection** and **connection management** UI.
|
|
11
|
+
|
|
12
|
+
> 📖 **Before you begin:** Make sure you have set up your API keys. See [Setting Up API Keys](./setup-api-keys.md) for instructions on configuring Composio and LLM provider API keys.
|
|
13
|
+
|
|
14
|
+
## Recommended: Vercel AI SDK
|
|
15
|
+
|
|
16
|
+
- Native streaming support
|
|
17
|
+
- React hooks for chat interfaces
|
|
18
|
+
- Built-in UI components
|
|
19
|
+
- Excellent DX with Tool Router
|
|
20
|
+
|
|
21
|
+
## ❌ Incorrect - Sharing Sessions Without Config
|
|
22
|
+
|
|
23
|
+
```typescript
|
|
24
|
+
// DON'T: Reuse sessions without proper configuration
|
|
25
|
+
const globalSession = await composio.create('default', {
|
|
26
|
+
toolkits: ['gmail'] // Hard-coded toolkits
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
app.post('/api/chat', async (req, res) => {
|
|
30
|
+
// ❌ No user isolation
|
|
31
|
+
// ❌ No per-message configuration
|
|
32
|
+
// ❌ Can't change toolkits dynamically
|
|
33
|
+
const tools = await globalSession.tools();
|
|
34
|
+
});
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
## ✅ Correct - Session Per Message
|
|
38
|
+
|
|
39
|
+
```typescript
|
|
40
|
+
// DO: Create sessions per message with proper config
|
|
41
|
+
import { Composio } from '@composio/core';
|
|
42
|
+
import { VercelProvider } from '@composio/vercel';
|
|
43
|
+
import { streamText } from 'ai';
|
|
44
|
+
import { openai } from '@ai-sdk/openai';
|
|
45
|
+
|
|
46
|
+
const composio = new Composio({ provider: new VercelProvider() });
|
|
47
|
+
|
|
48
|
+
app.post('/api/chat', async (req, res) => {
|
|
49
|
+
const { userId, message, selectedToolkits } = req.body;
|
|
50
|
+
|
|
51
|
+
// Create new session for this message
|
|
52
|
+
const session = await composio.create(userId, {
|
|
53
|
+
toolkits: selectedToolkits, // User-selected toolkits
|
|
54
|
+
manageConnections: true
|
|
55
|
+
});
|
|
56
|
+
|
|
57
|
+
const tools = await session.tools();
|
|
58
|
+
|
|
59
|
+
const stream = await streamText({
|
|
60
|
+
model: openai('gpt-5.2'),
|
|
61
|
+
messages: [{ role: 'user', content: message }],
|
|
62
|
+
tools,
|
|
63
|
+
maxSteps: 10
|
|
64
|
+
});
|
|
65
|
+
|
|
66
|
+
return stream.toDataStreamResponse();
|
|
67
|
+
});
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
## Toolkit Selection UI
|
|
71
|
+
|
|
72
|
+
### List All Available Toolkits
|
|
73
|
+
|
|
74
|
+
Create a session **without toolkit filters** to show all available toolkits:
|
|
75
|
+
|
|
76
|
+
```typescript
|
|
77
|
+
// API endpoint to list all toolkits
|
|
78
|
+
app.post('/api/toolkits', async (req, res) => {
|
|
79
|
+
const { userId } = req.body;
|
|
80
|
+
|
|
81
|
+
// No toolkits parameter = all toolkits available
|
|
82
|
+
const session = await composio.create(userId);
|
|
83
|
+
const toolkits = await session.toolkits();
|
|
84
|
+
|
|
85
|
+
res.json(toolkits.items.map(tk => ({
|
|
86
|
+
slug: tk.slug,
|
|
87
|
+
name: tk.name,
|
|
88
|
+
description: tk.description,
|
|
89
|
+
logo: tk.logo,
|
|
90
|
+
isConnected: tk.connectedAccounts.length > 0
|
|
91
|
+
})));
|
|
92
|
+
});
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
### React Component
|
|
96
|
+
|
|
97
|
+
```typescript
|
|
98
|
+
export function ToolkitSelector({ userId, onSelect }: Props) {
|
|
99
|
+
const [toolkits, setToolkits] = useState<Toolkit[]>([]);
|
|
100
|
+
const [selected, setSelected] = useState<string[]>([]);
|
|
101
|
+
|
|
102
|
+
useEffect(() => {
|
|
103
|
+
fetch('/api/toolkits', {
|
|
104
|
+
method: 'POST',
|
|
105
|
+
body: JSON.stringify({ userId })
|
|
106
|
+
}).then(res => res.json()).then(setToolkits);
|
|
107
|
+
}, [userId]);
|
|
108
|
+
|
|
109
|
+
return (
|
|
110
|
+
<div className="toolkit-grid">
|
|
111
|
+
{toolkits.items.map(tk => (
|
|
112
|
+
<div
|
|
113
|
+
key={tk.slug}
|
|
114
|
+
className={selected.includes(tk.slug) ? 'selected' : ''}
|
|
115
|
+
onClick={() => setSelected(prev =>
|
|
116
|
+
prev.includes(tk.slug) ? prev.filter(s => s !== tk.slug) : [...prev, tk.slug]
|
|
117
|
+
)}
|
|
118
|
+
>
|
|
119
|
+
<img src={tk.logo} alt={tk.name} />
|
|
120
|
+
<h3>{tk.name}</h3>
|
|
121
|
+
{tk.isConnected && <span>✓ Connected</span>}
|
|
122
|
+
</div>
|
|
123
|
+
))}
|
|
124
|
+
<button onClick={() => onSelect(selected)}>Use Selected</button>
|
|
125
|
+
</div>
|
|
126
|
+
);
|
|
127
|
+
}
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
## Connection Management UI
|
|
131
|
+
|
|
132
|
+
### Authorize Toolkits
|
|
133
|
+
|
|
134
|
+
```typescript
|
|
135
|
+
// API endpoint to start connection flow
|
|
136
|
+
app.post('/api/connect', async (req, res) => {
|
|
137
|
+
const { userId, toolkitSlug } = req.body;
|
|
138
|
+
|
|
139
|
+
const session = await composio.create(userId, {
|
|
140
|
+
toolkits: [toolkitSlug]
|
|
141
|
+
});
|
|
142
|
+
|
|
143
|
+
const auth = await session.authorize(toolkitSlug, {
|
|
144
|
+
callbackUrl: `${process.env.APP_URL}/auth/callback`
|
|
145
|
+
});
|
|
146
|
+
|
|
147
|
+
res.json({ redirectUrl: auth.redirectUrl });
|
|
148
|
+
});
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
### React Component
|
|
152
|
+
|
|
153
|
+
```typescript
|
|
154
|
+
export function ConnectedAccounts({ userId }: Props) {
|
|
155
|
+
const [toolkits, setToolkits] = useState<Toolkit[]>([]);
|
|
156
|
+
|
|
157
|
+
const handleConnect = async (slug: string) => {
|
|
158
|
+
const res = await fetch('/api/connect', {
|
|
159
|
+
method: 'POST',
|
|
160
|
+
body: JSON.stringify({ userId, toolkitSlug: slug })
|
|
161
|
+
});
|
|
162
|
+
const { redirectUrl } = await res.json();
|
|
163
|
+
window.location.href = redirectUrl;
|
|
164
|
+
};
|
|
165
|
+
|
|
166
|
+
return (
|
|
167
|
+
<div>
|
|
168
|
+
{toolkits.items.map(tk => (
|
|
169
|
+
<div key={tk.slug}>
|
|
170
|
+
<h3>{tk.name}</h3>
|
|
171
|
+
{tk.isConnected ? (
|
|
172
|
+
<button onClick={() => handleDisconnect(tk.slug)}>Disconnect</button>
|
|
173
|
+
) : (
|
|
174
|
+
<button onClick={() => handleConnect(tk.slug)}>Connect</button>
|
|
175
|
+
)}
|
|
176
|
+
</div>
|
|
177
|
+
))}
|
|
178
|
+
</div>
|
|
179
|
+
);
|
|
180
|
+
}
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
## Connected Account Sharing
|
|
184
|
+
|
|
185
|
+
**Connected accounts are shared between sessions** (tied to user ID and auth configs, not individual sessions).
|
|
186
|
+
|
|
187
|
+
```typescript
|
|
188
|
+
// Both sessions use the same Gmail connected account
|
|
189
|
+
const session1 = await composio.create('user_123', { toolkits: ['gmail'] });
|
|
190
|
+
const session2 = await composio.create('user_123', { toolkits: ['gmail', 'slack'] });
|
|
191
|
+
|
|
192
|
+
// ✅ Connected accounts shared across sessions
|
|
193
|
+
// ✅ No need to reconnect for each session
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
### Override Connected Accounts
|
|
197
|
+
|
|
198
|
+
```typescript
|
|
199
|
+
// Override which connected account to use
|
|
200
|
+
const session = await composio.create('user_123', {
|
|
201
|
+
toolkits: ['gmail'],
|
|
202
|
+
connectedAccounts: {
|
|
203
|
+
gmail: 'conn_specific_account_id' // Use specific account
|
|
204
|
+
}
|
|
205
|
+
});
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
### Override Auth Config
|
|
209
|
+
|
|
210
|
+
```typescript
|
|
211
|
+
// Override which auth config to use
|
|
212
|
+
const session = await composio.create('user_123', {
|
|
213
|
+
toolkits: ['gmail'],
|
|
214
|
+
authConfig: {
|
|
215
|
+
gmail: 'auth_config_custom_id' // Use custom auth config
|
|
216
|
+
}
|
|
217
|
+
});
|
|
218
|
+
```
|
|
219
|
+
|
|
220
|
+
## Complete Chat Application
|
|
221
|
+
|
|
222
|
+
```typescript
|
|
223
|
+
// app/api/chat/route.ts
|
|
224
|
+
import { Composio } from '@composio/core';
|
|
225
|
+
import { VercelProvider } from '@composio/vercel';
|
|
226
|
+
import { streamText } from 'ai';
|
|
227
|
+
import { openai } from '@ai-sdk/openai';
|
|
228
|
+
|
|
229
|
+
const composio = new Composio({ provider: new VercelProvider() });
|
|
230
|
+
|
|
231
|
+
export async function POST(req: Request) {
|
|
232
|
+
const { userId, messages, selectedToolkits } = await req.json();
|
|
233
|
+
|
|
234
|
+
const session = await composio.create(userId, {
|
|
235
|
+
toolkits: selectedToolkits,
|
|
236
|
+
manageConnections: true
|
|
237
|
+
});
|
|
238
|
+
|
|
239
|
+
const tools = await session.tools();
|
|
240
|
+
|
|
241
|
+
const result = await streamText({
|
|
242
|
+
model: openai('gpt-5.2'),
|
|
243
|
+
messages,
|
|
244
|
+
tools,
|
|
245
|
+
maxSteps: 10
|
|
246
|
+
});
|
|
247
|
+
|
|
248
|
+
return result.toDataStreamResponse();
|
|
249
|
+
}
|
|
250
|
+
```
|
|
251
|
+
|
|
252
|
+
```typescript
|
|
253
|
+
// app/page.tsx - Chat UI
|
|
254
|
+
'use client';
|
|
255
|
+
import { useChat } from 'ai/react';
|
|
256
|
+
import { useState } from 'react';
|
|
257
|
+
|
|
258
|
+
export default function ChatPage() {
|
|
259
|
+
const [selectedToolkits, setSelectedToolkits] = useState(['gmail']);
|
|
260
|
+
|
|
261
|
+
const { messages, input, handleInputChange, handleSubmit } = useChat({
|
|
262
|
+
api: '/api/chat',
|
|
263
|
+
body: { userId: 'user_123', selectedToolkits }
|
|
264
|
+
});
|
|
265
|
+
|
|
266
|
+
return (
|
|
267
|
+
<div>
|
|
268
|
+
<ToolkitSelector
|
|
269
|
+
userId="user_123"
|
|
270
|
+
selected={selectedToolkits}
|
|
271
|
+
onSelect={setSelectedToolkits}
|
|
272
|
+
/>
|
|
273
|
+
<div className="messages">
|
|
274
|
+
{messages.map(m => (
|
|
275
|
+
<div key={m.id} className={m.role}>{m.content}</div>
|
|
276
|
+
))}
|
|
277
|
+
</div>
|
|
278
|
+
<form onSubmit={handleSubmit}>
|
|
279
|
+
<input value={input} onChange={handleInputChange} />
|
|
280
|
+
<button type="submit">Send</button>
|
|
281
|
+
</form>
|
|
282
|
+
</div>
|
|
283
|
+
);
|
|
284
|
+
}
|
|
285
|
+
```
|
|
286
|
+
|
|
287
|
+
## Manual Tool Operations (Advanced)
|
|
288
|
+
|
|
289
|
+
For custom workflows, you can manually fetch and execute tools instead of using sessions.
|
|
290
|
+
|
|
291
|
+
### Manual Tool Fetching
|
|
292
|
+
|
|
293
|
+
```typescript
|
|
294
|
+
// Fetch raw tool metadata
|
|
295
|
+
const tools = await composio.tools.getRawComposioTools({
|
|
296
|
+
toolkits: ['gmail', 'slack'],
|
|
297
|
+
important: true
|
|
298
|
+
});
|
|
299
|
+
```
|
|
300
|
+
|
|
301
|
+
### Manual Tool Execution
|
|
302
|
+
|
|
303
|
+
```typescript
|
|
304
|
+
// Execute tools directly
|
|
305
|
+
const result = await composio.tools.execute('GMAIL_SEND_EMAIL', {
|
|
306
|
+
userId: 'user_123',
|
|
307
|
+
arguments: { to: 'test@example.com', subject: 'Hello' },
|
|
308
|
+
version: '15082025_00' // Version REQUIRED for manual execution
|
|
309
|
+
});
|
|
310
|
+
|
|
311
|
+
if (!result.successful) {
|
|
312
|
+
console.error('Failed:', result.error);
|
|
313
|
+
}
|
|
314
|
+
```
|
|
315
|
+
|
|
316
|
+
### When to Use Manual Approach
|
|
317
|
+
|
|
318
|
+
| Use Case | Recommended Approach |
|
|
319
|
+
|----------|---------------------|
|
|
320
|
+
| Chat UIs, agents, streaming | ✅ `session.tools()` |
|
|
321
|
+
| Custom workflows, catalogs | ✅ Manual fetch/execute |
|
|
322
|
+
|
|
323
|
+
**Reference:** See [Fetching Tools](./app-fetch-tools.md) and [Tool Execution](./app-execute-tools.md) for detailed manual operation guides.
|
|
324
|
+
|
|
325
|
+
## Best Practices
|
|
326
|
+
|
|
327
|
+
1. **Create Sessions Per Message** - Fresh session with config for each interaction
|
|
328
|
+
2. **Let Users Select Toolkits** - Dynamic toolkit configuration via UI
|
|
329
|
+
3. **Show Connection Status** - Display which toolkits are connected
|
|
330
|
+
4. **Handle Authorization** - Use `session.authorize()` for auth flows
|
|
331
|
+
5. **Enable Connection Management** - Set `manageConnections: true`
|
|
332
|
+
|
|
333
|
+
## Key Principles
|
|
334
|
+
|
|
335
|
+
1. **Vercel AI SDK** - Best framework for chat UIs
|
|
336
|
+
2. **Session per message** - Fresh sessions with config
|
|
337
|
+
3. **No toolkit filter** - List all by creating session without toolkits
|
|
338
|
+
4. **Shared connections** - Connected accounts shared across sessions
|
|
339
|
+
5. **Override when needed** - Use `connectedAccounts` or `authConfig` for special cases
|
|
340
|
+
|
|
341
|
+
## Reference
|
|
342
|
+
|
|
343
|
+
- [Vercel AI SDK](https://sdk.vercel.ai)
|
|
344
|
+
- [Tool Router Sessions](https://docs.composio.dev/sdk/typescript/api/tool-router#creating-sessions)
|
|
345
|
+
- [Session Authorization](https://docs.composio.dev/sdk/typescript/api/tool-router#authorization)
|
|
346
|
+
- [Fetching Tools](./app-fetch-tools.md)
|
|
347
|
+
- [Tool Execution](./app-execute-tools.md)
|
|
348
|
+
- [Tool Versions](./app-tool-versions.md)
|
|
@@ -0,0 +1,240 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Using Composio with Vercel AI SDK
|
|
3
|
+
impact: HIGH
|
|
4
|
+
description: Use Tool Router for native tool integration and MCP for protocol-compliant scenarios with Vercel AI SDK
|
|
5
|
+
tags: [tool-router, ai-sdk, vercel, framework, native-tools, mcp, integration]
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Using Composio with Vercel AI SDK
|
|
9
|
+
|
|
10
|
+
Composio integrates with Vercel AI SDK using **Tool Router sessions**. Use **native tools** (recommended) via `session.tools()` with `VercelProvider`, or **MCP tools** when MCP protocol compliance is required.
|
|
11
|
+
|
|
12
|
+
## Installation
|
|
13
|
+
|
|
14
|
+
```bash
|
|
15
|
+
npm install @composio/core @composio/vercel ai @ai-sdk/openai
|
|
16
|
+
|
|
17
|
+
# For MCP (optional)
|
|
18
|
+
npm install @ai-sdk/mcp
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
## ✅ Correct - Native Tools (Recommended)
|
|
22
|
+
|
|
23
|
+
```typescript
|
|
24
|
+
import { openai } from '@ai-sdk/openai';
|
|
25
|
+
import { generateText, streamText } from 'ai';
|
|
26
|
+
import { Composio } from '@composio/core';
|
|
27
|
+
import { VercelProvider } from '@composio/vercel';
|
|
28
|
+
|
|
29
|
+
const composio = new Composio({
|
|
30
|
+
apiKey: process.env.COMPOSIO_API_KEY,
|
|
31
|
+
provider: new VercelProvider()
|
|
32
|
+
});
|
|
33
|
+
|
|
34
|
+
async function runAgent(userId: string, prompt: string) {
|
|
35
|
+
// Create Tool Router session
|
|
36
|
+
const session = await composio.create(userId, {
|
|
37
|
+
toolkits: ['gmail', 'slack'],
|
|
38
|
+
manageConnections: true
|
|
39
|
+
});
|
|
40
|
+
|
|
41
|
+
const tools = await session.tools();
|
|
42
|
+
|
|
43
|
+
// Use with generateText or streamText
|
|
44
|
+
const result = await generateText({
|
|
45
|
+
model: openai('gpt-5.2'),
|
|
46
|
+
tools: tools,
|
|
47
|
+
maxSteps: 5,
|
|
48
|
+
prompt: prompt
|
|
49
|
+
});
|
|
50
|
+
|
|
51
|
+
return result.text;
|
|
52
|
+
}
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
**For streaming:**
|
|
56
|
+
```typescript
|
|
57
|
+
const stream = await streamText({
|
|
58
|
+
model: openai('gpt-5.2'),
|
|
59
|
+
tools: await session.tools(),
|
|
60
|
+
maxSteps: 5,
|
|
61
|
+
prompt: prompt
|
|
62
|
+
});
|
|
63
|
+
|
|
64
|
+
return stream.toDataStreamResponse();
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
**Key Points:**
|
|
68
|
+
- Create new sessions per request/conversation
|
|
69
|
+
- Use `session.tools()` with `VercelProvider`
|
|
70
|
+
- Always set `maxSteps` for multi-step tool calling
|
|
71
|
+
- Works with `generateText` and `streamText`
|
|
72
|
+
|
|
73
|
+
## ✅ Correct - MCP Tools
|
|
74
|
+
|
|
75
|
+
Use `createMCPClient` with Tool Router sessions for MCP protocol compliance:
|
|
76
|
+
|
|
77
|
+
```typescript
|
|
78
|
+
import { openai } from '@ai-sdk/openai';
|
|
79
|
+
import { generateText } from 'ai';
|
|
80
|
+
import { createMCPClient } from '@ai-sdk/mcp';
|
|
81
|
+
import { Composio } from '@composio/core';
|
|
82
|
+
import { VercelProvider } from '@composio/vercel';
|
|
83
|
+
|
|
84
|
+
const composio = new Composio({
|
|
85
|
+
apiKey: process.env.COMPOSIO_API_KEY,
|
|
86
|
+
provider: new VercelProvider()
|
|
87
|
+
});
|
|
88
|
+
|
|
89
|
+
async function runAgentWithMcp(userId: string, prompt: string) {
|
|
90
|
+
// 1. Create Tool Router session
|
|
91
|
+
const session = await composio.create(userId, {
|
|
92
|
+
toolkits: ['gmail', 'slack'],
|
|
93
|
+
manageConnections: true
|
|
94
|
+
});
|
|
95
|
+
|
|
96
|
+
// 2. Create MCP client with HTTP transport
|
|
97
|
+
const client = await createMCPClient({
|
|
98
|
+
transport: {
|
|
99
|
+
type: 'http',
|
|
100
|
+
url: session.mcp.url,
|
|
101
|
+
headers: session.mcp.headers
|
|
102
|
+
}
|
|
103
|
+
});
|
|
104
|
+
|
|
105
|
+
// 3. Get tools and use with generateText
|
|
106
|
+
const tools = await client.getTools();
|
|
107
|
+
|
|
108
|
+
const result = await generateText({
|
|
109
|
+
model: openai('gpt-5.2'),
|
|
110
|
+
tools: tools,
|
|
111
|
+
maxSteps: 5,
|
|
112
|
+
prompt: prompt
|
|
113
|
+
});
|
|
114
|
+
|
|
115
|
+
return result.text;
|
|
116
|
+
}
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
## ✅ Correct - React Integration
|
|
120
|
+
|
|
121
|
+
**API Route (app/api/chat/route.ts):**
|
|
122
|
+
```typescript
|
|
123
|
+
import { openai } from '@ai-sdk/openai';
|
|
124
|
+
import { streamText } from 'ai';
|
|
125
|
+
import { Composio } from '@composio/core';
|
|
126
|
+
import { VercelProvider } from '@composio/vercel';
|
|
127
|
+
|
|
128
|
+
const composio = new Composio({
|
|
129
|
+
apiKey: process.env.COMPOSIO_API_KEY,
|
|
130
|
+
provider: new VercelProvider()
|
|
131
|
+
});
|
|
132
|
+
|
|
133
|
+
export async function POST(req: Request) {
|
|
134
|
+
const { messages, userId } = await req.json();
|
|
135
|
+
|
|
136
|
+
const session = await composio.create(userId, {
|
|
137
|
+
toolkits: ['gmail', 'slack'],
|
|
138
|
+
manageConnections: true
|
|
139
|
+
});
|
|
140
|
+
|
|
141
|
+
const stream = await streamText({
|
|
142
|
+
model: openai('gpt-5.2'),
|
|
143
|
+
tools: await session.tools(),
|
|
144
|
+
maxSteps: 5,
|
|
145
|
+
messages: messages
|
|
146
|
+
});
|
|
147
|
+
|
|
148
|
+
return stream.toDataStreamResponse();
|
|
149
|
+
}
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
**Client Component:**
|
|
153
|
+
```typescript
|
|
154
|
+
'use client';
|
|
155
|
+
import { useChat } from 'ai/react';
|
|
156
|
+
|
|
157
|
+
export default function Chat({ userId }: { userId: string }) {
|
|
158
|
+
const { messages, input, handleInputChange, handleSubmit } = useChat({
|
|
159
|
+
api: '/api/chat',
|
|
160
|
+
body: { userId }
|
|
161
|
+
});
|
|
162
|
+
|
|
163
|
+
return (
|
|
164
|
+
<div>
|
|
165
|
+
{messages.map(m => <div key={m.id}>{m.role}: {m.content}</div>)}
|
|
166
|
+
<form onSubmit={handleSubmit}>
|
|
167
|
+
<input value={input} onChange={handleInputChange} />
|
|
168
|
+
</form>
|
|
169
|
+
</div>
|
|
170
|
+
);
|
|
171
|
+
}
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
## ❌ Incorrect Patterns
|
|
175
|
+
|
|
176
|
+
```typescript
|
|
177
|
+
// ❌ Don't forget VercelProvider
|
|
178
|
+
const composio = new Composio({ apiKey: key }); // Missing provider
|
|
179
|
+
|
|
180
|
+
// ❌ Don't bypass Tool Router for MCP
|
|
181
|
+
const client = await createMCPClient({
|
|
182
|
+
transport: { type: 'http', url: 'https://mcp.composio.dev' }
|
|
183
|
+
});
|
|
184
|
+
|
|
185
|
+
// ❌ Don't use stdio transport in production
|
|
186
|
+
const client = await createMCPClient({
|
|
187
|
+
transport: { type: 'stdio', command: 'npx', args: ['@composio/mcp'] }
|
|
188
|
+
});
|
|
189
|
+
// Use HTTP transport instead
|
|
190
|
+
|
|
191
|
+
// ❌ Don't forget maxSteps
|
|
192
|
+
await generateText({
|
|
193
|
+
model: openai('gpt-5.2'),
|
|
194
|
+
tools: tools
|
|
195
|
+
// Missing maxSteps - stops after first tool call
|
|
196
|
+
});
|
|
197
|
+
|
|
198
|
+
// ❌ Don't cache tools across users
|
|
199
|
+
const cachedTools = await session.tools();
|
|
200
|
+
// Reusing for different users...
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
## Key Principles
|
|
204
|
+
|
|
205
|
+
**Native Tools:**
|
|
206
|
+
- Use `session.tools()` with `VercelProvider`
|
|
207
|
+
- Works with `generateText` and `streamText`
|
|
208
|
+
- Best for most use cases
|
|
209
|
+
|
|
210
|
+
**MCP Tools:**
|
|
211
|
+
- Use `createMCPClient` with HTTP transport
|
|
212
|
+
- Get tools via `client.getTools()`
|
|
213
|
+
- Use `session.mcp.url` and `session.mcp.headers`
|
|
214
|
+
- Only when MCP protocol compliance is required
|
|
215
|
+
|
|
216
|
+
**Session Management:**
|
|
217
|
+
- Always create sessions via `composio.create()`
|
|
218
|
+
- Create new sessions per request/conversation
|
|
219
|
+
- Don't cache tools or sessions across users
|
|
220
|
+
|
|
221
|
+
**Multi-Step Agents:**
|
|
222
|
+
- Always set `maxSteps` for multi-step tool calling
|
|
223
|
+
- Use `onStepFinish` callback to monitor execution
|
|
224
|
+
|
|
225
|
+
## When to Use
|
|
226
|
+
|
|
227
|
+
| Use Case | Approach | Method |
|
|
228
|
+
|----------|----------|--------|
|
|
229
|
+
| Most scenarios | Native Tools | `session.tools()` with VercelProvider |
|
|
230
|
+
| MCP protocol required | MCP Tools | `createMCPClient` + `getTools()` |
|
|
231
|
+
| React apps | Native Tools | `useChat` with API route |
|
|
232
|
+
| Type-safe MCP | MCP with schemas | Explicit tool definitions |
|
|
233
|
+
|
|
234
|
+
## Reference
|
|
235
|
+
|
|
236
|
+
- [Vercel AI SDK Docs](https://ai-sdk.dev/docs)
|
|
237
|
+
- [AI SDK Tool Calling](https://ai-sdk.dev/docs/ai-sdk-core/tools-and-tool-calling)
|
|
238
|
+
- [AI SDK MCP](https://ai-sdk.dev/docs/ai-sdk-core/mcp-tools)
|
|
239
|
+
- [Composio Vercel Provider](https://docs.composio.dev/docs/providers/vercel)
|
|
240
|
+
- [Tool Router Sessions](tr-session-lifecycle.md)
|