@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.
Files changed (400) hide show
  1. package/.dist/bin/vibe-runtime.js +26 -22
  2. package/.dist/bin/vibe-runtime.js.map +5 -5
  3. package/.dist/oxlint-plugins/i18n.js +4 -0
  4. package/.dist/oxlint-plugins/i18n.js.map +1 -0
  5. package/.dist/oxlint-plugins/jsx-capitalization.js +4 -0
  6. package/.dist/oxlint-plugins/jsx-capitalization.js.map +1 -0
  7. package/.dist/oxlint-plugins/restricted-syntax.js +4 -0
  8. package/.dist/oxlint-plugins/restricted-syntax.js.map +1 -0
  9. package/check.config.ts +4 -12
  10. package/package.json +2 -9
  11. package/src/app/api/[locale]/LICENSE +674 -0
  12. package/src/app/api/[locale]/i18n/de/index.ts +13 -0
  13. package/src/app/api/[locale]/i18n/en/index.ts +12 -0
  14. package/src/app/api/[locale]/i18n/pl/index.ts +11 -0
  15. package/src/app/api/[locale]/shared/i18n/de/index.ts +85 -0
  16. package/src/app/api/[locale]/shared/i18n/en/index.ts +83 -0
  17. package/src/app/api/[locale]/shared/i18n/pl/index.ts +85 -0
  18. package/src/app/api/[locale]/shared/stats-filtering.ts +202 -0
  19. package/src/app/api/[locale]/shared/types/common.schema.ts +55 -0
  20. package/src/app/api/[locale]/shared/types/response.schema.ts +372 -0
  21. package/src/app/api/[locale]/shared/types/stats-filtering.schema.ts +375 -0
  22. package/src/app/api/[locale]/shared/types/utils.ts +190 -0
  23. package/src/app/api/[locale]/shared/utils/base64.ts +49 -0
  24. package/src/app/api/[locale]/shared/utils/env-util.ts +40 -0
  25. package/src/app/api/[locale]/shared/utils/i18n/de/index.ts +21 -0
  26. package/src/app/api/[locale]/shared/utils/i18n/en/index.ts +19 -0
  27. package/src/app/api/[locale]/shared/utils/i18n/pl/index.ts +21 -0
  28. package/src/app/api/[locale]/shared/utils/index.ts +11 -0
  29. package/src/app/api/[locale]/shared/utils/object-path.ts +41 -0
  30. package/src/app/api/[locale]/shared/utils/object.test.ts +82 -0
  31. package/src/app/api/[locale]/shared/utils/object.ts +75 -0
  32. package/src/app/api/[locale]/shared/utils/parse-error.ts +134 -0
  33. package/src/app/api/[locale]/shared/utils/parse-json.ts +70 -0
  34. package/src/app/api/[locale]/shared/utils/time.ts +53 -0
  35. package/src/app/api/[locale]/shared/utils/validation.ts +127 -0
  36. package/src/app/api/[locale]/shared/utils/zod-required-fields.ts +116 -0
  37. package/src/app/api/[locale]/system/builder/definition.ts +1942 -0
  38. package/src/app/api/[locale]/system/builder/enum.ts +78 -0
  39. package/src/app/api/[locale]/system/builder/i18n/de/index.ts +677 -0
  40. package/src/app/api/[locale]/system/builder/i18n/en/index.ts +665 -0
  41. package/src/app/api/[locale]/system/builder/i18n/pl/index.ts +668 -0
  42. package/src/app/api/[locale]/system/builder/repository/build-executor.test.ts +182 -0
  43. package/src/app/api/[locale]/system/builder/repository/build-executor.ts +583 -0
  44. package/src/app/api/[locale]/system/builder/repository/bun-compiler.ts +261 -0
  45. package/src/app/api/[locale]/system/builder/repository/bundle-analyzer.ts +197 -0
  46. package/src/app/api/[locale]/system/builder/repository/config-loader.ts +159 -0
  47. package/src/app/api/[locale]/system/builder/repository/config-validator.ts +97 -0
  48. package/src/app/api/[locale]/system/builder/repository/constants.ts +125 -0
  49. package/src/app/api/[locale]/system/builder/repository/error-suggester.ts +75 -0
  50. package/src/app/api/[locale]/system/builder/repository/file-copier.ts +98 -0
  51. package/src/app/api/[locale]/system/builder/repository/folder-cleaner.ts +80 -0
  52. package/src/app/api/[locale]/system/builder/repository/index.ts +2 -0
  53. package/src/app/api/[locale]/system/builder/repository/npm-package-generator.ts +146 -0
  54. package/src/app/api/[locale]/system/builder/repository/output-formatter.ts +104 -0
  55. package/src/app/api/[locale]/system/builder/repository/profile-service.ts +79 -0
  56. package/src/app/api/[locale]/system/builder/repository/report-generator.ts +125 -0
  57. package/src/app/api/[locale]/system/builder/repository/vite-compiler.ts +291 -0
  58. package/src/app/api/[locale]/system/builder/route.ts +21 -0
  59. package/src/app/api/[locale]/system/builder/test-files/file1.ts +2 -0
  60. package/src/app/api/[locale]/system/builder/test-files/file2.tsx +10 -0
  61. package/src/app/api/[locale]/system/builder/test-files/file3.tsx +16 -0
  62. package/src/app/api/[locale]/system/builder/test-files/folderToCopy/fileInFolder.ts +2 -0
  63. package/src/app/api/[locale]/system/builder/test-files/test-config.ts +38 -0
  64. package/src/app/api/[locale]/system/builder/test-files/test-delete-config.ts +8 -0
  65. package/src/app/api/[locale]/system/builder/test-files/test-project/package.json +24 -0
  66. package/src/app/api/[locale]/system/builder/test-files/test-project/src/constants.ts +6 -0
  67. package/src/app/api/[locale]/system/builder/test-files/test-project/src/greet.ts +18 -0
  68. package/src/app/api/[locale]/system/builder/test-files/test-project/src/index.ts +7 -0
  69. package/src/app/api/[locale]/system/builder/test-files/test-project/src/utils/calculate.ts +27 -0
  70. package/src/app/api/[locale]/system/builder/test-files/test-project/tsconfig.json +19 -0
  71. package/src/app/api/[locale]/system/builder/test-files/test-project/tsconfig.tsbuildinfo +1 -0
  72. package/src/app/api/[locale]/system/builder/test-files/test3.css +1 -0
  73. package/src/app/api/[locale]/system/check/config/repository.ts +886 -0
  74. package/src/app/api/[locale]/system/check/config/shared.ts +396 -0
  75. package/src/app/api/[locale]/system/check/config/types.ts +616 -0
  76. package/src/app/api/[locale]/system/check/config/utils.ts +171 -0
  77. package/src/app/api/[locale]/system/check/i18n/de/index.ts +15 -0
  78. package/src/app/api/[locale]/system/check/i18n/en/index.ts +14 -0
  79. package/src/app/api/[locale]/system/check/i18n/pl/index.ts +15 -0
  80. package/src/app/api/[locale]/system/check/lint/definition.ts +414 -0
  81. package/src/app/api/[locale]/system/check/lint/enum.ts +37 -0
  82. package/src/app/api/[locale]/system/check/lint/i18n/de/index.ts +164 -0
  83. package/src/app/api/[locale]/system/check/lint/i18n/en/index.ts +162 -0
  84. package/src/app/api/[locale]/system/check/lint/i18n/pl/index.ts +164 -0
  85. package/src/app/api/[locale]/system/check/lint/repository.ts +753 -0
  86. package/src/app/api/[locale]/system/check/lint/route.ts +21 -0
  87. package/src/app/api/[locale]/system/check/oxlint/README.md +190 -0
  88. package/src/app/api/[locale]/system/check/oxlint/definition.ts +414 -0
  89. package/src/app/api/[locale]/system/check/oxlint/enum.ts +37 -0
  90. package/src/app/api/[locale]/system/check/oxlint/i18n/de/index.ts +171 -0
  91. package/src/app/api/[locale]/system/check/oxlint/i18n/en/index.ts +168 -0
  92. package/src/app/api/[locale]/system/check/oxlint/i18n/pl/index.ts +172 -0
  93. package/src/app/api/[locale]/system/check/oxlint/plugins/i18n/src/index.ts +372 -0
  94. package/src/app/api/[locale]/system/check/oxlint/plugins/jsx-capitalization/README.md +246 -0
  95. package/src/app/api/[locale]/system/check/oxlint/plugins/jsx-capitalization/src/index.ts +583 -0
  96. package/src/app/api/[locale]/system/check/oxlint/plugins/restricted-syntax/src/index.ts +500 -0
  97. package/src/app/api/[locale]/system/check/oxlint/plugins/restricted-syntax/test.tsx +74 -0
  98. package/src/app/api/[locale]/system/check/oxlint/plugins/shared/config-loader.ts +305 -0
  99. package/src/app/api/[locale]/system/check/oxlint/repository.ts +959 -0
  100. package/src/app/api/[locale]/system/check/oxlint/route.ts +21 -0
  101. package/src/app/api/[locale]/system/check/oxlint/types.ts +193 -0
  102. package/src/app/api/[locale]/system/check/test-project/bun.lock +532 -0
  103. package/src/app/api/[locale]/system/check/test-project/check.config.ts +981 -0
  104. package/src/app/api/[locale]/system/check/test-project/package.json +12 -0
  105. package/src/app/api/[locale]/system/check/test-project/src/constants.ts +6 -0
  106. package/src/app/api/[locale]/system/check/test-project/src/greet.ts +18 -0
  107. package/src/app/api/[locale]/system/check/test-project/src/test-issues/a11y-issues.tsx +107 -0
  108. package/src/app/api/[locale]/system/check/test-project/src/test-issues/eslint-issues.tsx +37 -0
  109. package/src/app/api/[locale]/system/check/test-project/src/test-issues/general-issues.ts +137 -0
  110. package/src/app/api/[locale]/system/check/test-project/src/test-issues/i18n-issues.tsx +129 -0
  111. package/src/app/api/[locale]/system/check/test-project/src/test-issues/jsx-capitalization-issues.tsx +131 -0
  112. package/src/app/api/[locale]/system/check/test-project/src/test-issues/nextjs-issues.tsx +95 -0
  113. package/src/app/api/[locale]/system/check/test-project/src/test-issues/promise-issues.ts +76 -0
  114. package/src/app/api/[locale]/system/check/test-project/src/test-issues/react-issues.tsx +95 -0
  115. package/src/app/api/[locale]/system/check/test-project/src/test-issues/restricted-syntax-issues.tsx +61 -0
  116. package/src/app/api/[locale]/system/check/test-project/src/test-issues/typescript-issues.ts +80 -0
  117. package/src/app/api/[locale]/system/check/test-project/src/utils/calculate.ts +27 -0
  118. package/src/app/api/[locale]/system/check/test-project/tsconfig.json +34 -0
  119. package/src/app/api/[locale]/system/check/test-project/tsconfig.tsbuildinfo +1 -0
  120. package/src/app/api/[locale]/system/check/typecheck/definition.ts +369 -0
  121. package/src/app/api/[locale]/system/check/typecheck/enum.ts +37 -0
  122. package/src/app/api/[locale]/system/check/typecheck/i18n/de/index.ts +159 -0
  123. package/src/app/api/[locale]/system/check/typecheck/i18n/en/index.ts +150 -0
  124. package/src/app/api/[locale]/system/check/typecheck/i18n/pl/index.ts +155 -0
  125. package/src/app/api/[locale]/system/check/typecheck/repository.ts +919 -0
  126. package/src/app/api/[locale]/system/check/typecheck/route.ts +22 -0
  127. package/src/app/api/[locale]/system/check/typecheck/utils.ts +168 -0
  128. package/src/app/api/[locale]/system/check/vibe-check/definition.ts +568 -0
  129. package/src/app/api/[locale]/system/check/vibe-check/enum.ts +69 -0
  130. package/src/app/api/[locale]/system/check/vibe-check/i18n/de/index.ts +192 -0
  131. package/src/app/api/[locale]/system/check/vibe-check/i18n/en/index.ts +189 -0
  132. package/src/app/api/[locale]/system/check/vibe-check/i18n/pl/index.ts +192 -0
  133. package/src/app/api/[locale]/system/check/vibe-check/repository.ts +545 -0
  134. package/src/app/api/[locale]/system/check/vibe-check/route.test.ts +1142 -0
  135. package/src/app/api/[locale]/system/check/vibe-check/route.ts +21 -0
  136. package/src/app/api/[locale]/system/generated/endpoint.ts +313 -0
  137. package/src/app/api/[locale]/system/generated/endpoints.ts +156 -0
  138. package/src/app/api/[locale]/system/generated/route-handlers.ts +224 -0
  139. package/src/app/api/[locale]/system/generators/endpoint/definition.ts +193 -0
  140. package/src/app/api/[locale]/system/generators/endpoint/i18n/de/index.ts +48 -0
  141. package/src/app/api/[locale]/system/generators/endpoint/i18n/en/index.ts +48 -0
  142. package/src/app/api/[locale]/system/generators/endpoint/i18n/pl/index.ts +50 -0
  143. package/src/app/api/[locale]/system/generators/endpoint/repository.ts +291 -0
  144. package/src/app/api/[locale]/system/generators/endpoint/route.ts +21 -0
  145. package/src/app/api/[locale]/system/generators/endpoints/definition.ts +246 -0
  146. package/src/app/api/[locale]/system/generators/endpoints/i18n/de/index.ts +54 -0
  147. package/src/app/api/[locale]/system/generators/endpoints/i18n/en/index.ts +52 -0
  148. package/src/app/api/[locale]/system/generators/endpoints/i18n/pl/index.ts +54 -0
  149. package/src/app/api/[locale]/system/generators/endpoints/options-repository.ts +463 -0
  150. package/src/app/api/[locale]/system/generators/endpoints/repository.ts +383 -0
  151. package/src/app/api/[locale]/system/generators/endpoints/route.ts +18 -0
  152. package/src/app/api/[locale]/system/generators/endpoints-index/definition.ts +194 -0
  153. package/src/app/api/[locale]/system/generators/endpoints-index/i18n/de/index.ts +71 -0
  154. package/src/app/api/[locale]/system/generators/endpoints-index/i18n/en/index.ts +69 -0
  155. package/src/app/api/[locale]/system/generators/endpoints-index/i18n/pl/index.ts +71 -0
  156. package/src/app/api/[locale]/system/generators/endpoints-index/repository.ts +294 -0
  157. package/src/app/api/[locale]/system/generators/endpoints-index/route.ts +18 -0
  158. package/src/app/api/[locale]/system/generators/generate-all/definition.ts +355 -0
  159. package/src/app/api/[locale]/system/generators/generate-all/i18n/de/index.ts +96 -0
  160. package/src/app/api/[locale]/system/generators/generate-all/i18n/en/index.ts +94 -0
  161. package/src/app/api/[locale]/system/generators/generate-all/i18n/pl/index.ts +96 -0
  162. package/src/app/api/[locale]/system/generators/generate-all/repository.ts +257 -0
  163. package/src/app/api/[locale]/system/generators/generate-all/route.ts +20 -0
  164. package/src/app/api/[locale]/system/generators/i18n/de/index.ts +15 -0
  165. package/src/app/api/[locale]/system/generators/i18n/en/index.ts +14 -0
  166. package/src/app/api/[locale]/system/generators/i18n/pl/index.ts +15 -0
  167. package/src/app/api/[locale]/system/generators/route-handlers/definition.ts +198 -0
  168. package/src/app/api/[locale]/system/generators/route-handlers/i18n/de/index.ts +48 -0
  169. package/src/app/api/[locale]/system/generators/route-handlers/i18n/en/index.ts +48 -0
  170. package/src/app/api/[locale]/system/generators/route-handlers/i18n/pl/index.ts +50 -0
  171. package/src/app/api/[locale]/system/generators/route-handlers/repository.ts +277 -0
  172. package/src/app/api/[locale]/system/generators/route-handlers/route.ts +17 -0
  173. package/src/app/api/[locale]/system/generators/shared/utils.ts +233 -0
  174. package/src/app/api/[locale]/system/help/definition.ts +445 -0
  175. package/src/app/api/[locale]/system/help/i18n/de/index.ts +267 -0
  176. package/src/app/api/[locale]/system/help/i18n/en/index.ts +262 -0
  177. package/src/app/api/[locale]/system/help/i18n/pl/index.ts +265 -0
  178. package/src/app/api/[locale]/system/help/interactive/definition.ts +125 -0
  179. package/src/app/api/[locale]/system/help/interactive/i18n/de/index.ts +22 -0
  180. package/src/app/api/[locale]/system/help/interactive/i18n/en/index.ts +19 -0
  181. package/src/app/api/[locale]/system/help/interactive/i18n/pl/index.ts +22 -0
  182. package/src/app/api/[locale]/system/help/interactive/repository.ts +1025 -0
  183. package/src/app/api/[locale]/system/help/interactive/route.ts +53 -0
  184. package/src/app/api/[locale]/system/help/list/definition.ts +372 -0
  185. package/src/app/api/[locale]/system/help/list/repository.ts +110 -0
  186. package/src/app/api/[locale]/system/help/list/route.ts +21 -0
  187. package/src/app/api/[locale]/system/help/repository.ts +212 -0
  188. package/src/app/api/[locale]/system/help/route.ts +16 -0
  189. package/src/app/api/[locale]/system/i18n/de/index.ts +68 -0
  190. package/src/app/api/[locale]/system/i18n/en/index.ts +65 -0
  191. package/src/app/api/[locale]/system/i18n/pl/index.ts +66 -0
  192. package/src/app/api/[locale]/system/release-tool/definition.ts +3104 -0
  193. package/src/app/api/[locale]/system/release-tool/i18n/de/index.ts +813 -0
  194. package/src/app/api/[locale]/system/release-tool/i18n/en/index.ts +797 -0
  195. package/src/app/api/[locale]/system/release-tool/i18n/pl/index.ts +810 -0
  196. package/src/app/api/[locale]/system/release-tool/repository/asset-zipper.ts +128 -0
  197. package/src/app/api/[locale]/system/release-tool/repository/changelog-generator.ts +212 -0
  198. package/src/app/api/[locale]/system/release-tool/repository/ci-detector.ts +566 -0
  199. package/src/app/api/[locale]/system/release-tool/repository/config.ts +113 -0
  200. package/src/app/api/[locale]/system/release-tool/repository/constants.ts +407 -0
  201. package/src/app/api/[locale]/system/release-tool/repository/dependency-manager.ts +527 -0
  202. package/src/app/api/[locale]/system/release-tool/repository/git-service.ts +403 -0
  203. package/src/app/api/[locale]/system/release-tool/repository/hook-runner.ts +100 -0
  204. package/src/app/api/[locale]/system/release-tool/repository/index.ts +1 -0
  205. package/src/app/api/[locale]/system/release-tool/repository/notification-service.ts +638 -0
  206. package/src/app/api/[locale]/system/release-tool/repository/package-service.ts +169 -0
  207. package/src/app/api/[locale]/system/release-tool/repository/publisher.ts +253 -0
  208. package/src/app/api/[locale]/system/release-tool/repository/quality-runner.ts +428 -0
  209. package/src/app/api/[locale]/system/release-tool/repository/release-creator.ts +293 -0
  210. package/src/app/api/[locale]/system/release-tool/repository/release-executor.ts +1198 -0
  211. package/src/app/api/[locale]/system/release-tool/repository/snyk-service.ts +136 -0
  212. package/src/app/api/[locale]/system/release-tool/repository/utils.ts +642 -0
  213. package/src/app/api/[locale]/system/release-tool/repository/validation.ts +288 -0
  214. package/src/app/api/[locale]/system/release-tool/repository/version-service.ts +297 -0
  215. package/src/app/api/[locale]/system/release-tool/route.ts +21 -0
  216. package/src/app/api/[locale]/system/unified-interface/README.md +328 -0
  217. package/src/app/api/[locale]/system/unified-interface/cli/README.md +349 -0
  218. package/src/app/api/[locale]/system/unified-interface/cli/auth/cli-handler.ts +95 -0
  219. package/src/app/api/[locale]/system/unified-interface/cli/auth/cli-user.ts +146 -0
  220. package/src/app/api/[locale]/system/unified-interface/cli/auth/session-file.ts +266 -0
  221. package/src/app/api/[locale]/system/unified-interface/cli/env.ts +26 -0
  222. package/src/app/api/[locale]/system/unified-interface/cli/i18n/de/index.ts +157 -0
  223. package/src/app/api/[locale]/system/unified-interface/cli/i18n/en/index.ts +155 -0
  224. package/src/app/api/[locale]/system/unified-interface/cli/i18n/pl/index.ts +158 -0
  225. package/src/app/api/[locale]/system/unified-interface/cli/runtime/debug.ts +595 -0
  226. package/src/app/api/[locale]/system/unified-interface/cli/runtime/entry-point.ts +129 -0
  227. package/src/app/api/[locale]/system/unified-interface/cli/runtime/environment.ts +155 -0
  228. package/src/app/api/[locale]/system/unified-interface/cli/runtime/execution-errors.ts +452 -0
  229. package/src/app/api/[locale]/system/unified-interface/cli/runtime/parsing.ts +297 -0
  230. package/src/app/api/[locale]/system/unified-interface/cli/runtime/route-executor.ts +859 -0
  231. package/src/app/api/[locale]/system/unified-interface/cli/setup/i18n/de/index.ts +12 -0
  232. package/src/app/api/[locale]/system/unified-interface/cli/setup/i18n/en/index.ts +11 -0
  233. package/src/app/api/[locale]/system/unified-interface/cli/setup/i18n/pl/index.ts +12 -0
  234. package/src/app/api/[locale]/system/unified-interface/cli/setup/install/definition.ts +262 -0
  235. package/src/app/api/[locale]/system/unified-interface/cli/setup/install/i18n/de/index.ts +54 -0
  236. package/src/app/api/[locale]/system/unified-interface/cli/setup/install/i18n/en/index.ts +52 -0
  237. package/src/app/api/[locale]/system/unified-interface/cli/setup/install/i18n/pl/index.ts +54 -0
  238. package/src/app/api/[locale]/system/unified-interface/cli/setup/install/repository.ts +421 -0
  239. package/src/app/api/[locale]/system/unified-interface/cli/setup/install/route.ts +25 -0
  240. package/src/app/api/[locale]/system/unified-interface/cli/setup/status/definition.ts +181 -0
  241. package/src/app/api/[locale]/system/unified-interface/cli/setup/status/i18n/de/index.ts +61 -0
  242. package/src/app/api/[locale]/system/unified-interface/cli/setup/status/i18n/en/index.ts +59 -0
  243. package/src/app/api/[locale]/system/unified-interface/cli/setup/status/i18n/pl/index.ts +61 -0
  244. package/src/app/api/[locale]/system/unified-interface/cli/setup/status/repository.ts +195 -0
  245. package/src/app/api/[locale]/system/unified-interface/cli/setup/status/route.ts +22 -0
  246. package/src/app/api/[locale]/system/unified-interface/cli/setup/uninstall/definition.ts +188 -0
  247. package/src/app/api/[locale]/system/unified-interface/cli/setup/uninstall/i18n/de/index.ts +54 -0
  248. package/src/app/api/[locale]/system/unified-interface/cli/setup/uninstall/i18n/en/index.ts +52 -0
  249. package/src/app/api/[locale]/system/unified-interface/cli/setup/uninstall/i18n/pl/index.ts +54 -0
  250. package/src/app/api/[locale]/system/unified-interface/cli/setup/uninstall/repository.ts +209 -0
  251. package/src/app/api/[locale]/system/unified-interface/cli/setup/uninstall/route.ts +24 -0
  252. package/src/app/api/[locale]/system/unified-interface/cli/setup/update/definition.ts +200 -0
  253. package/src/app/api/[locale]/system/unified-interface/cli/setup/update/i18n/de/index.ts +54 -0
  254. package/src/app/api/[locale]/system/unified-interface/cli/setup/update/i18n/en/index.ts +52 -0
  255. package/src/app/api/[locale]/system/unified-interface/cli/setup/update/i18n/pl/index.ts +54 -0
  256. package/src/app/api/[locale]/system/unified-interface/cli/setup/update/repository.ts +113 -0
  257. package/src/app/api/[locale]/system/unified-interface/cli/setup/update/route.ts +22 -0
  258. package/src/app/api/[locale]/system/unified-interface/cli/vibe-runtime.ts +304 -0
  259. package/src/app/api/[locale]/system/unified-interface/cli/widgets/core/base-renderer.ts +270 -0
  260. package/src/app/api/[locale]/system/unified-interface/cli/widgets/core/registry.ts +309 -0
  261. package/src/app/api/[locale]/system/unified-interface/cli/widgets/core/types.ts +126 -0
  262. package/src/app/api/[locale]/system/unified-interface/cli/widgets/i18n/de/index.ts +67 -0
  263. package/src/app/api/[locale]/system/unified-interface/cli/widgets/i18n/en/index.ts +65 -0
  264. package/src/app/api/[locale]/system/unified-interface/cli/widgets/i18n/pl/index.ts +67 -0
  265. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/accordion.ts +74 -0
  266. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/avatar.ts +39 -0
  267. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/badge.ts +54 -0
  268. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/code-output.ts +298 -0
  269. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/code-quality-files.ts +89 -0
  270. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/code-quality-list.ts +298 -0
  271. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/code-quality-summary.ts +96 -0
  272. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/container.ts +186 -0
  273. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/data-card.ts +65 -0
  274. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/data-cards.ts +570 -0
  275. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/data-list.ts +80 -0
  276. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/data-table.ts +385 -0
  277. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/editable-text.ts +99 -0
  278. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/empty-state.ts +55 -0
  279. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/errors.ts +67 -0
  280. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/grouped-list.ts +729 -0
  281. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/link-card.ts +87 -0
  282. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/link-list.ts +112 -0
  283. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/link.ts +59 -0
  284. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/loading.ts +50 -0
  285. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/markdown.ts +131 -0
  286. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/metric.ts +291 -0
  287. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/section.ts +120 -0
  288. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/stats-grid.ts +149 -0
  289. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/tabs.ts +61 -0
  290. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/text.ts +78 -0
  291. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/title.ts +42 -0
  292. package/src/app/api/[locale]/system/unified-interface/cli/widgets/renderers/response-renderer.ts +418 -0
  293. package/src/app/api/[locale]/system/unified-interface/cli/widgets/renderers/schema-handler.ts +534 -0
  294. package/src/app/api/[locale]/system/unified-interface/i18n/de/index.ts +42 -0
  295. package/src/app/api/[locale]/system/unified-interface/i18n/en/index.ts +40 -0
  296. package/src/app/api/[locale]/system/unified-interface/i18n/pl/index.ts +43 -0
  297. package/src/app/api/[locale]/system/unified-interface/mcp/README.md +114 -0
  298. package/src/app/api/[locale]/system/unified-interface/mcp/converter.ts +146 -0
  299. package/src/app/api/[locale]/system/unified-interface/mcp/i18n/de/index.ts +182 -0
  300. package/src/app/api/[locale]/system/unified-interface/mcp/i18n/en/index.ts +179 -0
  301. package/src/app/api/[locale]/system/unified-interface/mcp/i18n/pl/index.ts +181 -0
  302. package/src/app/api/[locale]/system/unified-interface/mcp/registry.ts +343 -0
  303. package/src/app/api/[locale]/system/unified-interface/mcp/serve/definition.ts +147 -0
  304. package/src/app/api/[locale]/system/unified-interface/mcp/serve/repository.ts +38 -0
  305. package/src/app/api/[locale]/system/unified-interface/mcp/serve/route.ts +14 -0
  306. package/src/app/api/[locale]/system/unified-interface/mcp/server/protocol-handler.ts +309 -0
  307. package/src/app/api/[locale]/system/unified-interface/mcp/server/server.ts +154 -0
  308. package/src/app/api/[locale]/system/unified-interface/mcp/server/stdio-transport.ts +193 -0
  309. package/src/app/api/[locale]/system/unified-interface/mcp/types.ts +246 -0
  310. package/src/app/api/[locale]/system/unified-interface/shared/endpoints/definition/create-form.ts +1510 -0
  311. package/src/app/api/[locale]/system/unified-interface/shared/endpoints/definition/create.ts +581 -0
  312. package/src/app/api/[locale]/system/unified-interface/shared/endpoints/definition/endpoint-to-metadata.ts +52 -0
  313. package/src/app/api/[locale]/system/unified-interface/shared/endpoints/definition/loader.ts +152 -0
  314. package/src/app/api/[locale]/system/unified-interface/shared/endpoints/definitions/registry.ts +265 -0
  315. package/src/app/api/[locale]/system/unified-interface/shared/endpoints/permissions/registry.ts +680 -0
  316. package/src/app/api/[locale]/system/unified-interface/shared/endpoints/route/executor.ts +220 -0
  317. package/src/app/api/[locale]/system/unified-interface/shared/endpoints/route/handler.ts +325 -0
  318. package/src/app/api/[locale]/system/unified-interface/shared/endpoints/route/multi.ts +184 -0
  319. package/src/app/api/[locale]/system/unified-interface/shared/endpoints/route/request-validator.ts +201 -0
  320. package/src/app/api/[locale]/system/unified-interface/shared/endpoints/route/single.ts +58 -0
  321. package/src/app/api/[locale]/system/unified-interface/shared/env/define-env-client.ts +49 -0
  322. package/src/app/api/[locale]/system/unified-interface/shared/env/define-env.ts +47 -0
  323. package/src/app/api/[locale]/system/unified-interface/shared/env/validation-logger.ts +58 -0
  324. package/src/app/api/[locale]/system/unified-interface/shared/field/enum.ts +110 -0
  325. package/src/app/api/[locale]/system/unified-interface/shared/field/specialized.ts +339 -0
  326. package/src/app/api/[locale]/system/unified-interface/shared/field/utils.test.ts +408 -0
  327. package/src/app/api/[locale]/system/unified-interface/shared/field/utils.ts +1349 -0
  328. package/src/app/api/[locale]/system/unified-interface/shared/field-config/endpoint-field-types.ts +107 -0
  329. package/src/app/api/[locale]/system/unified-interface/shared/field-config/field-config-types.ts +268 -0
  330. package/src/app/api/[locale]/system/unified-interface/shared/logger/colors.ts +114 -0
  331. package/src/app/api/[locale]/system/unified-interface/shared/logger/endpoint.ts +169 -0
  332. package/src/app/api/[locale]/system/unified-interface/shared/logger/file-logger.ts +88 -0
  333. package/src/app/api/[locale]/system/unified-interface/shared/logger/formatters.ts +177 -0
  334. package/src/app/api/[locale]/system/unified-interface/shared/server-only/auth/base-auth-handler.ts +82 -0
  335. package/src/app/api/[locale]/system/unified-interface/shared/server-only/auth/factory.ts +33 -0
  336. package/src/app/api/[locale]/system/unified-interface/shared/server-only/server-only.ts +4 -0
  337. package/src/app/api/[locale]/system/unified-interface/shared/types/actions.ts +289 -0
  338. package/src/app/api/[locale]/system/unified-interface/shared/types/endpoint.ts +1167 -0
  339. package/src/app/api/[locale]/system/unified-interface/shared/types/enums.ts +382 -0
  340. package/src/app/api/[locale]/system/unified-interface/shared/types/platform.ts +34 -0
  341. package/src/app/api/[locale]/system/unified-interface/shared/types/types.ts +80 -0
  342. package/src/app/api/[locale]/system/unified-interface/shared/types/ui-config.ts +76 -0
  343. package/src/app/api/[locale]/system/unified-interface/shared/utils/error-types.ts +27 -0
  344. package/src/app/api/[locale]/system/unified-interface/shared/utils/path.ts +63 -0
  345. package/src/app/api/[locale]/system/unified-interface/shared/utils/scanner.ts +241 -0
  346. package/src/app/api/[locale]/system/unified-interface/shared/widgets/actions.ts +256 -0
  347. package/src/app/api/[locale]/system/unified-interface/shared/widgets/configs.ts +1158 -0
  348. package/src/app/api/[locale]/system/unified-interface/shared/widgets/helpers.ts +80 -0
  349. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/accordion.ts +82 -0
  350. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/avatar.ts +75 -0
  351. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/badge.ts +89 -0
  352. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/code-output.ts +302 -0
  353. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/code-quality-list.ts +202 -0
  354. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/container.ts +129 -0
  355. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/data-card.ts +81 -0
  356. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/data-cards.ts +258 -0
  357. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/data-list.ts +123 -0
  358. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/data-table.ts +387 -0
  359. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/editable-text.ts +89 -0
  360. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/empty-state.ts +78 -0
  361. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/errors.ts +93 -0
  362. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/grouped-list.ts +448 -0
  363. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/index.ts +38 -0
  364. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/link-card.ts +130 -0
  365. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/link-list.ts +127 -0
  366. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/link.ts +68 -0
  367. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/loading.ts +81 -0
  368. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/markdown.ts +176 -0
  369. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/metric-card.ts +241 -0
  370. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/section.ts +90 -0
  371. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/stats-grid.ts +71 -0
  372. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/tabs.ts +80 -0
  373. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/text.ts +105 -0
  374. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/title.ts +72 -0
  375. package/src/app/api/[locale]/system/unified-interface/shared/widgets/types.ts +240 -0
  376. package/src/app/api/[locale]/system/unified-interface/shared/widgets/utils/field-helpers.ts +137 -0
  377. package/src/app/api/[locale]/system/unified-interface/shared/widgets/utils/formatting.ts +437 -0
  378. package/src/app/api/[locale]/system/unified-interface/shared/widgets/utils/url.ts +40 -0
  379. package/src/app/api/[locale]/system/unified-interface/shared/widgets/utils/widget-helpers.ts +465 -0
  380. package/src/app/api/[locale]/user/auth/enum.ts +16 -0
  381. package/src/app/api/[locale]/user/auth/i18n/de/index.ts +227 -0
  382. package/src/app/api/[locale]/user/auth/i18n/en/index.ts +205 -0
  383. package/src/app/api/[locale]/user/auth/i18n/pl/index.ts +219 -0
  384. package/src/app/api/[locale]/user/auth/types.ts +110 -0
  385. package/src/app/api/[locale]/user/enum.ts +64 -0
  386. package/src/app/api/[locale]/user/private/i18n/de/index.ts +3 -0
  387. package/src/app/api/[locale]/user/private/i18n/en/index.ts +1 -0
  388. package/src/app/api/[locale]/user/private/i18n/pl/index.ts +3 -0
  389. package/src/app/api/[locale]/user/types.ts +118 -0
  390. package/src/app/api/[locale]/user/user-roles/enum.ts +112 -0
  391. package/src/app/api/[locale]/user/user-roles/i18n/de/index.ts +85 -0
  392. package/src/app/api/[locale]/user/user-roles/i18n/en/index.ts +83 -0
  393. package/src/app/api/[locale]/user/user-roles/i18n/pl/index.ts +86 -0
  394. package/src/app/api/[locale]/user/user-roles/types.ts +34 -0
  395. package/src/app/api/i18n/de/index.ts +6 -0
  396. package/src/app/api/i18n/en/index.ts +5 -0
  397. package/src/app/api/i18n/pl/index.ts +5 -0
  398. package/src/app/i18n/de/index.ts +6 -0
  399. package/src/app/i18n/en/index.ts +5 -0
  400. 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
+ }