@shipit-ai/cli 1.164.2 → 1.165.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (598) hide show
  1. package/README.md +3 -7
  2. package/dist/packages/core/src/application/ports/output/services/environment-detector.service.d.ts +54 -0
  3. package/dist/packages/core/src/application/ports/output/services/environment-detector.service.d.ts.map +1 -0
  4. package/dist/packages/core/src/application/ports/output/services/environment-detector.service.js +8 -0
  5. package/dist/packages/core/src/application/ports/output/services/index.d.ts +1 -0
  6. package/dist/packages/core/src/application/ports/output/services/index.d.ts.map +1 -1
  7. package/dist/packages/core/src/application/ports/output/services/tool-metadata-service.interface.d.ts +5 -1
  8. package/dist/packages/core/src/application/ports/output/services/tool-metadata-service.interface.d.ts.map +1 -1
  9. package/dist/packages/core/src/application/use-cases/agents/configure-agent.use-case.d.ts +1 -1
  10. package/dist/packages/core/src/application/use-cases/agents/configure-agent.use-case.js +1 -1
  11. package/dist/packages/core/src/application/use-cases/agents/stop-agent-run.use-case.d.ts +1 -1
  12. package/dist/packages/core/src/application/use-cases/agents/stop-agent-run.use-case.js +1 -1
  13. package/dist/packages/core/src/application/use-cases/features/adopt-branch.use-case.d.ts +1 -1
  14. package/dist/packages/core/src/application/use-cases/features/adopt-branch.use-case.js +1 -1
  15. package/dist/packages/core/src/application/use-cases/settings/detect-environment-defaults.use-case.d.ts +18 -0
  16. package/dist/packages/core/src/application/use-cases/settings/detect-environment-defaults.use-case.d.ts.map +1 -0
  17. package/dist/packages/core/src/application/use-cases/settings/detect-environment-defaults.use-case.js +40 -0
  18. package/dist/packages/core/src/application/use-cases/settings/index.d.ts +1 -0
  19. package/dist/packages/core/src/application/use-cases/settings/index.d.ts.map +1 -1
  20. package/dist/packages/core/src/application/use-cases/settings/index.js +1 -0
  21. package/dist/packages/core/src/application/use-cases/settings/initialize-settings.use-case.d.ts +10 -4
  22. package/dist/packages/core/src/application/use-cases/settings/initialize-settings.use-case.d.ts.map +1 -1
  23. package/dist/packages/core/src/application/use-cases/settings/initialize-settings.use-case.js +34 -7
  24. package/dist/packages/core/src/application/use-cases/tools/list-tools.use-case.d.ts +1 -1
  25. package/dist/packages/core/src/application/use-cases/tools/list-tools.use-case.d.ts.map +1 -1
  26. package/dist/packages/core/src/domain/factories/settings-defaults.factory.d.ts +18 -2
  27. package/dist/packages/core/src/domain/factories/settings-defaults.factory.d.ts.map +1 -1
  28. package/dist/packages/core/src/domain/factories/settings-defaults.factory.js +16 -5
  29. package/dist/packages/core/src/index.d.ts +2 -2
  30. package/dist/packages/core/src/index.js +2 -2
  31. package/dist/packages/core/src/infrastructure/di/modules/services.module.d.ts.map +1 -1
  32. package/dist/packages/core/src/infrastructure/di/modules/services.module.js +2 -0
  33. package/dist/packages/core/src/infrastructure/di/modules/use-cases.module.d.ts.map +1 -1
  34. package/dist/packages/core/src/infrastructure/di/modules/use-cases.module.js +2 -0
  35. package/dist/packages/core/src/infrastructure/di/modules/web-tokens.module.d.ts.map +1 -1
  36. package/dist/packages/core/src/infrastructure/di/modules/web-tokens.module.js +4 -0
  37. package/dist/packages/core/src/infrastructure/services/agents/common/executors/fixtures/plan.fixture.d.ts +1 -1
  38. package/dist/packages/core/src/infrastructure/services/agents/common/executors/fixtures/plan.fixture.js +1 -1
  39. package/dist/packages/core/src/infrastructure/services/agents/common/executors/fixtures/research.fixture.d.ts +1 -1
  40. package/dist/packages/core/src/infrastructure/services/agents/common/executors/fixtures/research.fixture.js +1 -1
  41. package/dist/packages/core/src/infrastructure/services/agents/common/executors/fixtures/spec-analyze.fixture.d.ts +2 -2
  42. package/dist/packages/core/src/infrastructure/services/agents/common/executors/fixtures/spec-analyze.fixture.d.ts.map +1 -1
  43. package/dist/packages/core/src/infrastructure/services/agents/common/executors/fixtures/spec-analyze.fixture.js +5 -5
  44. package/dist/packages/core/src/infrastructure/services/agents/common/executors/fixtures/spec-requirements.fixture.d.ts +2 -2
  45. package/dist/packages/core/src/infrastructure/services/agents/common/executors/fixtures/spec-requirements.fixture.d.ts.map +1 -1
  46. package/dist/packages/core/src/infrastructure/services/agents/common/executors/fixtures/spec-requirements.fixture.js +6 -6
  47. package/dist/packages/core/src/infrastructure/services/agents/common/executors/fixtures/tasks.fixture.d.ts +1 -1
  48. package/dist/packages/core/src/infrastructure/services/agents/common/executors/fixtures/tasks.fixture.js +1 -1
  49. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/evidence-prompts.js +1 -1
  50. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/merge-prompts.js +1 -1
  51. package/dist/packages/core/src/infrastructure/services/environment-detector.service.d.ts +38 -0
  52. package/dist/packages/core/src/infrastructure/services/environment-detector.service.d.ts.map +1 -0
  53. package/dist/packages/core/src/infrastructure/services/environment-detector.service.js +196 -0
  54. package/dist/packages/core/src/infrastructure/services/filesystem/shipit-ai-directory.service.d.ts +2 -2
  55. package/dist/packages/core/src/infrastructure/services/filesystem/shipit-ai-directory.service.js +4 -4
  56. package/dist/packages/core/src/infrastructure/services/git/pr-branding.d.ts +4 -4
  57. package/dist/packages/core/src/infrastructure/services/git/pr-branding.js +4 -4
  58. package/dist/packages/core/src/infrastructure/services/interactive/feature-context.builder.d.ts +1 -1
  59. package/dist/packages/core/src/infrastructure/services/interactive/feature-context.builder.js +7 -7
  60. package/dist/packages/core/src/infrastructure/services/port.service.d.ts +1 -1
  61. package/dist/packages/core/src/infrastructure/services/port.service.d.ts.map +1 -1
  62. package/dist/packages/core/src/infrastructure/services/port.service.js +1 -1
  63. package/dist/packages/core/src/infrastructure/services/tool-installer/tool-metadata.d.ts +6 -1
  64. package/dist/packages/core/src/infrastructure/services/tool-installer/tool-metadata.d.ts.map +1 -1
  65. package/dist/packages/core/src/infrastructure/services/tool-installer/tool-metadata.js +7 -0
  66. package/dist/packages/core/src/infrastructure/services/tool-installer/tool-metadata.service.d.ts +1 -0
  67. package/dist/packages/core/src/infrastructure/services/tool-installer/tool-metadata.service.d.ts.map +1 -1
  68. package/dist/packages/core/src/infrastructure/services/tool-installer/tool-metadata.service.js +4 -1
  69. package/dist/packages/core/src/infrastructure/services/tool-installer/tools/CLAUDE.md +2 -1
  70. package/dist/packages/core/src/infrastructure/services/tool-installer/tools/bash.json +20 -0
  71. package/dist/packages/core/src/infrastructure/services/tool-installer/tools/codex-cli.json +31 -0
  72. package/dist/packages/core/src/infrastructure/services/tool-installer/tools/fish.json +19 -0
  73. package/dist/packages/core/src/infrastructure/services/tool-installer/tools/powershell.json +24 -0
  74. package/dist/packages/core/src/infrastructure/services/tool-installer/tools/zsh.json +19 -0
  75. package/dist/src/presentation/cli/commands/agent/approve.command.d.ts +1 -1
  76. package/dist/src/presentation/cli/commands/agent/approve.command.js +1 -1
  77. package/dist/src/presentation/cli/commands/agent/delete.command.d.ts +1 -1
  78. package/dist/src/presentation/cli/commands/agent/delete.command.js +1 -1
  79. package/dist/src/presentation/cli/commands/agent/index.d.ts +6 -6
  80. package/dist/src/presentation/cli/commands/agent/index.js +6 -6
  81. package/dist/src/presentation/cli/commands/agent/logs.command.d.ts +3 -3
  82. package/dist/src/presentation/cli/commands/agent/logs.command.js +3 -3
  83. package/dist/src/presentation/cli/commands/agent/ls.command.d.ts +1 -1
  84. package/dist/src/presentation/cli/commands/agent/ls.command.js +1 -1
  85. package/dist/src/presentation/cli/commands/agent/reject.command.d.ts +1 -1
  86. package/dist/src/presentation/cli/commands/agent/reject.command.js +1 -1
  87. package/dist/src/presentation/cli/commands/agent/show.command.d.ts +1 -1
  88. package/dist/src/presentation/cli/commands/agent/show.command.js +1 -1
  89. package/dist/src/presentation/cli/commands/agent/stop.command.d.ts +1 -1
  90. package/dist/src/presentation/cli/commands/agent/stop.command.js +1 -1
  91. package/dist/src/presentation/cli/commands/daemon/start-daemon.d.ts +4 -4
  92. package/dist/src/presentation/cli/commands/daemon/start-daemon.js +4 -4
  93. package/dist/src/presentation/cli/commands/daemon/stop-daemon.d.ts +5 -5
  94. package/dist/src/presentation/cli/commands/daemon/stop-daemon.js +5 -5
  95. package/dist/src/presentation/cli/commands/feat/adopt.command.d.ts +3 -3
  96. package/dist/src/presentation/cli/commands/feat/adopt.command.js +3 -3
  97. package/dist/src/presentation/cli/commands/feat/approve.command.d.ts +1 -1
  98. package/dist/src/presentation/cli/commands/feat/approve.command.js +1 -1
  99. package/dist/src/presentation/cli/commands/feat/archive.command.d.ts +3 -3
  100. package/dist/src/presentation/cli/commands/feat/archive.command.js +3 -3
  101. package/dist/src/presentation/cli/commands/feat/del.command.d.ts +5 -5
  102. package/dist/src/presentation/cli/commands/feat/del.command.js +5 -5
  103. package/dist/src/presentation/cli/commands/feat/index.d.ts +4 -4
  104. package/dist/src/presentation/cli/commands/feat/index.js +4 -4
  105. package/dist/src/presentation/cli/commands/feat/logs.command.d.ts +3 -3
  106. package/dist/src/presentation/cli/commands/feat/logs.command.js +3 -3
  107. package/dist/src/presentation/cli/commands/feat/ls.command.d.ts +3 -3
  108. package/dist/src/presentation/cli/commands/feat/ls.command.js +3 -3
  109. package/dist/src/presentation/cli/commands/feat/new.command.d.ts +3 -3
  110. package/dist/src/presentation/cli/commands/feat/new.command.js +4 -4
  111. package/dist/src/presentation/cli/commands/feat/reject.command.d.ts +1 -1
  112. package/dist/src/presentation/cli/commands/feat/reject.command.js +1 -1
  113. package/dist/src/presentation/cli/commands/feat/resume.command.d.ts +1 -1
  114. package/dist/src/presentation/cli/commands/feat/resume.command.js +1 -1
  115. package/dist/src/presentation/cli/commands/feat/review.command.d.ts +1 -1
  116. package/dist/src/presentation/cli/commands/feat/review.command.js +1 -1
  117. package/dist/src/presentation/cli/commands/feat/show.command.d.ts +1 -1
  118. package/dist/src/presentation/cli/commands/feat/show.command.d.ts.map +1 -1
  119. package/dist/src/presentation/cli/commands/feat/show.command.js +4 -3
  120. package/dist/src/presentation/cli/commands/feat/start.command.d.ts +1 -1
  121. package/dist/src/presentation/cli/commands/feat/start.command.js +1 -1
  122. package/dist/src/presentation/cli/commands/feat/unarchive.command.d.ts +2 -2
  123. package/dist/src/presentation/cli/commands/feat/unarchive.command.js +2 -2
  124. package/dist/src/presentation/cli/commands/ide-open.command.d.ts +1 -1
  125. package/dist/src/presentation/cli/commands/ide-open.command.js +1 -1
  126. package/dist/src/presentation/cli/commands/log-viewer.d.ts +1 -1
  127. package/dist/src/presentation/cli/commands/log-viewer.js +1 -1
  128. package/dist/src/presentation/cli/commands/repo/add.command.d.ts +3 -3
  129. package/dist/src/presentation/cli/commands/repo/add.command.js +3 -3
  130. package/dist/src/presentation/cli/commands/repo/index.d.ts +4 -4
  131. package/dist/src/presentation/cli/commands/repo/index.js +4 -4
  132. package/dist/src/presentation/cli/commands/repo/ls.command.d.ts +1 -1
  133. package/dist/src/presentation/cli/commands/repo/ls.command.js +1 -1
  134. package/dist/src/presentation/cli/commands/repo/show.command.d.ts +1 -1
  135. package/dist/src/presentation/cli/commands/repo/show.command.js +1 -1
  136. package/dist/src/presentation/cli/commands/restart.command.d.ts +3 -3
  137. package/dist/src/presentation/cli/commands/restart.command.js +5 -5
  138. package/dist/src/presentation/cli/commands/run.command.d.ts +5 -5
  139. package/dist/src/presentation/cli/commands/run.command.js +5 -5
  140. package/dist/src/presentation/cli/commands/session/index.d.ts +3 -3
  141. package/dist/src/presentation/cli/commands/session/index.js +3 -3
  142. package/dist/src/presentation/cli/commands/session/ls.command.d.ts +6 -6
  143. package/dist/src/presentation/cli/commands/session/ls.command.js +6 -6
  144. package/dist/src/presentation/cli/commands/session/show.command.d.ts +3 -3
  145. package/dist/src/presentation/cli/commands/session/show.command.js +3 -3
  146. package/dist/src/presentation/cli/commands/settings/agent.command.d.ts +4 -4
  147. package/dist/src/presentation/cli/commands/settings/agent.command.js +7 -7
  148. package/dist/src/presentation/cli/commands/settings/ide.command.d.ts +3 -3
  149. package/dist/src/presentation/cli/commands/settings/ide.command.js +6 -6
  150. package/dist/src/presentation/cli/commands/settings/index.d.ts +10 -10
  151. package/dist/src/presentation/cli/commands/settings/index.js +10 -10
  152. package/dist/src/presentation/cli/commands/settings/init.command.d.ts +3 -3
  153. package/dist/src/presentation/cli/commands/settings/init.command.js +6 -6
  154. package/dist/src/presentation/cli/commands/settings/language.command.d.ts +2 -2
  155. package/dist/src/presentation/cli/commands/settings/language.command.js +3 -3
  156. package/dist/src/presentation/cli/commands/settings/model.command.d.ts +2 -2
  157. package/dist/src/presentation/cli/commands/settings/model.command.js +3 -3
  158. package/dist/src/presentation/cli/commands/settings/show.command.d.ts +4 -4
  159. package/dist/src/presentation/cli/commands/settings/show.command.js +7 -7
  160. package/dist/src/presentation/cli/commands/settings/workflow.command.d.ts +3 -3
  161. package/dist/src/presentation/cli/commands/settings/workflow.command.js +6 -6
  162. package/dist/src/presentation/cli/commands/start.command.d.ts +3 -3
  163. package/dist/src/presentation/cli/commands/start.command.js +5 -5
  164. package/dist/src/presentation/cli/commands/status.command.d.ts +4 -4
  165. package/dist/src/presentation/cli/commands/status.command.js +4 -4
  166. package/dist/src/presentation/cli/commands/stop.command.d.ts +2 -2
  167. package/dist/src/presentation/cli/commands/stop.command.js +2 -2
  168. package/dist/src/presentation/cli/commands/tools.command.d.ts +1 -1
  169. package/dist/src/presentation/cli/commands/tools.command.js +1 -1
  170. package/dist/src/presentation/cli/commands/ui.command.d.ts +4 -4
  171. package/dist/src/presentation/cli/commands/ui.command.js +7 -7
  172. package/dist/src/presentation/cli/commands/upgrade.command.d.ts +2 -2
  173. package/dist/src/presentation/cli/commands/upgrade.command.js +2 -2
  174. package/dist/src/presentation/cli/commands/version.command.d.ts +2 -2
  175. package/dist/src/presentation/cli/commands/version.command.js +2 -2
  176. package/dist/src/presentation/cli/index.d.ts +3 -3
  177. package/dist/src/presentation/cli/index.js +4 -4
  178. package/dist/src/presentation/cli/ui/index.d.ts +1 -1
  179. package/dist/src/presentation/cli/ui/index.js +1 -1
  180. package/dist/src/presentation/tui/themes/shipit-ai.theme.d.ts +4 -4
  181. package/dist/src/presentation/tui/themes/shipit-ai.theme.js +4 -4
  182. package/dist/src/presentation/web/app/actions/check-agent-auth.d.ts.map +1 -1
  183. package/dist/src/presentation/web/app/actions/check-agent-auth.js +69 -24
  184. package/dist/src/presentation/web/app/actions/deploy-feature.js +2 -2
  185. package/dist/src/presentation/web/app/actions/deploy-repository.js +2 -2
  186. package/dist/src/presentation/web/app/actions/get-all-agent-models.d.ts +1 -0
  187. package/dist/src/presentation/web/app/actions/get-all-agent-models.d.ts.map +1 -1
  188. package/dist/src/presentation/web/app/actions/get-all-agent-models.js +28 -3
  189. package/dist/src/presentation/web/app/actions/get-available-editors.d.ts +14 -0
  190. package/dist/src/presentation/web/app/actions/get-available-editors.d.ts.map +1 -0
  191. package/dist/src/presentation/web/app/actions/get-available-editors.js +24 -0
  192. package/dist/src/presentation/web/app/actions/get-available-shells.d.ts +14 -0
  193. package/dist/src/presentation/web/app/actions/get-available-shells.d.ts.map +1 -0
  194. package/dist/src/presentation/web/app/actions/get-available-shells.js +22 -0
  195. package/dist/src/presentation/web/app/actions/get-merge-review-data.js +3 -3
  196. package/dist/src/presentation/web/app/layout.d.ts.map +1 -1
  197. package/dist/src/presentation/web/app/layout.js +4 -13
  198. package/dist/src/presentation/web/app/settings/page.d.ts.map +1 -1
  199. package/dist/src/presentation/web/app/settings/page.js +6 -2
  200. package/dist/src/presentation/web/components/common/control-center-drawer/adopt-branch-drawer.js +1 -1
  201. package/dist/src/presentation/web/components/common/control-center-drawer/adopt-branch-drawer.stories.d.ts +1 -1
  202. package/dist/src/presentation/web/components/common/control-center-drawer/adopt-branch-drawer.stories.js +1 -1
  203. package/dist/src/presentation/web/components/common/control-center-drawer/global-chat-drawer-client.js +1 -1
  204. package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.stories.d.ts +1 -1
  205. package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.stories.js +1 -1
  206. package/dist/src/presentation/web/components/common/feature-drawer-tabs/overview-tab.stories.js +2 -2
  207. package/dist/src/presentation/web/components/common/feature-node/feature-node.stories.js +8 -8
  208. package/dist/src/presentation/web/components/common/github-import-dialog/github-import-dialog.js +1 -1
  209. package/dist/src/presentation/web/components/common/inline-attachments/inline-attachments.stories.js +5 -5
  210. package/dist/src/presentation/web/components/common/merge-review/merge-review.stories.js +8 -8
  211. package/dist/src/presentation/web/components/common/prd-questionnaire/prd-questionnaire.stories.js +1 -1
  212. package/dist/src/presentation/web/components/common/shipit-ai-logo/index.d.ts +2 -2
  213. package/dist/src/presentation/web/components/common/shipit-ai-logo/index.d.ts.map +1 -1
  214. package/dist/src/presentation/web/components/common/shipit-ai-logo/index.js +1 -1
  215. package/dist/src/presentation/web/components/common/shipit-ai-logo/{shep-logo.d.ts → shipit-ai-logo.d.ts} +1 -1
  216. package/dist/src/presentation/web/components/common/shipit-ai-logo/shipit-ai-logo.d.ts.map +1 -0
  217. package/dist/src/presentation/web/components/common/shipit-ai-logo/shipit-ai-logo.js +8 -0
  218. package/dist/src/presentation/web/components/common/shipit-ai-logo/{shep-logo.stories.d.ts → shipit-ai-logo.stories.d.ts} +2 -2
  219. package/dist/src/presentation/web/components/common/shipit-ai-logo/shipit-ai-logo.stories.d.ts.map +1 -0
  220. package/dist/src/presentation/web/components/common/shipit-ai-logo/{shep-logo.stories.js → shipit-ai-logo.stories.js} +1 -1
  221. package/dist/src/presentation/web/components/common/version-badge/version-badge.stories.js +2 -2
  222. package/dist/src/presentation/web/components/features/chat/ChatSheet.js +1 -1
  223. package/dist/src/presentation/web/components/features/control-center/control-center-empty-state.js +1 -1
  224. package/dist/src/presentation/web/components/features/control-center/welcome-agent-setup.d.ts.map +1 -1
  225. package/dist/src/presentation/web/components/features/control-center/welcome-agent-setup.js +6 -1
  226. package/dist/src/presentation/web/components/features/features-canvas/features-canvas.stories.js +19 -19
  227. package/dist/src/presentation/web/components/features/settings/AgentModelPicker/index.d.ts.map +1 -1
  228. package/dist/src/presentation/web/components/features/settings/AgentModelPicker/index.js +13 -2
  229. package/dist/src/presentation/web/components/features/settings/database-settings-section.js +1 -1
  230. package/dist/src/presentation/web/components/features/settings/settings-page-client.d.ts +5 -1
  231. package/dist/src/presentation/web/components/features/settings/settings-page-client.d.ts.map +1 -1
  232. package/dist/src/presentation/web/components/features/settings/settings-page-client.js +33 -27
  233. package/dist/src/presentation/web/components/features/tools/tool-card.js +1 -1
  234. package/dist/src/presentation/web/components/features/version/version-page-client.js +1 -1
  235. package/dist/src/presentation/web/components/layouts/app-sidebar/app-sidebar.d.ts.map +1 -1
  236. package/dist/src/presentation/web/components/layouts/app-sidebar/app-sidebar.js +3 -3
  237. package/dist/src/presentation/web/components/ui/sidebar.stories.js +1 -1
  238. package/dist/src/presentation/web/lib/session-scanner.js +2 -2
  239. package/dist/src/presentation/web/lib/version.d.ts +1 -1
  240. package/dist/src/presentation/web/lib/version.js +1 -1
  241. package/dist/src/presentation/web/{middleware.d.ts → proxy.d.ts} +4 -4
  242. package/dist/src/presentation/web/proxy.d.ts.map +1 -0
  243. package/dist/src/presentation/web/{middleware.js → proxy.js} +3 -3
  244. package/dist/src/presentation/web/types/theme.d.ts +1 -1
  245. package/dist/src/presentation/web/types/theme.js +1 -1
  246. package/dist/translations/ar/cli.json +17 -17
  247. package/dist/translations/ar/tui.json +2 -2
  248. package/dist/translations/ar/web.json +7 -5
  249. package/dist/translations/de/cli.json +17 -17
  250. package/dist/translations/de/tui.json +2 -2
  251. package/dist/translations/de/web.json +7 -5
  252. package/dist/translations/en/cli.json +17 -17
  253. package/dist/translations/en/tui.json +2 -2
  254. package/dist/translations/en/web.json +7 -5
  255. package/dist/translations/es/cli.json +17 -17
  256. package/dist/translations/es/tui.json +2 -2
  257. package/dist/translations/es/web.json +7 -5
  258. package/dist/translations/fr/cli.json +17 -17
  259. package/dist/translations/fr/tui.json +2 -2
  260. package/dist/translations/fr/web.json +7 -5
  261. package/dist/translations/he/cli.json +17 -17
  262. package/dist/translations/he/tui.json +2 -2
  263. package/dist/translations/he/web.json +7 -5
  264. package/dist/translations/pt/cli.json +17 -17
  265. package/dist/translations/pt/tui.json +2 -2
  266. package/dist/translations/pt/web.json +7 -5
  267. package/dist/translations/ru/cli.json +17 -17
  268. package/dist/translations/ru/tui.json +2 -2
  269. package/dist/translations/ru/web.json +7 -5
  270. package/dist/tsconfig.build.tsbuildinfo +1 -1
  271. package/package.json +2 -2
  272. package/web/.next/BUILD_ID +1 -1
  273. package/web/.next/build-manifest.json +5 -5
  274. package/web/.next/fallback-build-manifest.json +3 -3
  275. package/web/.next/prerender-manifest.json +3 -3
  276. package/web/.next/required-server-files.js +2 -2
  277. package/web/.next/required-server-files.json +2 -2
  278. package/web/.next/server/app/(dashboard)/@drawer/adopt/page/build-manifest.json +2 -2
  279. package/web/.next/server/app/(dashboard)/@drawer/adopt/page/server-reference-manifest.json +29 -29
  280. package/web/.next/server/app/(dashboard)/@drawer/adopt/page.js +2 -1
  281. package/web/.next/server/app/(dashboard)/@drawer/adopt/page.js.nft.json +1 -1
  282. package/web/.next/server/app/(dashboard)/@drawer/adopt/page_client-reference-manifest.js +1 -1
  283. package/web/.next/server/app/(dashboard)/@drawer/chat/page/build-manifest.json +2 -2
  284. package/web/.next/server/app/(dashboard)/@drawer/chat/page/server-reference-manifest.json +27 -27
  285. package/web/.next/server/app/(dashboard)/@drawer/chat/page.js +2 -1
  286. package/web/.next/server/app/(dashboard)/@drawer/chat/page.js.nft.json +1 -1
  287. package/web/.next/server/app/(dashboard)/@drawer/chat/page_client-reference-manifest.js +1 -1
  288. package/web/.next/server/app/(dashboard)/@drawer/create/page/build-manifest.json +2 -2
  289. package/web/.next/server/app/(dashboard)/@drawer/create/page/server-reference-manifest.json +30 -30
  290. package/web/.next/server/app/(dashboard)/@drawer/create/page.js +2 -1
  291. package/web/.next/server/app/(dashboard)/@drawer/create/page.js.nft.json +1 -1
  292. package/web/.next/server/app/(dashboard)/@drawer/create/page_client-reference-manifest.js +1 -1
  293. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page/build-manifest.json +2 -2
  294. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page/server-reference-manifest.json +37 -37
  295. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.js +2 -1
  296. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.js.nft.json +1 -1
  297. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
  298. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page/build-manifest.json +2 -2
  299. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page/server-reference-manifest.json +37 -37
  300. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js +2 -1
  301. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js.nft.json +1 -1
  302. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page_client-reference-manifest.js +1 -1
  303. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page/build-manifest.json +2 -2
  304. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page/server-reference-manifest.json +28 -28
  305. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page.js +2 -1
  306. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page.js.nft.json +1 -1
  307. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page_client-reference-manifest.js +1 -1
  308. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/build-manifest.json +2 -2
  309. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/server-reference-manifest.json +28 -28
  310. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js +2 -1
  311. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js.nft.json +1 -1
  312. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  313. package/web/.next/server/app/(dashboard)/chat/page/build-manifest.json +2 -2
  314. package/web/.next/server/app/(dashboard)/chat/page/server-reference-manifest.json +27 -27
  315. package/web/.next/server/app/(dashboard)/chat/page.js +2 -1
  316. package/web/.next/server/app/(dashboard)/chat/page.js.nft.json +1 -1
  317. package/web/.next/server/app/(dashboard)/chat/page_client-reference-manifest.js +1 -1
  318. package/web/.next/server/app/(dashboard)/create/page/build-manifest.json +2 -2
  319. package/web/.next/server/app/(dashboard)/create/page/server-reference-manifest.json +30 -30
  320. package/web/.next/server/app/(dashboard)/create/page.js +2 -1
  321. package/web/.next/server/app/(dashboard)/create/page.js.nft.json +1 -1
  322. package/web/.next/server/app/(dashboard)/create/page_client-reference-manifest.js +1 -1
  323. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page/build-manifest.json +2 -2
  324. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page/server-reference-manifest.json +37 -37
  325. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page.js +2 -1
  326. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page.js.nft.json +1 -1
  327. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
  328. package/web/.next/server/app/(dashboard)/feature/[featureId]/page/build-manifest.json +2 -2
  329. package/web/.next/server/app/(dashboard)/feature/[featureId]/page/server-reference-manifest.json +37 -37
  330. package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js +2 -1
  331. package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js.nft.json +1 -1
  332. package/web/.next/server/app/(dashboard)/feature/[featureId]/page_client-reference-manifest.js +1 -1
  333. package/web/.next/server/app/(dashboard)/page/build-manifest.json +2 -2
  334. package/web/.next/server/app/(dashboard)/page/server-reference-manifest.json +27 -27
  335. package/web/.next/server/app/(dashboard)/page.js +2 -1
  336. package/web/.next/server/app/(dashboard)/page.js.nft.json +1 -1
  337. package/web/.next/server/app/(dashboard)/page_client-reference-manifest.js +1 -1
  338. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page/build-manifest.json +2 -2
  339. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page/server-reference-manifest.json +28 -28
  340. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page.js +2 -1
  341. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page.js.nft.json +1 -1
  342. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page_client-reference-manifest.js +1 -1
  343. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/build-manifest.json +2 -2
  344. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/server-reference-manifest.json +28 -28
  345. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js +2 -1
  346. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js.nft.json +1 -1
  347. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  348. package/web/.next/server/app/_global-error/page/build-manifest.json +2 -2
  349. package/web/.next/server/app/_global-error.html +1 -1
  350. package/web/.next/server/app/_global-error.rsc +1 -1
  351. package/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  352. package/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  353. package/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  354. package/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  355. package/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  356. package/web/.next/server/app/_not-found/page/build-manifest.json +2 -2
  357. package/web/.next/server/app/_not-found/page/server-reference-manifest.json +6 -6
  358. package/web/.next/server/app/_not-found/page.js +2 -1
  359. package/web/.next/server/app/_not-found/page.js.nft.json +1 -1
  360. package/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  361. package/web/.next/server/app/api/attachments/preview/route.js.nft.json +1 -1
  362. package/web/.next/server/app/api/attachments/upload-from-path/route.js +1 -1
  363. package/web/.next/server/app/api/attachments/upload-from-path/route.js.nft.json +1 -1
  364. package/web/.next/server/app/api/dialog/pick-files/route.js.nft.json +1 -1
  365. package/web/.next/server/app/api/evidence/route.js.nft.json +1 -1
  366. package/web/.next/server/app/api/graph-data/route.js.nft.json +1 -1
  367. package/web/.next/server/app/api/interactive/chat/[featureId]/messages/route.js.nft.json +1 -1
  368. package/web/.next/server/app/settings/page/build-manifest.json +2 -2
  369. package/web/.next/server/app/settings/page/server-reference-manifest.json +42 -18
  370. package/web/.next/server/app/settings/page.js +3 -2
  371. package/web/.next/server/app/settings/page.js.nft.json +1 -1
  372. package/web/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  373. package/web/.next/server/app/skills/page/build-manifest.json +2 -2
  374. package/web/.next/server/app/skills/page/server-reference-manifest.json +11 -11
  375. package/web/.next/server/app/skills/page.js +2 -2
  376. package/web/.next/server/app/skills/page.js.nft.json +1 -1
  377. package/web/.next/server/app/skills/page_client-reference-manifest.js +1 -1
  378. package/web/.next/server/app/tools/page/build-manifest.json +2 -2
  379. package/web/.next/server/app/tools/page/server-reference-manifest.json +11 -11
  380. package/web/.next/server/app/tools/page.js +2 -2
  381. package/web/.next/server/app/tools/page.js.nft.json +1 -1
  382. package/web/.next/server/app/tools/page_client-reference-manifest.js +1 -1
  383. package/web/.next/server/app/version/page/build-manifest.json +2 -2
  384. package/web/.next/server/app/version/page/server-reference-manifest.json +6 -6
  385. package/web/.next/server/app/version/page.js +2 -1
  386. package/web/.next/server/app/version/page.js.nft.json +1 -1
  387. package/web/.next/server/app/version/page_client-reference-manifest.js +1 -1
  388. package/web/.next/server/chunks/[externals]__11vad82._.js +3 -0
  389. package/web/.next/server/chunks/[externals]__11vad82._.js.map +1 -0
  390. package/web/.next/server/chunks/[root-of-the-server]__0.2exzi._.js.map +1 -1
  391. package/web/.next/server/chunks/[root-of-the-server]__02xmnal._.js.map +1 -1
  392. package/web/.next/server/chunks/[root-of-the-server]__04jjtl_._.js.map +1 -1
  393. package/web/.next/server/chunks/[root-of-the-server]__07suer1._.js.map +1 -1
  394. package/web/.next/server/chunks/[root-of-the-server]__09118p2._.js.map +1 -1
  395. package/web/.next/server/chunks/[root-of-the-server]__0_.w-eb._.js.map +1 -1
  396. package/web/.next/server/chunks/[root-of-the-server]__0ip_e1x._.js.map +1 -1
  397. package/web/.next/server/chunks/{[root-of-the-server]__0ob3z53._.js → [root-of-the-server]__0l1p8bx._.js} +2 -2
  398. package/web/.next/server/chunks/{[root-of-the-server]__0ob3z53._.js.map → [root-of-the-server]__0l1p8bx._.js.map} +1 -1
  399. package/web/.next/server/chunks/[root-of-the-server]__0tb~wwk._.js +1 -1
  400. package/web/.next/server/chunks/[root-of-the-server]__13ni_ow._.js +20 -0
  401. package/web/.next/server/chunks/[root-of-the-server]__13ni_ow._.js.map +1 -0
  402. package/web/.next/server/chunks/ssr/0j.8_web__next-internal_server_app_(dashboard)_@drawer_adopt_page_actions_00~eq5i.js +3 -0
  403. package/web/.next/server/chunks/ssr/0j.8_web__next-internal_server_app_(dashboard)_@drawer_adopt_page_actions_00~eq5i.js.map +1 -0
  404. package/web/.next/server/chunks/ssr/0j.8_web__next-internal_server_app_(dashboard)_@drawer_chat_page_actions_0979_c..js +3 -0
  405. package/web/.next/server/chunks/ssr/0j.8_web__next-internal_server_app_(dashboard)_@drawer_chat_page_actions_0979_c..js.map +1 -0
  406. package/web/.next/server/chunks/ssr/0j.8_web__next-internal_server_app_(dashboard)_chat_page_actions_0dqll_1.js +3 -0
  407. package/web/.next/server/chunks/ssr/0j.8_web__next-internal_server_app_(dashboard)_chat_page_actions_0dqll_1.js.map +1 -0
  408. package/web/.next/server/chunks/ssr/0j.8_web_components_common_control-center-drawer_create-drawer-client_tsx_0g70fc5._.js +1 -1
  409. package/web/.next/server/chunks/ssr/0j.8_web_components_common_control-center-drawer_create-drawer-client_tsx_0g70fc5._.js.map +1 -1
  410. package/web/.next/server/chunks/ssr/0j.8_web_components_common_control-center-drawer_feature-drawer-client_tsx_104cna.._.js +2 -2
  411. package/web/.next/server/chunks/ssr/0j.8_web_components_common_control-center-drawer_feature-drawer-client_tsx_104cna.._.js.map +1 -1
  412. package/web/.next/server/chunks/ssr/0ukq_presentation_web_components_features_settings_settings-page-client_tsx_0j1uius._.js +1 -1
  413. package/web/.next/server/chunks/ssr/0ukq_presentation_web_components_features_settings_settings-page-client_tsx_0j1uius._.js.map +1 -1
  414. package/web/.next/server/chunks/ssr/11es_next_dist_0e36~wi._.js +1 -1
  415. package/web/.next/server/chunks/ssr/11y9_components_common_control-center-drawer_global-chat-drawer-client_tsx_03s32.q._.js +1 -1
  416. package/web/.next/server/chunks/ssr/11y9_components_common_control-center-drawer_global-chat-drawer-client_tsx_03s32.q._.js.map +1 -1
  417. package/web/.next/server/chunks/ssr/11y9_components_common_control-center-drawer_repository-drawer-client_tsx_09z.znp._.js +1 -1
  418. package/web/.next/server/chunks/ssr/11y9_components_common_control-center-drawer_repository-drawer-client_tsx_09z.znp._.js.map +1 -1
  419. package/web/.next/server/chunks/ssr/[root-of-the-server]__01~y8wi._.js +3 -0
  420. package/web/.next/server/chunks/ssr/[root-of-the-server]__01~y8wi._.js.map +1 -0
  421. package/web/.next/server/chunks/ssr/[root-of-the-server]__0np51e2._.js +3 -0
  422. package/web/.next/server/chunks/ssr/[root-of-the-server]__0np51e2._.js.map +1 -0
  423. package/web/.next/server/chunks/ssr/[root-of-the-server]__0qh.wn.._.js.map +1 -1
  424. package/web/.next/server/chunks/ssr/[root-of-the-server]__0rv1gci._.js +1 -1
  425. package/web/.next/server/chunks/ssr/[root-of-the-server]__0rv1gci._.js.map +1 -1
  426. package/web/.next/server/chunks/ssr/[root-of-the-server]__0uxn6-j._.js +3 -0
  427. package/web/.next/server/chunks/ssr/[root-of-the-server]__0uxn6-j._.js.map +1 -0
  428. package/web/.next/server/chunks/ssr/[root-of-the-server]__0~h382a._.js +3 -0
  429. package/web/.next/server/chunks/ssr/[root-of-the-server]__0~h382a._.js.map +1 -0
  430. package/web/.next/server/chunks/ssr/[root-of-the-server]__11-~i9u._.js +1 -1
  431. package/web/.next/server/chunks/ssr/[root-of-the-server]__11-~i9u._.js.map +1 -1
  432. package/web/.next/server/chunks/ssr/[root-of-the-server]__12g8h3_._.js +4 -0
  433. package/web/.next/server/chunks/ssr/[root-of-the-server]__12g8h3_._.js.map +1 -0
  434. package/web/.next/server/chunks/ssr/[root-of-the-server]__12qqi.~._.js +3 -0
  435. package/web/.next/server/chunks/ssr/[root-of-the-server]__12qqi.~._.js.map +1 -0
  436. package/web/.next/server/chunks/ssr/{_13e1_1b._.js → _0.gy.n8._.js} +2 -2
  437. package/web/.next/server/chunks/ssr/{_13e1_1b._.js.map → _0.gy.n8._.js.map} +1 -1
  438. package/web/.next/server/chunks/ssr/{_0sgeiju._.js → _01mq~sm._.js} +2 -2
  439. package/web/.next/server/chunks/ssr/{_0sgeiju._.js.map → _01mq~sm._.js.map} +1 -1
  440. package/web/.next/server/chunks/ssr/_0e5cv3q._.js +1 -1
  441. package/web/.next/server/chunks/ssr/_0e5cv3q._.js.map +1 -1
  442. package/web/.next/server/chunks/ssr/_0ez.1o4._.js +1 -1
  443. package/web/.next/server/chunks/ssr/_0ez.1o4._.js.map +1 -1
  444. package/web/.next/server/chunks/ssr/{_05h68we._.js → _0jk5q_z._.js} +2 -2
  445. package/web/.next/server/chunks/ssr/{_05h68we._.js.map → _0jk5q_z._.js.map} +1 -1
  446. package/web/.next/server/chunks/ssr/_0jpbsh_._.js +4 -0
  447. package/web/.next/server/chunks/ssr/_0jpbsh_._.js.map +1 -0
  448. package/web/.next/server/chunks/ssr/_0n.xy38._.js +3 -0
  449. package/web/.next/server/chunks/ssr/_0n.xy38._.js.map +1 -0
  450. package/web/.next/server/chunks/ssr/_0rvaoj4._.js +3 -0
  451. package/web/.next/server/chunks/ssr/_0rvaoj4._.js.map +1 -0
  452. package/web/.next/server/chunks/ssr/_0v.yfmg._.js +1 -1
  453. package/web/.next/server/chunks/ssr/_0v.yfmg._.js.map +1 -1
  454. package/web/.next/server/chunks/ssr/_0w-_hww._.js +1 -1
  455. package/web/.next/server/chunks/ssr/_0w-_hww._.js.map +1 -1
  456. package/web/.next/server/chunks/ssr/_11kuznh._.js +1 -1
  457. package/web/.next/server/chunks/ssr/_11kuznh._.js.map +1 -1
  458. package/web/.next/server/chunks/ssr/{_0ts70ov._.js → _13bl-l1._.js} +2 -2
  459. package/web/.next/server/chunks/ssr/{_0ts70ov._.js.map → _13bl-l1._.js.map} +1 -1
  460. package/web/.next/server/chunks/ssr/_13euo-f._.js +1 -1
  461. package/web/.next/server/chunks/ssr/_13euo-f._.js.map +1 -1
  462. package/web/.next/server/chunks/ssr/src_presentation_web_0.e4~xc._.js +3 -0
  463. package/web/.next/server/chunks/ssr/src_presentation_web_0.e4~xc._.js.map +1 -0
  464. package/web/.next/server/chunks/ssr/src_presentation_web_00dvh.m._.js +3 -0
  465. package/web/.next/server/chunks/ssr/src_presentation_web_00dvh.m._.js.map +1 -0
  466. package/web/.next/server/chunks/ssr/src_presentation_web_06b6~lt._.js +5 -0
  467. package/web/.next/server/chunks/ssr/src_presentation_web_06b6~lt._.js.map +1 -0
  468. package/web/.next/server/chunks/ssr/src_presentation_web_08fy2mf._.js +3 -0
  469. package/web/.next/server/chunks/ssr/src_presentation_web_08fy2mf._.js.map +1 -0
  470. package/web/.next/server/chunks/ssr/src_presentation_web_0f~udu1._.js +3 -0
  471. package/web/.next/server/chunks/ssr/src_presentation_web_0f~udu1._.js.map +1 -0
  472. package/web/.next/server/chunks/ssr/src_presentation_web_0qys821._.js +5 -0
  473. package/web/.next/server/chunks/ssr/src_presentation_web_0qys821._.js.map +1 -0
  474. package/web/.next/server/chunks/ssr/src_presentation_web_0q~dt0o._.js +3 -0
  475. package/web/.next/server/chunks/ssr/src_presentation_web_0q~dt0o._.js.map +1 -0
  476. package/web/.next/server/chunks/ssr/src_presentation_web_11jrkxt._.js +3 -0
  477. package/web/.next/server/chunks/ssr/src_presentation_web_11jrkxt._.js.map +1 -0
  478. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_1199d3x.js +3 -0
  479. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_1199d3x.js.map +1 -0
  480. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app__not-found_page_actions_0m2jqxx.js +3 -0
  481. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app__not-found_page_actions_0m2jqxx.js.map +1 -0
  482. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_version_page_actions_0krkh_0.js +3 -0
  483. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_version_page_actions_0krkh_0.js.map +1 -0
  484. package/web/.next/server/chunks/ssr/src_presentation_web_app_actions_load-settings_ts_0b8f3pf._.js +3 -0
  485. package/web/.next/server/chunks/ssr/src_presentation_web_app_actions_load-settings_ts_0b8f3pf._.js.map +1 -0
  486. package/web/.next/server/chunks/ssr/src_presentation_web_app_actions_open-ide_ts_0w2wqvu._.js +1 -1
  487. package/web/.next/server/chunks/ssr/src_presentation_web_app_actions_open-ide_ts_0w2wqvu._.js.map +1 -1
  488. package/web/.next/server/chunks/ssr/src_presentation_web_components_0sk2qdt._.js +1 -1
  489. package/web/.next/server/chunks/ssr/src_presentation_web_components_0sk2qdt._.js.map +1 -1
  490. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_0l3oxx9._.js +1 -1
  491. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_0l3oxx9._.js.map +1 -1
  492. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_tools_tools-page-client_tsx_0aji.op._.js +1 -1
  493. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_tools_tools-page-client_tsx_0aji.op._.js.map +1 -1
  494. package/web/.next/server/functions-config-manifest.json +11 -1
  495. package/web/.next/server/middleware/middleware-manifest.json +1 -27
  496. package/web/.next/server/middleware-build-manifest.js +5 -5
  497. package/web/.next/server/middleware-manifest.json +2 -32
  498. package/web/.next/server/middleware.js +5 -0
  499. package/web/.next/server/middleware.js.map +5 -0
  500. package/web/.next/server/middleware.js.nft.json +1 -0
  501. package/web/.next/server/pages/500.html +1 -1
  502. package/web/.next/server/server-reference-manifest.js +1 -1
  503. package/web/.next/server/server-reference-manifest.json +80 -56
  504. package/web/.next/static/chunks/00racug7sobut.js +1 -0
  505. package/web/.next/static/chunks/06sdx5zm71_u5.js +1 -0
  506. package/web/.next/static/chunks/{122mzkbtrj4-k.js → 071_2_.sfp-im.js} +2 -2
  507. package/web/.next/static/chunks/{0g-so1fagegtp.js → 08iq.j3rbmhbm.js} +1 -1
  508. package/web/.next/static/chunks/{0bdtgeoys8bq..js → 08iuksm8rvb09.js} +1 -1
  509. package/web/.next/static/chunks/{01~tm1-qp0baa.js → 08se-_opmk~.7.js} +1 -1
  510. package/web/.next/static/chunks/{17jsatqy81xc..js → 0icjwdqytqa_8.js} +2 -2
  511. package/web/.next/static/chunks/0r5dju6f1-i38.css +1 -0
  512. package/web/.next/static/chunks/{13xg0bjtuso~r.js → 0riti1bs-erm~.js} +1 -1
  513. package/web/.next/static/chunks/{0.2owry_sk_ak.js → 0s-e-ekdbgoqa.js} +1 -1
  514. package/web/.next/static/chunks/0t_48qc0x7bhs.js +3 -0
  515. package/web/.next/static/chunks/{0qz02~wj25f-f.js → 0u5.s.lv2bae5.js} +1 -1
  516. package/web/.next/static/chunks/{12pwrbjphv3z7.js → 0vgbvqu82ac1x.js} +1 -1
  517. package/web/.next/static/chunks/{0vlx6s5d1~d-w.js → 0wmckrtphfa12.js} +1 -1
  518. package/web/.next/static/chunks/0w~84g7r9307~.js +1 -0
  519. package/web/.next/static/chunks/0y1nwnouroh6k.js +1 -0
  520. package/web/.next/static/chunks/{07lrq10rx0tp1.js → 0~er~22zwvx0i.js} +1 -1
  521. package/web/.next/static/chunks/{0xs4~af3nc_15.js → 15lcx-697j_3z.js} +2 -2
  522. package/web/.next/static/chunks/{0rnvcu2blaow4.js → 15m2wfd5k_7fj.js} +1 -1
  523. package/web/.next/static/chunks/{turbopack-10upsk2jydmq4.js → turbopack-0ve8f54_veg.u.js} +1 -1
  524. package/web/.next/static/{CJ4Fr1ggL4xWEe_fapYLv → xP_-L4TLYvd3i_sEmljLs}/_clientMiddlewareManifest.js +1 -1
  525. package/web/public/apple-touch-icon.png +0 -0
  526. package/web/public/favicon-32x32.png +0 -0
  527. package/web/public/icon-192.png +0 -0
  528. package/web/public/icon-512.png +0 -0
  529. package/web/public/icons/agents/openai.svg +1 -1
  530. package/web/public/shipit-brain.png +0 -0
  531. package/web/public/shipit-icon.svg +68 -0
  532. package/web/public/shipit-logo.png +0 -0
  533. package/dist/src/presentation/web/components/common/shipit-ai-logo/shep-logo.d.ts.map +0 -1
  534. package/dist/src/presentation/web/components/common/shipit-ai-logo/shep-logo.js +0 -5
  535. package/dist/src/presentation/web/components/common/shipit-ai-logo/shep-logo.stories.d.ts.map +0 -1
  536. package/dist/src/presentation/web/middleware.d.ts.map +0 -1
  537. package/web/.next/server/chunks/ssr/[root-of-the-server]__0.j0ktf._.js +0 -4
  538. package/web/.next/server/chunks/ssr/[root-of-the-server]__0.j0ktf._.js.map +0 -1
  539. package/web/.next/server/chunks/ssr/[root-of-the-server]__07m44ax._.js +0 -3
  540. package/web/.next/server/chunks/ssr/[root-of-the-server]__07m44ax._.js.map +0 -1
  541. package/web/.next/server/chunks/ssr/[root-of-the-server]__0frgz11._.js +0 -4
  542. package/web/.next/server/chunks/ssr/[root-of-the-server]__0frgz11._.js.map +0 -1
  543. package/web/.next/server/chunks/ssr/[root-of-the-server]__0oi7r67._.js +0 -4
  544. package/web/.next/server/chunks/ssr/[root-of-the-server]__0oi7r67._.js.map +0 -1
  545. package/web/.next/server/chunks/ssr/[root-of-the-server]__0pti1a3._.js +0 -4
  546. package/web/.next/server/chunks/ssr/[root-of-the-server]__0pti1a3._.js.map +0 -1
  547. package/web/.next/server/chunks/ssr/[root-of-the-server]__0s9k_s3._.js +0 -4
  548. package/web/.next/server/chunks/ssr/[root-of-the-server]__0s9k_s3._.js.map +0 -1
  549. package/web/.next/server/chunks/ssr/[root-of-the-server]__0v-vmgt._.js +0 -4
  550. package/web/.next/server/chunks/ssr/[root-of-the-server]__0v-vmgt._.js.map +0 -1
  551. package/web/.next/server/chunks/ssr/[root-of-the-server]__0yky~xo._.js +0 -4
  552. package/web/.next/server/chunks/ssr/[root-of-the-server]__0yky~xo._.js.map +0 -1
  553. package/web/.next/server/chunks/ssr/[root-of-the-server]__11dc42t._.js +0 -4
  554. package/web/.next/server/chunks/ssr/[root-of-the-server]__11dc42t._.js.map +0 -1
  555. package/web/.next/server/chunks/ssr/_0__4si~._.js +0 -4
  556. package/web/.next/server/chunks/ssr/_0__4si~._.js.map +0 -1
  557. package/web/.next/server/chunks/ssr/_0_m17kl._.js +0 -4
  558. package/web/.next/server/chunks/ssr/_0_m17kl._.js.map +0 -1
  559. package/web/.next/server/chunks/ssr/_0d4miu.._.js +0 -4
  560. package/web/.next/server/chunks/ssr/_0d4miu.._.js.map +0 -1
  561. package/web/.next/server/chunks/ssr/_0e8ern9._.js +0 -4
  562. package/web/.next/server/chunks/ssr/_0e8ern9._.js.map +0 -1
  563. package/web/.next/server/chunks/ssr/_0hovej-._.js +0 -6
  564. package/web/.next/server/chunks/ssr/_0hovej-._.js.map +0 -1
  565. package/web/.next/server/chunks/ssr/_0p3zs6p._.js +0 -3
  566. package/web/.next/server/chunks/ssr/_0p3zs6p._.js.map +0 -1
  567. package/web/.next/server/chunks/ssr/_0qpq3xl._.js +0 -3
  568. package/web/.next/server/chunks/ssr/_0qpq3xl._.js.map +0 -1
  569. package/web/.next/server/chunks/ssr/_0r.3n~3._.js +0 -4
  570. package/web/.next/server/chunks/ssr/_0r.3n~3._.js.map +0 -1
  571. package/web/.next/server/chunks/ssr/_0t59q8r._.js +0 -4
  572. package/web/.next/server/chunks/ssr/_0t59q8r._.js.map +0 -1
  573. package/web/.next/server/chunks/ssr/_0zk-h5w._.js +0 -4
  574. package/web/.next/server/chunks/ssr/_0zk-h5w._.js.map +0 -1
  575. package/web/.next/server/chunks/ssr/_0~ev6dw._.js +0 -6
  576. package/web/.next/server/chunks/ssr/_0~ev6dw._.js.map +0 -1
  577. package/web/.next/server/chunks/ssr/_1161g9x._.js +0 -4
  578. package/web/.next/server/chunks/ssr/_1161g9x._.js.map +0 -1
  579. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_05m2q~u.js +0 -3
  580. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_05m2q~u.js.map +0 -1
  581. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_0.6zk.t.js +0 -3
  582. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_0.6zk.t.js.map +0 -1
  583. package/web/.next/server/edge/chunks/0pax_next_dist_esm_build_templates_edge-wrapper_0atr6ca.js +0 -3
  584. package/web/.next/server/edge/chunks/11es_next_dist_esm_build_templates_edge-wrapper_0atr6ca.js.map +0 -1
  585. package/web/.next/server/edge/chunks/11es_next_dist_esm_build_templates_edge-wrapper_0xg0zx-.js +0 -3
  586. package/web/.next/server/edge/chunks/11es_next_dist_esm_build_templates_edge-wrapper_0xg0zx-.js.map +0 -1
  587. package/web/.next/server/edge/chunks/[root-of-the-server]__0m078x4._.js +0 -11
  588. package/web/.next/server/edge/chunks/[root-of-the-server]__0m078x4._.js.map +0 -1
  589. package/web/.next/static/chunks/0_9hv9_f66hur.js +0 -1
  590. package/web/.next/static/chunks/0dr6q94jmx86b.css +0 -1
  591. package/web/.next/static/chunks/0in40lx7y7f8o.js +0 -1
  592. package/web/.next/static/chunks/0rv6fo9ui94r9.js +0 -1
  593. package/web/.next/static/chunks/0t82zfhqgor5r.js +0 -1
  594. package/web/.next/static/chunks/0whetjaoa5y.l.js +0 -3
  595. package/web/public/favicon-dark.svg +0 -6
  596. package/web/public/favicon-light.svg +0 -6
  597. /package/web/.next/static/{CJ4Fr1ggL4xWEe_fapYLv → xP_-L4TLYvd3i_sEmljLs}/_buildManifest.js +0 -0
  598. /package/web/.next/static/{CJ4Fr1ggL4xWEe_fapYLv → xP_-L4TLYvd3i_sEmljLs}/_ssgManifest.js +0 -0
@@ -2,14 +2,17 @@
2
2
  import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
3
3
  import * as React from 'react';
4
4
  import { Check, ChevronLeft, ChevronRight } from 'lucide-react';
5
+ import { useTranslation } from 'react-i18next';
5
6
  import { getAllAgentModels } from '../../../../app/actions/get-all-agent-models.js';
6
7
  import { updateAgentAndModel } from '../../../../app/actions/update-agent-and-model.js';
7
8
  import { getAgentTypeIcon } from '../../../common/feature-node/agent-type-icons.js';
8
9
  import { getModelMeta } from '../../../../lib/model-metadata.js';
10
+ import { Badge } from '../../../ui/badge.js';
9
11
  import { Button } from '../../../ui/button.js';
10
12
  import { Popover, PopoverContent, PopoverTrigger } from '../../../ui/popover.js';
11
13
  import { cn } from '../../../../lib/utils.js';
12
14
  export function AgentModelPicker({ initialAgentType, initialModel, onAgentModelChange, disabled, className, mode, }) {
15
+ const { t } = useTranslation('web');
13
16
  const [open, setOpen] = React.useState(false);
14
17
  const [groups, setGroups] = React.useState([]);
15
18
  const [loading, setLoading] = React.useState(true);
@@ -88,14 +91,22 @@ export function AgentModelPicker({ initialAgentType, initialModel, onAgentModelC
88
91
  const GroupIcon = getAgentTypeIcon(group.agentType);
89
92
  const isActive = agentType === group.agentType;
90
93
  const hasModels = group.models.length > 0;
91
- return (_jsxs("button", { type: "button", className: cn('flex w-full cursor-pointer items-center gap-2.5 px-3 py-2 text-xs transition-colors', 'hover:bg-accent hover:text-accent-foreground', isActive && 'bg-accent/50'), onClick: () => {
94
+ return (_jsxs("button", { type: "button", disabled: !group.installed, className: cn('flex w-full items-center gap-2.5 px-3 py-2 text-xs transition-colors', group.installed
95
+ ? 'hover:bg-accent hover:text-accent-foreground cursor-pointer'
96
+ : 'cursor-not-allowed opacity-60', isActive && 'bg-accent/50'), onClick: () => {
97
+ if (!group.installed)
98
+ return;
92
99
  if (hasModels) {
93
100
  drillInto(group.agentType);
94
101
  }
95
102
  else {
96
103
  handleSelect(group.agentType, '');
97
104
  }
98
- }, children: [_jsx(GroupIcon, { className: "h-4 w-4 shrink-0" }), _jsx("span", { className: "flex-1 text-start", children: group.label }), isActive && !hasModels ? (_jsx(Check, { className: "text-primary h-3.5 w-3.5 shrink-0" })) : null, hasModels ? (_jsx(ChevronRight, { className: "text-muted-foreground h-3.5 w-3.5 shrink-0" })) : null] }, group.agentType));
105
+ }, children: [_jsx(GroupIcon, { className: "h-4 w-4 shrink-0" }), _jsx("span", { className: "flex-1 text-start", children: group.label }), _jsx(Badge, { variant: "outline", className: cn('px-1.5 py-0 text-[10px] leading-4 font-normal', group.installed
106
+ ? 'border-emerald-500/30 text-emerald-500'
107
+ : 'border-muted-foreground/30 text-muted-foreground'), children: group.installed
108
+ ? t('settings.environment.installed')
109
+ : t('settings.environment.notInstalled') }), isActive && !hasModels ? (_jsx(Check, { className: "text-primary h-3.5 w-3.5 shrink-0" })) : null, hasModels && group.installed ? (_jsx(ChevronRight, { className: "text-muted-foreground h-3.5 w-3.5 shrink-0" })) : null] }, group.agentType));
99
110
  })] }), _jsx("div", { className: "w-1/2 shrink-0", children: activeGroup ? (_jsxs(_Fragment, { children: [_jsxs("button", { type: "button", className: "text-muted-foreground hover:text-foreground flex w-full cursor-pointer items-center gap-1.5 border-b px-3 py-2 text-xs font-medium transition-colors", onClick: drillBack, children: [_jsx(ChevronLeft, { className: "h-3.5 w-3.5" }), activeGroup.label] }), activeGroup.models.map((m) => {
100
111
  const isSelected = agentType === activeGroup.agentType && model === m.id;
101
112
  return (_jsxs("button", { type: "button", className: cn('flex w-full cursor-pointer items-center gap-3 px-3 py-2 text-start transition-colors', 'hover:bg-accent hover:text-accent-foreground', isSelected && 'bg-accent/50'), onClick: () => handleSelect(activeGroup.agentType, m.id), children: [_jsxs("div", { className: "flex min-w-0 flex-1 flex-col", children: [_jsx("span", { className: "text-xs font-medium", children: m.displayName }), _jsx("span", { className: "text-muted-foreground text-xs", children: m.description })] }), isSelected ? (_jsx(Check, { className: "text-primary h-3.5 w-3.5 shrink-0" })) : null] }, m.id));
@@ -4,5 +4,5 @@ import { Database, Info } from 'lucide-react';
4
4
  import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '../../ui/card.js';
5
5
  import { Label } from '../../ui/label.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
+ 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 })] })] })] }));
8
8
  }
@@ -1,10 +1,14 @@
1
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';
3
5
  export interface SettingsPageClientProps {
4
6
  settings: Settings;
5
7
  shipitAiHome: string;
6
8
  dbFileSize: string;
7
9
  availableTerminals?: AvailableTerminal[];
10
+ availableEditors?: AvailableEditor[];
11
+ availableShells?: AvailableShell[];
8
12
  }
9
- export declare function SettingsPageClient({ settings, shipitAiHome, dbFileSize, availableTerminals, }: SettingsPageClientProps): import("react/jsx-runtime").JSX.Element;
13
+ export declare function SettingsPageClient({ settings, shipitAiHome, dbFileSize, availableTerminals, availableEditors, availableShells, }: SettingsPageClientProps): import("react/jsx-runtime").JSX.Element;
10
14
  //# sourceMappingURL=settings-page-client.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"settings-page-client.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/settings/settings-page-client.tsx"],"names":[],"mappings":"AAkDA,OAAO,KAAK,EACV,QAAQ,EAGT,MAAM,yCAAyC,CAAC;AACjD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uCAAuC,CAAC;AA8B/E,MAAM,WAAW,uBAAuB;IACtC,QAAQ,EAAE,QAAQ,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,kBAAkB,CAAC,EAAE,iBAAiB,EAAE,CAAC;CAC1C;AAoDD,wBAAgB,kBAAkB,CAAC,EACjC,QAAQ,EACR,YAAY,EACZ,UAAU,EACV,kBAAkB,GACnB,EAAE,uBAAuB,2CAg6BzB"}
1
+ {"version":3,"file":"settings-page-client.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/settings/settings-page-client.tsx"],"names":[],"mappings":"AAmDA,OAAO,KAAK,EACV,QAAQ,EAGT,MAAM,yCAAyC,CAAC;AACjD,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;AA8BzE,MAAM,WAAW,uBAAuB;IACtC,QAAQ,EAAE,QAAQ,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,kBAAkB,CAAC,EAAE,iBAAiB,EAAE,CAAC;IACzC,gBAAgB,CAAC,EAAE,eAAe,EAAE,CAAC;IACrC,eAAe,CAAC,EAAE,cAAc,EAAE,CAAC;CACpC;AAoDD,wBAAgB,kBAAkB,CAAC,EACjC,QAAQ,EACR,YAAY,EACZ,UAAU,EACV,kBAAkB,EAClB,gBAAgB,EAChB,eAAe,GAChB,EAAE,uBAAuB,2CAq8BzB"}
@@ -6,8 +6,9 @@ import { toast } from 'sonner';
6
6
  import { useTranslation } from 'react-i18next';
7
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, Language, TerminalType, } from '../../../../../../packages/core/src/domain/generated/output.js';
11
+ import { Language, TerminalType, } from '../../../../../../packages/core/src/domain/generated/output.js';
11
12
  import { getEditorTypeIcon } from '../../common/editor-type-icons.js';
12
13
  import { AgentModelPicker } from '../../features/settings/AgentModelPicker/index.js';
13
14
  import { LanguageSettingsSection } from '../../features/settings/language-settings-section.js';
@@ -16,17 +17,17 @@ import { StageTimeoutsSettingsSection } from '../../features/settings/stage-time
16
17
  import { InteractiveAgentSettingsSection } from '../../features/settings/interactive-agent-settings-section.js';
17
18
  import { FabLayoutSettingsSection } from '../../features/settings/fab-layout-settings-section.js';
18
19
  import { SettingsSection, SettingsRow, SwitchRow, NumberStepper, SubsectionLabel, SectionHint, } from '../../features/settings/settings-section-utils.js';
19
- const EDITOR_OPTIONS = [
20
- { value: EditorType.VsCode, label: 'VS Code' },
21
- { value: EditorType.Cursor, label: 'Cursor' },
22
- { value: EditorType.Windsurf, label: 'Windsurf' },
23
- { value: EditorType.Zed, label: 'Zed' },
24
- { value: EditorType.Antigravity, label: 'Antigravity' },
20
+ const DEFAULT_EDITOR_OPTIONS = [
21
+ { id: 'vscode', name: 'VS Code', available: true },
22
+ { id: 'cursor', name: 'Cursor', available: true },
23
+ { id: 'windsurf', name: 'Windsurf', available: true },
24
+ { id: 'zed', name: 'Zed', available: true },
25
+ { id: 'antigravity', name: 'Antigravity', available: true },
25
26
  ];
26
- const SHELL_OPTIONS = [
27
- { value: 'bash', label: 'Bash' },
28
- { value: 'zsh', label: 'Zsh' },
29
- { value: 'fish', label: 'Fish' },
27
+ const DEFAULT_SHELL_OPTIONS = [
28
+ { id: 'bash', name: 'Bash', available: true },
29
+ { id: 'zsh', name: 'Zsh', available: true },
30
+ { id: 'fish', name: 'Fish', available: true },
30
31
  ];
31
32
  const SECTIONS = [
32
33
  { id: 'language', labelKey: 'settings.sections.language', icon: Globe },
@@ -83,7 +84,7 @@ function useSaveIndicator() {
83
84
  return { showSaving, showSaved, save };
84
85
  }
85
86
  /* ── Main component ── */
86
- export function SettingsPageClient({ settings, shipitAiHome, dbFileSize, availableTerminals, }) {
87
+ export function SettingsPageClient({ settings, shipitAiHome, dbFileSize, availableTerminals, availableEditors, availableShells, }) {
87
88
  const { t } = useTranslation('web');
88
89
  const { showSaving, showSaved, save } = useSaveIndicator();
89
90
  const featureFlags = settings.featureFlags ?? {
@@ -101,16 +102,15 @@ export function SettingsPageClient({ settings, shipitAiHome, dbFileSize, availab
101
102
  const [editor, setEditor] = useState(settings.environment.defaultEditor);
102
103
  const [shell, setShell] = useState(settings.environment.shellPreference);
103
104
  const [terminal, setTerminal] = useState(settings.environment.terminalPreference ?? TerminalType.System);
104
- // Filter to only show installed terminals
105
- const terminalOptions = availableTerminals
106
- ? availableTerminals.filter((t) => t.available)
107
- : [
108
- {
109
- id: TerminalType.System,
110
- name: t('settings.environment.systemTerminal'),
111
- available: true,
112
- },
113
- ];
105
+ const terminalOptions = availableTerminals ?? [
106
+ {
107
+ id: TerminalType.System,
108
+ name: t('settings.environment.systemTerminal'),
109
+ available: true,
110
+ },
111
+ ];
112
+ const editorOptions = availableEditors ?? DEFAULT_EDITOR_OPTIONS;
113
+ const shellOptions = availableShells ?? DEFAULT_SHELL_OPTIONS;
114
114
  // Workflow state
115
115
  const [openPr, setOpenPr] = useState(settings.workflow.openPrOnImplementationComplete);
116
116
  const [pushOnComplete, setPushOnComplete] = useState(settings.workflow.approvalGateDefaults.pushOnImplementationComplete);
@@ -219,9 +219,11 @@ export function SettingsPageClient({ settings, shipitAiHome, dbFileSize, availab
219
219
  terminalPreference: terminal,
220
220
  },
221
221
  });
222
- }, children: [_jsx(SelectTrigger, { id: "default-editor", "data-testid": "editor-select", className: "w-55 cursor-pointer text-xs", children: _jsx(SelectValue, {}) }), _jsx(SelectContent, { children: EDITOR_OPTIONS.map((opt) => {
223
- const Icon = getEditorTypeIcon(opt.value);
224
- return (_jsx(SelectItem, { value: opt.value, children: _jsxs("span", { className: "flex items-center gap-2 text-xs", children: [_jsx(Icon, { className: "h-4 w-4 shrink-0" }), opt.label] }) }, opt.value));
222
+ }, 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) => {
223
+ const Icon = getEditorTypeIcon(opt.id);
224
+ 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
225
+ ? 'border-emerald-500/30 text-emerald-500'
226
+ : 'border-muted-foreground/30 text-muted-foreground'), children: opt.available ? 'Installed' : 'Not Installed' })] }) }, opt.id));
225
227
  }) })] }) }), _jsx(SettingsRow, { label: t('settings.environment.shell'), description: t('settings.environment.shellDescription'), htmlFor: "shell-preference", children: _jsxs(Select, { value: shell, onValueChange: (v) => {
226
228
  setShell(v);
227
229
  save({
@@ -231,7 +233,9 @@ export function SettingsPageClient({ settings, shipitAiHome, dbFileSize, availab
231
233
  terminalPreference: terminal,
232
234
  },
233
235
  });
234
- }, children: [_jsx(SelectTrigger, { id: "shell-preference", "data-testid": "shell-select", className: "w-55 cursor-pointer text-xs", children: _jsx(SelectValue, {}) }), _jsx(SelectContent, { children: SHELL_OPTIONS.map((opt) => (_jsx(SelectItem, { value: opt.value, children: opt.label }, opt.value))) })] }) }), _jsx(SettingsRow, { label: t('settings.environment.terminal'), description: t('settings.environment.terminalDescription'), htmlFor: "terminal-preference", children: _jsxs(Select, { value: terminal, onValueChange: (v) => {
236
+ }, 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
237
+ ? 'border-emerald-500/30 text-emerald-500'
238
+ : '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'), htmlFor: "terminal-preference", children: _jsxs(Select, { value: terminal, onValueChange: (v) => {
235
239
  setTerminal(v);
236
240
  save({
237
241
  environment: {
@@ -240,7 +244,9 @@ export function SettingsPageClient({ settings, shipitAiHome, dbFileSize, availab
240
244
  terminalPreference: v,
241
245
  },
242
246
  });
243
- }, children: [_jsx(SelectTrigger, { id: "terminal-preference", "data-testid": "terminal-select", className: "w-55 cursor-pointer text-xs", children: _jsx(SelectValue, {}) }), _jsx(SelectContent, { children: terminalOptions.map((opt) => (_jsx(SelectItem, { value: opt.id, children: opt.name }, opt.id))) })] }) })] }), _jsx(SectionHint, { links: [
247
+ }, 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
248
+ ? 'border-emerald-500/30 text-emerald-500'
249
+ : 'border-muted-foreground/30 text-muted-foreground'), children: opt.available ? 'Installed' : 'Not Installed' })] }) }, opt.id))) })] }) })] }), _jsx(SectionHint, { links: [
244
250
  {
245
251
  label: t('settings.environment.links.configurationGuide'),
246
252
  href: 'https://github.com/jrmatherly/shipit/blob/main/docs/guides/configuration.md',
@@ -40,5 +40,5 @@ export function ToolCard({ tool, onRefresh, className }) {
40
40
  const config = TAG_CONFIG[tag] ?? { label: tag, icon: Monitor };
41
41
  const TagIcon = config.icon;
42
42
  return (_jsxs("span", { className: "text-muted-foreground/70 inline-flex items-center gap-0.5 text-[9px]", children: [_jsx(TagIcon, { className: "h-2.5 w-2.5" }), config.label] }, tag));
43
- }) })] }), _jsx("p", { "data-testid": "tool-card-summary", className: "text-muted-foreground mt-1 truncate text-xs", children: tool.summary }), _jsxs("div", { className: "mt-auto flex items-center justify-between pt-3", children: [_jsxs("div", { className: "flex items-center gap-2", children: [isError && tool.status.status === 'error' ? (_jsxs("span", { className: "flex items-center gap-1 truncate text-[10px] text-red-600 dark:text-red-400", title: tool.status.errorMessage, children: [_jsx(CircleX, { className: "h-3 w-3 shrink-0" }), tool.status.errorMessage ?? 'Error'] })) : isInstalled ? (_jsxs("span", { className: "flex items-center gap-1 text-[10px] text-emerald-600 dark:text-emerald-400", children: [_jsx(CheckCircle2, { className: "h-3 w-3" }), "Installed"] })) : (_jsxs("span", { className: "text-muted-foreground flex items-center gap-1 text-[10px]", children: [_jsx(Circle, { className: "h-3 w-3" }), "Not installed"] })), tool.required ? (_jsx(TooltipProvider, { children: _jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsx("span", { className: "rounded bg-amber-100 px-1.5 py-0.5 text-[9px] font-medium text-amber-700 dark:bg-amber-900/50 dark:text-amber-400", children: "Required" }) }), _jsx(TooltipContent, { side: "top", children: "This tool is required for Shep to function properly" })] }) })) : null] }), _jsx("div", { className: "flex items-center gap-1", children: isInstalled && canLaunch ? (_jsxs(Button, { size: "sm", variant: "outline", onClick: handleLaunch, disabled: isPending, "aria-label": `Launch ${tool.name}`, "data-testid": "tool-card-launch-button", className: "h-7 cursor-pointer rounded-md px-3 text-xs", children: [isPending ? (_jsx(Loader2, { className: "me-1 h-3 w-3 animate-spin" })) : (_jsx(Rocket, { className: "me-1 h-3 w-3" })), "Launch"] })) : !isInstalled && !isError ? (_jsxs(Button, { size: "sm", variant: "default", onClick: handleInstallClick, "aria-label": `Install ${tool.name}`, "data-testid": "tool-card-install-button", className: "h-7 cursor-pointer rounded-md px-3 text-xs", children: [_jsx(Download, { className: "me-1 h-3 w-3" }), "Install"] })) : null })] })] }), _jsx(ToolDetailDrawer, { tool: tool, open: drawerOpen, onClose: () => setDrawerOpen(false), onRefresh: onRefresh, autoStart: autoStartInstall })] }));
43
+ }) })] }), _jsx("p", { "data-testid": "tool-card-summary", className: "text-muted-foreground mt-1 truncate text-xs", children: tool.summary }), _jsxs("div", { className: "mt-auto flex items-center justify-between pt-3", children: [_jsxs("div", { className: "flex items-center gap-2", children: [isError && tool.status.status === 'error' ? (_jsxs("span", { className: "flex items-center gap-1 truncate text-[10px] text-red-600 dark:text-red-400", title: tool.status.errorMessage, children: [_jsx(CircleX, { className: "h-3 w-3 shrink-0" }), tool.status.errorMessage ?? 'Error'] })) : isInstalled ? (_jsxs("span", { className: "flex items-center gap-1 text-[10px] text-emerald-600 dark:text-emerald-400", children: [_jsx(CheckCircle2, { className: "h-3 w-3" }), "Installed"] })) : (_jsxs("span", { className: "text-muted-foreground flex items-center gap-1 text-[10px]", children: [_jsx(Circle, { className: "h-3 w-3" }), "Not installed"] })), tool.required ? (_jsx(TooltipProvider, { children: _jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsx("span", { className: "rounded bg-amber-100 px-1.5 py-0.5 text-[9px] font-medium text-amber-700 dark:bg-amber-900/50 dark:text-amber-400", children: "Required" }) }), _jsx(TooltipContent, { side: "top", children: "This tool is required for ShipIT to function properly" })] }) })) : null] }), _jsx("div", { className: "flex items-center gap-1", children: isInstalled && canLaunch ? (_jsxs(Button, { size: "sm", variant: "outline", onClick: handleLaunch, disabled: isPending, "aria-label": `Launch ${tool.name}`, "data-testid": "tool-card-launch-button", className: "h-7 cursor-pointer rounded-md px-3 text-xs", children: [isPending ? (_jsx(Loader2, { className: "me-1 h-3 w-3 animate-spin" })) : (_jsx(Rocket, { className: "me-1 h-3 w-3" })), "Launch"] })) : !isInstalled && !isError ? (_jsxs(Button, { size: "sm", variant: "default", onClick: handleInstallClick, "aria-label": `Install ${tool.name}`, "data-testid": "tool-card-install-button", className: "h-7 cursor-pointer rounded-md px-3 text-xs", children: [_jsx(Download, { className: "me-1 h-3 w-3" }), "Install"] })) : null })] })] }), _jsx(ToolDetailDrawer, { tool: tool, open: drawerOpen, onClose: () => setDrawerOpen(false), onRefresh: onRefresh, autoStart: autoStartInstall })] }));
44
44
  }
@@ -9,5 +9,5 @@ function InfoRow({ label, value, badge, badgeVariant = 'secondary' }) {
9
9
  return (_jsxs("div", { className: "flex items-center justify-between py-2", children: [_jsx("span", { className: "text-muted-foreground text-sm", children: label }), badge ? (_jsx(Badge, { variant: badgeVariant, children: value })) : (_jsx("span", { className: "font-mono text-sm", children: value }))] }));
10
10
  }
11
11
  export default function VersionPageClient({ versionInfo, systemInfo }) {
12
- return (_jsx("div", { className: "flex flex-col items-center justify-center p-4", children: _jsxs("div", { className: "w-full max-w-2xl space-y-6", children: [_jsxs("div", { className: "text-center", children: [_jsx("h1", { className: "text-3xl font-bold tracking-tight", children: versionInfo.name }), _jsx("p", { className: "text-muted-foreground mt-2", children: versionInfo.description }), _jsx("div", { className: "mt-4", children: _jsxs(Badge, { variant: "default", "data-testid": "version-badge", children: ["v", versionInfo.version] }) })] }), _jsxs(Tabs, { defaultValue: "overview", className: "w-full", children: [_jsxs(TabsList, { className: "grid w-full grid-cols-3", children: [_jsx(TabsTrigger, { value: "overview", children: "Overview" }), _jsx(TabsTrigger, { value: "system", children: "System" }), _jsx(TabsTrigger, { value: "features", children: "Features" })] }), _jsx(TabsContent, { value: "overview", children: _jsxs(Card, { children: [_jsxs(CardHeader, { children: [_jsx(CardTitle, { children: "Package Information" }), _jsx(CardDescription, { children: "Details about the Shep AI CLI package" })] }), _jsxs(CardContent, { className: "space-y-1", children: [_jsx(InfoRow, { label: "Package", value: versionInfo.name }), _jsx(InfoRow, { label: "Version", value: `v${versionInfo.version}`, badge: true, badgeVariant: "default" }), _jsx(InfoRow, { label: "License", value: "MIT", badge: true, badgeVariant: "outline" }), _jsx(InfoRow, { label: "Author", value: "Shipit AI" })] })] }) }), _jsx(TabsContent, { value: "system", children: _jsxs(Card, { children: [_jsxs(CardHeader, { children: [_jsx(CardTitle, { children: "System Information" }), _jsx(CardDescription, { children: "Runtime environment details" })] }), _jsxs(CardContent, { className: "space-y-1", children: [_jsx(InfoRow, { label: "Node.js", value: systemInfo.nodeVersion, badge: true, badgeVariant: "secondary" }), _jsx(InfoRow, { label: "Platform", value: `${systemInfo.platform} ${systemInfo.arch}` })] })] }) }), _jsx(TabsContent, { value: "features", children: _jsxs(Card, { children: [_jsxs(CardHeader, { children: [_jsx(CardTitle, { children: "Key Features" }), _jsx(CardDescription, { children: "What Shep AI can do for you" })] }), _jsx(CardContent, { children: _jsxs("ul", { className: "space-y-2 text-sm", children: [_jsxs("li", { className: "flex items-center gap-2", children: [_jsx(Badge, { variant: "outline", children: "AI" }), _jsx("span", { children: "Autonomous code generation" })] }), _jsxs("li", { className: "flex items-center gap-2", children: [_jsx(Badge, { variant: "outline", children: "SDLC" }), _jsx("span", { children: "Full development lifecycle automation" })] }), _jsxs("li", { className: "flex items-center gap-2", children: [_jsx(Badge, { variant: "outline", children: "CLI" }), _jsx("span", { children: "Powerful command-line interface" })] }), _jsxs("li", { className: "flex items-center gap-2", children: [_jsx(Badge, { variant: "outline", children: "Web" }), _jsx("span", { children: "Modern web UI dashboard" })] })] }) })] }) })] }), _jsxs("div", { className: "flex justify-center gap-4", children: [_jsx(Button, { asChild: true, variant: "outline", children: _jsx(Link, { href: "/", children: "Back to Home" }) }), _jsx(Button, { asChild: true, children: _jsx("a", { href: "https://github.com/jrmatherly/shipit", target: "_blank", rel: "noopener noreferrer", children: "View on GitHub" }) })] })] }) }));
12
+ return (_jsx("div", { className: "flex flex-col items-center justify-center p-4", children: _jsxs("div", { className: "w-full max-w-2xl space-y-6", children: [_jsxs("div", { className: "text-center", children: [_jsx("h1", { className: "text-3xl font-bold tracking-tight", children: versionInfo.name }), _jsx("p", { className: "text-muted-foreground mt-2", children: versionInfo.description }), _jsx("div", { className: "mt-4", children: _jsxs(Badge, { variant: "default", "data-testid": "version-badge", children: ["v", versionInfo.version] }) })] }), _jsxs(Tabs, { defaultValue: "overview", className: "w-full", children: [_jsxs(TabsList, { className: "grid w-full grid-cols-3", children: [_jsx(TabsTrigger, { value: "overview", children: "Overview" }), _jsx(TabsTrigger, { value: "system", children: "System" }), _jsx(TabsTrigger, { value: "features", children: "Features" })] }), _jsx(TabsContent, { value: "overview", children: _jsxs(Card, { children: [_jsxs(CardHeader, { children: [_jsx(CardTitle, { children: "Package Information" }), _jsx(CardDescription, { children: "Details about the ShipIT AI CLI package" })] }), _jsxs(CardContent, { className: "space-y-1", children: [_jsx(InfoRow, { label: "Package", value: versionInfo.name }), _jsx(InfoRow, { label: "Version", value: `v${versionInfo.version}`, badge: true, badgeVariant: "default" }), _jsx(InfoRow, { label: "License", value: "MIT", badge: true, badgeVariant: "outline" }), _jsx(InfoRow, { label: "Author", value: "ShipIT AI" })] })] }) }), _jsx(TabsContent, { value: "system", children: _jsxs(Card, { children: [_jsxs(CardHeader, { children: [_jsx(CardTitle, { children: "System Information" }), _jsx(CardDescription, { children: "Runtime environment details" })] }), _jsxs(CardContent, { className: "space-y-1", children: [_jsx(InfoRow, { label: "Node.js", value: systemInfo.nodeVersion, badge: true, badgeVariant: "secondary" }), _jsx(InfoRow, { label: "Platform", value: `${systemInfo.platform} ${systemInfo.arch}` })] })] }) }), _jsx(TabsContent, { value: "features", children: _jsxs(Card, { children: [_jsxs(CardHeader, { children: [_jsx(CardTitle, { children: "Key Features" }), _jsx(CardDescription, { children: "What ShipIT AI can do for you" })] }), _jsx(CardContent, { children: _jsxs("ul", { className: "space-y-2 text-sm", children: [_jsxs("li", { className: "flex items-center gap-2", children: [_jsx(Badge, { variant: "outline", children: "AI" }), _jsx("span", { children: "Autonomous code generation" })] }), _jsxs("li", { className: "flex items-center gap-2", children: [_jsx(Badge, { variant: "outline", children: "SDLC" }), _jsx("span", { children: "Full development lifecycle automation" })] }), _jsxs("li", { className: "flex items-center gap-2", children: [_jsx(Badge, { variant: "outline", children: "CLI" }), _jsx("span", { children: "Powerful command-line interface" })] }), _jsxs("li", { className: "flex items-center gap-2", children: [_jsx(Badge, { variant: "outline", children: "Web" }), _jsx("span", { children: "Modern web UI dashboard" })] })] }) })] }) })] }), _jsxs("div", { className: "flex justify-center gap-4", children: [_jsx(Button, { asChild: true, variant: "outline", children: _jsx(Link, { href: "/", children: "Back to Home" }) }), _jsx(Button, { asChild: true, children: _jsx("a", { href: "https://github.com/jrmatherly/shipit", target: "_blank", rel: "noopener noreferrer", children: "View on GitHub" }) })] })] }) }));
13
13
  }
@@ -1 +1 @@
1
- {"version":3,"file":"app-sidebar.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/layouts/app-sidebar/app-sidebar.tsx"],"names":[],"mappings":"AA2CA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2CAA2C,CAAC;AAI/E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAE7D,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,aAAa,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,YAAY,EAAE,iBAAiB,CAAC;IAEhC,cAAc,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;CAC9C;AAED,wBAAgB,UAAU,CAAC,EACzB,QAAQ,EACR,YAAY,EAEZ,cAAc,GACf,EAAE,eAAe,2CAqQjB"}
1
+ {"version":3,"file":"app-sidebar.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/layouts/app-sidebar/app-sidebar.tsx"],"names":[],"mappings":"AA2CA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2CAA2C,CAAC;AAI/E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAE7D,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,aAAa,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,YAAY,EAAE,iBAAiB,CAAC;IAEhC,cAAc,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;CAC9C;AAED,wBAAgB,UAAU,CAAC,EACzB,QAAQ,EACR,YAAY,EAEZ,cAAc,GACf,EAAE,eAAe,2CAyQjB"}
@@ -1,5 +1,5 @@
1
1
  'use client';
2
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
3
  import { useMemo } from 'react';
4
4
  import { usePathname } from 'next/navigation';
5
5
  import { Home, Moon, Sun, Volume2, VolumeOff, Zap, ZapOff, Wrench, Puzzle, Settings, } from 'lucide-react';
@@ -64,11 +64,11 @@ export function AppSidebar({ features, featureFlags, onFeatureClick, }) {
64
64
  'flex min-w-0 flex-1 items-center gap-2 overflow-hidden px-2',
65
65
  'transition-opacity duration-200 ease-out',
66
66
  expandedVisible ? 'opacity-100' : 'opacity-0',
67
- ].join(' '), "aria-hidden": !expandedVisible, children: [_jsx(ShipitAiLogo, { className: "shrink-0", size: 20, variant: versionData.isDev ? 'dev' : 'default' }), _jsx("span", { className: "truncate text-sm font-semibold tracking-tight", children: "Shep" }), _jsx(VersionBadge, { version: versionData.version, branch: versionData.branch || undefined, commitHash: versionData.commitHash || undefined, isDev: versionData.isDev, packageName: versionData.packageName, description: versionData.description, instancePath: versionData.instancePath || undefined })] })) : null, _jsx(SidebarCollapseToggle, { className: "shrink-0 transition-all duration-200" })] }) }), _jsx(SidebarNavItem, { icon: Home, label: t('navigation.controlCenter'), href: "/", active: pathname === '/' }), _jsx(SidebarNavItem, { icon: Wrench, label: t('navigation.tools'), href: "/tools", active: pathname === '/tools' }), featureFlags.skills ? (_jsx(SidebarNavItem, { icon: Puzzle, label: t('navigation.skills'), href: "/skills", active: pathname === '/skills' })) : null, _jsx(SidebarNavItem, { icon: Settings, label: t('navigation.settings'), href: "/settings", active: pathname === '/settings' })] }) }), _jsx(SidebarContent, { children: showExpanded ? (_jsxs("div", { className: [
67
+ ].join(' '), "aria-hidden": !expandedVisible, children: [_jsx(ShipitAiLogo, { className: "shrink-0 drop-shadow-[0_0_4px_rgba(34,211,238,0.4)]", size: 28, variant: versionData.isDev ? 'dev' : 'default' }), _jsx("span", { className: "truncate text-sm font-semibold tracking-tight", children: "ShipIT" }), _jsx(VersionBadge, { version: versionData.version, branch: versionData.branch || undefined, commitHash: versionData.commitHash || undefined, isDev: versionData.isDev, packageName: versionData.packageName, description: versionData.description, instancePath: versionData.instancePath || undefined })] })) : null, _jsx(SidebarCollapseToggle, { className: "shrink-0 transition-all duration-200" })] }) }), _jsx(SidebarNavItem, { icon: Home, label: t('navigation.controlCenter'), href: "/", active: pathname === '/' }), _jsx(SidebarNavItem, { icon: Wrench, label: t('navigation.tools'), href: "/tools", active: pathname === '/tools' }), featureFlags.skills ? (_jsx(SidebarNavItem, { icon: Puzzle, label: t('navigation.skills'), href: "/skills", active: pathname === '/skills' })) : null, _jsx(SidebarNavItem, { icon: Settings, label: t('navigation.settings'), href: "/settings", active: pathname === '/settings' })] }) }), _jsx(SidebarContent, { children: showExpanded ? (_jsx("div", { className: [
68
68
  'flex min-h-0 flex-1 flex-col overflow-hidden transition-opacity duration-200 ease-out',
69
69
  '[&_[data-sidebar=group-label]]:!mt-0 [&_[data-sidebar=group-label]]:!opacity-100 [&_[data-sidebar=group-label]]:!transition-none',
70
70
  expandedVisible ? 'opacity-100' : 'opacity-0',
71
- ].join(' '), children: [_jsx(SidebarSectionHeader, { label: t('sidebar.features') }), _jsx(ScrollArea, { className: "min-h-0 flex-1", children: repoGroups.map(({ repoPath, repoName, featureCount, statusGroups }) => (_jsx(RepoGroup, { repoName: repoName, featureCount: featureCount, children: statusGroups.map(({ statusKey, label, items }) => (_jsx(FeatureStatusGroup, { label: label, count: items.length, children: items.map((feature) => (_jsx(FeatureListItem, { name: feature.name, status: feature.status, startedAt: feature.startedAt, duration: feature.duration, agentType: feature.agentType, modelId: feature.modelId, onClick: onFeatureClick ? () => onFeatureClick(feature.featureId) : undefined }, feature.featureId))) }, statusKey))) }, repoPath))) })] })) : null }), _jsx(SidebarFooter, { className: "border-t p-2", children: _jsx(SidebarMenu, { children: _jsx(SidebarMenuItem, { children: _jsx("div", { className: "flex items-center gap-1", children: _jsxs(TooltipProvider, { children: [_jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsxs(SidebarMenuButton, { className: "w-auto flex-none", onClick: (e) => {
71
+ ].join(' '), children: repoGroups.length > 0 && (_jsxs(_Fragment, { children: [_jsx(SidebarSectionHeader, { label: t('sidebar.features') }), _jsx(ScrollArea, { className: "min-h-0 flex-1", children: repoGroups.map(({ repoPath, repoName, featureCount, statusGroups }) => (_jsx(RepoGroup, { repoName: repoName, featureCount: featureCount, children: statusGroups.map(({ statusKey, label, items }) => (_jsx(FeatureStatusGroup, { label: label, count: items.length, children: items.map((feature) => (_jsx(FeatureListItem, { name: feature.name, status: feature.status, startedAt: feature.startedAt, duration: feature.duration, agentType: feature.agentType, modelId: feature.modelId, onClick: onFeatureClick ? () => onFeatureClick(feature.featureId) : undefined }, feature.featureId))) }, statusKey))) }, repoPath))) })] })) })) : null }), _jsx(SidebarFooter, { className: "border-t p-2", children: _jsx(SidebarMenu, { children: _jsx(SidebarMenuItem, { children: _jsx("div", { className: "flex items-center gap-1", children: _jsxs(TooltipProvider, { children: [_jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsxs(SidebarMenuButton, { className: "w-auto flex-none", onClick: (e) => {
72
72
  const currentResolved = theme === 'system' ? resolvedTheme : theme;
73
73
  const goingToDark = currentResolved !== 'dark';
74
74
  const newTheme = theme === 'system'
@@ -16,7 +16,7 @@ const navItems = [
16
16
  { title: 'Settings', icon: Settings, url: '/settings' },
17
17
  ];
18
18
  export const Default = {
19
- render: () => (_jsxs(SidebarProvider, { defaultOpen: true, children: [_jsxs(Sidebar, { children: [_jsx(SidebarHeader, { children: _jsx("div", { className: "px-4 py-3 font-semibold", children: "Shipit AI" }) }), _jsx(SidebarContent, { children: _jsxs(SidebarGroup, { children: [_jsx(SidebarGroupLabel, { children: "Navigation" }), _jsx(SidebarGroupContent, { children: _jsx(SidebarMenu, { children: navItems.map((item) => (_jsx(SidebarMenuItem, { children: _jsx(SidebarMenuButton, { asChild: true, children: _jsxs("a", { href: item.url, children: [_jsx(item.icon, {}), _jsx("span", { children: item.title })] }) }) }, item.title))) }) })] }) }), _jsx(SidebarFooter, { children: _jsx("div", { className: "text-muted-foreground px-4 py-2 text-xs", children: "v1.0.0" }) })] }), _jsxs(SidebarInset, { children: [_jsxs("header", { className: "flex h-12 items-center gap-2 border-b px-4", children: [_jsx(SidebarTrigger, {}), _jsx("span", { className: "font-medium", children: "Main Content" })] }), _jsx("main", { className: "p-6", children: _jsx("p", { className: "text-muted-foreground text-sm", children: "Page content renders here." }) })] })] })),
19
+ render: () => (_jsxs(SidebarProvider, { defaultOpen: true, children: [_jsxs(Sidebar, { children: [_jsx(SidebarHeader, { children: _jsx("div", { className: "px-4 py-3 font-semibold", children: "ShipIT AI" }) }), _jsx(SidebarContent, { children: _jsxs(SidebarGroup, { children: [_jsx(SidebarGroupLabel, { children: "Navigation" }), _jsx(SidebarGroupContent, { children: _jsx(SidebarMenu, { children: navItems.map((item) => (_jsx(SidebarMenuItem, { children: _jsx(SidebarMenuButton, { asChild: true, children: _jsxs("a", { href: item.url, children: [_jsx(item.icon, {}), _jsx("span", { children: item.title })] }) }) }, item.title))) }) })] }) }), _jsx(SidebarFooter, { children: _jsx("div", { className: "text-muted-foreground px-4 py-2 text-xs", children: "v1.0.0" }) })] }), _jsxs(SidebarInset, { children: [_jsxs("header", { className: "flex h-12 items-center gap-2 border-b px-4", children: [_jsx(SidebarTrigger, {}), _jsx("span", { className: "font-medium", children: "Main Content" })] }), _jsx("main", { className: "p-6", children: _jsx("p", { className: "text-muted-foreground text-sm", children: "Page content renders here." }) })] })] })),
20
20
  };
21
21
  export const Collapsed = {
22
22
  render: () => (_jsxs(SidebarProvider, { defaultOpen: false, children: [_jsxs(Sidebar, { collapsible: "icon", children: [_jsx(SidebarHeader, { children: _jsx("div", { className: "px-4 py-3 font-semibold", children: "App" }) }), _jsx(SidebarContent, { children: _jsx(SidebarGroup, { children: _jsx(SidebarGroupContent, { children: _jsx(SidebarMenu, { children: navItems.map((item) => (_jsx(SidebarMenuItem, { children: _jsx(SidebarMenuButton, { tooltip: item.title, asChild: true, children: _jsxs("a", { href: item.url, children: [_jsx(item.icon, {}), _jsx("span", { children: item.title })] }) }) }, item.title))) }) }) }) })] }), _jsxs(SidebarInset, { children: [_jsxs("header", { className: "flex h-12 items-center gap-2 border-b px-4", children: [_jsx(SidebarTrigger, {}), _jsx("span", { className: "font-medium", children: "Main Content" })] }), _jsx("main", { className: "p-6", children: _jsx("p", { className: "text-muted-foreground text-sm", children: "Sidebar is collapsed to icon mode." }) })] })] })),
@@ -11,7 +11,7 @@ import { readdir, stat } from 'node:fs/promises';
11
11
  // ── Path encoding helpers ─────────────────────────────────────────────
12
12
  /**
13
13
  * Claude Code encodes paths by replacing '/', '\', '.' with '-'.
14
- * e.g. /home/user/.shep/repos/abc → -home-user--shep-repos-abc
14
+ * e.g. /home/user/.shipit-ai/repos/abc → -home-user--shep-repos-abc
15
15
  */
16
16
  function claudeEncodePath(p) {
17
17
  return p.replace(/[/\\.]/g, '-');
@@ -19,7 +19,7 @@ function claudeEncodePath(p) {
19
19
  /**
20
20
  * Cursor encodes paths by stripping the leading '/', removing dots,
21
21
  * and replacing '/' and '\' with '-'.
22
- * e.g. /home/user/.shep/repos/abc → home-user-shep-repos-abc
22
+ * e.g. /home/user/.shipit-ai/repos/abc → home-user-shep-repos-abc
23
23
  */
24
24
  function cursorEncodePath(p) {
25
25
  return p.replace(/^\//, '').replace(/\./g, '').replace(/[/\\]/g, '-');
@@ -3,7 +3,7 @@
3
3
  *
4
4
  * Provides version and system info for the Web UI.
5
5
  * Reads the version from the DI container's VersionService — the same source
6
- * used by `shep --version`. Falls back to NEXT_PUBLIC_* env vars if the
6
+ * used by `shipit-ai --version`. Falls back to NEXT_PUBLIC_* env vars if the
7
7
  * container is unavailable.
8
8
  *
9
9
  * The VersionInfo shape mirrors src/domain/value-objects/version-info.ts
@@ -3,7 +3,7 @@
3
3
  *
4
4
  * Provides version and system info for the Web UI.
5
5
  * Reads the version from the DI container's VersionService — the same source
6
- * used by `shep --version`. Falls back to NEXT_PUBLIC_* env vars if the
6
+ * used by `shipit-ai --version`. Falls back to NEXT_PUBLIC_* env vars if the
7
7
  * container is unavailable.
8
8
  *
9
9
  * The VersionInfo shape mirrors src/domain/value-objects/version-info.ts
@@ -7,16 +7,16 @@ import type { NextRequest } from 'next/server';
7
7
  *
8
8
  * SECURITY NOTES:
9
9
  * - x-forwarded-for is client-controllable. An attacker can spoof
10
- * "X-Forwarded-For: 127.0.0.1" to bypass this check. This middleware
10
+ * "X-Forwarded-For: 127.0.0.1" to bypass this check. This proxy
11
11
  * is defense-in-depth, not the sole security boundary. The primary
12
12
  * control is binding the server to 127.0.0.1 at the network level.
13
13
  * - When request.ip is undefined (common in Next.js dev mode) and no
14
- * x-forwarded-for header is present, the middleware fails open to
14
+ * x-forwarded-for header is present, the proxy fails open to
15
15
  * avoid breaking local development. This is an accepted trade-off
16
16
  * for a developer tool that is not exposed to the public internet.
17
17
  */
18
- export declare function middleware(request: NextRequest): NextResponse | undefined;
18
+ export declare function proxy(request: NextRequest): NextResponse | undefined;
19
19
  export declare const config: {
20
20
  matcher: string;
21
21
  };
22
- //# sourceMappingURL=middleware.d.ts.map
22
+ //# sourceMappingURL=proxy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"proxy.d.ts","sourceRoot":"","sources":["../../../../src/presentation/web/proxy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE/C;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,KAAK,CAAC,OAAO,EAAE,WAAW,GAAG,YAAY,GAAG,SAAS,CAqBpE;AAED,eAAO,MAAM,MAAM;;CAElB,CAAC"}
@@ -6,15 +6,15 @@ import { NextResponse } from 'next/server';
6
6
  *
7
7
  * SECURITY NOTES:
8
8
  * - x-forwarded-for is client-controllable. An attacker can spoof
9
- * "X-Forwarded-For: 127.0.0.1" to bypass this check. This middleware
9
+ * "X-Forwarded-For: 127.0.0.1" to bypass this check. This proxy
10
10
  * is defense-in-depth, not the sole security boundary. The primary
11
11
  * control is binding the server to 127.0.0.1 at the network level.
12
12
  * - When request.ip is undefined (common in Next.js dev mode) and no
13
- * x-forwarded-for header is present, the middleware fails open to
13
+ * x-forwarded-for header is present, the proxy fails open to
14
14
  * avoid breaking local development. This is an accepted trade-off
15
15
  * for a developer tool that is not exposed to the public internet.
16
16
  */
17
- export function middleware(request) {
17
+ export function proxy(request) {
18
18
  // Only gate /api/ routes
19
19
  if (!request.nextUrl.pathname.startsWith('/api/')) {
20
20
  return undefined;
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Theme type definitions for the Shipit AI Web UI
2
+ * Theme type definitions for the ShipIT AI Web UI
3
3
  */
4
4
  export type Theme = 'light' | 'dark' | 'system';
5
5
  export interface ThemeContextValue {
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Theme type definitions for the Shipit AI Web UI
2
+ * Theme type definitions for the ShipIT AI Web UI
3
3
  */
4
4
  export const THEME_STORAGE_KEY = 'shipit-ai-theme';
5
5
  export const themes = ['light', 'dark', 'system'];
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "commands": {
3
3
  "settings": {
4
- "description": "إدارة إعدادات Shipit AI العامة",
4
+ "description": "إدارة إعدادات ShipIT AI العامة",
5
5
  "wizardFailed": "فشل معالج الإعدادات",
6
6
  "show": {
7
7
  "description": "عرض الإعدادات الحالية",
@@ -78,31 +78,31 @@
78
78
  "platformLabel": "المنصة:"
79
79
  },
80
80
  "start": {
81
- "description": "بدء واجهة Shipit AI الويب كخدمة خلفية",
81
+ "description": "بدء واجهة ShipIT AI الويب كخدمة خلفية",
82
82
  "portOption": "رقم المنفذ (1024-65535)",
83
83
  "portValidation": "يجب أن يكون المنفذ عددًا صحيحًا بين 1024 و 65535"
84
84
  },
85
85
  "stop": {
86
- "description": "إيقاف خدمة Shipit AI الويب الخلفية العاملة",
87
- "noDaemonRunning": "لا توجد خدمة Shipit AI خلفية قيد التشغيل."
86
+ "description": "إيقاف خدمة ShipIT AI الويب الخلفية العاملة",
87
+ "noDaemonRunning": "لا توجد خدمة ShipIT AI خلفية قيد التشغيل."
88
88
  },
89
89
  "restart": {
90
- "description": "إعادة تشغيل خدمة Shipit AI الويب الخلفية بسلاسة (تبدأها إذا لم تكن قيد التشغيل)",
90
+ "description": "إعادة تشغيل خدمة ShipIT AI الويب الخلفية بسلاسة (تبدأها إذا لم تكن قيد التشغيل)",
91
91
  "portOption": "رقم المنفذ (1024-65535)",
92
92
  "portValidation": "يجب أن يكون المنفذ عددًا صحيحًا بين 1024 و 65535",
93
93
  "daemonNotRunning": "الخدمة الخلفية لم تكن قيد التشغيل — جارٍ البدء..."
94
94
  },
95
95
  "status": {
96
- "description": "عرض حالة خدمة Shipit AI الويب الخلفية",
96
+ "description": "عرض حالة خدمة ShipIT AI الويب الخلفية",
97
97
  "logsOption": "عرض آخر N سطر من سجل الخدمة الخلفية (الافتراضي 50)",
98
98
  "followOption": "متابعة مخرجات سجل الخدمة الخلفية في الوقت الفعلي",
99
99
  "noLogFile": "لم يتم العثور على ملف سجل الخدمة الخلفية.",
100
100
  "expectedAt": "المتوقع في: {{path}}",
101
101
  "logEmpty": "ملف السجل فارغ.",
102
102
  "followHint": "--- متابعة daemon.log (Ctrl+C للإيقاف) ---",
103
- "notRunning": "خدمة Shipit AI الخلفية ليست قيد التشغيل.",
103
+ "notRunning": "خدمة ShipIT AI الخلفية ليست قيد التشغيل.",
104
104
  "startHint": "شغّل `shipit-ai start` لتشغيلها.",
105
- "title": "حالة خدمة Shipit AI الخلفية",
105
+ "title": "حالة خدمة ShipIT AI الخلفية",
106
106
  "pidLabel": "PID",
107
107
  "portLabel": "المنفذ",
108
108
  "urlLabel": "URL",
@@ -111,7 +111,7 @@
111
111
  "cpuLabel": "المعالج %",
112
112
  "memoryLabel": "الذاكرة (RSS)",
113
113
  "envTitle": "البيئة",
114
- "shipitAiHomeLabel": "مجلد Shipit AI الرئيسي",
114
+ "shipitAiHomeLabel": "مجلد ShipIT AI الرئيسي",
115
115
  "cliVersionLabel": "إصدار CLI",
116
116
  "nodeVersionLabel": "إصدار Node",
117
117
  "dbPathLabel": "مسار قاعدة البيانات",
@@ -119,11 +119,11 @@
119
119
  "daemonConfigLabel": "تكوين الخدمة الخلفية"
120
120
  },
121
121
  "ui": {
122
- "description": "بدء واجهة Shipit AI الويب",
122
+ "description": "بدء واجهة ShipIT AI الويب",
123
123
  "portOption": "رقم المنفذ (1024-65535)",
124
124
  "noOpenOption": "عدم فتح المتصفح تلقائيًا",
125
125
  "portValidation": "يجب أن يكون المنفذ عددًا صحيحًا بين 1024 و 65535",
126
- "heading": "واجهة Shipit AI الويب",
126
+ "heading": "واجهة ShipIT AI الويب",
127
127
  "startingDev": "جارٍ بدء خادم الويب (وضع التطوير)...",
128
128
  "starting": "جارٍ بدء خادم الويب...",
129
129
  "serverReady": "الخادم جاهز على {{url}}",
@@ -559,7 +559,7 @@
559
559
  }
560
560
  },
561
561
  "upgrade": {
562
- "description": "ترقية Shipit AI CLI إلى أحدث إصدار",
562
+ "description": "ترقية ShipIT AI CLI إلى أحدث إصدار",
563
563
  "versionCheckTimeout": "تعذر إكمال فحص الإصدار (انتهت المهلة)",
564
564
  "versionCheckFailed": "تعذر إكمال فحص الإصدار",
565
565
  "alreadyUpToDate": "محدّث بالفعل (v{{version}})",
@@ -568,7 +568,7 @@
568
568
  "stoppingDaemon": "جارٍ إيقاف الخدمة الخلفية قبل الترقية...",
569
569
  "restartingDaemon": "جارٍ إعادة تشغيل الخدمة الخلفية...",
570
570
  "daemonRestarted": "تمت إعادة تشغيل الخدمة الخلفية بنجاح.",
571
- "upgradeSuccess": "تمت ترقية Shipit AI CLI بنجاح",
571
+ "upgradeSuccess": "تمت ترقية ShipIT AI CLI بنجاح",
572
572
  "upgradeFailed": "فشلت الترقية",
573
573
  "upgradeFailedDaemonRestored": "فشلت الترقية — تمت استعادة الخدمة الخلفية على الإصدار السابق."
574
574
  },
@@ -588,17 +588,17 @@
588
588
  "installingHeading": "جارٍ تثبيت {{tool}}"
589
589
  },
590
590
  "daemon": {
591
- "alreadyRunning": "Shipit AI يعمل بالفعل على {{url}}",
592
- "heading": "واجهة Shipit AI الويب",
591
+ "alreadyRunning": "ShipIT AI يعمل بالفعل على {{url}}",
592
+ "heading": "واجهة ShipIT AI الويب",
593
593
  "startingServer": "جارٍ بدء الخادم",
594
594
  "daemonSpawned": "تم تشغيل الخدمة الخلفية على {{url}}",
595
595
  "serverReady": "الخادم جاهز على {{url}}",
596
596
  "serverMayBeStarting": "قد يكون الخادم لا يزال في مرحلة البدء على {{url}}",
597
597
  "daemonFailed": "فشلت الخدمة الخلفية في البدء (رمز الخروج {{code}}).",
598
598
  "checkLogs": "تحقق من السجلات: {{path}}",
599
- "stoppingDaemon": "جارٍ إيقاف خدمة Shipit AI الخلفية (PID {{pid}})...",
599
+ "stoppingDaemon": "جارٍ إيقاف خدمة ShipIT AI الخلفية (PID {{pid}})...",
600
600
  "sigkillFallback": "لم تتوقف الخدمة الخلفية بسلاسة، جارٍ إرسال SIGKILL...",
601
- "daemonStopped": "تم إيقاف خدمة Shipit AI الخلفية."
601
+ "daemonStopped": "تم إيقاف خدمة ShipIT AI الخلفية."
602
602
  },
603
603
  "logViewer": {
604
604
  "noLogFile": "لم يتم العثور على ملف سجل لـ {{label}}",
@@ -67,14 +67,14 @@
67
67
  },
68
68
  "wizards": {
69
69
  "onboarding": {
70
- "welcomeTitle": "مرحبًا بك في Shipit AI AI CLI",
70
+ "welcomeTitle": "مرحبًا بك في ShipIT AI CLI",
71
71
  "welcomeSubtitle": "لنقم بإعداد بيئتك في 3 خطوات سريعة.",
72
72
  "prerequisiteWarning": "متطلب أساسي: ",
73
73
  "prerequisiteLabel": "GitHub CLI (gh)",
74
74
  "prerequisiteDescription": "مطلوب لإمكانيات الإصلاح الذاتي الكاملة لـ CI/CD.",
75
75
  "installFrom": "قم بتثبيته من: ",
76
76
  "installUrl": "https://cli.github.com/",
77
- "setupComplete": "اكتمل الإعداد! أنت جاهز لاستخدام Shipit AI."
77
+ "setupComplete": "اكتمل الإعداد! أنت جاهز لاستخدام ShipIT AI."
78
78
  },
79
79
  "agentConfig": {
80
80
  "enterApiKey": "أدخل مفتاح API الخاص بك من Anthropic"
@@ -58,6 +58,8 @@
58
58
  "terminal": "الطرفية",
59
59
  "terminalDescription": "محاكي الطرفية لجلسات الصدفة",
60
60
  "systemTerminal": "طرفية النظام",
61
+ "installed": "مُثبّت",
62
+ "notInstalled": "غير مُثبّت",
61
63
  "failedToSave": "فشل حفظ إعدادات بيئة التطوير والطرفية",
62
64
  "hint": "محررك المفضل يفتح الملفات للمراجعة. إعداد الصدفة يتحكم في النصوص البرمجية المولّدة. يتم تشغيل محاكي الطرفية عند فتح جلسات صدفة من واجهة الويب.",
63
65
  "links": {
@@ -157,7 +159,7 @@
157
159
  "channels": "القنوات",
158
160
  "inApp": "داخل التطبيق",
159
161
  "inAppLabel": "داخل التطبيق",
160
- "inAppDescription": "الإشعارات داخل واجهة Shipit AI",
162
+ "inAppDescription": "الإشعارات داخل واجهة ShipIT AI",
161
163
  "subsections": {
162
164
  "agentEvents": "أحداث الوكيل",
163
165
  "pullRequestEvents": "أحداث طلب السحب"
@@ -279,7 +281,7 @@
279
281
  "emptyState": {
280
282
  "addProject": "إضافة مشروع",
281
283
  "addProjectDescription": "أضف مجلد مشروعك لفتح إمكانية إنشاء الميزات.",
282
- "addProjectDescriptionLine2": "صِف ما تحتاجه \u2014 Shipit AI يتولى الباقي.",
284
+ "addProjectDescriptionLine2": "صِف ما تحتاجه \u2014 ShipIT AI يتولى الباقي.",
283
285
  "checkingSetup": "جارٍ التحقق من الإعداد\u2026",
284
286
  "ready": "{{label}} جاهز",
285
287
  "notInstalled": "{{label}} غير مثبت",
@@ -303,7 +305,7 @@
303
305
  "loadingAgents": "جارٍ تحميل الوكلاء\u2026",
304
306
  "chooseAgent": "اختر وكيلك",
305
307
  "pickModel": "اختر نموذجًا",
306
- "selectAgentSubtitle": "اختر وكيل البرمجة بالذكاء الاصطناعي الذي تريد أن يستخدمه Shipit AI.",
308
+ "selectAgentSubtitle": "اختر وكيل البرمجة بالذكاء الاصطناعي الذي تريد أن يستخدمه ShipIT AI.",
307
309
  "chooseModelSubtitle": "اختر نموذج {{label}} المراد تشغيله.",
308
310
  "ghCliNotice": "<0>GitHub CLI (gh)</0> مطلوب لإمكانيات الإصلاح الذاتي الكاملة لـ CI/CD. <1>قم بتثبيته من هنا</1>.",
309
311
  "ghCliRequired": "GitHub CLI (gh)",
@@ -404,7 +406,7 @@
404
406
  "fromGithub": "من GitHub"
405
407
  },
406
408
  "chat": {
407
- "shipitAiChat": "محادثة Shipit AI",
409
+ "shipitAiChat": "محادثة ShipIT AI",
408
410
  "writeMessage": "اكتب رسالة...",
409
411
  "attachFiles": "إرفاق ملفات",
410
412
  "forceStopAgent": "إيقاف الوكيل إجبارياً",
@@ -563,7 +565,7 @@
563
565
  },
564
566
  "githubImport": {
565
567
  "title": "استيراد من GitHub",
566
- "description": "استنساخ مستودع GitHub وإضافته إلى Shipit AI.",
568
+ "description": "استنساخ مستودع GitHub وإضافته إلى ShipIT AI.",
567
569
  "githubUrl": "رابط GitHub",
568
570
  "urlPlaceholder": "owner/repo أو https://github.com/owner/repo",
569
571
  "searchRepositories": "البحث عن مستودعات..."