@shipit-ai/cli 1.169.0 → 1.170.0

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 (385) hide show
  1. package/apis/json-schema/FeatureFlags.yaml +5 -0
  2. package/apis/json-schema/LiteLLMProxyConfig.yaml +14 -0
  3. package/apis/json-schema/Settings.yaml +3 -0
  4. package/dist/packages/core/src/application/ports/output/services/index.d.ts +1 -0
  5. package/dist/packages/core/src/application/ports/output/services/index.d.ts.map +1 -1
  6. package/dist/packages/core/src/application/ports/output/services/plugin-marketplace.interface.d.ts +46 -0
  7. package/dist/packages/core/src/application/ports/output/services/plugin-marketplace.interface.d.ts.map +1 -0
  8. package/dist/packages/core/src/application/ports/output/services/plugin-marketplace.interface.js +12 -0
  9. package/dist/packages/core/src/application/use-cases/plugins/add-marketplace.use-case.d.ts +16 -0
  10. package/dist/packages/core/src/application/use-cases/plugins/add-marketplace.use-case.d.ts.map +1 -0
  11. package/dist/packages/core/src/application/use-cases/plugins/add-marketplace.use-case.js +34 -0
  12. package/dist/packages/core/src/application/use-cases/plugins/fetch-plugin-catalog.use-case.d.ts +24 -0
  13. package/dist/packages/core/src/application/use-cases/plugins/fetch-plugin-catalog.use-case.d.ts.map +1 -0
  14. package/dist/packages/core/src/application/use-cases/plugins/fetch-plugin-catalog.use-case.js +52 -0
  15. package/dist/packages/core/src/application/use-cases/plugins/install-plugin.use-case.d.ts +17 -0
  16. package/dist/packages/core/src/application/use-cases/plugins/install-plugin.use-case.d.ts.map +1 -0
  17. package/dist/packages/core/src/application/use-cases/plugins/install-plugin.use-case.js +33 -0
  18. package/dist/packages/core/src/application/use-cases/plugins/toggle-plugin.use-case.d.ts +17 -0
  19. package/dist/packages/core/src/application/use-cases/plugins/toggle-plugin.use-case.d.ts.map +1 -0
  20. package/dist/packages/core/src/application/use-cases/plugins/toggle-plugin.use-case.js +33 -0
  21. package/dist/packages/core/src/application/use-cases/plugins/uninstall-plugin.use-case.d.ts +16 -0
  22. package/dist/packages/core/src/application/use-cases/plugins/uninstall-plugin.use-case.d.ts.map +1 -0
  23. package/dist/packages/core/src/application/use-cases/plugins/uninstall-plugin.use-case.js +33 -0
  24. package/dist/packages/core/src/domain/factories/settings-defaults.factory.d.ts.map +1 -1
  25. package/dist/packages/core/src/domain/factories/settings-defaults.factory.js +1 -0
  26. package/dist/packages/core/src/domain/generated/output.d.ts +25 -0
  27. package/dist/packages/core/src/domain/generated/output.d.ts.map +1 -1
  28. package/dist/packages/core/src/infrastructure/di/modules/services.module.d.ts.map +1 -1
  29. package/dist/packages/core/src/infrastructure/di/modules/services.module.js +13 -0
  30. package/dist/packages/core/src/infrastructure/di/modules/use-cases.module.d.ts.map +1 -1
  31. package/dist/packages/core/src/infrastructure/di/modules/use-cases.module.js +12 -0
  32. package/dist/packages/core/src/infrastructure/di/modules/web-tokens.module.d.ts.map +1 -1
  33. package/dist/packages/core/src/infrastructure/di/modules/web-tokens.module.js +22 -0
  34. package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/settings.mapper.d.ts +4 -0
  35. package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/settings.mapper.d.ts.map +1 -1
  36. package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/settings.mapper.js +18 -0
  37. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/054-add-litellm-proxy.d.ts +14 -0
  38. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/054-add-litellm-proxy.d.ts.map +1 -0
  39. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/054-add-litellm-proxy.js +28 -0
  40. package/dist/packages/core/src/infrastructure/services/plugin-marketplace/index.d.ts +4 -0
  41. package/dist/packages/core/src/infrastructure/services/plugin-marketplace/index.d.ts.map +1 -0
  42. package/dist/packages/core/src/infrastructure/services/plugin-marketplace/index.js +3 -0
  43. package/dist/packages/core/src/infrastructure/services/plugin-marketplace/plugin-marketplace.schema.d.ts +78 -0
  44. package/dist/packages/core/src/infrastructure/services/plugin-marketplace/plugin-marketplace.schema.d.ts.map +1 -0
  45. package/dist/packages/core/src/infrastructure/services/plugin-marketplace/plugin-marketplace.schema.js +46 -0
  46. package/dist/packages/core/src/infrastructure/services/plugin-marketplace/plugin-marketplace.service.d.ts +29 -0
  47. package/dist/packages/core/src/infrastructure/services/plugin-marketplace/plugin-marketplace.service.d.ts.map +1 -0
  48. package/dist/packages/core/src/infrastructure/services/plugin-marketplace/plugin-marketplace.service.js +147 -0
  49. package/dist/packages/core/src/infrastructure/services/plugin-marketplace/plugin-marketplace.validators.d.ts +11 -0
  50. package/dist/packages/core/src/infrastructure/services/plugin-marketplace/plugin-marketplace.validators.d.ts.map +1 -0
  51. package/dist/packages/core/src/infrastructure/services/plugin-marketplace/plugin-marketplace.validators.js +47 -0
  52. package/dist/src/presentation/web/app/actions/add-marketplace.d.ts +5 -0
  53. package/dist/src/presentation/web/app/actions/add-marketplace.d.ts.map +1 -0
  54. package/dist/src/presentation/web/app/actions/add-marketplace.js +11 -0
  55. package/dist/src/presentation/web/app/actions/fetch-plugin-catalog.d.ts +5 -0
  56. package/dist/src/presentation/web/app/actions/fetch-plugin-catalog.d.ts.map +1 -0
  57. package/dist/src/presentation/web/app/actions/fetch-plugin-catalog.js +11 -0
  58. package/dist/src/presentation/web/app/actions/install-plugin.d.ts +5 -0
  59. package/dist/src/presentation/web/app/actions/install-plugin.d.ts.map +1 -0
  60. package/dist/src/presentation/web/app/actions/install-plugin.js +11 -0
  61. package/dist/src/presentation/web/app/actions/toggle-plugin.d.ts +5 -0
  62. package/dist/src/presentation/web/app/actions/toggle-plugin.d.ts.map +1 -0
  63. package/dist/src/presentation/web/app/actions/toggle-plugin.js +11 -0
  64. package/dist/src/presentation/web/app/actions/uninstall-plugin.d.ts +5 -0
  65. package/dist/src/presentation/web/app/actions/uninstall-plugin.d.ts.map +1 -0
  66. package/dist/src/presentation/web/app/actions/uninstall-plugin.js +11 -0
  67. package/dist/src/presentation/web/app/plugins/page.d.ts +2 -0
  68. package/dist/src/presentation/web/app/plugins/page.d.ts.map +1 -0
  69. package/dist/src/presentation/web/app/plugins/page.js +23 -0
  70. package/dist/src/presentation/web/components/common/repository-node/repository-drawer.stories.d.ts.map +1 -1
  71. package/dist/src/presentation/web/components/common/repository-node/repository-drawer.stories.js +1 -0
  72. package/dist/src/presentation/web/components/features/plugins/plugin-card.d.ts +9 -0
  73. package/dist/src/presentation/web/components/features/plugins/plugin-card.d.ts.map +1 -0
  74. package/dist/src/presentation/web/components/features/plugins/plugin-card.js +15 -0
  75. package/dist/src/presentation/web/components/features/plugins/plugin-card.stories.d.ts +17 -0
  76. package/dist/src/presentation/web/components/features/plugins/plugin-card.stories.d.ts.map +1 -0
  77. package/dist/src/presentation/web/components/features/plugins/plugin-card.stories.js +60 -0
  78. package/dist/src/presentation/web/components/features/plugins/plugin-detail-drawer.d.ts +11 -0
  79. package/dist/src/presentation/web/components/features/plugins/plugin-detail-drawer.d.ts.map +1 -0
  80. package/dist/src/presentation/web/components/features/plugins/plugin-detail-drawer.js +33 -0
  81. package/dist/src/presentation/web/components/features/plugins/plugin-detail-drawer.stories.d.ts +18 -0
  82. package/dist/src/presentation/web/components/features/plugins/plugin-detail-drawer.stories.d.ts.map +1 -0
  83. package/dist/src/presentation/web/components/features/plugins/plugin-detail-drawer.stories.js +51 -0
  84. package/dist/src/presentation/web/components/features/plugins/plugins-page-client.d.ts +6 -0
  85. package/dist/src/presentation/web/components/features/plugins/plugins-page-client.d.ts.map +1 -0
  86. package/dist/src/presentation/web/components/features/plugins/plugins-page-client.js +115 -0
  87. package/dist/src/presentation/web/components/features/plugins/plugins-page-client.stories.d.ts +12 -0
  88. package/dist/src/presentation/web/components/features/plugins/plugins-page-client.stories.d.ts.map +1 -0
  89. package/dist/src/presentation/web/components/features/plugins/plugins-page-client.stories.js +24 -0
  90. package/dist/src/presentation/web/components/features/settings/feature-flags-settings-section.d.ts.map +1 -1
  91. package/dist/src/presentation/web/components/features/settings/feature-flags-settings-section.js +5 -0
  92. package/dist/src/presentation/web/components/features/settings/feature-flags-settings-section.stories.d.ts.map +1 -1
  93. package/dist/src/presentation/web/components/features/settings/feature-flags-settings-section.stories.js +2 -0
  94. package/dist/src/presentation/web/components/features/settings/litellm-proxy-settings-section.d.ts +6 -0
  95. package/dist/src/presentation/web/components/features/settings/litellm-proxy-settings-section.d.ts.map +1 -0
  96. package/dist/src/presentation/web/components/features/settings/litellm-proxy-settings-section.js +76 -0
  97. package/dist/src/presentation/web/components/features/settings/litellm-proxy-settings-section.stories.d.ts +15 -0
  98. package/dist/src/presentation/web/components/features/settings/litellm-proxy-settings-section.stories.d.ts.map +1 -0
  99. package/dist/src/presentation/web/components/features/settings/litellm-proxy-settings-section.stories.js +29 -0
  100. package/dist/src/presentation/web/components/features/settings/settings-page-client.d.ts.map +1 -1
  101. package/dist/src/presentation/web/components/features/settings/settings-page-client.js +4 -2
  102. package/dist/src/presentation/web/components/features/settings/settings-page-client.stories.d.ts.map +1 -1
  103. package/dist/src/presentation/web/components/features/settings/settings-page-client.stories.js +1 -0
  104. package/dist/src/presentation/web/components/layouts/app-sidebar/app-sidebar.d.ts.map +1 -1
  105. package/dist/src/presentation/web/components/layouts/app-sidebar/app-sidebar.js +2 -2
  106. package/dist/src/presentation/web/components/layouts/app-sidebar/app-sidebar.stories.d.ts.map +1 -1
  107. package/dist/src/presentation/web/components/layouts/app-sidebar/app-sidebar.stories.js +1 -0
  108. package/dist/src/presentation/web/hooks/feature-flags-context.d.ts.map +1 -1
  109. package/dist/src/presentation/web/hooks/feature-flags-context.js +1 -0
  110. package/dist/src/presentation/web/lib/feature-flags.d.ts +2 -0
  111. package/dist/src/presentation/web/lib/feature-flags.d.ts.map +1 -1
  112. package/dist/src/presentation/web/lib/feature-flags.js +6 -0
  113. package/dist/translations/ar/web.json +39 -2
  114. package/dist/translations/de/web.json +39 -2
  115. package/dist/translations/en/web.json +39 -2
  116. package/dist/translations/es/web.json +39 -2
  117. package/dist/translations/fr/web.json +39 -2
  118. package/dist/translations/he/web.json +39 -2
  119. package/dist/translations/pt/web.json +39 -2
  120. package/dist/translations/ru/web.json +39 -2
  121. package/dist/tsconfig.build.tsbuildinfo +1 -1
  122. package/package.json +1 -1
  123. package/web/.next/BUILD_ID +1 -1
  124. package/web/.next/app-path-routes-manifest.json +1 -0
  125. package/web/.next/build-manifest.json +3 -3
  126. package/web/.next/fallback-build-manifest.json +3 -3
  127. package/web/.next/prerender-manifest.json +3 -3
  128. package/web/.next/required-server-files.js +2 -2
  129. package/web/.next/required-server-files.json +2 -2
  130. package/web/.next/routes-manifest.json +6 -0
  131. package/web/.next/server/app/(dashboard)/@drawer/adopt/page/server-reference-manifest.json +29 -29
  132. package/web/.next/server/app/(dashboard)/@drawer/adopt/page.js.nft.json +1 -1
  133. package/web/.next/server/app/(dashboard)/@drawer/adopt/page_client-reference-manifest.js +1 -1
  134. package/web/.next/server/app/(dashboard)/@drawer/chat/page/server-reference-manifest.json +27 -27
  135. package/web/.next/server/app/(dashboard)/@drawer/chat/page.js.nft.json +1 -1
  136. package/web/.next/server/app/(dashboard)/@drawer/chat/page_client-reference-manifest.js +1 -1
  137. package/web/.next/server/app/(dashboard)/@drawer/create/page/server-reference-manifest.json +31 -31
  138. package/web/.next/server/app/(dashboard)/@drawer/create/page.js.nft.json +1 -1
  139. package/web/.next/server/app/(dashboard)/@drawer/create/page_client-reference-manifest.js +1 -1
  140. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page/server-reference-manifest.json +37 -37
  141. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.js.nft.json +1 -1
  142. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
  143. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page/server-reference-manifest.json +37 -37
  144. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js.nft.json +1 -1
  145. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page_client-reference-manifest.js +1 -1
  146. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page/server-reference-manifest.json +28 -28
  147. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page.js.nft.json +1 -1
  148. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page_client-reference-manifest.js +1 -1
  149. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/server-reference-manifest.json +28 -28
  150. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js.nft.json +1 -1
  151. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  152. package/web/.next/server/app/(dashboard)/chat/page/server-reference-manifest.json +27 -27
  153. package/web/.next/server/app/(dashboard)/chat/page.js.nft.json +1 -1
  154. package/web/.next/server/app/(dashboard)/chat/page_client-reference-manifest.js +1 -1
  155. package/web/.next/server/app/(dashboard)/create/page/server-reference-manifest.json +31 -31
  156. package/web/.next/server/app/(dashboard)/create/page.js.nft.json +1 -1
  157. package/web/.next/server/app/(dashboard)/create/page_client-reference-manifest.js +1 -1
  158. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page/server-reference-manifest.json +37 -37
  159. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page.js.nft.json +1 -1
  160. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
  161. package/web/.next/server/app/(dashboard)/feature/[featureId]/page/server-reference-manifest.json +37 -37
  162. package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js.nft.json +1 -1
  163. package/web/.next/server/app/(dashboard)/feature/[featureId]/page_client-reference-manifest.js +1 -1
  164. package/web/.next/server/app/(dashboard)/page/server-reference-manifest.json +27 -27
  165. package/web/.next/server/app/(dashboard)/page.js.nft.json +1 -1
  166. package/web/.next/server/app/(dashboard)/page_client-reference-manifest.js +1 -1
  167. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page/server-reference-manifest.json +28 -28
  168. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page.js.nft.json +1 -1
  169. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page_client-reference-manifest.js +1 -1
  170. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/server-reference-manifest.json +28 -28
  171. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js.nft.json +1 -1
  172. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  173. package/web/.next/server/app/_global-error.html +1 -1
  174. package/web/.next/server/app/_global-error.rsc +1 -1
  175. package/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  176. package/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  177. package/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  178. package/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  179. package/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  180. package/web/.next/server/app/_not-found/page/server-reference-manifest.json +6 -6
  181. package/web/.next/server/app/_not-found/page.js.nft.json +1 -1
  182. package/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  183. package/web/.next/server/app/api/attachments/preview/route.js.nft.json +1 -1
  184. package/web/.next/server/app/api/dialog/pick-files/route.js.nft.json +1 -1
  185. package/web/.next/server/app/api/evidence/route.js.nft.json +1 -1
  186. package/web/.next/server/app/api/graph-data/route.js +1 -1
  187. package/web/.next/server/app/api/graph-data/route.js.nft.json +1 -1
  188. package/web/.next/server/app/api/interactive/chat/[featureId]/messages/route.js +1 -1
  189. package/web/.next/server/app/api/interactive/chat/[featureId]/messages/route.js.nft.json +1 -1
  190. package/web/.next/server/app/api/sessions-batch/route.js +1 -1
  191. package/web/.next/server/app/api/sessions-batch/route.js.nft.json +1 -1
  192. package/web/.next/server/app/plugins/page/app-paths-manifest.json +3 -0
  193. package/web/.next/server/app/plugins/page/build-manifest.json +18 -0
  194. package/web/.next/server/app/plugins/page/next-font-manifest.json +10 -0
  195. package/web/.next/server/app/plugins/page/react-loadable-manifest.json +8 -0
  196. package/web/.next/server/app/plugins/page/server-reference-manifest.json +185 -0
  197. package/web/.next/server/app/plugins/page.js +17 -0
  198. package/web/.next/server/app/plugins/page.js.map +5 -0
  199. package/web/.next/server/app/plugins/page.js.nft.json +1 -0
  200. package/web/.next/server/app/plugins/page_client-reference-manifest.js +3 -0
  201. package/web/.next/server/app/settings/page/server-reference-manifest.json +34 -22
  202. package/web/.next/server/app/settings/page.js +1 -1
  203. package/web/.next/server/app/settings/page.js.nft.json +1 -1
  204. package/web/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  205. package/web/.next/server/app/skills/page/server-reference-manifest.json +11 -11
  206. package/web/.next/server/app/skills/page.js.nft.json +1 -1
  207. package/web/.next/server/app/skills/page_client-reference-manifest.js +1 -1
  208. package/web/.next/server/app/tools/page/server-reference-manifest.json +11 -11
  209. package/web/.next/server/app/tools/page.js.nft.json +1 -1
  210. package/web/.next/server/app/tools/page_client-reference-manifest.js +1 -1
  211. package/web/.next/server/app/version/page/server-reference-manifest.json +6 -6
  212. package/web/.next/server/app/version/page.js.nft.json +1 -1
  213. package/web/.next/server/app/version/page_client-reference-manifest.js +1 -1
  214. package/web/.next/server/app-paths-manifest.json +1 -0
  215. package/web/.next/server/chunks/11es_next_dist_esm_build_templates_app-route_067cwst.js.map +1 -1
  216. package/web/.next/server/chunks/{[root-of-the-server]__0zu_byw._.js → [root-of-the-server]__07suer1._.js} +2 -2
  217. package/web/.next/server/chunks/{[root-of-the-server]__0u1jyv9._.js → [root-of-the-server]__0sgzo7y._.js} +2 -2
  218. package/web/.next/server/chunks/[root-of-the-server]__0tb~wwk._.js +1 -1
  219. package/web/.next/server/chunks/{[root-of-the-server]__08cpfre._.js → [root-of-the-server]__0uxlr84._.js} +2 -2
  220. package/web/.next/server/chunks/ssr/0j.8_web_components_common_control-center-drawer_create-drawer-client_tsx_0g70fc5._.js +1 -1
  221. package/web/.next/server/chunks/ssr/0j.8_web_components_common_control-center-drawer_create-drawer-client_tsx_0g70fc5._.js.map +1 -1
  222. package/web/.next/server/chunks/ssr/0j.8_web_components_common_control-center-drawer_feature-drawer-client_tsx_104cna.._.js +2 -2
  223. package/web/.next/server/chunks/ssr/0j.8_web_components_common_control-center-drawer_feature-drawer-client_tsx_104cna.._.js.map +1 -1
  224. package/web/.next/server/chunks/ssr/0ukq_presentation_web_components_features_settings_settings-page-client_tsx_0j1uius._.js +1 -1
  225. package/web/.next/server/chunks/ssr/0ukq_presentation_web_components_features_settings_settings-page-client_tsx_0j1uius._.js.map +1 -1
  226. package/web/.next/server/chunks/ssr/11es_next_dist_esm_build_templates_app-page_0y6lfp8.js +4 -0
  227. package/web/.next/server/chunks/ssr/11es_next_dist_esm_build_templates_app-page_0y6lfp8.js.map +1 -0
  228. package/web/.next/server/chunks/ssr/11y9_components_common_control-center-drawer_repository-drawer-client_tsx_09z.znp._.js +1 -1
  229. package/web/.next/server/chunks/ssr/11y9_components_common_control-center-drawer_repository-drawer-client_tsx_09z.znp._.js.map +1 -1
  230. package/web/.next/server/chunks/ssr/{_04s_q5r._.js → 12k._sonner_dist_index_mjs_0-vmpk5._.js} +2 -2
  231. package/web/.next/server/chunks/ssr/12k._sonner_dist_index_mjs_0-vmpk5._.js.map +1 -0
  232. package/web/.next/server/chunks/ssr/{[root-of-the-server]__0rvrr1j._.js → [root-of-the-server]__0.5ojmt._.js} +2 -2
  233. package/web/.next/server/chunks/ssr/[root-of-the-server]__0.5ojmt._.js.map +1 -0
  234. package/web/.next/server/chunks/ssr/[root-of-the-server]__04h~gav._.js +3 -0
  235. package/web/.next/server/chunks/ssr/[root-of-the-server]__04h~gav._.js.map +1 -0
  236. package/web/.next/server/chunks/ssr/[root-of-the-server]__05_qc0n._.js +1 -1
  237. package/web/.next/server/chunks/ssr/[root-of-the-server]__05_qc0n._.js.map +1 -1
  238. package/web/.next/server/chunks/ssr/[root-of-the-server]__0ge~xny._.js +1 -1
  239. package/web/.next/server/chunks/ssr/[root-of-the-server]__0ge~xny._.js.map +1 -1
  240. package/web/.next/server/chunks/ssr/[root-of-the-server]__0qda~yi._.js +1 -1
  241. package/web/.next/server/chunks/ssr/[root-of-the-server]__0qda~yi._.js.map +1 -1
  242. package/web/.next/server/chunks/ssr/[root-of-the-server]__0rv1gci._.js +1 -1
  243. package/web/.next/server/chunks/ssr/[root-of-the-server]__0tq2syh._.js +1 -1
  244. package/web/.next/server/chunks/ssr/[root-of-the-server]__0t~u8sd._.js +1 -1
  245. package/web/.next/server/chunks/ssr/[root-of-the-server]__0t~u8sd._.js.map +1 -1
  246. package/web/.next/server/chunks/ssr/[root-of-the-server]__0~v1~b9._.js +3 -0
  247. package/web/.next/server/chunks/ssr/[root-of-the-server]__0~v1~b9._.js.map +1 -0
  248. package/web/.next/server/chunks/ssr/[root-of-the-server]__10tll_l._.js +1 -1
  249. package/web/.next/server/chunks/ssr/[root-of-the-server]__10tll_l._.js.map +1 -1
  250. package/web/.next/server/chunks/ssr/[root-of-the-server]__12j29w-._.js +1 -1
  251. package/web/.next/server/chunks/ssr/[root-of-the-server]__12j29w-._.js.map +1 -1
  252. package/web/.next/server/chunks/ssr/{_01qdxy2._.js → _0.ra89t._.js} +2 -2
  253. package/web/.next/server/chunks/ssr/{_01qdxy2._.js.map → _0.ra89t._.js.map} +1 -1
  254. package/web/.next/server/chunks/ssr/_01sesw0._.js +1 -1
  255. package/web/.next/server/chunks/ssr/_01sesw0._.js.map +1 -1
  256. package/web/.next/server/chunks/ssr/{_00u~.41._.js → _03x4h9e._.js} +2 -2
  257. package/web/.next/server/chunks/ssr/_03x4h9e._.js.map +1 -0
  258. package/web/.next/server/chunks/ssr/{_0~0jkp_._.js → _05fk0a4._.js} +2 -2
  259. package/web/.next/server/chunks/ssr/_05fk0a4._.js.map +1 -0
  260. package/web/.next/server/chunks/ssr/_069y.js._.js +2 -2
  261. package/web/.next/server/chunks/ssr/_069y.js._.js.map +1 -1
  262. package/web/.next/server/chunks/ssr/{_0wor25i._.js → _069ybyi._.js} +2 -2
  263. package/web/.next/server/chunks/ssr/{_0wor25i._.js.map → _069ybyi._.js.map} +1 -1
  264. package/web/.next/server/chunks/ssr/_083k45~._.js +3 -0
  265. package/web/.next/server/chunks/ssr/_083k45~._.js.map +1 -0
  266. package/web/.next/server/chunks/ssr/_0_17.-n._.js +3 -0
  267. package/web/.next/server/chunks/ssr/_0_17.-n._.js.map +1 -0
  268. package/web/.next/server/chunks/ssr/_0__4si~._.js +1 -1
  269. package/web/.next/server/chunks/ssr/_0__4si~._.js.map +1 -1
  270. package/web/.next/server/chunks/ssr/_0_m17kl._.js +1 -1
  271. package/web/.next/server/chunks/ssr/_0_m17kl._.js.map +1 -1
  272. package/web/.next/server/chunks/ssr/_0d4miu.._.js +1 -1
  273. package/web/.next/server/chunks/ssr/_0d4miu.._.js.map +1 -1
  274. package/web/.next/server/chunks/ssr/_0e8ern9._.js +1 -1
  275. package/web/.next/server/chunks/ssr/_0e8ern9._.js.map +1 -1
  276. package/web/.next/server/chunks/ssr/_0i~-084._.js +3 -0
  277. package/web/.next/server/chunks/ssr/_0i~-084._.js.map +1 -0
  278. package/web/.next/server/chunks/ssr/_0kt18~b._.js +3 -0
  279. package/web/.next/server/chunks/ssr/_0kt18~b._.js.map +1 -0
  280. package/web/.next/server/chunks/ssr/{_0hw~zvl._.js → _0o_oaao._.js} +2 -2
  281. package/web/.next/server/chunks/ssr/_0o_oaao._.js.map +1 -0
  282. package/web/.next/server/chunks/ssr/_0p3~u8u._.js +2 -2
  283. package/web/.next/server/chunks/ssr/_0p3~u8u._.js.map +1 -1
  284. package/web/.next/server/chunks/ssr/_0r.3n~3._.js +1 -1
  285. package/web/.next/server/chunks/ssr/_0r.3n~3._.js.map +1 -1
  286. package/web/.next/server/chunks/ssr/_0rcx2-c._.js +9 -0
  287. package/web/.next/server/chunks/ssr/_0rcx2-c._.js.map +1 -0
  288. package/web/.next/server/chunks/ssr/_0t59q8r._.js +1 -1
  289. package/web/.next/server/chunks/ssr/_0t59q8r._.js.map +1 -1
  290. package/web/.next/server/chunks/ssr/_0tcccbb._.js +1 -1
  291. package/web/.next/server/chunks/ssr/_0tcccbb._.js.map +1 -1
  292. package/web/.next/server/chunks/ssr/{_0pa1dkv._.js → _0u3d8.n._.js} +2 -2
  293. package/web/.next/server/chunks/ssr/_0u3d8.n._.js.map +1 -0
  294. package/web/.next/server/chunks/ssr/_0vyfc4b._.js +1 -1
  295. package/web/.next/server/chunks/ssr/_0vyfc4b._.js.map +1 -1
  296. package/web/.next/server/chunks/ssr/_0w-_hww._.js +1 -1
  297. package/web/.next/server/chunks/ssr/_0w-_hww._.js.map +1 -1
  298. package/web/.next/server/chunks/ssr/{_09r54oy._.js → _0ygafoy._.js} +2 -2
  299. package/web/.next/server/chunks/ssr/{_09r54oy._.js.map → _0ygafoy._.js.map} +1 -1
  300. package/web/.next/server/chunks/ssr/_0zk-h5w._.js +1 -1
  301. package/web/.next/server/chunks/ssr/_0zk-h5w._.js.map +1 -1
  302. package/web/.next/server/chunks/ssr/_0~7lwu_._.js +1 -1
  303. package/web/.next/server/chunks/ssr/_0~7lwu_._.js.map +1 -1
  304. package/web/.next/server/chunks/ssr/_10joy2y._.js +3 -0
  305. package/web/.next/server/chunks/ssr/_10joy2y._.js.map +1 -0
  306. package/web/.next/server/chunks/ssr/_1161g9x._.js +1 -1
  307. package/web/.next/server/chunks/ssr/_1161g9x._.js.map +1 -1
  308. package/web/.next/server/chunks/ssr/_12uy.45._.js +3 -0
  309. package/web/.next/server/chunks/ssr/_12uy.45._.js.map +1 -0
  310. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_plugins_page_actions_0rdndum.js +3 -0
  311. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_plugins_page_actions_0rdndum.js.map +1 -0
  312. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_05m2q~u.js +1 -1
  313. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_05m2q~u.js.map +1 -1
  314. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_0.6zk.t.js +1 -1
  315. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_0.6zk.t.js.map +1 -1
  316. package/web/.next/server/chunks/ssr/src_presentation_web_app_actions_approve-feature_ts_0pjb_re._.js +1 -1
  317. package/web/.next/server/chunks/ssr/src_presentation_web_app_actions_open-ide_ts_0w2wqvu._.js +1 -1
  318. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_0l3oxx9._.js +1 -1
  319. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_0l3oxx9._.js.map +1 -1
  320. package/web/.next/server/middleware-build-manifest.js +3 -3
  321. package/web/.next/server/next-font-manifest.js +1 -1
  322. package/web/.next/server/next-font-manifest.json +3 -0
  323. package/web/.next/server/pages/500.html +1 -1
  324. package/web/.next/server/server-reference-manifest.js +1 -1
  325. package/web/.next/server/server-reference-manifest.json +187 -61
  326. package/web/.next/static/chunks/{0dq50gtgaj63f.js → 01zrwm.x3kpdo.js} +1 -1
  327. package/web/.next/static/chunks/{12axopx66pocj.js → 024vi1xxw5ccj.js} +1 -1
  328. package/web/.next/static/chunks/{00m_fbc2z1gyi.js → 043zp6fpfaz07.js} +3 -3
  329. package/web/.next/static/chunks/{0fg~vc93spa9c.js → 07gal-~-zwagj.js} +1 -1
  330. package/web/.next/static/chunks/{1874_wt9rit96.js → 09lcrhxslt-u8.js} +1 -1
  331. package/web/.next/static/chunks/0aq9-lg.5r.nk.js +5 -0
  332. package/web/.next/static/chunks/{0in4l8mne5y~_.js → 0b2pi58fg3lt3.js} +1 -1
  333. package/web/.next/static/chunks/0dprl~vdhvhk7.js +1 -0
  334. package/web/.next/static/chunks/{11vbir.u7_zf7.js → 0e.8n42~fpeqa.js} +1 -1
  335. package/web/.next/static/chunks/0jt5jzg88skg5.js +1 -0
  336. package/web/.next/static/chunks/{0v~n9z6b639zm.js → 0jwq.mr-.ltps.js} +1 -1
  337. package/web/.next/static/chunks/0k8m.qcahm63g.js +1 -0
  338. package/web/.next/static/chunks/0lc0x8kcu46ae.js +1 -0
  339. package/web/.next/static/chunks/{121v1_d_dfk2k.js → 0lwuepa24tqxy.js} +1 -1
  340. package/web/.next/static/chunks/0lz-oq74e_ciu.js +1 -0
  341. package/web/.next/static/chunks/0nkujbu62z1jl.js +7 -0
  342. package/web/.next/static/chunks/{0u_27fdqa2jeg.js → 0rb5cx51f5u8h.js} +1 -1
  343. package/web/.next/static/chunks/0tdbctvrma.oi.js +1 -0
  344. package/web/.next/static/chunks/{0yibymrb2j05t.css → 0v7r7y~3e~oo6.css} +1 -1
  345. package/web/.next/static/chunks/{0k0j7anrbg-of.js → 0vq.b40jzhi7r.js} +1 -1
  346. package/web/.next/static/chunks/0wd.i4f822qoa.js +1 -0
  347. package/web/.next/static/chunks/{183ehj-b80a~o.js → 0xo.hi4px83w2.js} +1 -1
  348. package/web/.next/static/chunks/{09f2lesd_dd3~.js → 0xzs6jdtkmbic.js} +1 -1
  349. package/web/.next/static/chunks/{0o33urrd3lk~u.js → 0~4c6tnw7xnnl.js} +1 -1
  350. package/web/.next/static/chunks/16jgc8hqxrp.u.js +1 -0
  351. package/web/.next/server/chunks/ssr/[root-of-the-server]__0qxd563._.js +0 -3
  352. package/web/.next/server/chunks/ssr/[root-of-the-server]__0qxd563._.js.map +0 -1
  353. package/web/.next/server/chunks/ssr/[root-of-the-server]__0rvrr1j._.js.map +0 -1
  354. package/web/.next/server/chunks/ssr/_00u~.41._.js.map +0 -1
  355. package/web/.next/server/chunks/ssr/_04s_q5r._.js.map +0 -1
  356. package/web/.next/server/chunks/ssr/_0a_8rlj._.js +0 -3
  357. package/web/.next/server/chunks/ssr/_0a_8rlj._.js.map +0 -1
  358. package/web/.next/server/chunks/ssr/_0dy8.0k._.js +0 -3
  359. package/web/.next/server/chunks/ssr/_0dy8.0k._.js.map +0 -1
  360. package/web/.next/server/chunks/ssr/_0gdghcr._.js +0 -3
  361. package/web/.next/server/chunks/ssr/_0gdghcr._.js.map +0 -1
  362. package/web/.next/server/chunks/ssr/_0hw~zvl._.js.map +0 -1
  363. package/web/.next/server/chunks/ssr/_0l2~~pi._.js +0 -3
  364. package/web/.next/server/chunks/ssr/_0l2~~pi._.js.map +0 -1
  365. package/web/.next/server/chunks/ssr/_0n.magx._.js +0 -3
  366. package/web/.next/server/chunks/ssr/_0n.magx._.js.map +0 -1
  367. package/web/.next/server/chunks/ssr/_0pa1dkv._.js.map +0 -1
  368. package/web/.next/server/chunks/ssr/_0y8u4.e._.js +0 -9
  369. package/web/.next/server/chunks/ssr/_0y8u4.e._.js.map +0 -1
  370. package/web/.next/server/chunks/ssr/_0~0jkp_._.js.map +0 -1
  371. package/web/.next/static/chunks/0-ud~1jj7chzu.js +0 -7
  372. package/web/.next/static/chunks/0c0dau5pmseko.js +0 -1
  373. package/web/.next/static/chunks/0inayq2zzadja.js +0 -1
  374. package/web/.next/static/chunks/0n3kuj7t_-jzp.js +0 -1
  375. package/web/.next/static/chunks/0pt-d18f7zxvv.js +0 -1
  376. package/web/.next/static/chunks/0xwh.0u-dexsl.js +0 -1
  377. package/web/.next/static/chunks/103xnw203o9k1.js +0 -1
  378. package/web/.next/static/chunks/12pd180jp8zu..js +0 -5
  379. package/web/.next/static/chunks/13fcwhkw7dle2.js +0 -1
  380. /package/web/.next/server/chunks/{[root-of-the-server]__0zu_byw._.js.map → [root-of-the-server]__07suer1._.js.map} +0 -0
  381. /package/web/.next/server/chunks/{[root-of-the-server]__0u1jyv9._.js.map → [root-of-the-server]__0sgzo7y._.js.map} +0 -0
  382. /package/web/.next/server/chunks/{[root-of-the-server]__08cpfre._.js.map → [root-of-the-server]__0uxlr84._.js.map} +0 -0
  383. /package/web/.next/static/{SNdaKJ9fpre8tUMRe1jlA → kDUolP-Zj2jCRleGJJGX0}/_buildManifest.js +0 -0
  384. /package/web/.next/static/{SNdaKJ9fpre8tUMRe1jlA → kDUolP-Zj2jCRleGJJGX0}/_clientMiddlewareManifest.js +0 -0
  385. /package/web/.next/static/{SNdaKJ9fpre8tUMRe1jlA → kDUolP-Zj2jCRleGJJGX0}/_ssgManifest.js +0 -0
@@ -0,0 +1,76 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { useState, useTransition } from 'react';
4
+ import { Server, CheckCircle2, XCircle } from 'lucide-react';
5
+ import { toast } from 'sonner';
6
+ import { useTranslation } from 'react-i18next';
7
+ import { updateSettingsAction } from '../../../app/actions/update-settings.js';
8
+ import { addMarketplaceAction } from '../../../app/actions/add-marketplace.js';
9
+ import { SettingsSection, SettingsRow, SwitchRow } from './settings-section-utils.js';
10
+ import { Input } from '../../ui/input.js';
11
+ import { Button } from '../../ui/button.js';
12
+ export function LiteLLMProxySettingsSection({ settings }) {
13
+ const { t } = useTranslation('web');
14
+ const [, startTransition] = useTransition();
15
+ const [baseUrl, setBaseUrl] = useState(settings.litellmProxy?.baseUrl ?? '');
16
+ const [apiKey, setApiKey] = useState(settings.litellmProxy?.apiKey ?? '');
17
+ const [marketplaceEnabled, setMarketplaceEnabled] = useState(settings.litellmProxy?.marketplaceEnabled ?? false);
18
+ const [testStatus, setTestStatus] = useState('idle');
19
+ const [isTesting, setIsTesting] = useState(false);
20
+ const originalBaseUrl = settings.litellmProxy?.baseUrl ?? '';
21
+ const originalApiKey = settings.litellmProxy?.apiKey ?? '';
22
+ function save(payload) {
23
+ startTransition(async () => {
24
+ const result = await updateSettingsAction(payload);
25
+ if (!result.success) {
26
+ toast.error(result.error ?? t('settings.failedToSave'));
27
+ }
28
+ });
29
+ }
30
+ function buildPayload(overrides) {
31
+ return {
32
+ litellmProxy: {
33
+ baseUrl: overrides?.baseUrl ?? baseUrl,
34
+ apiKey: overrides?.apiKey ?? apiKey,
35
+ marketplaceEnabled: overrides?.marketplaceEnabled ?? marketplaceEnabled,
36
+ },
37
+ };
38
+ }
39
+ async function handleTestConnection() {
40
+ if (!baseUrl)
41
+ return;
42
+ setIsTesting(true);
43
+ setTestStatus('idle');
44
+ try {
45
+ const marketplaceUrl = `${baseUrl.replace(/\/+$/, '')}/claude-code/marketplace.json`;
46
+ const result = await addMarketplaceAction(marketplaceUrl);
47
+ setTestStatus(result.success ? 'success' : 'failed');
48
+ if (result.success) {
49
+ toast.success(t('settings.litellmProxy.testSuccess'));
50
+ }
51
+ else {
52
+ toast.error(t('settings.litellmProxy.testFailed'));
53
+ }
54
+ }
55
+ catch {
56
+ setTestStatus('failed');
57
+ toast.error(t('settings.litellmProxy.testFailed'));
58
+ }
59
+ finally {
60
+ setIsTesting(false);
61
+ }
62
+ }
63
+ return (_jsxs(SettingsSection, { icon: Server, title: t('settings.litellmProxy.title'), description: t('settings.litellmProxy.description'), testId: "litellm-proxy-settings-section", tooltip: t('settings.litellmProxy.hint'), children: [_jsx(SettingsRow, { label: t('settings.litellmProxy.baseUrl'), description: t('settings.litellmProxy.baseUrlDescription'), tooltip: "The base URL of your LiteLLM proxy server. This is used to fetch the plugin marketplace catalog and route model requests.", htmlFor: "litellm-proxy-url", children: _jsx(Input, { id: "litellm-proxy-url", "data-testid": "litellm-proxy-url-input", type: "text", placeholder: "http://localhost:4000", value: baseUrl, onChange: (e) => {
64
+ setBaseUrl(e.target.value);
65
+ setTestStatus('idle');
66
+ }, onBlur: () => {
67
+ if (baseUrl !== originalBaseUrl)
68
+ save(buildPayload({ baseUrl }));
69
+ }, className: "w-64 text-xs" }) }), _jsx(SettingsRow, { label: t('settings.litellmProxy.apiKey'), description: t('settings.litellmProxy.apiKeyDescription'), tooltip: "A virtual API key for authenticating with the LiteLLM proxy. Stored locally alongside other agent credentials.", htmlFor: "litellm-api-key", children: _jsx(Input, { id: "litellm-api-key", "data-testid": "litellm-api-key-input", type: "password", placeholder: "sk-...", value: apiKey, onChange: (e) => setApiKey(e.target.value), onBlur: () => {
70
+ if (apiKey !== originalApiKey)
71
+ save(buildPayload({ apiKey }));
72
+ }, className: "w-64 text-xs" }) }), _jsx(SwitchRow, { label: t('settings.litellmProxy.marketplaceEnabled'), description: t('settings.litellmProxy.marketplaceEnabledDescription'), tooltip: "When enabled, the plugin marketplace will fetch its catalog from this LiteLLM proxy instead of using built-in defaults.", id: "litellm-marketplace-enabled", testId: "switch-litellm-marketplace-enabled", checked: marketplaceEnabled, onChange: (v) => {
73
+ setMarketplaceEnabled(v);
74
+ save(buildPayload({ marketplaceEnabled: v }));
75
+ } }), _jsx(SettingsRow, { label: t('settings.litellmProxy.testConnection'), tooltip: "Attempt to connect to the proxy and fetch the marketplace catalog to verify the configuration is correct.", children: _jsxs("div", { className: "flex items-center gap-2", children: [_jsx(Button, { variant: "outline", size: "sm", "data-testid": "litellm-test-connection-btn", disabled: !baseUrl || isTesting, onClick: handleTestConnection, className: "cursor-pointer text-xs", children: isTesting ? t('settings.saving') : t('settings.litellmProxy.testConnection') }), testStatus === 'success' && (_jsx(CheckCircle2, { className: "h-4 w-4 text-emerald-500", "data-testid": "litellm-test-success" })), testStatus === 'failed' && (_jsx(XCircle, { className: "text-destructive h-4 w-4", "data-testid": "litellm-test-failed" }))] }) })] }));
76
+ }
@@ -0,0 +1,15 @@
1
+ import type { StoryObj } from '@storybook/react-vite';
2
+ import { LiteLLMProxySettingsSection } from './litellm-proxy-settings-section.js';
3
+ declare const meta: {
4
+ title: string;
5
+ component: typeof LiteLLMProxySettingsSection;
6
+ tags: string[];
7
+ parameters: {
8
+ layout: string;
9
+ };
10
+ };
11
+ export default meta;
12
+ type Story = StoryObj<typeof meta>;
13
+ export declare const Default: Story;
14
+ export declare const Configured: Story;
15
+ //# sourceMappingURL=litellm-proxy-settings-section.stories.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"litellm-proxy-settings-section.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/settings/litellm-proxy-settings-section.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAQ,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,2BAA2B,EAAE,MAAM,kCAAkC,CAAC;AAK/E,QAAA,MAAM,IAAI;;;;;;;CAO0C,CAAC;AAErD,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAEnC,eAAO,MAAM,OAAO,EAAE,KAIrB,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,KAWxB,CAAC"}
@@ -0,0 +1,29 @@
1
+ import { LiteLLMProxySettingsSection } from './litellm-proxy-settings-section.js';
2
+ import { createDefaultSettings } from '../../../../../../packages/core/src/domain/factories/settings-defaults.factory.js';
3
+ const baseSettings = createDefaultSettings();
4
+ const meta = {
5
+ title: 'Features/Settings/LiteLLMProxySettingsSection',
6
+ component: LiteLLMProxySettingsSection,
7
+ tags: ['autodocs'],
8
+ parameters: {
9
+ layout: 'padded',
10
+ },
11
+ };
12
+ export default meta;
13
+ export const Default = {
14
+ args: {
15
+ settings: baseSettings,
16
+ },
17
+ };
18
+ export const Configured = {
19
+ args: {
20
+ settings: {
21
+ ...baseSettings,
22
+ litellmProxy: {
23
+ baseUrl: 'http://localhost:4000',
24
+ apiKey: 'sk-litellm-proxy-key-1234',
25
+ marketplaceEnabled: true,
26
+ },
27
+ },
28
+ },
29
+ };
@@ -1 +1 @@
1
- {"version":3,"file":"settings-page-client.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/settings/settings-page-client.tsx"],"names":[],"mappings":"AA4BA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,yCAAyC,CAAC;AACxE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uCAAuC,CAAC;AAC/E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qCAAqC,CAAC;AAC3E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AAiBzE,MAAM,WAAW,uBAAuB;IACtC,QAAQ,EAAE,QAAQ,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,kBAAkB,CAAC,EAAE,iBAAiB,EAAE,CAAC;IACzC,gBAAgB,CAAC,EAAE,eAAe,EAAE,CAAC;IACrC,eAAe,CAAC,EAAE,cAAc,EAAE,CAAC;CACpC;AAED,wBAAgB,kBAAkB,CAAC,EACjC,QAAQ,EACR,YAAY,EACZ,UAAU,EACV,kBAAkB,EAClB,gBAAgB,EAChB,eAAe,GAChB,EAAE,uBAAuB,2CAqJzB"}
1
+ {"version":3,"file":"settings-page-client.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/settings/settings-page-client.tsx"],"names":[],"mappings":"AA8BA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,yCAAyC,CAAC;AACxE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uCAAuC,CAAC;AAC/E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qCAAqC,CAAC;AAC3E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AAkBzE,MAAM,WAAW,uBAAuB;IACtC,QAAQ,EAAE,QAAQ,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,kBAAkB,CAAC,EAAE,iBAAiB,EAAE,CAAC;IACzC,gBAAgB,CAAC,EAAE,eAAe,EAAE,CAAC;IACrC,eAAe,CAAC,EAAE,cAAc,EAAE,CAAC;CACpC;AAED,wBAAgB,kBAAkB,CAAC,EACjC,QAAQ,EACR,YAAY,EACZ,UAAU,EACV,kBAAkB,EAClB,gBAAgB,EAChB,eAAe,GAChB,EAAE,uBAAuB,2CA4JzB"}
@@ -1,7 +1,7 @@
1
1
  'use client';
2
2
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
3
  import { useState, useEffect } from 'react';
4
- import { Bot, Terminal, GitBranch, Activity, Bell, Flag, Database, Timer, MessageSquare, LayoutGrid, LayoutList, } from 'lucide-react';
4
+ import { Bot, Terminal, GitBranch, Activity, Bell, Flag, Database, Timer, MessageSquare, LayoutGrid, LayoutList, Server, } from 'lucide-react';
5
5
  import { useTranslation } from 'react-i18next';
6
6
  import { cn } from '../../../lib/utils.js';
7
7
  import { AgentSettingsSection } from './agent-settings-section.js';
@@ -14,6 +14,7 @@ import { FeatureFlagsSettingsSection } from './feature-flags-settings-section.js
14
14
  import { InteractiveAgentSettingsSection } from './interactive-agent-settings-section.js';
15
15
  import { FabLayoutSettingsSection } from './fab-layout-settings-section.js';
16
16
  import { DatabaseSettingsSection } from './database-settings-section.js';
17
+ import { LiteLLMProxySettingsSection } from './litellm-proxy-settings-section.js';
17
18
  const SECTIONS = [
18
19
  { id: 'agent', labelKey: 'settings.sections.agent', icon: Bot },
19
20
  { id: 'environment', labelKey: 'settings.sections.environment', icon: Terminal },
@@ -25,6 +26,7 @@ const SECTIONS = [
25
26
  { id: 'interactive-agent', labelKey: 'settings.sections.chat', icon: MessageSquare },
26
27
  { id: 'fab-layout', labelKey: 'settings.sections.layout', icon: LayoutGrid },
27
28
  { id: 'database', labelKey: 'settings.sections.database', icon: Database },
29
+ { id: 'litellm-proxy', labelKey: 'settings.sections.proxy', icon: Server },
28
30
  ];
29
31
  const TABS = [{ id: 'all', labelKey: 'settings.sections.all', icon: LayoutList }, ...SECTIONS];
30
32
  export function SettingsPageClient({ settings, shipitAiHome, dbFileSize, availableTerminals, availableEditors, availableShells, }) {
@@ -56,5 +58,5 @@ export function SettingsPageClient({ settings, shipitAiHome, dbFileSize, availab
56
58
  return (_jsxs("button", { type: "button", onClick: () => setActiveTab(tab.id), className: cn('flex cursor-pointer items-center gap-1 rounded-md px-2 py-1.5 text-[11px] font-bold transition-all', isActive
57
59
  ? 'bg-muted text-primary shadow-sm ring-1 ring-slate-200/70 dark:ring-slate-700/50'
58
60
  : 'text-muted-foreground hover:text-foreground hover:bg-accent/50'), children: [_jsx(TabIcon, { className: "h-3 w-3" }), _jsx("span", { className: "hidden sm:inline", children: t(tab.labelKey) })] }, tab.id));
59
- }) })] }), _jsxs("div", { className: "flex flex-col gap-3", children: [(activeTab === 'all' || activeTab === 'agent') && (_jsx("div", { id: "section-agent", className: "scroll-mt-18 rounded-lg", children: _jsx(AgentSettingsSection, { settings: settings }) })), (activeTab === 'all' || activeTab === 'environment') && (_jsx("div", { id: "section-environment", className: "scroll-mt-18 rounded-lg", children: _jsx(EnvironmentSettingsSection, { settings: settings, availableEditors: availableEditors, availableShells: availableShells, availableTerminals: availableTerminals }) })), (activeTab === 'all' || activeTab === 'workflow') && (_jsx("div", { id: "section-workflow", className: "scroll-mt-18 rounded-lg", children: _jsx(WorkflowSettingsSection, { settings: settings }) })), (activeTab === 'all' || activeTab === 'ci') && (_jsx("div", { id: "section-ci", className: "scroll-mt-18 rounded-lg", children: _jsx(CiSettingsSection, { settings: settings }) })), (activeTab === 'all' || activeTab === 'stage-timeouts') && (_jsx("div", { id: "section-stage-timeouts", className: "scroll-mt-18 rounded-lg", children: _jsx(StageTimeoutsSettingsSection, { settings: settings }) })), (activeTab === 'all' || activeTab === 'notifications') && (_jsx("div", { id: "section-notifications", className: "scroll-mt-18 rounded-lg", children: _jsx(NotificationSettingsSection, { settings: settings }) })), (activeTab === 'all' || activeTab === 'feature-flags') && (_jsx("div", { id: "section-feature-flags", className: "scroll-mt-18 rounded-lg", children: _jsx(FeatureFlagsSettingsSection, { settings: settings }) })), (activeTab === 'all' || activeTab === 'interactive-agent') && (_jsx("div", { id: "section-interactive-agent", className: "scroll-mt-18 rounded-lg", children: _jsx(InteractiveAgentSettingsSection, { settings: settings }) })), (activeTab === 'all' || activeTab === 'fab-layout') && (_jsx("div", { id: "section-fab-layout", className: "scroll-mt-18 rounded-lg", children: _jsx(FabLayoutSettingsSection, { settings: settings }) })), (activeTab === 'all' || activeTab === 'database') && (_jsx("div", { id: "section-database", className: "scroll-mt-18 rounded-lg", children: _jsx(DatabaseSettingsSection, { shipitAiHome: shipitAiHome, dbFileSize: dbFileSize }) }))] })] }));
61
+ }) })] }), _jsxs("div", { className: "flex flex-col gap-3", children: [(activeTab === 'all' || activeTab === 'agent') && (_jsx("div", { id: "section-agent", className: "scroll-mt-18 rounded-lg", children: _jsx(AgentSettingsSection, { settings: settings }) })), (activeTab === 'all' || activeTab === 'environment') && (_jsx("div", { id: "section-environment", className: "scroll-mt-18 rounded-lg", children: _jsx(EnvironmentSettingsSection, { settings: settings, availableEditors: availableEditors, availableShells: availableShells, availableTerminals: availableTerminals }) })), (activeTab === 'all' || activeTab === 'workflow') && (_jsx("div", { id: "section-workflow", className: "scroll-mt-18 rounded-lg", children: _jsx(WorkflowSettingsSection, { settings: settings }) })), (activeTab === 'all' || activeTab === 'ci') && (_jsx("div", { id: "section-ci", className: "scroll-mt-18 rounded-lg", children: _jsx(CiSettingsSection, { settings: settings }) })), (activeTab === 'all' || activeTab === 'stage-timeouts') && (_jsx("div", { id: "section-stage-timeouts", className: "scroll-mt-18 rounded-lg", children: _jsx(StageTimeoutsSettingsSection, { settings: settings }) })), (activeTab === 'all' || activeTab === 'notifications') && (_jsx("div", { id: "section-notifications", className: "scroll-mt-18 rounded-lg", children: _jsx(NotificationSettingsSection, { settings: settings }) })), (activeTab === 'all' || activeTab === 'feature-flags') && (_jsx("div", { id: "section-feature-flags", className: "scroll-mt-18 rounded-lg", children: _jsx(FeatureFlagsSettingsSection, { settings: settings }) })), (activeTab === 'all' || activeTab === 'interactive-agent') && (_jsx("div", { id: "section-interactive-agent", className: "scroll-mt-18 rounded-lg", children: _jsx(InteractiveAgentSettingsSection, { settings: settings }) })), (activeTab === 'all' || activeTab === 'fab-layout') && (_jsx("div", { id: "section-fab-layout", className: "scroll-mt-18 rounded-lg", children: _jsx(FabLayoutSettingsSection, { settings: settings }) })), (activeTab === 'all' || activeTab === 'database') && (_jsx("div", { id: "section-database", className: "scroll-mt-18 rounded-lg", children: _jsx(DatabaseSettingsSection, { shipitAiHome: shipitAiHome, dbFileSize: dbFileSize }) })), (activeTab === 'all' || activeTab === 'litellm-proxy') && (_jsx("div", { id: "section-litellm-proxy", className: "scroll-mt-18 rounded-lg", children: _jsx(LiteLLMProxySettingsSection, { settings: settings }) }))] })] }));
60
62
  }
@@ -1 +1 @@
1
- {"version":3,"file":"settings-page-client.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/settings/settings-page-client.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAQ,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAM5D,QAAA,MAAM,IAAI;;;;;;;CAOiC,CAAC;AAE5C,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAEnC,eAAO,MAAM,OAAO,EAAE,KAMrB,CAAC;AAEF,eAAO,MAAM,WAAW,EAAE,KAqBzB,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,KAa7B,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,KAsB5B,CAAC;AAEF,+FAA+F;AAC/F,eAAO,MAAM,aAAa,EAAE,KAW3B,CAAC"}
1
+ {"version":3,"file":"settings-page-client.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/settings/settings-page-client.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAQ,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAM5D,QAAA,MAAM,IAAI;;;;;;;CAOiC,CAAC;AAE5C,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAEnC,eAAO,MAAM,OAAO,EAAE,KAMrB,CAAC;AAEF,eAAO,MAAM,WAAW,EAAE,KAsBzB,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,KAa7B,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,KAsB5B,CAAC;AAEF,+FAA+F;AAC/F,eAAO,MAAM,aAAa,EAAE,KAW3B,CAAC"}
@@ -34,6 +34,7 @@ export const AllSections = {
34
34
  adoptBranch: false,
35
35
  gitRebaseSync: false,
36
36
  reactFileManager: false,
37
+ plugins: false,
37
38
  },
38
39
  },
39
40
  shipitAiHome: '/opt/shipit-ai',
@@ -1 +1 @@
1
- {"version":3,"file":"app-sidebar.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/layouts/app-sidebar/app-sidebar.tsx"],"names":[],"mappings":"AA0CA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2CAA2C,CAAC;AAI/E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAE7D,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,aAAa,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,YAAY,EAAE,iBAAiB,CAAC;IAEhC,cAAc,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;CAC9C;AAED,wBAAgB,UAAU,CAAC,EACzB,QAAQ,EACR,YAAY,EAEZ,cAAc,GACf,EAAE,eAAe,2CAsRjB"}
1
+ {"version":3,"file":"app-sidebar.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/layouts/app-sidebar/app-sidebar.tsx"],"names":[],"mappings":"AA2CA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2CAA2C,CAAC;AAI/E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAE7D,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,aAAa,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,YAAY,EAAE,iBAAiB,CAAC;IAEhC,cAAc,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;CAC9C;AAED,wBAAgB,UAAU,CAAC,EACzB,QAAQ,EACR,YAAY,EAEZ,cAAc,GACf,EAAE,eAAe,2CA8RjB"}
@@ -2,7 +2,7 @@
2
2
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
3
  import { useMemo } from 'react';
4
4
  import { usePathname } from 'next/navigation';
5
- import { Home, Moon, Sun, Volume2, VolumeOff, Zap, ZapOff, Wrench, Puzzle, Settings, } from 'lucide-react';
5
+ import { Home, Moon, Sun, Volume2, VolumeOff, Zap, ZapOff, Wrench, Puzzle, Blocks, Settings, } from 'lucide-react';
6
6
  import { useTranslation } from 'react-i18next';
7
7
  import { Sidebar, SidebarHeader, SidebarContent, SidebarFooter, SidebarMenu, SidebarMenuItem, SidebarMenuButton, useSidebar, } from '../../ui/sidebar.js';
8
8
  import { ScrollArea } from '../../ui/scroll-area.js';
@@ -60,7 +60,7 @@ export function AppSidebar({ features, featureFlags, onFeatureClick, }) {
60
60
  .filter((g) => g.items.length > 0),
61
61
  }));
62
62
  }, [features, t]);
63
- return (_jsxs(Sidebar, { "data-testid": "app-sidebar", "data-no-drawer-close": true, collapsible: "icon", side: i18n.dir() === 'rtl' ? 'right' : 'left', children: [_jsx(SidebarHeader, { children: _jsxs(SidebarMenu, { children: [_jsx(SidebarMenuItem, { children: _jsxs("div", { className: "flex h-10 items-center px-2 group-data-[collapsible=icon]:justify-center", children: [_jsx(ShipitAiLogo, { className: "drop-shadow-[0_0_4px_rgba(34,211,238,0.4)]", size: 32, variant: versionData.isDev ? 'dev' : 'default', isOpen: Boolean(showExpanded && expandedVisible) }), showExpanded && expandedVisible ? (_jsx(VersionBadge, { version: versionData.version, branch: versionData.branch || undefined, commitHash: versionData.commitHash || undefined, isDev: versionData.isDev, packageName: versionData.packageName, description: versionData.description, instancePath: versionData.instancePath || undefined })) : null] }) }), _jsx(SidebarNavItem, { icon: Home, label: t('navigation.controlCenter'), href: "/", active: pathname === '/' }), _jsx(SidebarNavItem, { icon: Wrench, label: t('navigation.tools'), href: "/tools", active: pathname === '/tools' }), featureFlags.skills ? (_jsx(SidebarNavItem, { icon: Puzzle, label: t('navigation.skills'), href: "/skills", active: pathname === '/skills' })) : null, _jsx(SidebarNavItem, { icon: Settings, label: t('navigation.settings'), href: "/settings", active: pathname === '/settings' })] }) }), _jsx(SidebarContent, { children: showExpanded ? (_jsx("div", { className: [
63
+ return (_jsxs(Sidebar, { "data-testid": "app-sidebar", "data-no-drawer-close": true, collapsible: "icon", side: i18n.dir() === 'rtl' ? 'right' : 'left', children: [_jsx(SidebarHeader, { children: _jsxs(SidebarMenu, { children: [_jsx(SidebarMenuItem, { children: _jsxs("div", { className: "flex h-10 items-center px-2 group-data-[collapsible=icon]:justify-center", children: [_jsx(ShipitAiLogo, { className: "drop-shadow-[0_0_4px_rgba(34,211,238,0.4)]", size: 32, variant: versionData.isDev ? 'dev' : 'default', isOpen: Boolean(showExpanded && expandedVisible) }), showExpanded && expandedVisible ? (_jsx(VersionBadge, { version: versionData.version, branch: versionData.branch || undefined, commitHash: versionData.commitHash || undefined, isDev: versionData.isDev, packageName: versionData.packageName, description: versionData.description, instancePath: versionData.instancePath || undefined })) : null] }) }), _jsx(SidebarNavItem, { icon: Home, label: t('navigation.controlCenter'), href: "/", active: pathname === '/' }), _jsx(SidebarNavItem, { icon: Wrench, label: t('navigation.tools'), href: "/tools", active: pathname === '/tools' }), featureFlags.skills ? (_jsx(SidebarNavItem, { icon: Puzzle, label: t('navigation.skills'), href: "/skills", active: pathname === '/skills' })) : null, featureFlags.plugins ? (_jsx(SidebarNavItem, { icon: Blocks, label: t('navigation.plugins'), href: "/plugins", active: pathname === '/plugins' })) : null, _jsx(SidebarNavItem, { icon: Settings, label: t('navigation.settings'), href: "/settings", active: pathname === '/settings' })] }) }), _jsx(SidebarContent, { children: showExpanded ? (_jsx("div", { className: [
64
64
  'flex min-h-0 flex-1 flex-col overflow-hidden transition-opacity duration-200 ease-out',
65
65
  '[&_[data-sidebar=group-label]]:!mt-0 [&_[data-sidebar=group-label]]:!opacity-100 [&_[data-sidebar=group-label]]:!transition-none',
66
66
  expandedVisible ? 'opacity-100' : 'opacity-0',
@@ -1 +1 @@
1
- {"version":3,"file":"app-sidebar.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/layouts/app-sidebar/app-sidebar.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAE5D,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAgB3C,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,UAAU,CAyBjC,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AA+DnC,eAAO,MAAM,OAAO,EAAE,KAIrB,CAAC;AAEF,eAAO,MAAM,oBAAoB,EAAE,KAIlC,CAAC;AAEF,eAAO,MAAM,SAAS,EAAE,KAOvB,CAAC;AAEF,eAAO,MAAM,KAAK,EAAE,KAInB,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,KAqB3B,CAAC;AAEF,eAAO,MAAM,OAAO,EAAE,KA6BrB,CAAC;AAEF,eAAO,MAAM,oBAAoB,EAAE,KAmElC,CAAC"}
1
+ {"version":3,"file":"app-sidebar.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/layouts/app-sidebar/app-sidebar.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAE5D,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAiB3C,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,UAAU,CAyBjC,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AA+DnC,eAAO,MAAM,OAAO,EAAE,KAIrB,CAAC;AAEF,eAAO,MAAM,oBAAoB,EAAE,KAIlC,CAAC;AAEF,eAAO,MAAM,SAAS,EAAE,KAOvB,CAAC;AAEF,eAAO,MAAM,KAAK,EAAE,KAInB,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,KAqB3B,CAAC;AAEF,eAAO,MAAM,OAAO,EAAE,KA6BrB,CAAC;AAEF,eAAO,MAAM,oBAAoB,EAAE,KAmElC,CAAC"}
@@ -9,6 +9,7 @@ const defaultFeatureFlags = {
9
9
  adoptBranch: false,
10
10
  gitRebaseSync: false,
11
11
  reactFileManager: false,
12
+ plugins: false,
12
13
  };
13
14
  const meta = {
14
15
  title: 'Layout/AppSidebar',
@@ -1 +1 @@
1
- {"version":3,"file":"feature-flags-context.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/web/hooks/feature-flags-context.tsx"],"names":[],"mappings":"AAEA,OAAO,EAA6B,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAClE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAc7D,UAAU,yBAAyB;IACjC,QAAQ,EAAE,SAAS,CAAC;IACpB,KAAK,EAAE,iBAAiB,CAAC;CAC1B;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,yBAAyB,2CAElF;AAED;;;GAGG;AACH,wBAAgB,eAAe,IAAI,iBAAiB,CAEnD"}
1
+ {"version":3,"file":"feature-flags-context.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/web/hooks/feature-flags-context.tsx"],"names":[],"mappings":"AAEA,OAAO,EAA6B,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAClE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAe7D,UAAU,yBAAyB;IACjC,QAAQ,EAAE,SAAS,CAAC;IACpB,KAAK,EAAE,iBAAiB,CAAC;CAC1B;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,yBAAyB,2CAElF;AAED;;;GAGG;AACH,wBAAgB,eAAe,IAAI,iBAAiB,CAEnD"}
@@ -9,6 +9,7 @@ const defaultFlags = {
9
9
  adoptBranch: false,
10
10
  gitRebaseSync: false,
11
11
  reactFileManager: false,
12
+ plugins: false,
12
13
  };
13
14
  const FeatureFlagsContext = createContext(defaultFlags);
14
15
  /**
@@ -13,6 +13,7 @@ export interface FeatureFlagsState {
13
13
  adoptBranch: boolean;
14
14
  gitRebaseSync: boolean;
15
15
  reactFileManager: boolean;
16
+ plugins: boolean;
16
17
  }
17
18
  export declare function getFeatureFlags(): Promise<FeatureFlagsState>;
18
19
  /**
@@ -27,5 +28,6 @@ export declare const featureFlags: {
27
28
  readonly adoptBranch: boolean;
28
29
  readonly gitRebaseSync: boolean;
29
30
  readonly reactFileManager: boolean;
31
+ readonly plugins: boolean;
30
32
  };
31
33
  //# sourceMappingURL=feature-flags.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"feature-flags.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/web/lib/feature-flags.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAsBH,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,OAAO,CAAC;IAChB,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,OAAO,CAAC;IACf,YAAY,EAAE,OAAO,CAAC;IACtB,WAAW,EAAE,OAAO,CAAC;IACrB,aAAa,EAAE,OAAO,CAAC;IACvB,gBAAgB,EAAE,OAAO,CAAC;CAC3B;AAED,wBAAsB,eAAe,IAAI,OAAO,CAAC,iBAAiB,CAAC,CA6BlE;AAED;;;GAGG;AACH,eAAO,MAAM,YAAY;;;;;;;;CAsBf,CAAC"}
1
+ {"version":3,"file":"feature-flags.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/web/lib/feature-flags.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAuBH,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,OAAO,CAAC;IAChB,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,OAAO,CAAC;IACf,YAAY,EAAE,OAAO,CAAC;IACtB,WAAW,EAAE,OAAO,CAAC;IACrB,aAAa,EAAE,OAAO,CAAC;IACvB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,wBAAsB,eAAe,IAAI,OAAO,CAAC,iBAAiB,CAAC,CA+BlE;AAED;;;GAGG;AACH,eAAO,MAAM,YAAY;;;;;;;;;CAyBf,CAAC"}
@@ -19,6 +19,7 @@ const ENV_FALLBACK_FLAGS = {
19
19
  adoptBranch: () => false,
20
20
  gitRebaseSync: () => false,
21
21
  reactFileManager: () => isEnabled(process.env.NEXT_PUBLIC_FLAG_REACT_FILE_MANAGER),
22
+ plugins: () => false,
22
23
  };
23
24
  export async function getFeatureFlags() {
24
25
  try {
@@ -34,6 +35,7 @@ export async function getFeatureFlags() {
34
35
  adoptBranch: flags.adoptBranch,
35
36
  gitRebaseSync: flags.gitRebaseSync,
36
37
  reactFileManager: flags.reactFileManager,
38
+ plugins: flags.plugins,
37
39
  };
38
40
  }
39
41
  }
@@ -48,6 +50,7 @@ export async function getFeatureFlags() {
48
50
  adoptBranch: ENV_FALLBACK_FLAGS.adoptBranch(),
49
51
  gitRebaseSync: ENV_FALLBACK_FLAGS.gitRebaseSync(),
50
52
  reactFileManager: ENV_FALLBACK_FLAGS.reactFileManager(),
53
+ plugins: ENV_FALLBACK_FLAGS.plugins(),
51
54
  };
52
55
  }
53
56
  /**
@@ -76,4 +79,7 @@ export const featureFlags = {
76
79
  get reactFileManager() {
77
80
  return ENV_FALLBACK_FLAGS.reactFileManager();
78
81
  },
82
+ get plugins() {
83
+ return ENV_FALLBACK_FLAGS.plugins();
84
+ },
79
85
  };
@@ -16,7 +16,8 @@
16
16
  "flags": "العلامات",
17
17
  "chat": "المحادثة",
18
18
  "layout": "التخطيط",
19
- "database": "قاعدة البيانات"
19
+ "database": "قاعدة البيانات",
20
+ "proxy": "وكيل LiteLLM"
20
21
  },
21
22
  "language": {
22
23
  "title": "اللغة",
@@ -209,8 +210,24 @@
209
210
  "gitRebaseSyncDescription": "تمكين عمليات إعادة التأسيس على main ومزامنة main",
210
211
  "reactFileManager": "مدير ملفات React",
211
212
  "reactFileManagerDescription": "استخدام مدير ملفات React المدمج بدلاً من منتقي مجلدات نظام التشغيل الأصلي",
213
+ "plugins": "Plugins Marketplace",
214
+ "pluginsDescription": "Enable the Claude Code plugins marketplace browser",
212
215
  "hint": "ميزات تجريبية لا تزال قيد التطوير. قم بتمكينها على مسؤوليتك — قد تتغير أو تُزال في الإصدارات المستقبلية. وضع التصحيح يضيف تسجيلًا مفصلاً مفيدًا لاستكشاف الأخطاء."
213
216
  },
217
+ "litellmProxy": {
218
+ "title": "LiteLLM Proxy",
219
+ "description": "Configure connection to a LiteLLM proxy for plugin marketplace access",
220
+ "baseUrl": "Proxy URL",
221
+ "baseUrlDescription": "Base URL of your LiteLLM proxy (e.g., http://localhost:4000)",
222
+ "apiKey": "API Key",
223
+ "apiKeyDescription": "Virtual API key for LiteLLM proxy authentication",
224
+ "marketplaceEnabled": "Enable Marketplace",
225
+ "marketplaceEnabledDescription": "Use this proxy for the plugin marketplace catalog",
226
+ "hint": "Connect to a LiteLLM proxy to browse and install Claude Code plugins from your organization's curated marketplace.",
227
+ "testConnection": "Test Connection",
228
+ "testSuccess": "Connection successful",
229
+ "testFailed": "Connection failed"
230
+ },
214
231
  "interactiveAgent": {
215
232
  "title": "الوكيل التفاعلي",
216
233
  "description": "إعدادات علامة المحادثة لجلسات الوكيل التفاعلية لكل ميزة",
@@ -251,7 +268,8 @@
251
268
  "settings": "الإعدادات",
252
269
  "sessions": "الجلسات",
253
270
  "tools": "الأدوات",
254
- "skills": "المهارات"
271
+ "skills": "المهارات",
272
+ "plugins": "Plugins"
255
273
  },
256
274
  "sidebar": {
257
275
  "features": "الميزات",
@@ -612,6 +630,25 @@
612
630
  "viewServerLogs": "عرض سجلات الخادم",
613
631
  "toggleSidebar": "تبديل الشريط الجانبي"
614
632
  },
633
+ "plugins": {
634
+ "title": "Plugins",
635
+ "search": "Search",
636
+ "searchPlaceholder": "Search plugins...",
637
+ "emptyState": "No plugins found",
638
+ "noProxy": "No LiteLLM proxy configured. Go to Settings to set up your proxy URL.",
639
+ "wrongAgent": "Plugin marketplace is only available for Claude Code agent type.",
640
+ "install": "Install",
641
+ "uninstall": "Uninstall",
642
+ "enable": "Enable",
643
+ "disable": "Disable",
644
+ "installed": "Installed",
645
+ "notInstalled": "Not Installed",
646
+ "allCategories": "All Categories",
647
+ "version": "Version",
648
+ "source": "Source",
649
+ "category": "Category",
650
+ "clearFilters": "Clear filters"
651
+ },
615
652
  "feature": {
616
653
  "create": {
617
654
  "permissionMode": "الأذونات",
@@ -16,7 +16,8 @@
16
16
  "flags": "Flags",
17
17
  "chat": "Chat",
18
18
  "layout": "Layout",
19
- "database": "Datenbank"
19
+ "database": "Datenbank",
20
+ "proxy": "LiteLLM Proxy"
20
21
  },
21
22
  "language": {
22
23
  "title": "Sprache",
@@ -195,8 +196,24 @@
195
196
  "gitRebaseSyncDescription": "Git Rebase-on-Main- und Sync-Main-Operationen aktivieren",
196
197
  "reactFileManager": "React-Dateimanager",
197
198
  "reactFileManagerDescription": "Den integrierten React-Dateimanager anstelle der nativen Betriebssystem-Ordnerauswahl verwenden",
199
+ "plugins": "Plugins Marketplace",
200
+ "pluginsDescription": "Enable the Claude Code plugins marketplace browser",
198
201
  "hint": "Experimentelle Features, die noch in Entwicklung sind. Aktivierung auf eigene Gefahr — sie können sich in zukünftigen Versionen ändern oder entfernt werden. Der Debug-Modus fügt ausführliche Protokollierung hinzu, die bei der Fehlerbehebung nützlich ist."
199
202
  },
203
+ "litellmProxy": {
204
+ "title": "LiteLLM Proxy",
205
+ "description": "Configure connection to a LiteLLM proxy for plugin marketplace access",
206
+ "baseUrl": "Proxy URL",
207
+ "baseUrlDescription": "Base URL of your LiteLLM proxy (e.g., http://localhost:4000)",
208
+ "apiKey": "API Key",
209
+ "apiKeyDescription": "Virtual API key for LiteLLM proxy authentication",
210
+ "marketplaceEnabled": "Enable Marketplace",
211
+ "marketplaceEnabledDescription": "Use this proxy for the plugin marketplace catalog",
212
+ "hint": "Connect to a LiteLLM proxy to browse and install Claude Code plugins from your organization's curated marketplace.",
213
+ "testConnection": "Test Connection",
214
+ "testSuccess": "Connection successful",
215
+ "testFailed": "Connection failed"
216
+ },
200
217
  "interactiveAgent": {
201
218
  "title": "Interaktiver Agent",
202
219
  "description": "Chat-Tab-Einstellungen für interaktive Agenten-Sitzungen pro Feature",
@@ -237,7 +254,8 @@
237
254
  "settings": "Einstellungen",
238
255
  "sessions": "Sitzungen",
239
256
  "tools": "Tools",
240
- "skills": "Skills"
257
+ "skills": "Skills",
258
+ "plugins": "Plugins"
241
259
  },
242
260
  "sidebar": {
243
261
  "features": "Features",
@@ -598,6 +616,25 @@
598
616
  "viewServerLogs": "Server-Logs anzeigen",
599
617
  "toggleSidebar": "Seitenleiste umschalten"
600
618
  },
619
+ "plugins": {
620
+ "title": "Plugins",
621
+ "search": "Search",
622
+ "searchPlaceholder": "Search plugins...",
623
+ "emptyState": "No plugins found",
624
+ "noProxy": "No LiteLLM proxy configured. Go to Settings to set up your proxy URL.",
625
+ "wrongAgent": "Plugin marketplace is only available for Claude Code agent type.",
626
+ "install": "Install",
627
+ "uninstall": "Uninstall",
628
+ "enable": "Enable",
629
+ "disable": "Disable",
630
+ "installed": "Installed",
631
+ "notInstalled": "Not Installed",
632
+ "allCategories": "All Categories",
633
+ "version": "Version",
634
+ "source": "Source",
635
+ "category": "Category",
636
+ "clearFilters": "Clear filters"
637
+ },
601
638
  "feature": {
602
639
  "create": {
603
640
  "permissionMode": "Rechte",
@@ -16,7 +16,8 @@
16
16
  "flags": "Flags",
17
17
  "chat": "Chat",
18
18
  "layout": "Layout",
19
- "database": "Database"
19
+ "database": "Database",
20
+ "proxy": "LiteLLM Proxy"
20
21
  },
21
22
  "language": {
22
23
  "title": "Language",
@@ -209,8 +210,24 @@
209
210
  "gitRebaseSyncDescription": "Enable git rebase-on-main and sync-main operations",
210
211
  "reactFileManager": "React File Manager",
211
212
  "reactFileManagerDescription": "Use the built-in React file manager instead of the native OS folder picker",
213
+ "plugins": "Plugins Marketplace",
214
+ "pluginsDescription": "Enable the Claude Code plugins marketplace browser",
212
215
  "hint": "Experimental features that are still under development. Enable at your own risk — they may change or be removed in future versions. Debug mode adds verbose logging useful for troubleshooting."
213
216
  },
217
+ "litellmProxy": {
218
+ "title": "LiteLLM Proxy",
219
+ "description": "Configure connection to a LiteLLM proxy for plugin marketplace access",
220
+ "baseUrl": "Proxy URL",
221
+ "baseUrlDescription": "Base URL of your LiteLLM proxy (e.g., http://localhost:4000)",
222
+ "apiKey": "API Key",
223
+ "apiKeyDescription": "Virtual API key for LiteLLM proxy authentication",
224
+ "marketplaceEnabled": "Enable Marketplace",
225
+ "marketplaceEnabledDescription": "Use this proxy for the plugin marketplace catalog",
226
+ "hint": "Connect to a LiteLLM proxy to browse and install Claude Code plugins from your organization's curated marketplace.",
227
+ "testConnection": "Test Connection",
228
+ "testSuccess": "Connection successful",
229
+ "testFailed": "Connection failed"
230
+ },
214
231
  "interactiveAgent": {
215
232
  "title": "Interactive Agent",
216
233
  "description": "Chat tab settings for per-feature interactive agent sessions",
@@ -251,7 +268,8 @@
251
268
  "settings": "Settings",
252
269
  "sessions": "Sessions",
253
270
  "tools": "Tools",
254
- "skills": "Skills"
271
+ "skills": "Skills",
272
+ "plugins": "Plugins"
255
273
  },
256
274
  "sidebar": {
257
275
  "features": "Features",
@@ -612,6 +630,25 @@
612
630
  "viewServerLogs": "View server logs",
613
631
  "toggleSidebar": "Toggle Sidebar"
614
632
  },
633
+ "plugins": {
634
+ "title": "Plugins",
635
+ "search": "Search",
636
+ "searchPlaceholder": "Search plugins...",
637
+ "emptyState": "No plugins found",
638
+ "noProxy": "No LiteLLM proxy configured. Go to Settings to set up your proxy URL.",
639
+ "wrongAgent": "Plugin marketplace is only available for Claude Code agent type.",
640
+ "install": "Install",
641
+ "uninstall": "Uninstall",
642
+ "enable": "Enable",
643
+ "disable": "Disable",
644
+ "installed": "Installed",
645
+ "notInstalled": "Not Installed",
646
+ "allCategories": "All Categories",
647
+ "version": "Version",
648
+ "source": "Source",
649
+ "category": "Category",
650
+ "clearFilters": "Clear filters"
651
+ },
615
652
  "feature": {
616
653
  "create": {
617
654
  "permissionMode": "Perms",
@@ -16,7 +16,8 @@
16
16
  "flags": "Opciones",
17
17
  "chat": "Chat",
18
18
  "layout": "Diseño",
19
- "database": "Base de datos"
19
+ "database": "Base de datos",
20
+ "proxy": "Proxy LiteLLM"
20
21
  },
21
22
  "language": {
22
23
  "title": "Idioma",
@@ -209,8 +210,24 @@
209
210
  "gitRebaseSyncDescription": "Habilitar operaciones de rebase-on-main y sync-main de git",
210
211
  "reactFileManager": "Administrador de archivos React",
211
212
  "reactFileManagerDescription": "Usar el administrador de archivos React integrado en lugar del selector de carpetas nativo del SO",
213
+ "plugins": "Plugins Marketplace",
214
+ "pluginsDescription": "Enable the Claude Code plugins marketplace browser",
212
215
  "hint": "Funcionalidades experimentales que aún están en desarrollo. Habilítalas bajo tu propio riesgo — pueden cambiar o ser eliminadas en versiones futuras. El modo de depuración agrega registro detallado útil para la resolución de problemas."
213
216
  },
217
+ "litellmProxy": {
218
+ "title": "LiteLLM Proxy",
219
+ "description": "Configure connection to a LiteLLM proxy for plugin marketplace access",
220
+ "baseUrl": "Proxy URL",
221
+ "baseUrlDescription": "Base URL of your LiteLLM proxy (e.g., http://localhost:4000)",
222
+ "apiKey": "API Key",
223
+ "apiKeyDescription": "Virtual API key for LiteLLM proxy authentication",
224
+ "marketplaceEnabled": "Enable Marketplace",
225
+ "marketplaceEnabledDescription": "Use this proxy for the plugin marketplace catalog",
226
+ "hint": "Connect to a LiteLLM proxy to browse and install Claude Code plugins from your organization's curated marketplace.",
227
+ "testConnection": "Test Connection",
228
+ "testSuccess": "Connection successful",
229
+ "testFailed": "Connection failed"
230
+ },
214
231
  "interactiveAgent": {
215
232
  "title": "Agente interactivo",
216
233
  "description": "Configuración de la pestaña de chat para sesiones de agente interactivo por funcionalidad",
@@ -251,7 +268,8 @@
251
268
  "settings": "Configuración",
252
269
  "sessions": "Sesiones",
253
270
  "tools": "Herramientas",
254
- "skills": "Habilidades"
271
+ "skills": "Habilidades",
272
+ "plugins": "Plugins"
255
273
  },
256
274
  "sidebar": {
257
275
  "features": "Funcionalidades",
@@ -612,6 +630,25 @@
612
630
  "viewServerLogs": "Ver logs del servidor",
613
631
  "toggleSidebar": "Alternar barra lateral"
614
632
  },
633
+ "plugins": {
634
+ "title": "Plugins",
635
+ "search": "Search",
636
+ "searchPlaceholder": "Search plugins...",
637
+ "emptyState": "No plugins found",
638
+ "noProxy": "No LiteLLM proxy configured. Go to Settings to set up your proxy URL.",
639
+ "wrongAgent": "Plugin marketplace is only available for Claude Code agent type.",
640
+ "install": "Install",
641
+ "uninstall": "Uninstall",
642
+ "enable": "Enable",
643
+ "disable": "Disable",
644
+ "installed": "Installed",
645
+ "notInstalled": "Not Installed",
646
+ "allCategories": "All Categories",
647
+ "version": "Version",
648
+ "source": "Source",
649
+ "category": "Category",
650
+ "clearFilters": "Clear filters"
651
+ },
615
652
  "feature": {
616
653
  "create": {
617
654
  "permissionMode": "Permisos",