@next-vibe/checker 1.0.11 → 1.0.12

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 (394) hide show
  1. package/.dist/bin/vibe-runtime.js +10 -19
  2. package/.dist/bin/vibe-runtime.js.map +3 -3
  3. package/check.config.ts +4 -4
  4. package/package.json +2 -9
  5. package/src/app/api/[locale]/LICENSE +674 -0
  6. package/src/app/api/[locale]/i18n/de/index.ts +13 -0
  7. package/src/app/api/[locale]/i18n/en/index.ts +12 -0
  8. package/src/app/api/[locale]/i18n/pl/index.ts +11 -0
  9. package/src/app/api/[locale]/shared/i18n/de/index.ts +85 -0
  10. package/src/app/api/[locale]/shared/i18n/en/index.ts +83 -0
  11. package/src/app/api/[locale]/shared/i18n/pl/index.ts +85 -0
  12. package/src/app/api/[locale]/shared/stats-filtering.ts +202 -0
  13. package/src/app/api/[locale]/shared/types/common.schema.ts +55 -0
  14. package/src/app/api/[locale]/shared/types/response.schema.ts +372 -0
  15. package/src/app/api/[locale]/shared/types/stats-filtering.schema.ts +375 -0
  16. package/src/app/api/[locale]/shared/types/utils.ts +190 -0
  17. package/src/app/api/[locale]/shared/utils/base64.ts +49 -0
  18. package/src/app/api/[locale]/shared/utils/env-util.ts +40 -0
  19. package/src/app/api/[locale]/shared/utils/i18n/de/index.ts +21 -0
  20. package/src/app/api/[locale]/shared/utils/i18n/en/index.ts +19 -0
  21. package/src/app/api/[locale]/shared/utils/i18n/pl/index.ts +21 -0
  22. package/src/app/api/[locale]/shared/utils/index.ts +11 -0
  23. package/src/app/api/[locale]/shared/utils/object-path.ts +41 -0
  24. package/src/app/api/[locale]/shared/utils/object.test.ts +82 -0
  25. package/src/app/api/[locale]/shared/utils/object.ts +75 -0
  26. package/src/app/api/[locale]/shared/utils/parse-error.ts +134 -0
  27. package/src/app/api/[locale]/shared/utils/parse-json.ts +70 -0
  28. package/src/app/api/[locale]/shared/utils/time.ts +53 -0
  29. package/src/app/api/[locale]/shared/utils/validation.ts +127 -0
  30. package/src/app/api/[locale]/shared/utils/zod-required-fields.ts +116 -0
  31. package/src/app/api/[locale]/system/builder/definition.ts +1942 -0
  32. package/src/app/api/[locale]/system/builder/enum.ts +77 -0
  33. package/src/app/api/[locale]/system/builder/i18n/de/index.ts +677 -0
  34. package/src/app/api/[locale]/system/builder/i18n/en/index.ts +665 -0
  35. package/src/app/api/[locale]/system/builder/i18n/pl/index.ts +668 -0
  36. package/src/app/api/[locale]/system/builder/repository/build-executor.test.ts +182 -0
  37. package/src/app/api/[locale]/system/builder/repository/build-executor.ts +583 -0
  38. package/src/app/api/[locale]/system/builder/repository/bun-compiler.ts +261 -0
  39. package/src/app/api/[locale]/system/builder/repository/bundle-analyzer.ts +197 -0
  40. package/src/app/api/[locale]/system/builder/repository/config-loader.ts +159 -0
  41. package/src/app/api/[locale]/system/builder/repository/config-validator.ts +97 -0
  42. package/src/app/api/[locale]/system/builder/repository/constants.ts +125 -0
  43. package/src/app/api/[locale]/system/builder/repository/error-suggester.ts +75 -0
  44. package/src/app/api/[locale]/system/builder/repository/file-copier.ts +98 -0
  45. package/src/app/api/[locale]/system/builder/repository/folder-cleaner.ts +80 -0
  46. package/src/app/api/[locale]/system/builder/repository/index.ts +2 -0
  47. package/src/app/api/[locale]/system/builder/repository/npm-package-generator.ts +146 -0
  48. package/src/app/api/[locale]/system/builder/repository/output-formatter.ts +104 -0
  49. package/src/app/api/[locale]/system/builder/repository/profile-service.ts +79 -0
  50. package/src/app/api/[locale]/system/builder/repository/report-generator.ts +125 -0
  51. package/src/app/api/[locale]/system/builder/repository/vite-compiler.ts +291 -0
  52. package/src/app/api/[locale]/system/builder/route.ts +21 -0
  53. package/src/app/api/[locale]/system/builder/test-files/file1.ts +2 -0
  54. package/src/app/api/[locale]/system/builder/test-files/file2.tsx +10 -0
  55. package/src/app/api/[locale]/system/builder/test-files/file3.tsx +16 -0
  56. package/src/app/api/[locale]/system/builder/test-files/folderToCopy/fileInFolder.ts +2 -0
  57. package/src/app/api/[locale]/system/builder/test-files/test-config.ts +38 -0
  58. package/src/app/api/[locale]/system/builder/test-files/test-delete-config.ts +8 -0
  59. package/src/app/api/[locale]/system/builder/test-files/test-project/package.json +24 -0
  60. package/src/app/api/[locale]/system/builder/test-files/test-project/src/constants.ts +6 -0
  61. package/src/app/api/[locale]/system/builder/test-files/test-project/src/greet.ts +18 -0
  62. package/src/app/api/[locale]/system/builder/test-files/test-project/src/index.ts +7 -0
  63. package/src/app/api/[locale]/system/builder/test-files/test-project/src/utils/calculate.ts +27 -0
  64. package/src/app/api/[locale]/system/builder/test-files/test-project/tsconfig.json +19 -0
  65. package/src/app/api/[locale]/system/builder/test-files/test-project/tsconfig.tsbuildinfo +1 -0
  66. package/src/app/api/[locale]/system/builder/test-files/test3.css +1 -0
  67. package/src/app/api/[locale]/system/check/config/repository.ts +819 -0
  68. package/src/app/api/[locale]/system/check/config/shared.ts +396 -0
  69. package/src/app/api/[locale]/system/check/config/types.ts +616 -0
  70. package/src/app/api/[locale]/system/check/config/utils.ts +171 -0
  71. package/src/app/api/[locale]/system/check/i18n/de/index.ts +15 -0
  72. package/src/app/api/[locale]/system/check/i18n/en/index.ts +14 -0
  73. package/src/app/api/[locale]/system/check/i18n/pl/index.ts +15 -0
  74. package/src/app/api/[locale]/system/check/lint/definition.ts +414 -0
  75. package/src/app/api/[locale]/system/check/lint/enum.ts +37 -0
  76. package/src/app/api/[locale]/system/check/lint/i18n/de/index.ts +164 -0
  77. package/src/app/api/[locale]/system/check/lint/i18n/en/index.ts +162 -0
  78. package/src/app/api/[locale]/system/check/lint/i18n/pl/index.ts +164 -0
  79. package/src/app/api/[locale]/system/check/lint/repository.ts +753 -0
  80. package/src/app/api/[locale]/system/check/lint/route.ts +21 -0
  81. package/src/app/api/[locale]/system/check/oxlint/README.md +190 -0
  82. package/src/app/api/[locale]/system/check/oxlint/definition.ts +414 -0
  83. package/src/app/api/[locale]/system/check/oxlint/enum.ts +37 -0
  84. package/src/app/api/[locale]/system/check/oxlint/i18n/de/index.ts +171 -0
  85. package/src/app/api/[locale]/system/check/oxlint/i18n/en/index.ts +168 -0
  86. package/src/app/api/[locale]/system/check/oxlint/i18n/pl/index.ts +172 -0
  87. package/src/app/api/[locale]/system/check/oxlint/plugins/i18n/src/index.ts +372 -0
  88. package/src/app/api/[locale]/system/check/oxlint/plugins/jsx-capitalization/README.md +246 -0
  89. package/src/app/api/[locale]/system/check/oxlint/plugins/jsx-capitalization/src/index.ts +583 -0
  90. package/src/app/api/[locale]/system/check/oxlint/plugins/restricted-syntax/src/index.ts +500 -0
  91. package/src/app/api/[locale]/system/check/oxlint/plugins/restricted-syntax/test.tsx +74 -0
  92. package/src/app/api/[locale]/system/check/oxlint/plugins/shared/config-loader.ts +305 -0
  93. package/src/app/api/[locale]/system/check/oxlint/repository.ts +959 -0
  94. package/src/app/api/[locale]/system/check/oxlint/route.ts +21 -0
  95. package/src/app/api/[locale]/system/check/oxlint/types.ts +193 -0
  96. package/src/app/api/[locale]/system/check/test-project/bun.lock +449 -0
  97. package/src/app/api/[locale]/system/check/test-project/check.config.ts +989 -0
  98. package/src/app/api/[locale]/system/check/test-project/package.json +20 -0
  99. package/src/app/api/[locale]/system/check/test-project/src/constants.ts +6 -0
  100. package/src/app/api/[locale]/system/check/test-project/src/greet.ts +18 -0
  101. package/src/app/api/[locale]/system/check/test-project/src/test-issues/a11y-issues.tsx +107 -0
  102. package/src/app/api/[locale]/system/check/test-project/src/test-issues/eslint-issues.tsx +37 -0
  103. package/src/app/api/[locale]/system/check/test-project/src/test-issues/general-issues.ts +137 -0
  104. package/src/app/api/[locale]/system/check/test-project/src/test-issues/i18n-issues.tsx +129 -0
  105. package/src/app/api/[locale]/system/check/test-project/src/test-issues/jsx-capitalization-issues.tsx +131 -0
  106. package/src/app/api/[locale]/system/check/test-project/src/test-issues/nextjs-issues.tsx +95 -0
  107. package/src/app/api/[locale]/system/check/test-project/src/test-issues/promise-issues.ts +76 -0
  108. package/src/app/api/[locale]/system/check/test-project/src/test-issues/react-issues.tsx +95 -0
  109. package/src/app/api/[locale]/system/check/test-project/src/test-issues/restricted-syntax-issues.tsx +61 -0
  110. package/src/app/api/[locale]/system/check/test-project/src/test-issues/typescript-issues.ts +80 -0
  111. package/src/app/api/[locale]/system/check/test-project/src/utils/calculate.ts +27 -0
  112. package/src/app/api/[locale]/system/check/test-project/tsconfig.json +38 -0
  113. package/src/app/api/[locale]/system/check/test-project/tsconfig.tsbuildinfo +1 -0
  114. package/src/app/api/[locale]/system/check/typecheck/definition.ts +369 -0
  115. package/src/app/api/[locale]/system/check/typecheck/enum.ts +37 -0
  116. package/src/app/api/[locale]/system/check/typecheck/i18n/de/index.ts +159 -0
  117. package/src/app/api/[locale]/system/check/typecheck/i18n/en/index.ts +150 -0
  118. package/src/app/api/[locale]/system/check/typecheck/i18n/pl/index.ts +155 -0
  119. package/src/app/api/[locale]/system/check/typecheck/repository.ts +919 -0
  120. package/src/app/api/[locale]/system/check/typecheck/route.ts +22 -0
  121. package/src/app/api/[locale]/system/check/typecheck/utils.ts +168 -0
  122. package/src/app/api/[locale]/system/check/vibe-check/definition.ts +568 -0
  123. package/src/app/api/[locale]/system/check/vibe-check/enum.ts +69 -0
  124. package/src/app/api/[locale]/system/check/vibe-check/i18n/de/index.ts +192 -0
  125. package/src/app/api/[locale]/system/check/vibe-check/i18n/en/index.ts +189 -0
  126. package/src/app/api/[locale]/system/check/vibe-check/i18n/pl/index.ts +192 -0
  127. package/src/app/api/[locale]/system/check/vibe-check/repository.ts +545 -0
  128. package/src/app/api/[locale]/system/check/vibe-check/route.test.ts +1142 -0
  129. package/src/app/api/[locale]/system/check/vibe-check/route.ts +21 -0
  130. package/src/app/api/[locale]/system/generated/endpoint.ts +313 -0
  131. package/src/app/api/[locale]/system/generated/endpoints.ts +156 -0
  132. package/src/app/api/[locale]/system/generated/route-handlers.ts +224 -0
  133. package/src/app/api/[locale]/system/generators/endpoint/definition.ts +193 -0
  134. package/src/app/api/[locale]/system/generators/endpoint/i18n/de/index.ts +48 -0
  135. package/src/app/api/[locale]/system/generators/endpoint/i18n/en/index.ts +48 -0
  136. package/src/app/api/[locale]/system/generators/endpoint/i18n/pl/index.ts +50 -0
  137. package/src/app/api/[locale]/system/generators/endpoint/repository.ts +291 -0
  138. package/src/app/api/[locale]/system/generators/endpoint/route.ts +21 -0
  139. package/src/app/api/[locale]/system/generators/endpoints/definition.ts +246 -0
  140. package/src/app/api/[locale]/system/generators/endpoints/i18n/de/index.ts +54 -0
  141. package/src/app/api/[locale]/system/generators/endpoints/i18n/en/index.ts +52 -0
  142. package/src/app/api/[locale]/system/generators/endpoints/i18n/pl/index.ts +54 -0
  143. package/src/app/api/[locale]/system/generators/endpoints/options-repository.ts +463 -0
  144. package/src/app/api/[locale]/system/generators/endpoints/repository.ts +383 -0
  145. package/src/app/api/[locale]/system/generators/endpoints/route.ts +18 -0
  146. package/src/app/api/[locale]/system/generators/endpoints-index/definition.ts +194 -0
  147. package/src/app/api/[locale]/system/generators/endpoints-index/i18n/de/index.ts +71 -0
  148. package/src/app/api/[locale]/system/generators/endpoints-index/i18n/en/index.ts +69 -0
  149. package/src/app/api/[locale]/system/generators/endpoints-index/i18n/pl/index.ts +71 -0
  150. package/src/app/api/[locale]/system/generators/endpoints-index/repository.ts +294 -0
  151. package/src/app/api/[locale]/system/generators/endpoints-index/route.ts +18 -0
  152. package/src/app/api/[locale]/system/generators/generate-all/definition.ts +355 -0
  153. package/src/app/api/[locale]/system/generators/generate-all/i18n/de/index.ts +96 -0
  154. package/src/app/api/[locale]/system/generators/generate-all/i18n/en/index.ts +94 -0
  155. package/src/app/api/[locale]/system/generators/generate-all/i18n/pl/index.ts +96 -0
  156. package/src/app/api/[locale]/system/generators/generate-all/repository.ts +257 -0
  157. package/src/app/api/[locale]/system/generators/generate-all/route.ts +20 -0
  158. package/src/app/api/[locale]/system/generators/i18n/de/index.ts +15 -0
  159. package/src/app/api/[locale]/system/generators/i18n/en/index.ts +14 -0
  160. package/src/app/api/[locale]/system/generators/i18n/pl/index.ts +15 -0
  161. package/src/app/api/[locale]/system/generators/route-handlers/definition.ts +198 -0
  162. package/src/app/api/[locale]/system/generators/route-handlers/i18n/de/index.ts +48 -0
  163. package/src/app/api/[locale]/system/generators/route-handlers/i18n/en/index.ts +48 -0
  164. package/src/app/api/[locale]/system/generators/route-handlers/i18n/pl/index.ts +50 -0
  165. package/src/app/api/[locale]/system/generators/route-handlers/repository.ts +277 -0
  166. package/src/app/api/[locale]/system/generators/route-handlers/route.ts +17 -0
  167. package/src/app/api/[locale]/system/generators/shared/utils.ts +233 -0
  168. package/src/app/api/[locale]/system/help/definition.ts +445 -0
  169. package/src/app/api/[locale]/system/help/i18n/de/index.ts +267 -0
  170. package/src/app/api/[locale]/system/help/i18n/en/index.ts +262 -0
  171. package/src/app/api/[locale]/system/help/i18n/pl/index.ts +265 -0
  172. package/src/app/api/[locale]/system/help/interactive/definition.ts +125 -0
  173. package/src/app/api/[locale]/system/help/interactive/i18n/de/index.ts +22 -0
  174. package/src/app/api/[locale]/system/help/interactive/i18n/en/index.ts +19 -0
  175. package/src/app/api/[locale]/system/help/interactive/i18n/pl/index.ts +22 -0
  176. package/src/app/api/[locale]/system/help/interactive/repository.ts +1025 -0
  177. package/src/app/api/[locale]/system/help/interactive/route.ts +53 -0
  178. package/src/app/api/[locale]/system/help/list/definition.ts +372 -0
  179. package/src/app/api/[locale]/system/help/list/repository.ts +110 -0
  180. package/src/app/api/[locale]/system/help/list/route.ts +21 -0
  181. package/src/app/api/[locale]/system/help/repository.ts +212 -0
  182. package/src/app/api/[locale]/system/help/route.ts +16 -0
  183. package/src/app/api/[locale]/system/i18n/de/index.ts +68 -0
  184. package/src/app/api/[locale]/system/i18n/en/index.ts +65 -0
  185. package/src/app/api/[locale]/system/i18n/pl/index.ts +66 -0
  186. package/src/app/api/[locale]/system/release-tool/definition.ts +3104 -0
  187. package/src/app/api/[locale]/system/release-tool/i18n/de/index.ts +813 -0
  188. package/src/app/api/[locale]/system/release-tool/i18n/en/index.ts +797 -0
  189. package/src/app/api/[locale]/system/release-tool/i18n/pl/index.ts +810 -0
  190. package/src/app/api/[locale]/system/release-tool/repository/asset-zipper.ts +128 -0
  191. package/src/app/api/[locale]/system/release-tool/repository/changelog-generator.ts +212 -0
  192. package/src/app/api/[locale]/system/release-tool/repository/ci-detector.ts +566 -0
  193. package/src/app/api/[locale]/system/release-tool/repository/config.ts +113 -0
  194. package/src/app/api/[locale]/system/release-tool/repository/constants.ts +407 -0
  195. package/src/app/api/[locale]/system/release-tool/repository/dependency-manager.ts +527 -0
  196. package/src/app/api/[locale]/system/release-tool/repository/git-service.ts +403 -0
  197. package/src/app/api/[locale]/system/release-tool/repository/hook-runner.ts +100 -0
  198. package/src/app/api/[locale]/system/release-tool/repository/index.ts +1 -0
  199. package/src/app/api/[locale]/system/release-tool/repository/notification-service.ts +638 -0
  200. package/src/app/api/[locale]/system/release-tool/repository/package-service.ts +169 -0
  201. package/src/app/api/[locale]/system/release-tool/repository/publisher.ts +253 -0
  202. package/src/app/api/[locale]/system/release-tool/repository/quality-runner.ts +428 -0
  203. package/src/app/api/[locale]/system/release-tool/repository/release-creator.ts +293 -0
  204. package/src/app/api/[locale]/system/release-tool/repository/release-executor.ts +1198 -0
  205. package/src/app/api/[locale]/system/release-tool/repository/snyk-service.ts +136 -0
  206. package/src/app/api/[locale]/system/release-tool/repository/utils.ts +642 -0
  207. package/src/app/api/[locale]/system/release-tool/repository/validation.ts +288 -0
  208. package/src/app/api/[locale]/system/release-tool/repository/version-service.ts +297 -0
  209. package/src/app/api/[locale]/system/release-tool/route.ts +21 -0
  210. package/src/app/api/[locale]/system/unified-interface/README.md +328 -0
  211. package/src/app/api/[locale]/system/unified-interface/cli/README.md +349 -0
  212. package/src/app/api/[locale]/system/unified-interface/cli/auth/cli-handler.ts +95 -0
  213. package/src/app/api/[locale]/system/unified-interface/cli/auth/cli-user.ts +146 -0
  214. package/src/app/api/[locale]/system/unified-interface/cli/auth/session-file.ts +266 -0
  215. package/src/app/api/[locale]/system/unified-interface/cli/env.ts +26 -0
  216. package/src/app/api/[locale]/system/unified-interface/cli/i18n/de/index.ts +157 -0
  217. package/src/app/api/[locale]/system/unified-interface/cli/i18n/en/index.ts +155 -0
  218. package/src/app/api/[locale]/system/unified-interface/cli/i18n/pl/index.ts +158 -0
  219. package/src/app/api/[locale]/system/unified-interface/cli/runtime/debug.ts +595 -0
  220. package/src/app/api/[locale]/system/unified-interface/cli/runtime/entry-point.ts +129 -0
  221. package/src/app/api/[locale]/system/unified-interface/cli/runtime/environment.ts +155 -0
  222. package/src/app/api/[locale]/system/unified-interface/cli/runtime/execution-errors.ts +452 -0
  223. package/src/app/api/[locale]/system/unified-interface/cli/runtime/parsing.ts +297 -0
  224. package/src/app/api/[locale]/system/unified-interface/cli/runtime/route-executor.ts +859 -0
  225. package/src/app/api/[locale]/system/unified-interface/cli/setup/i18n/de/index.ts +12 -0
  226. package/src/app/api/[locale]/system/unified-interface/cli/setup/i18n/en/index.ts +11 -0
  227. package/src/app/api/[locale]/system/unified-interface/cli/setup/i18n/pl/index.ts +12 -0
  228. package/src/app/api/[locale]/system/unified-interface/cli/setup/install/definition.ts +262 -0
  229. package/src/app/api/[locale]/system/unified-interface/cli/setup/install/i18n/de/index.ts +54 -0
  230. package/src/app/api/[locale]/system/unified-interface/cli/setup/install/i18n/en/index.ts +52 -0
  231. package/src/app/api/[locale]/system/unified-interface/cli/setup/install/i18n/pl/index.ts +54 -0
  232. package/src/app/api/[locale]/system/unified-interface/cli/setup/install/repository.ts +421 -0
  233. package/src/app/api/[locale]/system/unified-interface/cli/setup/install/route.ts +25 -0
  234. package/src/app/api/[locale]/system/unified-interface/cli/setup/status/definition.ts +181 -0
  235. package/src/app/api/[locale]/system/unified-interface/cli/setup/status/i18n/de/index.ts +61 -0
  236. package/src/app/api/[locale]/system/unified-interface/cli/setup/status/i18n/en/index.ts +59 -0
  237. package/src/app/api/[locale]/system/unified-interface/cli/setup/status/i18n/pl/index.ts +61 -0
  238. package/src/app/api/[locale]/system/unified-interface/cli/setup/status/repository.ts +195 -0
  239. package/src/app/api/[locale]/system/unified-interface/cli/setup/status/route.ts +22 -0
  240. package/src/app/api/[locale]/system/unified-interface/cli/setup/uninstall/definition.ts +188 -0
  241. package/src/app/api/[locale]/system/unified-interface/cli/setup/uninstall/i18n/de/index.ts +54 -0
  242. package/src/app/api/[locale]/system/unified-interface/cli/setup/uninstall/i18n/en/index.ts +52 -0
  243. package/src/app/api/[locale]/system/unified-interface/cli/setup/uninstall/i18n/pl/index.ts +54 -0
  244. package/src/app/api/[locale]/system/unified-interface/cli/setup/uninstall/repository.ts +209 -0
  245. package/src/app/api/[locale]/system/unified-interface/cli/setup/uninstall/route.ts +24 -0
  246. package/src/app/api/[locale]/system/unified-interface/cli/setup/update/definition.ts +200 -0
  247. package/src/app/api/[locale]/system/unified-interface/cli/setup/update/i18n/de/index.ts +54 -0
  248. package/src/app/api/[locale]/system/unified-interface/cli/setup/update/i18n/en/index.ts +52 -0
  249. package/src/app/api/[locale]/system/unified-interface/cli/setup/update/i18n/pl/index.ts +54 -0
  250. package/src/app/api/[locale]/system/unified-interface/cli/setup/update/repository.ts +113 -0
  251. package/src/app/api/[locale]/system/unified-interface/cli/setup/update/route.ts +22 -0
  252. package/src/app/api/[locale]/system/unified-interface/cli/vibe-runtime.ts +304 -0
  253. package/src/app/api/[locale]/system/unified-interface/cli/widgets/core/base-renderer.ts +270 -0
  254. package/src/app/api/[locale]/system/unified-interface/cli/widgets/core/registry.ts +309 -0
  255. package/src/app/api/[locale]/system/unified-interface/cli/widgets/core/types.ts +126 -0
  256. package/src/app/api/[locale]/system/unified-interface/cli/widgets/i18n/de/index.ts +67 -0
  257. package/src/app/api/[locale]/system/unified-interface/cli/widgets/i18n/en/index.ts +65 -0
  258. package/src/app/api/[locale]/system/unified-interface/cli/widgets/i18n/pl/index.ts +67 -0
  259. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/accordion.ts +74 -0
  260. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/avatar.ts +39 -0
  261. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/badge.ts +54 -0
  262. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/code-output.ts +298 -0
  263. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/code-quality-files.ts +89 -0
  264. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/code-quality-list.ts +298 -0
  265. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/code-quality-summary.ts +96 -0
  266. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/container.ts +186 -0
  267. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/data-card.ts +65 -0
  268. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/data-cards.ts +570 -0
  269. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/data-list.ts +80 -0
  270. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/data-table.ts +385 -0
  271. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/editable-text.ts +99 -0
  272. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/empty-state.ts +55 -0
  273. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/errors.ts +67 -0
  274. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/grouped-list.ts +729 -0
  275. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/link-card.ts +87 -0
  276. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/link-list.ts +112 -0
  277. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/link.ts +59 -0
  278. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/loading.ts +50 -0
  279. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/markdown.ts +131 -0
  280. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/metric.ts +291 -0
  281. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/section.ts +120 -0
  282. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/stats-grid.ts +149 -0
  283. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/tabs.ts +61 -0
  284. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/text.ts +78 -0
  285. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/title.ts +42 -0
  286. package/src/app/api/[locale]/system/unified-interface/cli/widgets/renderers/response-renderer.ts +418 -0
  287. package/src/app/api/[locale]/system/unified-interface/cli/widgets/renderers/schema-handler.ts +534 -0
  288. package/src/app/api/[locale]/system/unified-interface/i18n/de/index.ts +42 -0
  289. package/src/app/api/[locale]/system/unified-interface/i18n/en/index.ts +40 -0
  290. package/src/app/api/[locale]/system/unified-interface/i18n/pl/index.ts +43 -0
  291. package/src/app/api/[locale]/system/unified-interface/mcp/README.md +114 -0
  292. package/src/app/api/[locale]/system/unified-interface/mcp/converter.ts +146 -0
  293. package/src/app/api/[locale]/system/unified-interface/mcp/i18n/de/index.ts +182 -0
  294. package/src/app/api/[locale]/system/unified-interface/mcp/i18n/en/index.ts +179 -0
  295. package/src/app/api/[locale]/system/unified-interface/mcp/i18n/pl/index.ts +181 -0
  296. package/src/app/api/[locale]/system/unified-interface/mcp/registry.ts +343 -0
  297. package/src/app/api/[locale]/system/unified-interface/mcp/serve/definition.ts +147 -0
  298. package/src/app/api/[locale]/system/unified-interface/mcp/serve/repository.ts +38 -0
  299. package/src/app/api/[locale]/system/unified-interface/mcp/serve/route.ts +14 -0
  300. package/src/app/api/[locale]/system/unified-interface/mcp/server/protocol-handler.ts +309 -0
  301. package/src/app/api/[locale]/system/unified-interface/mcp/server/server.ts +154 -0
  302. package/src/app/api/[locale]/system/unified-interface/mcp/server/stdio-transport.ts +193 -0
  303. package/src/app/api/[locale]/system/unified-interface/mcp/types.ts +246 -0
  304. package/src/app/api/[locale]/system/unified-interface/shared/endpoints/definition/create-form.ts +1510 -0
  305. package/src/app/api/[locale]/system/unified-interface/shared/endpoints/definition/create.ts +581 -0
  306. package/src/app/api/[locale]/system/unified-interface/shared/endpoints/definition/endpoint-to-metadata.ts +52 -0
  307. package/src/app/api/[locale]/system/unified-interface/shared/endpoints/definition/loader.ts +152 -0
  308. package/src/app/api/[locale]/system/unified-interface/shared/endpoints/definitions/registry.ts +265 -0
  309. package/src/app/api/[locale]/system/unified-interface/shared/endpoints/permissions/registry.ts +680 -0
  310. package/src/app/api/[locale]/system/unified-interface/shared/endpoints/route/executor.ts +220 -0
  311. package/src/app/api/[locale]/system/unified-interface/shared/endpoints/route/handler.ts +325 -0
  312. package/src/app/api/[locale]/system/unified-interface/shared/endpoints/route/multi.ts +184 -0
  313. package/src/app/api/[locale]/system/unified-interface/shared/endpoints/route/request-validator.ts +201 -0
  314. package/src/app/api/[locale]/system/unified-interface/shared/endpoints/route/single.ts +58 -0
  315. package/src/app/api/[locale]/system/unified-interface/shared/env/define-env-client.ts +49 -0
  316. package/src/app/api/[locale]/system/unified-interface/shared/env/define-env.ts +47 -0
  317. package/src/app/api/[locale]/system/unified-interface/shared/env/validation-logger.ts +58 -0
  318. package/src/app/api/[locale]/system/unified-interface/shared/field/enum.ts +110 -0
  319. package/src/app/api/[locale]/system/unified-interface/shared/field/specialized.ts +339 -0
  320. package/src/app/api/[locale]/system/unified-interface/shared/field/utils.test.ts +408 -0
  321. package/src/app/api/[locale]/system/unified-interface/shared/field/utils.ts +1349 -0
  322. package/src/app/api/[locale]/system/unified-interface/shared/field-config/endpoint-field-types.ts +107 -0
  323. package/src/app/api/[locale]/system/unified-interface/shared/field-config/field-config-types.ts +268 -0
  324. package/src/app/api/[locale]/system/unified-interface/shared/logger/colors.ts +114 -0
  325. package/src/app/api/[locale]/system/unified-interface/shared/logger/endpoint.ts +169 -0
  326. package/src/app/api/[locale]/system/unified-interface/shared/logger/file-logger.ts +88 -0
  327. package/src/app/api/[locale]/system/unified-interface/shared/logger/formatters.ts +177 -0
  328. package/src/app/api/[locale]/system/unified-interface/shared/server-only/auth/base-auth-handler.ts +82 -0
  329. package/src/app/api/[locale]/system/unified-interface/shared/server-only/auth/factory.ts +33 -0
  330. package/src/app/api/[locale]/system/unified-interface/shared/server-only/server-only.ts +4 -0
  331. package/src/app/api/[locale]/system/unified-interface/shared/types/actions.ts +289 -0
  332. package/src/app/api/[locale]/system/unified-interface/shared/types/endpoint.ts +1167 -0
  333. package/src/app/api/[locale]/system/unified-interface/shared/types/enums.ts +382 -0
  334. package/src/app/api/[locale]/system/unified-interface/shared/types/platform.ts +34 -0
  335. package/src/app/api/[locale]/system/unified-interface/shared/types/types.ts +80 -0
  336. package/src/app/api/[locale]/system/unified-interface/shared/types/ui-config.ts +76 -0
  337. package/src/app/api/[locale]/system/unified-interface/shared/utils/error-types.ts +27 -0
  338. package/src/app/api/[locale]/system/unified-interface/shared/utils/path.ts +63 -0
  339. package/src/app/api/[locale]/system/unified-interface/shared/utils/scanner.ts +241 -0
  340. package/src/app/api/[locale]/system/unified-interface/shared/widgets/actions.ts +256 -0
  341. package/src/app/api/[locale]/system/unified-interface/shared/widgets/configs.ts +1158 -0
  342. package/src/app/api/[locale]/system/unified-interface/shared/widgets/helpers.ts +80 -0
  343. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/accordion.ts +82 -0
  344. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/avatar.ts +75 -0
  345. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/badge.ts +89 -0
  346. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/code-output.ts +302 -0
  347. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/code-quality-list.ts +202 -0
  348. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/container.ts +129 -0
  349. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/data-card.ts +81 -0
  350. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/data-cards.ts +258 -0
  351. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/data-list.ts +123 -0
  352. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/data-table.ts +387 -0
  353. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/editable-text.ts +89 -0
  354. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/empty-state.ts +78 -0
  355. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/errors.ts +93 -0
  356. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/grouped-list.ts +448 -0
  357. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/index.ts +38 -0
  358. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/link-card.ts +130 -0
  359. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/link-list.ts +127 -0
  360. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/link.ts +68 -0
  361. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/loading.ts +81 -0
  362. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/markdown.ts +176 -0
  363. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/metric-card.ts +241 -0
  364. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/section.ts +90 -0
  365. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/stats-grid.ts +71 -0
  366. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/tabs.ts +80 -0
  367. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/text.ts +105 -0
  368. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/title.ts +72 -0
  369. package/src/app/api/[locale]/system/unified-interface/shared/widgets/types.ts +240 -0
  370. package/src/app/api/[locale]/system/unified-interface/shared/widgets/utils/field-helpers.ts +137 -0
  371. package/src/app/api/[locale]/system/unified-interface/shared/widgets/utils/formatting.ts +437 -0
  372. package/src/app/api/[locale]/system/unified-interface/shared/widgets/utils/url.ts +40 -0
  373. package/src/app/api/[locale]/system/unified-interface/shared/widgets/utils/widget-helpers.ts +465 -0
  374. package/src/app/api/[locale]/user/auth/enum.ts +16 -0
  375. package/src/app/api/[locale]/user/auth/i18n/de/index.ts +227 -0
  376. package/src/app/api/[locale]/user/auth/i18n/en/index.ts +205 -0
  377. package/src/app/api/[locale]/user/auth/i18n/pl/index.ts +219 -0
  378. package/src/app/api/[locale]/user/auth/types.ts +110 -0
  379. package/src/app/api/[locale]/user/enum.ts +64 -0
  380. package/src/app/api/[locale]/user/private/i18n/de/index.ts +3 -0
  381. package/src/app/api/[locale]/user/private/i18n/en/index.ts +1 -0
  382. package/src/app/api/[locale]/user/private/i18n/pl/index.ts +3 -0
  383. package/src/app/api/[locale]/user/types.ts +118 -0
  384. package/src/app/api/[locale]/user/user-roles/enum.ts +112 -0
  385. package/src/app/api/[locale]/user/user-roles/i18n/de/index.ts +85 -0
  386. package/src/app/api/[locale]/user/user-roles/i18n/en/index.ts +83 -0
  387. package/src/app/api/[locale]/user/user-roles/i18n/pl/index.ts +86 -0
  388. package/src/app/api/[locale]/user/user-roles/types.ts +34 -0
  389. package/src/app/api/i18n/de/index.ts +6 -0
  390. package/src/app/api/i18n/en/index.ts +5 -0
  391. package/src/app/api/i18n/pl/index.ts +5 -0
  392. package/src/app/i18n/de/index.ts +6 -0
  393. package/src/app/i18n/en/index.ts +5 -0
  394. package/src/app/i18n/pl/index.ts +5 -0
@@ -0,0 +1,298 @@
1
+ /**
2
+ * Code Quality List Widget Renderer
3
+ * Pure rendering implementation - ANSI codes, styling, layout only
4
+ * All business logic imported from shared
5
+ */
6
+
7
+ import { WidgetType } from "@/app/api/[locale]/system/unified-interface/shared/types/enums";
8
+ import {
9
+ type CodeQualityItem,
10
+ extractCodeQualityListData,
11
+ groupCodeQualityItems,
12
+ type ProcessedCodeQualityList,
13
+ sortBySeverity,
14
+ } from "@/app/api/[locale]/system/unified-interface/shared/widgets/logic/code-quality-list";
15
+ import {
16
+ formatFilePath,
17
+ formatLocation,
18
+ } from "@/app/api/[locale]/system/unified-interface/shared/widgets/utils/formatting";
19
+
20
+ import { BaseWidgetRenderer } from "../core/base-renderer";
21
+ import type { CLIWidgetProps, WidgetRenderContext } from "../core/types";
22
+
23
+ /**
24
+ * Configuration for code quality list widget
25
+ */
26
+ interface CodeQualityConfig {
27
+ groupBy: string;
28
+ sortBy: string;
29
+ maxItemsPerGroup: number;
30
+ }
31
+
32
+ export class CodeQualityListWidgetRenderer extends BaseWidgetRenderer<
33
+ typeof WidgetType.CODE_QUALITY_LIST
34
+ > {
35
+ readonly widgetType = WidgetType.CODE_QUALITY_LIST;
36
+
37
+ render(
38
+ props: CLIWidgetProps<typeof WidgetType.CODE_QUALITY_LIST, string>,
39
+ ): string {
40
+ const { field, value, context } = props;
41
+ const t = context.t;
42
+
43
+ // Extract data using shared logic
44
+ const data = extractCodeQualityListData(value);
45
+
46
+ // Handle null case
47
+ if (!data) {
48
+ const successMsg = this.styleText(
49
+ t("app.api.system.check.codeQuality.noIssues"),
50
+ "green",
51
+ context,
52
+ );
53
+ return `\n${successMsg}\n`;
54
+ }
55
+
56
+ // Render the items
57
+ const itemsOutput = this.renderCodeQualityList(data, context);
58
+ const result: string[] = [itemsOutput];
59
+
60
+ // Add truncation notice if data is truncated
61
+ if (
62
+ typeof value === "object" &&
63
+ value !== null &&
64
+ !Array.isArray(value) &&
65
+ "summary" in value &&
66
+ typeof value.summary === "object" &&
67
+ value.summary !== null
68
+ ) {
69
+ const summary = value.summary;
70
+ const totalIssues =
71
+ "totalIssues" in summary && typeof summary.totalIssues === "number"
72
+ ? summary.totalIssues
73
+ : 0;
74
+ const displayedIssues =
75
+ "displayedIssues" in summary &&
76
+ typeof summary.displayedIssues === "number"
77
+ ? summary.displayedIssues
78
+ : 0;
79
+ const totalFiles =
80
+ "totalFiles" in summary && typeof summary.totalFiles === "number"
81
+ ? summary.totalFiles
82
+ : 0;
83
+ const displayedFiles =
84
+ "displayedFiles" in summary &&
85
+ typeof summary.displayedFiles === "number"
86
+ ? summary.displayedFiles
87
+ : 0;
88
+ const totalErrors =
89
+ "totalErrors" in summary && typeof summary.totalErrors === "number"
90
+ ? summary.totalErrors
91
+ : 0;
92
+
93
+ const displayedErrors = data.items.filter(
94
+ (item) => item.severity === "error",
95
+ ).length;
96
+
97
+ if (displayedIssues < totalIssues || displayedFiles < totalFiles) {
98
+ const hiddenIssues = totalIssues - displayedIssues;
99
+ const hiddenFiles = totalFiles - displayedFiles;
100
+ const hiddenErrors = totalErrors - displayedErrors;
101
+
102
+ const infoIcon = context.options.useEmojis ? "ℹ️ " : "";
103
+ const truncationMsg = this.styleText(
104
+ `${infoIcon}+ ${hiddenIssues} more issue${hiddenIssues !== 1 ? "s" : ""} from ${hiddenFiles} more file${hiddenFiles !== 1 ? "s" : ""} (${hiddenErrors} error${hiddenErrors !== 1 ? "s" : ""})`,
105
+ "dim",
106
+ context,
107
+ );
108
+ result.push("");
109
+ result.push(truncationMsg);
110
+ }
111
+ }
112
+
113
+ // Recursively render children (like summary) if field has children
114
+ if (
115
+ field.type === "object" &&
116
+ field.children &&
117
+ typeof value === "object" &&
118
+ value !== null &&
119
+ !Array.isArray(value)
120
+ ) {
121
+ for (const [key, childValue] of Object.entries(value)) {
122
+ // Skip items array (already rendered)
123
+ if (key === "items") {
124
+ continue;
125
+ }
126
+
127
+ if (childValue !== undefined && childValue !== null) {
128
+ const childField = field.children[key];
129
+ if (childField) {
130
+ const rendered = context.renderWidget(
131
+ childField.ui.type,
132
+ childField,
133
+ childValue,
134
+ );
135
+ if (rendered) {
136
+ result.push("");
137
+ result.push(rendered);
138
+ }
139
+ }
140
+ }
141
+ }
142
+ }
143
+
144
+ return result.join("\n");
145
+ }
146
+
147
+ private renderCodeQualityList(
148
+ data: ProcessedCodeQualityList,
149
+ context: WidgetRenderContext,
150
+ ): string {
151
+ const config = this.getConfig();
152
+ let output = "";
153
+
154
+ // Group data by file using shared logic
155
+ const groups = groupCodeQualityItems(data.items, "file");
156
+
157
+ // Render each group
158
+ for (const [filePath, items] of groups) {
159
+ output += this.renderFileGroup(filePath, items, config, context);
160
+ output += "\n";
161
+ }
162
+
163
+ return output.trim();
164
+ }
165
+
166
+ private getConfig(): CodeQualityConfig {
167
+ return {
168
+ groupBy: "file",
169
+ sortBy: "severity",
170
+ maxItemsPerGroup: 100,
171
+ };
172
+ }
173
+
174
+ /**
175
+ * Render a single file group with its issues
176
+ */
177
+ private renderFileGroup(
178
+ filePath: string,
179
+ items: CodeQualityItem[],
180
+ config: CodeQualityConfig,
181
+ context: WidgetRenderContext,
182
+ ): string {
183
+ let output = "";
184
+
185
+ // File header with file icon
186
+ const displayPath = formatFilePath(filePath);
187
+ const countText = `(${items.length} item${items.length !== 1 ? "s" : ""})`;
188
+
189
+ const fileIcon = context.options.useEmojis ? "● " : "";
190
+ const pathText = this.styleText(displayPath, "underline", context);
191
+ const countTextStyled = this.styleText(countText, "dim", context);
192
+
193
+ output += `${fileIcon}${pathText} ${countTextStyled}\n`;
194
+
195
+ // Sort items by severity (errors first, then warnings, then info) using shared logic
196
+ const sortedItems = sortBySeverity(items);
197
+
198
+ // Render each issue
199
+ for (const item of sortedItems.slice(0, config.maxItemsPerGroup)) {
200
+ output += this.renderIssue(item, context);
201
+ output += "\n";
202
+ }
203
+
204
+ // Show truncation if needed
205
+ if (items.length > config.maxItemsPerGroup) {
206
+ const remaining = items.length - config.maxItemsPerGroup;
207
+ const truncationMsg = this.styleText(
208
+ ` ... and ${remaining} more issue${remaining !== 1 ? "s" : ""}`,
209
+ "dim",
210
+ context,
211
+ );
212
+ output += `${truncationMsg}\n`;
213
+ }
214
+
215
+ return output;
216
+ }
217
+
218
+ /**
219
+ * Render a single code quality issue
220
+ */
221
+ private renderIssue(
222
+ item: CodeQualityItem,
223
+ context: WidgetRenderContext,
224
+ ): string {
225
+ const parts: string[] = [];
226
+
227
+ // OSC 8 Approach 2: vscode://file/ protocol with absolute path
228
+ if (item.line !== undefined || item.column !== undefined) {
229
+ // Convert to absolute path
230
+ const absolutePath = item.file.startsWith("/")
231
+ ? item.file
232
+ : `${process.cwd()}/${item.file}`;
233
+
234
+ // Build URL with vscode://file/ protocol and line/column
235
+ let vscodeUrl = `vscode://file${absolutePath}:${item.line || 1}:${item.column || 1}`;
236
+
237
+ // Display text (just line:column without padding)
238
+ const location = formatLocation(item.line, item.column);
239
+ const styledLocation = this.styleText(location, "blue", context);
240
+
241
+ // OSC 8 hyperlink: \x1b]8;;URL\x1b\\TEXT\x1b]8;;\x1b\\
242
+ const hyperlink = `\x1b]8;;${vscodeUrl}\x1b\\${styledLocation}\x1b]8;;\x1b\\`;
243
+
244
+ // Add padding after the hyperlink to maintain alignment
245
+ const paddingNeeded = Math.max(0, 8 - location.length);
246
+ parts.push(hyperlink + " ".repeat(paddingNeeded));
247
+ } else {
248
+ parts.push(" "); // 8 spaces padding
249
+ }
250
+
251
+ // Severity with ASCII icon and color
252
+ const severity = this.formatSeverity(item.severity, context);
253
+ parts.push(severity.padEnd(12)); // Padding for alignment
254
+
255
+ // Message
256
+ if (item.message) {
257
+ parts.push(item.message);
258
+ }
259
+
260
+ // Rule name in dim if available
261
+ if (item.rule && item.rule !== "unknown") {
262
+ const ruleText = this.styleText(`[${item.rule}]`, "dim", context);
263
+ parts.push(ruleText);
264
+ }
265
+
266
+ return ` ${parts.join(" ")}`;
267
+ }
268
+
269
+ /**
270
+ * Format severity with icon and color (ANSI styling only)
271
+ */
272
+ private formatSeverity(
273
+ severity: "error" | "warning" | "info",
274
+ context: WidgetRenderContext,
275
+ ): string {
276
+ const icons = context.options.useEmojis;
277
+
278
+ switch (severity) {
279
+ case "error": {
280
+ const errorIcon = icons ? "❌ " : "✗ ";
281
+ const errorText = this.styleText("error", "red", context);
282
+ return `${errorIcon}${errorText}`;
283
+ }
284
+ case "warning": {
285
+ const warnIcon = icons ? "⚠️ " : "! ";
286
+ const warnText = this.styleText("warn", "yellow", context);
287
+ return `${warnIcon}${warnText}`;
288
+ }
289
+ case "info": {
290
+ const infoIcon = icons ? "ℹ️ " : "i ";
291
+ const infoText = this.styleText("info", "blue", context);
292
+ return `${infoIcon}${infoText}`;
293
+ }
294
+ default:
295
+ return severity;
296
+ }
297
+ }
298
+ }
@@ -0,0 +1,96 @@
1
+ /**
2
+ * Code Quality Summary Widget Renderer
3
+ * Renders summary statistics for code quality checks
4
+ */
5
+
6
+ import { WidgetType } from "@/app/api/[locale]/system/unified-interface/shared/types/enums";
7
+
8
+ import { BaseWidgetRenderer } from "../core/base-renderer";
9
+ import type { CLIWidgetProps } from "../core/types";
10
+
11
+ export class CodeQualitySummaryWidgetRenderer extends BaseWidgetRenderer<
12
+ typeof WidgetType.CODE_QUALITY_SUMMARY
13
+ > {
14
+ readonly widgetType = WidgetType.CODE_QUALITY_SUMMARY;
15
+
16
+ render(
17
+ props: CLIWidgetProps<typeof WidgetType.CODE_QUALITY_SUMMARY, string>,
18
+ ): string {
19
+ const { value, context } = props;
20
+
21
+ if (typeof value !== "object" || value === null || Array.isArray(value)) {
22
+ return "";
23
+ }
24
+
25
+ const result: string[] = [];
26
+
27
+ // Header
28
+ const headerIcon = context.options.useEmojis ? "📊 " : "";
29
+ const headerText = this.styleText(`${headerIcon}Summary`, "bold", context);
30
+ result.push(headerText);
31
+
32
+ // Separator
33
+ const separator = "─".repeat(50);
34
+ result.push(this.styleText(separator, "dim", context));
35
+
36
+ // Extract values
37
+ const totalFiles =
38
+ "totalFiles" in value && typeof value.totalFiles === "number"
39
+ ? value.totalFiles
40
+ : 0;
41
+ const displayedFiles =
42
+ "displayedFiles" in value && typeof value.displayedFiles === "number"
43
+ ? value.displayedFiles
44
+ : 0;
45
+ const totalIssues =
46
+ "totalIssues" in value && typeof value.totalIssues === "number"
47
+ ? value.totalIssues
48
+ : 0;
49
+ const displayedIssues =
50
+ "displayedIssues" in value && typeof value.displayedIssues === "number"
51
+ ? value.displayedIssues
52
+ : 0;
53
+ const totalErrors =
54
+ "totalErrors" in value && typeof value.totalErrors === "number"
55
+ ? value.totalErrors
56
+ : 0;
57
+
58
+ const isTruncated =
59
+ displayedIssues < totalIssues || displayedFiles < totalFiles;
60
+
61
+ // Files stat
62
+ if (isTruncated) {
63
+ result.push(
64
+ ` ${this.styleText("Files:", "dim", context).padEnd(12)} ${displayedFiles} of ${totalFiles}`,
65
+ );
66
+ } else {
67
+ result.push(
68
+ ` ${this.styleText("Files:", "dim", context).padEnd(12)} ${totalFiles}`,
69
+ );
70
+ }
71
+
72
+ // Issues stat
73
+ if (isTruncated) {
74
+ result.push(
75
+ ` ${this.styleText("Issues:", "dim", context).padEnd(12)} ${displayedIssues} of ${totalIssues}`,
76
+ );
77
+ } else {
78
+ result.push(
79
+ ` ${this.styleText("Issues:", "dim", context).padEnd(12)} ${totalIssues}`,
80
+ );
81
+ }
82
+
83
+ // Errors
84
+ if (totalErrors > 0) {
85
+ const errorIcon = context.options.useEmojis ? "❌ " : "";
86
+ const errorText = this.styleText(
87
+ `${totalErrors} error${totalErrors !== 1 ? "s" : ""}`,
88
+ "red",
89
+ context,
90
+ );
91
+ result.push(` ${errorIcon}${errorText}`);
92
+ }
93
+
94
+ return result.join("\n");
95
+ }
96
+ }
@@ -0,0 +1,186 @@
1
+ /**
2
+ * Container Widget Renderer
3
+ * Pure rendering implementation - ANSI codes, styling, layout only
4
+ * All business logic imported from shared
5
+ */
6
+
7
+ import type { UnifiedField } from "@/app/api/[locale]/system/unified-interface/shared/types/endpoint";
8
+ import { WidgetType } from "@/app/api/[locale]/system/unified-interface/shared/types/enums";
9
+ import {
10
+ type ContainerConfig,
11
+ extractContainerData,
12
+ getContainerConfig,
13
+ } from "@/app/api/[locale]/system/unified-interface/shared/widgets/logic/container";
14
+ import type { WidgetData } from "@/app/api/[locale]/system/unified-interface/shared/widgets/types";
15
+ import { getTranslator } from "@/app/api/[locale]/system/unified-interface/shared/widgets/utils/field-helpers";
16
+ import { formatCamelCaseLabel } from "@/app/api/[locale]/system/unified-interface/shared/widgets/utils/formatting";
17
+
18
+ import { BaseWidgetRenderer } from "../core/base-renderer";
19
+ import type { CLIWidgetProps, WidgetRenderContext } from "../core/types";
20
+
21
+ export class ContainerWidgetRenderer extends BaseWidgetRenderer<
22
+ typeof WidgetType.CONTAINER
23
+ > {
24
+ readonly widgetType = WidgetType.CONTAINER;
25
+
26
+ render(props: CLIWidgetProps<typeof WidgetType.CONTAINER, string>): string {
27
+ const { field, value, context } = props;
28
+
29
+ // For container, we expect object values with children or named fields
30
+ if (typeof value === "object" && value !== null && !Array.isArray(value)) {
31
+ return this.renderContainerObject(value, field, context);
32
+ }
33
+
34
+ // Extract data using shared logic for array values
35
+ const data = extractContainerData(value);
36
+
37
+ // Handle null case
38
+ if (!data) {
39
+ const label = this.formatLabel(field, context);
40
+ return `${label}: —`;
41
+ }
42
+
43
+ const label = this.formatLabel(field, context);
44
+ const valueStr =
45
+ typeof value === "object" ? JSON.stringify(value) : String(value);
46
+ return `${label}: ${valueStr}`;
47
+ }
48
+
49
+ private renderContainerObject<const TKey extends string>(
50
+ value: { [key: string]: WidgetData },
51
+ field: UnifiedField<TKey>,
52
+ context: WidgetRenderContext,
53
+ ): string {
54
+ // Use shared config extraction
55
+ const config = getContainerConfig(field);
56
+ const result: string[] = [];
57
+ const { t } = getTranslator(context);
58
+
59
+ if ("label" in field.ui && field.ui.label) {
60
+ const title = t(field.ui.label);
61
+ const defaultIcon = context.options.useEmojis ? "📊 " : "";
62
+ const titleIcon = config.icon || defaultIcon;
63
+ const titleWithIcon = titleIcon + title;
64
+ const styledTitle = this.styleText(titleWithIcon, "bold", context);
65
+ result.push(styledTitle);
66
+ }
67
+
68
+ if ("description" in field.ui && field.ui.description) {
69
+ const description = t(field.ui.description);
70
+ result.push(` ${description}`);
71
+ result.push("");
72
+ }
73
+
74
+ const fieldsOutput = this.renderFields(value, config, context, field);
75
+ result.push(fieldsOutput);
76
+
77
+ return result.join("\n");
78
+ }
79
+
80
+ private renderFields<const TKey extends string>(
81
+ data: { [key: string]: WidgetData },
82
+ config: ContainerConfig,
83
+ context: WidgetRenderContext,
84
+ field?: UnifiedField<TKey>,
85
+ ): string {
86
+ const result: string[] = [];
87
+ const layout = config.layout || { type: "vertical" as const, columns: 1 };
88
+
89
+ if (layout.type === "grid" && layout.columns && layout.columns > 1) {
90
+ return this.renderGridLayout(data, layout.columns, context, field);
91
+ }
92
+
93
+ for (const [key, value] of Object.entries(data)) {
94
+ if (value === undefined || value === null) {
95
+ continue;
96
+ }
97
+
98
+ if (field?.type === "object" && field.children?.[key]) {
99
+ const childField = field.children[key];
100
+ const rendered = context.renderWidget(
101
+ childField.ui.type,
102
+ childField,
103
+ value,
104
+ );
105
+ if (rendered) {
106
+ result.push(rendered);
107
+ }
108
+ } else {
109
+ const formattedValue = this.formatContainerValue(key, value, context);
110
+ result.push(formattedValue);
111
+ }
112
+ }
113
+
114
+ return result.join("\n");
115
+ }
116
+
117
+ private renderGridLayout<const TKey extends string>(
118
+ data: { [key: string]: WidgetData },
119
+ columns: number,
120
+ context: WidgetRenderContext,
121
+ field?: UnifiedField<TKey>,
122
+ ): string {
123
+ const entries = Object.entries(data);
124
+ const result: string[] = [];
125
+
126
+ for (let i = 0; i < entries.length; i += columns) {
127
+ const chunk = entries.slice(i, i + columns);
128
+ const row = chunk
129
+ .map(([key, value]) => {
130
+ if (field?.type === "object" && field.children?.[key]) {
131
+ const childField = field.children[key];
132
+ return context.renderWidget(childField.ui.type, childField, value);
133
+ }
134
+ return this.formatContainerValue(key, value, context);
135
+ })
136
+ .join(" ");
137
+ result.push(row);
138
+ }
139
+
140
+ return result.join("\n");
141
+ }
142
+
143
+ /**
144
+ * Format a single container value (like a metric card) - RENDERING ONLY
145
+ */
146
+ private formatContainerValue(
147
+ key: string,
148
+ value: WidgetData,
149
+ context: WidgetRenderContext,
150
+ ): string {
151
+ // Handle primitive values
152
+ if (
153
+ typeof value === "string" ||
154
+ typeof value === "number" ||
155
+ typeof value === "boolean"
156
+ ) {
157
+ const icon = this.getMetricIcon(context);
158
+ // Use shared formatting utility
159
+ const label = formatCamelCaseLabel(key);
160
+ const formattedValue =
161
+ typeof value === "number" && Number.isInteger(value)
162
+ ? value.toString()
163
+ : typeof value === "number"
164
+ ? value.toFixed(2)
165
+ : String(value);
166
+ return `${icon}${label}: ${formattedValue}`;
167
+ }
168
+
169
+ // Handle complex values
170
+ const label = formatCamelCaseLabel(key);
171
+ return `${label}: ${JSON.stringify(value)}`;
172
+ }
173
+
174
+ /**
175
+ * Get icon for metric based on configuration (RENDERING ONLY)
176
+ */
177
+ private getMetricIcon(context: WidgetRenderContext): string {
178
+ if (!context.options.useEmojis) {
179
+ return "";
180
+ }
181
+
182
+ // Default icon for metrics
183
+ // eslint-disable-next-line i18next/no-literal-string
184
+ return "📊 ";
185
+ }
186
+ }
@@ -0,0 +1,65 @@
1
+ /**
2
+ * Data Card Widget Renderer
3
+ * Handles DATA_CARD widget type for CLI display
4
+ */
5
+
6
+ import { WidgetType } from "@/app/api/[locale]/system/unified-interface/shared/types/enums";
7
+ import { extractDataCardData } from "@/app/api/[locale]/system/unified-interface/shared/widgets/logic/data-card";
8
+
9
+ import { BaseWidgetRenderer } from "../core/base-renderer";
10
+ import type { CLIWidgetProps } from "../core/types";
11
+
12
+ export class DataCardWidgetRenderer extends BaseWidgetRenderer<
13
+ typeof WidgetType.DATA_CARD
14
+ > {
15
+ readonly widgetType = WidgetType.DATA_CARD;
16
+
17
+ render(props: CLIWidgetProps<typeof WidgetType.DATA_CARD, string>): string {
18
+ const { value, context } = props;
19
+ const indent = this.createIndent(context.depth, context);
20
+
21
+ // Extract data using shared logic
22
+ const data = extractDataCardData(value);
23
+
24
+ // Handle null case
25
+ if (!data) {
26
+ return `${indent}—`;
27
+ }
28
+
29
+ const lines: string[] = [];
30
+
31
+ // Title
32
+ const title = this.styleText(data.title, "bold", context);
33
+ lines.push(`${indent}${title}`);
34
+
35
+ // Description
36
+ if (data.description) {
37
+ const desc = this.styleText(data.description, "dim", context);
38
+ lines.push(`${indent}${desc}`);
39
+ }
40
+
41
+ // Separator
42
+ if (data.fields.length > 0) {
43
+ lines.push(`${indent}${this.createSeparator(40)}`);
44
+ }
45
+
46
+ // Fields
47
+ for (const field of data.fields) {
48
+ const label = this.styleText(`${field.label}:`, "bold", context);
49
+ const fieldValue =
50
+ field.value !== null && field.value !== undefined
51
+ ? String(field.value)
52
+ : "—";
53
+ lines.push(`${indent} ${label} ${fieldValue}`);
54
+ }
55
+
56
+ // Actions
57
+ if (data.actions && data.actions.length > 0) {
58
+ lines.push("");
59
+ const actionsText = data.actions.map((a) => a.label).join(" | ");
60
+ lines.push(`${indent} ${this.styleText(actionsText, "blue", context)}`);
61
+ }
62
+
63
+ return lines.join("\n");
64
+ }
65
+ }