github-to-mcp-monorepo 1.0.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/.env.example +8 -0
- package/.github/CODEOWNERS +6 -0
- package/.husky/pre-commit +1 -0
- package/.nvmrc +1 -0
- package/.prettierignore +5 -0
- package/.prettierrc +7 -0
- package/.vscode/settings.json +4 -0
- package/ARCHITECTURE.md +1429 -0
- package/CHANGELOG.md +167 -0
- package/CONTRIBUTING.md +327 -0
- package/LICENSE +201 -0
- package/README.md +1028 -0
- package/SECURITY.md +248 -0
- package/VISUAL_GUIDE.md +437 -0
- package/apps/vscode/IMPLEMENTATION.md +480 -0
- package/apps/vscode/README.md +248 -0
- package/apps/vscode/package.json +381 -0
- package/apps/vscode/resources/icon.png +0 -0
- package/apps/vscode/resources/icon.svg +5 -0
- package/apps/vscode/src/commands/browseRegistry.ts +211 -0
- package/apps/vscode/src/commands/configureClaudeDesktop.ts +332 -0
- package/apps/vscode/src/commands/convert.ts +82 -0
- package/apps/vscode/src/commands/convertCurrentRepo.ts +109 -0
- package/apps/vscode/src/commands/convertFromUrl.ts +138 -0
- package/apps/vscode/src/commands/index.ts +121 -0
- package/apps/vscode/src/commands/validate.ts +197 -0
- package/apps/vscode/src/extension.ts +464 -0
- package/apps/vscode/src/global.d.ts +36 -0
- package/apps/vscode/src/test/extension.test.ts +73 -0
- package/apps/vscode/src/utils/file-generator.ts +529 -0
- package/apps/vscode/src/utils/github-api.ts +335 -0
- package/apps/vscode/src/utils/index.ts +29 -0
- package/apps/vscode/src/utils/mcp-config.ts +334 -0
- package/apps/vscode/src/utils/storage.ts +87 -0
- package/apps/vscode/src/views/McpServersTreeView.ts +160 -0
- package/apps/vscode/src/views/OutputChannelView.ts +195 -0
- package/apps/vscode/src/views/StatusBarItem.ts +251 -0
- package/apps/vscode/src/views/ToolsExplorerView.ts +314 -0
- package/apps/vscode/src/views/historyProvider.ts +75 -0
- package/apps/vscode/src/views/index.ts +12 -0
- package/apps/vscode/src/views/resultsPanel.ts +330 -0
- package/apps/vscode/src/webviews/ConversionPanel.ts +350 -0
- package/apps/vscode/src/webviews/ToolDetailsPanel.ts +448 -0
- package/apps/vscode/src/webviews/index.ts +9 -0
- package/apps/vscode/src/webviews/webview-ui/styles.ts +492 -0
- package/apps/vscode/tsconfig.json +20 -0
- package/apps/web/PLAYGROUND_GUIDE.md +499 -0
- package/apps/web/README.md +505 -0
- package/apps/web/app/api/convert/route.ts +100 -0
- package/apps/web/app/api/convert/stream/route.ts +198 -0
- package/apps/web/app/api/deploy/route.ts +157 -0
- package/apps/web/app/api/edge/route.ts +308 -0
- package/apps/web/app/api/export-docker/route.ts +284 -0
- package/apps/web/app/api/generate-openapi/route.ts +119 -0
- package/apps/web/app/api/mcp/[serverId]/route.ts +263 -0
- package/apps/web/app/api/playground/connect/route.ts +143 -0
- package/apps/web/app/api/playground/disconnect/route.ts +78 -0
- package/apps/web/app/api/playground/execute/route.ts +135 -0
- package/apps/web/app/api/playground/sessions/route.ts +103 -0
- package/apps/web/app/api/playground/tools/route.ts +117 -0
- package/apps/web/app/api/playground/v2/connect/route.ts +96 -0
- package/apps/web/app/api/playground/v2/disconnect/route.ts +88 -0
- package/apps/web/app/api/playground/v2/health/route.ts +80 -0
- package/apps/web/app/api/playground/v2/prompts/route.ts +160 -0
- package/apps/web/app/api/playground/v2/resources/route.ts +159 -0
- package/apps/web/app/api/playground/v2/sessions/route.ts +184 -0
- package/apps/web/app/api/playground/v2/tools/route.ts +167 -0
- package/apps/web/app/api/stream/route.ts +232 -0
- package/apps/web/app/batch/BatchConvertClient.tsx +190 -0
- package/apps/web/app/batch/page.tsx +37 -0
- package/apps/web/app/convert/page.tsx +269 -0
- package/apps/web/app/dashboard/page.tsx +380 -0
- package/apps/web/app/globals.css +622 -0
- package/apps/web/app/layout.tsx +120 -0
- package/apps/web/app/manifest.ts +31 -0
- package/apps/web/app/opengraph-image.tsx +112 -0
- package/apps/web/app/page.old.tsx +924 -0
- package/apps/web/app/page.tsx +77 -0
- package/apps/web/app/playground/page.tsx +306 -0
- package/apps/web/app/playground/v2/error.tsx +163 -0
- package/apps/web/app/playground/v2/layout.tsx +58 -0
- package/apps/web/app/playground/v2/loading.tsx +152 -0
- package/apps/web/app/playground/v2/page.tsx +644 -0
- package/apps/web/app/playground/v2/providers.tsx +214 -0
- package/apps/web/app/playground/v2/use-shortcuts.ts +209 -0
- package/apps/web/app/playground/v2/use-url-state.ts +296 -0
- package/apps/web/app/providers.tsx +22 -0
- package/apps/web/app/sitemap.ts +32 -0
- package/apps/web/app/twitter-image.tsx +112 -0
- package/apps/web/components/BranchSelector.tsx +401 -0
- package/apps/web/components/ClaudeConfigExport.tsx +226 -0
- package/apps/web/components/Features.tsx +84 -0
- package/apps/web/components/Footer.tsx +119 -0
- package/apps/web/components/GenerationProgress.tsx +248 -0
- package/apps/web/components/GithubUrlInput.tsx +483 -0
- package/apps/web/components/Header.tsx +175 -0
- package/apps/web/components/Hero.tsx +117 -0
- package/apps/web/components/HowItWorks.tsx +119 -0
- package/apps/web/components/InstallBanner.tsx +158 -0
- package/apps/web/components/Logo.tsx +116 -0
- package/apps/web/components/ParticleBackground.tsx +105 -0
- package/apps/web/components/Playground.tsx +472 -0
- package/apps/web/components/PlaygroundToolTester.tsx +410 -0
- package/apps/web/components/ProductCards.tsx +179 -0
- package/apps/web/components/SplitView.tsx +194 -0
- package/apps/web/components/ToolFilter.tsx +260 -0
- package/apps/web/components/ToolList.tsx +325 -0
- package/apps/web/components/batch/BatchConvert.tsx +785 -0
- package/apps/web/components/batch/index.ts +7 -0
- package/apps/web/components/convert/ConfigTabs.tsx +230 -0
- package/apps/web/components/convert/ConversionResult.tsx +482 -0
- package/apps/web/components/convert/InlinePlayground.tsx +259 -0
- package/apps/web/components/convert/LoadingSteps.tsx +311 -0
- package/apps/web/components/convert/OneClickInstall.tsx +224 -0
- package/apps/web/components/convert/ToolCard.tsx +189 -0
- package/apps/web/components/convert/TryInPlayground.tsx +242 -0
- package/apps/web/components/convert/index.ts +12 -0
- package/apps/web/components/deploy/DeployButton.tsx +369 -0
- package/apps/web/components/deploy/index.ts +7 -0
- package/apps/web/components/docker/DockerExport.tsx +690 -0
- package/apps/web/components/docker/index.ts +7 -0
- package/apps/web/components/install/OneClickInstall.tsx +676 -0
- package/apps/web/components/install/index.ts +7 -0
- package/apps/web/components/playground/CapabilityTabs.tsx +150 -0
- package/apps/web/components/playground/ConnectionStatusV2.tsx +322 -0
- package/apps/web/components/playground/EmptyStates.tsx +305 -0
- package/apps/web/components/playground/ExecutionLog.tsx +260 -0
- package/apps/web/components/playground/ExecutionLogV2.tsx +378 -0
- package/apps/web/components/playground/JsonViewer.tsx +388 -0
- package/apps/web/components/playground/PlaygroundLayout.tsx +244 -0
- package/apps/web/components/playground/PromptsPanel.tsx +385 -0
- package/apps/web/components/playground/ResourcesPanel.tsx +378 -0
- package/apps/web/components/playground/SchemaForm.tsx +477 -0
- package/apps/web/components/playground/ServerStatus.tsx +151 -0
- package/apps/web/components/playground/ShareButton.tsx +239 -0
- package/apps/web/components/playground/ToolsPanel.tsx +309 -0
- package/apps/web/components/playground/TransportConfigurator.tsx +563 -0
- package/apps/web/components/playground/index.ts +74 -0
- package/apps/web/components/playground/types.ts +202 -0
- package/apps/web/components/streaming/StreamingProgress.tsx +441 -0
- package/apps/web/components/streaming/index.ts +7 -0
- package/apps/web/components/ui/badge.tsx +42 -0
- package/apps/web/components/ui/button.tsx +88 -0
- package/apps/web/components/ui/card.tsx +75 -0
- package/apps/web/components/ui/code-block.tsx +122 -0
- package/apps/web/components/ui/index.ts +12 -0
- package/apps/web/components/ui/input.tsx +55 -0
- package/apps/web/components/ui/tabs.tsx +61 -0
- package/apps/web/hooks/index.ts +85 -0
- package/apps/web/hooks/types.ts +1173 -0
- package/apps/web/hooks/use-conversion.ts +133 -0
- package/apps/web/hooks/use-execution-history.ts +376 -0
- package/apps/web/hooks/use-generation-progress.ts +147 -0
- package/apps/web/hooks/use-local-storage.ts +88 -0
- package/apps/web/hooks/use-mcp-client.ts +623 -0
- package/apps/web/hooks/use-mcp-connection.ts +500 -0
- package/apps/web/hooks/use-mcp-execution.ts +282 -0
- package/apps/web/hooks/use-mcp-prompts.ts +441 -0
- package/apps/web/hooks/use-mcp-resources.ts +430 -0
- package/apps/web/hooks/use-mcp-tools.ts +540 -0
- package/apps/web/hooks/use-playground-store.ts +299 -0
- package/apps/web/hooks/use-playground.ts +184 -0
- package/apps/web/hooks/use-streaming-conversion.ts +227 -0
- package/apps/web/hooks/useBatchConversion.ts +271 -0
- package/apps/web/hooks/useDockerConfig.ts +161 -0
- package/apps/web/hooks/usePlatformDetection.ts +80 -0
- package/apps/web/hooks/useStreaming.ts +199 -0
- package/apps/web/lib/api/errors.ts +386 -0
- package/apps/web/lib/api/index.ts +137 -0
- package/apps/web/lib/api/logger.ts +187 -0
- package/apps/web/lib/api/middleware.ts +364 -0
- package/apps/web/lib/api/openapi.ts +977 -0
- package/apps/web/lib/api/session-manager.ts +594 -0
- package/apps/web/lib/api/types.ts +433 -0
- package/apps/web/lib/api/validation.ts +523 -0
- package/apps/web/lib/constants.ts +114 -0
- package/apps/web/lib/mcp/client.ts +1137 -0
- package/apps/web/lib/mcp/events.ts +651 -0
- package/apps/web/lib/mcp/index.ts +347 -0
- package/apps/web/lib/mcp/logger.ts +428 -0
- package/apps/web/lib/mcp/metrics.ts +703 -0
- package/apps/web/lib/mcp/retry.ts +616 -0
- package/apps/web/lib/mcp/session-manager.ts +779 -0
- package/apps/web/lib/mcp/transports.ts +988 -0
- package/apps/web/lib/mcp/types.ts +594 -0
- package/apps/web/lib/mcp-client-enhanced.ts +871 -0
- package/apps/web/lib/mcp-client.ts +778 -0
- package/apps/web/lib/mcp-errors.ts +489 -0
- package/apps/web/lib/mcp-sandbox.ts +593 -0
- package/apps/web/lib/mcp-testing.ts +428 -0
- package/apps/web/lib/mcp-types.ts +448 -0
- package/apps/web/lib/playground-store.tsx +1147 -0
- package/apps/web/lib/utils.ts +439 -0
- package/apps/web/next-env.d.ts +5 -0
- package/apps/web/next.config.js +23 -0
- package/apps/web/package.json +55 -0
- package/apps/web/postcss.config.js +6 -0
- package/apps/web/public/.well-known/ai-plugin.json +17 -0
- package/apps/web/public/logo.svg +6 -0
- package/apps/web/public/robots.txt +22 -0
- package/apps/web/public/schema.json +27 -0
- package/apps/web/tailwind.config.js +26 -0
- package/apps/web/tailwind.config.ts +123 -0
- package/apps/web/tsconfig.json +20 -0
- package/apps/web/types/deploy.ts +139 -0
- package/apps/web/types/index.ts +247 -0
- package/apps/web/vercel.json +39 -0
- package/eslint.config.mjs +23 -0
- package/llms.txt +102 -0
- package/mkdocs/docs/api/core.md +318 -0
- package/mkdocs/docs/api/index.md +128 -0
- package/mkdocs/docs/api/mcp-server.md +301 -0
- package/mkdocs/docs/api/openapi-parser.md +254 -0
- package/mkdocs/docs/assets/logo.svg +7 -0
- package/mkdocs/docs/changelog.md +118 -0
- package/mkdocs/docs/cli/generate.md +148 -0
- package/mkdocs/docs/cli/index.md +52 -0
- package/mkdocs/docs/cli/inspect.md +164 -0
- package/mkdocs/docs/cli/serve.md +136 -0
- package/mkdocs/docs/concepts/classification.md +254 -0
- package/mkdocs/docs/concepts/how-it-works.md +299 -0
- package/mkdocs/docs/concepts/index.md +77 -0
- package/mkdocs/docs/concepts/mcp-protocol.md +362 -0
- package/mkdocs/docs/concepts/tool-types.md +382 -0
- package/mkdocs/docs/contributing/architecture.md +262 -0
- package/mkdocs/docs/contributing/development.md +245 -0
- package/mkdocs/docs/contributing/index.md +73 -0
- package/mkdocs/docs/contributing/testing.md +320 -0
- package/mkdocs/docs/getting-started/configuration.md +235 -0
- package/mkdocs/docs/getting-started/index.md +54 -0
- package/mkdocs/docs/getting-started/installation.md +145 -0
- package/mkdocs/docs/getting-started/quickstart.md +160 -0
- package/mkdocs/docs/guides/batch.md +375 -0
- package/mkdocs/docs/guides/claude-desktop.md +227 -0
- package/mkdocs/docs/guides/cursor.md +188 -0
- package/mkdocs/docs/guides/custom-tools.md +367 -0
- package/mkdocs/docs/guides/index.md +78 -0
- package/mkdocs/docs/guides/private-repos.md +221 -0
- package/mkdocs/docs/guides/vscode.md +247 -0
- package/mkdocs/docs/index.md +175 -0
- package/mkdocs/docs/reference/config.md +223 -0
- package/mkdocs/docs/reference/env.md +192 -0
- package/mkdocs/docs/reference/index.md +102 -0
- package/mkdocs/docs/reference/tools.md +309 -0
- package/mkdocs/docs/stylesheets/extra.css +231 -0
- package/mkdocs/mkdocs.yml +204 -0
- package/mkdocs/overrides/.gitkeep +1 -0
- package/mkdocs/overrides/main.html +7 -0
- package/mkdocs/python-deps.txt +7 -0
- package/mkdocs/vercel.json +11 -0
- package/package.json +63 -0
- package/packages/core/package.json +61 -0
- package/packages/core/src/__tests__/bitbucket-client.test.ts +366 -0
- package/packages/core/src/__tests__/cli.test.ts +235 -0
- package/packages/core/src/__tests__/code-extractor.test.ts +378 -0
- package/packages/core/src/__tests__/docker-generator.test.ts +255 -0
- package/packages/core/src/__tests__/github-client.test.ts +390 -0
- package/packages/core/src/__tests__/gitlab-client.test.ts +319 -0
- package/packages/core/src/__tests__/go-extractor.test.ts +351 -0
- package/packages/core/src/__tests__/graphql-extractor.test.ts +330 -0
- package/packages/core/src/__tests__/java-extractor.test.ts +497 -0
- package/packages/core/src/__tests__/plugins.test.ts +467 -0
- package/packages/core/src/__tests__/readme-extractor.test.ts +258 -0
- package/packages/core/src/__tests__/redis-cache.test.ts +307 -0
- package/packages/core/src/__tests__/rust-extractor.test.ts +252 -0
- package/packages/core/src/__tests__/streaming.test.ts +251 -0
- package/packages/core/src/additional-extractors.ts +333 -0
- package/packages/core/src/cache/cache-interface.ts +179 -0
- package/packages/core/src/cache/index.ts +210 -0
- package/packages/core/src/cache/redis-cache.ts +291 -0
- package/packages/core/src/cache/upstash-cache.ts +379 -0
- package/packages/core/src/cache.ts +251 -0
- package/packages/core/src/cli.ts +822 -0
- package/packages/core/src/code-extractor.ts +696 -0
- package/packages/core/src/docker-generator.ts +470 -0
- package/packages/core/src/edge-compatible.ts +491 -0
- package/packages/core/src/extractors/go-extractor.ts +791 -0
- package/packages/core/src/extractors/index.ts +9 -0
- package/packages/core/src/extractors/java-extractor.ts +937 -0
- package/packages/core/src/extractors/rust-extractor.ts +744 -0
- package/packages/core/src/github-client.ts +319 -0
- package/packages/core/src/go-generator.ts +356 -0
- package/packages/core/src/graphql-extractor.ts +358 -0
- package/packages/core/src/index.ts +797 -0
- package/packages/core/src/langchain-exporter.ts +617 -0
- package/packages/core/src/language-parsers.ts +1114 -0
- package/packages/core/src/mcp-introspector.ts +279 -0
- package/packages/core/src/monorepo-detector.ts +378 -0
- package/packages/core/src/plugins/index.ts +370 -0
- package/packages/core/src/plugins/registry.ts +404 -0
- package/packages/core/src/plugins/types.ts +215 -0
- package/packages/core/src/providers/base-provider.ts +246 -0
- package/packages/core/src/providers/bitbucket-client.ts +464 -0
- package/packages/core/src/providers/gitlab-client.ts +388 -0
- package/packages/core/src/providers/index.ts +176 -0
- package/packages/core/src/python-generator.ts +260 -0
- package/packages/core/src/queue/index.ts +100 -0
- package/packages/core/src/queue/memory-queue.ts +445 -0
- package/packages/core/src/queue/redis-queue.ts +578 -0
- package/packages/core/src/queue/types.ts +251 -0
- package/packages/core/src/readme-extractor.ts +409 -0
- package/packages/core/src/schema-generator.ts +638 -0
- package/packages/core/src/streaming.ts +999 -0
- package/packages/core/src/types.ts +289 -0
- package/packages/core/tsconfig.json +9 -0
- package/packages/core/tsup.config.ts +25 -0
- package/packages/mcp-server/README.md +297 -0
- package/packages/mcp-server/package.json +55 -0
- package/packages/mcp-server/src/__tests__/mcp-server.test.ts +177 -0
- package/packages/mcp-server/src/__tests__/tools.test.ts +217 -0
- package/packages/mcp-server/src/index.ts +1206 -0
- package/packages/mcp-server/src/prompts/index.ts +601 -0
- package/packages/mcp-server/src/tools/export-docker.ts +362 -0
- package/packages/mcp-server/src/tools/generate-openapi.ts +162 -0
- package/packages/mcp-server/src/tools/monitor-mcp-server.ts +448 -0
- package/packages/mcp-server/src/tools/stream-convert.ts +398 -0
- package/packages/mcp-server/src/tools/test-mcp-tool.ts +531 -0
- package/packages/mcp-server/tsconfig.json +12 -0
- package/packages/mcp-server/tsup.config.ts +14 -0
- package/packages/openapi-parser/package-lock.json +3028 -0
- package/packages/openapi-parser/package.json +41 -0
- package/packages/openapi-parser/src/analyzer.ts +700 -0
- package/packages/openapi-parser/src/asyncapi-parser.ts +475 -0
- package/packages/openapi-parser/src/cli.ts +302 -0
- package/packages/openapi-parser/src/generator.ts +570 -0
- package/packages/openapi-parser/src/generators/express-analyzer.ts +649 -0
- package/packages/openapi-parser/src/generators/fastapi-analyzer.ts +960 -0
- package/packages/openapi-parser/src/generators/index.ts +200 -0
- package/packages/openapi-parser/src/generators/nextjs-analyzer.ts +768 -0
- package/packages/openapi-parser/src/generators/openapi-builder.ts +527 -0
- package/packages/openapi-parser/src/generators/types.ts +298 -0
- package/packages/openapi-parser/src/graphql-parser.ts +462 -0
- package/packages/openapi-parser/src/grpc-parser.ts +649 -0
- package/packages/openapi-parser/src/har-parser.ts +723 -0
- package/packages/openapi-parser/src/index.ts +635 -0
- package/packages/openapi-parser/src/insomnia-parser.ts +614 -0
- package/packages/openapi-parser/src/parser.ts +231 -0
- package/packages/openapi-parser/src/postman-parser.ts +611 -0
- package/packages/openapi-parser/src/ref-resolver.ts +313 -0
- package/packages/openapi-parser/src/transformer.ts +459 -0
- package/packages/openapi-parser/tests/generators/express.test.ts +209 -0
- package/packages/openapi-parser/tests/generators/fastapi.test.ts +236 -0
- package/packages/openapi-parser/tests/generators/nextjs.test.ts +273 -0
- package/packages/openapi-parser/tests/parsers.test.ts +847 -0
- package/packages/openapi-parser/tsconfig.json +9 -0
- package/packages/openapi-parser/tsup.config.ts +11 -0
- package/packages/registry/package.json +59 -0
- package/packages/registry/src/cli.ts +456 -0
- package/packages/registry/src/index.ts +44 -0
- package/packages/registry/src/popular/github.json +47 -0
- package/packages/registry/src/popular/index.ts +55 -0
- package/packages/registry/src/popular/linear.json +42 -0
- package/packages/registry/src/popular/notion.json +42 -0
- package/packages/registry/src/popular/openai.json +40 -0
- package/packages/registry/src/popular/resend.json +38 -0
- package/packages/registry/src/popular/slack.json +42 -0
- package/packages/registry/src/popular/stripe.json +163 -0
- package/packages/registry/src/popular/supabase.json +42 -0
- package/packages/registry/src/popular/twilio.json +40 -0
- package/packages/registry/src/popular/vercel.json +40 -0
- package/packages/registry/src/registry.ts +492 -0
- package/packages/registry/src/storage.ts +334 -0
- package/packages/registry/src/types.ts +275 -0
- package/packages/registry/src/updater.ts +208 -0
- package/packages/registry/tsconfig.json +10 -0
- package/packages/registry/tsup.config.ts +11 -0
- package/pnpm-workspace.yaml +3 -0
- package/scripts/build-docs.sh +16 -0
- package/server.json +9 -0
- package/templates/Dockerfile.python.template +60 -0
- package/templates/Dockerfile.typescript.template +60 -0
- package/templates/docker-compose.template.yml +68 -0
- package/tests/fixtures/express-app/index.js +34 -0
- package/tests/fixtures/express-app/routes/posts.js +43 -0
- package/tests/fixtures/express-app/routes/users.js +58 -0
- package/tests/fixtures/fastapi-app/main.py +125 -0
- package/tests/fixtures/fastapi-app/routes/admin.py +42 -0
- package/tests/fixtures/graphql/simple-schema.graphql +65 -0
- package/tests/fixtures/mocks/github-api-responses.json +63 -0
- package/tests/fixtures/nextjs-app/app/api/posts/route.ts +55 -0
- package/tests/fixtures/nextjs-app/app/api/users/[id]/route.ts +63 -0
- package/tests/fixtures/nextjs-app/app/api/users/route.ts +44 -0
- package/tests/fixtures/nextjs-app/pages/api/health.ts +28 -0
- package/tests/fixtures/openapi/petstore.yaml +179 -0
- package/tests/integration/langchain-export.test.ts +405 -0
- package/tests/integration/openapi-conversion.test.ts +221 -0
- package/tsconfig.json +18 -0
- package/vitest.config.ts +32 -0
|
@@ -0,0 +1,499 @@
|
|
|
1
|
+
# Playground Developer Guide
|
|
2
|
+
|
|
3
|
+
Quick reference for working with the github-to-mcp playground components.
|
|
4
|
+
|
|
5
|
+
## Quick Start
|
|
6
|
+
|
|
7
|
+
### Running the Playground
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
cd apps/web
|
|
11
|
+
pnpm dev
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
Navigate to `http://localhost:3000/playground`
|
|
15
|
+
|
|
16
|
+
## Component API Reference
|
|
17
|
+
|
|
18
|
+
### Playground Component
|
|
19
|
+
|
|
20
|
+
```typescript
|
|
21
|
+
import Playground from '@/components/Playground';
|
|
22
|
+
|
|
23
|
+
<Playground
|
|
24
|
+
initialResult={conversionResult} // Optional: Pre-load tools
|
|
25
|
+
className="custom-styles" // Optional: Additional classes
|
|
26
|
+
/>
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
**Props:**
|
|
30
|
+
- `initialResult?: ConversionResult | null` - Pre-loaded conversion result with tools
|
|
31
|
+
- `className?: string` - Additional CSS classes
|
|
32
|
+
|
|
33
|
+
**Features:**
|
|
34
|
+
- Automatically uses localStorage to persist last conversion
|
|
35
|
+
- Falls back to demo tools if no result available
|
|
36
|
+
- Integrates SplitView for resizable layout
|
|
37
|
+
|
|
38
|
+
### PlaygroundToolTester Component
|
|
39
|
+
|
|
40
|
+
```typescript
|
|
41
|
+
import PlaygroundToolTester from '@/components/PlaygroundToolTester';
|
|
42
|
+
|
|
43
|
+
<PlaygroundToolTester
|
|
44
|
+
tool={selectedTool}
|
|
45
|
+
onExecute={handleExecute}
|
|
46
|
+
className="h-full"
|
|
47
|
+
/>
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
**Props:**
|
|
51
|
+
- `tool: Tool` - The tool to test (required)
|
|
52
|
+
- `onExecute: (toolName: string, args: Record<string, any>) => Promise<any>` - Execution handler
|
|
53
|
+
- `className?: string` - Additional CSS classes
|
|
54
|
+
|
|
55
|
+
**Schema Support:**
|
|
56
|
+
- ✅ String inputs with textarea for long text
|
|
57
|
+
- ✅ Number inputs with validation
|
|
58
|
+
- ✅ Boolean inputs with checkbox
|
|
59
|
+
- ✅ Array inputs with add/remove items
|
|
60
|
+
- ✅ Object inputs with nested properties
|
|
61
|
+
- ✅ Enum inputs with dropdown select
|
|
62
|
+
- ✅ Required field validation
|
|
63
|
+
|
|
64
|
+
### SplitView Component
|
|
65
|
+
|
|
66
|
+
```typescript
|
|
67
|
+
import SplitView from '@/components/SplitView';
|
|
68
|
+
|
|
69
|
+
<SplitView
|
|
70
|
+
left={<LeftPanel />}
|
|
71
|
+
right={<RightPanel />}
|
|
72
|
+
defaultSplit={30} // 30% left, 70% right
|
|
73
|
+
minLeftWidth={250} // Minimum left panel width
|
|
74
|
+
minRightWidth={400} // Minimum right panel width
|
|
75
|
+
orientation="horizontal" // 'horizontal' | 'vertical'
|
|
76
|
+
/>
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
**Props:**
|
|
80
|
+
- `left: React.ReactNode` - Left panel content
|
|
81
|
+
- `right: React.ReactNode` - Right panel content
|
|
82
|
+
- `defaultSplit?: number` - Initial split percentage (default: 50)
|
|
83
|
+
- `minLeftWidth?: number` - Min left panel width in px (default: 200)
|
|
84
|
+
- `minRightWidth?: number` - Min right panel width in px (default: 200)
|
|
85
|
+
- `orientation?: 'horizontal' | 'vertical'` - Split direction (default: horizontal)
|
|
86
|
+
|
|
87
|
+
**Features:**
|
|
88
|
+
- Drag to resize
|
|
89
|
+
- Maximize/minimize buttons
|
|
90
|
+
- Respects minimum widths
|
|
91
|
+
- Smooth transitions
|
|
92
|
+
|
|
93
|
+
### BranchSelector Component
|
|
94
|
+
|
|
95
|
+
```typescript
|
|
96
|
+
import BranchSelector from '@/components/BranchSelector';
|
|
97
|
+
import type { GitRef } from '@/components/BranchSelector';
|
|
98
|
+
|
|
99
|
+
<BranchSelector
|
|
100
|
+
repoUrl="https://github.com/owner/repo"
|
|
101
|
+
onSelect={(ref: GitRef) => console.log(ref)}
|
|
102
|
+
defaultRef={{ type: 'branch', ref: 'main' }}
|
|
103
|
+
/>
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
**Props:**
|
|
107
|
+
- `repoUrl: string` - GitHub repository URL (required)
|
|
108
|
+
- `onSelect: (ref: GitRef | null) => void` - Selection callback
|
|
109
|
+
- `defaultRef?: GitRef` - Pre-selected reference
|
|
110
|
+
- `className?: string` - Additional CSS classes
|
|
111
|
+
|
|
112
|
+
**GitRef Interface:**
|
|
113
|
+
```typescript
|
|
114
|
+
interface GitRef {
|
|
115
|
+
type: 'branch' | 'tag' | 'commit';
|
|
116
|
+
ref: string; // Branch name, tag name, or commit SHA
|
|
117
|
+
isDefault?: boolean; // True for repository default branch
|
|
118
|
+
}
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
### GenerationProgress Component
|
|
122
|
+
|
|
123
|
+
```typescript
|
|
124
|
+
import GenerationProgress from '@/components/GenerationProgress';
|
|
125
|
+
import { useGenerationProgress } from '@/hooks/use-generation-progress';
|
|
126
|
+
|
|
127
|
+
function MyComponent() {
|
|
128
|
+
const progress = useGenerationProgress();
|
|
129
|
+
|
|
130
|
+
// Start step
|
|
131
|
+
progress.startStep('fetching', 'Fetching repository...');
|
|
132
|
+
|
|
133
|
+
// Complete step
|
|
134
|
+
progress.completeStep('fetching', 'Repository fetched');
|
|
135
|
+
|
|
136
|
+
// Error handling
|
|
137
|
+
progress.errorStep('extracting', 'Failed to extract tools');
|
|
138
|
+
|
|
139
|
+
// Add tools found
|
|
140
|
+
progress.addToolsFound(5);
|
|
141
|
+
|
|
142
|
+
return <GenerationProgress progress={progress} />;
|
|
143
|
+
}
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
**Hook Methods:**
|
|
147
|
+
- `startStep(step, message)` - Mark step as active
|
|
148
|
+
- `completeStep(step, message)` - Mark step as completed
|
|
149
|
+
- `errorStep(step, message)` - Mark step as errored
|
|
150
|
+
- `addToolsFound(count)` - Increment tools counter
|
|
151
|
+
- `reset()` - Reset all progress
|
|
152
|
+
|
|
153
|
+
**Progress Steps:**
|
|
154
|
+
1. `fetching` - Fetching Repository (10% weight)
|
|
155
|
+
2. `classifying` - Classifying Sources (20% weight)
|
|
156
|
+
3. `extracting` - Extracting Tools (40% weight)
|
|
157
|
+
4. `generating` - Generating Server (30% weight)
|
|
158
|
+
|
|
159
|
+
### ClaudeConfigExport Component
|
|
160
|
+
|
|
161
|
+
```typescript
|
|
162
|
+
import ClaudeConfigExport from '@/components/ClaudeConfigExport';
|
|
163
|
+
|
|
164
|
+
<ClaudeConfigExport
|
|
165
|
+
repoUrl="https://github.com/owner/repo"
|
|
166
|
+
repoName="owner/repo"
|
|
167
|
+
configName="my-mcp-server"
|
|
168
|
+
/>
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
**Props:**
|
|
172
|
+
- `repoUrl: string` - GitHub repository URL
|
|
173
|
+
- `repoName: string` - Repository name (owner/repo)
|
|
174
|
+
- `configName?: string` - Custom server name (default: repo name)
|
|
175
|
+
|
|
176
|
+
**Config Types:**
|
|
177
|
+
1. **NPX** - Zero-install with npx
|
|
178
|
+
2. **Local** - Clone and build from source
|
|
179
|
+
3. **Python** - Python-based server
|
|
180
|
+
|
|
181
|
+
### ToolFilter Component
|
|
182
|
+
|
|
183
|
+
```typescript
|
|
184
|
+
import ToolFilter from '@/components/ToolFilter';
|
|
185
|
+
import type { ToolFilterState } from '@/components/ToolFilter';
|
|
186
|
+
|
|
187
|
+
<ToolFilter
|
|
188
|
+
filters={filterState}
|
|
189
|
+
onFilterChange={setFilterState}
|
|
190
|
+
totalCount={100}
|
|
191
|
+
filteredCount={42}
|
|
192
|
+
/>
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
**ToolFilterState Interface:**
|
|
196
|
+
```typescript
|
|
197
|
+
interface ToolFilterState {
|
|
198
|
+
searchQuery: string;
|
|
199
|
+
selectedCategories: string[]; // 'openapi', 'graphql', 'readme'
|
|
200
|
+
sortBy: 'alphabetical' | 'source' | 'confidence';
|
|
201
|
+
}
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
### ToolList Component
|
|
205
|
+
|
|
206
|
+
```typescript
|
|
207
|
+
import ToolList from '@/components/ToolList';
|
|
208
|
+
|
|
209
|
+
<ToolList
|
|
210
|
+
tools={toolsArray}
|
|
211
|
+
showFilter={true}
|
|
212
|
+
defaultExpanded={false}
|
|
213
|
+
/>
|
|
214
|
+
```
|
|
215
|
+
|
|
216
|
+
**Props:**
|
|
217
|
+
- `tools: Tool[]` - Array of tools to display
|
|
218
|
+
- `showFilter?: boolean` - Show filter UI (default: false)
|
|
219
|
+
- `defaultExpanded?: boolean` - Expand all tools by default (default: false)
|
|
220
|
+
- `className?: string` - Additional CSS classes
|
|
221
|
+
|
|
222
|
+
## Custom Hooks
|
|
223
|
+
|
|
224
|
+
### useGenerationProgress
|
|
225
|
+
|
|
226
|
+
```typescript
|
|
227
|
+
import { useGenerationProgress } from '@/hooks/use-generation-progress';
|
|
228
|
+
|
|
229
|
+
const progress = useGenerationProgress();
|
|
230
|
+
|
|
231
|
+
// Access properties
|
|
232
|
+
progress.progress; // 0-100
|
|
233
|
+
progress.isComplete; // boolean
|
|
234
|
+
progress.hasError; // boolean
|
|
235
|
+
progress.toolsFound; // number
|
|
236
|
+
progress.steps; // Array of step objects
|
|
237
|
+
```
|
|
238
|
+
|
|
239
|
+
### useLocalStorage
|
|
240
|
+
|
|
241
|
+
```typescript
|
|
242
|
+
import { useLocalStorage } from '@/hooks/use-local-storage';
|
|
243
|
+
|
|
244
|
+
const [value, setValue] = useLocalStorage<ConversionResult>(
|
|
245
|
+
'playground-result', // key
|
|
246
|
+
null // default value
|
|
247
|
+
);
|
|
248
|
+
```
|
|
249
|
+
|
|
250
|
+
## Types Reference
|
|
251
|
+
|
|
252
|
+
### Tool
|
|
253
|
+
|
|
254
|
+
```typescript
|
|
255
|
+
interface Tool {
|
|
256
|
+
name: string;
|
|
257
|
+
description: string;
|
|
258
|
+
inputSchema: {
|
|
259
|
+
type: 'object';
|
|
260
|
+
properties: Record<string, SchemaProperty>;
|
|
261
|
+
required?: string[];
|
|
262
|
+
};
|
|
263
|
+
source?: {
|
|
264
|
+
type: 'openapi' | 'graphql' | 'readme' | 'universal';
|
|
265
|
+
file: string;
|
|
266
|
+
confidence?: number;
|
|
267
|
+
};
|
|
268
|
+
}
|
|
269
|
+
```
|
|
270
|
+
|
|
271
|
+
### SchemaProperty
|
|
272
|
+
|
|
273
|
+
```typescript
|
|
274
|
+
interface SchemaProperty {
|
|
275
|
+
type: 'string' | 'number' | 'boolean' | 'array' | 'object';
|
|
276
|
+
description?: string;
|
|
277
|
+
default?: any;
|
|
278
|
+
enum?: any[];
|
|
279
|
+
items?: SchemaProperty;
|
|
280
|
+
properties?: Record<string, SchemaProperty>;
|
|
281
|
+
required?: string[];
|
|
282
|
+
}
|
|
283
|
+
```
|
|
284
|
+
|
|
285
|
+
### ConversionResult
|
|
286
|
+
|
|
287
|
+
```typescript
|
|
288
|
+
interface ConversionResult {
|
|
289
|
+
success: boolean;
|
|
290
|
+
tools: Tool[];
|
|
291
|
+
repository: {
|
|
292
|
+
url: string;
|
|
293
|
+
name: string;
|
|
294
|
+
owner: string;
|
|
295
|
+
ref?: string;
|
|
296
|
+
};
|
|
297
|
+
stats: {
|
|
298
|
+
totalTools: number;
|
|
299
|
+
openApiTools: number;
|
|
300
|
+
graphqlTools: number;
|
|
301
|
+
readmeTools: number;
|
|
302
|
+
};
|
|
303
|
+
}
|
|
304
|
+
```
|
|
305
|
+
|
|
306
|
+
## Styling Guide
|
|
307
|
+
|
|
308
|
+
### Color Coding
|
|
309
|
+
|
|
310
|
+
```typescript
|
|
311
|
+
const SOURCE_COLORS = {
|
|
312
|
+
openapi: 'bg-purple-500/20 text-purple-300 border-purple-500/30',
|
|
313
|
+
graphql: 'bg-pink-500/20 text-pink-300 border-pink-500/30',
|
|
314
|
+
readme: 'bg-cyan-500/20 text-cyan-300 border-cyan-500/30',
|
|
315
|
+
universal: 'bg-blue-500/20 text-blue-300 border-blue-500/30',
|
|
316
|
+
};
|
|
317
|
+
```
|
|
318
|
+
|
|
319
|
+
### Common Patterns
|
|
320
|
+
|
|
321
|
+
**Glass Card:**
|
|
322
|
+
```tsx
|
|
323
|
+
<div className="rounded-xl border border-neutral-800 bg-neutral-900/50 backdrop-blur-sm">
|
|
324
|
+
{/* Content */}
|
|
325
|
+
</div>
|
|
326
|
+
```
|
|
327
|
+
|
|
328
|
+
**Action Button:**
|
|
329
|
+
```tsx
|
|
330
|
+
<Button className="bg-white hover:bg-neutral-200 text-black">
|
|
331
|
+
Execute
|
|
332
|
+
</Button>
|
|
333
|
+
```
|
|
334
|
+
|
|
335
|
+
**Input Field:**
|
|
336
|
+
```tsx
|
|
337
|
+
<Input
|
|
338
|
+
className="bg-neutral-900 border-neutral-800 text-white"
|
|
339
|
+
placeholder="Enter value..."
|
|
340
|
+
/>
|
|
341
|
+
```
|
|
342
|
+
|
|
343
|
+
## Best Practices
|
|
344
|
+
|
|
345
|
+
### 1. Error Handling
|
|
346
|
+
|
|
347
|
+
Always handle errors gracefully:
|
|
348
|
+
|
|
349
|
+
```typescript
|
|
350
|
+
try {
|
|
351
|
+
const result = await executeTool(toolName, args);
|
|
352
|
+
// Handle success
|
|
353
|
+
} catch (error) {
|
|
354
|
+
console.error('Tool execution failed:', error);
|
|
355
|
+
// Show user-friendly error message
|
|
356
|
+
}
|
|
357
|
+
```
|
|
358
|
+
|
|
359
|
+
### 2. Loading States
|
|
360
|
+
|
|
361
|
+
Show loading indicators for async operations:
|
|
362
|
+
|
|
363
|
+
```typescript
|
|
364
|
+
const [isLoading, setIsLoading] = useState(false);
|
|
365
|
+
|
|
366
|
+
async function handleAction() {
|
|
367
|
+
setIsLoading(true);
|
|
368
|
+
try {
|
|
369
|
+
await performAction();
|
|
370
|
+
} finally {
|
|
371
|
+
setIsLoading(false);
|
|
372
|
+
}
|
|
373
|
+
}
|
|
374
|
+
```
|
|
375
|
+
|
|
376
|
+
### 3. Validation
|
|
377
|
+
|
|
378
|
+
Validate required fields before execution:
|
|
379
|
+
|
|
380
|
+
```typescript
|
|
381
|
+
const isValid = tool.inputSchema.required?.every(
|
|
382
|
+
field => args[field] !== undefined && args[field] !== ''
|
|
383
|
+
);
|
|
384
|
+
|
|
385
|
+
if (!isValid) {
|
|
386
|
+
// Show validation error
|
|
387
|
+
return;
|
|
388
|
+
}
|
|
389
|
+
```
|
|
390
|
+
|
|
391
|
+
### 4. Memoization
|
|
392
|
+
|
|
393
|
+
Use `useMemo` for expensive computations:
|
|
394
|
+
|
|
395
|
+
```typescript
|
|
396
|
+
const filteredTools = useMemo(() => {
|
|
397
|
+
return tools.filter(tool =>
|
|
398
|
+
tool.name.toLowerCase().includes(query.toLowerCase())
|
|
399
|
+
);
|
|
400
|
+
}, [tools, query]);
|
|
401
|
+
```
|
|
402
|
+
|
|
403
|
+
### 5. Cleanup
|
|
404
|
+
|
|
405
|
+
Clean up event listeners and timers:
|
|
406
|
+
|
|
407
|
+
```typescript
|
|
408
|
+
useEffect(() => {
|
|
409
|
+
const handleResize = () => { /* ... */ };
|
|
410
|
+
window.addEventListener('resize', handleResize);
|
|
411
|
+
|
|
412
|
+
return () => {
|
|
413
|
+
window.removeEventListener('resize', handleResize);
|
|
414
|
+
};
|
|
415
|
+
}, []);
|
|
416
|
+
```
|
|
417
|
+
|
|
418
|
+
## Testing
|
|
419
|
+
|
|
420
|
+
### Component Tests
|
|
421
|
+
|
|
422
|
+
```typescript
|
|
423
|
+
import { render, screen, fireEvent } from '@testing-library/react';
|
|
424
|
+
import Playground from '@/components/Playground';
|
|
425
|
+
|
|
426
|
+
describe('Playground', () => {
|
|
427
|
+
it('renders demo tools by default', () => {
|
|
428
|
+
render(<Playground />);
|
|
429
|
+
expect(screen.getByText(/demo mode/i)).toBeInTheDocument();
|
|
430
|
+
});
|
|
431
|
+
|
|
432
|
+
it('filters tools by search query', () => {
|
|
433
|
+
render(<Playground />);
|
|
434
|
+
const searchInput = screen.getByPlaceholderText(/search tools/i);
|
|
435
|
+
fireEvent.change(searchInput, { target: { value: 'get_repo' } });
|
|
436
|
+
// Assert filtered results
|
|
437
|
+
});
|
|
438
|
+
});
|
|
439
|
+
```
|
|
440
|
+
|
|
441
|
+
### Integration Tests
|
|
442
|
+
|
|
443
|
+
```typescript
|
|
444
|
+
describe('Playground Integration', () => {
|
|
445
|
+
it('executes tool and displays result', async () => {
|
|
446
|
+
render(<Playground />);
|
|
447
|
+
|
|
448
|
+
// Select tool
|
|
449
|
+
fireEvent.click(screen.getByText('get_repository'));
|
|
450
|
+
|
|
451
|
+
// Fill form
|
|
452
|
+
const ownerInput = screen.getByLabelText(/owner/i);
|
|
453
|
+
fireEvent.change(ownerInput, { target: { value: 'github' } });
|
|
454
|
+
|
|
455
|
+
// Execute
|
|
456
|
+
fireEvent.click(screen.getByText(/execute/i));
|
|
457
|
+
|
|
458
|
+
// Wait for result
|
|
459
|
+
await screen.findByText(/result/i);
|
|
460
|
+
});
|
|
461
|
+
});
|
|
462
|
+
```
|
|
463
|
+
|
|
464
|
+
## Common Issues
|
|
465
|
+
|
|
466
|
+
### Issue: Tools not appearing
|
|
467
|
+
**Solution:** Check localStorage for cached result or ensure demo tools are loaded.
|
|
468
|
+
|
|
469
|
+
### Issue: Split view not resizing
|
|
470
|
+
**Solution:** Ensure parent container has defined height (`h-full` or specific height).
|
|
471
|
+
|
|
472
|
+
### Issue: Form validation not working
|
|
473
|
+
**Solution:** Verify `required` array in tool's inputSchema is populated.
|
|
474
|
+
|
|
475
|
+
### Issue: GitHub API rate limit
|
|
476
|
+
**Solution:** Use authenticated requests with GITHUB_TOKEN environment variable.
|
|
477
|
+
|
|
478
|
+
### Issue: TypeScript errors
|
|
479
|
+
**Solution:** Run `pnpm typecheck` and ensure all types are imported correctly.
|
|
480
|
+
|
|
481
|
+
## Performance Tips
|
|
482
|
+
|
|
483
|
+
1. **Lazy Load Monaco Editor**: Only load code editor when needed
|
|
484
|
+
2. **Virtualize Long Lists**: Use `react-window` for 100+ tools
|
|
485
|
+
3. **Debounce Search**: Delay filter execution for better UX
|
|
486
|
+
4. **Memoize Computations**: Use `useMemo` for filtering/sorting
|
|
487
|
+
5. **Code Split**: Dynamic import heavy components
|
|
488
|
+
|
|
489
|
+
## Resources
|
|
490
|
+
|
|
491
|
+
- [Next.js Documentation](https://nextjs.org/docs)
|
|
492
|
+
- [Framer Motion API](https://www.framer.com/motion/)
|
|
493
|
+
- [Tailwind CSS](https://tailwindcss.com/)
|
|
494
|
+
- [Radix UI](https://www.radix-ui.com/)
|
|
495
|
+
- [GitHub REST API](https://docs.github.com/en/rest)
|
|
496
|
+
|
|
497
|
+
---
|
|
498
|
+
|
|
499
|
+
**Need Help?** Check the main [WEB_UI_ENHANCEMENTS.md](/WEB_UI_ENHANCEMENTS.md) for comprehensive documentation.
|