@next-vibe/checker 1.0.11 → 1.0.13
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/.dist/bin/vibe-runtime.js +26 -22
- package/.dist/bin/vibe-runtime.js.map +5 -5
- package/.dist/oxlint-plugins/i18n.js +4 -0
- package/.dist/oxlint-plugins/i18n.js.map +1 -0
- package/.dist/oxlint-plugins/jsx-capitalization.js +4 -0
- package/.dist/oxlint-plugins/jsx-capitalization.js.map +1 -0
- package/.dist/oxlint-plugins/restricted-syntax.js +4 -0
- package/.dist/oxlint-plugins/restricted-syntax.js.map +1 -0
- package/check.config.ts +4 -12
- package/package.json +2 -9
- package/src/app/api/[locale]/LICENSE +674 -0
- package/src/app/api/[locale]/i18n/de/index.ts +13 -0
- package/src/app/api/[locale]/i18n/en/index.ts +12 -0
- package/src/app/api/[locale]/i18n/pl/index.ts +11 -0
- package/src/app/api/[locale]/shared/i18n/de/index.ts +85 -0
- package/src/app/api/[locale]/shared/i18n/en/index.ts +83 -0
- package/src/app/api/[locale]/shared/i18n/pl/index.ts +85 -0
- package/src/app/api/[locale]/shared/stats-filtering.ts +202 -0
- package/src/app/api/[locale]/shared/types/common.schema.ts +55 -0
- package/src/app/api/[locale]/shared/types/response.schema.ts +372 -0
- package/src/app/api/[locale]/shared/types/stats-filtering.schema.ts +375 -0
- package/src/app/api/[locale]/shared/types/utils.ts +190 -0
- package/src/app/api/[locale]/shared/utils/base64.ts +49 -0
- package/src/app/api/[locale]/shared/utils/env-util.ts +40 -0
- package/src/app/api/[locale]/shared/utils/i18n/de/index.ts +21 -0
- package/src/app/api/[locale]/shared/utils/i18n/en/index.ts +19 -0
- package/src/app/api/[locale]/shared/utils/i18n/pl/index.ts +21 -0
- package/src/app/api/[locale]/shared/utils/index.ts +11 -0
- package/src/app/api/[locale]/shared/utils/object-path.ts +41 -0
- package/src/app/api/[locale]/shared/utils/object.test.ts +82 -0
- package/src/app/api/[locale]/shared/utils/object.ts +75 -0
- package/src/app/api/[locale]/shared/utils/parse-error.ts +134 -0
- package/src/app/api/[locale]/shared/utils/parse-json.ts +70 -0
- package/src/app/api/[locale]/shared/utils/time.ts +53 -0
- package/src/app/api/[locale]/shared/utils/validation.ts +127 -0
- package/src/app/api/[locale]/shared/utils/zod-required-fields.ts +116 -0
- package/src/app/api/[locale]/system/builder/definition.ts +1942 -0
- package/src/app/api/[locale]/system/builder/enum.ts +78 -0
- package/src/app/api/[locale]/system/builder/i18n/de/index.ts +677 -0
- package/src/app/api/[locale]/system/builder/i18n/en/index.ts +665 -0
- package/src/app/api/[locale]/system/builder/i18n/pl/index.ts +668 -0
- package/src/app/api/[locale]/system/builder/repository/build-executor.test.ts +182 -0
- package/src/app/api/[locale]/system/builder/repository/build-executor.ts +583 -0
- package/src/app/api/[locale]/system/builder/repository/bun-compiler.ts +261 -0
- package/src/app/api/[locale]/system/builder/repository/bundle-analyzer.ts +197 -0
- package/src/app/api/[locale]/system/builder/repository/config-loader.ts +159 -0
- package/src/app/api/[locale]/system/builder/repository/config-validator.ts +97 -0
- package/src/app/api/[locale]/system/builder/repository/constants.ts +125 -0
- package/src/app/api/[locale]/system/builder/repository/error-suggester.ts +75 -0
- package/src/app/api/[locale]/system/builder/repository/file-copier.ts +98 -0
- package/src/app/api/[locale]/system/builder/repository/folder-cleaner.ts +80 -0
- package/src/app/api/[locale]/system/builder/repository/index.ts +2 -0
- package/src/app/api/[locale]/system/builder/repository/npm-package-generator.ts +146 -0
- package/src/app/api/[locale]/system/builder/repository/output-formatter.ts +104 -0
- package/src/app/api/[locale]/system/builder/repository/profile-service.ts +79 -0
- package/src/app/api/[locale]/system/builder/repository/report-generator.ts +125 -0
- package/src/app/api/[locale]/system/builder/repository/vite-compiler.ts +291 -0
- package/src/app/api/[locale]/system/builder/route.ts +21 -0
- package/src/app/api/[locale]/system/builder/test-files/file1.ts +2 -0
- package/src/app/api/[locale]/system/builder/test-files/file2.tsx +10 -0
- package/src/app/api/[locale]/system/builder/test-files/file3.tsx +16 -0
- package/src/app/api/[locale]/system/builder/test-files/folderToCopy/fileInFolder.ts +2 -0
- package/src/app/api/[locale]/system/builder/test-files/test-config.ts +38 -0
- package/src/app/api/[locale]/system/builder/test-files/test-delete-config.ts +8 -0
- package/src/app/api/[locale]/system/builder/test-files/test-project/package.json +24 -0
- package/src/app/api/[locale]/system/builder/test-files/test-project/src/constants.ts +6 -0
- package/src/app/api/[locale]/system/builder/test-files/test-project/src/greet.ts +18 -0
- package/src/app/api/[locale]/system/builder/test-files/test-project/src/index.ts +7 -0
- package/src/app/api/[locale]/system/builder/test-files/test-project/src/utils/calculate.ts +27 -0
- package/src/app/api/[locale]/system/builder/test-files/test-project/tsconfig.json +19 -0
- package/src/app/api/[locale]/system/builder/test-files/test-project/tsconfig.tsbuildinfo +1 -0
- package/src/app/api/[locale]/system/builder/test-files/test3.css +1 -0
- package/src/app/api/[locale]/system/check/config/repository.ts +886 -0
- package/src/app/api/[locale]/system/check/config/shared.ts +396 -0
- package/src/app/api/[locale]/system/check/config/types.ts +616 -0
- package/src/app/api/[locale]/system/check/config/utils.ts +171 -0
- package/src/app/api/[locale]/system/check/i18n/de/index.ts +15 -0
- package/src/app/api/[locale]/system/check/i18n/en/index.ts +14 -0
- package/src/app/api/[locale]/system/check/i18n/pl/index.ts +15 -0
- package/src/app/api/[locale]/system/check/lint/definition.ts +414 -0
- package/src/app/api/[locale]/system/check/lint/enum.ts +37 -0
- package/src/app/api/[locale]/system/check/lint/i18n/de/index.ts +164 -0
- package/src/app/api/[locale]/system/check/lint/i18n/en/index.ts +162 -0
- package/src/app/api/[locale]/system/check/lint/i18n/pl/index.ts +164 -0
- package/src/app/api/[locale]/system/check/lint/repository.ts +753 -0
- package/src/app/api/[locale]/system/check/lint/route.ts +21 -0
- package/src/app/api/[locale]/system/check/oxlint/README.md +190 -0
- package/src/app/api/[locale]/system/check/oxlint/definition.ts +414 -0
- package/src/app/api/[locale]/system/check/oxlint/enum.ts +37 -0
- package/src/app/api/[locale]/system/check/oxlint/i18n/de/index.ts +171 -0
- package/src/app/api/[locale]/system/check/oxlint/i18n/en/index.ts +168 -0
- package/src/app/api/[locale]/system/check/oxlint/i18n/pl/index.ts +172 -0
- package/src/app/api/[locale]/system/check/oxlint/plugins/i18n/src/index.ts +372 -0
- package/src/app/api/[locale]/system/check/oxlint/plugins/jsx-capitalization/README.md +246 -0
- package/src/app/api/[locale]/system/check/oxlint/plugins/jsx-capitalization/src/index.ts +583 -0
- package/src/app/api/[locale]/system/check/oxlint/plugins/restricted-syntax/src/index.ts +500 -0
- package/src/app/api/[locale]/system/check/oxlint/plugins/restricted-syntax/test.tsx +74 -0
- package/src/app/api/[locale]/system/check/oxlint/plugins/shared/config-loader.ts +305 -0
- package/src/app/api/[locale]/system/check/oxlint/repository.ts +959 -0
- package/src/app/api/[locale]/system/check/oxlint/route.ts +21 -0
- package/src/app/api/[locale]/system/check/oxlint/types.ts +193 -0
- package/src/app/api/[locale]/system/check/test-project/bun.lock +532 -0
- package/src/app/api/[locale]/system/check/test-project/check.config.ts +981 -0
- package/src/app/api/[locale]/system/check/test-project/package.json +12 -0
- package/src/app/api/[locale]/system/check/test-project/src/constants.ts +6 -0
- package/src/app/api/[locale]/system/check/test-project/src/greet.ts +18 -0
- package/src/app/api/[locale]/system/check/test-project/src/test-issues/a11y-issues.tsx +107 -0
- package/src/app/api/[locale]/system/check/test-project/src/test-issues/eslint-issues.tsx +37 -0
- package/src/app/api/[locale]/system/check/test-project/src/test-issues/general-issues.ts +137 -0
- package/src/app/api/[locale]/system/check/test-project/src/test-issues/i18n-issues.tsx +129 -0
- package/src/app/api/[locale]/system/check/test-project/src/test-issues/jsx-capitalization-issues.tsx +131 -0
- package/src/app/api/[locale]/system/check/test-project/src/test-issues/nextjs-issues.tsx +95 -0
- package/src/app/api/[locale]/system/check/test-project/src/test-issues/promise-issues.ts +76 -0
- package/src/app/api/[locale]/system/check/test-project/src/test-issues/react-issues.tsx +95 -0
- package/src/app/api/[locale]/system/check/test-project/src/test-issues/restricted-syntax-issues.tsx +61 -0
- package/src/app/api/[locale]/system/check/test-project/src/test-issues/typescript-issues.ts +80 -0
- package/src/app/api/[locale]/system/check/test-project/src/utils/calculate.ts +27 -0
- package/src/app/api/[locale]/system/check/test-project/tsconfig.json +34 -0
- package/src/app/api/[locale]/system/check/test-project/tsconfig.tsbuildinfo +1 -0
- package/src/app/api/[locale]/system/check/typecheck/definition.ts +369 -0
- package/src/app/api/[locale]/system/check/typecheck/enum.ts +37 -0
- package/src/app/api/[locale]/system/check/typecheck/i18n/de/index.ts +159 -0
- package/src/app/api/[locale]/system/check/typecheck/i18n/en/index.ts +150 -0
- package/src/app/api/[locale]/system/check/typecheck/i18n/pl/index.ts +155 -0
- package/src/app/api/[locale]/system/check/typecheck/repository.ts +919 -0
- package/src/app/api/[locale]/system/check/typecheck/route.ts +22 -0
- package/src/app/api/[locale]/system/check/typecheck/utils.ts +168 -0
- package/src/app/api/[locale]/system/check/vibe-check/definition.ts +568 -0
- package/src/app/api/[locale]/system/check/vibe-check/enum.ts +69 -0
- package/src/app/api/[locale]/system/check/vibe-check/i18n/de/index.ts +192 -0
- package/src/app/api/[locale]/system/check/vibe-check/i18n/en/index.ts +189 -0
- package/src/app/api/[locale]/system/check/vibe-check/i18n/pl/index.ts +192 -0
- package/src/app/api/[locale]/system/check/vibe-check/repository.ts +545 -0
- package/src/app/api/[locale]/system/check/vibe-check/route.test.ts +1142 -0
- package/src/app/api/[locale]/system/check/vibe-check/route.ts +21 -0
- package/src/app/api/[locale]/system/generated/endpoint.ts +313 -0
- package/src/app/api/[locale]/system/generated/endpoints.ts +156 -0
- package/src/app/api/[locale]/system/generated/route-handlers.ts +224 -0
- package/src/app/api/[locale]/system/generators/endpoint/definition.ts +193 -0
- package/src/app/api/[locale]/system/generators/endpoint/i18n/de/index.ts +48 -0
- package/src/app/api/[locale]/system/generators/endpoint/i18n/en/index.ts +48 -0
- package/src/app/api/[locale]/system/generators/endpoint/i18n/pl/index.ts +50 -0
- package/src/app/api/[locale]/system/generators/endpoint/repository.ts +291 -0
- package/src/app/api/[locale]/system/generators/endpoint/route.ts +21 -0
- package/src/app/api/[locale]/system/generators/endpoints/definition.ts +246 -0
- package/src/app/api/[locale]/system/generators/endpoints/i18n/de/index.ts +54 -0
- package/src/app/api/[locale]/system/generators/endpoints/i18n/en/index.ts +52 -0
- package/src/app/api/[locale]/system/generators/endpoints/i18n/pl/index.ts +54 -0
- package/src/app/api/[locale]/system/generators/endpoints/options-repository.ts +463 -0
- package/src/app/api/[locale]/system/generators/endpoints/repository.ts +383 -0
- package/src/app/api/[locale]/system/generators/endpoints/route.ts +18 -0
- package/src/app/api/[locale]/system/generators/endpoints-index/definition.ts +194 -0
- package/src/app/api/[locale]/system/generators/endpoints-index/i18n/de/index.ts +71 -0
- package/src/app/api/[locale]/system/generators/endpoints-index/i18n/en/index.ts +69 -0
- package/src/app/api/[locale]/system/generators/endpoints-index/i18n/pl/index.ts +71 -0
- package/src/app/api/[locale]/system/generators/endpoints-index/repository.ts +294 -0
- package/src/app/api/[locale]/system/generators/endpoints-index/route.ts +18 -0
- package/src/app/api/[locale]/system/generators/generate-all/definition.ts +355 -0
- package/src/app/api/[locale]/system/generators/generate-all/i18n/de/index.ts +96 -0
- package/src/app/api/[locale]/system/generators/generate-all/i18n/en/index.ts +94 -0
- package/src/app/api/[locale]/system/generators/generate-all/i18n/pl/index.ts +96 -0
- package/src/app/api/[locale]/system/generators/generate-all/repository.ts +257 -0
- package/src/app/api/[locale]/system/generators/generate-all/route.ts +20 -0
- package/src/app/api/[locale]/system/generators/i18n/de/index.ts +15 -0
- package/src/app/api/[locale]/system/generators/i18n/en/index.ts +14 -0
- package/src/app/api/[locale]/system/generators/i18n/pl/index.ts +15 -0
- package/src/app/api/[locale]/system/generators/route-handlers/definition.ts +198 -0
- package/src/app/api/[locale]/system/generators/route-handlers/i18n/de/index.ts +48 -0
- package/src/app/api/[locale]/system/generators/route-handlers/i18n/en/index.ts +48 -0
- package/src/app/api/[locale]/system/generators/route-handlers/i18n/pl/index.ts +50 -0
- package/src/app/api/[locale]/system/generators/route-handlers/repository.ts +277 -0
- package/src/app/api/[locale]/system/generators/route-handlers/route.ts +17 -0
- package/src/app/api/[locale]/system/generators/shared/utils.ts +233 -0
- package/src/app/api/[locale]/system/help/definition.ts +445 -0
- package/src/app/api/[locale]/system/help/i18n/de/index.ts +267 -0
- package/src/app/api/[locale]/system/help/i18n/en/index.ts +262 -0
- package/src/app/api/[locale]/system/help/i18n/pl/index.ts +265 -0
- package/src/app/api/[locale]/system/help/interactive/definition.ts +125 -0
- package/src/app/api/[locale]/system/help/interactive/i18n/de/index.ts +22 -0
- package/src/app/api/[locale]/system/help/interactive/i18n/en/index.ts +19 -0
- package/src/app/api/[locale]/system/help/interactive/i18n/pl/index.ts +22 -0
- package/src/app/api/[locale]/system/help/interactive/repository.ts +1025 -0
- package/src/app/api/[locale]/system/help/interactive/route.ts +53 -0
- package/src/app/api/[locale]/system/help/list/definition.ts +372 -0
- package/src/app/api/[locale]/system/help/list/repository.ts +110 -0
- package/src/app/api/[locale]/system/help/list/route.ts +21 -0
- package/src/app/api/[locale]/system/help/repository.ts +212 -0
- package/src/app/api/[locale]/system/help/route.ts +16 -0
- package/src/app/api/[locale]/system/i18n/de/index.ts +68 -0
- package/src/app/api/[locale]/system/i18n/en/index.ts +65 -0
- package/src/app/api/[locale]/system/i18n/pl/index.ts +66 -0
- package/src/app/api/[locale]/system/release-tool/definition.ts +3104 -0
- package/src/app/api/[locale]/system/release-tool/i18n/de/index.ts +813 -0
- package/src/app/api/[locale]/system/release-tool/i18n/en/index.ts +797 -0
- package/src/app/api/[locale]/system/release-tool/i18n/pl/index.ts +810 -0
- package/src/app/api/[locale]/system/release-tool/repository/asset-zipper.ts +128 -0
- package/src/app/api/[locale]/system/release-tool/repository/changelog-generator.ts +212 -0
- package/src/app/api/[locale]/system/release-tool/repository/ci-detector.ts +566 -0
- package/src/app/api/[locale]/system/release-tool/repository/config.ts +113 -0
- package/src/app/api/[locale]/system/release-tool/repository/constants.ts +407 -0
- package/src/app/api/[locale]/system/release-tool/repository/dependency-manager.ts +527 -0
- package/src/app/api/[locale]/system/release-tool/repository/git-service.ts +403 -0
- package/src/app/api/[locale]/system/release-tool/repository/hook-runner.ts +100 -0
- package/src/app/api/[locale]/system/release-tool/repository/index.ts +1 -0
- package/src/app/api/[locale]/system/release-tool/repository/notification-service.ts +638 -0
- package/src/app/api/[locale]/system/release-tool/repository/package-service.ts +169 -0
- package/src/app/api/[locale]/system/release-tool/repository/publisher.ts +253 -0
- package/src/app/api/[locale]/system/release-tool/repository/quality-runner.ts +428 -0
- package/src/app/api/[locale]/system/release-tool/repository/release-creator.ts +293 -0
- package/src/app/api/[locale]/system/release-tool/repository/release-executor.ts +1198 -0
- package/src/app/api/[locale]/system/release-tool/repository/snyk-service.ts +136 -0
- package/src/app/api/[locale]/system/release-tool/repository/utils.ts +642 -0
- package/src/app/api/[locale]/system/release-tool/repository/validation.ts +288 -0
- package/src/app/api/[locale]/system/release-tool/repository/version-service.ts +297 -0
- package/src/app/api/[locale]/system/release-tool/route.ts +21 -0
- package/src/app/api/[locale]/system/unified-interface/README.md +328 -0
- package/src/app/api/[locale]/system/unified-interface/cli/README.md +349 -0
- package/src/app/api/[locale]/system/unified-interface/cli/auth/cli-handler.ts +95 -0
- package/src/app/api/[locale]/system/unified-interface/cli/auth/cli-user.ts +146 -0
- package/src/app/api/[locale]/system/unified-interface/cli/auth/session-file.ts +266 -0
- package/src/app/api/[locale]/system/unified-interface/cli/env.ts +26 -0
- package/src/app/api/[locale]/system/unified-interface/cli/i18n/de/index.ts +157 -0
- package/src/app/api/[locale]/system/unified-interface/cli/i18n/en/index.ts +155 -0
- package/src/app/api/[locale]/system/unified-interface/cli/i18n/pl/index.ts +158 -0
- package/src/app/api/[locale]/system/unified-interface/cli/runtime/debug.ts +595 -0
- package/src/app/api/[locale]/system/unified-interface/cli/runtime/entry-point.ts +129 -0
- package/src/app/api/[locale]/system/unified-interface/cli/runtime/environment.ts +155 -0
- package/src/app/api/[locale]/system/unified-interface/cli/runtime/execution-errors.ts +452 -0
- package/src/app/api/[locale]/system/unified-interface/cli/runtime/parsing.ts +297 -0
- package/src/app/api/[locale]/system/unified-interface/cli/runtime/route-executor.ts +859 -0
- package/src/app/api/[locale]/system/unified-interface/cli/setup/i18n/de/index.ts +12 -0
- package/src/app/api/[locale]/system/unified-interface/cli/setup/i18n/en/index.ts +11 -0
- package/src/app/api/[locale]/system/unified-interface/cli/setup/i18n/pl/index.ts +12 -0
- package/src/app/api/[locale]/system/unified-interface/cli/setup/install/definition.ts +262 -0
- package/src/app/api/[locale]/system/unified-interface/cli/setup/install/i18n/de/index.ts +54 -0
- package/src/app/api/[locale]/system/unified-interface/cli/setup/install/i18n/en/index.ts +52 -0
- package/src/app/api/[locale]/system/unified-interface/cli/setup/install/i18n/pl/index.ts +54 -0
- package/src/app/api/[locale]/system/unified-interface/cli/setup/install/repository.ts +421 -0
- package/src/app/api/[locale]/system/unified-interface/cli/setup/install/route.ts +25 -0
- package/src/app/api/[locale]/system/unified-interface/cli/setup/status/definition.ts +181 -0
- package/src/app/api/[locale]/system/unified-interface/cli/setup/status/i18n/de/index.ts +61 -0
- package/src/app/api/[locale]/system/unified-interface/cli/setup/status/i18n/en/index.ts +59 -0
- package/src/app/api/[locale]/system/unified-interface/cli/setup/status/i18n/pl/index.ts +61 -0
- package/src/app/api/[locale]/system/unified-interface/cli/setup/status/repository.ts +195 -0
- package/src/app/api/[locale]/system/unified-interface/cli/setup/status/route.ts +22 -0
- package/src/app/api/[locale]/system/unified-interface/cli/setup/uninstall/definition.ts +188 -0
- package/src/app/api/[locale]/system/unified-interface/cli/setup/uninstall/i18n/de/index.ts +54 -0
- package/src/app/api/[locale]/system/unified-interface/cli/setup/uninstall/i18n/en/index.ts +52 -0
- package/src/app/api/[locale]/system/unified-interface/cli/setup/uninstall/i18n/pl/index.ts +54 -0
- package/src/app/api/[locale]/system/unified-interface/cli/setup/uninstall/repository.ts +209 -0
- package/src/app/api/[locale]/system/unified-interface/cli/setup/uninstall/route.ts +24 -0
- package/src/app/api/[locale]/system/unified-interface/cli/setup/update/definition.ts +200 -0
- package/src/app/api/[locale]/system/unified-interface/cli/setup/update/i18n/de/index.ts +54 -0
- package/src/app/api/[locale]/system/unified-interface/cli/setup/update/i18n/en/index.ts +52 -0
- package/src/app/api/[locale]/system/unified-interface/cli/setup/update/i18n/pl/index.ts +54 -0
- package/src/app/api/[locale]/system/unified-interface/cli/setup/update/repository.ts +113 -0
- package/src/app/api/[locale]/system/unified-interface/cli/setup/update/route.ts +22 -0
- package/src/app/api/[locale]/system/unified-interface/cli/vibe-runtime.ts +304 -0
- package/src/app/api/[locale]/system/unified-interface/cli/widgets/core/base-renderer.ts +270 -0
- package/src/app/api/[locale]/system/unified-interface/cli/widgets/core/registry.ts +309 -0
- package/src/app/api/[locale]/system/unified-interface/cli/widgets/core/types.ts +126 -0
- package/src/app/api/[locale]/system/unified-interface/cli/widgets/i18n/de/index.ts +67 -0
- package/src/app/api/[locale]/system/unified-interface/cli/widgets/i18n/en/index.ts +65 -0
- package/src/app/api/[locale]/system/unified-interface/cli/widgets/i18n/pl/index.ts +67 -0
- package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/accordion.ts +74 -0
- package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/avatar.ts +39 -0
- package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/badge.ts +54 -0
- package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/code-output.ts +298 -0
- package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/code-quality-files.ts +89 -0
- package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/code-quality-list.ts +298 -0
- package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/code-quality-summary.ts +96 -0
- package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/container.ts +186 -0
- package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/data-card.ts +65 -0
- package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/data-cards.ts +570 -0
- package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/data-list.ts +80 -0
- package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/data-table.ts +385 -0
- package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/editable-text.ts +99 -0
- package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/empty-state.ts +55 -0
- package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/errors.ts +67 -0
- package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/grouped-list.ts +729 -0
- package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/link-card.ts +87 -0
- package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/link-list.ts +112 -0
- package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/link.ts +59 -0
- package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/loading.ts +50 -0
- package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/markdown.ts +131 -0
- package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/metric.ts +291 -0
- package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/section.ts +120 -0
- package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/stats-grid.ts +149 -0
- package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/tabs.ts +61 -0
- package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/text.ts +78 -0
- package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/title.ts +42 -0
- package/src/app/api/[locale]/system/unified-interface/cli/widgets/renderers/response-renderer.ts +418 -0
- package/src/app/api/[locale]/system/unified-interface/cli/widgets/renderers/schema-handler.ts +534 -0
- package/src/app/api/[locale]/system/unified-interface/i18n/de/index.ts +42 -0
- package/src/app/api/[locale]/system/unified-interface/i18n/en/index.ts +40 -0
- package/src/app/api/[locale]/system/unified-interface/i18n/pl/index.ts +43 -0
- package/src/app/api/[locale]/system/unified-interface/mcp/README.md +114 -0
- package/src/app/api/[locale]/system/unified-interface/mcp/converter.ts +146 -0
- package/src/app/api/[locale]/system/unified-interface/mcp/i18n/de/index.ts +182 -0
- package/src/app/api/[locale]/system/unified-interface/mcp/i18n/en/index.ts +179 -0
- package/src/app/api/[locale]/system/unified-interface/mcp/i18n/pl/index.ts +181 -0
- package/src/app/api/[locale]/system/unified-interface/mcp/registry.ts +343 -0
- package/src/app/api/[locale]/system/unified-interface/mcp/serve/definition.ts +147 -0
- package/src/app/api/[locale]/system/unified-interface/mcp/serve/repository.ts +38 -0
- package/src/app/api/[locale]/system/unified-interface/mcp/serve/route.ts +14 -0
- package/src/app/api/[locale]/system/unified-interface/mcp/server/protocol-handler.ts +309 -0
- package/src/app/api/[locale]/system/unified-interface/mcp/server/server.ts +154 -0
- package/src/app/api/[locale]/system/unified-interface/mcp/server/stdio-transport.ts +193 -0
- package/src/app/api/[locale]/system/unified-interface/mcp/types.ts +246 -0
- package/src/app/api/[locale]/system/unified-interface/shared/endpoints/definition/create-form.ts +1510 -0
- package/src/app/api/[locale]/system/unified-interface/shared/endpoints/definition/create.ts +581 -0
- package/src/app/api/[locale]/system/unified-interface/shared/endpoints/definition/endpoint-to-metadata.ts +52 -0
- package/src/app/api/[locale]/system/unified-interface/shared/endpoints/definition/loader.ts +152 -0
- package/src/app/api/[locale]/system/unified-interface/shared/endpoints/definitions/registry.ts +265 -0
- package/src/app/api/[locale]/system/unified-interface/shared/endpoints/permissions/registry.ts +680 -0
- package/src/app/api/[locale]/system/unified-interface/shared/endpoints/route/executor.ts +220 -0
- package/src/app/api/[locale]/system/unified-interface/shared/endpoints/route/handler.ts +325 -0
- package/src/app/api/[locale]/system/unified-interface/shared/endpoints/route/multi.ts +184 -0
- package/src/app/api/[locale]/system/unified-interface/shared/endpoints/route/request-validator.ts +201 -0
- package/src/app/api/[locale]/system/unified-interface/shared/endpoints/route/single.ts +58 -0
- package/src/app/api/[locale]/system/unified-interface/shared/env/define-env-client.ts +49 -0
- package/src/app/api/[locale]/system/unified-interface/shared/env/define-env.ts +47 -0
- package/src/app/api/[locale]/system/unified-interface/shared/env/validation-logger.ts +58 -0
- package/src/app/api/[locale]/system/unified-interface/shared/field/enum.ts +110 -0
- package/src/app/api/[locale]/system/unified-interface/shared/field/specialized.ts +339 -0
- package/src/app/api/[locale]/system/unified-interface/shared/field/utils.test.ts +408 -0
- package/src/app/api/[locale]/system/unified-interface/shared/field/utils.ts +1349 -0
- package/src/app/api/[locale]/system/unified-interface/shared/field-config/endpoint-field-types.ts +107 -0
- package/src/app/api/[locale]/system/unified-interface/shared/field-config/field-config-types.ts +268 -0
- package/src/app/api/[locale]/system/unified-interface/shared/logger/colors.ts +114 -0
- package/src/app/api/[locale]/system/unified-interface/shared/logger/endpoint.ts +169 -0
- package/src/app/api/[locale]/system/unified-interface/shared/logger/file-logger.ts +88 -0
- package/src/app/api/[locale]/system/unified-interface/shared/logger/formatters.ts +177 -0
- package/src/app/api/[locale]/system/unified-interface/shared/server-only/auth/base-auth-handler.ts +82 -0
- package/src/app/api/[locale]/system/unified-interface/shared/server-only/auth/factory.ts +33 -0
- package/src/app/api/[locale]/system/unified-interface/shared/server-only/server-only.ts +4 -0
- package/src/app/api/[locale]/system/unified-interface/shared/types/actions.ts +289 -0
- package/src/app/api/[locale]/system/unified-interface/shared/types/endpoint.ts +1167 -0
- package/src/app/api/[locale]/system/unified-interface/shared/types/enums.ts +382 -0
- package/src/app/api/[locale]/system/unified-interface/shared/types/platform.ts +34 -0
- package/src/app/api/[locale]/system/unified-interface/shared/types/types.ts +80 -0
- package/src/app/api/[locale]/system/unified-interface/shared/types/ui-config.ts +76 -0
- package/src/app/api/[locale]/system/unified-interface/shared/utils/error-types.ts +27 -0
- package/src/app/api/[locale]/system/unified-interface/shared/utils/path.ts +63 -0
- package/src/app/api/[locale]/system/unified-interface/shared/utils/scanner.ts +241 -0
- package/src/app/api/[locale]/system/unified-interface/shared/widgets/actions.ts +256 -0
- package/src/app/api/[locale]/system/unified-interface/shared/widgets/configs.ts +1158 -0
- package/src/app/api/[locale]/system/unified-interface/shared/widgets/helpers.ts +80 -0
- package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/accordion.ts +82 -0
- package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/avatar.ts +75 -0
- package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/badge.ts +89 -0
- package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/code-output.ts +302 -0
- package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/code-quality-list.ts +202 -0
- package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/container.ts +129 -0
- package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/data-card.ts +81 -0
- package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/data-cards.ts +258 -0
- package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/data-list.ts +123 -0
- package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/data-table.ts +387 -0
- package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/editable-text.ts +89 -0
- package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/empty-state.ts +78 -0
- package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/errors.ts +93 -0
- package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/grouped-list.ts +448 -0
- package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/index.ts +38 -0
- package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/link-card.ts +130 -0
- package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/link-list.ts +127 -0
- package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/link.ts +68 -0
- package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/loading.ts +81 -0
- package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/markdown.ts +176 -0
- package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/metric-card.ts +241 -0
- package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/section.ts +90 -0
- package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/stats-grid.ts +71 -0
- package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/tabs.ts +80 -0
- package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/text.ts +105 -0
- package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/title.ts +72 -0
- package/src/app/api/[locale]/system/unified-interface/shared/widgets/types.ts +240 -0
- package/src/app/api/[locale]/system/unified-interface/shared/widgets/utils/field-helpers.ts +137 -0
- package/src/app/api/[locale]/system/unified-interface/shared/widgets/utils/formatting.ts +437 -0
- package/src/app/api/[locale]/system/unified-interface/shared/widgets/utils/url.ts +40 -0
- package/src/app/api/[locale]/system/unified-interface/shared/widgets/utils/widget-helpers.ts +465 -0
- package/src/app/api/[locale]/user/auth/enum.ts +16 -0
- package/src/app/api/[locale]/user/auth/i18n/de/index.ts +227 -0
- package/src/app/api/[locale]/user/auth/i18n/en/index.ts +205 -0
- package/src/app/api/[locale]/user/auth/i18n/pl/index.ts +219 -0
- package/src/app/api/[locale]/user/auth/types.ts +110 -0
- package/src/app/api/[locale]/user/enum.ts +64 -0
- package/src/app/api/[locale]/user/private/i18n/de/index.ts +3 -0
- package/src/app/api/[locale]/user/private/i18n/en/index.ts +1 -0
- package/src/app/api/[locale]/user/private/i18n/pl/index.ts +3 -0
- package/src/app/api/[locale]/user/types.ts +118 -0
- package/src/app/api/[locale]/user/user-roles/enum.ts +112 -0
- package/src/app/api/[locale]/user/user-roles/i18n/de/index.ts +85 -0
- package/src/app/api/[locale]/user/user-roles/i18n/en/index.ts +83 -0
- package/src/app/api/[locale]/user/user-roles/i18n/pl/index.ts +86 -0
- package/src/app/api/[locale]/user/user-roles/types.ts +34 -0
- package/src/app/api/i18n/de/index.ts +6 -0
- package/src/app/api/i18n/en/index.ts +5 -0
- package/src/app/api/i18n/pl/index.ts +5 -0
- package/src/app/i18n/de/index.ts +6 -0
- package/src/app/i18n/en/index.ts +5 -0
- package/src/app/i18n/pl/index.ts +5 -0
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { endpointsHandler } from "@/app/api/[locale]/system/unified-interface/shared/endpoints/route/multi";
|
|
2
|
+
import { Methods } from "@/app/api/[locale]/system/unified-interface/shared/types/enums";
|
|
3
|
+
|
|
4
|
+
import serveDefinition from "./definition";
|
|
5
|
+
import { mcpServeRepository } from "./repository";
|
|
6
|
+
|
|
7
|
+
export const { POST, tools } = endpointsHandler({
|
|
8
|
+
endpoint: serveDefinition,
|
|
9
|
+
[Methods.POST]: {
|
|
10
|
+
handler: async ({ logger, locale }) => {
|
|
11
|
+
return await mcpServeRepository.startServer(logger, locale);
|
|
12
|
+
},
|
|
13
|
+
},
|
|
14
|
+
});
|
|
@@ -0,0 +1,309 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP Protocol Handler
|
|
3
|
+
* Handles MCP JSON-RPC 2.0 protocol messages
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import "server-only";
|
|
7
|
+
|
|
8
|
+
import { parseError } from "next-vibe/shared/utils";
|
|
9
|
+
|
|
10
|
+
import { getCliUser } from "@/app/api/[locale]/system/unified-interface/cli/auth/cli-user";
|
|
11
|
+
import type { JwtPayloadType } from "@/app/api/[locale]/user/auth/types";
|
|
12
|
+
import type { CountryLanguage } from "@/i18n/core/config";
|
|
13
|
+
|
|
14
|
+
import type { EndpointLogger } from "../../shared/logger/endpoint";
|
|
15
|
+
import { Platform } from "../../shared/types/platform";
|
|
16
|
+
import { endpointToMCPTool } from "../converter";
|
|
17
|
+
import { mcpRegistry } from "../registry";
|
|
18
|
+
import type {
|
|
19
|
+
IMCPProtocolHandler,
|
|
20
|
+
JsonRpcError,
|
|
21
|
+
JsonRpcRequest,
|
|
22
|
+
JsonRpcResponse,
|
|
23
|
+
MCPInitializeParams,
|
|
24
|
+
MCPInitializeResult,
|
|
25
|
+
MCPToolCallParams,
|
|
26
|
+
MCPToolCallResult,
|
|
27
|
+
MCPToolsListParams,
|
|
28
|
+
MCPToolsListResult,
|
|
29
|
+
ParameterValue,
|
|
30
|
+
} from "../types";
|
|
31
|
+
import { MCPErrorCode, MCPMethod } from "../types";
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* MCP Protocol Handler Implementation
|
|
35
|
+
*/
|
|
36
|
+
export class MCPProtocolHandler implements IMCPProtocolHandler {
|
|
37
|
+
private initialized = false;
|
|
38
|
+
private logger: EndpointLogger;
|
|
39
|
+
private locale: CountryLanguage;
|
|
40
|
+
private user: JwtPayloadType;
|
|
41
|
+
|
|
42
|
+
constructor(
|
|
43
|
+
logger: EndpointLogger,
|
|
44
|
+
locale: CountryLanguage,
|
|
45
|
+
user: JwtPayloadType,
|
|
46
|
+
) {
|
|
47
|
+
this.logger = logger;
|
|
48
|
+
this.locale = locale;
|
|
49
|
+
this.user = user;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* Handle incoming JSON-RPC request
|
|
54
|
+
*/
|
|
55
|
+
async handleRequest(
|
|
56
|
+
// eslint-disable-next-line oxlint-plugin-restricted/restricted-syntax -- Infrastructure: Protocol message handling requires 'unknown' for flexible message types
|
|
57
|
+
request: JsonRpcRequest<unknown>,
|
|
58
|
+
): Promise<JsonRpcResponse> {
|
|
59
|
+
this.logger.debug("[MCP Protocol] Received request", {
|
|
60
|
+
method: request.method,
|
|
61
|
+
id: request.id,
|
|
62
|
+
});
|
|
63
|
+
|
|
64
|
+
try {
|
|
65
|
+
// Validate JSON-RPC version
|
|
66
|
+
if (request.jsonrpc !== "2.0") {
|
|
67
|
+
return this.fail(
|
|
68
|
+
request.id ?? null,
|
|
69
|
+
MCPErrorCode.INVALID_REQUEST,
|
|
70
|
+
"Invalid JSON-RPC version",
|
|
71
|
+
);
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
// Route to appropriate handler
|
|
75
|
+
|
|
76
|
+
// eslint-disable-next-line oxlint-plugin-restricted/restricted-syntax -- Infrastructure: Request parsing requires 'unknown' for untrusted input
|
|
77
|
+
let result: unknown;
|
|
78
|
+
|
|
79
|
+
switch (request.method) {
|
|
80
|
+
case MCPMethod.INITIALIZE:
|
|
81
|
+
result = await this.handleInitialize(
|
|
82
|
+
request.params as MCPInitializeParams,
|
|
83
|
+
);
|
|
84
|
+
this.initialized = true;
|
|
85
|
+
break;
|
|
86
|
+
|
|
87
|
+
case MCPMethod.PING:
|
|
88
|
+
result = await this.handlePing();
|
|
89
|
+
break;
|
|
90
|
+
|
|
91
|
+
case MCPMethod.TOOLS_LIST:
|
|
92
|
+
if (!this.initialized) {
|
|
93
|
+
return this.fail(
|
|
94
|
+
request.id ?? null,
|
|
95
|
+
MCPErrorCode.INVALID_REQUEST,
|
|
96
|
+
// eslint-disable-next-line i18next/no-literal-string
|
|
97
|
+
"Server not initialized. Call initialize first.",
|
|
98
|
+
);
|
|
99
|
+
}
|
|
100
|
+
result = await this.handleToolsList(
|
|
101
|
+
request.params as MCPToolsListParams,
|
|
102
|
+
);
|
|
103
|
+
break;
|
|
104
|
+
|
|
105
|
+
case MCPMethod.TOOLS_CALL:
|
|
106
|
+
if (!this.initialized) {
|
|
107
|
+
return this.fail(
|
|
108
|
+
request.id ?? null,
|
|
109
|
+
MCPErrorCode.INVALID_REQUEST,
|
|
110
|
+
// eslint-disable-next-line i18next/no-literal-string
|
|
111
|
+
"Server not initialized. Call initialize first.",
|
|
112
|
+
);
|
|
113
|
+
}
|
|
114
|
+
result = await this.handleToolCall(
|
|
115
|
+
request.params as MCPToolCallParams,
|
|
116
|
+
);
|
|
117
|
+
break;
|
|
118
|
+
|
|
119
|
+
default:
|
|
120
|
+
return this.fail(
|
|
121
|
+
request.id ?? null,
|
|
122
|
+
MCPErrorCode.METHOD_NOT_FOUND,
|
|
123
|
+
// eslint-disable-next-line i18next/no-literal-string
|
|
124
|
+
`Method not found: ${request.method}`,
|
|
125
|
+
);
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
return this.success(request.id ?? null, result);
|
|
129
|
+
} catch (error) {
|
|
130
|
+
const parsedError = parseError(error);
|
|
131
|
+
this.logger.error("[MCP Protocol] Request handling failed", {
|
|
132
|
+
method: request.method,
|
|
133
|
+
error: parsedError.message,
|
|
134
|
+
});
|
|
135
|
+
|
|
136
|
+
return this.fail(
|
|
137
|
+
request.id ?? null,
|
|
138
|
+
MCPErrorCode.INTERNAL_ERROR,
|
|
139
|
+
parsedError.message,
|
|
140
|
+
);
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
/**
|
|
145
|
+
* Handle initialize request
|
|
146
|
+
*/
|
|
147
|
+
async handleInitialize(
|
|
148
|
+
params: MCPInitializeParams,
|
|
149
|
+
): Promise<MCPInitializeResult> {
|
|
150
|
+
this.logger.info("[MCP Protocol] Initializing", {
|
|
151
|
+
clientName: params.clientInfo.name,
|
|
152
|
+
clientVersion: params.clientInfo.version,
|
|
153
|
+
protocolVersion: params.protocolVersion,
|
|
154
|
+
});
|
|
155
|
+
|
|
156
|
+
// Initialize registry
|
|
157
|
+
await mcpRegistry.initialize(this.logger, this.locale);
|
|
158
|
+
|
|
159
|
+
const capabilities = {
|
|
160
|
+
tools: true,
|
|
161
|
+
prompts: false,
|
|
162
|
+
resources: false,
|
|
163
|
+
};
|
|
164
|
+
|
|
165
|
+
return {
|
|
166
|
+
protocolVersion: "2024-11-05",
|
|
167
|
+
capabilities: {
|
|
168
|
+
tools: capabilities.tools ? { listChanged: false } : undefined,
|
|
169
|
+
prompts: capabilities.prompts ? { listChanged: false } : undefined,
|
|
170
|
+
resources: capabilities.resources ? { subscribe: false } : undefined,
|
|
171
|
+
},
|
|
172
|
+
serverInfo: {
|
|
173
|
+
// eslint-disable-next-line i18next/no-literal-string
|
|
174
|
+
name: "Vibe MCP Server",
|
|
175
|
+
version: "1.0.0",
|
|
176
|
+
},
|
|
177
|
+
};
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
/**
|
|
181
|
+
* Handle tools/list request
|
|
182
|
+
*/
|
|
183
|
+
async handleToolsList(
|
|
184
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
185
|
+
_params: MCPToolsListParams,
|
|
186
|
+
): Promise<MCPToolsListResult> {
|
|
187
|
+
this.logger.info("[MCP Protocol] Listing tools");
|
|
188
|
+
|
|
189
|
+
// Get full endpoints with field information for proper schema generation
|
|
190
|
+
const endpoints = mcpRegistry.getEndpoints(this.user, this.logger);
|
|
191
|
+
|
|
192
|
+
// Convert to MCP tool format with proper JSON Schema and translated descriptions
|
|
193
|
+
const tools = endpoints.map((endpoint) =>
|
|
194
|
+
endpointToMCPTool(endpoint, this.locale),
|
|
195
|
+
);
|
|
196
|
+
|
|
197
|
+
this.logger.info("[MCP Protocol] Tools listed", {
|
|
198
|
+
count: tools.length,
|
|
199
|
+
});
|
|
200
|
+
|
|
201
|
+
return {
|
|
202
|
+
tools,
|
|
203
|
+
// No pagination for now
|
|
204
|
+
};
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
/**
|
|
208
|
+
* Handle tools/call request
|
|
209
|
+
*/
|
|
210
|
+
async handleToolCall(params: MCPToolCallParams): Promise<MCPToolCallResult> {
|
|
211
|
+
this.logger.info("[MCP Protocol] Calling tool", {
|
|
212
|
+
toolName: params.name,
|
|
213
|
+
});
|
|
214
|
+
|
|
215
|
+
// Execute tool - params.arguments is already properly typed from MCPToolCallParams
|
|
216
|
+
const result = await mcpRegistry.executeTool(
|
|
217
|
+
{
|
|
218
|
+
toolName: params.name,
|
|
219
|
+
data: params.arguments || {},
|
|
220
|
+
user: this.user,
|
|
221
|
+
locale: this.locale,
|
|
222
|
+
requestId: Date.now(),
|
|
223
|
+
timestamp: Date.now(),
|
|
224
|
+
logger: this.logger,
|
|
225
|
+
platform: Platform.MCP,
|
|
226
|
+
},
|
|
227
|
+
this.logger,
|
|
228
|
+
);
|
|
229
|
+
|
|
230
|
+
this.logger.info("[MCP Protocol] Tool call complete", {
|
|
231
|
+
toolName: params.name,
|
|
232
|
+
isError: result.isError,
|
|
233
|
+
});
|
|
234
|
+
|
|
235
|
+
return result;
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
/**
|
|
239
|
+
* Handle ping request
|
|
240
|
+
*/
|
|
241
|
+
// eslint-disable-next-line @typescript-eslint/require-await
|
|
242
|
+
async handlePing(): Promise<Record<string, never>> {
|
|
243
|
+
this.logger.debug("[MCP Protocol] Ping");
|
|
244
|
+
return {};
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
/**
|
|
248
|
+
* Create success response
|
|
249
|
+
*/
|
|
250
|
+
private success(
|
|
251
|
+
id: string | number | null,
|
|
252
|
+
|
|
253
|
+
// eslint-disable-next-line oxlint-plugin-restricted/restricted-syntax -- Infrastructure: Response serialization requires 'unknown' for flexible response types
|
|
254
|
+
result: unknown,
|
|
255
|
+
): JsonRpcResponse {
|
|
256
|
+
return {
|
|
257
|
+
jsonrpc: "2.0",
|
|
258
|
+
result,
|
|
259
|
+
id,
|
|
260
|
+
};
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
/**
|
|
264
|
+
* Create error response
|
|
265
|
+
*/
|
|
266
|
+
private fail(
|
|
267
|
+
id: string | number | null,
|
|
268
|
+
code: MCPErrorCode,
|
|
269
|
+
message: string,
|
|
270
|
+
data?: Record<string, ParameterValue>,
|
|
271
|
+
): JsonRpcResponse {
|
|
272
|
+
const error: JsonRpcError = {
|
|
273
|
+
code,
|
|
274
|
+
message,
|
|
275
|
+
data,
|
|
276
|
+
};
|
|
277
|
+
|
|
278
|
+
return {
|
|
279
|
+
jsonrpc: "2.0",
|
|
280
|
+
error,
|
|
281
|
+
id,
|
|
282
|
+
};
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
/**
|
|
287
|
+
* Create protocol handler with CLI user
|
|
288
|
+
*/
|
|
289
|
+
export async function createMCPProtocolHandler(
|
|
290
|
+
logger: EndpointLogger,
|
|
291
|
+
locale: CountryLanguage,
|
|
292
|
+
): Promise<MCPProtocolHandler> {
|
|
293
|
+
// Get CLI user for authentication using consolidated factory
|
|
294
|
+
const cliUserResult = await getCliUser(logger, locale);
|
|
295
|
+
|
|
296
|
+
if (!cliUserResult.success) {
|
|
297
|
+
// eslint-disable-next-line oxlint-plugin-restricted/restricted-syntax, i18next/no-literal-string -- MCP server infrastructure requires throwing for invalid CLI user state
|
|
298
|
+
throw new Error(`CLI user authentication failed: ${cliUserResult.message}`);
|
|
299
|
+
}
|
|
300
|
+
|
|
301
|
+
const cliUser = cliUserResult.data;
|
|
302
|
+
|
|
303
|
+
if (!cliUser.isPublic && !cliUser.id) {
|
|
304
|
+
// eslint-disable-next-line oxlint-plugin-restricted/restricted-syntax, i18next/no-literal-string -- MCP server infrastructure requires throwing for invalid CLI user state
|
|
305
|
+
throw new Error("CLI user ID is required");
|
|
306
|
+
}
|
|
307
|
+
|
|
308
|
+
return new MCPProtocolHandler(logger, locale, cliUser);
|
|
309
|
+
}
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* MCP Server Entry Point
|
|
4
|
+
* Main server class that ties together transport and protocol handler
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import "server-only";
|
|
8
|
+
|
|
9
|
+
import { parseError } from "next-vibe/shared/utils/parse-error";
|
|
10
|
+
|
|
11
|
+
import type { CountryLanguage } from "@/i18n/core/config";
|
|
12
|
+
|
|
13
|
+
import type { EndpointLogger } from "../../shared/logger/endpoint";
|
|
14
|
+
import { createMCPProtocolHandler } from "./protocol-handler";
|
|
15
|
+
import { StdioTransport } from "./stdio-transport";
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* MCP Server
|
|
19
|
+
*/
|
|
20
|
+
export class MCPServer {
|
|
21
|
+
private transport?: StdioTransport;
|
|
22
|
+
private running = false;
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Start the MCP server
|
|
26
|
+
*/
|
|
27
|
+
async start(logger: EndpointLogger, locale: CountryLanguage): Promise<void> {
|
|
28
|
+
if (this.running) {
|
|
29
|
+
logger.warn("[MCP Server] Server already running");
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
const isMCPServerEnabled = process.env.VIBE_MCP_DISABLED !== "true";
|
|
34
|
+
if (!isMCPServerEnabled) {
|
|
35
|
+
logger.error("[MCP Server] MCP server is disabled");
|
|
36
|
+
// eslint-disable-next-line oxlint-plugin-restricted/restricted-syntax, i18next/no-literal-string -- MCP server infrastructure requires throwing for disabled server
|
|
37
|
+
throw new Error("MCP server is disabled");
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
try {
|
|
41
|
+
logger.info("[MCP Server] Starting...");
|
|
42
|
+
|
|
43
|
+
logger.info("[MCP Server] Configuration", {
|
|
44
|
+
// eslint-disable-next-line i18next/no-literal-string
|
|
45
|
+
name: "Vibe MCP Server",
|
|
46
|
+
version: "1.0.0",
|
|
47
|
+
locale: locale,
|
|
48
|
+
debug: logger.isDebugEnabled,
|
|
49
|
+
});
|
|
50
|
+
|
|
51
|
+
// Create protocol handler
|
|
52
|
+
const protocolHandler = await createMCPProtocolHandler(logger, locale);
|
|
53
|
+
|
|
54
|
+
// Create transport
|
|
55
|
+
this.transport = new StdioTransport(logger);
|
|
56
|
+
|
|
57
|
+
// Connect transport to protocol handler
|
|
58
|
+
this.transport.onMessage(async (request) => {
|
|
59
|
+
const response = await protocolHandler.handleRequest(request);
|
|
60
|
+
|
|
61
|
+
// Only send response if request had an ID (not a notification)
|
|
62
|
+
// JSON-RPC 2.0: notifications (id: null) must not receive responses
|
|
63
|
+
if (request.id !== null && request.id !== undefined) {
|
|
64
|
+
await this.transport!.send(response);
|
|
65
|
+
}
|
|
66
|
+
});
|
|
67
|
+
|
|
68
|
+
// Start transport
|
|
69
|
+
await this.transport.start();
|
|
70
|
+
|
|
71
|
+
this.running = true;
|
|
72
|
+
logger.info("[MCP Server] Server started successfully");
|
|
73
|
+
|
|
74
|
+
// Setup graceful shutdown
|
|
75
|
+
this.setupShutdownHandlers(logger);
|
|
76
|
+
|
|
77
|
+
// Keep process alive
|
|
78
|
+
await this.keepAlive();
|
|
79
|
+
} catch (error) {
|
|
80
|
+
logger.error("[MCP Server] Failed to start", {
|
|
81
|
+
error: parseError(error).message,
|
|
82
|
+
});
|
|
83
|
+
// eslint-disable-next-line oxlint-plugin-restricted/restricted-syntax -- Re-throw MCP server startup errors for caller to handle
|
|
84
|
+
throw error;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
/**
|
|
89
|
+
* Stop the MCP server
|
|
90
|
+
*/
|
|
91
|
+
async stop(logger: EndpointLogger): Promise<void> {
|
|
92
|
+
if (!this.running) {
|
|
93
|
+
return;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
logger.info("[MCP Server] Stopping...");
|
|
97
|
+
|
|
98
|
+
if (this.transport) {
|
|
99
|
+
await this.transport.stop();
|
|
100
|
+
this.transport = undefined;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
this.running = false;
|
|
104
|
+
logger.info("[MCP Server] Server stopped");
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
/**
|
|
108
|
+
* Check if server is running
|
|
109
|
+
*/
|
|
110
|
+
isRunning(): boolean {
|
|
111
|
+
return this.running;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
/**
|
|
115
|
+
* Setup graceful shutdown handlers
|
|
116
|
+
*/
|
|
117
|
+
private setupShutdownHandlers(logger: EndpointLogger): void {
|
|
118
|
+
const shutdown = async (signal: string): Promise<void> => {
|
|
119
|
+
logger.info(`[MCP Server] Received ${signal}, shutting down...`);
|
|
120
|
+
await this.stop(logger);
|
|
121
|
+
process.exit(0);
|
|
122
|
+
};
|
|
123
|
+
|
|
124
|
+
process.on("SIGINT", () => void shutdown("SIGINT"));
|
|
125
|
+
process.on("SIGTERM", () => void shutdown("SIGTERM"));
|
|
126
|
+
|
|
127
|
+
// Handle uncaught errors
|
|
128
|
+
process.on("uncaughtException", (error) => {
|
|
129
|
+
logger.error("[MCP Server] Uncaught exception", {
|
|
130
|
+
error: error.message,
|
|
131
|
+
stack: error.stack,
|
|
132
|
+
});
|
|
133
|
+
void shutdown("uncaughtException");
|
|
134
|
+
});
|
|
135
|
+
|
|
136
|
+
process.on("unhandledRejection", (reason) => {
|
|
137
|
+
logger.error("[MCP Server] Unhandled rejection", {
|
|
138
|
+
reason: String(reason),
|
|
139
|
+
});
|
|
140
|
+
void shutdown("unhandledRejection");
|
|
141
|
+
});
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
/**
|
|
145
|
+
* Keep process alive
|
|
146
|
+
*/
|
|
147
|
+
private async keepAlive(): Promise<void> {
|
|
148
|
+
// Wait indefinitely
|
|
149
|
+
return await new Promise(() => {
|
|
150
|
+
// This promise never resolves, keeping the process alive
|
|
151
|
+
// The process will exit via shutdown handlers
|
|
152
|
+
});
|
|
153
|
+
}
|
|
154
|
+
}
|
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP STDIO Transport
|
|
3
|
+
* Handles communication via stdin/stdout
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import * as readline from "node:readline";
|
|
7
|
+
|
|
8
|
+
import { parseError } from "next-vibe/shared/utils";
|
|
9
|
+
|
|
10
|
+
import type { EndpointLogger } from "../../shared/logger/endpoint";
|
|
11
|
+
import type { IMCPTransport, JsonRpcRequest, JsonRpcResponse } from "../types";
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* STDIO Transport Implementation
|
|
15
|
+
*/
|
|
16
|
+
export class StdioTransport implements IMCPTransport {
|
|
17
|
+
private logger: EndpointLogger;
|
|
18
|
+
private messageHandler?: (message: JsonRpcRequest) => Promise<void>;
|
|
19
|
+
private readlineInterface?: readline.Interface;
|
|
20
|
+
private running = false;
|
|
21
|
+
private initializationReceived = false;
|
|
22
|
+
private startupTimeout?: ReturnType<typeof setTimeout>;
|
|
23
|
+
|
|
24
|
+
constructor(logger: EndpointLogger) {
|
|
25
|
+
this.logger = logger;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Start the transport
|
|
30
|
+
*/
|
|
31
|
+
// eslint-disable-next-line @typescript-eslint/require-await
|
|
32
|
+
async start(): Promise<void> {
|
|
33
|
+
if (this.running) {
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
this.logger.info("[MCP Transport] Starting STDIO transport...");
|
|
38
|
+
|
|
39
|
+
// Create readline interface
|
|
40
|
+
// NOTE: Do NOT set output to process.stdout - it interferes with MCP protocol
|
|
41
|
+
this.readlineInterface = readline.createInterface({
|
|
42
|
+
input: process.stdin,
|
|
43
|
+
terminal: false,
|
|
44
|
+
});
|
|
45
|
+
|
|
46
|
+
// Handle incoming lines
|
|
47
|
+
this.readlineInterface.on("line", (line: string) => {
|
|
48
|
+
void this.handleIncomingMessage(line);
|
|
49
|
+
});
|
|
50
|
+
|
|
51
|
+
// Handle close
|
|
52
|
+
this.readlineInterface.on("close", () => {
|
|
53
|
+
this.logger.info("[MCP Transport] STDIO closed");
|
|
54
|
+
this.running = false;
|
|
55
|
+
});
|
|
56
|
+
|
|
57
|
+
// Handle errors
|
|
58
|
+
process.stdin.on("error", (error: Error) => {
|
|
59
|
+
this.logger.error("[MCP Transport] stdin error", {
|
|
60
|
+
error: error.message,
|
|
61
|
+
});
|
|
62
|
+
});
|
|
63
|
+
|
|
64
|
+
process.stdout.on("error", (error: Error) => {
|
|
65
|
+
this.logger.error("[MCP Transport] stdout error", {
|
|
66
|
+
error: error.message,
|
|
67
|
+
});
|
|
68
|
+
});
|
|
69
|
+
|
|
70
|
+
this.running = true;
|
|
71
|
+
this.logger.info("[MCP Transport] STDIO transport started");
|
|
72
|
+
|
|
73
|
+
// Set up startup timeout - exit if no initialization within 5 seconds
|
|
74
|
+
// This prevents hanging when health checks don't send initialization
|
|
75
|
+
const timeoutMs = parseInt(process.env.MCP_STARTUP_TIMEOUT || "5000", 10);
|
|
76
|
+
this.startupTimeout = setTimeout(() => {
|
|
77
|
+
if (!this.initializationReceived) {
|
|
78
|
+
this.logger.warn(
|
|
79
|
+
"[MCP Transport] No initialization received within timeout, exiting",
|
|
80
|
+
);
|
|
81
|
+
process.exit(0);
|
|
82
|
+
}
|
|
83
|
+
}, timeoutMs);
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
/**
|
|
87
|
+
* Stop the transport
|
|
88
|
+
*/
|
|
89
|
+
// eslint-disable-next-line @typescript-eslint/require-await
|
|
90
|
+
async stop(): Promise<void> {
|
|
91
|
+
if (!this.running) {
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
this.logger.info("[MCP Transport] Stopping STDIO transport...");
|
|
96
|
+
|
|
97
|
+
if (this.startupTimeout) {
|
|
98
|
+
clearTimeout(this.startupTimeout);
|
|
99
|
+
this.startupTimeout = undefined;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
if (this.readlineInterface) {
|
|
103
|
+
this.readlineInterface.close();
|
|
104
|
+
this.readlineInterface = undefined;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
this.running = false;
|
|
108
|
+
this.logger.info("[MCP Transport] STDIO transport stopped");
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
/**
|
|
112
|
+
* Send a message
|
|
113
|
+
*/
|
|
114
|
+
// eslint-disable-next-line @typescript-eslint/require-await
|
|
115
|
+
async send(message: JsonRpcResponse): Promise<void> {
|
|
116
|
+
if (!this.running) {
|
|
117
|
+
// eslint-disable-next-line oxlint-plugin-restricted/restricted-syntax, i18next/no-literal-string -- Transport infrastructure requires throwing for invalid state
|
|
118
|
+
throw new Error("Transport not running");
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
try {
|
|
122
|
+
const json = JSON.stringify(message);
|
|
123
|
+
|
|
124
|
+
// Write to stdout with newline (MCP protocol)
|
|
125
|
+
// eslint-disable-next-line i18next/no-literal-string
|
|
126
|
+
process.stdout.write(`${json}\n`);
|
|
127
|
+
} catch (error) {
|
|
128
|
+
this.logger.error("[MCP Transport] Failed to send message", {
|
|
129
|
+
error: parseError(error).message,
|
|
130
|
+
});
|
|
131
|
+
// eslint-disable-next-line oxlint-plugin-restricted/restricted-syntax -- Re-throw transport errors for caller to handle
|
|
132
|
+
throw error;
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
/**
|
|
137
|
+
* Register message handler
|
|
138
|
+
*/
|
|
139
|
+
onMessage(handler: (message: JsonRpcRequest) => Promise<void>): void {
|
|
140
|
+
this.messageHandler = handler;
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
/**
|
|
144
|
+
* Handle incoming message
|
|
145
|
+
*/
|
|
146
|
+
private async handleIncomingMessage(line: string): Promise<void> {
|
|
147
|
+
if (!line.trim()) {
|
|
148
|
+
return; // Ignore empty lines
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
try {
|
|
152
|
+
const message = JSON.parse(line) as JsonRpcRequest;
|
|
153
|
+
|
|
154
|
+
// Mark initialization as received if this is an initialize method
|
|
155
|
+
if (message.method === "initialize") {
|
|
156
|
+
this.initializationReceived = true;
|
|
157
|
+
if (this.startupTimeout) {
|
|
158
|
+
clearTimeout(this.startupTimeout);
|
|
159
|
+
this.startupTimeout = undefined;
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
if (!this.messageHandler) {
|
|
164
|
+
this.logger.warn("[MCP Transport] No message handler registered");
|
|
165
|
+
return;
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
await this.messageHandler(message);
|
|
169
|
+
} catch (error) {
|
|
170
|
+
const parsedError = parseError(error);
|
|
171
|
+
this.logger.error("[MCP Transport] Failed to handle message", {
|
|
172
|
+
error: parsedError.message,
|
|
173
|
+
line: line.slice(0, 100), // Log first 100 chars
|
|
174
|
+
});
|
|
175
|
+
|
|
176
|
+
// Send error response if we can parse the ID
|
|
177
|
+
try {
|
|
178
|
+
const partialMessage = JSON.parse(line) as { id?: string | number };
|
|
179
|
+
await this.send({
|
|
180
|
+
jsonrpc: "2.0",
|
|
181
|
+
error: {
|
|
182
|
+
code: -32700,
|
|
183
|
+
// eslint-disable-next-line i18next/no-literal-string
|
|
184
|
+
message: "Parse error",
|
|
185
|
+
},
|
|
186
|
+
id: partialMessage.id || null,
|
|
187
|
+
});
|
|
188
|
+
} catch {
|
|
189
|
+
// Can't even parse for ID, ignore
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
}
|