@next-vibe/checker 1.0.52 → 3.0.1

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 (430) hide show
  1. package/LICENSE +669 -5
  2. package/README.md +179 -200
  3. package/check.config.ts +85 -16
  4. package/generated/alias-map.ts +30 -0
  5. package/generated/endpoint.ts +75 -0
  6. package/{src/app/api/[locale]/system/check/oxlint/plugins/i18n/src/index.ts → oxlint-plugins/i18n.ts} +45 -9
  7. package/{src/app/api/[locale]/system/check/oxlint/plugins/jsx-capitalization/src/index.ts → oxlint-plugins/jsx-capitalization.ts} +84 -17
  8. package/{src/app/api/[locale]/system/check/oxlint/plugins/restricted-syntax/src/index.ts → oxlint-plugins/restricted-syntax.ts} +40 -14
  9. package/package.json +27 -131
  10. package/.dist/LICENSE +0 -674
  11. package/.dist/README.md +0 -257
  12. package/.dist/bin/vibe-runtime.js +0 -58166
  13. package/.dist/bin/vibe-runtime.js.map +0 -451
  14. package/.dist/oxlint-plugins/i18n.js +0 -381
  15. package/.dist/oxlint-plugins/jsx-capitalization.js +0 -436
  16. package/.dist/oxlint-plugins/restricted-syntax.js +0 -409
  17. package/src/app/api/[locale]/LICENSE +0 -674
  18. package/src/app/api/[locale]/i18n/de/index.ts +0 -15
  19. package/src/app/api/[locale]/i18n/en/index.ts +0 -14
  20. package/src/app/api/[locale]/i18n/pl/index.ts +0 -13
  21. package/src/app/api/[locale]/shared/i18n/de/index.ts +0 -85
  22. package/src/app/api/[locale]/shared/i18n/en/index.ts +0 -83
  23. package/src/app/api/[locale]/shared/i18n/pl/index.ts +0 -85
  24. package/src/app/api/[locale]/shared/stats-filtering.ts +0 -174
  25. package/src/app/api/[locale]/shared/types/common.schema.ts +0 -55
  26. package/src/app/api/[locale]/shared/types/response.schema.ts +0 -411
  27. package/src/app/api/[locale]/shared/types/stats-filtering.schema.ts +0 -315
  28. package/src/app/api/[locale]/shared/types/utils.ts +0 -187
  29. package/src/app/api/[locale]/shared/utils/base64.ts +0 -46
  30. package/src/app/api/[locale]/shared/utils/env-util.ts +0 -36
  31. package/src/app/api/[locale]/shared/utils/i18n/de/index.ts +0 -21
  32. package/src/app/api/[locale]/shared/utils/i18n/en/index.ts +0 -19
  33. package/src/app/api/[locale]/shared/utils/i18n/pl/index.ts +0 -21
  34. package/src/app/api/[locale]/shared/utils/index.ts +0 -11
  35. package/src/app/api/[locale]/shared/utils/object-path.ts +0 -41
  36. package/src/app/api/[locale]/shared/utils/object.test.ts +0 -82
  37. package/src/app/api/[locale]/shared/utils/object.ts +0 -73
  38. package/src/app/api/[locale]/shared/utils/parse-error.ts +0 -134
  39. package/src/app/api/[locale]/shared/utils/parse-json.ts +0 -62
  40. package/src/app/api/[locale]/shared/utils/time.ts +0 -46
  41. package/src/app/api/[locale]/shared/utils/validation.ts +0 -117
  42. package/src/app/api/[locale]/shared/utils/zod-required-fields.ts +0 -115
  43. package/src/app/api/[locale]/system/builder/definition.ts +0 -1750
  44. package/src/app/api/[locale]/system/builder/enum.ts +0 -78
  45. package/src/app/api/[locale]/system/builder/i18n/de/index.ts +0 -645
  46. package/src/app/api/[locale]/system/builder/i18n/en/index.ts +0 -653
  47. package/src/app/api/[locale]/system/builder/i18n/pl/index.ts +0 -643
  48. package/src/app/api/[locale]/system/builder/repository/build-executor.test.ts +0 -178
  49. package/src/app/api/[locale]/system/builder/repository/build-executor.ts +0 -538
  50. package/src/app/api/[locale]/system/builder/repository/bun-compiler.ts +0 -250
  51. package/src/app/api/[locale]/system/builder/repository/bundle-analyzer.ts +0 -170
  52. package/src/app/api/[locale]/system/builder/repository/config-loader.ts +0 -146
  53. package/src/app/api/[locale]/system/builder/repository/config-validator.ts +0 -97
  54. package/src/app/api/[locale]/system/builder/repository/constants.ts +0 -125
  55. package/src/app/api/[locale]/system/builder/repository/error-suggester.ts +0 -67
  56. package/src/app/api/[locale]/system/builder/repository/file-copier.ts +0 -90
  57. package/src/app/api/[locale]/system/builder/repository/folder-cleaner.ts +0 -75
  58. package/src/app/api/[locale]/system/builder/repository/index.ts +0 -2
  59. package/src/app/api/[locale]/system/builder/repository/npm-package-generator.ts +0 -143
  60. package/src/app/api/[locale]/system/builder/repository/output-formatter.ts +0 -104
  61. package/src/app/api/[locale]/system/builder/repository/profile-service.ts +0 -79
  62. package/src/app/api/[locale]/system/builder/repository/report-generator.ts +0 -109
  63. package/src/app/api/[locale]/system/builder/repository/vite-compiler.ts +0 -277
  64. package/src/app/api/[locale]/system/builder/route.ts +0 -21
  65. package/src/app/api/[locale]/system/builder/test-files/file1.ts +0 -2
  66. package/src/app/api/[locale]/system/builder/test-files/file2.tsx +0 -10
  67. package/src/app/api/[locale]/system/builder/test-files/file3.tsx +0 -16
  68. package/src/app/api/[locale]/system/builder/test-files/folderToCopy/fileInFolder.ts +0 -2
  69. package/src/app/api/[locale]/system/builder/test-files/test-config.ts +0 -38
  70. package/src/app/api/[locale]/system/builder/test-files/test-delete-config.ts +0 -8
  71. package/src/app/api/[locale]/system/builder/test-files/test-project/package.json +0 -24
  72. package/src/app/api/[locale]/system/builder/test-files/test-project/src/constants.ts +0 -6
  73. package/src/app/api/[locale]/system/builder/test-files/test-project/src/greet.ts +0 -18
  74. package/src/app/api/[locale]/system/builder/test-files/test-project/src/index.ts +0 -7
  75. package/src/app/api/[locale]/system/builder/test-files/test-project/src/utils/calculate.ts +0 -27
  76. package/src/app/api/[locale]/system/builder/test-files/test-project/tsconfig.json +0 -19
  77. package/src/app/api/[locale]/system/builder/test-files/test-project/tsconfig.tsbuildinfo +0 -1
  78. package/src/app/api/[locale]/system/builder/test-files/test3.css +0 -1
  79. package/src/app/api/[locale]/system/check/config/create/definition.ts +0 -266
  80. package/src/app/api/[locale]/system/check/config/create/i18n/de/index.ts +0 -151
  81. package/src/app/api/[locale]/system/check/config/create/i18n/en/index.ts +0 -146
  82. package/src/app/api/[locale]/system/check/config/create/i18n/pl/index.ts +0 -148
  83. package/src/app/api/[locale]/system/check/config/create/repository.ts +0 -269
  84. package/src/app/api/[locale]/system/check/config/create/route.ts +0 -21
  85. package/src/app/api/[locale]/system/check/config/repository.ts +0 -846
  86. package/src/app/api/[locale]/system/check/config/shared.ts +0 -364
  87. package/src/app/api/[locale]/system/check/config/types.ts +0 -610
  88. package/src/app/api/[locale]/system/check/config/utils.ts +0 -155
  89. package/src/app/api/[locale]/system/check/i18n/de/index.ts +0 -19
  90. package/src/app/api/[locale]/system/check/i18n/en/index.ts +0 -18
  91. package/src/app/api/[locale]/system/check/i18n/pl/index.ts +0 -19
  92. package/src/app/api/[locale]/system/check/lint/definition.ts +0 -383
  93. package/src/app/api/[locale]/system/check/lint/enum.ts +0 -34
  94. package/src/app/api/[locale]/system/check/lint/i18n/de/index.ts +0 -160
  95. package/src/app/api/[locale]/system/check/lint/i18n/en/index.ts +0 -158
  96. package/src/app/api/[locale]/system/check/lint/i18n/pl/index.ts +0 -160
  97. package/src/app/api/[locale]/system/check/lint/repository.ts +0 -844
  98. package/src/app/api/[locale]/system/check/lint/route.ts +0 -21
  99. package/src/app/api/[locale]/system/check/oxlint/README.md +0 -190
  100. package/src/app/api/[locale]/system/check/oxlint/definition.ts +0 -375
  101. package/src/app/api/[locale]/system/check/oxlint/enum.ts +0 -34
  102. package/src/app/api/[locale]/system/check/oxlint/i18n/de/index.ts +0 -166
  103. package/src/app/api/[locale]/system/check/oxlint/i18n/en/index.ts +0 -164
  104. package/src/app/api/[locale]/system/check/oxlint/i18n/pl/index.ts +0 -166
  105. package/src/app/api/[locale]/system/check/oxlint/plugins/jsx-capitalization/README.md +0 -269
  106. package/src/app/api/[locale]/system/check/oxlint/plugins/restricted-syntax/test.tsx +0 -74
  107. package/src/app/api/[locale]/system/check/oxlint/plugins/shared/config-loader.ts +0 -283
  108. package/src/app/api/[locale]/system/check/oxlint/repository.ts +0 -553
  109. package/src/app/api/[locale]/system/check/oxlint/route.ts +0 -21
  110. package/src/app/api/[locale]/system/check/oxlint/types.ts +0 -191
  111. package/src/app/api/[locale]/system/check/test-project/.vscode/settings.json +0 -48
  112. package/src/app/api/[locale]/system/check/test-project/bun.lock +0 -640
  113. package/src/app/api/[locale]/system/check/test-project/check.config.ts +0 -955
  114. package/src/app/api/[locale]/system/check/test-project/package.json +0 -17
  115. package/src/app/api/[locale]/system/check/test-project/src/constants.ts +0 -6
  116. package/src/app/api/[locale]/system/check/test-project/src/greet.ts +0 -18
  117. package/src/app/api/[locale]/system/check/test-project/src/test-issues/a11y-issues.tsx +0 -107
  118. package/src/app/api/[locale]/system/check/test-project/src/test-issues/eslint-issues.tsx +0 -37
  119. package/src/app/api/[locale]/system/check/test-project/src/test-issues/general-issues.ts +0 -135
  120. package/src/app/api/[locale]/system/check/test-project/src/test-issues/i18n-issues.tsx +0 -113
  121. package/src/app/api/[locale]/system/check/test-project/src/test-issues/jsx-capitalization-issues.tsx +0 -127
  122. package/src/app/api/[locale]/system/check/test-project/src/test-issues/nextjs-issues.tsx +0 -92
  123. package/src/app/api/[locale]/system/check/test-project/src/test-issues/promise-issues.ts +0 -73
  124. package/src/app/api/[locale]/system/check/test-project/src/test-issues/react-issues.tsx +0 -95
  125. package/src/app/api/[locale]/system/check/test-project/src/test-issues/restricted-syntax-issues.tsx +0 -61
  126. package/src/app/api/[locale]/system/check/test-project/src/test-issues/typescript-issues.ts +0 -78
  127. package/src/app/api/[locale]/system/check/test-project/src/utils/calculate.ts +0 -27
  128. package/src/app/api/[locale]/system/check/test-project/tsconfig.json +0 -22
  129. package/src/app/api/[locale]/system/check/test-project/tsconfig.tsbuildinfo +0 -1
  130. package/src/app/api/[locale]/system/check/typecheck/definition.ts +0 -328
  131. package/src/app/api/[locale]/system/check/typecheck/enum.ts +0 -34
  132. package/src/app/api/[locale]/system/check/typecheck/i18n/de/index.ts +0 -148
  133. package/src/app/api/[locale]/system/check/typecheck/i18n/en/index.ts +0 -145
  134. package/src/app/api/[locale]/system/check/typecheck/i18n/pl/index.ts +0 -148
  135. package/src/app/api/[locale]/system/check/typecheck/repository.ts +0 -863
  136. package/src/app/api/[locale]/system/check/typecheck/route.ts +0 -21
  137. package/src/app/api/[locale]/system/check/typecheck/utils.ts +0 -160
  138. package/src/app/api/[locale]/system/check/vibe-check/definition.ts +0 -448
  139. package/src/app/api/[locale]/system/check/vibe-check/enum.ts +0 -63
  140. package/src/app/api/[locale]/system/check/vibe-check/i18n/de/index.ts +0 -164
  141. package/src/app/api/[locale]/system/check/vibe-check/i18n/en/index.ts +0 -161
  142. package/src/app/api/[locale]/system/check/vibe-check/i18n/pl/index.ts +0 -163
  143. package/src/app/api/[locale]/system/check/vibe-check/repository.ts +0 -516
  144. package/src/app/api/[locale]/system/check/vibe-check/route.test.ts +0 -1010
  145. package/src/app/api/[locale]/system/check/vibe-check/route.ts +0 -21
  146. package/src/app/api/[locale]/system/generated/endpoint.ts +0 -274
  147. package/src/app/api/[locale]/system/generated/endpoints.ts +0 -138
  148. package/src/app/api/[locale]/system/generated/route-handlers.ts +0 -213
  149. package/src/app/api/[locale]/system/generators/endpoint/definition.ts +0 -167
  150. package/src/app/api/[locale]/system/generators/endpoint/i18n/de/index.ts +0 -48
  151. package/src/app/api/[locale]/system/generators/endpoint/i18n/en/index.ts +0 -48
  152. package/src/app/api/[locale]/system/generators/endpoint/i18n/pl/index.ts +0 -50
  153. package/src/app/api/[locale]/system/generators/endpoint/repository.ts +0 -286
  154. package/src/app/api/[locale]/system/generators/endpoint/route.ts +0 -18
  155. package/src/app/api/[locale]/system/generators/endpoints/definition.ts +0 -246
  156. package/src/app/api/[locale]/system/generators/endpoints/i18n/de/index.ts +0 -54
  157. package/src/app/api/[locale]/system/generators/endpoints/i18n/en/index.ts +0 -52
  158. package/src/app/api/[locale]/system/generators/endpoints/i18n/pl/index.ts +0 -54
  159. package/src/app/api/[locale]/system/generators/endpoints/options-repository.ts +0 -425
  160. package/src/app/api/[locale]/system/generators/endpoints/repository.ts +0 -368
  161. package/src/app/api/[locale]/system/generators/endpoints/route.ts +0 -17
  162. package/src/app/api/[locale]/system/generators/endpoints-index/definition.ts +0 -166
  163. package/src/app/api/[locale]/system/generators/endpoints-index/i18n/de/index.ts +0 -71
  164. package/src/app/api/[locale]/system/generators/endpoints-index/i18n/en/index.ts +0 -69
  165. package/src/app/api/[locale]/system/generators/endpoints-index/i18n/pl/index.ts +0 -71
  166. package/src/app/api/[locale]/system/generators/endpoints-index/repository.ts +0 -279
  167. package/src/app/api/[locale]/system/generators/endpoints-index/route.ts +0 -18
  168. package/src/app/api/[locale]/system/generators/generate-all/definition.ts +0 -327
  169. package/src/app/api/[locale]/system/generators/generate-all/i18n/de/index.ts +0 -96
  170. package/src/app/api/[locale]/system/generators/generate-all/i18n/en/index.ts +0 -94
  171. package/src/app/api/[locale]/system/generators/generate-all/i18n/pl/index.ts +0 -96
  172. package/src/app/api/[locale]/system/generators/generate-all/repository.ts +0 -240
  173. package/src/app/api/[locale]/system/generators/generate-all/route.ts +0 -19
  174. package/src/app/api/[locale]/system/generators/i18n/de/index.ts +0 -15
  175. package/src/app/api/[locale]/system/generators/i18n/en/index.ts +0 -14
  176. package/src/app/api/[locale]/system/generators/i18n/pl/index.ts +0 -15
  177. package/src/app/api/[locale]/system/generators/route-handlers/definition.ts +0 -178
  178. package/src/app/api/[locale]/system/generators/route-handlers/i18n/de/index.ts +0 -48
  179. package/src/app/api/[locale]/system/generators/route-handlers/i18n/en/index.ts +0 -48
  180. package/src/app/api/[locale]/system/generators/route-handlers/i18n/pl/index.ts +0 -50
  181. package/src/app/api/[locale]/system/generators/route-handlers/repository.ts +0 -267
  182. package/src/app/api/[locale]/system/generators/route-handlers/route.ts +0 -14
  183. package/src/app/api/[locale]/system/generators/shared/utils.ts +0 -215
  184. package/src/app/api/[locale]/system/help/definition.ts +0 -433
  185. package/src/app/api/[locale]/system/help/i18n/de/index.ts +0 -263
  186. package/src/app/api/[locale]/system/help/i18n/en/index.ts +0 -259
  187. package/src/app/api/[locale]/system/help/i18n/pl/index.ts +0 -262
  188. package/src/app/api/[locale]/system/help/interactive/definition.ts +0 -122
  189. package/src/app/api/[locale]/system/help/interactive/i18n/de/index.ts +0 -21
  190. package/src/app/api/[locale]/system/help/interactive/i18n/en/index.ts +0 -19
  191. package/src/app/api/[locale]/system/help/interactive/i18n/pl/index.ts +0 -21
  192. package/src/app/api/[locale]/system/help/interactive/repository.ts +0 -1131
  193. package/src/app/api/[locale]/system/help/interactive/route.ts +0 -43
  194. package/src/app/api/[locale]/system/help/list/definition.ts +0 -362
  195. package/src/app/api/[locale]/system/help/list/repository.ts +0 -99
  196. package/src/app/api/[locale]/system/help/list/route.ts +0 -21
  197. package/src/app/api/[locale]/system/help/repository.ts +0 -238
  198. package/src/app/api/[locale]/system/help/route.ts +0 -16
  199. package/src/app/api/[locale]/system/i18n/de/index.ts +0 -67
  200. package/src/app/api/[locale]/system/i18n/en/index.ts +0 -66
  201. package/src/app/api/[locale]/system/i18n/pl/index.ts +0 -67
  202. package/src/app/api/[locale]/system/release-tool/definition.ts +0 -2925
  203. package/src/app/api/[locale]/system/release-tool/i18n/de/index.ts +0 -782
  204. package/src/app/api/[locale]/system/release-tool/i18n/en/index.ts +0 -779
  205. package/src/app/api/[locale]/system/release-tool/i18n/pl/index.ts +0 -781
  206. package/src/app/api/[locale]/system/release-tool/repository/asset-zipper.ts +0 -122
  207. package/src/app/api/[locale]/system/release-tool/repository/changelog-generator.ts +0 -205
  208. package/src/app/api/[locale]/system/release-tool/repository/ci-detector.ts +0 -540
  209. package/src/app/api/[locale]/system/release-tool/repository/config.ts +0 -106
  210. package/src/app/api/[locale]/system/release-tool/repository/constants.ts +0 -406
  211. package/src/app/api/[locale]/system/release-tool/repository/dependency-manager.ts +0 -496
  212. package/src/app/api/[locale]/system/release-tool/repository/git-service.ts +0 -378
  213. package/src/app/api/[locale]/system/release-tool/repository/hook-runner.ts +0 -96
  214. package/src/app/api/[locale]/system/release-tool/repository/index.ts +0 -1
  215. package/src/app/api/[locale]/system/release-tool/repository/notification-service.ts +0 -575
  216. package/src/app/api/[locale]/system/release-tool/repository/package-service.ts +0 -150
  217. package/src/app/api/[locale]/system/release-tool/repository/publisher.ts +0 -241
  218. package/src/app/api/[locale]/system/release-tool/repository/quality-runner.ts +0 -413
  219. package/src/app/api/[locale]/system/release-tool/repository/release-creator.ts +0 -283
  220. package/src/app/api/[locale]/system/release-tool/repository/release-executor.ts +0 -1084
  221. package/src/app/api/[locale]/system/release-tool/repository/snyk-service.ts +0 -132
  222. package/src/app/api/[locale]/system/release-tool/repository/utils.ts +0 -603
  223. package/src/app/api/[locale]/system/release-tool/repository/validation.ts +0 -265
  224. package/src/app/api/[locale]/system/release-tool/repository/version-service.ts +0 -275
  225. package/src/app/api/[locale]/system/release-tool/route.ts +0 -21
  226. package/src/app/api/[locale]/system/unified-interface/README.md +0 -328
  227. package/src/app/api/[locale]/system/unified-interface/cli/README.md +0 -349
  228. package/src/app/api/[locale]/system/unified-interface/cli/auth/cli-handler.ts +0 -82
  229. package/src/app/api/[locale]/system/unified-interface/cli/auth/cli-user.ts +0 -120
  230. package/src/app/api/[locale]/system/unified-interface/cli/auth/session-file.ts +0 -244
  231. package/src/app/api/[locale]/system/unified-interface/cli/env.ts +0 -24
  232. package/src/app/api/[locale]/system/unified-interface/cli/i18n/de/index.ts +0 -159
  233. package/src/app/api/[locale]/system/unified-interface/cli/i18n/en/index.ts +0 -158
  234. package/src/app/api/[locale]/system/unified-interface/cli/i18n/pl/index.ts +0 -159
  235. package/src/app/api/[locale]/system/unified-interface/cli/runtime/debug.ts +0 -573
  236. package/src/app/api/[locale]/system/unified-interface/cli/runtime/entry-point.ts +0 -128
  237. package/src/app/api/[locale]/system/unified-interface/cli/runtime/environment.ts +0 -155
  238. package/src/app/api/[locale]/system/unified-interface/cli/runtime/execution-errors.ts +0 -423
  239. package/src/app/api/[locale]/system/unified-interface/cli/runtime/parsing.ts +0 -252
  240. package/src/app/api/[locale]/system/unified-interface/cli/runtime/route-executor.ts +0 -901
  241. package/src/app/api/[locale]/system/unified-interface/cli/setup/i18n/de/index.ts +0 -12
  242. package/src/app/api/[locale]/system/unified-interface/cli/setup/i18n/en/index.ts +0 -11
  243. package/src/app/api/[locale]/system/unified-interface/cli/setup/i18n/pl/index.ts +0 -12
  244. package/src/app/api/[locale]/system/unified-interface/cli/setup/install/definition.ts +0 -235
  245. package/src/app/api/[locale]/system/unified-interface/cli/setup/install/i18n/de/index.ts +0 -54
  246. package/src/app/api/[locale]/system/unified-interface/cli/setup/install/i18n/en/index.ts +0 -52
  247. package/src/app/api/[locale]/system/unified-interface/cli/setup/install/i18n/pl/index.ts +0 -54
  248. package/src/app/api/[locale]/system/unified-interface/cli/setup/install/repository.ts +0 -444
  249. package/src/app/api/[locale]/system/unified-interface/cli/setup/install/route.ts +0 -25
  250. package/src/app/api/[locale]/system/unified-interface/cli/setup/status/definition.ts +0 -159
  251. package/src/app/api/[locale]/system/unified-interface/cli/setup/status/i18n/de/index.ts +0 -61
  252. package/src/app/api/[locale]/system/unified-interface/cli/setup/status/i18n/en/index.ts +0 -59
  253. package/src/app/api/[locale]/system/unified-interface/cli/setup/status/i18n/pl/index.ts +0 -61
  254. package/src/app/api/[locale]/system/unified-interface/cli/setup/status/repository.ts +0 -181
  255. package/src/app/api/[locale]/system/unified-interface/cli/setup/status/route.ts +0 -22
  256. package/src/app/api/[locale]/system/unified-interface/cli/setup/uninstall/definition.ts +0 -164
  257. package/src/app/api/[locale]/system/unified-interface/cli/setup/uninstall/i18n/de/index.ts +0 -54
  258. package/src/app/api/[locale]/system/unified-interface/cli/setup/uninstall/i18n/en/index.ts +0 -52
  259. package/src/app/api/[locale]/system/unified-interface/cli/setup/uninstall/i18n/pl/index.ts +0 -54
  260. package/src/app/api/[locale]/system/unified-interface/cli/setup/uninstall/repository.ts +0 -195
  261. package/src/app/api/[locale]/system/unified-interface/cli/setup/uninstall/route.ts +0 -24
  262. package/src/app/api/[locale]/system/unified-interface/cli/setup/update/definition.ts +0 -180
  263. package/src/app/api/[locale]/system/unified-interface/cli/setup/update/i18n/de/index.ts +0 -54
  264. package/src/app/api/[locale]/system/unified-interface/cli/setup/update/i18n/en/index.ts +0 -52
  265. package/src/app/api/[locale]/system/unified-interface/cli/setup/update/i18n/pl/index.ts +0 -54
  266. package/src/app/api/[locale]/system/unified-interface/cli/setup/update/repository.ts +0 -105
  267. package/src/app/api/[locale]/system/unified-interface/cli/setup/update/route.ts +0 -22
  268. package/src/app/api/[locale]/system/unified-interface/cli/vibe-runtime.ts +0 -264
  269. package/src/app/api/[locale]/system/unified-interface/cli/widgets/core/base-renderer.ts +0 -246
  270. package/src/app/api/[locale]/system/unified-interface/cli/widgets/core/registry.ts +0 -305
  271. package/src/app/api/[locale]/system/unified-interface/cli/widgets/core/types.ts +0 -116
  272. package/src/app/api/[locale]/system/unified-interface/cli/widgets/i18n/de/index.ts +0 -67
  273. package/src/app/api/[locale]/system/unified-interface/cli/widgets/i18n/en/index.ts +0 -65
  274. package/src/app/api/[locale]/system/unified-interface/cli/widgets/i18n/pl/index.ts +0 -67
  275. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/accordion.ts +0 -70
  276. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/avatar.ts +0 -37
  277. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/badge.ts +0 -52
  278. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/code-output.ts +0 -285
  279. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/code-quality-files.ts +0 -71
  280. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/code-quality-list.ts +0 -281
  281. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/code-quality-summary.ts +0 -83
  282. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/container.ts +0 -175
  283. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/data-card.ts +0 -61
  284. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/data-cards.ts +0 -518
  285. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/data-list.ts +0 -75
  286. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/data-table.ts +0 -357
  287. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/editable-text.ts +0 -93
  288. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/empty-state.ts +0 -49
  289. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/errors.ts +0 -63
  290. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/grouped-list.ts +0 -667
  291. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/link-card.ts +0 -78
  292. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/link-list.ts +0 -99
  293. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/link.ts +0 -54
  294. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/loading.ts +0 -46
  295. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/markdown.ts +0 -123
  296. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/metric.ts +0 -269
  297. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/section.ts +0 -114
  298. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/stats-grid.ts +0 -138
  299. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/tabs.ts +0 -59
  300. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/text.ts +0 -76
  301. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/title.ts +0 -37
  302. package/src/app/api/[locale]/system/unified-interface/cli/widgets/renderers/response-renderer.ts +0 -403
  303. package/src/app/api/[locale]/system/unified-interface/cli/widgets/renderers/schema-handler.ts +0 -504
  304. package/src/app/api/[locale]/system/unified-interface/i18n/de/index.ts +0 -39
  305. package/src/app/api/[locale]/system/unified-interface/i18n/en/index.ts +0 -37
  306. package/src/app/api/[locale]/system/unified-interface/i18n/pl/index.ts +0 -39
  307. package/src/app/api/[locale]/system/unified-interface/mcp/README.md +0 -114
  308. package/src/app/api/[locale]/system/unified-interface/mcp/converter.ts +0 -136
  309. package/src/app/api/[locale]/system/unified-interface/mcp/i18n/de/index.ts +0 -180
  310. package/src/app/api/[locale]/system/unified-interface/mcp/i18n/en/index.ts +0 -178
  311. package/src/app/api/[locale]/system/unified-interface/mcp/i18n/pl/index.ts +0 -180
  312. package/src/app/api/[locale]/system/unified-interface/mcp/registry.ts +0 -305
  313. package/src/app/api/[locale]/system/unified-interface/mcp/serve/definition.ts +0 -124
  314. package/src/app/api/[locale]/system/unified-interface/mcp/serve/repository.ts +0 -44
  315. package/src/app/api/[locale]/system/unified-interface/mcp/serve/route.ts +0 -14
  316. package/src/app/api/[locale]/system/unified-interface/mcp/server/protocol-handler.ts +0 -291
  317. package/src/app/api/[locale]/system/unified-interface/mcp/server/server.ts +0 -155
  318. package/src/app/api/[locale]/system/unified-interface/mcp/server/stdio-transport.ts +0 -191
  319. package/src/app/api/[locale]/system/unified-interface/mcp/types.ts +0 -247
  320. package/src/app/api/[locale]/system/unified-interface/react/icons.tsx +0 -346
  321. package/src/app/api/[locale]/system/unified-interface/shared/endpoints/definition/create-form.ts +0 -1413
  322. package/src/app/api/[locale]/system/unified-interface/shared/endpoints/definition/create.ts +0 -525
  323. package/src/app/api/[locale]/system/unified-interface/shared/endpoints/definition/endpoint-to-metadata.ts +0 -52
  324. package/src/app/api/[locale]/system/unified-interface/shared/endpoints/definition/loader.ts +0 -144
  325. package/src/app/api/[locale]/system/unified-interface/shared/endpoints/definitions/registry.ts +0 -262
  326. package/src/app/api/[locale]/system/unified-interface/shared/endpoints/permissions/registry.ts +0 -656
  327. package/src/app/api/[locale]/system/unified-interface/shared/endpoints/route/executor.ts +0 -220
  328. package/src/app/api/[locale]/system/unified-interface/shared/endpoints/route/handler.ts +0 -313
  329. package/src/app/api/[locale]/system/unified-interface/shared/endpoints/route/multi.ts +0 -182
  330. package/src/app/api/[locale]/system/unified-interface/shared/endpoints/route/request-validator.ts +0 -173
  331. package/src/app/api/[locale]/system/unified-interface/shared/endpoints/route/single.ts +0 -58
  332. package/src/app/api/[locale]/system/unified-interface/shared/env/define-env-client.ts +0 -45
  333. package/src/app/api/[locale]/system/unified-interface/shared/env/define-env.ts +0 -43
  334. package/src/app/api/[locale]/system/unified-interface/shared/env/validation-logger.ts +0 -58
  335. package/src/app/api/[locale]/system/unified-interface/shared/field/enum.ts +0 -107
  336. package/src/app/api/[locale]/system/unified-interface/shared/field/specialized.ts +0 -336
  337. package/src/app/api/[locale]/system/unified-interface/shared/field/utils.test.ts +0 -385
  338. package/src/app/api/[locale]/system/unified-interface/shared/field/utils.ts +0 -1827
  339. package/src/app/api/[locale]/system/unified-interface/shared/field-config/endpoint-field-types.ts +0 -108
  340. package/src/app/api/[locale]/system/unified-interface/shared/field-config/field-config-types.ts +0 -288
  341. package/src/app/api/[locale]/system/unified-interface/shared/logger/colors.ts +0 -114
  342. package/src/app/api/[locale]/system/unified-interface/shared/logger/endpoint.ts +0 -155
  343. package/src/app/api/[locale]/system/unified-interface/shared/logger/file-logger.ts +0 -85
  344. package/src/app/api/[locale]/system/unified-interface/shared/logger/formatters.ts +0 -167
  345. package/src/app/api/[locale]/system/unified-interface/shared/server-only/auth/base-auth-handler.ts +0 -82
  346. package/src/app/api/[locale]/system/unified-interface/shared/server-only/auth/factory.ts +0 -34
  347. package/src/app/api/[locale]/system/unified-interface/shared/server-only/server-only.ts +0 -1
  348. package/src/app/api/[locale]/system/unified-interface/shared/types/actions.ts +0 -284
  349. package/src/app/api/[locale]/system/unified-interface/shared/types/endpoint.ts +0 -1101
  350. package/src/app/api/[locale]/system/unified-interface/shared/types/enums.ts +0 -383
  351. package/src/app/api/[locale]/system/unified-interface/shared/types/platform.ts +0 -34
  352. package/src/app/api/[locale]/system/unified-interface/shared/types/types.ts +0 -76
  353. package/src/app/api/[locale]/system/unified-interface/shared/types/ui-config.ts +0 -72
  354. package/src/app/api/[locale]/system/unified-interface/shared/utils/error-types.ts +0 -27
  355. package/src/app/api/[locale]/system/unified-interface/shared/utils/path.ts +0 -80
  356. package/src/app/api/[locale]/system/unified-interface/shared/utils/scanner.ts +0 -225
  357. package/src/app/api/[locale]/system/unified-interface/shared/widgets/actions.ts +0 -251
  358. package/src/app/api/[locale]/system/unified-interface/shared/widgets/configs.ts +0 -1060
  359. package/src/app/api/[locale]/system/unified-interface/shared/widgets/helpers.ts +0 -70
  360. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/accordion.ts +0 -75
  361. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/avatar.ts +0 -69
  362. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/badge.ts +0 -86
  363. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/code-output.ts +0 -283
  364. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/code-quality-list.ts +0 -190
  365. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/container.ts +0 -114
  366. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/data-card.ts +0 -71
  367. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/data-cards.ts +0 -228
  368. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/data-list.ts +0 -119
  369. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/data-table.ts +0 -367
  370. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/editable-text.ts +0 -81
  371. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/empty-state.ts +0 -71
  372. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/errors.ts +0 -79
  373. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/grouped-list.ts +0 -426
  374. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/index.ts +0 -38
  375. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/link-card.ts +0 -112
  376. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/link-list.ts +0 -110
  377. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/link.ts +0 -66
  378. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/loading.ts +0 -79
  379. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/markdown.ts +0 -159
  380. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/metric-card.ts +0 -225
  381. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/section.ts +0 -85
  382. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/stats-grid.ts +0 -63
  383. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/tabs.ts +0 -73
  384. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/text.ts +0 -96
  385. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/title.ts +0 -57
  386. package/src/app/api/[locale]/system/unified-interface/shared/widgets/types.ts +0 -236
  387. package/src/app/api/[locale]/system/unified-interface/shared/widgets/utils/field-helpers.ts +0 -120
  388. package/src/app/api/[locale]/system/unified-interface/shared/widgets/utils/formatting.ts +0 -414
  389. package/src/app/api/[locale]/system/unified-interface/shared/widgets/utils/url.ts +0 -37
  390. package/src/app/api/[locale]/system/unified-interface/shared/widgets/utils/widget-helpers.ts +0 -427
  391. package/src/app/api/[locale]/user/auth/i18n/de/index.ts +0 -204
  392. package/src/app/api/[locale]/user/auth/i18n/en/index.ts +0 -199
  393. package/src/app/api/[locale]/user/auth/i18n/pl/index.ts +0 -203
  394. package/src/app/api/[locale]/user/auth/types.ts +0 -45
  395. package/src/app/api/[locale]/user/enum.ts +0 -64
  396. package/src/app/api/[locale]/user/i18n/de/index.ts +0 -75
  397. package/src/app/api/[locale]/user/i18n/en/index.ts +0 -74
  398. package/src/app/api/[locale]/user/i18n/pl/index.ts +0 -75
  399. package/src/app/api/[locale]/user/types.ts +0 -111
  400. package/src/app/api/[locale]/user/user-roles/enum.ts +0 -103
  401. package/src/app/api/[locale]/user/user-roles/i18n/de/index.ts +0 -85
  402. package/src/app/api/[locale]/user/user-roles/i18n/en/index.ts +0 -83
  403. package/src/app/api/[locale]/user/user-roles/i18n/pl/index.ts +0 -85
  404. package/src/app/api/[locale]/user/user-roles/types.ts +0 -32
  405. package/src/app/api/i18n/de/index.ts +0 -6
  406. package/src/app/api/i18n/en/index.ts +0 -5
  407. package/src/app/api/i18n/pl/index.ts +0 -5
  408. package/src/app/i18n/de/index.ts +0 -18
  409. package/src/app/i18n/en/index.ts +0 -18
  410. package/src/app/i18n/pl/index.ts +0 -17
  411. package/src/config/constants.ts +0 -8
  412. package/src/config/debug.ts +0 -30
  413. package/src/config/env-client.ts +0 -57
  414. package/src/config/env.ts +0 -56
  415. package/src/config/i18n/de/index.ts +0 -3
  416. package/src/config/i18n/en/index.ts +0 -51
  417. package/src/config/i18n/pl/index.ts +0 -3
  418. package/src/i18n/core/config.ts +0 -225
  419. package/src/i18n/core/language-utils.ts +0 -226
  420. package/src/i18n/core/localization-utils.ts +0 -394
  421. package/src/i18n/core/scoped-translation.ts +0 -104
  422. package/src/i18n/core/shared-component.tsx +0 -28
  423. package/src/i18n/core/shared-translation-utils.ts +0 -97
  424. package/src/i18n/core/shared.ts +0 -44
  425. package/src/i18n/core/static-types.ts +0 -64
  426. package/src/i18n/core/translation-utils.ts +0 -186
  427. package/src/i18n/de/index.ts +0 -8
  428. package/src/i18n/en/index.ts +0 -7
  429. package/src/i18n/index.ts +0 -100
  430. package/src/i18n/pl/index.ts +0 -7
@@ -1,1131 +0,0 @@
1
- /**
2
- * Interactive Mode Repository
3
- * Contains all business logic for interactive file explorer mode
4
- */
5
-
6
- import "server-only";
7
-
8
- import { confirm, select } from "@inquirer/prompts";
9
- import {
10
- ErrorResponseTypes,
11
- fail,
12
- type ResponseType,
13
- success,
14
- } from "next-vibe/shared/types/response.schema";
15
- import { parseError } from "next-vibe/shared/utils/parse-error";
16
- import type { z } from "zod";
17
-
18
- import type { InferJwtPayloadTypeFromRoles } from "@/app/api/[locale]/system/unified-interface/shared/endpoints/route/handler";
19
- import type { EndpointLogger } from "@/app/api/[locale]/system/unified-interface/shared/logger/endpoint";
20
- import { UserPermissionRole, type UserRoleValue } from "@/app/api/[locale]/user/user-roles/enum";
21
- import type { CountryLanguage } from "@/i18n/core/config";
22
- import { simpleT } from "@/i18n/core/shared";
23
-
24
- import type {
25
- CliCompatiblePlatform,
26
- RouteExecutionContext,
27
- } from "../../unified-interface/cli/runtime/route-executor";
28
- import { routeDelegationHandler } from "../../unified-interface/cli/runtime/route-executor";
29
- import { schemaUIHandler } from "../../unified-interface/cli/widgets/renderers/schema-handler";
30
- import { definitionsRegistry } from "../../unified-interface/shared/endpoints/definitions/registry";
31
- import type { CreateApiEndpointAny } from "../../unified-interface/shared/types/endpoint";
32
- import { Platform } from "../../unified-interface/shared/types/platform";
33
- import { endpointToToolName, splitPath } from "../../unified-interface/shared/utils/path";
34
-
35
- /**
36
- * Interactive session state
37
- */
38
- interface InteractiveSession {
39
- user: InferJwtPayloadTypeFromRoles<readonly UserRoleValue[]>;
40
- locale: CountryLanguage;
41
- platform: CliCompatiblePlatform;
42
- options?: {
43
- verbose?: boolean;
44
- output?: "json" | "table" | "pretty";
45
- };
46
- }
47
-
48
- /**
49
- * Directory node for file explorer navigation
50
- */
51
- interface DirectoryNode {
52
- name: string;
53
- path: string;
54
- type: "directory" | "route";
55
- children?: DirectoryNode[];
56
- route?: CreateApiEndpointAny;
57
- parent?: DirectoryNode;
58
- }
59
-
60
- /**
61
- * Navigation breadcrumb
62
- */
63
- interface NavigationBreadcrumb {
64
- name: string;
65
- path: string;
66
- node: DirectoryNode;
67
- }
68
-
69
- export interface InteractiveRepository {
70
- startInteractiveMode(
71
- user: InferJwtPayloadTypeFromRoles<readonly UserRoleValue[]> | undefined,
72
- locale: CountryLanguage,
73
- logger: EndpointLogger,
74
- platform: CliCompatiblePlatform,
75
- ): Promise<ResponseType<{ started: boolean }>>;
76
- }
77
-
78
- class InteractiveRepositoryImpl implements InteractiveRepository {
79
- private session!: InteractiveSession;
80
- private routeTree: DirectoryNode | null = null;
81
- private currentNode: DirectoryNode | null = null;
82
- private breadcrumbs: NavigationBreadcrumb[] = [];
83
- private logger!: EndpointLogger;
84
-
85
- // Constants for action prefixes
86
- private static readonly NAV_PREFIX = "nav:";
87
- private static readonly EXEC_PREFIX = "exec:";
88
- private static readonly UP_ACTION = "up";
89
- private static readonly EXIT_ACTION = "exit";
90
- private static readonly SETTINGS_ACTION = "settings";
91
- private static readonly CURRENT_PLACEHOLDER = "{current}";
92
-
93
- async startInteractiveMode(
94
- user: InferJwtPayloadTypeFromRoles<readonly UserRoleValue[]> | undefined,
95
- locale: CountryLanguage,
96
- logger: EndpointLogger,
97
- platform: CliCompatiblePlatform,
98
- ): Promise<ResponseType<{ started: boolean }>> {
99
- if (!user) {
100
- return fail({
101
- message: "app.api.system.help.interactive.errors.unauthorized.title",
102
- errorType: ErrorResponseTypes.UNAUTHORIZED,
103
- });
104
- }
105
-
106
- try {
107
- this.initializeDefaultSession(locale, user, platform);
108
- this.setupSignalHandlers();
109
-
110
- const { t } = simpleT(this.getSession().locale);
111
-
112
- // Show welcome message with better formatting
113
- logger.info(`\n${"═".repeat(60)}`);
114
- logger.info(` ${t("app.api.system.unifiedInterface.cli.vibe.interactive.welcome")}`);
115
- logger.info("═".repeat(60));
116
- logger.info(` ${t("app.api.system.unifiedInterface.cli.vibe.help.description")}`);
117
- logger.info(`${"═".repeat(60)}\n`);
118
-
119
- // Build route tree for file explorer navigation
120
- // Use centralized endpoint adapter to get all platform-accessible endpoints
121
- // (filtered by user permissions from JWT)
122
- const discoveredEndpoints = definitionsRegistry.getEndpointsForUser(platform, user, logger);
123
-
124
- this.buildRouteTree(discoveredEndpoints);
125
-
126
- // Start at root
127
- this.currentNode = this.routeTree;
128
- this.updateBreadcrumbs();
129
-
130
- // Main navigation loop
131
- await this.navigationLoop(logger);
132
-
133
- return success({ started: true });
134
- } catch (error) {
135
- logger.error("Failed to start interactive mode", parseError(error));
136
- return fail({
137
- message: "app.api.system.help.interactive.errors.server.title",
138
- errorType: ErrorResponseTypes.INTERNAL_ERROR,
139
- });
140
- }
141
- }
142
-
143
- private getSession(): InteractiveSession {
144
- if (!this.session) {
145
- // This should never happen in normal flow
146
- // Initialize with defaults as fallback
147
- this.session = {
148
- options: {
149
- verbose: false,
150
- output: "pretty",
151
- },
152
- locale: "en-GLOBAL",
153
- platform: Platform.CLI,
154
- user: {
155
- id: "system",
156
- leadId: "system",
157
- isPublic: false,
158
- roles: [UserPermissionRole.ADMIN],
159
- },
160
- };
161
- }
162
- return this.session;
163
- }
164
-
165
- private setupSignalHandlers(): void {
166
- process.removeAllListeners("SIGINT");
167
- process.removeAllListeners("SIGTERM");
168
-
169
- process.on("SIGINT", () => {
170
- process.stdout.write("\n");
171
- process.stdout.write("Goodbye!\n");
172
- process.exit(0);
173
- });
174
-
175
- process.on("SIGTERM", () => {
176
- process.exit(0);
177
- });
178
- }
179
-
180
- private initializeDefaultSession(
181
- locale: CountryLanguage,
182
- user: InferJwtPayloadTypeFromRoles<readonly UserRoleValue[]>,
183
- platform: CliCompatiblePlatform,
184
- ): void {
185
- this.session = {
186
- options: {
187
- verbose: false,
188
- output: "pretty",
189
- },
190
- locale,
191
- user,
192
- platform,
193
- };
194
- }
195
-
196
- private buildRouteTree(routes: CreateApiEndpointAny[]): void {
197
- const { t } = simpleT(this.getSession().locale);
198
-
199
- this.routeTree = {
200
- name: t("app.api.system.unifiedInterface.cli.vibe.interactive.navigation.rootName"),
201
- path: "/",
202
- type: "directory",
203
- children: [],
204
- };
205
-
206
- for (const route of routes) {
207
- this.addRouteToTree(route);
208
- }
209
-
210
- this.sortTree(this.routeTree);
211
- }
212
-
213
- private addRouteToTree(route: CreateApiEndpointAny): void {
214
- if (!this.routeTree) {
215
- return;
216
- }
217
-
218
- const routePath = route.path.join("/");
219
- const pathParts = splitPath(`/api/[locale]/v1/${routePath}`).slice(4);
220
-
221
- let currentNode = this.routeTree;
222
-
223
- for (let i = 0; i < pathParts.length; i++) {
224
- const part = pathParts[i];
225
- let childNode = currentNode.children?.find((child) => child.name === part);
226
-
227
- if (!childNode) {
228
- const isLastPart = i === pathParts.length - 1;
229
- childNode = {
230
- name: part,
231
- path: `/${pathParts.slice(0, i + 1).join("/")}`,
232
- type: isLastPart ? "route" : "directory",
233
- children: isLastPart ? undefined : [],
234
- parent: currentNode,
235
- route: isLastPart ? route : undefined,
236
- };
237
-
238
- if (!currentNode.children) {
239
- currentNode.children = [];
240
- }
241
- currentNode.children.push(childNode);
242
- }
243
-
244
- currentNode = childNode;
245
- }
246
- }
247
-
248
- private sortTree(node: DirectoryNode): void {
249
- if (node.children) {
250
- node.children.sort((a, b) => {
251
- if (a.type !== b.type) {
252
- return a.type === "directory" ? -1 : 1;
253
- }
254
- return a.name.localeCompare(b.name);
255
- });
256
-
257
- node.children.forEach((child) => this.sortTree(child));
258
- }
259
- }
260
-
261
- private updateBreadcrumbs(): void {
262
- this.breadcrumbs = [];
263
- let current = this.currentNode;
264
-
265
- while (current) {
266
- this.breadcrumbs.unshift({
267
- name: current.name,
268
- path: current.path,
269
- node: current,
270
- });
271
- current = current.parent || null;
272
- }
273
- }
274
-
275
- private async showNavigationMenu(logger: EndpointLogger): Promise<string> {
276
- if (!this.currentNode) {
277
- return "exit";
278
- }
279
-
280
- const { t } = simpleT(this.getSession().locale);
281
-
282
- const breadcrumbPath = this.breadcrumbs.map((b) => b.name).join(" > ");
283
- logger.info(
284
- `\n${t("app.api.system.unifiedInterface.cli.vibe.interactive.navigation.directoryIcon")} ${breadcrumbPath}`,
285
- );
286
-
287
- const choices: Array<{ name: string; value: string }> = [];
288
-
289
- if (this.currentNode.parent) {
290
- const upIcon = t("app.api.system.unifiedInterface.cli.vibe.interactive.navigation.upIcon");
291
- const goUpText = t("app.api.system.unifiedInterface.cli.vibe.interactive.navigation.goUp");
292
- const upName = `${upIcon} ${goUpText}`;
293
- choices.push({
294
- name: upName,
295
- value: InteractiveRepositoryImpl.UP_ACTION,
296
- });
297
- }
298
-
299
- if (this.currentNode.children) {
300
- const directoryIcon = t(
301
- "app.api.system.unifiedInterface.cli.vibe.interactive.navigation.directoryIcon",
302
- );
303
- const routeIcon = t(
304
- "app.api.system.unifiedInterface.cli.vibe.interactive.navigation.routeIcon",
305
- );
306
- const routesText = t(
307
- "app.api.system.unifiedInterface.cli.vibe.interactive.navigation.routes",
308
- );
309
- const noDescriptionText = t("app.api.system.unifiedInterface.cli.vibe.errors.routeNotFound");
310
-
311
- for (const child of this.currentNode.children) {
312
- if (child.type === "directory") {
313
- const routeCount = this.countRoutesInDirectory(child);
314
- const directoryName = `${directoryIcon} ${child.name}/ (${routeCount} ${routesText})`;
315
- choices.push({
316
- name: directoryName,
317
- value: InteractiveRepositoryImpl.NAV_PREFIX + child.path,
318
- });
319
- } else if (child.type === "route" && child.route) {
320
- const route = child.route;
321
- const { t: routeT } = this.getTranslatorForRoute(route);
322
- const description = route.description ? routeT(route.description) : noDescriptionText;
323
-
324
- // Use first alias if available, otherwise use the route name
325
- const displayName =
326
- route.aliases && route.aliases.length > 0 ? route.aliases[0] : child.name;
327
-
328
- // Show additional aliases if available
329
- const additionalAliases =
330
- route.aliases && route.aliases.length > 1
331
- ? ` [${route.aliases.slice(1).join(", ")}]`
332
- : "";
333
-
334
- const routeName = `${routeIcon} ${displayName}${additionalAliases} - ${description}`;
335
- choices.push({
336
- name: routeName,
337
- value: InteractiveRepositoryImpl.EXEC_PREFIX + route.path,
338
- });
339
- }
340
- }
341
- }
342
-
343
- if (choices.length > 0) {
344
- choices.push({
345
- name: "────────────────────────────────",
346
- value: "separator",
347
- });
348
- }
349
-
350
- // Add "View All Routes" option
351
- choices.push({
352
- name: `📋 ${t("app.api.system.unifiedInterface.cli.vibe.interactive.navigation.viewAllRoutes")}`,
353
- value: "view_all",
354
- });
355
-
356
- const settingsIcon = t(
357
- "app.api.system.unifiedInterface.cli.vibe.interactive.navigation.settingsIcon",
358
- );
359
- const settingsText = t(
360
- "app.api.system.unifiedInterface.cli.vibe.interactive.navigation.settings",
361
- );
362
- const exitIcon = t("app.api.system.unifiedInterface.cli.vibe.interactive.navigation.exitIcon");
363
- const exitText = t("app.api.system.unifiedInterface.cli.vibe.interactive.navigation.exit");
364
- const navigateMessage = t(
365
- "app.api.system.unifiedInterface.cli.vibe.interactive.navigation.navigate",
366
- );
367
-
368
- choices.push(
369
- {
370
- name: `${settingsIcon} ${settingsText}`,
371
- value: InteractiveRepositoryImpl.SETTINGS_ACTION,
372
- },
373
- {
374
- name: `${exitIcon} ${exitText}`,
375
- value: InteractiveRepositoryImpl.EXIT_ACTION,
376
- },
377
- );
378
-
379
- const action = await select({
380
- message: navigateMessage,
381
- choices,
382
- pageSize: 20,
383
- });
384
-
385
- return action;
386
- }
387
-
388
- /**
389
- * Get translator for a specific route
390
- */
391
- private getTranslatorForRoute(route: CreateApiEndpointAny): {
392
- t: (key: string) => string;
393
- } {
394
- const {
395
- getTranslatorFromEndpoint,
396
- } = require("../../unified-interface/shared/widgets/utils/field-helpers");
397
- return getTranslatorFromEndpoint(route)(this.getSession().locale);
398
- }
399
-
400
- /**
401
- * Show all routes in a flat list
402
- */
403
- private async showAllRoutesMenu(): Promise<string> {
404
- const { t } = simpleT(this.getSession().locale);
405
- const allRoutes = this.getAllRoutes(this.routeTree);
406
-
407
- // Group by category
408
- const routesByCategory = new Map<string, CreateApiEndpointAny[]>();
409
- for (const route of allRoutes) {
410
- const category = route.category || "Other";
411
- if (!routesByCategory.has(category)) {
412
- routesByCategory.set(category, []);
413
- }
414
- routesByCategory.get(category)?.push(route);
415
- }
416
-
417
- // Sort categories and routes
418
- const sortedCategories = [...routesByCategory.keys()].toSorted();
419
-
420
- const choices: Array<{ name: string; value: string }> = [];
421
-
422
- for (const category of sortedCategories) {
423
- const routes = routesByCategory.get(category) || [];
424
-
425
- // Translate category using the first route's translator
426
- let translatedCategory = category;
427
- if (routes.length > 0 && category && category !== "Other") {
428
- const { t: categoryT } = this.getTranslatorForRoute(routes[0]);
429
- translatedCategory = categoryT(category);
430
- }
431
-
432
- // Add category header
433
- choices.push({
434
- name: `\n━━ ${translatedCategory} ━━`,
435
- value: "separator",
436
- });
437
-
438
- // Sort routes by display name
439
- const sortedRoutes = routes.toSorted((a, b) => {
440
- const nameA = a.aliases && a.aliases.length > 0 ? a.aliases[0] : endpointToToolName(a);
441
- const nameB = b.aliases && b.aliases.length > 0 ? b.aliases[0] : endpointToToolName(b);
442
- return nameA.localeCompare(nameB);
443
- });
444
-
445
- for (const route of sortedRoutes) {
446
- const { t: routeT } = this.getTranslatorForRoute(route);
447
- const displayName =
448
- route.aliases && route.aliases.length > 0 ? route.aliases[0] : endpointToToolName(route);
449
-
450
- const description = route.description ? routeT(route.description) : "";
451
-
452
- const additionalAliases =
453
- route.aliases && route.aliases.length > 1
454
- ? ` [${route.aliases.slice(1).join(", ")}]`
455
- : "";
456
-
457
- choices.push({
458
- name: ` 🔧 ${displayName.padEnd(20)}${additionalAliases} ${description}`,
459
- value: InteractiveRepositoryImpl.EXEC_PREFIX + route.path,
460
- });
461
- }
462
- }
463
-
464
- choices.push({
465
- name: "\n────────────────────────────────",
466
- value: "separator",
467
- });
468
- choices.push({
469
- name: `⬅️ ${t("app.api.system.unifiedInterface.cli.vibe.interactive.navigation.backToNavigation")}`,
470
- value: "back",
471
- });
472
-
473
- const action = await select({
474
- message: t("app.api.system.unifiedInterface.cli.vibe.interactive.navigation.selectRoute"),
475
- choices,
476
- pageSize: 20,
477
- });
478
-
479
- return action;
480
- }
481
-
482
- /**
483
- * Get all routes from the tree
484
- */
485
- private getAllRoutes(node: DirectoryNode | null): CreateApiEndpointAny[] {
486
- if (!node) {
487
- return [];
488
- }
489
-
490
- const routes: CreateApiEndpointAny[] = [];
491
-
492
- if (node.type === "route" && node.route) {
493
- routes.push(node.route);
494
- }
495
-
496
- if (node.children) {
497
- for (const child of node.children) {
498
- routes.push(...this.getAllRoutes(child));
499
- }
500
- }
501
-
502
- return routes;
503
- }
504
-
505
- private countRoutesInDirectory(node: DirectoryNode): number {
506
- let count = 0;
507
- if (node.type === "route") {
508
- return 1;
509
- }
510
- if (node.children) {
511
- for (const child of node.children) {
512
- count += this.countRoutesInDirectory(child);
513
- }
514
- }
515
- return count;
516
- }
517
-
518
- private navigateUp(): void {
519
- if (this.currentNode?.parent) {
520
- this.currentNode = this.currentNode.parent;
521
- this.updateBreadcrumbs();
522
- }
523
- }
524
-
525
- private navigateToPath(targetPath: string): void {
526
- if (!this.routeTree) {
527
- return;
528
- }
529
-
530
- const targetNode = this.findNodeByPath(this.routeTree, targetPath);
531
- if (targetNode) {
532
- this.currentNode = targetNode;
533
- this.updateBreadcrumbs();
534
- }
535
- }
536
-
537
- private findNodeByPath(node: DirectoryNode, path: string): DirectoryNode | null {
538
- if (node.path === path) {
539
- return node;
540
- }
541
- if (node.children) {
542
- for (const child of node.children) {
543
- const found = this.findNodeByPath(child, path);
544
- if (found) {
545
- return found;
546
- }
547
- }
548
- }
549
- return null;
550
- }
551
-
552
- private async executeRouteByPath(routePath: string, logger: EndpointLogger): Promise<void> {
553
- if (!this.routeTree) {
554
- return;
555
- }
556
-
557
- const route = this.findRouteByPath(this.routeTree, routePath);
558
- if (route) {
559
- await this.executeRouteWithDataDrivenUI(route, logger);
560
- }
561
- }
562
-
563
- private findRouteByPath(node: DirectoryNode, path: string): CreateApiEndpointAny | null {
564
- if (node.route) {
565
- const pathArray = node.route.path;
566
- const routePath = Array.isArray(pathArray) ? pathArray.join("/") : pathArray;
567
- if (routePath === path) {
568
- return node.route;
569
- }
570
- }
571
- if (node.children) {
572
- for (const child of node.children) {
573
- const found = this.findRouteByPath(child, path);
574
- if (found) {
575
- return found;
576
- }
577
- }
578
- }
579
- return null;
580
- }
581
-
582
- private async executeRouteWithDataDrivenUI(
583
- route: CreateApiEndpointAny,
584
- logger: EndpointLogger,
585
- ): Promise<void> {
586
- const { t } = simpleT(this.getSession().locale);
587
-
588
- const executingText = t("app.api.system.unifiedInterface.cli.vibe.executing");
589
- const routeText = t("app.api.system.unifiedInterface.cli.vibe.interactive.navigation.route");
590
- const methodText = t("app.api.system.unifiedInterface.cli.vibe.interactive.navigation.method");
591
- const descriptionText = t(
592
- "app.api.system.unifiedInterface.cli.vibe.interactive.navigation.description",
593
- );
594
-
595
- const pathArray = route.path;
596
- const routePath = Array.isArray(pathArray) ? pathArray.join("/") : pathArray;
597
- const alias = route.aliases && route.aliases.length > 0 ? route.aliases[0] : undefined;
598
-
599
- // Better visual formatting for route execution
600
- logger.info(`\n${"─".repeat(60)}`);
601
- logger.info(` 🚀 ${executingText}: ${alias || routePath}`);
602
- logger.info("─".repeat(60));
603
- logger.info(` ${routeText}: ${routePath}`);
604
- logger.info(` ${methodText}: ${route.method}`);
605
- if (route.description) {
606
- const { t: routeT } = this.getTranslatorForRoute(route);
607
- const translatedDescription = routeT(route.description);
608
- logger.info(` ${descriptionText}: ${translatedDescription}`);
609
- }
610
- logger.info(`${"─".repeat(60)}\n`);
611
-
612
- try {
613
- const endpoint = await this.getCreateApiEndpoint(route, logger);
614
-
615
- if (!endpoint) {
616
- const noDefinitionText = t(
617
- "app.api.system.unifiedInterface.cli.vibe.interactive.navigation.noDefinition",
618
- );
619
- logger.warn(noDefinitionText);
620
- await this.executeRouteBasic(route, logger);
621
- return;
622
- }
623
-
624
- await this.generateDataDrivenForm(route, logger);
625
- } catch (error) {
626
- const executionFailedText = t(
627
- "app.api.system.unifiedInterface.cli.vibe.interactive.navigation.executionFailed",
628
- );
629
- logger.error(executionFailedText, parseError(error));
630
- }
631
-
632
- const executeAnotherText = t(
633
- "app.api.system.unifiedInterface.cli.vibe.interactive.navigation.executeAnother",
634
- );
635
- const shouldContinue = await confirm({
636
- message: executeAnotherText,
637
- default: true,
638
- });
639
-
640
- if (!shouldContinue) {
641
- return;
642
- }
643
- }
644
-
645
- private async collectLocaleSelection(): Promise<CountryLanguage> {
646
- const { t } = simpleT(this.getSession().locale);
647
-
648
- const selectLocaleText = t(
649
- "app.api.system.unifiedInterface.cli.vibe.interactive.navigation.selectLocale",
650
- );
651
-
652
- const englishGlobalText = t(
653
- "app.api.system.unifiedInterface.cli.vibe.interactive.navigation.englishGlobal",
654
- );
655
-
656
- const localeOptions = [
657
- { name: englishGlobalText, value: "en-GLOBAL" },
658
- { name: "German (Germany)", value: "de-DE" },
659
- { name: "Polish (Poland)", value: "pl-PL" },
660
- ] satisfies Array<{ name: string; value: CountryLanguage }>;
661
-
662
- const sessionLocale = this.getSession().locale;
663
- // Only use as default if it's one of the available options
664
- const defaultLocale = localeOptions.some((opt) => opt.value === sessionLocale)
665
- ? sessionLocale
666
- : undefined;
667
- const locale = await select({
668
- message: selectLocaleText,
669
- choices: localeOptions,
670
- default: defaultLocale as (typeof localeOptions)[number]["value"] | undefined,
671
- });
672
-
673
- return locale as CountryLanguage;
674
- }
675
-
676
- private async generateDataDrivenForm(
677
- endpoint: CreateApiEndpointAny,
678
- logger: EndpointLogger,
679
- ): Promise<void> {
680
- const routePath = endpoint.path.join("/");
681
- const alias = endpoint.aliases && endpoint.aliases.length > 0 ? endpoint.aliases[0] : undefined;
682
- const title = endpoint.title || alias || routePath;
683
-
684
- logger.info(title);
685
- if (endpoint.description) {
686
- logger.info(endpoint.description);
687
- }
688
-
689
- const selectedLocale = await this.collectLocaleSelection();
690
- this.getSession().locale = selectedLocale;
691
-
692
- const { t: tSelected } = simpleT(selectedLocale);
693
-
694
- let requestData = {};
695
- if (endpoint.requestSchema && !this.isEmptySchema(endpoint.requestSchema)) {
696
- const requestDataText = tSelected(
697
- "app.api.system.unifiedInterface.cli.vibe.interactive.navigation.requestData",
698
- );
699
- logger.info(`\n📝 ${requestDataText}`);
700
- logger.info("─".repeat(60));
701
- requestData = await this.generateFormFromSchema(
702
- endpoint.requestSchema,
703
- requestDataText,
704
- logger,
705
- );
706
- }
707
-
708
- let urlPathParams = {};
709
- if (
710
- endpoint.requestUrlPathParamsSchema &&
711
- !this.isEmptySchema(endpoint.requestUrlPathParamsSchema)
712
- ) {
713
- const urlParametersText = tSelected(
714
- "app.api.system.unifiedInterface.cli.vibe.interactive.navigation.urlParameters",
715
- );
716
- logger.info(`\n🔗 ${urlParametersText}`);
717
- logger.info("─".repeat(60));
718
- urlPathParams = await this.generateFormFromSchema(
719
- endpoint.requestUrlPathParamsSchema,
720
- urlParametersText,
721
- logger,
722
- );
723
- }
724
-
725
- if (Object.keys(requestData).length > 0 || Object.keys(urlPathParams).length > 0) {
726
- const previewText = tSelected(
727
- "app.api.system.unifiedInterface.cli.vibe.interactive.navigation.preview",
728
- );
729
- const requestDataText = tSelected(
730
- "app.api.system.unifiedInterface.cli.vibe.interactive.navigation.requestData",
731
- );
732
- const urlParametersText = tSelected(
733
- "app.api.system.unifiedInterface.cli.vibe.interactive.navigation.urlParameters",
734
- );
735
- const executeWithParamsText = tSelected(
736
- "app.api.system.unifiedInterface.cli.vibe.interactive.navigation.executeWithParams",
737
- );
738
-
739
- logger.info(`\n${"═".repeat(60)}`);
740
- logger.info(` 👀 ${previewText}`);
741
- logger.info("═".repeat(60));
742
- if (Object.keys(requestData).length > 0) {
743
- logger.info(`\n${requestDataText}:`);
744
- logger.info(JSON.stringify(requestData, null, 2));
745
- }
746
- if (Object.keys(urlPathParams).length > 0) {
747
- logger.info(`\n${urlParametersText}:`);
748
- logger.info(JSON.stringify(urlPathParams, null, 2));
749
- }
750
- logger.info("");
751
-
752
- const shouldExecute = await confirm({
753
- message: executeWithParamsText,
754
- default: true,
755
- });
756
-
757
- if (!shouldExecute) {
758
- return;
759
- }
760
- }
761
-
762
- await this.executeRouteWithData(endpoint, requestData, urlPathParams, logger);
763
- }
764
-
765
- private async generateFormFromSchema(
766
- schema: z.ZodTypeAny,
767
- title: string,
768
- logger: EndpointLogger,
769
- ): Promise<Record<string, string | number | boolean>> {
770
- try {
771
- const fields = schemaUIHandler.parseSchema(schema);
772
- const config = {
773
- title,
774
- fields,
775
- };
776
-
777
- const result = await schemaUIHandler.generateForm(config);
778
- return result as Record<string, string | number | boolean>;
779
- } catch (error) {
780
- logger.warn(`Failed to generate form for ${title}`, {
781
- errorMessage: parseError(error).message,
782
- });
783
- return {};
784
- }
785
- }
786
-
787
- private isEmptySchema(schema: z.ZodTypeAny | undefined): boolean {
788
- if (!schema) {
789
- return true;
790
- }
791
-
792
- const schemaWithDef = schema as {
793
- _def?: { typeName?: string; shape?: Record<string, z.ZodTypeAny> };
794
- };
795
- const typeName = schemaWithDef._def?.typeName;
796
- if (typeName === "ZodUndefined" || typeName === "ZodVoid") {
797
- return true;
798
- }
799
-
800
- if (typeName === "ZodObject") {
801
- const shape = schemaWithDef._def?.shape || {};
802
- return Object.keys(shape).length === 0;
803
- }
804
-
805
- return false;
806
- }
807
-
808
- private async getCreateApiEndpoint(
809
- route: CreateApiEndpointAny,
810
- logger: EndpointLogger,
811
- ): Promise<CreateApiEndpointAny | null> {
812
- const { definitionLoader } =
813
- await import("../../unified-interface/shared/endpoints/definition/loader");
814
-
815
- const routePath = route.path.join("/");
816
- const alias = route.aliases && route.aliases.length > 0 ? route.aliases[0] : undefined;
817
- const resolvedCommand = alias || routePath;
818
- const result = await definitionLoader.load({
819
- identifier: resolvedCommand,
820
- platform: this.session.platform,
821
- user: this.session.user,
822
- logger: logger,
823
- });
824
-
825
- if (!result.success) {
826
- logger.warn(`Failed to load endpoint definition for ${routePath}`, {
827
- error: result.message,
828
- });
829
- return null;
830
- }
831
-
832
- return result.data;
833
- }
834
-
835
- private async executeRouteWithData(
836
- route: CreateApiEndpointAny,
837
- requestData: Record<string, string | number | boolean>,
838
- urlPathParams: Record<string, string | number | boolean>,
839
- logger: EndpointLogger,
840
- ): Promise<void> {
841
- const session = this.getSession();
842
- // resolvedCommand can be either the alias or the full toolName
843
- const toolName = endpointToToolName(route);
844
- const resolvedCommand = (route.aliases && route.aliases[0]) || toolName;
845
- const context: RouteExecutionContext = {
846
- toolName: resolvedCommand,
847
- data: requestData,
848
- urlPathParams: urlPathParams,
849
- user: session.user,
850
- locale: session.locale,
851
- timestamp: Date.now(),
852
- options: session.options,
853
- logger: logger,
854
- platform: session.platform,
855
- };
856
-
857
- try {
858
- const result = await routeDelegationHandler.executeRoute(
859
- resolvedCommand,
860
- context,
861
- logger,
862
- session.locale,
863
- );
864
-
865
- const endpointDefinition = await this.getCreateApiEndpoint(route, logger);
866
-
867
- const formattedResult = routeDelegationHandler.formatResult(
868
- result,
869
- session.options?.output || "pretty",
870
- endpointDefinition,
871
- session.locale,
872
- session.options?.verbose || false,
873
- logger,
874
- );
875
-
876
- logger.info(formattedResult);
877
- } catch (error) {
878
- const { t } = simpleT(session.locale);
879
- const executionFailedText = t(
880
- "app.api.system.unifiedInterface.cli.vibe.interactive.navigation.executionFailed",
881
- );
882
- logger.error(executionFailedText, parseError(error));
883
- }
884
- }
885
-
886
- private async executeRouteBasic(
887
- route: CreateApiEndpointAny,
888
- logger: EndpointLogger,
889
- ): Promise<void> {
890
- const session = this.getSession();
891
- // resolvedCommand can be either the alias or the full toolName
892
- const toolName = endpointToToolName(route);
893
- const resolvedCommand = (route.aliases && route.aliases[0]) || toolName;
894
- const context: RouteExecutionContext = {
895
- toolName: resolvedCommand,
896
- data: {},
897
- user: session.user,
898
- locale: session.locale,
899
- timestamp: Date.now(),
900
- options: session.options,
901
- logger: logger,
902
- platform: session.platform,
903
- };
904
-
905
- try {
906
- const result = await routeDelegationHandler.executeRoute(
907
- resolvedCommand,
908
- context,
909
- logger,
910
- session.locale,
911
- );
912
-
913
- const endpointDefinition = await this.getCreateApiEndpoint(route, logger);
914
-
915
- const formattedResult = routeDelegationHandler.formatResult(
916
- result,
917
- session.options?.output || "pretty",
918
- endpointDefinition,
919
- session.locale,
920
- session.options?.verbose || false,
921
- logger,
922
- );
923
-
924
- logger.info(formattedResult);
925
- } catch (error) {
926
- const { t } = simpleT(session.locale);
927
- const executionFailedText = t(
928
- "app.api.system.unifiedInterface.cli.vibe.interactive.navigation.executionFailed",
929
- );
930
- logger.error(executionFailedText, parseError(error));
931
- }
932
- }
933
-
934
- private async navigationLoop(logger: EndpointLogger): Promise<void> {
935
- while (true) {
936
- try {
937
- const action = await this.showNavigationMenu(logger);
938
-
939
- if (action === InteractiveRepositoryImpl.EXIT_ACTION) {
940
- const { t } = simpleT(this.getSession().locale);
941
- const goodbyeText = t("app.api.system.unifiedInterface.cli.vibe.interactive.goodbye");
942
- logger.info(`\n${goodbyeText}\n`);
943
- break;
944
- } else if (action === "separator") {
945
- continue;
946
- } else if (action === "view_all") {
947
- await this.handleViewAllRoutes(logger);
948
- } else if (action === InteractiveRepositoryImpl.SETTINGS_ACTION) {
949
- await this.showSettingsMenu(logger);
950
- } else if (action === InteractiveRepositoryImpl.UP_ACTION) {
951
- this.navigateUp();
952
- } else if (action.startsWith(InteractiveRepositoryImpl.NAV_PREFIX)) {
953
- const targetPath = action.replace(InteractiveRepositoryImpl.NAV_PREFIX, "");
954
- this.navigateToPath(targetPath);
955
- } else if (action.startsWith(InteractiveRepositoryImpl.EXEC_PREFIX)) {
956
- const routePath = action.replace(InteractiveRepositoryImpl.EXEC_PREFIX, "");
957
- await this.executeRouteByPath(routePath, logger);
958
- }
959
- } catch (error) {
960
- const { t } = simpleT(this.getSession().locale);
961
- const navigationErrorText = t(
962
- "app.api.system.unifiedInterface.cli.vibe.interactive.navigation.navigationError",
963
- );
964
- logger.error(navigationErrorText, parseError(error));
965
- }
966
- }
967
- }
968
-
969
- /**
970
- * Handle "View All Routes" menu flow
971
- */
972
- private async handleViewAllRoutes(logger: EndpointLogger): Promise<void> {
973
- while (true) {
974
- const action = await this.showAllRoutesMenu();
975
-
976
- if (action === "back" || action === "separator") {
977
- break;
978
- } else if (action.startsWith(InteractiveRepositoryImpl.EXEC_PREFIX)) {
979
- const routePath = action.replace(InteractiveRepositoryImpl.EXEC_PREFIX, "");
980
- await this.executeRouteByPath(routePath, logger);
981
- break;
982
- }
983
- }
984
- }
985
-
986
- private async showSettingsMenu(logger: EndpointLogger): Promise<void> {
987
- const session = this.getSession();
988
- const { t } = simpleT(session.locale);
989
-
990
- const chooseSettingText = t(
991
- "app.api.system.unifiedInterface.cli.vibe.interactive.navigation.chooseSettingToModify",
992
- );
993
- const outputFormatText = t(
994
- "app.api.system.unifiedInterface.cli.vibe.interactive.navigation.outputFormatCurrent",
995
- );
996
- const verboseModeText = t(
997
- "app.api.system.unifiedInterface.cli.vibe.interactive.navigation.verboseModeCurrent",
998
- );
999
- const localeText = t(
1000
- "app.api.system.unifiedInterface.cli.vibe.interactive.navigation.localeCurrent",
1001
- );
1002
- const backToMainMenuText = t(
1003
- "app.api.system.unifiedInterface.cli.vibe.interactive.navigation.backToMainMenu",
1004
- );
1005
-
1006
- const setting = await select({
1007
- message: chooseSettingText,
1008
- choices: [
1009
- {
1010
- name: outputFormatText.replace(
1011
- InteractiveRepositoryImpl.CURRENT_PLACEHOLDER,
1012
- session.options?.output || "",
1013
- ),
1014
- value: "output",
1015
- },
1016
- {
1017
- name: verboseModeText.replace(
1018
- InteractiveRepositoryImpl.CURRENT_PLACEHOLDER,
1019
- String(session.options?.verbose || false),
1020
- ),
1021
- value: "verbose",
1022
- },
1023
- {
1024
- name: localeText.replace(
1025
- InteractiveRepositoryImpl.CURRENT_PLACEHOLDER,
1026
- session.locale || "",
1027
- ),
1028
- value: "locale",
1029
- },
1030
- { name: backToMainMenuText, value: "back" },
1031
- ],
1032
- });
1033
-
1034
- if (setting === "back") {
1035
- return;
1036
- }
1037
-
1038
- await this.updateSetting(setting, logger);
1039
- }
1040
-
1041
- private async updateSetting(setting: string, logger: EndpointLogger): Promise<void> {
1042
- const session = this.getSession();
1043
-
1044
- switch (setting) {
1045
- case "output": {
1046
- const { t } = simpleT(session.locale);
1047
- const chooseOutputFormatText = t(
1048
- "app.api.system.unifiedInterface.cli.vibe.interactive.navigation.chooseOutputFormat",
1049
- );
1050
- const prettyFormattedText = t(
1051
- "app.api.system.unifiedInterface.cli.vibe.interactive.navigation.prettyFormatted",
1052
- );
1053
- const jsonRawText = t(
1054
- "app.api.system.unifiedInterface.cli.vibe.interactive.navigation.jsonRaw",
1055
- );
1056
-
1057
- const output = await select({
1058
- message: chooseOutputFormatText,
1059
- choices: [
1060
- { name: prettyFormattedText, value: "pretty" },
1061
- { name: jsonRawText, value: "json" },
1062
- ],
1063
- default: session.options?.output,
1064
- });
1065
- session.options = {
1066
- ...session.options,
1067
- output: output as "json" | "pretty",
1068
- };
1069
- break;
1070
- }
1071
-
1072
- case "verbose": {
1073
- const { t } = simpleT(session.locale);
1074
- const enableVerboseOutputText = t(
1075
- "app.api.system.unifiedInterface.cli.vibe.interactive.navigation.enableVerboseOutput",
1076
- );
1077
-
1078
- const verbose = await confirm({
1079
- message: enableVerboseOutputText,
1080
- default: session.options?.verbose,
1081
- });
1082
- session.options = {
1083
- ...session.options,
1084
- verbose: verbose,
1085
- };
1086
- break;
1087
- }
1088
-
1089
- case "locale": {
1090
- const { t } = simpleT(session.locale);
1091
- const chooseLocaleText = t(
1092
- "app.api.system.unifiedInterface.cli.vibe.interactive.navigation.chooseLocale",
1093
- );
1094
- const englishGlobalText = t(
1095
- "app.api.system.unifiedInterface.cli.vibe.interactive.navigation.englishGlobal",
1096
- );
1097
- const germanText = t(
1098
- "app.api.system.unifiedInterface.cli.vibe.interactive.navigation.german",
1099
- );
1100
- const polishText = t(
1101
- "app.api.system.unifiedInterface.cli.vibe.interactive.navigation.polish",
1102
- );
1103
-
1104
- const localeChoices = [
1105
- { name: englishGlobalText, value: "en-GLOBAL" },
1106
- { name: germanText, value: "de-DE" },
1107
- { name: polishText, value: "pl-PL" },
1108
- ] satisfies Array<{ name: string; value: CountryLanguage }>;
1109
- // Only use as default if it's one of the available options
1110
- const defaultLocale = localeChoices.some((opt) => opt.value === session.locale)
1111
- ? session.locale
1112
- : undefined;
1113
- const locale = await select({
1114
- message: chooseLocaleText,
1115
- choices: localeChoices,
1116
- default: defaultLocale as (typeof localeChoices)[number]["value"] | undefined,
1117
- });
1118
- session.locale = locale as CountryLanguage;
1119
- break;
1120
- }
1121
- }
1122
-
1123
- const { t } = simpleT(session.locale);
1124
- const settingUpdatedText = t(
1125
- "app.api.system.unifiedInterface.cli.vibe.interactive.navigation.settingUpdated",
1126
- );
1127
- logger.info(settingUpdatedText);
1128
- }
1129
- }
1130
-
1131
- export const interactiveRepository: InteractiveRepository = new InteractiveRepositoryImpl();