@shipit-ai/cli 1.167.1 → 1.169.0-pr12.6d78faf

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 (560) 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/packages/core/src/infrastructure/services/tool-installer/tools/antigravity.json +1 -1
  53. package/dist/packages/core/src/infrastructure/services/tool-installer/tools/bash.json +1 -0
  54. package/dist/packages/core/src/infrastructure/services/tool-installer/tools/cursor-cli.json +1 -1
  55. package/dist/packages/core/src/infrastructure/services/tool-installer/tools/cursor.json +1 -1
  56. package/dist/packages/core/src/infrastructure/services/tool-installer/tools/fish.json +1 -0
  57. package/dist/packages/core/src/infrastructure/services/tool-installer/tools/powershell.json +1 -0
  58. package/dist/packages/core/src/infrastructure/services/tool-installer/tools/zsh.json +1 -0
  59. package/dist/src/presentation/web/app/actions/add-marketplace.d.ts +5 -0
  60. package/dist/src/presentation/web/app/actions/add-marketplace.d.ts.map +1 -0
  61. package/dist/src/presentation/web/app/actions/add-marketplace.js +11 -0
  62. package/dist/src/presentation/web/app/actions/fetch-plugin-catalog.d.ts +5 -0
  63. package/dist/src/presentation/web/app/actions/fetch-plugin-catalog.d.ts.map +1 -0
  64. package/dist/src/presentation/web/app/actions/fetch-plugin-catalog.js +11 -0
  65. package/dist/src/presentation/web/app/actions/install-plugin.d.ts +5 -0
  66. package/dist/src/presentation/web/app/actions/install-plugin.d.ts.map +1 -0
  67. package/dist/src/presentation/web/app/actions/install-plugin.js +11 -0
  68. package/dist/src/presentation/web/app/actions/toggle-plugin.d.ts +5 -0
  69. package/dist/src/presentation/web/app/actions/toggle-plugin.d.ts.map +1 -0
  70. package/dist/src/presentation/web/app/actions/toggle-plugin.js +11 -0
  71. package/dist/src/presentation/web/app/actions/uninstall-plugin.d.ts +5 -0
  72. package/dist/src/presentation/web/app/actions/uninstall-plugin.d.ts.map +1 -0
  73. package/dist/src/presentation/web/app/actions/uninstall-plugin.js +11 -0
  74. package/dist/src/presentation/web/app/layout.d.ts.map +1 -1
  75. package/dist/src/presentation/web/app/layout.js +15 -2
  76. package/dist/src/presentation/web/app/plugins/page.d.ts +2 -0
  77. package/dist/src/presentation/web/app/plugins/page.d.ts.map +1 -0
  78. package/dist/src/presentation/web/app/plugins/page.js +23 -0
  79. package/dist/src/presentation/web/components/common/base-drawer/base-drawer.d.ts.map +1 -1
  80. package/dist/src/presentation/web/components/common/base-drawer/base-drawer.js +4 -1
  81. package/dist/src/presentation/web/components/common/page-header/page-header.d.ts +3 -1
  82. package/dist/src/presentation/web/components/common/page-header/page-header.d.ts.map +1 -1
  83. package/dist/src/presentation/web/components/common/page-header/page-header.js +8 -2
  84. package/dist/src/presentation/web/components/common/repository-node/repository-drawer.stories.d.ts.map +1 -1
  85. package/dist/src/presentation/web/components/common/repository-node/repository-drawer.stories.js +1 -0
  86. package/dist/src/presentation/web/components/common/repository-node/repository-node.d.ts.map +1 -1
  87. package/dist/src/presentation/web/components/common/repository-node/repository-node.js +6 -1
  88. package/dist/src/presentation/web/components/common/shipit-ai-logo/shipit-ai-logo.d.ts +9 -1
  89. package/dist/src/presentation/web/components/common/shipit-ai-logo/shipit-ai-logo.d.ts.map +1 -1
  90. package/dist/src/presentation/web/components/common/shipit-ai-logo/shipit-ai-logo.js +12 -6
  91. package/dist/src/presentation/web/components/common/sidebar-collapse-toggle/sidebar-collapse-toggle.d.ts.map +1 -1
  92. package/dist/src/presentation/web/components/common/sidebar-collapse-toggle/sidebar-collapse-toggle.js +5 -1
  93. package/dist/src/presentation/web/components/common/sidebar-nav-item/sidebar-nav-item.d.ts.map +1 -1
  94. package/dist/src/presentation/web/components/common/sidebar-nav-item/sidebar-nav-item.js +15 -0
  95. package/dist/src/presentation/web/components/features/chat/ChatSheet.d.ts.map +1 -1
  96. package/dist/src/presentation/web/components/features/chat/ChatSheet.js +18 -5
  97. package/dist/src/presentation/web/components/features/control-center/control-center-empty-state.d.ts.map +1 -1
  98. package/dist/src/presentation/web/components/features/control-center/control-center-empty-state.js +1 -1
  99. package/dist/src/presentation/web/components/features/features-canvas/features-canvas.d.ts.map +1 -1
  100. package/dist/src/presentation/web/components/features/features-canvas/features-canvas.js +5 -1
  101. package/dist/src/presentation/web/components/features/plugins/plugin-card.d.ts +9 -0
  102. package/dist/src/presentation/web/components/features/plugins/plugin-card.d.ts.map +1 -0
  103. package/dist/src/presentation/web/components/features/plugins/plugin-card.js +15 -0
  104. package/dist/src/presentation/web/components/features/plugins/plugin-card.stories.d.ts +17 -0
  105. package/dist/src/presentation/web/components/features/plugins/plugin-card.stories.d.ts.map +1 -0
  106. package/dist/src/presentation/web/components/features/plugins/plugin-card.stories.js +60 -0
  107. package/dist/src/presentation/web/components/features/plugins/plugin-detail-drawer.d.ts +11 -0
  108. package/dist/src/presentation/web/components/features/plugins/plugin-detail-drawer.d.ts.map +1 -0
  109. package/dist/src/presentation/web/components/features/plugins/plugin-detail-drawer.js +33 -0
  110. package/dist/src/presentation/web/components/features/plugins/plugin-detail-drawer.stories.d.ts +18 -0
  111. package/dist/src/presentation/web/components/features/plugins/plugin-detail-drawer.stories.d.ts.map +1 -0
  112. package/dist/src/presentation/web/components/features/plugins/plugin-detail-drawer.stories.js +51 -0
  113. package/dist/src/presentation/web/components/features/plugins/plugins-page-client.d.ts +6 -0
  114. package/dist/src/presentation/web/components/features/plugins/plugins-page-client.d.ts.map +1 -0
  115. package/dist/src/presentation/web/components/features/plugins/plugins-page-client.js +115 -0
  116. package/dist/src/presentation/web/components/features/plugins/plugins-page-client.stories.d.ts +12 -0
  117. package/dist/src/presentation/web/components/features/plugins/plugins-page-client.stories.d.ts.map +1 -0
  118. package/dist/src/presentation/web/components/features/plugins/plugins-page-client.stories.js +24 -0
  119. package/dist/src/presentation/web/components/features/settings/agent-settings-section.d.ts +3 -3
  120. package/dist/src/presentation/web/components/features/settings/agent-settings-section.d.ts.map +1 -1
  121. package/dist/src/presentation/web/components/features/settings/agent-settings-section.js +23 -102
  122. package/dist/src/presentation/web/components/features/settings/agent-settings-section.stories.d.ts +2 -3
  123. package/dist/src/presentation/web/components/features/settings/agent-settings-section.stories.d.ts.map +1 -1
  124. package/dist/src/presentation/web/components/features/settings/agent-settings-section.stories.js +18 -22
  125. package/dist/src/presentation/web/components/features/settings/ci-settings-section.d.ts.map +1 -1
  126. package/dist/src/presentation/web/components/features/settings/ci-settings-section.js +14 -5
  127. package/dist/src/presentation/web/components/features/settings/database-settings-section.d.ts.map +1 -1
  128. package/dist/src/presentation/web/components/features/settings/database-settings-section.js +14 -4
  129. package/dist/src/presentation/web/components/features/settings/environment-settings-section.d.ts +9 -3
  130. package/dist/src/presentation/web/components/features/settings/environment-settings-section.d.ts.map +1 -1
  131. package/dist/src/presentation/web/components/features/settings/environment-settings-section.js +75 -65
  132. package/dist/src/presentation/web/components/features/settings/environment-settings-section.stories.d.ts.map +1 -1
  133. package/dist/src/presentation/web/components/features/settings/environment-settings-section.stories.js +20 -18
  134. package/dist/src/presentation/web/components/features/settings/fab-layout-settings-section.d.ts.map +1 -1
  135. package/dist/src/presentation/web/components/features/settings/fab-layout-settings-section.js +1 -1
  136. package/dist/src/presentation/web/components/features/settings/feature-flags-settings-section.d.ts +3 -3
  137. package/dist/src/presentation/web/components/features/settings/feature-flags-settings-section.d.ts.map +1 -1
  138. package/dist/src/presentation/web/components/features/settings/feature-flags-settings-section.js +53 -50
  139. package/dist/src/presentation/web/components/features/settings/feature-flags-settings-section.stories.d.ts.map +1 -1
  140. package/dist/src/presentation/web/components/features/settings/feature-flags-settings-section.stories.js +27 -25
  141. package/dist/src/presentation/web/components/features/settings/interactive-agent-settings-section.d.ts.map +1 -1
  142. package/dist/src/presentation/web/components/features/settings/interactive-agent-settings-section.js +3 -3
  143. package/dist/src/presentation/web/components/features/settings/litellm-proxy-settings-section.d.ts +6 -0
  144. package/dist/src/presentation/web/components/features/settings/litellm-proxy-settings-section.d.ts.map +1 -0
  145. package/dist/src/presentation/web/components/features/settings/litellm-proxy-settings-section.js +76 -0
  146. package/dist/src/presentation/web/components/features/settings/litellm-proxy-settings-section.stories.d.ts +15 -0
  147. package/dist/src/presentation/web/components/features/settings/litellm-proxy-settings-section.stories.d.ts.map +1 -0
  148. package/dist/src/presentation/web/components/features/settings/litellm-proxy-settings-section.stories.js +29 -0
  149. package/dist/src/presentation/web/components/features/settings/notification-settings-section.d.ts +3 -3
  150. package/dist/src/presentation/web/components/features/settings/notification-settings-section.d.ts.map +1 -1
  151. package/dist/src/presentation/web/components/features/settings/notification-settings-section.js +64 -47
  152. package/dist/src/presentation/web/components/features/settings/notification-settings-section.stories.d.ts.map +1 -1
  153. package/dist/src/presentation/web/components/features/settings/notification-settings-section.stories.js +32 -24
  154. package/dist/src/presentation/web/components/features/settings/settings-page-client.d.ts.map +1 -1
  155. package/dist/src/presentation/web/components/features/settings/settings-page-client.js +30 -381
  156. package/dist/src/presentation/web/components/features/settings/settings-page-client.stories.d.ts +2 -0
  157. package/dist/src/presentation/web/components/features/settings/settings-page-client.stories.d.ts.map +1 -1
  158. package/dist/src/presentation/web/components/features/settings/settings-page-client.stories.js +14 -0
  159. package/dist/src/presentation/web/components/features/settings/settings-section-utils.d.ts +13 -10
  160. package/dist/src/presentation/web/components/features/settings/settings-section-utils.d.ts.map +1 -1
  161. package/dist/src/presentation/web/components/features/settings/settings-section-utils.js +10 -10
  162. package/dist/src/presentation/web/components/features/settings/settings-section-utils.stories.d.ts +1 -1
  163. package/dist/src/presentation/web/components/features/settings/settings-section-utils.stories.d.ts.map +1 -1
  164. package/dist/src/presentation/web/components/features/settings/settings-section-utils.stories.js +7 -7
  165. package/dist/src/presentation/web/components/features/settings/stage-timeouts-settings-section.d.ts.map +1 -1
  166. package/dist/src/presentation/web/components/features/settings/stage-timeouts-settings-section.js +1 -1
  167. package/dist/src/presentation/web/components/features/settings/workflow-settings-section.d.ts +3 -3
  168. package/dist/src/presentation/web/components/features/settings/workflow-settings-section.d.ts.map +1 -1
  169. package/dist/src/presentation/web/components/features/settings/workflow-settings-section.js +118 -165
  170. package/dist/src/presentation/web/components/features/settings/workflow-settings-section.stories.d.ts +1 -1
  171. package/dist/src/presentation/web/components/features/settings/workflow-settings-section.stories.d.ts.map +1 -1
  172. package/dist/src/presentation/web/components/features/settings/workflow-settings-section.stories.js +26 -64
  173. package/dist/src/presentation/web/components/features/skills/category-filter.d.ts.map +1 -1
  174. package/dist/src/presentation/web/components/features/skills/category-filter.js +12 -2
  175. package/dist/src/presentation/web/components/features/skills/skill-card.d.ts.map +1 -1
  176. package/dist/src/presentation/web/components/features/skills/skill-card.js +3 -3
  177. package/dist/src/presentation/web/components/features/skills/skill-detail-drawer.d.ts.map +1 -1
  178. package/dist/src/presentation/web/components/features/skills/skill-detail-drawer.js +27 -1
  179. package/dist/src/presentation/web/components/features/skills/skill-list.js +2 -2
  180. package/dist/src/presentation/web/components/features/skills/skills-page-client.d.ts.map +1 -1
  181. package/dist/src/presentation/web/components/features/skills/skills-page-client.js +2 -2
  182. package/dist/src/presentation/web/components/features/tools/tool-card.d.ts.map +1 -1
  183. package/dist/src/presentation/web/components/features/tools/tool-card.js +20 -11
  184. package/dist/src/presentation/web/components/features/tools/tool-detail-drawer.js +1 -1
  185. package/dist/src/presentation/web/components/features/tools/tools-page-client.d.ts.map +1 -1
  186. package/dist/src/presentation/web/components/features/tools/tools-page-client.js +6 -1
  187. package/dist/src/presentation/web/components/layouts/app-sidebar/app-sidebar.d.ts.map +1 -1
  188. package/dist/src/presentation/web/components/layouts/app-sidebar/app-sidebar.js +40 -44
  189. package/dist/src/presentation/web/components/layouts/app-sidebar/app-sidebar.stories.d.ts.map +1 -1
  190. package/dist/src/presentation/web/components/layouts/app-sidebar/app-sidebar.stories.js +1 -0
  191. package/dist/src/presentation/web/components/ui/card.d.ts.map +1 -1
  192. package/dist/src/presentation/web/components/ui/card.js +9 -1
  193. package/dist/src/presentation/web/components/ui/drawer.d.ts.map +1 -1
  194. package/dist/src/presentation/web/components/ui/drawer.js +8 -2
  195. package/dist/src/presentation/web/components/ui/tooltip.d.ts.map +1 -1
  196. package/dist/src/presentation/web/components/ui/tooltip.js +3 -3
  197. package/dist/src/presentation/web/hooks/feature-flags-context.d.ts.map +1 -1
  198. package/dist/src/presentation/web/hooks/feature-flags-context.js +1 -0
  199. package/dist/src/presentation/web/lib/feature-flags.d.ts +2 -0
  200. package/dist/src/presentation/web/lib/feature-flags.d.ts.map +1 -1
  201. package/dist/src/presentation/web/lib/feature-flags.js +6 -0
  202. package/dist/translations/ar/web.json +40 -2
  203. package/dist/translations/de/web.json +40 -2
  204. package/dist/translations/en/web.json +40 -2
  205. package/dist/translations/es/web.json +40 -2
  206. package/dist/translations/fr/web.json +40 -2
  207. package/dist/translations/he/web.json +40 -2
  208. package/dist/translations/pt/web.json +40 -2
  209. package/dist/translations/ru/web.json +40 -2
  210. package/dist/tsconfig.build.tsbuildinfo +1 -1
  211. package/package.json +1 -1
  212. package/web/.next/BUILD_ID +1 -1
  213. package/web/.next/app-path-routes-manifest.json +1 -0
  214. package/web/.next/build-manifest.json +3 -3
  215. package/web/.next/fallback-build-manifest.json +3 -3
  216. package/web/.next/prerender-manifest.json +3 -3
  217. package/web/.next/required-server-files.js +3 -3
  218. package/web/.next/required-server-files.json +3 -3
  219. package/web/.next/routes-manifest.json +6 -0
  220. package/web/.next/server/app/(dashboard)/@drawer/adopt/page/next-font-manifest.json +6 -2
  221. package/web/.next/server/app/(dashboard)/@drawer/adopt/page/server-reference-manifest.json +29 -29
  222. package/web/.next/server/app/(dashboard)/@drawer/adopt/page.js +1 -1
  223. package/web/.next/server/app/(dashboard)/@drawer/adopt/page.js.nft.json +1 -1
  224. package/web/.next/server/app/(dashboard)/@drawer/adopt/page_client-reference-manifest.js +1 -1
  225. package/web/.next/server/app/(dashboard)/@drawer/chat/page/next-font-manifest.json +6 -2
  226. package/web/.next/server/app/(dashboard)/@drawer/chat/page/server-reference-manifest.json +27 -27
  227. package/web/.next/server/app/(dashboard)/@drawer/chat/page.js +1 -1
  228. package/web/.next/server/app/(dashboard)/@drawer/chat/page.js.nft.json +1 -1
  229. package/web/.next/server/app/(dashboard)/@drawer/chat/page_client-reference-manifest.js +1 -1
  230. package/web/.next/server/app/(dashboard)/@drawer/create/page/next-font-manifest.json +6 -2
  231. package/web/.next/server/app/(dashboard)/@drawer/create/page/server-reference-manifest.json +31 -31
  232. package/web/.next/server/app/(dashboard)/@drawer/create/page.js +1 -1
  233. package/web/.next/server/app/(dashboard)/@drawer/create/page.js.nft.json +1 -1
  234. package/web/.next/server/app/(dashboard)/@drawer/create/page_client-reference-manifest.js +1 -1
  235. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page/next-font-manifest.json +6 -2
  236. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page/server-reference-manifest.json +37 -37
  237. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.js +2 -2
  238. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.js.nft.json +1 -1
  239. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
  240. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page/next-font-manifest.json +6 -2
  241. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page/server-reference-manifest.json +37 -37
  242. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js +2 -2
  243. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js.nft.json +1 -1
  244. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page_client-reference-manifest.js +1 -1
  245. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page/next-font-manifest.json +6 -2
  246. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page/server-reference-manifest.json +28 -28
  247. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page.js +1 -1
  248. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page.js.nft.json +1 -1
  249. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page_client-reference-manifest.js +1 -1
  250. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/next-font-manifest.json +6 -2
  251. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/server-reference-manifest.json +28 -28
  252. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js +1 -1
  253. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js.nft.json +1 -1
  254. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  255. package/web/.next/server/app/(dashboard)/chat/page/next-font-manifest.json +6 -2
  256. package/web/.next/server/app/(dashboard)/chat/page/server-reference-manifest.json +27 -27
  257. package/web/.next/server/app/(dashboard)/chat/page.js +1 -1
  258. package/web/.next/server/app/(dashboard)/chat/page.js.nft.json +1 -1
  259. package/web/.next/server/app/(dashboard)/chat/page_client-reference-manifest.js +1 -1
  260. package/web/.next/server/app/(dashboard)/create/page/next-font-manifest.json +6 -2
  261. package/web/.next/server/app/(dashboard)/create/page/server-reference-manifest.json +31 -31
  262. package/web/.next/server/app/(dashboard)/create/page.js +1 -1
  263. package/web/.next/server/app/(dashboard)/create/page.js.nft.json +1 -1
  264. package/web/.next/server/app/(dashboard)/create/page_client-reference-manifest.js +1 -1
  265. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page/next-font-manifest.json +6 -2
  266. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page/server-reference-manifest.json +37 -37
  267. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page.js +2 -2
  268. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page.js.nft.json +1 -1
  269. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
  270. package/web/.next/server/app/(dashboard)/feature/[featureId]/page/next-font-manifest.json +6 -2
  271. package/web/.next/server/app/(dashboard)/feature/[featureId]/page/server-reference-manifest.json +37 -37
  272. package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js +2 -2
  273. package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js.nft.json +1 -1
  274. package/web/.next/server/app/(dashboard)/feature/[featureId]/page_client-reference-manifest.js +1 -1
  275. package/web/.next/server/app/(dashboard)/page/next-font-manifest.json +6 -2
  276. package/web/.next/server/app/(dashboard)/page/server-reference-manifest.json +27 -27
  277. package/web/.next/server/app/(dashboard)/page.js +1 -1
  278. package/web/.next/server/app/(dashboard)/page.js.nft.json +1 -1
  279. package/web/.next/server/app/(dashboard)/page_client-reference-manifest.js +1 -1
  280. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page/next-font-manifest.json +6 -2
  281. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page/server-reference-manifest.json +28 -28
  282. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page.js +1 -1
  283. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page.js.nft.json +1 -1
  284. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page_client-reference-manifest.js +1 -1
  285. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/next-font-manifest.json +6 -2
  286. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/server-reference-manifest.json +28 -28
  287. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js +1 -1
  288. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js.nft.json +1 -1
  289. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  290. package/web/.next/server/app/_global-error.html +1 -1
  291. package/web/.next/server/app/_global-error.rsc +1 -1
  292. package/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  293. package/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  294. package/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  295. package/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  296. package/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  297. package/web/.next/server/app/_not-found/page/next-font-manifest.json +6 -2
  298. package/web/.next/server/app/_not-found/page/server-reference-manifest.json +6 -6
  299. package/web/.next/server/app/_not-found/page.js +1 -1
  300. package/web/.next/server/app/_not-found/page.js.nft.json +1 -1
  301. package/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  302. package/web/.next/server/app/api/attachments/preview/route.js.nft.json +1 -1
  303. package/web/.next/server/app/api/dialog/pick-files/route.js.nft.json +1 -1
  304. package/web/.next/server/app/api/evidence/route.js.nft.json +1 -1
  305. package/web/.next/server/app/api/graph-data/route.js +1 -1
  306. package/web/.next/server/app/api/graph-data/route.js.nft.json +1 -1
  307. package/web/.next/server/app/api/interactive/chat/[featureId]/messages/route.js +1 -1
  308. package/web/.next/server/app/api/interactive/chat/[featureId]/messages/route.js.nft.json +1 -1
  309. package/web/.next/server/app/api/sessions-batch/route.js +1 -1
  310. package/web/.next/server/app/api/sessions-batch/route.js.nft.json +1 -1
  311. package/web/.next/server/app/plugins/page/app-paths-manifest.json +3 -0
  312. package/web/.next/server/app/plugins/page/build-manifest.json +18 -0
  313. package/web/.next/server/app/plugins/page/next-font-manifest.json +10 -0
  314. package/web/.next/server/app/plugins/page/react-loadable-manifest.json +8 -0
  315. package/web/.next/server/app/plugins/page/server-reference-manifest.json +185 -0
  316. package/web/.next/server/app/plugins/page.js +17 -0
  317. package/web/.next/server/app/plugins/page.js.map +5 -0
  318. package/web/.next/server/app/plugins/page.js.nft.json +1 -0
  319. package/web/.next/server/app/plugins/page_client-reference-manifest.js +3 -0
  320. package/web/.next/server/app/settings/page/next-font-manifest.json +6 -2
  321. package/web/.next/server/app/settings/page/server-reference-manifest.json +34 -22
  322. package/web/.next/server/app/settings/page.js +2 -2
  323. package/web/.next/server/app/settings/page.js.nft.json +1 -1
  324. package/web/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  325. package/web/.next/server/app/skills/page/next-font-manifest.json +6 -2
  326. package/web/.next/server/app/skills/page/server-reference-manifest.json +11 -11
  327. package/web/.next/server/app/skills/page.js +1 -1
  328. package/web/.next/server/app/skills/page.js.nft.json +1 -1
  329. package/web/.next/server/app/skills/page_client-reference-manifest.js +1 -1
  330. package/web/.next/server/app/tools/page/next-font-manifest.json +6 -2
  331. package/web/.next/server/app/tools/page/server-reference-manifest.json +11 -11
  332. package/web/.next/server/app/tools/page.js +1 -1
  333. package/web/.next/server/app/tools/page.js.nft.json +1 -1
  334. package/web/.next/server/app/tools/page_client-reference-manifest.js +1 -1
  335. package/web/.next/server/app/version/page/next-font-manifest.json +6 -2
  336. package/web/.next/server/app/version/page/server-reference-manifest.json +6 -6
  337. package/web/.next/server/app/version/page.js +1 -1
  338. package/web/.next/server/app/version/page.js.nft.json +1 -1
  339. package/web/.next/server/app/version/page_client-reference-manifest.js +1 -1
  340. package/web/.next/server/app-paths-manifest.json +1 -0
  341. package/web/.next/server/chunks/11es_next_dist_esm_build_templates_app-route_067cwst.js.map +1 -1
  342. package/web/.next/server/chunks/{[root-of-the-server]__0zu_byw._.js → [root-of-the-server]__07suer1._.js} +2 -2
  343. package/web/.next/server/chunks/{[root-of-the-server]__0u1jyv9._.js → [root-of-the-server]__0sgzo7y._.js} +2 -2
  344. package/web/.next/server/chunks/[root-of-the-server]__0tb~wwk._.js +1 -1
  345. package/web/.next/server/chunks/{[root-of-the-server]__08cpfre._.js → [root-of-the-server]__0uxlr84._.js} +2 -2
  346. package/web/.next/server/chunks/ssr/08qz_lucide-react_dist_esm_icons_0c0dui7._.js +3 -0
  347. package/web/.next/server/chunks/ssr/08qz_lucide-react_dist_esm_icons_0c0dui7._.js.map +1 -0
  348. package/web/.next/server/chunks/ssr/0j.8_web_components_common_control-center-drawer_create-drawer-client_tsx_0g70fc5._.js +1 -1
  349. package/web/.next/server/chunks/ssr/0j.8_web_components_common_control-center-drawer_create-drawer-client_tsx_0g70fc5._.js.map +1 -1
  350. package/web/.next/server/chunks/ssr/0j.8_web_components_common_control-center-drawer_feature-drawer-client_tsx_104cna.._.js +2 -2
  351. package/web/.next/server/chunks/ssr/0j.8_web_components_common_control-center-drawer_feature-drawer-client_tsx_104cna.._.js.map +1 -1
  352. package/web/.next/server/chunks/ssr/0ukq_presentation_web_components_features_settings_settings-page-client_tsx_0j1uius._.js +1 -1
  353. package/web/.next/server/chunks/ssr/0ukq_presentation_web_components_features_settings_settings-page-client_tsx_0j1uius._.js.map +1 -1
  354. package/web/.next/server/chunks/ssr/11es_next_dist_esm_build_templates_app-page_0y6lfp8.js +4 -0
  355. package/web/.next/server/chunks/ssr/11es_next_dist_esm_build_templates_app-page_0y6lfp8.js.map +1 -0
  356. package/web/.next/server/chunks/ssr/11y9_components_common_control-center-drawer_repository-drawer-client_tsx_09z.znp._.js +1 -1
  357. package/web/.next/server/chunks/ssr/11y9_components_common_control-center-drawer_repository-drawer-client_tsx_09z.znp._.js.map +1 -1
  358. package/web/.next/server/chunks/ssr/{_04s_q5r._.js → 12k._sonner_dist_index_mjs_0-vmpk5._.js} +2 -2
  359. package/web/.next/server/chunks/ssr/12k._sonner_dist_index_mjs_0-vmpk5._.js.map +1 -0
  360. package/web/.next/server/chunks/ssr/{[root-of-the-server]__0rvrr1j._.js → [root-of-the-server]__0.5ojmt._.js} +2 -2
  361. package/web/.next/server/chunks/ssr/[root-of-the-server]__0.5ojmt._.js.map +1 -0
  362. package/web/.next/server/chunks/ssr/[root-of-the-server]__04h~gav._.js +3 -0
  363. package/web/.next/server/chunks/ssr/[root-of-the-server]__04h~gav._.js.map +1 -0
  364. package/web/.next/server/chunks/ssr/[root-of-the-server]__05_qc0n._.js +1 -1
  365. package/web/.next/server/chunks/ssr/[root-of-the-server]__05_qc0n._.js.map +1 -1
  366. package/web/.next/server/chunks/ssr/{[root-of-the-server]__0uy_5rw._.js → [root-of-the-server]__0ge~xny._.js} +2 -2
  367. package/web/.next/server/chunks/ssr/{[root-of-the-server]__0uy_5rw._.js.map → [root-of-the-server]__0ge~xny._.js.map} +1 -1
  368. package/web/.next/server/chunks/ssr/[root-of-the-server]__0jy4nha._.js +3 -0
  369. package/web/.next/server/chunks/ssr/[root-of-the-server]__0jy4nha._.js.map +1 -0
  370. package/web/.next/server/chunks/ssr/{_0e5cv3q._.js → [root-of-the-server]__0n~o-g-._.js} +2 -2
  371. package/web/.next/server/chunks/ssr/[root-of-the-server]__0n~o-g-._.js.map +1 -0
  372. package/web/.next/server/chunks/ssr/{[root-of-the-server]__02.89uf._.js → [root-of-the-server]__0qda~yi._.js} +2 -2
  373. package/web/.next/server/chunks/ssr/{[root-of-the-server]__02.89uf._.js.map → [root-of-the-server]__0qda~yi._.js.map} +1 -1
  374. package/web/.next/server/chunks/ssr/[root-of-the-server]__0rv1gci._.js +1 -1
  375. package/web/.next/server/chunks/ssr/[root-of-the-server]__0tq2syh._.js +1 -1
  376. package/web/.next/server/chunks/ssr/{[root-of-the-server]__0r5zhk.._.js → [root-of-the-server]__0t~u8sd._.js} +2 -2
  377. package/web/.next/server/chunks/ssr/{[root-of-the-server]__0r5zhk.._.js.map → [root-of-the-server]__0t~u8sd._.js.map} +1 -1
  378. package/web/.next/server/chunks/ssr/[root-of-the-server]__0~v1~b9._.js +3 -0
  379. package/web/.next/server/chunks/ssr/[root-of-the-server]__0~v1~b9._.js.map +1 -0
  380. package/web/.next/server/chunks/ssr/{[root-of-the-server]__04rq9lr._.js → [root-of-the-server]__10tll_l._.js} +2 -2
  381. package/web/.next/server/chunks/ssr/{[root-of-the-server]__04rq9lr._.js.map → [root-of-the-server]__10tll_l._.js.map} +1 -1
  382. package/web/.next/server/chunks/ssr/[root-of-the-server]__12j29w-._.js +1 -1
  383. package/web/.next/server/chunks/ssr/[root-of-the-server]__12j29w-._.js.map +1 -1
  384. package/web/.next/server/chunks/ssr/_0-09vq7._.js +1 -1
  385. package/web/.next/server/chunks/ssr/_0-09vq7._.js.map +1 -1
  386. package/web/.next/server/chunks/ssr/_01sesw0._.js +1 -1
  387. package/web/.next/server/chunks/ssr/_01sesw0._.js.map +1 -1
  388. package/web/.next/server/chunks/ssr/{_00u~.41._.js → _03x4h9e._.js} +2 -2
  389. package/web/.next/server/chunks/ssr/_03x4h9e._.js.map +1 -0
  390. package/web/.next/server/chunks/ssr/{_0hwjfpu._.js → _05fk0a4._.js} +2 -2
  391. package/web/.next/server/chunks/ssr/_05fk0a4._.js.map +1 -0
  392. package/web/.next/server/chunks/ssr/_069y.js._.js +2 -2
  393. package/web/.next/server/chunks/ssr/_069y.js._.js.map +1 -1
  394. package/web/.next/server/chunks/ssr/{_0-.ckn5._.js → _07u.4jr._.js} +2 -2
  395. package/web/.next/server/chunks/ssr/{_0-.ckn5._.js.map → _07u.4jr._.js.map} +1 -1
  396. package/web/.next/server/chunks/ssr/_083k45~._.js +3 -0
  397. package/web/.next/server/chunks/ssr/_083k45~._.js.map +1 -0
  398. package/web/.next/server/chunks/ssr/_0__4si~._.js +1 -1
  399. package/web/.next/server/chunks/ssr/_0__4si~._.js.map +1 -1
  400. package/web/.next/server/chunks/ssr/_0_m17kl._.js +1 -1
  401. package/web/.next/server/chunks/ssr/_0_m17kl._.js.map +1 -1
  402. package/web/.next/server/chunks/ssr/_0d4miu.._.js +1 -1
  403. package/web/.next/server/chunks/ssr/_0d4miu.._.js.map +1 -1
  404. package/web/.next/server/chunks/ssr/_0e8ern9._.js +1 -1
  405. package/web/.next/server/chunks/ssr/_0e8ern9._.js.map +1 -1
  406. package/web/.next/server/chunks/ssr/_0i~-084._.js +3 -0
  407. package/web/.next/server/chunks/ssr/_0i~-084._.js.map +1 -0
  408. package/web/.next/server/chunks/ssr/_0kt18~b._.js +3 -0
  409. package/web/.next/server/chunks/ssr/_0kt18~b._.js.map +1 -0
  410. package/web/.next/server/chunks/ssr/{_138qywk._.js → _0mj-tmi._.js} +2 -2
  411. package/web/.next/server/chunks/ssr/{_138qywk._.js.map → _0mj-tmi._.js.map} +1 -1
  412. package/web/.next/server/chunks/ssr/{_0hw~zvl._.js → _0o_oaao._.js} +2 -2
  413. package/web/.next/server/chunks/ssr/_0o_oaao._.js.map +1 -0
  414. package/web/.next/server/chunks/ssr/_0p3~u8u._.js +2 -2
  415. package/web/.next/server/chunks/ssr/_0p3~u8u._.js.map +1 -1
  416. package/web/.next/server/chunks/ssr/_0r.3n~3._.js +1 -1
  417. package/web/.next/server/chunks/ssr/_0r.3n~3._.js.map +1 -1
  418. package/web/.next/server/chunks/ssr/_0rcx2-c._.js +9 -0
  419. package/web/.next/server/chunks/ssr/_0rcx2-c._.js.map +1 -0
  420. package/web/.next/server/chunks/ssr/_0t59q8r._.js +1 -1
  421. package/web/.next/server/chunks/ssr/_0t59q8r._.js.map +1 -1
  422. package/web/.next/server/chunks/ssr/_0tcccbb._.js +1 -1
  423. package/web/.next/server/chunks/ssr/_0tcccbb._.js.map +1 -1
  424. package/web/.next/server/chunks/ssr/_0tfz1v_._.js +3 -0
  425. package/web/.next/server/chunks/ssr/_0tfz1v_._.js.map +1 -0
  426. package/web/.next/server/chunks/ssr/{_00k65h-._.js → _0u3d8.n._.js} +2 -2
  427. package/web/.next/server/chunks/ssr/_0u3d8.n._.js.map +1 -0
  428. package/web/.next/server/chunks/ssr/_0vjw-e_._.js +7 -0
  429. package/web/.next/server/chunks/ssr/_0vjw-e_._.js.map +1 -0
  430. package/web/.next/server/chunks/ssr/_0vyfc4b._.js +1 -1
  431. package/web/.next/server/chunks/ssr/_0vyfc4b._.js.map +1 -1
  432. package/web/.next/server/chunks/ssr/_0w-_hww._.js +1 -1
  433. package/web/.next/server/chunks/ssr/_0w-_hww._.js.map +1 -1
  434. package/web/.next/server/chunks/ssr/_0ygafoy._.js +7 -0
  435. package/web/.next/server/chunks/ssr/_0ygafoy._.js.map +1 -0
  436. package/web/.next/server/chunks/ssr/_0zk-h5w._.js +1 -1
  437. package/web/.next/server/chunks/ssr/_0zk-h5w._.js.map +1 -1
  438. package/web/.next/server/chunks/ssr/_0~7lwu_._.js +1 -1
  439. package/web/.next/server/chunks/ssr/_0~7lwu_._.js.map +1 -1
  440. package/web/.next/server/chunks/ssr/_10joy2y._.js +3 -0
  441. package/web/.next/server/chunks/ssr/_10joy2y._.js.map +1 -0
  442. package/web/.next/server/chunks/ssr/_1161g9x._.js +1 -1
  443. package/web/.next/server/chunks/ssr/_1161g9x._.js.map +1 -1
  444. package/web/.next/server/chunks/ssr/_12uy.45._.js +3 -0
  445. package/web/.next/server/chunks/ssr/_12uy.45._.js.map +1 -0
  446. package/web/.next/server/chunks/ssr/src_presentation_web_0y11iiz._.js +1 -1
  447. package/web/.next/server/chunks/ssr/src_presentation_web_0y11iiz._.js.map +1 -1
  448. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_plugins_page_actions_0rdndum.js +3 -0
  449. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_plugins_page_actions_0rdndum.js.map +1 -0
  450. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_05m2q~u.js +1 -1
  451. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_05m2q~u.js.map +1 -1
  452. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_0.6zk.t.js +1 -1
  453. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_0.6zk.t.js.map +1 -1
  454. package/web/.next/server/chunks/ssr/src_presentation_web_app_actions_approve-feature_ts_0pjb_re._.js +1 -1
  455. package/web/.next/server/chunks/ssr/src_presentation_web_app_actions_open-ide_ts_0w2wqvu._.js +1 -1
  456. package/web/.next/server/chunks/ssr/src_presentation_web_components_0sk2qdt._.js +1 -1
  457. package/web/.next/server/chunks/ssr/src_presentation_web_components_0sk2qdt._.js.map +1 -1
  458. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_0l3oxx9._.js +1 -1
  459. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_0l3oxx9._.js.map +1 -1
  460. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_tools_tools-page-client_tsx_0aji.op._.js +1 -1
  461. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_tools_tools-page-client_tsx_0aji.op._.js.map +1 -1
  462. package/web/.next/server/middleware-build-manifest.js +3 -3
  463. package/web/.next/server/next-font-manifest.js +1 -1
  464. package/web/.next/server/next-font-manifest.json +63 -2
  465. package/web/.next/server/pages/500.html +1 -1
  466. package/web/.next/server/server-reference-manifest.js +1 -1
  467. package/web/.next/server/server-reference-manifest.json +187 -61
  468. package/web/.next/static/chunks/{0q8ax~44oybo2.js → 01~u_q8i2zgcl.js} +2 -2
  469. package/web/.next/static/chunks/{0-woqr2brccx_.js → 025ml1.quzhqf.js} +1 -1
  470. package/web/.next/static/chunks/{0fg~vc93spa9c.js → 07gal-~-zwagj.js} +1 -1
  471. package/web/.next/static/chunks/07le1mov593z9.js +1 -0
  472. package/web/.next/static/chunks/{0ls0v8h_qbctm.js → 09ungqk9~va40.js} +1 -1
  473. package/web/.next/static/chunks/0ab36sfvo.9ai.js +1 -0
  474. package/web/.next/static/chunks/0aq9-lg.5r.nk.js +5 -0
  475. package/web/.next/static/chunks/{11bi612fz8agh.js → 0b2pi58fg3lt3.js} +1 -1
  476. package/web/.next/static/chunks/{022nrd6snse79.js → 0cvyulutrctst.js} +1 -1
  477. package/web/.next/static/chunks/0eqi_uuiepxhf.js +1 -0
  478. package/web/.next/static/chunks/0inayq2zzadja.js +1 -0
  479. package/web/.next/static/chunks/{0t3xjndx2s1_j.css → 0j.1nx3ly591i.css} +1 -0
  480. package/web/.next/static/chunks/{0v~n9z6b639zm.js → 0jwq.mr-.ltps.js} +1 -1
  481. package/web/.next/static/chunks/0k8m.qcahm63g.js +1 -0
  482. package/web/.next/static/chunks/0lc0x8kcu46ae.js +1 -0
  483. package/web/.next/static/chunks/0lz-oq74e_ciu.js +1 -0
  484. package/web/.next/static/chunks/0nkujbu62z1jl.js +7 -0
  485. package/web/.next/static/chunks/0o4m0k3642219.js +1 -0
  486. package/web/.next/static/chunks/0oadtfnesfdqc.js +1 -0
  487. package/web/.next/static/chunks/0udlnp30o1kjd.js +5 -0
  488. package/web/.next/static/chunks/{0q7ohuqneuur4.js → 0uryz2ek77e2a.js} +1 -1
  489. package/web/.next/static/chunks/0v7r7y~3e~oo6.css +1 -0
  490. package/web/.next/static/chunks/0xo.hi4px83w2.js +1 -0
  491. package/web/.next/static/chunks/{0j.wph28jrce1.js → 0xr0p_ynap2~d.js} +1 -1
  492. package/web/.next/static/chunks/0xtzpbc5mm5z7.js +5 -0
  493. package/web/.next/static/chunks/{02phgt~f2c-2q.js → 0~-kk8o121_13.js} +1 -1
  494. package/web/.next/static/chunks/13q1peb_t9vj8.js +1 -0
  495. package/web/.next/static/chunks/{0ps5sykbi-z5-.js → 16k169s1a_8ru.js} +1 -1
  496. package/web/.next/static/chunks/{0ma7k9iohb3bb.js → 17dp77weos4ao.js} +1 -1
  497. package/web/.next/static/media/1bffadaabf893a1e-s.16ipb6fqu393i.woff2 +0 -0
  498. package/web/.next/static/media/2bbe8d2671613f1f-s.067x_6k0k23tk.woff2 +0 -0
  499. package/web/.next/static/media/2c55a0e60120577a-s.0bjc5tiuqdqro.woff2 +0 -0
  500. package/web/.next/static/media/5476f68d60460930-s.0wxq9webf.ew4.woff2 +0 -0
  501. package/web/.next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2 +0 -0
  502. package/web/.next/static/media/9c72aa0f40e4eef8-s.0m6w47a4e5dy9.woff2 +0 -0
  503. package/web/.next/static/media/ad66f9afd8947f86-s.11u06r12fd6v_.woff2 +0 -0
  504. package/web/package.json +2 -2
  505. package/web/public/favicon.svg +10 -0
  506. package/web/public/icons/tools/antigravity.svg +1 -0
  507. package/web/public/icons/tools/bash.svg +38 -0
  508. package/web/public/icons/tools/cursor-cli.svg +12 -0
  509. package/web/public/icons/tools/cursor.svg +1 -0
  510. package/web/public/icons/tools/fish.svg +153 -0
  511. package/web/public/icons/tools/powershell.svg +29 -0
  512. package/web/public/icons/tools/zsh.svg +1 -0
  513. package/web/.next/server/chunks/ssr/08qz_lucide-react_dist_esm_icons_0zwb4s4._.js +0 -3
  514. package/web/.next/server/chunks/ssr/08qz_lucide-react_dist_esm_icons_0zwb4s4._.js.map +0 -1
  515. package/web/.next/server/chunks/ssr/[root-of-the-server]__0c0xoi_._.js +0 -3
  516. package/web/.next/server/chunks/ssr/[root-of-the-server]__0c0xoi_._.js.map +0 -1
  517. package/web/.next/server/chunks/ssr/[root-of-the-server]__0lslgap._.js +0 -7
  518. package/web/.next/server/chunks/ssr/[root-of-the-server]__0lslgap._.js.map +0 -1
  519. package/web/.next/server/chunks/ssr/[root-of-the-server]__0rvrr1j._.js.map +0 -1
  520. package/web/.next/server/chunks/ssr/_00k65h-._.js.map +0 -1
  521. package/web/.next/server/chunks/ssr/_00u~.41._.js.map +0 -1
  522. package/web/.next/server/chunks/ssr/_04s_q5r._.js.map +0 -1
  523. package/web/.next/server/chunks/ssr/_08i-c2n._.js +0 -3
  524. package/web/.next/server/chunks/ssr/_08i-c2n._.js.map +0 -1
  525. package/web/.next/server/chunks/ssr/_0aaotn-._.js +0 -3
  526. package/web/.next/server/chunks/ssr/_0aaotn-._.js.map +0 -1
  527. package/web/.next/server/chunks/ssr/_0e5cv3q._.js.map +0 -1
  528. package/web/.next/server/chunks/ssr/_0gdghcr._.js +0 -3
  529. package/web/.next/server/chunks/ssr/_0gdghcr._.js.map +0 -1
  530. package/web/.next/server/chunks/ssr/_0hwjfpu._.js.map +0 -1
  531. package/web/.next/server/chunks/ssr/_0hw~zvl._.js.map +0 -1
  532. package/web/.next/server/chunks/ssr/_0n.magx._.js +0 -3
  533. package/web/.next/server/chunks/ssr/_0n.magx._.js.map +0 -1
  534. package/web/.next/server/chunks/ssr/_0phryzt._.js +0 -3
  535. package/web/.next/server/chunks/ssr/_0phryzt._.js.map +0 -1
  536. package/web/.next/server/chunks/ssr/_0y8u4.e._.js +0 -9
  537. package/web/.next/server/chunks/ssr/_0y8u4.e._.js.map +0 -1
  538. package/web/.next/server/chunks/ssr/_12un22l._.js +0 -7
  539. package/web/.next/server/chunks/ssr/_12un22l._.js.map +0 -1
  540. package/web/.next/static/chunks/0-lu0b1ewsb0_.js +0 -1
  541. package/web/.next/static/chunks/01~dudieyb7wl.js +0 -5
  542. package/web/.next/static/chunks/02kpdawdtqcxm.js +0 -1
  543. package/web/.next/static/chunks/03s7z6w1lj0w~.js +0 -1
  544. package/web/.next/static/chunks/04~sw.nhpwy6s.css +0 -1
  545. package/web/.next/static/chunks/05enics63g._-.js +0 -7
  546. package/web/.next/static/chunks/08611baheit.t.js +0 -1
  547. package/web/.next/static/chunks/0_9k2ybutuphq.js +0 -1
  548. package/web/.next/static/chunks/0m5~9kij3s~81.js +0 -1
  549. package/web/.next/static/chunks/0n3kuj7t_-jzp.js +0 -1
  550. package/web/.next/static/chunks/0q~uf2s33.48w.js +0 -1
  551. package/web/.next/static/chunks/15m2wfd5k_7fj.js +0 -1
  552. package/web/.next/static/chunks/15rbgqykl.er8.js +0 -1
  553. package/web/.next/static/chunks/164dnpi666fv_.js +0 -5
  554. package/web/.next/static/chunks/17z2sq7c5z8cr.js +0 -5
  555. /package/web/.next/server/chunks/{[root-of-the-server]__0zu_byw._.js.map → [root-of-the-server]__07suer1._.js.map} +0 -0
  556. /package/web/.next/server/chunks/{[root-of-the-server]__0u1jyv9._.js.map → [root-of-the-server]__0sgzo7y._.js.map} +0 -0
  557. /package/web/.next/server/chunks/{[root-of-the-server]__08cpfre._.js.map → [root-of-the-server]__0uxlr84._.js.map} +0 -0
  558. /package/web/.next/static/{GSG_c1emY-f_AA00vD56y → vD7xT4_iwKDhgj4-rr637}/_buildManifest.js +0 -0
  559. /package/web/.next/static/{GSG_c1emY-f_AA00vD56y → vD7xT4_iwKDhgj4-rr637}/_clientMiddlewareManifest.js +0 -0
  560. /package/web/.next/static/{GSG_c1emY-f_AA00vD56y → vD7xT4_iwKDhgj4-rr637}/_ssgManifest.js +0 -0
@@ -1,5 +1,7 @@
1
1
  import { AgentSettingsSection } from './agent-settings-section.js';
2
- import { AgentType, AgentAuthMethod } from '../../../../../../packages/core/src/domain/generated/output.js';
2
+ import { createDefaultSettings } from '../../../../../../packages/core/src/domain/factories/settings-defaults.factory.js';
3
+ import { AgentType } from '../../../../../../packages/core/src/domain/generated/output.js';
4
+ const baseSettings = createDefaultSettings();
3
5
  const meta = {
4
6
  title: 'Features/Settings/AgentSettingsSection',
5
7
  component: AgentSettingsSection,
@@ -11,34 +13,28 @@ const meta = {
11
13
  export default meta;
12
14
  export const Default = {
13
15
  args: {
14
- agent: {
15
- type: AgentType.ClaudeCode,
16
- authMethod: AgentAuthMethod.Session,
17
- },
18
- },
19
- };
20
- export const TokenAuth = {
21
- args: {
22
- agent: {
23
- type: AgentType.GeminiCli,
24
- authMethod: AgentAuthMethod.Token,
25
- token: 'sk-test-token-12345',
26
- },
16
+ settings: baseSettings,
27
17
  },
28
18
  };
29
- export const CodexCli = {
19
+ export const GeminiAgent = {
30
20
  args: {
31
- agent: {
32
- type: AgentType.CodexCli,
33
- authMethod: AgentAuthMethod.Session,
21
+ settings: {
22
+ ...baseSettings,
23
+ agent: {
24
+ ...baseSettings.agent,
25
+ type: AgentType.GeminiCli,
26
+ },
34
27
  },
35
28
  },
36
29
  };
37
- export const CopilotCli = {
30
+ export const CursorAgent = {
38
31
  args: {
39
- agent: {
40
- type: AgentType.CopilotCli,
41
- authMethod: AgentAuthMethod.Session,
32
+ settings: {
33
+ ...baseSettings,
34
+ agent: {
35
+ ...baseSettings.agent,
36
+ type: AgentType.Cursor,
37
+ },
42
38
  },
43
39
  },
44
40
  };
@@ -1 +1 @@
1
- {"version":3,"file":"ci-settings-section.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/settings/ci-settings-section.tsx"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,yCAAyC,CAAC;AAGxE,MAAM,WAAW,sBAAsB;IACrC,QAAQ,EAAE,QAAQ,CAAC;CACpB;AAQD,wBAAgB,iBAAiB,CAAC,EAAE,QAAQ,EAAE,EAAE,sBAAsB,2CA8JrE"}
1
+ {"version":3,"file":"ci-settings-section.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/settings/ci-settings-section.tsx"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,yCAAyC,CAAC;AAGxE,MAAM,WAAW,sBAAsB;IACrC,QAAQ,EAAE,QAAQ,CAAC;CACpB;AAQD,wBAAgB,iBAAiB,CAAC,EAAE,QAAQ,EAAE,EAAE,sBAAsB,2CA8KrE"}
@@ -52,19 +52,28 @@ export function CiSettingsSection({ settings }) {
52
52
  },
53
53
  };
54
54
  }
55
- return (_jsxs(SettingsSection, { icon: Activity, title: t('settings.ci.title'), description: t('settings.ci.description'), testId: "ci-settings-section", children: [_jsx(SettingsRow, { label: t('settings.ci.maxFixAttempts'), description: t('settings.ci.maxFixAttemptsDescription'), htmlFor: "ci-max-fix", children: _jsx(NumberStepper, { id: "ci-max-fix", testId: "ci-max-fix-input", placeholder: "3", value: ciMaxFix, onChange: setCiMaxFix, onBlur: () => {
55
+ return (_jsxs(SettingsSection, { icon: Activity, title: t('settings.ci.title'), description: t('settings.ci.description'), testId: "ci-settings-section", tooltip: t('settings.ci.hint'), tooltipLinks: [
56
+ {
57
+ label: t('settings.ci.links.cicdPipeline'),
58
+ href: 'https://github.com/jrmatherly/shipit/blob/main/docs/development/cicd.md',
59
+ },
60
+ {
61
+ label: t('settings.ci.links.ciSecurityGates'),
62
+ href: 'https://github.com/jrmatherly/shipit/blob/main/specs/003-cicd-security-gates/spec.md',
63
+ },
64
+ ], children: [_jsx(SettingsRow, { label: t('settings.ci.maxFixAttempts'), description: t('settings.ci.maxFixAttemptsDescription'), tooltip: "How many times the agent will attempt to fix failing CI checks before giving up. Higher values increase the chance of auto-resolution but consume more agent time and API calls.", htmlFor: "ci-max-fix", children: _jsx(NumberStepper, { id: "ci-max-fix", testId: "ci-max-fix-input", placeholder: "3", value: ciMaxFix, onChange: setCiMaxFix, onBlur: () => {
56
65
  if (ciMaxFix !== originalCiMaxFix)
57
66
  save(buildPayload({ ciMaxFix }));
58
- }, min: 1, max: 10 }) }), _jsx(SettingsRow, { label: t('settings.ci.watchTimeout'), description: t('settings.ci.watchTimeoutDescription'), htmlFor: "ci-timeout", children: _jsx(NumberStepper, { id: "ci-timeout", testId: "ci-timeout-input", placeholder: "300", value: ciTimeout, onChange: setCiTimeout, onBlur: () => {
67
+ }, min: 1, max: 10 }) }), _jsx(SettingsRow, { label: t('settings.ci.watchTimeout'), description: t('settings.ci.watchTimeoutDescription'), tooltip: "Maximum time the agent will wait for CI to finish. If CI hasn't completed within this window, the agent stops watching. Increase for repos with slow CI pipelines.", htmlFor: "ci-timeout", children: _jsx(NumberStepper, { id: "ci-timeout", testId: "ci-timeout-input", placeholder: "300", value: ciTimeout, onChange: setCiTimeout, onBlur: () => {
59
68
  if (ciTimeout !== originalCiTimeout)
60
69
  save(buildPayload({ ciTimeout }));
61
- }, min: 30, step: 30, suffix: "sec" }) }), _jsx(SettingsRow, { label: t('settings.ci.maxLogSize'), description: t('settings.ci.maxLogSizeDescription'), htmlFor: "ci-log-max", children: _jsx(NumberStepper, { id: "ci-log-max", testId: "ci-log-max-input", placeholder: "50000", value: ciLogMax, onChange: setCiLogMax, onBlur: () => {
70
+ }, min: 30, step: 30, suffix: "sec" }) }), _jsx(SettingsRow, { label: t('settings.ci.maxLogSize'), description: t('settings.ci.maxLogSizeDescription'), tooltip: "CI logs beyond this character limit are truncated before being sent to the agent for analysis. Keeps agent context focused and avoids excessive token usage.", htmlFor: "ci-log-max", children: _jsx(NumberStepper, { id: "ci-log-max", testId: "ci-log-max-input", placeholder: "50000", value: ciLogMax, onChange: setCiLogMax, onBlur: () => {
62
71
  if (ciLogMax !== originalCiLogMax)
63
72
  save(buildPayload({ ciLogMax }));
64
- }, min: 1000, step: 5000, suffix: "chars" }) }), _jsx(SettingsRow, { label: t('settings.ci.pollInterval'), description: t('settings.ci.pollIntervalDescription'), htmlFor: "ci-poll-interval", children: _jsx(NumberStepper, { id: "ci-poll-interval", testId: "ci-poll-interval-input", placeholder: "30", value: ciPollInterval, onChange: setCiPollInterval, onBlur: () => {
73
+ }, min: 1000, step: 5000, suffix: "chars" }) }), _jsx(SettingsRow, { label: t('settings.ci.pollInterval'), description: t('settings.ci.pollIntervalDescription'), tooltip: "How frequently the agent checks GitHub for CI status updates. Lower values give faster feedback but increase API call volume.", htmlFor: "ci-poll-interval", children: _jsx(NumberStepper, { id: "ci-poll-interval", testId: "ci-poll-interval-input", placeholder: "30", value: ciPollInterval, onChange: setCiPollInterval, onBlur: () => {
65
74
  if (ciPollInterval !== originalCiPollInterval)
66
75
  save(buildPayload({ ciPollInterval }));
67
- }, min: 5, step: 5, suffix: "sec" }) }), _jsx(SwitchRow, { label: t('settings.ci.hideCiStatus'), description: t('settings.ci.hideCiStatusDescription'), id: "hide-ci-status", testId: "switch-hide-ci-status", checked: hideCiStatus, onChange: (v) => {
76
+ }, min: 5, step: 5, suffix: "sec" }) }), _jsx(SwitchRow, { label: t('settings.ci.hideCiStatus'), description: t('settings.ci.hideCiStatusDescription'), tooltip: "When enabled, CI status indicators are hidden from the feature drawer and merge review panels. Useful if you monitor CI through GitHub directly.", id: "hide-ci-status", testId: "switch-hide-ci-status", checked: hideCiStatus, onChange: (v) => {
68
77
  setHideCiStatus(v);
69
78
  save(buildPayload({ hideCiStatus: v }));
70
79
  } })] }));
@@ -1 +1 @@
1
- {"version":3,"file":"database-settings-section.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/settings/database-settings-section.tsx"],"names":[],"mappings":"AAMA,MAAM,WAAW,4BAA4B;IAC3C,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,uBAAuB,CAAC,EACtC,YAAY,EACZ,UAAU,GACX,EAAE,4BAA4B,2CA+B9B"}
1
+ {"version":3,"file":"database-settings-section.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/settings/database-settings-section.tsx"],"names":[],"mappings":"AAMA,MAAM,WAAW,4BAA4B;IAC3C,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,uBAAuB,CAAC,EACtC,YAAY,EACZ,UAAU,GACX,EAAE,4BAA4B,2CA2C9B"}
@@ -1,8 +1,18 @@
1
1
  'use client';
2
2
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
- import { Database, Info } from 'lucide-react';
4
- import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '../../ui/card.js';
5
- import { Label } from '../../ui/label.js';
3
+ import { Database } from 'lucide-react';
4
+ import { useTranslation } from 'react-i18next';
5
+ import { SettingsSection, SettingsRow } from './settings-section-utils.js';
6
6
  export function DatabaseSettingsSection({ shipitAiHome, dbFileSize, }) {
7
- return (_jsxs(Card, { id: "database", className: "scroll-mt-6", "data-testid": "database-settings-section", children: [_jsxs(CardHeader, { children: [_jsxs("div", { className: "flex items-center gap-2", children: [_jsx(Database, { className: "text-muted-foreground h-4 w-4" }), _jsx(CardTitle, { children: "Database Location" })] }), _jsx(CardDescription, { children: _jsxs("span", { className: "inline-flex items-center gap-1", children: [_jsx(Info, { className: "h-3 w-3" }), "Read-only information about your ShipIT AI data directory and database"] }) })] }), _jsxs(CardContent, { className: "bg-muted/50 space-y-3 rounded-b-lg", children: [_jsxs("div", { className: "space-y-1", children: [_jsx(Label, { className: "text-muted-foreground text-xs", children: "SHIPIT_AI_HOME Directory" }), _jsx("p", { className: "font-mono text-sm", "data-testid": "shipit-ai-home-path", children: shipitAiHome })] }), _jsxs("div", { className: "space-y-1", children: [_jsx(Label, { className: "text-muted-foreground text-xs", children: "Database File Size" }), _jsx("p", { className: "text-sm", "data-testid": "db-file-size", children: dbFileSize })] })] })] }));
7
+ const { t } = useTranslation('web');
8
+ return (_jsxs(SettingsSection, { icon: Database, title: t('settings.database.title'), description: t('settings.database.sectionDescription'), testId: "database-settings-section", tooltip: t('settings.database.hint'), tooltipLinks: [
9
+ {
10
+ label: t('settings.database.links.settingsService'),
11
+ href: 'https://github.com/jrmatherly/shipit/blob/main/docs/architecture/settings-service.md',
12
+ },
13
+ {
14
+ label: t('settings.database.links.settingsSpec'),
15
+ href: 'https://github.com/jrmatherly/shipit/blob/main/specs/005-global-settings-service/spec.md',
16
+ },
17
+ ], children: [_jsx(SettingsRow, { label: t('settings.database.location'), description: t('settings.database.locationDescription'), tooltip: "The directory where ShipIT stores its SQLite database, logs, and configuration files. Change this via the SHIPIT_AI_HOME environment variable.", children: _jsx("span", { className: "text-muted-foreground max-w-50 truncate font-mono text-xs", "data-testid": "shipit-ai-home-path", children: shipitAiHome }) }), _jsx(SettingsRow, { label: t('settings.database.size'), tooltip: "Current size of the SQLite database file on disk. Large databases may slow down startup; consider archiving old features if this grows significantly.", children: _jsx("span", { className: "text-muted-foreground text-xs", "data-testid": "db-file-size", children: dbFileSize }) })] }));
8
18
  }
@@ -1,8 +1,14 @@
1
- import type { EnvironmentConfig } from '../../../../../../packages/core/src/domain/generated/output.js';
1
+ import type { Settings } from '../../../../../../packages/core/src/domain/generated/output.js';
2
2
  import type { AvailableTerminal } from '../../../app/actions/get-available-terminals.js';
3
+ import type { AvailableEditor } from '../../../app/actions/get-available-editors.js';
4
+ import type { AvailableShell } from '../../../app/actions/get-available-shells.js';
5
+ export declare const DEFAULT_EDITOR_OPTIONS: AvailableEditor[];
6
+ export declare const DEFAULT_SHELL_OPTIONS: AvailableShell[];
3
7
  export interface EnvironmentSettingsSectionProps {
4
- environment: EnvironmentConfig;
8
+ settings: Settings;
9
+ availableEditors?: AvailableEditor[];
10
+ availableShells?: AvailableShell[];
5
11
  availableTerminals?: AvailableTerminal[];
6
12
  }
7
- export declare function EnvironmentSettingsSection({ environment, availableTerminals, }: EnvironmentSettingsSectionProps): import("react/jsx-runtime").JSX.Element;
13
+ export declare function EnvironmentSettingsSection({ settings, availableEditors, availableShells, availableTerminals, }: EnvironmentSettingsSectionProps): import("react/jsx-runtime").JSX.Element;
8
14
  //# sourceMappingURL=environment-settings-section.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"environment-settings-section.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/settings/environment-settings-section.tsx"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yCAAyC,CAAC;AACjF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uCAAuC,CAAC;AAgB/E,MAAM,WAAW,+BAA+B;IAC9C,WAAW,EAAE,iBAAiB,CAAC;IAC/B,kBAAkB,CAAC,EAAE,iBAAiB,EAAE,CAAC;CAC1C;AAED,wBAAgB,0BAA0B,CAAC,EACzC,WAAW,EACX,kBAAkB,GACnB,EAAE,+BAA+B,2CAuIjC"}
1
+ {"version":3,"file":"environment-settings-section.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/settings/environment-settings-section.tsx"],"names":[],"mappings":"AAmBA,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;AAEzE,eAAO,MAAM,sBAAsB,EAAE,eAAe,EAMnD,CAAC;AAEF,eAAO,MAAM,qBAAqB,EAAE,cAAc,EAIjD,CAAC;AAEF,MAAM,WAAW,+BAA+B;IAC9C,QAAQ,EAAE,QAAQ,CAAC;IACnB,gBAAgB,CAAC,EAAE,eAAe,EAAE,CAAC;IACrC,eAAe,CAAC,EAAE,cAAc,EAAE,CAAC;IACnC,kBAAkB,CAAC,EAAE,iBAAiB,EAAE,CAAC;CAC1C;AAED,wBAAgB,0BAA0B,CAAC,EACzC,QAAQ,EACR,gBAAgB,EAChB,eAAe,EACf,kBAAkB,GACnB,EAAE,+BAA+B,2CAkMjC"}
@@ -1,81 +1,91 @@
1
1
  'use client';
2
2
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
- import { useState, useTransition, useRef, useEffect } from 'react';
4
- import { Terminal, Check } from 'lucide-react';
3
+ import { useState, useTransition } from 'react';
4
+ import { Terminal } from 'lucide-react';
5
5
  import { toast } from 'sonner';
6
- import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '../../ui/card.js';
7
- import { Label } from '../../ui/label.js';
6
+ import { useTranslation } from 'react-i18next';
7
+ import { cn } from '../../../lib/utils.js';
8
8
  import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from '../../ui/select.js';
9
+ import { Badge } from '../../ui/badge.js';
9
10
  import { updateSettingsAction } from '../../../app/actions/update-settings.js';
10
- import { EditorType, TerminalType } from '../../../../../../packages/core/src/domain/generated/output.js';
11
- const EDITOR_OPTIONS = [
12
- { value: EditorType.VsCode, label: 'VS Code' },
13
- { value: EditorType.Cursor, label: 'Cursor' },
14
- { value: EditorType.Windsurf, label: 'Windsurf' },
15
- { value: EditorType.Zed, label: 'Zed' },
16
- { value: EditorType.Antigravity, label: 'Antigravity' },
11
+ import { TerminalType } from '../../../../../../packages/core/src/domain/generated/output.js';
12
+ import { getEditorTypeIcon } from '../../common/editor-type-icons.js';
13
+ import { SettingsSection, SettingsRow } from './settings-section-utils.js';
14
+ export const DEFAULT_EDITOR_OPTIONS = [
15
+ { id: 'vscode', name: 'VS Code', available: true },
16
+ { id: 'cursor', name: 'Cursor', available: true },
17
+ { id: 'windsurf', name: 'Windsurf', available: true },
18
+ { id: 'zed', name: 'Zed', available: true },
19
+ { id: 'antigravity', name: 'Antigravity', available: true },
17
20
  ];
18
- const SHELL_OPTIONS = [
19
- { value: 'bash', label: 'Bash' },
20
- { value: 'zsh', label: 'Zsh' },
21
- { value: 'fish', label: 'Fish' },
21
+ export const DEFAULT_SHELL_OPTIONS = [
22
+ { id: 'bash', name: 'Bash', available: true },
23
+ { id: 'zsh', name: 'Zsh', available: true },
24
+ { id: 'fish', name: 'Fish', available: true },
22
25
  ];
23
- export function EnvironmentSettingsSection({ environment, availableTerminals, }) {
24
- const [editor, setEditor] = useState(environment.defaultEditor);
25
- const [shell, setShell] = useState(environment.shellPreference);
26
- const [terminal, setTerminal] = useState(environment.terminalPreference ?? TerminalType.System);
27
- const [isPending, startTransition] = useTransition();
28
- const [showSaved, setShowSaved] = useState(false);
29
- const prevPendingRef = useRef(false);
30
- useEffect(() => {
31
- if (prevPendingRef.current && !isPending) {
32
- setShowSaved(true);
33
- const timer = setTimeout(() => setShowSaved(false), 2000);
34
- return () => clearTimeout(timer);
35
- }
36
- prevPendingRef.current = isPending;
37
- }, [isPending]);
26
+ export function EnvironmentSettingsSection({ settings, availableEditors, availableShells, availableTerminals, }) {
27
+ const { t } = useTranslation('web');
28
+ const [, startTransition] = useTransition();
29
+ const [editor, setEditor] = useState(settings.environment.defaultEditor);
30
+ const [shell, setShell] = useState(settings.environment.shellPreference);
31
+ const [terminal, setTerminal] = useState(settings.environment.terminalPreference ?? TerminalType.System);
32
+ const terminalOptions = availableTerminals ?? [
33
+ {
34
+ id: TerminalType.System,
35
+ name: t('settings.environment.systemTerminal'),
36
+ available: true,
37
+ },
38
+ ];
39
+ const editorOptions = availableEditors ?? DEFAULT_EDITOR_OPTIONS;
40
+ const shellOptions = availableShells ?? DEFAULT_SHELL_OPTIONS;
38
41
  function save(payload) {
39
42
  startTransition(async () => {
40
43
  const result = await updateSettingsAction(payload);
41
44
  if (!result.success) {
42
- toast.error(result.error ?? 'Failed to save IDE & Terminal settings');
45
+ toast.error(result.error ?? t('settings.failedToSave'));
43
46
  }
44
47
  });
45
48
  }
46
- function handleEditorChange(value) {
47
- setEditor(value);
48
- save({
49
- environment: {
50
- defaultEditor: value,
51
- shellPreference: shell,
52
- terminalPreference: terminal,
49
+ return (_jsxs(SettingsSection, { icon: Terminal, title: t('settings.environment.sectionTitle'), description: t('settings.environment.sectionDescription'), testId: "environment-settings-section", tooltip: t('settings.environment.hint'), tooltipLinks: [
50
+ {
51
+ label: t('settings.environment.links.configurationGuide'),
52
+ href: 'https://github.com/jrmatherly/shipit/blob/main/docs/guides/configuration.md',
53
53
  },
54
- });
55
- }
56
- function handleShellChange(value) {
57
- setShell(value);
58
- save({
59
- environment: {
60
- defaultEditor: editor,
61
- shellPreference: value,
62
- terminalPreference: terminal,
63
- },
64
- });
65
- }
66
- function handleTerminalChange(value) {
67
- setTerminal(value);
68
- save({
69
- environment: {
70
- defaultEditor: editor,
71
- shellPreference: shell,
72
- terminalPreference: value,
73
- },
74
- });
75
- }
76
- // Filter to only show installed terminals
77
- const terminalOptions = availableTerminals
78
- ? availableTerminals.filter((t) => t.available)
79
- : [{ id: TerminalType.System, name: 'System Terminal', available: true }];
80
- return (_jsxs(Card, { id: "environment", className: "scroll-mt-6", "data-testid": "environment-settings-section", children: [_jsxs(CardHeader, { children: [_jsxs("div", { className: "flex items-center justify-between", children: [_jsxs("div", { className: "flex items-center gap-2", children: [_jsx(Terminal, { className: "text-muted-foreground h-4 w-4" }), _jsx(CardTitle, { children: "IDE & Terminal" })] }), isPending ? _jsx("span", { className: "text-muted-foreground text-xs", children: "Saving..." }) : null, showSaved && !isPending ? (_jsxs("span", { className: "flex items-center gap-1 text-xs text-green-600", children: [_jsx(Check, { className: "h-3 w-3" }), "Saved"] })) : null] }), _jsx(CardDescription, { children: "Configure your default editor, shell, and terminal preferences" })] }), _jsxs(CardContent, { className: "space-y-4", children: [_jsxs("div", { className: "space-y-2", children: [_jsx(Label, { htmlFor: "default-editor", children: "Default Editor" }), _jsxs(Select, { value: editor, onValueChange: handleEditorChange, children: [_jsx(SelectTrigger, { id: "default-editor", "data-testid": "editor-select", children: _jsx(SelectValue, {}) }), _jsx(SelectContent, { children: EDITOR_OPTIONS.map((opt) => (_jsx(SelectItem, { value: opt.value, children: opt.label }, opt.value))) })] })] }), _jsxs("div", { className: "space-y-2", children: [_jsx(Label, { htmlFor: "shell-preference", children: "Shell Preference" }), _jsxs(Select, { value: shell, onValueChange: handleShellChange, children: [_jsx(SelectTrigger, { id: "shell-preference", "data-testid": "shell-select", children: _jsx(SelectValue, {}) }), _jsx(SelectContent, { children: SHELL_OPTIONS.map((opt) => (_jsx(SelectItem, { value: opt.value, children: opt.label }, opt.value))) })] })] }), _jsxs("div", { className: "space-y-2", children: [_jsx(Label, { htmlFor: "terminal-preference", children: "Terminal Emulator" }), _jsxs(Select, { value: terminal, onValueChange: handleTerminalChange, children: [_jsx(SelectTrigger, { id: "terminal-preference", "data-testid": "terminal-select", children: _jsx(SelectValue, {}) }), _jsx(SelectContent, { children: terminalOptions.map((opt) => (_jsx(SelectItem, { value: opt.id, children: opt.name }, opt.id))) })] })] })] })] }));
54
+ ], children: [_jsx(SettingsRow, { label: t('settings.environment.defaultEditor'), description: t('settings.environment.defaultEditorDescription'), tooltip: "The editor that opens when you click 'Launch' on a tool card or when ShipIT needs to open a file for review.", htmlFor: "default-editor", children: _jsxs(Select, { value: editor, onValueChange: (v) => {
55
+ setEditor(v);
56
+ save({
57
+ environment: {
58
+ defaultEditor: v,
59
+ shellPreference: shell,
60
+ terminalPreference: terminal,
61
+ },
62
+ });
63
+ }, children: [_jsx(SelectTrigger, { id: "default-editor", "data-testid": "editor-select", className: "w-64 cursor-pointer text-xs", children: _jsx(SelectValue, {}) }), _jsx(SelectContent, { children: editorOptions.map((opt) => {
64
+ const Icon = getEditorTypeIcon(opt.id);
65
+ return (_jsx(SelectItem, { value: opt.id, disabled: !opt.available, children: _jsxs("span", { className: "flex items-center gap-2 text-xs", children: [_jsx(Icon, { className: "h-4 w-4 shrink-0" }), opt.name, _jsx(Badge, { variant: "outline", className: cn('ml-auto px-1.5 py-0 text-[10px] leading-4 font-normal', opt.available
66
+ ? 'border-emerald-500/30 text-emerald-500'
67
+ : 'border-muted-foreground/30 text-muted-foreground'), children: opt.available ? 'Installed' : 'Not Installed' })] }) }, opt.id));
68
+ }) })] }) }), _jsx(SettingsRow, { label: t('settings.environment.shell'), description: t('settings.environment.shellDescription'), tooltip: "Controls which shell runs generated scripts like install commands and git operations. Match this to your daily driver shell.", htmlFor: "shell-preference", children: _jsxs(Select, { value: shell, onValueChange: (v) => {
69
+ setShell(v);
70
+ save({
71
+ environment: {
72
+ defaultEditor: editor,
73
+ shellPreference: v,
74
+ terminalPreference: terminal,
75
+ },
76
+ });
77
+ }, children: [_jsx(SelectTrigger, { id: "shell-preference", "data-testid": "shell-select", className: "w-64 cursor-pointer text-xs", children: _jsx(SelectValue, {}) }), _jsx(SelectContent, { children: shellOptions.map((opt) => (_jsx(SelectItem, { value: opt.id, disabled: !opt.available, children: _jsxs("span", { className: "flex items-center gap-2 text-xs", children: [opt.name, _jsx(Badge, { variant: "outline", className: cn('ml-auto px-1.5 py-0 text-[10px] leading-4 font-normal', opt.available
78
+ ? 'border-emerald-500/30 text-emerald-500'
79
+ : 'border-muted-foreground/30 text-muted-foreground'), children: opt.available ? 'Installed' : 'Not Installed' })] }) }, opt.id))) })] }) }), _jsx(SettingsRow, { label: t('settings.environment.terminal'), description: t('settings.environment.terminalDescription'), tooltip: "The terminal emulator launched when opening shell sessions from the web UI. Only affects web-launched terminals, not CLI usage.", htmlFor: "terminal-preference", children: _jsxs(Select, { value: terminal, onValueChange: (v) => {
80
+ setTerminal(v);
81
+ save({
82
+ environment: {
83
+ defaultEditor: editor,
84
+ shellPreference: shell,
85
+ terminalPreference: v,
86
+ },
87
+ });
88
+ }, children: [_jsx(SelectTrigger, { id: "terminal-preference", "data-testid": "terminal-select", className: "w-64 cursor-pointer text-xs", children: _jsx(SelectValue, {}) }), _jsx(SelectContent, { children: terminalOptions.map((opt) => (_jsx(SelectItem, { value: opt.id, disabled: !opt.available, children: _jsxs("span", { className: "flex items-center gap-2 text-xs", children: [opt.name, _jsx(Badge, { variant: "outline", className: cn('ml-auto px-1.5 py-0 text-[10px] leading-4 font-normal', opt.available
89
+ ? 'border-emerald-500/30 text-emerald-500'
90
+ : 'border-muted-foreground/30 text-muted-foreground'), children: opt.available ? 'Installed' : 'Not Installed' })] }) }, opt.id))) })] }) })] }));
81
91
  }
@@ -1 +1 @@
1
- {"version":3,"file":"environment-settings-section.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/settings/environment-settings-section.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAQ,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,0BAA0B,EAAE,MAAM,gCAAgC,CAAC;AAG5E,QAAA,MAAM,IAAI;;;;;;;CAOyC,CAAC;AAEpD,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAEnC,eAAO,MAAM,OAAO,EAAE,KAarB,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,KAS3B,CAAC;AAEF,eAAO,MAAM,YAAY,EAAE,KAe1B,CAAC;AAEF,eAAO,MAAM,kBAAkB,EAAE,KAQhC,CAAC"}
1
+ {"version":3,"file":"environment-settings-section.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/settings/environment-settings-section.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAQ,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,0BAA0B,EAAE,MAAM,gCAAgC,CAAC;AAM5E,QAAA,MAAM,IAAI;;;;;;;CAOyC,CAAC;AAEpD,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAEnC,eAAO,MAAM,OAAO,EAAE,KASrB,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,KAa3B,CAAC;AAEF,eAAO,MAAM,YAAY,EAAE,KAmB1B,CAAC;AAEF,eAAO,MAAM,kBAAkB,EAAE,KAIhC,CAAC"}
@@ -1,5 +1,7 @@
1
1
  import { EnvironmentSettingsSection } from './environment-settings-section.js';
2
+ import { createDefaultSettings } from '../../../../../../packages/core/src/domain/factories/settings-defaults.factory.js';
2
3
  import { EditorType, TerminalType } from '../../../../../../packages/core/src/domain/generated/output.js';
4
+ const baseSettings = createDefaultSettings();
3
5
  const meta = {
4
6
  title: 'Features/Settings/EnvironmentSettingsSection',
5
7
  component: EnvironmentSettingsSection,
@@ -11,11 +13,7 @@ const meta = {
11
13
  export default meta;
12
14
  export const Default = {
13
15
  args: {
14
- environment: {
15
- defaultEditor: EditorType.VsCode,
16
- shellPreference: 'bash',
17
- terminalPreference: TerminalType.System,
18
- },
16
+ settings: baseSettings,
19
17
  availableTerminals: [
20
18
  { id: 'system', name: 'System Terminal', available: true },
21
19
  { id: 'warp', name: 'Warp', available: true },
@@ -25,20 +23,28 @@ export const Default = {
25
23
  };
26
24
  export const CursorWithZsh = {
27
25
  args: {
28
- environment: {
29
- defaultEditor: EditorType.Cursor,
30
- shellPreference: 'zsh',
31
- terminalPreference: TerminalType.System,
26
+ settings: {
27
+ ...baseSettings,
28
+ environment: {
29
+ ...baseSettings.environment,
30
+ defaultEditor: EditorType.Cursor,
31
+ shellPreference: 'zsh',
32
+ terminalPreference: TerminalType.System,
33
+ },
32
34
  },
33
35
  availableTerminals: [{ id: 'system', name: 'System Terminal', available: true }],
34
36
  },
35
37
  };
36
38
  export const WarpSelected = {
37
39
  args: {
38
- environment: {
39
- defaultEditor: EditorType.VsCode,
40
- shellPreference: 'zsh',
41
- terminalPreference: TerminalType.Warp,
40
+ settings: {
41
+ ...baseSettings,
42
+ environment: {
43
+ ...baseSettings.environment,
44
+ defaultEditor: EditorType.VsCode,
45
+ shellPreference: 'zsh',
46
+ terminalPreference: TerminalType.Warp,
47
+ },
42
48
  },
43
49
  availableTerminals: [
44
50
  { id: 'system', name: 'System Terminal', available: true },
@@ -51,10 +57,6 @@ export const WarpSelected = {
51
57
  };
52
58
  export const OnlySystemTerminal = {
53
59
  args: {
54
- environment: {
55
- defaultEditor: EditorType.VsCode,
56
- shellPreference: 'bash',
57
- terminalPreference: TerminalType.System,
58
- },
60
+ settings: baseSettings,
59
61
  },
60
62
  };
@@ -1 +1 @@
1
- {"version":3,"file":"fab-layout-settings-section.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/settings/fab-layout-settings-section.tsx"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,QAAQ,EAAmB,MAAM,yCAAyC,CAAC;AAGzF,MAAM,WAAW,6BAA6B;IAC5C,QAAQ,EAAE,QAAQ,CAAC;CACpB;AAED,wBAAgB,wBAAwB,CAAC,EAAE,QAAQ,EAAE,EAAE,6BAA6B,2CAoCnF"}
1
+ {"version":3,"file":"fab-layout-settings-section.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/settings/fab-layout-settings-section.tsx"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,QAAQ,EAAmB,MAAM,yCAAyC,CAAC;AAGzF,MAAM,WAAW,6BAA6B;IAC5C,QAAQ,EAAE,QAAQ,CAAC;CACpB;AAED,wBAAgB,wBAAwB,CAAC,EAAE,QAAQ,EAAE,EAAE,6BAA6B,2CAsCnF"}
@@ -19,7 +19,7 @@ export function FabLayoutSettingsSection({ settings }) {
19
19
  }
20
20
  });
21
21
  }
22
- return (_jsx(SettingsSection, { icon: LayoutGrid, title: t('settings.fabLayout.title'), description: t('settings.fabLayout.description'), testId: "fab-layout-settings-section", children: _jsx(SwitchRow, { label: t('settings.fabLayout.swapPosition'), description: t('settings.fabLayout.swapPositionDescription'), id: "fab-swap-position", testId: "switch-fab-swap-position", checked: fabSwapPosition, onChange: (v) => {
22
+ return (_jsx(SettingsSection, { icon: LayoutGrid, title: t('settings.fabLayout.title'), description: t('settings.fabLayout.description'), testId: "fab-layout-settings-section", tooltip: t('settings.fabLayout.hint'), children: _jsx(SwitchRow, { label: t('settings.fabLayout.swapPosition'), description: t('settings.fabLayout.swapPositionDescription'), tooltip: "Swaps the Create button (bottom-right) and Chat button (bottom-left) positions on the control center canvas.", id: "fab-swap-position", testId: "switch-fab-swap-position", checked: fabSwapPosition, onChange: (v) => {
23
23
  setFabSwapPosition(v);
24
24
  save({ fabLayout: { swapPosition: v } });
25
25
  } }) }));
@@ -1,6 +1,6 @@
1
- import type { FeatureFlags } from '../../../../../../packages/core/src/domain/generated/output.js';
1
+ import type { Settings } from '../../../../../../packages/core/src/domain/generated/output.js';
2
2
  export interface FeatureFlagsSettingsSectionProps {
3
- featureFlags: FeatureFlags;
3
+ settings: Settings;
4
4
  }
5
- export declare function FeatureFlagsSettingsSection({ featureFlags }: FeatureFlagsSettingsSectionProps): import("react/jsx-runtime").JSX.Element;
5
+ export declare function FeatureFlagsSettingsSection({ settings }: FeatureFlagsSettingsSectionProps): import("react/jsx-runtime").JSX.Element;
6
6
  //# sourceMappingURL=feature-flags-settings-section.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"feature-flags-settings-section.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/settings/feature-flags-settings-section.tsx"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yCAAyC,CAAC;AAiC5E,MAAM,WAAW,gCAAgC;IAC/C,YAAY,EAAE,YAAY,CAAC;CAC5B;AAED,wBAAgB,2BAA2B,CAAC,EAAE,YAAY,EAAE,EAAE,gCAAgC,2CAgE7F"}
1
+ {"version":3,"file":"feature-flags-settings-section.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/settings/feature-flags-settings-section.tsx"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,QAAQ,EAAgB,MAAM,yCAAyC,CAAC;AAGtF,MAAM,WAAW,gCAAgC;IAC/C,QAAQ,EAAE,QAAQ,CAAC;CACpB;AAED,wBAAgB,2BAA2B,CAAC,EAAE,QAAQ,EAAE,EAAE,gCAAgC,2CA6IzF"}
@@ -1,61 +1,64 @@
1
1
  'use client';
2
2
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
- import { useState, useTransition, useRef, useEffect } from 'react';
4
- import { Flag, Check } from 'lucide-react';
3
+ import { useState, useTransition } from 'react';
4
+ import { Flag } from 'lucide-react';
5
5
  import { toast } from 'sonner';
6
- import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '../../ui/card.js';
7
- import { Label } from '../../ui/label.js';
8
- import { Switch } from '../../ui/switch.js';
6
+ import { useTranslation } from 'react-i18next';
9
7
  import { updateSettingsAction } from '../../../app/actions/update-settings.js';
10
- const FLAG_DESCRIPTIONS = {
11
- skills: 'Enable Skills navigation and functionality in the web UI',
12
- envDeploy: 'Enable environment deployment features in the web UI',
13
- debug: 'Enable debug UI elements and verbose client-side logging',
14
- githubImport: 'Enable GitHub repository import in the web UI',
15
- adoptBranch: 'Enable the ability to adopt existing branches as tracked features',
16
- gitRebaseSync: 'Enable git rebase-on-main and sync-main operations in the web UI',
17
- reactFileManager: 'Use the built-in React file manager instead of the native OS folder picker. Also serves as automatic fallback when the native picker is unavailable.',
18
- };
19
- const FLAG_LABELS = {
20
- skills: 'Skills',
21
- envDeploy: 'Deployments',
22
- debug: 'Debug',
23
- githubImport: 'GitHub Import',
24
- adoptBranch: 'Adopt Branch',
25
- gitRebaseSync: 'Git Rebase & Sync',
26
- reactFileManager: 'React File Manager',
27
- };
28
- const FLAG_KEYS = [
29
- 'skills',
30
- 'envDeploy',
31
- 'debug',
32
- 'githubImport',
33
- 'adoptBranch',
34
- 'gitRebaseSync',
35
- 'reactFileManager',
36
- ];
37
- export function FeatureFlagsSettingsSection({ featureFlags }) {
8
+ import { SettingsSection, SwitchRow } from './settings-section-utils.js';
9
+ export function FeatureFlagsSettingsSection({ settings }) {
10
+ const { t } = useTranslation('web');
11
+ const [, startTransition] = useTransition();
12
+ const featureFlags = settings.featureFlags ?? {
13
+ skills: false,
14
+ envDeploy: false,
15
+ debug: false,
16
+ githubImport: false,
17
+ adoptBranch: false,
18
+ gitRebaseSync: false,
19
+ reactFileManager: false,
20
+ plugins: false,
21
+ };
38
22
  const [flags, setFlags] = useState({ ...featureFlags });
39
- const [isPending, startTransition] = useTransition();
40
- const [showSaved, setShowSaved] = useState(false);
41
- const prevPendingRef = useRef(false);
42
- useEffect(() => {
43
- if (prevPendingRef.current && !isPending) {
44
- setShowSaved(true);
45
- const timer = setTimeout(() => setShowSaved(false), 2000);
46
- return () => clearTimeout(timer);
47
- }
48
- prevPendingRef.current = isPending;
49
- }, [isPending]);
50
- function handleFlagChange(key, value) {
51
- const newFlags = { ...flags, [key]: value };
52
- setFlags(newFlags);
23
+ function save(payload) {
53
24
  startTransition(async () => {
54
- const result = await updateSettingsAction({ featureFlags: newFlags });
25
+ const result = await updateSettingsAction(payload);
55
26
  if (!result.success) {
56
- toast.error(result.error ?? 'Failed to save feature flags');
27
+ toast.error(result.error ?? t('settings.failedToSave'));
57
28
  }
58
29
  });
59
30
  }
60
- return (_jsxs(Card, { id: "feature-flags", className: "scroll-mt-6", "data-testid": "feature-flags-settings-section", children: [_jsxs(CardHeader, { children: [_jsxs("div", { className: "flex items-center justify-between", children: [_jsxs("div", { className: "flex items-center gap-2", children: [_jsx(Flag, { className: "text-muted-foreground h-4 w-4" }), _jsx(CardTitle, { children: "Feature Flags" })] }), isPending ? _jsx("span", { className: "text-muted-foreground text-xs", children: "Saving..." }) : null, showSaved && !isPending ? (_jsxs("span", { className: "flex items-center gap-1 text-xs text-green-600", children: [_jsx(Check, { className: "h-3 w-3" }), "Saved"] })) : null] }), _jsx(CardDescription, { children: "Toggle experimental and optional features. Changes take effect after page navigation." })] }), _jsx(CardContent, { className: "space-y-4", children: FLAG_KEYS.map((key) => (_jsxs("div", { className: "flex items-center justify-between gap-4", children: [_jsxs("div", { className: "space-y-0.5", children: [_jsx(Label, { htmlFor: `flag-${key}`, children: FLAG_LABELS[key] }), _jsx("p", { className: "text-muted-foreground text-xs", children: FLAG_DESCRIPTIONS[key] })] }), _jsx(Switch, { id: `flag-${key}`, "data-testid": `switch-flag-${key}`, checked: flags[key], onCheckedChange: (v) => handleFlagChange(key, v) })] }, key))) })] }));
31
+ return (_jsxs(SettingsSection, { icon: Flag, title: t('settings.featureFlags.title'), description: t('settings.featureFlags.sectionDescription'), badge: t('settings.featureFlags.badge'), testId: "feature-flags-settings-section", tooltip: t('settings.featureFlags.hint'), children: [_jsx(SwitchRow, { label: t('settings.featureFlags.skills'), description: t('settings.featureFlags.skillsDescription'), tooltip: "Enables the Skills page in the sidebar for browsing and managing Claude Code skills.", id: "flag-skills", testId: "switch-flag-skills", checked: flags.skills, onChange: (v) => {
32
+ const newFlags = { ...flags, skills: v };
33
+ setFlags(newFlags);
34
+ save({ featureFlags: newFlags });
35
+ } }), _jsx(SwitchRow, { label: t('settings.featureFlags.deployments'), description: t('settings.featureFlags.deploymentsDescription'), tooltip: "Enables experimental deployment features for environment management.", id: "flag-envDeploy", testId: "switch-flag-envDeploy", checked: flags.envDeploy, onChange: (v) => {
36
+ const newFlags = { ...flags, envDeploy: v };
37
+ setFlags(newFlags);
38
+ save({ featureFlags: newFlags });
39
+ } }), _jsx(SwitchRow, { label: t('settings.featureFlags.debug'), description: t('settings.featureFlags.debugDescription'), tooltip: "Shows additional debugging information in the UI for troubleshooting.", id: "flag-debug", testId: "switch-flag-debug", checked: flags.debug, onChange: (v) => {
40
+ const newFlags = { ...flags, debug: v };
41
+ setFlags(newFlags);
42
+ save({ featureFlags: newFlags });
43
+ } }), _jsx(SwitchRow, { label: t('settings.featureFlags.githubImport'), description: t('settings.featureFlags.githubImportDescription'), tooltip: "Enables importing repositories directly from GitHub.", id: "flag-githubImport", testId: "switch-flag-githubImport", checked: flags.githubImport, onChange: (v) => {
44
+ const newFlags = { ...flags, githubImport: v };
45
+ setFlags(newFlags);
46
+ save({ featureFlags: newFlags });
47
+ } }), _jsx(SwitchRow, { label: t('settings.featureFlags.adoptBranch'), description: t('settings.featureFlags.adoptBranchDescription'), tooltip: "Enables adopting existing git branches as ShipIT features.", id: "flag-adoptBranch", testId: "switch-flag-adoptBranch", checked: flags.adoptBranch, onChange: (v) => {
48
+ const newFlags = { ...flags, adoptBranch: v };
49
+ setFlags(newFlags);
50
+ save({ featureFlags: newFlags });
51
+ } }), _jsx(SwitchRow, { label: t('settings.featureFlags.gitRebaseSync'), description: t('settings.featureFlags.gitRebaseSyncDescription'), tooltip: "Uses git rebase instead of merge when syncing feature branches with the upstream branch.", id: "flag-gitRebaseSync", testId: "switch-flag-gitRebaseSync", checked: flags.gitRebaseSync, onChange: (v) => {
52
+ const newFlags = { ...flags, gitRebaseSync: v };
53
+ setFlags(newFlags);
54
+ save({ featureFlags: newFlags });
55
+ } }), _jsx(SwitchRow, { label: t('settings.featureFlags.reactFileManager'), description: t('settings.featureFlags.reactFileManagerDescription'), tooltip: "Replaces the native file picker dialog with a React-based file browser for selecting project folders.", id: "flag-reactFileManager", testId: "switch-flag-reactFileManager", checked: flags.reactFileManager, onChange: (v) => {
56
+ const newFlags = { ...flags, reactFileManager: v };
57
+ setFlags(newFlags);
58
+ save({ featureFlags: newFlags });
59
+ } }), _jsx(SwitchRow, { label: t('settings.featureFlags.plugins'), description: t('settings.featureFlags.pluginsDescription'), tooltip: "Enables the Plugins page for browsing and managing Claude Code plugins from a LiteLLM marketplace.", id: "flag-plugins", testId: "switch-flag-plugins", checked: flags.plugins, onChange: (v) => {
60
+ const newFlags = { ...flags, plugins: v };
61
+ setFlags(newFlags);
62
+ save({ featureFlags: newFlags });
63
+ } })] }));
61
64
  }
@@ -1 +1 @@
1
- {"version":3,"file":"feature-flags-settings-section.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/settings/feature-flags-settings-section.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAQ,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,2BAA2B,EAAE,MAAM,kCAAkC,CAAC;AAE/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,KAYrB,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,KAYxB,CAAC;AAEF,eAAO,MAAM,WAAW,EAAE,KAYzB,CAAC"}
1
+ {"version":3,"file":"feature-flags-settings-section.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/settings/feature-flags-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,KAgBxB,CAAC;AAEF,eAAO,MAAM,WAAW,EAAE,KAgBzB,CAAC"}