@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,428 @@
1
+ /**
2
+ * Quality Runner Service
3
+ * Run quality checks: lint, typecheck, build, test
4
+ */
5
+
6
+ import { execSync } from "node:child_process";
7
+ import { existsSync, readFileSync } from "node:fs";
8
+ import { join } from "node:path";
9
+
10
+ import type { ResponseType } from "next-vibe/shared/types/response.schema";
11
+ import {
12
+ ErrorResponseTypes,
13
+ fail,
14
+ success,
15
+ } from "next-vibe/shared/types/response.schema";
16
+ import { parseError } from "next-vibe/shared/utils/parse-error";
17
+
18
+ import type { EndpointLogger } from "../../unified-interface/shared/logger/endpoint";
19
+ import {
20
+ formatError,
21
+ formatProgress,
22
+ formatSkip,
23
+ formatSuccess,
24
+ } from "../../unified-interface/shared/logger/formatters";
25
+ import { MESSAGES } from "./constants";
26
+ import {
27
+ hasStdout,
28
+ parsePackageJson,
29
+ safeJsonParse,
30
+ toCatchError,
31
+ } from "./utils";
32
+
33
+ // ============================================================================
34
+ // Interface
35
+ // ============================================================================
36
+
37
+ export interface IQualityRunner {
38
+ /**
39
+ * Run linting (with optional custom command)
40
+ */
41
+ runLint(
42
+ cwd: string,
43
+ packageManager: string,
44
+ logger: EndpointLogger,
45
+ dryRun: boolean,
46
+ customCommand?: string,
47
+ ): ResponseType<void>;
48
+
49
+ /**
50
+ * Run type checking (with optional custom command)
51
+ */
52
+ runTypecheck(
53
+ cwd: string,
54
+ packageManager: string,
55
+ logger: EndpointLogger,
56
+ dryRun: boolean,
57
+ customCommand?: string,
58
+ ): ResponseType<void>;
59
+
60
+ /**
61
+ * Run build (with optional custom command)
62
+ */
63
+ runBuild(
64
+ cwd: string,
65
+ packageManager: string,
66
+ logger: EndpointLogger,
67
+ dryRun: boolean,
68
+ customCommand?: string,
69
+ ): ResponseType<void>;
70
+
71
+ /**
72
+ * Run tests (with optional custom command)
73
+ */
74
+ runTests(
75
+ cwd: string,
76
+ packageManager: string,
77
+ logger: EndpointLogger,
78
+ dryRun: boolean,
79
+ customCommand?: string,
80
+ ): ResponseType<void>;
81
+
82
+ /**
83
+ * Run install (with optional custom command)
84
+ */
85
+ runInstall(
86
+ cwd: string,
87
+ packageManager: string,
88
+ logger: EndpointLogger,
89
+ dryRun: boolean,
90
+ customCommand?: string,
91
+ ): ResponseType<void>;
92
+
93
+ /**
94
+ * Run clean (with optional custom command)
95
+ */
96
+ runClean(
97
+ cwd: string,
98
+ packageManager: string,
99
+ logger: EndpointLogger,
100
+ dryRun: boolean,
101
+ customCommand?: string,
102
+ ): ResponseType<void>;
103
+ }
104
+
105
+ // ============================================================================
106
+ // Implementation
107
+ // ============================================================================
108
+
109
+ export class QualityRunner implements IQualityRunner {
110
+ runLint(
111
+ cwd: string,
112
+ packageManager: string,
113
+ logger: EndpointLogger,
114
+ dryRun: boolean,
115
+ customCommand?: string,
116
+ ): ResponseType<void> {
117
+ if (dryRun) {
118
+ logger.vibe(formatSkip("Lint (dry run)"));
119
+ return success();
120
+ }
121
+
122
+ logger.vibe(formatProgress("Running lint..."));
123
+
124
+ try {
125
+ // If custom command provided, execute it directly
126
+ if (customCommand) {
127
+ execSync(customCommand, {
128
+ stdio: "inherit",
129
+ cwd,
130
+ env: { ...process.env, FORCE_COLOR: "1" },
131
+ });
132
+ logger.vibe(formatSuccess("Lint passed"));
133
+ return success();
134
+ }
135
+
136
+ // Default: prefer package.json script as it may use custom linting setup
137
+ const pkgPath = join(cwd, "package.json");
138
+ const parsedPkg = existsSync(pkgPath)
139
+ ? parsePackageJson(safeJsonParse(readFileSync(pkgPath, "utf8")))
140
+ : undefined;
141
+ const hasLintScript = parsedPkg?.scripts?.lint;
142
+
143
+ if (hasLintScript) {
144
+ execSync(`${packageManager} run lint`, {
145
+ stdio: "inherit",
146
+ cwd,
147
+ env: { ...process.env, FORCE_COLOR: "1" },
148
+ });
149
+ } else {
150
+ // Fallback to direct eslint if no lint script
151
+ const eslintPath = join(cwd, "node_modules", ".bin", "eslint");
152
+ if (existsSync(eslintPath)) {
153
+ execSync(`${eslintPath} --fix .`, {
154
+ stdio: "inherit",
155
+ cwd,
156
+ env: { ...process.env, FORCE_COLOR: "1" },
157
+ });
158
+ } else {
159
+ logger.vibe(formatSkip("No lint script found"));
160
+ return success();
161
+ }
162
+ }
163
+ logger.vibe(formatSuccess("Lint passed"));
164
+ return success();
165
+ } catch (err) {
166
+ const error = toCatchError(err as Error | { stdout?: string | Buffer });
167
+ const output = hasStdout(error)
168
+ ? error.stdout.toString()
169
+ : parseError(err).message;
170
+ logger.vibe(formatError("Lint failed"));
171
+ logger.debug(MESSAGES.LINT_FAILED, { output });
172
+ return fail({
173
+ message: "app.api.system.releaseTool.scripts.lintFailed",
174
+ errorType: ErrorResponseTypes.INTERNAL_ERROR,
175
+ messageParams: { path: cwd, output },
176
+ });
177
+ }
178
+ }
179
+
180
+ runTypecheck(
181
+ cwd: string,
182
+ packageManager: string,
183
+ logger: EndpointLogger,
184
+ dryRun: boolean,
185
+ customCommand?: string,
186
+ ): ResponseType<void> {
187
+ // Skip tsconfig check if custom command provided
188
+ if (!customCommand) {
189
+ const tsconfigPath = join(cwd, "tsconfig.json");
190
+ if (!existsSync(tsconfigPath)) {
191
+ logger.vibe(formatSkip("No tsconfig.json found"));
192
+ return success();
193
+ }
194
+ }
195
+
196
+ if (dryRun) {
197
+ logger.vibe(formatSkip("Typecheck (dry run)"));
198
+ return success();
199
+ }
200
+
201
+ logger.vibe(formatProgress("Running typecheck..."));
202
+
203
+ try {
204
+ // If custom command provided, execute it directly
205
+ if (customCommand) {
206
+ execSync(customCommand, {
207
+ stdio: "inherit",
208
+ cwd,
209
+ env: { ...process.env, FORCE_COLOR: "1" },
210
+ });
211
+ logger.vibe(formatSuccess("Typecheck passed"));
212
+ return success();
213
+ }
214
+
215
+ // Default behavior
216
+ execSync(`${packageManager} run typecheck`, {
217
+ stdio: "inherit",
218
+ cwd,
219
+ });
220
+ logger.vibe(formatSuccess("Typecheck passed"));
221
+ return success();
222
+ } catch (error) {
223
+ logger.vibe(formatError("Typecheck failed"));
224
+ logger.debug(MESSAGES.TYPECHECK_FAILED, parseError(error));
225
+ return fail({
226
+ message: "app.api.system.releaseTool.scripts.typecheckFailed",
227
+ errorType: ErrorResponseTypes.INTERNAL_ERROR,
228
+ messageParams: { path: cwd, error: String(error) },
229
+ });
230
+ }
231
+ }
232
+
233
+ runBuild(
234
+ cwd: string,
235
+ packageManager: string,
236
+ logger: EndpointLogger,
237
+ dryRun: boolean,
238
+ customCommand?: string,
239
+ ): ResponseType<void> {
240
+ if (dryRun) {
241
+ logger.vibe(formatSkip("Build (dry run)"));
242
+ return success();
243
+ }
244
+
245
+ logger.vibe(formatProgress("Running build..."));
246
+
247
+ try {
248
+ const command = customCommand ?? `${packageManager} run build`;
249
+ execSync(command, {
250
+ stdio: "inherit",
251
+ cwd,
252
+ });
253
+ logger.vibe(formatSuccess("Build passed"));
254
+ return success();
255
+ } catch (error) {
256
+ logger.vibe(formatError("Build failed"));
257
+ logger.debug(MESSAGES.BUILD_FAILED, parseError(error));
258
+ return fail({
259
+ message: "app.api.system.releaseTool.scripts.buildFailed",
260
+ errorType: ErrorResponseTypes.INTERNAL_ERROR,
261
+ messageParams: { path: cwd, error: String(error) },
262
+ });
263
+ }
264
+ }
265
+
266
+ runTests(
267
+ cwd: string,
268
+ packageManager: string,
269
+ logger: EndpointLogger,
270
+ dryRun: boolean,
271
+ customCommand?: string,
272
+ ): ResponseType<void> {
273
+ // Skip package.json check if custom command provided
274
+ if (!customCommand) {
275
+ const pkgPath = join(cwd, "package.json");
276
+ if (!existsSync(pkgPath)) {
277
+ return success();
278
+ }
279
+
280
+ const parsedPkg = parsePackageJson(
281
+ safeJsonParse(readFileSync(pkgPath, "utf8")),
282
+ );
283
+ if (!parsedPkg?.scripts?.["test"]) {
284
+ logger.vibe(formatSkip("No test script found"));
285
+ return success();
286
+ }
287
+ }
288
+
289
+ if (dryRun) {
290
+ logger.vibe(formatSkip("Tests (dry run)"));
291
+ return success();
292
+ }
293
+
294
+ logger.vibe(formatProgress("Running tests..."));
295
+
296
+ try {
297
+ const command = customCommand ?? `${packageManager} run test`;
298
+ execSync(command, {
299
+ stdio: "inherit",
300
+ cwd,
301
+ });
302
+ logger.vibe(formatSuccess("Tests passed"));
303
+ return success();
304
+ } catch (error) {
305
+ logger.vibe(formatError("Tests failed"));
306
+ logger.debug(MESSAGES.TESTS_FAILED, parseError(error));
307
+ return fail({
308
+ message: "app.api.system.releaseTool.scripts.testsFailed",
309
+ errorType: ErrorResponseTypes.INTERNAL_ERROR,
310
+ messageParams: { path: cwd, error: String(error) },
311
+ });
312
+ }
313
+ }
314
+
315
+ runInstall(
316
+ cwd: string,
317
+ packageManager: string,
318
+ logger: EndpointLogger,
319
+ dryRun: boolean,
320
+ customCommand?: string,
321
+ ): ResponseType<void> {
322
+ if (dryRun) {
323
+ logger.vibe(formatSkip("Install (dry run)"));
324
+ return success();
325
+ }
326
+
327
+ logger.vibe(formatProgress("Installing dependencies..."));
328
+
329
+ try {
330
+ const command = customCommand ?? `${packageManager} install`;
331
+ execSync(command, {
332
+ cwd,
333
+ stdio: "inherit",
334
+ timeout: 300000, // 5 minutes
335
+ });
336
+ logger.vibe(formatSuccess("Dependencies installed"));
337
+ return success();
338
+ } catch (error) {
339
+ logger.vibe(formatError("Install failed"));
340
+ logger.debug(MESSAGES.INSTALL_FAILED, parseError(error));
341
+ return fail({
342
+ message: "app.api.system.releaseTool.dependencies.failed",
343
+ errorType: ErrorResponseTypes.INTERNAL_ERROR,
344
+ messageParams: { directory: cwd, error: String(error) },
345
+ });
346
+ }
347
+ }
348
+
349
+ runClean(
350
+ cwd: string,
351
+ packageManager: string,
352
+ logger: EndpointLogger,
353
+ dryRun: boolean,
354
+ customCommand?: string,
355
+ ): ResponseType<void> {
356
+ if (dryRun) {
357
+ logger.vibe(formatSkip("Clean (dry run)"));
358
+ return success();
359
+ }
360
+
361
+ logger.vibe(formatProgress("Cleaning..."));
362
+
363
+ // If custom command provided, execute it directly
364
+ if (customCommand) {
365
+ try {
366
+ execSync(customCommand, {
367
+ cwd,
368
+ stdio: "inherit",
369
+ timeout: 60000,
370
+ });
371
+ logger.info(MESSAGES.CLEAN_SUCCESS);
372
+ return success();
373
+ } catch (error) {
374
+ logger.error(MESSAGES.CLEAN_FAILED, parseError(error));
375
+ return fail({
376
+ message: "app.api.system.releaseTool.scripts.buildFailed",
377
+ errorType: ErrorResponseTypes.INTERNAL_ERROR,
378
+ messageParams: { path: cwd, error: String(error) },
379
+ });
380
+ }
381
+ }
382
+
383
+ // Check if clean script exists in package.json
384
+ const pkgPath = join(cwd, "package.json");
385
+ if (existsSync(pkgPath)) {
386
+ const parsedPkg = parsePackageJson(
387
+ safeJsonParse(readFileSync(pkgPath, "utf8")),
388
+ );
389
+ if (parsedPkg?.scripts?.["clean"]) {
390
+ try {
391
+ execSync(`${packageManager} run clean`, {
392
+ cwd,
393
+ stdio: "inherit",
394
+ timeout: 60000,
395
+ });
396
+ logger.info(MESSAGES.CLEAN_SUCCESS);
397
+ return success();
398
+ } catch (error) {
399
+ logger.error(MESSAGES.CLEAN_FAILED, parseError(error));
400
+ return fail({
401
+ message: "app.api.system.releaseTool.scripts.buildFailed",
402
+ errorType: ErrorResponseTypes.INTERNAL_ERROR,
403
+ messageParams: { path: cwd, error: String(error) },
404
+ });
405
+ }
406
+ }
407
+ }
408
+
409
+ // Default clean: remove dist, build, node_modules/.cache
410
+ const dirsToClean = ["dist", "build", "node_modules/.cache", ".turbo"];
411
+ for (const dir of dirsToClean) {
412
+ const dirPath = join(cwd, dir);
413
+ if (existsSync(dirPath)) {
414
+ try {
415
+ execSync(`rm -rf "${dirPath}"`, { cwd, stdio: "pipe" });
416
+ } catch {
417
+ // Ignore errors
418
+ }
419
+ }
420
+ }
421
+
422
+ logger.info(MESSAGES.CLEAN_SUCCESS);
423
+ return success();
424
+ }
425
+ }
426
+
427
+ // Singleton instance
428
+ export const qualityRunner = new QualityRunner();
@@ -0,0 +1,293 @@
1
+ /**
2
+ * Release Creator Service
3
+ * Create GitHub and GitLab releases
4
+ */
5
+
6
+ import { execSync } from "node:child_process";
7
+ import { existsSync } from "node:fs";
8
+ import { basename, resolve } from "node:path";
9
+
10
+ import type { ResponseType } from "next-vibe/shared/types/response.schema";
11
+ import {
12
+ ErrorResponseTypes,
13
+ fail,
14
+ success,
15
+ } from "next-vibe/shared/types/response.schema";
16
+ import { parseError } from "next-vibe/shared/utils/parse-error";
17
+
18
+ import type { EndpointLogger } from "../../unified-interface/shared/logger/endpoint";
19
+ import type { PackageJson, ReleaseOptions, VersionInfo } from "../definition";
20
+ import { MESSAGES } from "./constants";
21
+ import { gitService } from "./git-service";
22
+
23
+ // ============================================================================
24
+ // Interface
25
+ // ============================================================================
26
+
27
+ export interface IReleaseCreator {
28
+ /**
29
+ * Create a GitHub or GitLab release
30
+ */
31
+ createGitRelease(
32
+ cwd: string,
33
+ releaseConfig: ReleaseOptions,
34
+ packageJson: PackageJson,
35
+ versionInfo: VersionInfo,
36
+ logger: EndpointLogger,
37
+ dryRun: boolean,
38
+ ): ResponseType<string | undefined>;
39
+ }
40
+
41
+ // ============================================================================
42
+ // Implementation
43
+ // ============================================================================
44
+
45
+ export class ReleaseCreator implements IReleaseCreator {
46
+ createGitRelease(
47
+ cwd: string,
48
+ releaseConfig: ReleaseOptions,
49
+ packageJson: PackageJson,
50
+ versionInfo: VersionInfo,
51
+ logger: EndpointLogger,
52
+ dryRun: boolean,
53
+ ): ResponseType<string | undefined> {
54
+ const gitReleaseConfig = releaseConfig.gitRelease;
55
+ if (!gitReleaseConfig?.enabled) {
56
+ return success(undefined);
57
+ }
58
+
59
+ const repo = gitService.getRepoUrl();
60
+ if (!repo) {
61
+ logger.warn("Could not determine repository URL, skipping git release");
62
+ return success(undefined);
63
+ }
64
+
65
+ // Route to appropriate platform
66
+ if (repo.type === "gitlab") {
67
+ return this.createGitLabRelease(
68
+ cwd,
69
+ releaseConfig,
70
+ packageJson,
71
+ versionInfo,
72
+ repo,
73
+ logger,
74
+ dryRun,
75
+ );
76
+ }
77
+
78
+ if (repo.type !== "github") {
79
+ logger.warn(
80
+ `Git releases only supported for GitHub and GitLab (found: ${repo.type})`,
81
+ );
82
+ return success(undefined);
83
+ }
84
+
85
+ // GitHub release
86
+ return this.createGitHubRelease(
87
+ cwd,
88
+ releaseConfig,
89
+ packageJson,
90
+ versionInfo,
91
+ repo,
92
+ logger,
93
+ dryRun,
94
+ );
95
+ }
96
+
97
+ private createGitHubRelease(
98
+ cwd: string,
99
+ releaseConfig: ReleaseOptions,
100
+ packageJson: PackageJson,
101
+ versionInfo: VersionInfo,
102
+ repo: { type: string; url: string },
103
+ logger: EndpointLogger,
104
+ dryRun: boolean,
105
+ ): ResponseType<string | undefined> {
106
+ const gitReleaseConfig = releaseConfig.gitRelease;
107
+
108
+ if (dryRun) {
109
+ logger.info(MESSAGES.DRY_RUN_MODE, { action: "create GitHub release" });
110
+ return success(undefined);
111
+ }
112
+
113
+ logger.info(MESSAGES.GITHUB_RELEASE_CREATING);
114
+
115
+ try {
116
+ // Check if gh CLI is available
117
+ try {
118
+ execSync("gh --version", { stdio: "pipe" });
119
+ } catch {
120
+ logger.warn("GitHub CLI (gh) not found, skipping GitHub release");
121
+ return success(undefined);
122
+ }
123
+
124
+ // Build release command
125
+ const commandParts = ["gh", "release", "create", versionInfo.newTag];
126
+
127
+ // Add title
128
+ /* eslint-disable no-template-curly-in-string -- Intentional release title/body templates */
129
+ const title =
130
+ gitReleaseConfig?.title
131
+ ?.replace("${version}", versionInfo.newVersion)
132
+ .replace("${name}", packageJson.name) ??
133
+ /* eslint-enable no-template-curly-in-string */
134
+ `Release ${versionInfo.newTag}`;
135
+ commandParts.push(`--title "${title}"`);
136
+
137
+ // Add notes
138
+ if (gitReleaseConfig?.generateNotes) {
139
+ commandParts.push("--generate-notes");
140
+ } else if (gitReleaseConfig?.body) {
141
+ /* eslint-disable no-template-curly-in-string -- Intentional release title/body templates */
142
+ const body = gitReleaseConfig.body
143
+ .replace("${version}", versionInfo.newVersion)
144
+ .replace("${name}", packageJson.name);
145
+ /* eslint-enable no-template-curly-in-string */
146
+ commandParts.push(`--notes "${body}"`);
147
+ }
148
+
149
+ // Add flags
150
+ if (gitReleaseConfig?.draft) {
151
+ commandParts.push("--draft");
152
+ }
153
+ if (gitReleaseConfig?.prerelease) {
154
+ commandParts.push("--prerelease");
155
+ }
156
+ if (gitReleaseConfig?.target) {
157
+ commandParts.push(`--target ${gitReleaseConfig.target}`);
158
+ }
159
+ if (gitReleaseConfig?.discussionCategory) {
160
+ commandParts.push(
161
+ `--discussion-category ${gitReleaseConfig.discussionCategory}`,
162
+ );
163
+ }
164
+
165
+ // Add assets
166
+ if (gitReleaseConfig?.assets) {
167
+ for (const asset of gitReleaseConfig.assets) {
168
+ const assetPath = resolve(cwd, asset.path);
169
+ if (existsSync(assetPath)) {
170
+ let assetArg = assetPath;
171
+ if (asset.label) {
172
+ assetArg += `#${asset.label}`;
173
+ }
174
+ commandParts.push(assetArg);
175
+ } else {
176
+ logger.warn(`Release asset not found: ${asset.path}`);
177
+ }
178
+ }
179
+ }
180
+
181
+ const command = commandParts.join(" ");
182
+ const output = execSync(command, { encoding: "utf8", cwd }).trim();
183
+
184
+ logger.info(MESSAGES.GITHUB_RELEASE_SUCCESS, { tag: versionInfo.newTag });
185
+
186
+ // Return the release URL
187
+ const releaseUrl =
188
+ output || `${repo.url}/releases/tag/${versionInfo.newTag}`;
189
+ return success(releaseUrl);
190
+ } catch (error) {
191
+ logger.error(MESSAGES.GITHUB_RELEASE_FAILED, parseError(error));
192
+ return fail({
193
+ message: "app.api.system.releaseTool.gitRelease.failed",
194
+ errorType: ErrorResponseTypes.INTERNAL_ERROR,
195
+ messageParams: { error: String(error) },
196
+ });
197
+ }
198
+ }
199
+
200
+ private createGitLabRelease(
201
+ cwd: string,
202
+ releaseConfig: ReleaseOptions,
203
+ packageJson: PackageJson,
204
+ versionInfo: VersionInfo,
205
+ repo: { type: string; url: string },
206
+ logger: EndpointLogger,
207
+ dryRun: boolean,
208
+ ): ResponseType<string | undefined> {
209
+ const gitReleaseConfig = releaseConfig.gitRelease;
210
+
211
+ if (dryRun) {
212
+ logger.info(MESSAGES.DRY_RUN_MODE, { action: "create GitLab release" });
213
+ return success(undefined);
214
+ }
215
+
216
+ logger.info(MESSAGES.GITLAB_RELEASE_CREATING);
217
+
218
+ try {
219
+ // Check if glab CLI is available
220
+ try {
221
+ execSync("glab --version", { stdio: "pipe" });
222
+ } catch {
223
+ logger.warn("GitLab CLI (glab) not found, skipping GitLab release");
224
+ return success(undefined);
225
+ }
226
+
227
+ // Build release command
228
+ const commandParts = ["glab", "release", "create", versionInfo.newTag];
229
+
230
+ // Add title/name
231
+ /* eslint-disable no-template-curly-in-string -- Intentional release title/body templates */
232
+ const title =
233
+ gitReleaseConfig?.title
234
+ ?.replace("${version}", versionInfo.newVersion)
235
+ .replace("${name}", packageJson.name) ??
236
+ /* eslint-enable no-template-curly-in-string */
237
+ `Release ${versionInfo.newTag}`;
238
+ commandParts.push(`--name "${title}"`);
239
+
240
+ // Add notes
241
+ if (gitReleaseConfig?.body) {
242
+ /* eslint-disable no-template-curly-in-string -- Intentional release title/body templates */
243
+ const body = gitReleaseConfig.body
244
+ .replace("${version}", versionInfo.newVersion)
245
+ .replace("${name}", packageJson.name);
246
+ /* eslint-enable no-template-curly-in-string */
247
+ commandParts.push(`--notes "${body}"`);
248
+ } else if (gitReleaseConfig?.generateNotes) {
249
+ commandParts.push("--notes ''");
250
+ }
251
+
252
+ // Add ref (target commitish)
253
+ if (gitReleaseConfig?.target) {
254
+ commandParts.push(`--ref ${gitReleaseConfig.target}`);
255
+ }
256
+
257
+ // Add assets
258
+ if (gitReleaseConfig?.assets) {
259
+ for (const asset of gitReleaseConfig.assets) {
260
+ const assetPath = resolve(cwd, asset.path);
261
+ if (existsSync(assetPath)) {
262
+ const assetName = asset.name ?? basename(assetPath);
263
+ commandParts.push(
264
+ `--assets-links '[{"name": "${assetName}", "url": "file://${assetPath}"}]'`,
265
+ );
266
+ } else {
267
+ logger.warn(`Release asset not found: ${asset.path}`);
268
+ }
269
+ }
270
+ }
271
+
272
+ const command = commandParts.join(" ");
273
+ const output = execSync(command, { encoding: "utf8", cwd }).trim();
274
+
275
+ logger.info(MESSAGES.GITLAB_RELEASE_SUCCESS, { tag: versionInfo.newTag });
276
+
277
+ // Return the release URL
278
+ const releaseUrl =
279
+ output || `${repo.url}/-/releases/${versionInfo.newTag}`;
280
+ return success(releaseUrl);
281
+ } catch (error) {
282
+ logger.error(MESSAGES.GITLAB_RELEASE_FAILED, parseError(error));
283
+ return fail({
284
+ message: "app.api.system.releaseTool.gitRelease.failed",
285
+ errorType: ErrorResponseTypes.INTERNAL_ERROR,
286
+ messageParams: { error: String(error) },
287
+ });
288
+ }
289
+ }
290
+ }
291
+
292
+ // Singleton instance
293
+ export const releaseCreator = new ReleaseCreator();